gantt-task-react-powern 0.6.32 → 0.6.33

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/types/public-types.ts","../src/helpers/date-helper.ts","../src/components/task-list/task-list-header.tsx","../src/components/task-list/task-list-table.tsx","../src/components/other/tooltip.tsx","../src/components/other/vertical-scroll.tsx","../src/components/task-list/task-list.tsx","../src/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 calendar?: 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\n/**\n * Default number of columns the chart aims to render across the chart pane\n * for each view mode. The Gantt component sizes columns so that this many\n * fit at the current pane width when the view mode is selected.\n *\n * Modes not listed (Hour / QuarterDay / HalfDay / Year) fall through to the\n * legacy `columnWidth` default.\n */\nexport const VIEW_MODE_DEFAULT_VISIBLE_COUNT: Partial<Record<ViewMode, number>> = {\n [ViewMode.Day]: 14,\n [ViewMode.Week]: 6,\n [ViewMode.Month]: 6,\n [ViewMode.Quarter]: 4,\n};\n\n/**\n * Maximum number of columns the chart will show at once, even when the user\n * widens the chart pane with the resize bar. The Gantt component clamps\n * column width upward so visible count never exceeds this — overflow becomes\n * horizontal scroll.\n */\nexport const VIEW_MODE_MAX_VISIBLE_COUNT: Partial<Record<ViewMode, number>> = {\n [ViewMode.Day]: 30,\n [ViewMode.Week]: 13,\n [ViewMode.Month]: 12,\n [ViewMode.Quarter]: 8,\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 horizontalContainerRef?: 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 horizontalContainerRef: externalHorizontalContainerRef,\n}) => {\n const internalHorizontalContainerRef = useRef<HTMLDivElement>(null);\n const horizontalContainerRef = externalHorizontalContainerRef ?? internalHorizontalContainerRef;\n const headerScrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const rowsEl = horizontalContainerRef.current;\n if (!rowsEl) return;\n const onScroll = () => {\n if (headerScrollRef.current) {\n headerScrollRef.current.scrollLeft = rowsEl.scrollLeft;\n }\n };\n rowsEl.addEventListener(\"scroll\", onScroll);\n return () => rowsEl.removeEventListener(\"scroll\", onScroll);\n }, [horizontalContainerRef]);\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: \"hidden\" }}\n >\n <div ref={headerScrollRef} style={{ overflow: \"hidden\" }}>\n <TaskListHeader {...headerProps} />\n </div>\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 if (cal.holidays && cal.holidays.length > 0) {\n return cal.holidays.includes(toDateString(date));\n } else {\n return false;\n }\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 if (cal.off_days && cal.off_days.length > 0) {\n return cal.off_days.includes(date.getDay()) || isHoliday(date, cal);\n } else {\n return false;\n }\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) || !cal.shifts) 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 // Per-row overlay layer: erases chart-wide off-day shading inside task rows\n // (so the project calendar never affects task rendering), then re-applies\n // each task's own off-day shading from its linked calendar (task.calendar).\n const rowOverlays: 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 const showPerRowOffDays =\n viewMode !== ViewMode.Month && viewMode !== ViewMode.Quarter;\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 if (showPerRowOffDays) {\n // 1) Erase chart-wide project off-day shading inside this row.\n // nth-child won't match in a sibling <g>, so compute the same fill\n // explicitly (matches grid.module.css: gridRow alternates #fff/#f5f5f5).\n const rowEven = vi.index % 2 === 1;\n const rowFill = isMilestone\n ? \"#e6e4e4\"\n : scheduleType === \"lookAhead\"\n ? \"#fff\"\n : rowEven\n ? \"#f5f5f5\"\n : \"#fff\";\n rowOverlays.push(\n <rect\n key={`row-clean-${vi.key}`}\n x={0}\n y={y}\n width={svgWidth}\n height={rowHeight}\n fill={rowFill}\n />\n );\n\n // 2) Render this task's own off-days/holidays (if it has a calendar).\n const cal = task.calendar;\n if (cal) {\n for (let i = 0, x = 0; i < dates.length; i++, x += columnWidth) {\n const pEnd = dates[i + 1] ?? addToDate(dates[i], 1, \"day\");\n const periodMs = pEnd.getTime() - dates[i].getTime();\n if (periodMs <= 0) continue;\n const cursor = new Date(dates[i]);\n cursor.setHours(0, 0, 0, 0);\n while (cursor.getTime() < pEnd.getTime()) {\n if (isOffDay(cursor, cal)) {\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 rowOverlays.push(\n <rect\n key={`row-offday-${vi.key}-${cursor.getTime()}`}\n x={rtl ? x + columnWidth - (startFrac * columnWidth + rw) : x + startFrac * columnWidth}\n y={y}\n width={rw}\n height={rowHeight}\n fill={weekendColor}\n />\n );\n }\n }\n cursor.setDate(cursor.getDate() + 1);\n }\n }\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=\"rowOverlays\">{rowOverlays}</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 // Only blend a coord when that bar actually exists (positive width). A bar\n // whose dates are the 1970 epoch sentinel clamps its x-coords to 0 (the\n // chart's left edge); a `>= 0` check would let that 0 drag the endpoint left.\n const candidates: number[] = [];\n if (t.x2 > t.x1) candidates.push(t.x1);\n if (t.actualx2 > t.actualx1) 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 // Mirror minX: only blend a coord when that bar actually exists (positive\n // width), so a 1970-epoch sentinel bar (x-coords clamped to 0) can't apply.\n const candidates: number[] = [];\n if (t.x2 > t.x1) candidates.push(t.x2);\n if (t.actualx2 > t.actualx1) 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.calendar && 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.calendar);\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.calendar &&\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.calendar\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.calendar &&\n (ganttEvent.action === \"end\" ||\n ganttEvent.action === \"start\" ||\n ganttEvent.action === \"move\")\n ) {\n const cal = finalTask.calendar!;\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.calendar &&\n (action === \"move\" || action === \"end\" || action === \"start\")\n ) {\n const cal = newChangedTask.calendar;\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 // Follow the live drag preview only while this task is actively being\n // dragged — never on hover/select (otherwise hover would move the arrow,\n // since the hovered changedTask carries the bar's render y of 0).\n const a = ganttEvent.action;\n const isDraggingThis =\n (a === \"move\" || a === \"start\" || a === \"end\" || a === \"progress\") &&\n !!ganttEvent.changedTask &&\n ganttEvent.changedTask.id === _task.id;\n // Keep the stable vertical position (changedTask.y is 0).\n const _live = isDraggingThis\n ? { ...ganttEvent.changedTask!, y: _task.y }\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 const taskTo = tasks[child.index];\n // Both endpoints must have a drawable, in-range bar. A task fully\n // outside the visible date window clamps its x-coords (both to 0, the\n // left edge, or both to the right edge), which would otherwise send\n // the arrow shooting off toward the chart's left/right edge.\n const fromDrawable =\n task.x2 > task.x1 || task.actualx2 > task.actualx1;\n const toDrawable =\n !!taskTo &&\n (taskTo.x2 > taskTo.x1 || taskTo.actualx2 > taskTo.actualx1);\n if (fromDrawable && toDrawable) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow =>\n arrow.taskId === taskTo.id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\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 ${taskTo.id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={taskTo}\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\n\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=\"blue\"\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 {\n ganttDateRange,\n seedDates,\n VIEW_MODE_DEFAULT_VISIBLE_COUNT,\n VIEW_MODE_MAX_VISIBLE_COUNT,\n} 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: columnWidthProp,\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 const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const isDraggingTable = useRef(false);\n // True once the user has dragged the resize bar — after that, columnWidth\n // is locked so pane resizing grows the visible count instead of fattening cols.\n const userResizedRef = 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 tableHorizontalContainerRef = 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 (tableHorizontalContainerRef.current) {\n setTableScrollableWidth(tableHorizontalContainerRef.current.scrollWidth);\n } else if (tableInnerScrollRef.current) {\n setTableScrollableWidth(tableInnerScrollRef.current.scrollWidth);\n }\n }, [taskListWidth, listCellWidth]);\n\n const handleTableResizeMouseDown = (e: React.MouseEvent) => {\n isDraggingTable.current = true;\n userResizedRef.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 = tableHorizontalContainerRef.current?.scrollWidth ?? 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 // Auto-size columns per view-mode so the spec'd default count fits the\n // current chart pane. Keep re-snapping against svgContainerWidth while the\n // initial layout settles; once the user drags the resize bar (or the view\n // mode is settled), stop re-snapping so pane resizing grows the visible\n // count instead of fattening the columns.\n const [computedColumnWidth, setComputedColumnWidth] = useState<number | null>(null);\n const computedForViewModeRef = useRef<ViewMode | null>(null);\n useEffect(() => {\n if (columnWidthProp != null) return;\n if (svgContainerWidth <= 0) return;\n const minVisible = VIEW_MODE_DEFAULT_VISIBLE_COUNT[viewMode];\n if (!minVisible) return;\n const maxVisible = VIEW_MODE_MAX_VISIBLE_COUNT[viewMode];\n\n // View switch: carry the *relative* zoom across the switch instead of\n // snapping to whichever edge the carried-over width violates. Measure where\n // the previous view's visible count sat within its own [default..max] band\n // (t in [0,1]) and remap that same fraction onto the new view's band, then\n // convert the target visible count back to a column width. e.g. a Month view\n // sitting halfway between its default and max maps to a Day view sitting\n // halfway between its default and max. Mark it user-resized so the settling\n // branch below doesn't re-snap it back to the default count on the next render.\n const prevViewMode = computedForViewModeRef.current;\n if (\n prevViewMode != null &&\n prevViewMode !== viewMode &&\n computedColumnWidth != null\n ) {\n const visible = svgContainerWidth / computedColumnWidth;\n const oldMin = VIEW_MODE_DEFAULT_VISIBLE_COUNT[prevViewMode];\n const oldMax = VIEW_MODE_MAX_VISIBLE_COUNT[prevViewMode];\n\n let next = computedColumnWidth;\n if (maxVisible && oldMin != null && oldMax != null && oldMax > oldMin) {\n // Fraction through the old band: 0 = at its default count, 1 = at its max.\n const t = Math.min(1, Math.max(0, (visible - oldMin) / (oldMax - oldMin)));\n const targetVisible = minVisible + t * (maxVisible - minVisible);\n next = Math.floor(svgContainerWidth / targetVisible);\n } else if (visible < minVisible) {\n // Fallback (old view has no band): snap to the violated edge.\n next = Math.floor(svgContainerWidth / minVisible);\n } else if (maxVisible && visible > maxVisible) {\n next = Math.ceil(svgContainerWidth / maxVisible);\n }\n next = Math.max(20, next);\n computedForViewModeRef.current = viewMode;\n userResizedRef.current = true;\n if (next !== computedColumnWidth) {\n setComputedColumnWidth(next);\n }\n return;\n }\n\n // First computation / same-view settling: auto-size columns so the default\n // count fits, until the user drags the resize bar.\n const alreadySnappedForView =\n computedForViewModeRef.current === viewMode && computedColumnWidth != null;\n if (userResizedRef.current && alreadySnappedForView) return;\n const next = Math.max(20, Math.floor(svgContainerWidth / minVisible));\n computedForViewModeRef.current = viewMode;\n if (next !== computedColumnWidth) {\n setComputedColumnWidth(next);\n }\n }, [viewMode, svgContainerWidth, columnWidthProp, computedColumnWidth]);\n const columnWidth = columnWidthProp ?? computedColumnWidth ?? 60;\n\n // effectiveColumnWidth has two modes:\n // 1. Consumer supplied columnWidth → keep legacy fill-viewport stretch so\n // content never leaves a gap on the right edge.\n // 2. Library-computed columnWidth → enforce the per-mode max-visible cap\n // by lifting column width when the pane is wider than (max * columnWidth),\n // so visible count never exceeds VIEW_MODE_MAX_VISIBLE_COUNT.\n // Math.ceil keeps 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 if (columnWidthProp == null) {\n const maxVisible = VIEW_MODE_MAX_VISIBLE_COUNT[viewMode];\n if (maxVisible) {\n return Math.max(columnWidth, Math.ceil(svgContainerWidth / maxVisible));\n }\n return columnWidth;\n }\n return Math.max(columnWidth, Math.ceil(svgContainerWidth / dateSetup.dates.length));\n }, [columnWidth, columnWidthProp, viewMode, 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 projectCalendar?.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 projectCalendar,\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 && !ignoreScrollEvent) {\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,\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,\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,\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 horizontalContainerRef: tableHorizontalContainerRef,\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 (tableHorizontalContainerRef.current) {\n tableHorizontalContainerRef.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 // Exclude tasks that must not sit on a critical path:\n // - Milestones: zero-duration markers, not work; they also frequently have an\n // unset (date-0) start that injects a bogus multi-decade span.\n // - Phantom tasks with no real schedule: a zero-length bar whose start sits at\n // the epoch (date 0 = unset). As a predecessor of a long successor they\n // inherit its full span with no overlap to cancel it, falsely dominating.\n // Bars still render from `tasks`; this only excludes them from path computation.\n leafTasks = leafTasks.filter(\n t =>\n t.type !== \"milestone\" &&\n (t.start.getTime() !== 0 || t.end.getTime() !== 0)\n );\n\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 if (taskMap[dependents[j]].task.calendar) {\n\n // Off Day Calculation\n if (taskMap[dependents[j]].task.calendar.off_days && taskMap[dependents[j]].task.calendar.off_days.length) {\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\n // Holiday Calculation\n if (taskMap[dependents[j]].task.calendar.holidays && taskMap[dependents[j]].task.calendar.holidays.length) {\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 }\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 if (paths && paths.length) {\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 } else {\n // Dep has no paths of its own (it's a terminal leaf) → seed an immediate\n // child path ending at this dep.\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","VIEW_MODE_DEFAULT_VISIBLE_COUNT","Day","Week","Month","Quarter","VIEW_MODE_MAX_VISIBLE_COUNT","ganttDateRange","tasks","viewMode","preStepsCount","newStartDate","start","getTime","newEndDate","end","task","actualStart","actualEnd","Year","endQStart","getMonday","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","externalHorizontalContainerRef","horizontalContainerRef","internalHorizontalContainerRef","headerScrollRef","rowsEl","scrollLeft","addEventListener","removeEventListener","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","rowOverlays","gridRowLine","showPerRowOffDays","isMilestone","rowClass","darkerGridRow","gridRowLookAhead","gridRow","rowEven","rowFill","calendar","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","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","handleBarEventStart","error","console","getArrows","isCritical","criticalPathType","_task","a","isDraggingThis","_live","fromDrawable","toDrawable","criticalTask","criticalPathArrows","arrow","yFrom","yTo","minY","maxY","Boolean","lineX","totalHeight","pointerEvents","opacity","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","buffer","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","Gantt","columnWidthProp","listCellWidth","barFill","viewDate","onSelect","delayToRender","shouldNotShowLoadingOverlay","wrapperRef","isDraggingTable","userResizedRef","dragStartX","dragStartWidth","dragMaxWidth","Infinity","tableContainerWidth","setTableContainerWidth","tableInnerScrollRef","tableHorizontalContainerRef","tableHScrollRef","tableScrollableWidth","setTableScrollableWidth","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","scrollWidth","handleTableResizeMouseDown","onMouseMove","newWidth","onMouseUp","document","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","debounceRef","handleBarTasksUpdate","failedTask","computedColumnWidth","setComputedColumnWidth","computedForViewModeRef","minVisible","maxVisible","prevViewMode","visible","oldMin","oldMax","targetVisible","alreadySnappedForView","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","log","successVal","dependents","computeCriticalPath","taskChainList","paths","b","duration","primaryLeaf","parent","primaryDuration","nextPath","newDuration","visited","secondaryLeaf","secondaryDuration","depStart","depEnd","depDuration","startWeek","endWeek","offTime","w","dayOfTheWeek","offDay","h","holiday","overlap","k","totalDuration","immediateChildDuration","longestIDLength","longestTask","startsWith","taskFromTasks","arrows","wbs","slice"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/types/public-types.ts","../src/helpers/date-helper.ts","../src/components/task-list/task-list-header.tsx","../src/components/task-list/task-list-table.tsx","../src/components/other/tooltip.tsx","../src/components/other/vertical-scroll.tsx","../src/components/task-list/task-list-columns.ts","../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 calendar?: 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\n/**\n * Default number of columns the chart aims to render across the chart pane\n * for each view mode. The Gantt component sizes columns so that this many\n * fit at the current pane width when the view mode is selected.\n *\n * Modes not listed (Hour / QuarterDay / HalfDay / Year) fall through to the\n * legacy `columnWidth` default.\n */\nexport const VIEW_MODE_DEFAULT_VISIBLE_COUNT: Partial<Record<ViewMode, number>> = {\n [ViewMode.Day]: 14,\n [ViewMode.Week]: 6,\n [ViewMode.Month]: 6,\n [ViewMode.Quarter]: 4,\n};\n\n/**\n * Maximum number of columns the chart will show at once, even when the user\n * widens the chart pane with the resize bar. The Gantt component clamps\n * column width upward so visible count never exceeds this — overflow becomes\n * horizontal scroll.\n */\nexport const VIEW_MODE_MAX_VISIBLE_COUNT: Partial<Record<ViewMode, number>> = {\n [ViewMode.Day]: 30,\n [ViewMode.Week]: 13,\n [ViewMode.Month]: 12,\n [ViewMode.Quarter]: 8,\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 columnWidths?: Record<string, number>;\n onColumnResize?: (colId: string, width: number) => void;\n}> = ({\n headerHeight,\n fontFamily,\n fontSize,\n rowWidth,\n scheduleType,\n allSelected,\n onSelectAll,\n columnWidths,\n onColumnResize,\n}) => {\n const widthOf = (colId: string, factor: number) =>\n columnWidths?.[colId] ?? parseInt(rowWidth) * factor;\n\n // Begin a column-resize drag. Mirrors the panel resizer in gantt.tsx:\n // record the start X + width, then update the column width on each mousemove.\n const startResize =\n (colId: string, startWidth: number) => (e: React.MouseEvent) => {\n if (!onColumnResize) return;\n e.preventDefault();\n e.stopPropagation();\n const startX = e.clientX;\n const onMove = (ev: MouseEvent) => {\n onColumnResize(colId, startWidth + (ev.clientX - startX));\n };\n const onUp = () => {\n document.removeEventListener(\"mousemove\", onMove);\n document.removeEventListener(\"mouseup\", onUp);\n };\n document.addEventListener(\"mousemove\", onMove);\n document.addEventListener(\"mouseup\", onUp);\n };\n\n const cell = (\n colId: string,\n factor: number,\n content: React.ReactNode,\n opts: { title?: string; resizable?: boolean } = {}\n ) => {\n const { title, resizable = true } = opts;\n const width = widthOf(colId, factor);\n return (\n <div\n className={styles.ganttTable_HeaderItem}\n style={{ minWidth: width, maxWidth: width, position: \"relative\" }}\n title={title}\n >\n {content}\n {resizable && onColumnResize && (\n <div\n className={styles.ganttTable_HeaderResizeHandle}\n style={{ height: headerHeight - 2 }}\n onMouseDown={startResize(colId, width)}\n />\n )}\n </div>\n );\n };\n\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 cell(\n \"select\",\n 0.3,\n <input\n type=\"checkbox\"\n checked={allSelected}\n onChange={e => onSelectAll(e.target.checked)}\n />,\n { resizable: false }\n )}\n {cell(\"id\", 0.8, \"ID\")}\n {cell(\"wbs\", 0.8, \"WBS Code / Activity ID\")}\n {cell(\"name\", 1.8, \"Task\")}\n {cell(\"plannedStart\", 0.6, \"Planned Start\", { title: \"Planned Start\" })}\n {cell(\"plannedEnd\", 0.6, \"Planned End\", { title: \"Planned End\" })}\n {scheduleType === \"lookAhead\" && (\n <React.Fragment>\n {cell(\"actualStart\", 0.6, \"Actual Start\", { title: \"Actual Start\" })}\n {cell(\"actualEnd\", 0.6, \"Actual End\", { title: \"Actual End\" })}\n </React.Fragment>\n )}\n {scheduleType === \"main\" && (\n <React.Fragment>\n {cell(\"percentComplete\", 0.6, \"% Complete\", { title: \"% Complete\" })}\n {cell(\"plannedDuration\", 0.6, \"Planned Duration\", {\n title: \"Planned Duration\",\n })}\n {cell(\"remainingDuration\", 0.7, \"Remaining Duration\", {\n title: \"Remaining Duration\",\n })}\n {cell(\"actualDuration\", 0.6, \"Actual Duration\", {\n title: \"Actual Duration\",\n })}\n {cell(\"durationType\", 0.8, \"Duration Type\", {\n title: \"Duration Type\",\n })}\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 columnWidths?: Record<string, number>;\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 columnWidths,\n}) => {\n // Per-column widths shared with the header (so resize stays in sync); falls\n // back to the default factor × rowWidth when no width has been set.\n const widthOf = (colId: string, factor: number) =>\n columnWidths?.[colId] ?? parseInt(rowWidth) * factor;\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: widthOf(\"select\", 0.3),\n maxWidth: widthOf(\"select\", 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: widthOf(\"id\", 0.8),\n maxWidth: widthOf(\"id\", 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: widthOf(\"wbs\", 0.8),\n maxWidth: widthOf(\"wbs\", 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: widthOf(\"name\", 1.8),\n maxWidth: widthOf(\"name\", 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: widthOf(\"plannedStart\", 0.6),\n maxWidth: widthOf(\"plannedStart\", 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: widthOf(\"plannedEnd\", 0.6),\n maxWidth: widthOf(\"plannedEnd\", 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: widthOf(\"actualStart\", 0.6),\n maxWidth: widthOf(\"actualStart\", 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: widthOf(\"actualEnd\", 0.6),\n maxWidth: widthOf(\"actualEnd\", 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: widthOf(\"percentComplete\", 0.6),\n maxWidth: widthOf(\"percentComplete\", 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: widthOf(\"plannedDuration\", 0.6),\n maxWidth: widthOf(\"plannedDuration\", 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: widthOf(\"remainingDuration\", 0.7),\n maxWidth: widthOf(\"remainingDuration\", 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: widthOf(\"actualDuration\", 0.6),\n maxWidth: widthOf(\"actualDuration\", 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: widthOf(\"durationType\", 0.8),\n maxWidth: widthOf(\"durationType\", 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","/**\n * Single source of truth for the left task-list columns: their stable ids and\n * default width factors (multiplied by `parseInt(rowWidth)`). Both the header\n * and the table read these ids when looking up per-column widths so resizing a\n * column keeps the two in sync.\n */\nexport type TaskListColumn = {\n id: string;\n factor: number;\n};\n\nexport function getTaskListColumns(\n scheduleType: string,\n hasCheckbox: boolean\n): TaskListColumn[] {\n const columns: TaskListColumn[] = [];\n\n if (hasCheckbox) columns.push({ id: \"select\", factor: 0.3 });\n\n columns.push(\n { id: \"id\", factor: 0.8 },\n { id: \"wbs\", factor: 0.8 },\n { id: \"name\", factor: 1.8 },\n { id: \"plannedStart\", factor: 0.6 },\n { id: \"plannedEnd\", factor: 0.6 }\n );\n\n if (scheduleType === \"lookAhead\") {\n columns.push(\n { id: \"actualStart\", factor: 0.6 },\n { id: \"actualEnd\", factor: 0.6 }\n );\n }\n\n if (scheduleType === \"main\") {\n columns.push(\n { id: \"percentComplete\", factor: 0.6 },\n { id: \"plannedDuration\", factor: 0.6 },\n { id: \"remainingDuration\", factor: 0.7 },\n { id: \"actualDuration\", factor: 0.6 },\n { id: \"durationType\", factor: 0.8 }\n );\n }\n\n return columns;\n}\n\n/** Minimum width (px) a column can be dragged down to. */\nexport const MIN_COLUMN_WIDTH = 40;\n\n/** Build the default width map (px) for the current column set. */\nexport function buildDefaultColumnWidths(\n scheduleType: string,\n hasCheckbox: boolean,\n rowWidth: string\n): Record<string, number> {\n const base = parseInt(rowWidth) || 0;\n const widths: Record<string, number> = {};\n for (const col of getTaskListColumns(scheduleType, hasCheckbox)) {\n widths[col.id] = base * col.factor;\n }\n return widths;\n}\n","import React, { useEffect, useMemo, 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 { buildDefaultColumnWidths, MIN_COLUMN_WIDTH } from \"./task-list-columns\";\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 columnWidths?: Record<string, number>;\n onColumnResize?: (colId: string, width: number) => 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 columnWidths?: Record<string, number>;\n }>;\n containerWidth?: number;\n containerMaxWidth?: number;\n onContentWidthChange?: (width: number) => void;\n innerScrollRef?: React.RefObject<HTMLDivElement>;\n horizontalContainerRef?: 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 containerMaxWidth,\n onContentWidthChange,\n innerScrollRef,\n horizontalContainerRef: externalHorizontalContainerRef,\n}) => {\n const internalHorizontalContainerRef = useRef<HTMLDivElement>(null);\n const horizontalContainerRef = externalHorizontalContainerRef ?? internalHorizontalContainerRef;\n const headerScrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const rowsEl = horizontalContainerRef.current;\n if (!rowsEl) return;\n const onScroll = () => {\n if (headerScrollRef.current) {\n headerScrollRef.current.scrollLeft = rowsEl.scrollLeft;\n }\n };\n rowsEl.addEventListener(\"scroll\", onScroll);\n return () => rowsEl.removeEventListener(\"scroll\", onScroll);\n }, [horizontalContainerRef]);\n const [selectedTasks, setSelectedTasks] = useState<string[]>([]);\n\n // Per-column widths (px), shared by the header and table so resizing a column\n // keeps both in sync. Seeded from the column factors × rowWidth.\n const hasCheckbox = !!onMultiSelect;\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>(() =>\n buildDefaultColumnWidths(scheduleType, hasCheckbox, rowWidth)\n );\n\n // Re-seed only when the column SET changes (scheduleType / multiselect adds or\n // removes a column), preserving widths the user already set for columns that\n // persist. Returning `prev` when the set is unchanged avoids needless renders.\n useEffect(() => {\n const defaults = buildDefaultColumnWidths(scheduleType, hasCheckbox, rowWidth);\n setColumnWidths(prev => {\n const ids = Object.keys(defaults);\n const sameSet =\n ids.length === Object.keys(prev).length && ids.every(id => id in prev);\n if (sameSet) return prev;\n const next: Record<string, number> = {};\n for (const id of ids) next[id] = prev[id] ?? defaults[id];\n return next;\n });\n }, [scheduleType, hasCheckbox, rowWidth]);\n\n const handleColumnResize = (colId: string, width: number) => {\n setColumnWidths(prev => ({\n ...prev,\n [colId]: Math.max(MIN_COLUMN_WIDTH, width),\n }));\n };\n\n // True total width of all columns. Reported up so the parent can cap the table\n // at its content (no white space past the last column) and size the horizontal\n // scrollbar exactly — both without relying on a laggy scrollWidth measurement.\n const contentWidth = useMemo(\n () => Object.values(columnWidths).reduce((sum, w) => sum + w, 0),\n [columnWidths]\n );\n useEffect(() => {\n onContentWidthChange?.(contentWidth);\n }, [contentWidth, onContentWidthChange]);\n\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 columnWidths,\n onColumnResize: handleColumnResize,\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 columnWidths,\n };\n\n return (\n <div\n ref={taskListRef}\n style={\n containerWidth != null || containerMaxWidth != null\n ? {\n ...(containerWidth != null ? { width: containerWidth } : {}),\n ...(containerMaxWidth != null ? { maxWidth: containerMaxWidth } : {}),\n overflow: \"hidden\",\n flexShrink: 0,\n }\n : {}\n }\n >\n <div\n ref={innerScrollRef}\n className={styles.hideScrollbar}\n style={{ overflowX: \"hidden\" }}\n >\n <div ref={headerScrollRef} style={{ overflow: \"hidden\" }}>\n <TaskListHeader {...headerProps} />\n </div>\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 if (cal.holidays && cal.holidays.length > 0) {\n return cal.holidays.includes(toDateString(date));\n } else {\n return false;\n }\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 if (cal.off_days && cal.off_days.length > 0) {\n return cal.off_days.includes(date.getDay()) || isHoliday(date, cal);\n } else {\n return false;\n }\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) || !cal.shifts) 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 // Estimate this (last) column's end by extrapolating the previous step.\n // A single-column range has no previous date, so fall back to one day\n // instead of dereferencing dates[-1].\n const prev = dates[i - 1];\n const step = prev ? date.getTime() - prev.getTime() : 86400000;\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 — only Day & Week views get the darker week-start\n // line; Day also dashes the intra-week days, every other view uses the light\n // default tick. ===\n const isDayView = viewMode === ViewMode.Day;\n const isWeekView = viewMode === ViewMode.Week;\n const tickLines = dates.map((date, i) => {\n let tickClass = styles.gridTick;\n if (isDayView) {\n tickClass =\n date.getDay() === weekStartDay\n ? styles.gridTickWeekStart\n : styles.gridTickDashed;\n } else if (isWeekView) {\n tickClass = styles.gridTickWeekStart;\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 // Per-row overlay layer: erases chart-wide off-day shading inside task rows\n // (so the project calendar never affects task rendering), then re-applies\n // each task's own off-day shading from its linked calendar (task.calendar).\n const rowOverlays: 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 const showPerRowOffDays =\n viewMode !== ViewMode.Month && viewMode !== ViewMode.Quarter;\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 if (showPerRowOffDays) {\n // 1) Erase chart-wide project off-day shading inside this row.\n // nth-child won't match in a sibling <g>, so compute the same fill\n // explicitly (matches grid.module.css: gridRow alternates #fff/#f5f5f5).\n const rowEven = vi.index % 2 === 1;\n const rowFill = isMilestone\n ? \"#e6e4e4\"\n : scheduleType === \"lookAhead\"\n ? \"#fff\"\n : rowEven\n ? \"#f5f5f5\"\n : \"#fff\";\n rowOverlays.push(\n <rect\n key={`row-clean-${vi.key}`}\n x={0}\n y={y}\n width={svgWidth}\n height={rowHeight}\n fill={rowFill}\n />\n );\n\n // 2) Render this task's own off-days/holidays (if it has a calendar).\n const cal = task.calendar;\n if (cal) {\n for (let i = 0, x = 0; i < dates.length; i++, x += columnWidth) {\n const pEnd = dates[i + 1] ?? addToDate(dates[i], 1, \"day\");\n const periodMs = pEnd.getTime() - dates[i].getTime();\n if (periodMs <= 0) continue;\n const cursor = new Date(dates[i]);\n cursor.setHours(0, 0, 0, 0);\n while (cursor.getTime() < pEnd.getTime()) {\n if (isOffDay(cursor, cal)) {\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 rowOverlays.push(\n <rect\n key={`row-offday-${vi.key}-${cursor.getTime()}`}\n x={rtl ? x + columnWidth - (startFrac * columnWidth + rw) : x + startFrac * columnWidth}\n y={y}\n width={rw}\n height={rowHeight}\n fill={weekendColor}\n />\n );\n }\n }\n cursor.setDate(cursor.getDate() + 1);\n }\n }\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=\"rowOverlays\">{rowOverlays}</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 isOffDay,\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 weekendColor: string;\n};\n\nexport const Calendar: React.FC<CalendarProps> = ({\n dateSetup,\n locale,\n viewMode,\n rtl,\n headerHeight,\n columnWidth,\n fontFamily,\n fontSize,\n projectCalendar,\n weekendColor,\n}) => {\n /** Off-day test — mirrors GridBody.isDayOff so header shading matches the body. */\n const isDayOff = (date: Date): boolean => {\n if (projectCalendar) return isOffDay(date, projectCalendar);\n \n return false; // default to no off days if no calendar provided, to avoid false positives on custom view modes like Hourly\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 // Off-day shading on the day-number row (bottom band of the header).\n // Drawn into extraValues, which renders before tickLines so the solid\n // week-start line stays on top of the gray. Matches the grid body shading.\n if (isDayOff(date)) {\n offDayRects.push(\n <rect\n key={`offday-header-${i}`}\n x={columnWidth * i}\n y={topDefaultHeight}\n width={columnWidth}\n height={headerHeight - topDefaultHeight}\n fill={weekendColor}\n />\n );\n }\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 // Only blend a coord when that bar actually exists (positive width). A bar\n // whose dates are the 1970 epoch sentinel clamps its x-coords to 0 (the\n // chart's left edge); a `>= 0` check would let that 0 drag the endpoint left.\n const candidates: number[] = [];\n if (t.x2 > t.x1) candidates.push(t.x1);\n if (t.actualx2 > t.actualx1) 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 // Mirror minX: only blend a coord when that bar actually exists (positive\n // width), so a 1970-epoch sentinel bar (x-coords clamped to 0) can't apply.\n const candidates: number[] = [];\n if (t.x2 > t.x1) candidates.push(t.x2);\n if (t.actualx2 > t.actualx1) 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 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.calendar && 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.calendar);\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.calendar &&\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.calendar\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 if (dates.length < 2) {\n // Degenerate single-column range (e.g. lookAhead with start === end):\n // there's no second date to derive the column span from, so assume a\n // one-day column instead of dereferencing dates[1].\n setXStep((timeStep * columnWidth) / 86400000);\n return;\n }\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.calendar &&\n (ganttEvent.action === \"end\" ||\n ganttEvent.action === \"start\" ||\n ganttEvent.action === \"move\")\n ) {\n const cal = finalTask.calendar!;\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.calendar &&\n (action === \"move\" || action === \"end\" || action === \"start\")\n ) {\n const cal = newChangedTask.calendar;\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 * Entry point for taskbar interaction events\n * (select, delete, drag/move start, click, double-click, hover, etc.).\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 // Follow the live drag preview only while this task is actively being\n // dragged — never on hover/select (otherwise hover would move the arrow,\n // since the hovered changedTask carries the bar's render y of 0).\n const a = ganttEvent.action;\n const isDraggingThis =\n (a === \"move\" || a === \"start\" || a === \"end\" || a === \"progress\") &&\n !!ganttEvent.changedTask &&\n ganttEvent.changedTask.id === _task.id;\n // Keep the stable vertical position (changedTask.y is 0).\n const _live = isDraggingThis\n ? { ...ganttEvent.changedTask!, y: _task.y }\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 const taskTo = tasks[child.index];\n // Both endpoints must have a drawable, in-range bar. A task fully\n // outside the visible date window clamps its x-coords (both to 0, the\n // left edge, or both to the right edge), which would otherwise send\n // the arrow shooting off toward the chart's left/right edge.\n const fromDrawable =\n task.x2 > task.x1 || task.actualx2 > task.actualx1;\n const toDrawable =\n !!taskTo &&\n (taskTo.x2 > taskTo.x1 || taskTo.actualx2 > taskTo.actualx1);\n if (fromDrawable && toDrawable) {\n const criticalTask = task.criticalPathArrows?.find(\n arrow =>\n arrow.taskId === taskTo.id &&\n (!!arrow.criticalPathType\n ? arrow.criticalPathType === criticalPathType\n : !criticalPathType)\n );\n\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 ${taskTo.id}${\n isCritical ? \"-critical\" : \"\"\n }`}\n taskFrom={task}\n taskTo={taskTo}\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\n\n\n return (\n <g className=\"content\">\n {/* Vertical blue line for the slider-time marker */}\n {lineX !== null && lineX > 0 && (\n <line\n x1={lineX}\n y1={0}\n x2={lineX}\n y2={totalHeight}\n stroke=\"blue\"\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 {\n ganttDateRange,\n seedDates,\n VIEW_MODE_DEFAULT_VISIBLE_COUNT,\n VIEW_MODE_MAX_VISIBLE_COUNT,\n} 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\n// Minimum share of the wrapper width reserved for the Gantt chart. The task-list\n// table is capped at the remaining width; past that the table scrolls horizontally\n// instead of shrinking the chart below this floor.\nconst GANTT_MIN_WIDTH_RATIO = 0.4;\n// Width (px) of the column-resize divider rendered between the table and chart.\nconst TABLE_GANTT_DIVIDER_WIDTH = 20;\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: columnWidthProp,\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 const wrapperRef = useRef<HTMLDivElement>(null);\n const taskListRef = useRef<HTMLDivElement>(null);\n const isDraggingTable = useRef(false);\n // True once the user has dragged the resize bar — after that, columnWidth\n // is locked so pane resizing grows the visible count instead of fattening cols.\n const userResizedRef = 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 tableHorizontalContainerRef = useRef<HTMLDivElement>(null);\n const tableHScrollRef = useRef<HTMLDivElement>(null);\n // True total width of the table's columns, reported up by TaskList. Drives both\n // the table width cap (no white space) and the horizontal scrollbar extent.\n const [tableContentWidth, setTableContentWidth] = 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 const [wrapperWidth, setWrapperWidth] = useState(0);\n\n // Cap the table at the wrapper width minus the chart's reserved minimum share\n // (and the resize divider). Infinity until the wrapper has been measured.\n const maxTableWidth =\n wrapperWidth > 0\n ? Math.max(\n 100,\n wrapperWidth * (1 - GANTT_MIN_WIDTH_RATIO) - TABLE_GANTT_DIVIDER_WIDTH\n )\n : Infinity;\n\n // The table may never be wider than its columns (no white space past the last\n // column) nor wider than maxTableWidth (chart keeps its 40% floor).\n const tableCap = Math.min(\n maxTableWidth,\n tableContentWidth > 0 ? tableContentWidth : Infinity\n );\n\n const handleTableResizeMouseDown = (e: React.MouseEvent) => {\n isDraggingTable.current = true;\n userResizedRef.current = true;\n dragStartX.current = e.clientX;\n dragStartWidth.current = tableContainerWidth ?? (taskListRef.current?.offsetWidth ?? 0);\n // Never let a drag exceed the columns' total width or shrink the chart below\n // its floor — both captured by tableCap.\n dragMaxWidth.current = tableCap;\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 // Auto-size columns per view-mode so the spec'd default count fits the\n // current chart pane. Keep re-snapping against svgContainerWidth while the\n // initial layout settles; once the user drags the resize bar (or the view\n // mode is settled), stop re-snapping so pane resizing grows the visible\n // count instead of fattening the columns.\n const [computedColumnWidth, setComputedColumnWidth] = useState<number | null>(null);\n const computedForViewModeRef = useRef<ViewMode | null>(null);\n useEffect(() => {\n if (columnWidthProp != null) return;\n if (svgContainerWidth <= 0) return;\n const minVisible = VIEW_MODE_DEFAULT_VISIBLE_COUNT[viewMode];\n if (!minVisible) return;\n const maxVisible = VIEW_MODE_MAX_VISIBLE_COUNT[viewMode];\n\n // View switch: carry the *relative* zoom across the switch instead of\n // snapping to whichever edge the carried-over width violates. Measure where\n // the previous view's visible count sat within its own [default..max] band\n // (t in [0,1]) and remap that same fraction onto the new view's band, then\n // convert the target visible count back to a column width. e.g. a Month view\n // sitting halfway between its default and max maps to a Day view sitting\n // halfway between its default and max. Mark it user-resized so the settling\n // branch below doesn't re-snap it back to the default count on the next render.\n const prevViewMode = computedForViewModeRef.current;\n if (\n prevViewMode != null &&\n prevViewMode !== viewMode &&\n computedColumnWidth != null\n ) {\n const visible = svgContainerWidth / computedColumnWidth;\n const oldMin = VIEW_MODE_DEFAULT_VISIBLE_COUNT[prevViewMode];\n const oldMax = VIEW_MODE_MAX_VISIBLE_COUNT[prevViewMode];\n\n let next = computedColumnWidth;\n if (maxVisible && oldMin != null && oldMax != null && oldMax > oldMin) {\n // Fraction through the old band: 0 = at its default count, 1 = at its max.\n const t = Math.min(1, Math.max(0, (visible - oldMin) / (oldMax - oldMin)));\n const targetVisible = minVisible + t * (maxVisible - minVisible);\n next = Math.floor(svgContainerWidth / targetVisible);\n } else if (visible < minVisible) {\n // Fallback (old view has no band): snap to the violated edge.\n next = Math.floor(svgContainerWidth / minVisible);\n } else if (maxVisible && visible > maxVisible) {\n next = Math.ceil(svgContainerWidth / maxVisible);\n }\n next = Math.max(20, next);\n computedForViewModeRef.current = viewMode;\n userResizedRef.current = true;\n if (next !== computedColumnWidth) {\n setComputedColumnWidth(next);\n }\n return;\n }\n\n // First computation / same-view settling: auto-size columns so the default\n // count fits, until the user drags the resize bar.\n const alreadySnappedForView =\n computedForViewModeRef.current === viewMode && computedColumnWidth != null;\n if (userResizedRef.current && alreadySnappedForView) return;\n const next = Math.max(20, Math.floor(svgContainerWidth / minVisible));\n computedForViewModeRef.current = viewMode;\n if (next !== computedColumnWidth) {\n setComputedColumnWidth(next);\n }\n }, [viewMode, svgContainerWidth, columnWidthProp, computedColumnWidth]);\n const columnWidth = columnWidthProp ?? computedColumnWidth ?? 60;\n\n // effectiveColumnWidth has two modes:\n // 1. Consumer supplied columnWidth → keep legacy fill-viewport stretch so\n // content never leaves a gap on the right edge.\n // 2. Library-computed columnWidth → enforce the per-mode max-visible cap\n // by lifting column width when the pane is wider than (max * columnWidth),\n // so visible count never exceeds VIEW_MODE_MAX_VISIBLE_COUNT.\n // Math.ceil keeps 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 if (columnWidthProp == null) {\n const maxVisible = VIEW_MODE_MAX_VISIBLE_COUNT[viewMode];\n if (maxVisible) {\n return Math.max(columnWidth, Math.ceil(svgContainerWidth / maxVisible));\n }\n return columnWidth;\n }\n return Math.max(columnWidth, Math.ceil(svgContainerWidth / dateSetup.dates.length));\n }, [columnWidth, columnWidthProp, viewMode, 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 projectCalendar?.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 projectCalendar,\n ]);\n // clear the pending debounce timer on unmount\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 // Keep the chart offset in sync when the task list's rendered width changes —\n // e.g. after a per-column resize. The effects above only re-run on listCellWidth,\n // so without this a column resize would leave svgContainerWidth stale. (The\n // scrollbar extent comes from tableContentWidth, reported by TaskList.)\n useEffect(() => {\n if (!listCellWidth || !taskListRef.current) return;\n if (typeof ResizeObserver === \"undefined\") return;\n const measure = () => {\n if (taskListRef.current) {\n setTaskListWidth(taskListRef.current.offsetWidth);\n }\n };\n const observer = new ResizeObserver(measure);\n observer.observe(taskListRef.current);\n measure();\n return () => observer.disconnect();\n }, [listCellWidth, scheduleType]);\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, wrapperWidth]);\n\n // Track the wrapper's own width so the table cap (maxTableWidth) follows window\n // / container resizes, not just task-list changes.\n useEffect(() => {\n const node = wrapperRef.current;\n if (!node) return;\n if (typeof ResizeObserver === \"undefined\") {\n setWrapperWidth(node.offsetWidth);\n return;\n }\n const measure = () => setWrapperWidth(node.offsetWidth);\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n measure();\n return () => observer.disconnect();\n }, []);\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 && !ignoreScrollEvent) {\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,\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,\n weekendColor,\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,\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 // Only pin a fixed width once the user has dragged the divider; otherwise let\n // the table size to its content under the cap. tableCap bounds both at the\n // columns' total width (no white space) and the 40% Gantt floor.\n containerWidth:\n userResizedRef.current && tableContainerWidth != null\n ? Math.min(tableContainerWidth, tableCap)\n : undefined,\n containerMaxWidth: tableCap === Infinity ? undefined : tableCap,\n onContentWidthChange: setTableContentWidth,\n innerScrollRef: tableInnerScrollRef,\n horizontalContainerRef: tableHorizontalContainerRef,\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 (tableHorizontalContainerRef.current) {\n tableHorizontalContainerRef.current.scrollLeft = e.currentTarget.scrollLeft;\n }\n }}\n >\n <div style={{ width: tableContentWidth }} />\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 // Exclude tasks that must not sit on a critical path:\n // - Milestones: zero-duration markers, not work; they also frequently have an\n // unset (date-0) start that injects a bogus multi-decade span.\n // - Phantom tasks with no real schedule: a zero-length bar whose start sits at\n // the epoch (date 0 = unset). As a predecessor of a long successor they\n // inherit its full span with no overlap to cancel it, falsely dominating.\n // Bars still render from `tasks`; this only excludes them from path computation.\n leafTasks = leafTasks.filter(\n t =>\n t.type !== \"milestone\" &&\n (t.start.getTime() !== 0 || t.end.getTime() !== 0)\n );\n\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 if (taskMap[dependents[j]].task.calendar) {\n\n // Off Day Calculation\n if (taskMap[dependents[j]].task.calendar.off_days && taskMap[dependents[j]].task.calendar.off_days.length) {\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\n // Holiday Calculation\n if (taskMap[dependents[j]].task.calendar.holidays && taskMap[dependents[j]].task.calendar.holidays.length) {\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 }\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 if (paths && paths.length) {\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 } else {\n // Dep has no paths of its own (it's a terminal leaf) → seed an immediate\n // child path ending at this dep.\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","VIEW_MODE_DEFAULT_VISIBLE_COUNT","Day","Week","Month","Quarter","VIEW_MODE_MAX_VISIBLE_COUNT","ganttDateRange","tasks","viewMode","preStepsCount","newStartDate","start","getTime","newEndDate","end","task","actualStart","actualEnd","Year","endQStart","getMonday","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","columnWidths","onColumnResize","widthOf","colId","factor","parseInt","startResize","startWidth","e","preventDefault","stopPropagation","startX","clientX","onMove","ev","onUp","document","removeEventListener","addEventListener","cell","content","title","resizable","width","React","className","styles","ganttTable_HeaderItem","style","minWidth","maxWidth","position","ganttTable_HeaderResizeHandle","height","onMouseDown","ganttTable","ganttTable_Header","type","checked","onChange","target","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","top","left","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","marginTop","marginLeft","marginRight","getTaskListColumns","hasCheckbox","columns","MIN_COLUMN_WIDTH","buildDefaultColumnWidths","base","widths","col","TaskList","selectedTask","setSelectedTask","taskListRef","horizontalContainerClass","TaskListHeader","TaskListTable","onMultiSelect","containerWidth","containerMaxWidth","onContentWidthChange","innerScrollRef","externalHorizontalContainerRef","horizontalContainerRef","internalHorizontalContainerRef","headerScrollRef","rowsEl","scrollLeft","setSelectedTasks","setColumnWidths","defaults","prev","ids","Object","keys","sameSet","length","every","next","handleColumnResize","contentWidth","values","reduce","sum","w","pendingTaskSelect","setPendingTaskSelect","prevSelectedTasksRef","expandedTasks","virtualizer","useVirtualizer","count","getScrollElement","estimateSize","overscan","selectedTaskObjects","filter","newSelected","forEach","selected","recursiveOpen","descendants","getDescendants","add","d","Array","from","newSelectedArray","children","flatMap","child","c","handleTaskSelect","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","step","todayRects","offDayRects","weekStartDay","week_start","x","fill","pEnd","periodMs","ds","de","startFrac","endFrac","min","rw","isDayView","isWeekView","tickLines","tickClass","gridTick","gridTickWeekStart","gridTickDashed","y1","y2","rowBackgrounds","rowLines","rowOverlays","gridRowLine","showPerRowOffDays","isMilestone","rowClass","darkerGridRow","gridRowLookAhead","gridRow","rowEven","rowFill","calendar","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","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","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","onMouseEnter","onMouseLeave","TaskGanttContent","ganttEvent","svg","setGanttEvent","setFailedTask","onBarTasksUpdate","onDateChange","onProgressChange","onDelete","onCalendarError","sliderTime","createSVGPoint","setXStep","setInitEventX1Delta","isMoving","setIsMoving","dateDelta","newXStep","handleMouseMove","matrixTransform","getScreenCTM","inverse","finalTask","dragType","snapped","delta","actIntervals","actSegs","actDays","planIntervals","planSegs","planDays","handleMouseUp","operationSuccess","originalSelectedTask","newChangedTask","isNotLikeOriginal","dropType","snappedEnd","snappedStart","handleBarEventStart","error","console","getArrows","isCritical","criticalPathType","_task","a","isDraggingThis","_live","fromDrawable","toDrawable","criticalTask","criticalPathArrows","arrow","yFrom","yTo","minY","maxY","Boolean","lineX","totalHeight","pointerEvents","opacity","isDisabled","TaskGantt","gridProps","calendarProps","barProps","ganttSVGRef","verticalGanttContainerRef","newBarProps","buffer","ganttVerticalContainer","dir","xmlns","horizontalContainer","HorizontalScroll","margin","scrollWrapper","GANTT_MIN_WIDTH_RATIO","TABLE_GANTT_DIVIDER_WIDTH","Gantt","columnWidthProp","listCellWidth","barFill","viewDate","onSelect","delayToRender","shouldNotShowLoadingOverlay","wrapperRef","isDraggingTable","userResizedRef","dragStartX","dragStartWidth","dragMaxWidth","Infinity","tableContainerWidth","setTableContainerWidth","tableInnerScrollRef","tableHorizontalContainerRef","tableHScrollRef","tableContentWidth","setTableContentWidth","startDateRange","endDateRange","setDateSetup","currentViewDate","setCurrentViewDate","setTaskListWidth","wrapperWidth","setWrapperWidth","maxTableWidth","tableCap","handleTableResizeMouseDown","onMouseMove","newWidth","onMouseUp","setSvgContainerWidth","setSvgContainerHeight","setBarTasks","debounceRef","handleBarTasksUpdate","failedTask","computedColumnWidth","setComputedColumnWidth","computedForViewModeRef","minVisible","maxVisible","prevViewMode","visible","oldMin","oldMax","targetVisible","alreadySnappedForView","effectiveColumnWidth","setScrollY","setScrollX","ignoreScrollEvent","setIgnoreScrollEvent","lastTouchX","setLastTouchX","lastTouchY","setLastTouchY","isProcessing","setIsProcessing","clearTimeout","setTimeout","filteredTasks","sort","newDates","reverse","getCriticalPaths","primaryPath","secondaryPath","uncolorAll","colorPath","valueOf","ResizeObserver","measure","observer","observe","disconnect","node","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","log","successVal","dependents","computeCriticalPath","taskChainList","paths","b","duration","primaryLeaf","parent","primaryDuration","nextPath","newDuration","visited","secondaryLeaf","secondaryDuration","depStart","depEnd","depDuration","startWeek","endWeek","offTime","dayOfTheWeek","offDay","h","holiday","overlap","k","totalDuration","immediateChildDuration","longestIDLength","longestTask","startsWith","taskFromTasks","arrows","wbs","slice"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAWYA;;AAAZ,WAAYA;EACVA,gBAAA,SAAA;EACAA,sBAAA,gBAAA;EACAA,mBAAA,aAAA;EACAA,eAAA,QAAA;EAEAA,gBAAA,SAAA;EACAA,iBAAA,UAAA;EACAA,mBAAA,YAAA;EACAA,gBAAA,SAAA;AACD,CAVD,EAAYA,QAAQ,KAARA,QAAQ,KAAA,CAApB;;;ACGA,IAAMC,WAAW,GAAG,EAApB;AACA,AAAO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,CACrCC,SADqC,EAErCC,IAFqC;MAErCA;IAAAA,OAA8B;;;EAE9B,IAAMC,GAAG,GAAGC,IAAI,CAACC,SAAL,CAAe,CAACJ,SAAD,EAAYC,IAAZ,CAAf,CAAZ;EACA,IAAII,GAAG,GAAGP,WAAW,CAACI,GAAD,CAArB;;EACA,IAAI,CAACG,GAAL,EAAU;IACRA,GAAG,GAAG,IAAIC,IAAI,CAACC,cAAT,CAAwBP,SAAxB,EAAmCC,IAAnC,CAAN;IACAH,WAAW,CAACI,GAAD,CAAX,GAAmBG,GAAnB;;;EAEF,OAAOA,GAAP;AACD,CAXM;AAaP,AAAO,IAAMG,SAAS,GAAG,SAAZA,SAAY,CACvBC,IADuB,EAEvBC,QAFuB,EAGvBC,KAHuB;EAKvB,IAAMC,OAAO,GAAG,IAAIC,IAAJ,CACdJ,IAAI,CAACK,WAAL,MAAsBH,KAAK,KAAK,MAAV,GAAmBD,QAAnB,GAA8B,CAApD,CADc,EAEdD,IAAI,CAACM,QAAL,MAAmBJ,KAAK,KAAK,OAAV,GAAoBD,QAApB,GAA+B,CAAlD,CAFc,EAGdD,IAAI,CAACO,OAAL,MAAkBL,KAAK,KAAK,KAAV,GAAkBD,QAAlB,GAA6B,CAA/C,CAHc,EAIdD,IAAI,CAACQ,QAAL,MAAmBN,KAAK,KAAK,MAAV,GAAmBD,QAAnB,GAA8B,CAAjD,CAJc,EAKdD,IAAI,CAACS,UAAL,MAAqBP,KAAK,KAAK,QAAV,GAAqBD,QAArB,GAAgC,CAArD,CALc,EAMdD,IAAI,CAACU,UAAL,MAAqBR,KAAK,KAAK,QAAV,GAAqBD,QAArB,GAAgC,CAArD,CANc,EAOdD,IAAI,CAACW,eAAL,MAA0BT,KAAK,KAAK,aAAV,GAA0BD,QAA1B,GAAqC,CAA/D,CAPc,CAAhB;EASA,OAAOE,OAAP;AACD,CAfM;AAiBP,AAAO,IAAMS,WAAW,GAAG,SAAdA,WAAc,CAACZ,IAAD,EAAaE,KAAb;EACzB,IAAMW,MAAM,GAAG,CACb,aADa,EAEb,QAFa,EAGb,QAHa,EAIb,MAJa,EAKb,KALa,EAMb,OANa,EAOb,SAPa,EAQb,MARa,CAAf;;EAWA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,MAAD;IAClB,IAAMC,QAAQ,GAAGH,MAAM,CAACI,OAAP,CAAef,KAAf,CAAjB;IACA,OAAOW,MAAM,CAACI,OAAP,CAAeF,MAAf,KAA0BC,QAAjC;GAFF;;EAIA,IAAMb,OAAO,GAAG,IAAIC,IAAJ,CACdJ,IAAI,CAACK,WAAL,EADc,EAEdS,WAAW,CAAC,MAAD,CAAX,GAAsB,CAAtB,GAA0Bd,IAAI,CAACM,QAAL,EAFZ,EAGdQ,WAAW,CAAC,OAAD,CAAX,GAAuB,CAAvB,GAA2Bd,IAAI,CAACO,OAAL,EAHb,EAIdO,WAAW,CAAC,KAAD,CAAX,GAAqB,CAArB,GAAyBd,IAAI,CAACQ,QAAL,EAJX,EAKdM,WAAW,CAAC,MAAD,CAAX,GAAsB,CAAtB,GAA0Bd,IAAI,CAACS,UAAL,EALZ,EAMdK,WAAW,CAAC,QAAD,CAAX,GAAwB,CAAxB,GAA4Bd,IAAI,CAACU,UAAL,EANd,EAOdI,WAAW,CAAC,QAAD,CAAX,GAAwB,CAAxB,GAA4Bd,IAAI,CAACW,eAAL,EAPd,CAAhB;EASA,OAAOR,OAAP;AACD,CA1BM;;AAgCP,IAAMe,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAClB,IAAD,EAAamB,YAAb;EAChC,IAAMC,KAAK,GAAGpB,IAAI,CAACM,QAAL,EAAd;EACA,IAAMe,MAAM,GAAG,CAACD,KAAK,GAAGD,YAAR,GAAuB,EAAxB,IAA8B,EAA7C;EACA,IAAMG,WAAW,GAAG,CAACH,YAAY,GAAGI,IAAI,CAACC,KAAL,CAAWH,MAAM,GAAG,CAApB,IAAyB,CAAzC,IAA8C,EAAlE;EACA,IAAII,IAAI,GAAGzB,IAAI,CAACK,WAAL,EAAX;EACA,IAAIiB,WAAW,GAAGF,KAAlB,EAAyBK,IAAI,IAAI,CAAR;EACzB,OAAO,IAAIrB,IAAJ,CAASqB,IAAT,EAAeH,WAAf,EAA4B,CAA5B,CAAP;AACD,CAPD;;AAiBA,AAAO,IAAMI,+BAA+B,sDACzCtC,QAAQ,CAACuC,GADgC,IAC1B,EAD0B,wBAEzCvC,QAAQ,CAACwC,IAFgC,IAEzB,CAFyB,wBAGzCxC,QAAQ,CAACyC,KAHgC,IAGxB,CAHwB,wBAIzCzC,QAAQ,CAAC0C,OAJgC,IAItB,CAJsB,wBAArC;AAaP,AAAO,IAAMC,2BAA2B,sDACrC3C,QAAQ,CAACuC,GAD4B,IACtB,EADsB,wBAErCvC,QAAQ,CAACwC,IAF4B,IAErB,EAFqB,wBAGrCxC,QAAQ,CAACyC,KAH4B,IAGpB,EAHoB,wBAIrCzC,QAAQ,CAAC0C,OAJ4B,IAIlB,CAJkB,wBAAjC;AAOP,AAAO,IAAME,cAAc,GAAG,SAAjBA,cAAiB,CAC5BC,KAD4B,EAE5BC,QAF4B,EAG5BC,aAH4B,EAI5BhB,YAJ4B;;;MAI5BA;IAAAA,eAAuB;;;EAEvB,IAAIiB,YAAY,GACd,YAAAH,KAAK,CAAC,CAAD,CAAL,oDAAUI,KAAV,CAAgBC,OAAhB,QAA8B,CAA9B,GACI,aAAAL,KAAK,CAAC,CAAD,CAAL,sDAAUI,KAAV,KAAmB,IAAIjC,IAAJ,EADvB,GAEI,IAAIA,IAAJ,EAHN;EAIA,IAAImC,UAAU,GACZ,aAAAN,KAAK,CAAC,CAAD,CAAL,sDAAUO,GAAV,CAAcF,OAAd,QAA4B,CAA5B,GAAgC,aAAAL,KAAK,CAAC,CAAD,CAAL,sDAAUO,GAAV,KAAiB,IAAIpC,IAAJ,EAAjD,GAA8D,IAAIA,IAAJ,EADhE;;EAGA,qDAAmB6B,KAAnB,wCAA0B;IAAA,IAAfQ,IAAe;;IACxB,IAAIA,IAAI,CAACJ,KAAL,IAAcI,IAAI,CAACJ,KAAL,CAAWC,OAAX,OAAyB,CAAvC,IAA4CG,IAAI,CAACJ,KAAL,GAAaD,YAA7D,EAA2E;MACzEA,YAAY,GAAGK,IAAI,CAACJ,KAApB;;;IAEF,IAAII,IAAI,CAACD,GAAL,IAAYC,IAAI,CAACD,GAAL,CAASF,OAAT,OAAuB,CAAnC,IAAwCG,IAAI,CAACD,GAAL,GAAWD,UAAvD,EAAmE;MACjEA,UAAU,GAAGE,IAAI,CAACD,GAAlB;;;IAEF,IACEC,IAAI,CAACC,WAAL,IACAD,IAAI,CAACC,WAAL,CAAiBJ,OAAjB,OAA+B,CAD/B,IAEAG,IAAI,CAACC,WAAL,GAAmBN,YAHrB,EAIE;MACAA,YAAY,GAAGK,IAAI,CAACC,WAApB;;;IAEF,IACED,IAAI,CAACE,SAAL,IACAF,IAAI,CAACE,SAAL,CAAeL,OAAf,OAA6B,CAD7B,IAEAG,IAAI,CAACE,SAAL,GAAiBJ,UAHnB,EAIE;MACAA,UAAU,GAAGE,IAAI,CAACE,SAAlB;;;;EAIJ,QAAQT,QAAR;IACE,KAAK9C,QAAQ,CAACwD,IAAd;MACER,YAAY,GAAGrC,SAAS,CAACqC,YAAD,EAAe,CAAC,CAAhB,EAAmB,MAAnB,CAAxB;MACAA,YAAY,GAAGxB,WAAW,CAACwB,YAAD,EAAe,MAAf,CAA1B;MACAG,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,CAAb,EAAgB,MAAhB,CAAtB;MACAA,UAAU,GAAG3B,WAAW,CAAC2B,UAAD,EAAa,MAAb,CAAxB;MACA;;IACF,KAAKnD,QAAQ,CAAC0C,OAAd;MAAuB;QACrBM,YAAY,GAAGrC,SAAS,CAACqC,YAAD,EAAe,CAAC,CAAD,GAAKD,aAApB,EAAmC,MAAnC,CAAxB;QACAC,YAAY,GAAGlB,yBAAyB,CAACkB,YAAD,EAAejB,YAAf,CAAxC;QACAoB,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,CAAb,EAAgB,MAAhB,CAAtB;QACA,IAAMM,SAAS,GAAG3B,yBAAyB,CAACqB,UAAD,EAAapB,YAAb,CAA3C;QACAoB,UAAU,GACRM,SAAS,GAAGN,UAAZ,GAAyBxC,SAAS,CAAC8C,SAAD,EAAY,CAAZ,EAAe,OAAf,CAAlC,GAA4DA,SAD9D;QAEA;;;IAEF,KAAKzD,QAAQ,CAACyC,KAAd;MACEO,YAAY,GAAGrC,SAAS,CAACqC,YAAD,EAAe,CAAC,CAAD,GAAKD,aAApB,EAAmC,OAAnC,CAAxB;MACAC,YAAY,GAAGxB,WAAW,CAACwB,YAAD,EAAe,OAAf,CAA1B;MACAG,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,CAAb,EAAgB,MAAhB,CAAtB;MACAA,UAAU,GAAG3B,WAAW,CAAC2B,UAAD,EAAa,MAAb,CAAxB;MACA;;IACF,KAAKnD,QAAQ,CAACwC,IAAd;MACEQ,YAAY,GAAGxB,WAAW,CAACwB,YAAD,EAAe,KAAf,CAA1B;MACAA,YAAY,GAAGrC,SAAS,CACtB+C,SAAS,CAACV,YAAD,CADa,EAEtB,CAAC,CAAD,GAAKD,aAFiB,EAGtB,KAHsB,CAAxB;MAKAI,UAAU,GAAG3B,WAAW,CAAC2B,UAAD,EAAa,KAAb,CAAxB;MACAA,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,GAAb,EAAkB,OAAlB,CAAtB;MACA;;IACF,KAAKnD,QAAQ,CAACuC,GAAd;MACES,YAAY,GAAGxB,WAAW,CAACwB,YAAD,EAAe,KAAf,CAA1B;MACAA,YAAY,GAAGrC,SAAS,CAACqC,YAAD,EAAe,CAAC,CAAD,GAAKD,aAApB,EAAmC,KAAnC,CAAxB;MACAI,UAAU,GAAG3B,WAAW,CAAC2B,UAAD,EAAa,KAAb,CAAxB;MACAA,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,EAAb,EAAiB,KAAjB,CAAtB;MACA;;IACF,KAAKnD,QAAQ,CAAC2D,UAAd;MACEX,YAAY,GAAGxB,WAAW,CAACwB,YAAD,EAAe,KAAf,CAA1B;MACAA,YAAY,GAAGrC,SAAS,CAACqC,YAAD,EAAe,CAAC,CAAD,GAAKD,aAApB,EAAmC,KAAnC,CAAxB;MACAI,UAAU,GAAG3B,WAAW,CAAC2B,UAAD,EAAa,KAAb,CAAxB;MACAA,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,EAAb,EAAiB,MAAjB,CAAtB;MACA;;IACF,KAAKnD,QAAQ,CAAC4D,OAAd;MACEZ,YAAY,GAAGxB,WAAW,CAACwB,YAAD,EAAe,KAAf,CAA1B;MACAA,YAAY,GAAGrC,SAAS,CAACqC,YAAD,EAAe,CAAC,CAAD,GAAKD,aAApB,EAAmC,KAAnC,CAAxB;MACAI,UAAU,GAAG3B,WAAW,CAAC2B,UAAD,EAAa,KAAb,CAAxB;MACAA,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,GAAb,EAAkB,MAAlB,CAAtB;MACA;;IACF,KAAKnD,QAAQ,CAAC6D,IAAd;MACEb,YAAY,GAAGxB,WAAW,CAACwB,YAAD,EAAe,MAAf,CAA1B;MACAA,YAAY,GAAGrC,SAAS,CAACqC,YAAD,EAAe,CAAC,CAAD,GAAKD,aAApB,EAAmC,MAAnC,CAAxB;MACAI,UAAU,GAAG3B,WAAW,CAAC2B,UAAD,EAAa,KAAb,CAAxB;MACAA,UAAU,GAAGxC,SAAS,CAACwC,UAAD,EAAa,CAAb,EAAgB,KAAhB,CAAtB;MACA;;;EAEJ,OAAO,CAACH,YAAD,EAAeG,UAAf,CAAP;AACD,CA9FM;AAgGP,AAAO,IAAMW,SAAS,GAAG,SAAZA,SAAY,CACvBC,SADuB,EAEvBC,OAFuB,EAGvBlB,QAHuB;EAKvB,IAAImB,WAAW,GAAS,IAAIjD,IAAJ,CAAS+C,SAAT,CAAxB;EACA,IAAMG,KAAK,GAAW,CAACD,WAAD,CAAtB;;EACA,OAAOA,WAAW,GAAGD,OAArB,EAA8B;IAC5B,QAAQlB,QAAR;MACE,KAAK9C,QAAQ,CAACwD,IAAd;QACES,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,CAAd,EAAiB,MAAjB,CAAvB;QACA;;MACF,KAAKjE,QAAQ,CAAC0C,OAAd;QACEuB,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,CAAd,EAAiB,OAAjB,CAAvB;QACA;;MACF,KAAKjE,QAAQ,CAACyC,KAAd;QACEwB,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,CAAd,EAAiB,OAAjB,CAAvB;QACA;;MACF,KAAKjE,QAAQ,CAACwC,IAAd;QACEyB,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,CAAd,EAAiB,KAAjB,CAAvB;QACA;;MACF,KAAKjE,QAAQ,CAACuC,GAAd;QACE0B,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,CAAd,EAAiB,KAAjB,CAAvB;QACA;;MACF,KAAKjE,QAAQ,CAAC4D,OAAd;QACEK,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,EAAd,EAAkB,MAAlB,CAAvB;QACA;;MACF,KAAKjE,QAAQ,CAAC2D,UAAd;QACEM,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,CAAd,EAAiB,MAAjB,CAAvB;QACA;;MACF,KAAKjE,QAAQ,CAAC6D,IAAd;QACEI,WAAW,GAAGtD,SAAS,CAACsD,WAAD,EAAc,CAAd,EAAiB,MAAjB,CAAvB;QACA;;;IAEJC,KAAK,CAACC,IAAN,CAAWF,WAAX;;;EAEF,OAAOC,KAAP;AACD,CArCM;AAuCP,AAWO,IAAME,iBAAiB,GAAG,SAApBA,iBAAoB,CAC/BxD,IAD+B,EAE/ByD,MAF+B,EAG/BC,MAH+B;EAK/B,IAAIC,WAAW,GAAGrE,uBAAuB,CAACmE,MAAD,EAAS;IAChDG,OAAO,EAAEF;GAD8B,CAAvB,CAEfA,MAFe,CAER1D,IAFQ,CAAlB;EAGA2D,WAAW,GAAGA,WAAW,CAACE,OAAZ,CACZF,WAAW,CAAC,CAAD,CADC,EAEZA,WAAW,CAAC,CAAD,CAAX,CAAeG,iBAAf,EAFY,CAAd;EAIA,OAAOH,WAAP;AACD,CAbM;;AAmBP,IAAMb,SAAS,GAAG,SAAZA,SAAY,CAAC9C,IAAD;EAChB,IAAM+D,GAAG,GAAG/D,IAAI,CAACgE,MAAL,EAAZ;EACA,IAAMC,IAAI,GAAGjE,IAAI,CAACO,OAAL,KAAiBwD,GAAjB,IAAwBA,GAAG,KAAK,CAAR,GAAY,CAAC,CAAb,GAAiB,CAAzC,CAAb;EACA,OAAO,IAAI3D,IAAJ,CAASJ,IAAI,CAACkE,OAAL,CAAaD,IAAb,CAAT,CAAP;AACD,CAJD;;;;ACpRO,IAAME,qBAAqB,GAU7B,SAVQA,qBAUR;MACHC,oBAAAA;MACAC,kBAAAA;MACAC,gBAAAA;MACAC,gBAAAA;MACAC,oBAAAA;MACAC,mBAAAA;MACAC,mBAAAA;MACAC,oBAAAA;MACAC,sBAAAA;;EAEA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAACC,KAAD,EAAgBC,MAAhB;IAAA;;IAAA,8BACdJ,YADc,aACdA,YADc,uBACdA,YAAY,CAAGG,KAAH,CADE,kCACWE,QAAQ,CAACT,QAAD,CAAR,GAAqBQ,MADhC;GAAhB;;EAKA,IAAME,WAAW,GACf,SADIA,WACJ,CAACH,KAAD,EAAgBI,UAAhB;IAAA,OAAuC,UAACC,CAAD;MACrC,IAAI,CAACP,cAAL,EAAqB;MACrBO,CAAC,CAACC,cAAF;MACAD,CAAC,CAACE,eAAF;MACA,IAAMC,MAAM,GAAGH,CAAC,CAACI,OAAjB;;MACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACC,EAAD;QACbb,cAAc,CAACE,KAAD,EAAQI,UAAU,IAAIO,EAAE,CAACF,OAAH,GAAaD,MAAjB,CAAlB,CAAd;OADF;;MAGA,IAAMI,IAAI,GAAG,SAAPA,IAAO;QACXC,QAAQ,CAACC,mBAAT,CAA6B,WAA7B,EAA0CJ,MAA1C;QACAG,QAAQ,CAACC,mBAAT,CAA6B,SAA7B,EAAwCF,IAAxC;OAFF;;MAIAC,QAAQ,CAACE,gBAAT,CAA0B,WAA1B,EAAuCL,MAAvC;MACAG,QAAQ,CAACE,gBAAT,CAA0B,SAA1B,EAAqCH,IAArC;KAbF;GADF;;EAiBA,IAAMI,IAAI,GAAG,SAAPA,IAAO,CACXhB,KADW,EAEXC,MAFW,EAGXgB,OAHW,EAIXvG,IAJW;QAIXA;MAAAA,OAAgD;;;IAEhD,YAAoCA,IAApC;QAAQwG,KAAR,SAAQA,KAAR;gCAAeC,SAAf;QAAeA,SAAf,gCAA2B,IAA3B;IACA,IAAMC,KAAK,GAAGrB,OAAO,CAACC,KAAD,EAAQC,MAAR,CAArB;IACA,OACEoB,mBAAA,MAAA;MACEC,SAAS,EAAEC,MAAM,CAACC;MAClBC,KAAK,EAAE;QAAEC,QAAQ,EAAEN,KAAZ;QAAmBO,QAAQ,EAAEP,KAA7B;QAAoCQ,QAAQ,EAAE;;MACrDV,KAAK,EAAEA;KAHT,EAKGD,OALH,EAMGE,SAAS,IAAIrB,cAAb,IACCuB,mBAAA,MAAA;MACEC,SAAS,EAAEC,MAAM,CAACM;MAClBJ,KAAK,EAAE;QAAEK,MAAM,EAAExC,YAAY,GAAG;;MAChCyC,WAAW,EAAE5B,WAAW,CAACH,KAAD,EAAQoB,KAAR;KAH1B,CAPJ,CADF;GARF;;EA0BA,OACEC,mBAAA,MAAA;IACEC,SAAS,EAAEC,MAAM,CAACS;IAClBP,KAAK,EAAE;MACLlC,UAAU,EAAEA,UADP;MAELC,QAAQ,EAAEA;;GAJd,EAOE6B,mBAAA,MAAA;IACEC,SAAS,EAAEC,MAAM,CAACU;IAClBR,KAAK,EAAE;MACLK,MAAM,EAAExC,YAAY,GAAG;;GAH3B,EAMGM,WAAW,IACVoB,IAAI,CACF,QADE,EAEF,GAFE,EAGFK,mBAAA,QAAA;IACEa,IAAI,EAAC;IACLC,OAAO,EAAExC;IACTyC,QAAQ,EAAE,kBAAA/B,CAAC;MAAA,OAAIT,WAAW,CAACS,CAAC,CAACgC,MAAF,CAASF,OAAV,CAAf;;GAHb,CAHE,EAQF;IAAEhB,SAAS,EAAE;GARX,CAPR,EAiBGH,IAAI,CAAC,IAAD,EAAO,GAAP,EAAY,IAAZ,CAjBP,EAkBGA,IAAI,CAAC,KAAD,EAAQ,GAAR,EAAa,wBAAb,CAlBP,EAmBGA,IAAI,CAAC,MAAD,EAAS,GAAT,EAAc,MAAd,CAnBP,EAoBGA,IAAI,CAAC,cAAD,EAAiB,GAAjB,EAAsB,eAAtB,EAAuC;IAAEE,KAAK,EAAE;GAAhD,CApBP,EAqBGF,IAAI,CAAC,YAAD,EAAe,GAAf,EAAoB,aAApB,EAAmC;IAAEE,KAAK,EAAE;GAA5C,CArBP,EAsBGxB,YAAY,KAAK,WAAjB,IACC2B,mBAAA,CAACA,KAAK,CAACiB,QAAP,MAAA,EACGtB,IAAI,CAAC,aAAD,EAAgB,GAAhB,EAAqB,cAArB,EAAqC;IAAEE,KAAK,EAAE;GAA9C,CADP,EAEGF,IAAI,CAAC,WAAD,EAAc,GAAd,EAAmB,YAAnB,EAAiC;IAAEE,KAAK,EAAE;GAA1C,CAFP,CAvBJ,EA4BGxB,YAAY,KAAK,MAAjB,IACC2B,mBAAA,CAACA,KAAK,CAACiB,QAAP,MAAA,EACGtB,IAAI,CAAC,iBAAD,EAAoB,GAApB,EAAyB,YAAzB,EAAuC;IAAEE,KAAK,EAAE;GAAhD,CADP,EAEGF,IAAI,CAAC,iBAAD,EAAoB,GAApB,EAAyB,kBAAzB,EAA6C;IAChDE,KAAK,EAAE;GADJ,CAFP,EAKGF,IAAI,CAAC,mBAAD,EAAsB,GAAtB,EAA2B,oBAA3B,EAAiD;IACpDE,KAAK,EAAE;GADJ,CALP,EAQGF,IAAI,CAAC,gBAAD,EAAmB,GAAnB,EAAwB,iBAAxB,EAA2C;IAC9CE,KAAK,EAAE;GADJ,CARP,EAWGF,IAAI,CAAC,cAAD,EAAiB,GAAjB,EAAsB,eAAtB,EAAuC;IAC1CE,KAAK,EAAE;GADJ,CAXP,CA7BJ,CAPF,CADF;AAwDD,CA7HM;;;;ACGP,IAAMqB,qBAAqB,GAAG,EAA9B;;AACA,IAAMC,yBAAyB,GAC7B,SADIA,yBACJ,CAAC7D,MAAD;EAAA,OACA,UAACzD,IAAD,EAAauH,eAAb;IACE,IAAI,CAACvH,IAAD,IAASA,IAAI,CAACsC,OAAL,OAAmB,CAAhC,EAAmC,OAAO,EAAP;IACnC,IAAM7C,GAAG,GAAGO,IAAI,CAACwH,QAAL,EAAZ;IACA,IAAIC,GAAG,GAAGJ,qBAAqB,CAAC5H,GAAD,CAA/B;;IACA,IAAI,CAACgI,GAAL,EAAU;MACRA,GAAG,GAAGzH,IAAI,CAAC0H,kBAAL,CAAwBjE,MAAxB,EAAgC8D,eAAhC,CAAN;MACAF,qBAAqB,CAAC5H,GAAD,CAArB,GAA6BgI,GAA7B;;;IAEF,OAAOA,GAAP;GATF;AAAA,CADF;;AAYA,IAAMF,eAAe,GAA+B;EAClD9F,IAAI,EAAE,SAD4C;EAElDL,KAAK,EAAE,SAF2C;EAGlD2C,GAAG,EAAE;AAH6C,CAApD;AAMA,AAAO,IAAM4D,oBAAoB,GAiB5B,SAjBQA,oBAiBR;MACHC,iBAAAA;MACArD,gBAAAA;MACAtC,aAAAA;MACAuC,oBAAAA;MACAqD,iBAAAA;MACAxD,kBAAAA;MACAC,gBAAAA;MACAb,cAAAA;MACAqE,uBAAAA;gCACAC;MAAAA,gDAAgB;MAChBC,oBAAAA;mCACAC;MAAAA,uDAAoB,UAAAC,CAAC;IAAA,OAAI,MAAMA,CAAC,CAACC,IAAZ;;MACrBC,oBAAAA;MACAzD,oBAAAA;;EAIA,IAAME,OAAO,GAAG,SAAVA,OAAU,CAACC,KAAD,EAAgBC,MAAhB;IAAA;;IAAA,8BACdJ,YADc,aACdA,YADc,uBACdA,YAAY,CAAGG,KAAH,CADE,kCACWE,QAAQ,CAACT,QAAD,CAAR,GAAqBQ,MADhC;GAAhB;;EAEA,IAAM2C,kBAAkB,GAAGW,OAAO,CAChC;IAAA,OAAMf,yBAAyB,CAAC7D,MAAD,CAA/B;GADgC,EAEhC,CAACA,MAAD,CAFgC,CAAlC;EAIA,IAAM6E,WAAW,GAAGD,OAAO,CACzB;IAAA,OAAM,IAAIE,GAAJ,CAAQV,SAAS,CAACW,GAAV,CAAc,UAAAN,CAAC;MAAA,OAAIA,CAAC,CAACO,EAAN;KAAf,CAAR,CAAN;GADyB,EAEzB,CAACZ,SAAD,CAFyB,CAA3B;;EAMA,IAAMa,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,MAAD,EAAiBC,WAAjB,EAA2CC,QAA3C;IAC1B,IAAMpG,IAAI,GAAGoG,QAAQ,CAACC,IAAT,CAAc,UAAAZ,CAAC;MAAA,OAAIA,CAAC,CAACO,EAAF,KAASE,MAAb;KAAf,CAAb;IACA,IAAI,CAAClG,IAAL,EAAW,OAAO,KAAP;IACX,IAAMsG,SAAS,GAAGC,YAAY,CAACvG,IAAI,CAACgG,EAAN,CAA9B;IACA,IAAI,CAACM,SAAL,EAAgB,OAAO,KAAP;IAChB,IAAIH,WAAW,CAACK,GAAZ,CAAgBF,SAAhB,CAAJ,EAAgC,OAAO,IAAP;IAChC,OAAOL,mBAAmB,CAACK,SAAD,EAAYH,WAAZ,EAAyBC,QAAzB,CAA1B;GANF;;EASA,IAAMK,aAAa,GAAGd,YAAY,IAAInG,KAAK,CAACuG,GAAN,CAAU,UAACW,CAAD,EAAIC,KAAJ;IAAA,OAAe;MAAEA,KAAK,EAALA,KAAF;MAAS/G,KAAK,EAAE+G,KAAK,GAAGxB,SAAxB;MAAmCyB,IAAI,EAAEzB,SAAzC;MAAoDnI,GAAG,EAAE2J,KAAzD;MAAgE5G,GAAG,EAAE,CAAC4G,KAAK,GAAG,CAAT,IAAcxB,SAAnF;MAA8F0B,IAAI,EAAE,CAApG;MAAuGC,cAAc,EAAE;KAAtI;GAAV,CAAtC;EAEA,OACEpD,mBAAA,MAAA;IACEC,SAAS,EAAEC,QAAM,CAACmD;IAClBjD,KAAK,EAAE;MACLlC,UAAU,EAAEA,UADP;MAELC,QAAQ,EAAEA;;GAJd,EAOG4E,aAAa,CAACV,GAAd,CAAkB,UAAAiB,EAAE;IACnB,IAAMvB,CAAC,GAAGjG,KAAK,CAACwH,EAAE,CAACL,KAAJ,CAAf;IACA,IAAIM,cAAc,GAAG,EAArB;;IACA,IAAI,EAAEpB,WAAW,CAACW,GAAZ,CAAgBf,CAAC,CAACO,EAAlB,KAA0BP,CAAC,CAAClB,IAAF,KAAU,WAAtC,CAAJ,EAAwD;MACtD,IAAIkB,CAAC,CAACyB,YAAF,KAAmB,KAAvB,EAA8B;QAC5BD,cAAc,GAAG,GAAjB;OADF,MAEO,IAAIxB,CAAC,CAACyB,YAAF,KAAmB,IAAvB,EAA6B;QAClCD,cAAc,GAAG,GAAjB;;;;IAIJ,IAAME,UAAU,GAAG7B,aAAa,CAAC8B,QAAd,CAAuB3B,CAAC,CAACO,EAAzB,CAAnB;IACA,IAAMqB,kBAAkB,GAAGpB,mBAAmB,CAACR,CAAC,CAACO,EAAH,EAAO,IAAIF,GAAJ,CAAQR,aAAR,CAAP,EAA+B9F,KAA/B,CAA9C;IAEA,OACEkE,mBAAA,MAAA;MACE1G,GAAG,OAAKgK,EAAE,CAAChK;oBACCgK,EAAE,CAACL;MACf7C,KAAK,EAAE;QACLG,QAAQ,EAAE,UADL;QAELqD,GAAG,EAAE,CAFA;QAGLC,IAAI,EAAE,CAHD;QAIL9D,KAAK,EAAE,MAJF;QAKLU,MAAM,EAAK6C,EAAE,CAACJ,IAAR,OALD;QAMLY,SAAS,kBAAgBR,EAAE,CAACpH,KAAnB;;KATb,EAYE8D,mBAAA,MAAA;MACEC,SAAS,EACP8B,CAAC,CAAClB,IAAF,KAAW,WAAX,GACIX,QAAM,CAAC6D,oBADX,GAEI1F,YAAY,KAAK,WAAjB,GACA6B,QAAM,CAAC8D,oBADP,GAEA9D,QAAM,CAAC+D;MAEb7D,KAAK,EAAE;QAAEK,MAAM,EAAEgB;;MACjBnI,GAAG,EAAKyI,CAAC,CAACO,EAAP;KATL,EAWGT,YAAY,IACX7B,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,QAAD,EAAW,GAAX,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,QAAD,EAAW,GAAX;;KAJrB,EAOEsB,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAACiE;MAAc/D,KAAK,EAAE;QAC1CgE,OAAO,EAAE,MADiC;QAE1CC,cAAc,EAAE,QAF0B;QAG1CC,UAAU,EAAE,QAH8B;QAI1C7D,MAAM,EAAE,MAJkC;QAK1C8D,WAAW,EAAE,GAL6B;QAM1CC,YAAY,EAAE;;KANhB,EAQExE,mBAAA,QAAA;MACEa,IAAI,EAAC;MACLC,OAAO,EAAE2C;MACTgB,QAAQ,EAAEd;MACV5C,QAAQ,EAAE,kBAAC/B,CAAD;QAAA,OAAO6C,YAAY,CAACE,CAAC,CAACO,EAAH,EAAOtD,CAAC,CAACgC,MAAF,CAASF,OAAhB,CAAnB;;KAJZ,CARF,CAPF,CAZJ,EAoCEd,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,IAAD,EAAO,GAAP,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,IAAD,EAAO,GAAP;;MAEnBmB,KAAK,EAAEkC,CAAC,CAACO;KANX,EAQEtC,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACwE;MAClBtE,KAAK,EAAE;QAAEmE,WAAW,EAAKxC,CAAC,CAAC4C,KAAF,GAAU,CAAf;;KAFtB,EAIG,EAAExC,WAAW,CAACW,GAAZ,CAAgBf,CAAC,CAACO,EAAlB,KAAyBP,CAAC,CAAClB,IAAF,KAAU,WAArC,IACCb,mBAAA,MAAA;MACAC,SAAS,EAAEC,QAAM,CAAC0E;MAClBC,OAAO,EAAE;QAAA,OAAMlD,eAAe,CAACI,CAAD,CAArB;;KAFT,EAKGwB,cALH,CADD,GASCvD,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAAC4E;KAAvB,CAbJ,EAeE9E,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAACiE;KAAvB,EACGpC,CAAC,CAACO,EADL,EACS,GADT,EAEGP,CAAC,CAACvF,SAAF,CAAYL,OAAZ,KAAwB,CAAxB,IACD4F,CAAC,CAACvF,SAAF,CAAYL,OAAZ,KAAwBlC,IAAI,CAAC8K,GAAL,EADvB,GAEC/E,mBAAA,OAAA;MACEH,KAAK,EAAC;MACNO,KAAK,EAAE;QAAE4E,KAAK,EAAE,WAAT;QAAsB7G,QAAQ,EAAE;;KAFzC,UAAA,CAFD,GASC,EAXJ,CAfF,CARF,CApCF,EA2EE6B,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,KAAD,EAAQ,GAAR,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,KAAD,EAAQ,GAAR;;MAEnBmB,KAAK,EAAEkC,CAAC,CAACkD,UAAF,GAAalD,CAAC,CAACkD,UAAf,GAA0B;KANnC,EAQElD,CAAC,CAACkD,UARJ,CA3EF,EAqFEjF,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,MAAD,EAAS,GAAT,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,MAAD,EAAS,GAAT;;MAEnBmB,KAAK,EAAEkC,CAAC,CAACC;KANX,EAQEhC,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAACiE;KAAvB,EAAsCrC,iBAAiB,CAACC,CAAD,CAAvD,CARF,CArFF,EA+FE/B,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,cAAD,EAAiB,GAAjB,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,cAAD,EAAiB,GAAjB;;KAJrB,EAOEsB,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAACiE;KAAvB,QAAA,EACS5C,kBAAkB,CAACQ,CAAC,CAAC7F,KAAH,EAAUkF,eAAV,CAD3B,CAPF,CA/FF,EA0GEpB,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,YAAD,EAAe,GAAf,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,YAAD,EAAe,GAAf;;KAJrB,EAOEsB,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAACiE;KAAvB,QAAA,EACS5C,kBAAkB,CAACQ,CAAC,CAAC1F,GAAH,EAAQ+E,eAAR,CAD3B,CAPF,CA1GF,EAqHG/C,YAAY,KAAK,WAAjB,IACC2B,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,aAAD,EAAgB,GAAhB,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,aAAD,EAAgB,GAAhB;;KAJrB,EAOEsB,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAACiE;KAAvB,QAAA,EACS5C,kBAAkB,CAACQ,CAAC,CAACxF,WAAH,EAAgB6E,eAAhB,CAD3B,CAPF,CAtHJ,EAkIG/C,YAAY,KAAK,WAAjB,IACC2B,mBAAA,MAAA;MACEC,SAAS,EAAEC,QAAM,CAACgE;MAClB9D,KAAK,EAAE;QACLC,QAAQ,EAAE3B,OAAO,CAAC,WAAD,EAAc,GAAd,CADZ;QAEL4B,QAAQ,EAAE5B,OAAO,CAAC,WAAD,EAAc,GAAd;;KAJrB,EAOEsB,mBAAA,MAAA;MAAKC,SAAS,EAAEC,QAAM,CAACiE;KAAvB,QAAA,EACS5C,kBAAkB,CAACQ,CAAC,CAACvF,SAAH,EAAc4E,eAAd,CAD3B,CAPF,CAnIJ,EA+IG/C,YAAY,KAAK,MAAjB,IAA4B;;;MAC3B,IAAM6G,eAAe,GAAGnD,CAAC,CAACmD,eAAF,IAAqB,IAArB,GAA4BnD,CAAC,CAACmD,eAA9B,kBAAiDnD,CAAC,CAACoD,QAAnD,0BAA+D,CAAvF;MACA,IAAMC,eAAe,GAAGrD,CAAC,CAACqD,eAAF,IAAqB,IAArB,GAA4BrD,CAAC,CAACqD,eAA9B,GAAgD,IAAxE;MACA,IAAMC,iBAAiB,GAAGD,eAAe,IAAI,IAAnB,GACtBhK,IAAI,CAACkK,KAAL,CAAWF,eAAe,GAAIA,eAAe,IAAIF,eAAe,GAAG,GAAtB,CAA7C,CADsB,GAEtB,IAFJ;;MAGA,IAAMK,cAAc,GAAI;QACtB,IAAI,CAACxD,CAAC,CAACxF,WAAH,IAAkBwF,CAAC,CAACxF,WAAF,CAAcJ,OAAd,OAA4B,CAAlD,EAAqD,OAAO,IAAP;QACrD,IAAMqJ,MAAM,GAAIzD,CAAC,CAACvF,SAAF,IAAeuF,CAAC,CAACvF,SAAF,CAAYL,OAAZ,KAAwB,CAAxC,GAA6C4F,CAAC,CAACvF,SAA/C,GAA2D,IAAIvC,IAAJ,EAA1E;QACA,OAAOmB,IAAI,CAACqK,IAAL,CAAU,CAACD,MAAM,CAACrJ,OAAP,KAAmB4F,CAAC,CAACxF,WAAF,CAAcJ,OAAd,EAApB,KAAgD,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAAjE,CAAV,CAAP;OAHqB,EAAvB;;MAKA,OACE6D,mBAAA,CAACA,KAAK,CAACiB,QAAP,MAAA,EACEjB,mBAAA,MAAA;QACEC,SAAS,EAAEC,QAAM,CAACgE;QAClB9D,KAAK,EAAE;UACLC,QAAQ,EAAE3B,OAAO,CAAC,iBAAD,EAAoB,GAApB,CADZ;UAEL4B,QAAQ,EAAE5B,OAAO,CAAC,iBAAD,EAAoB,GAApB;;OAJrB,EAOEsB,mBAAA,MAAA;QAAKC,SAAS,EAAEC,QAAM,CAACiE;OAAvB,QAAA,EACSe,eAAe,IAAI,IAAnB,GAA6BA,eAA7B,SAAkD,EAD3D,CAPF,CADF,EAYElF,mBAAA,MAAA;QACEC,SAAS,EAAEC,QAAM,CAACgE;QAClB9D,KAAK,EAAE;UACLC,QAAQ,EAAE3B,OAAO,CAAC,iBAAD,EAAoB,GAApB,CADZ;UAEL4B,QAAQ,EAAE5B,OAAO,CAAC,iBAAD,EAAoB,GAApB;;OAJrB,EAOEsB,mBAAA,MAAA;QAAKC,SAAS,EAAEC,QAAM,CAACiE;OAAvB,QAAA,EACSiB,eAAe,IAAI,IAAnB,GAA0BA,eAA1B,GAA4C,EADrD,CAPF,CAZF,EAuBEpF,mBAAA,MAAA;QACEC,SAAS,EAAEC,QAAM,CAACgE;QAClB9D,KAAK,EAAE;UACLC,QAAQ,EAAE3B,OAAO,CAAC,mBAAD,EAAsB,GAAtB,CADZ;UAEL4B,QAAQ,EAAE5B,OAAO,CAAC,mBAAD,EAAsB,GAAtB;;OAJrB,EAOEsB,mBAAA,MAAA;QAAKC,SAAS,EAAEC,QAAM,CAACiE;OAAvB,QAAA,EACSkB,iBAAiB,IAAI,IAArB,GAA4BA,iBAA5B,GAAgD,EADzD,CAPF,CAvBF,EAkCErF,mBAAA,MAAA;QACEC,SAAS,EAAEC,QAAM,CAACgE;QAClB9D,KAAK,EAAE;UACLC,QAAQ,EAAE3B,OAAO,CAAC,gBAAD,EAAmB,GAAnB,CADZ;UAEL4B,QAAQ,EAAE5B,OAAO,CAAC,gBAAD,EAAmB,GAAnB;;OAJrB,EAOEsB,mBAAA,MAAA;QAAKC,SAAS,EAAEC,QAAM,CAACiE;OAAvB,QAAA,EACSoB,cAAc,IAAI,IAAlB,GAAyBA,cAAzB,GAA0C,EADnD,CAPF,CAlCF,EA6CEvF,mBAAA,MAAA;QACEC,SAAS,EAAEC,QAAM,CAACgE;QAClB9D,KAAK,EAAE;UACLC,QAAQ,EAAE3B,OAAO,CAAC,cAAD,EAAiB,GAAjB,CADZ;UAEL4B,QAAQ,EAAE5B,OAAO,CAAC,cAAD,EAAiB,GAAjB;;OAJrB,EAOEsB,mBAAA,MAAA;QAAKC,SAAS,EAAEC,QAAM,CAACiE;OAAvB,QAAA,qBACSpC,CAAC,CAAC2D,YADX,8BAC2B,mBAD3B,CAPF,CA7CF,CADF;KAX0B,EA/I9B,CAZF,CADF;GAdD,CAPH,CADF;AA+PD,CAzTM;;;;ACGA,IAAMC,OAAO,GAA2B,SAAlCA,OAAkC;MAC7CrJ,YAAAA;MACAuE,YAAAA;MACAY,iBAAAA;MACAmE,WAAAA;MACAC,0BAAAA;MACAC,yBAAAA;MACAC,eAAAA;MACAC,eAAAA;MACAC,mBAAAA;MACA9H,gBAAAA;MACAD,kBAAAA;MACAD,oBAAAA;MACAiI,qBAAAA;MACAC,sBAAAA;MACAC,kBAAAA;EAEA,IAAMC,UAAU,GAAGC,MAAM,CAAwB,IAAxB,CAAzB;;EACA,gBAAgCC,QAAQ,CAAC,CAAD,CAAxC;MAAOC,QAAP;MAAiBC,WAAjB;;EACA,iBAAgCF,QAAQ,CAAC,CAAD,CAAxC;MAAOG,QAAP;MAAiBC,WAAjB;;EACAC,SAAS,CAAC;IACR,IAAIP,UAAU,CAACQ,OAAf,EAAwB;MACtB,IAAMC,aAAa,GAAGT,UAAU,CAACQ,OAAX,CAAmBE,YAAnB,GAAkC,GAAxD;MACA,IAAMC,YAAY,GAAGX,UAAU,CAACQ,OAAX,CAAmBI,WAAnB,GAAiC,GAAtD;MAEA,IAAIC,WAAW,GAAG5K,IAAI,CAAC2G,KAAL,GAAaxB,SAAb,GAAyBuE,OAAzB,GAAmC/H,YAArD;MACA,IAAIkJ,WAAJ;;MAGA,IAAIf,UAAJ,EAAgB;QACde,WAAW,GAAGjB,aAAa,GAAGJ,iBAAhB,GAAoCkB,YAApC,GAAmD,EAAjE;QACAE,WAAW,GAAGjJ,YAAY,GAAG,CAA7B;QACAwI,WAAW,CAACS,WAAD,CAAX;QACAP,WAAW,CAACQ,WAAD,CAAX;QACA;;;MAGF,IAAIvB,GAAJ,EAAS;QACPuB,WAAW,GAAG7K,IAAI,CAAC8K,EAAL,GAAUnB,WAAW,GAAG,GAAxB,GAA8Be,YAA9B,GAA6CjB,OAA3D;;QACA,IAAIoB,WAAW,GAAG,CAAlB,EAAqB;UACnBA,WAAW,GAAG7K,IAAI,CAAC+K,EAAL,GAAUpB,WAAW,GAAG,GAAxB,GAA8BF,OAA5C;;;QAEF,IAAMuB,oBAAoB,GAAGN,YAAY,GAAGG,WAA5C;;QACA,IAAIG,oBAAoB,GAAGxB,iBAA3B,EAA8C;UAC5CqB,WAAW,GAAGrB,iBAAiB,GAAGkB,YAAlC;UACAE,WAAW,IAAIzF,SAAf;;OARJ,MAUO;QACL0F,WAAW,GACTtG,IAAI,IAAI,SAAR,GACIvE,IAAI,CAAC+K,EAAL,GAAUpB,WAAW,GAAG,GAAxB,GAA8BC,aAA9B,GAA8CH,OADlD,GAEIzJ,IAAI,CAACiL,QAAL,GAAgBtB,WAAW,GAAG,GAA9B,GAAoCC,aAApC,GAAoDH,OAH1D;;QAIA,IAAMuB,qBAAoB,GAAGN,YAAY,GAAGG,WAA5C;;QACA,IAAMK,cAAc,GAAGtB,aAAa,GAAGJ,iBAAvC;;QACA,IAAIwB,qBAAoB,GAAGE,cAA3B,EAA2C;UACzCL,WAAW,GACTtG,IAAI,IAAI,SAAR,GACIvE,IAAI,CAAC8K,EAAL,GACAlB,aADA,GAEAD,WAAW,GAAG,GAFd,GAGAF,OAHA,GAIAiB,YALJ,GAMI1K,IAAI,CAACmL,QAAL,GACAvB,aADA,GAEAD,WAAW,GAAG,GAFd,GAGAF,OAHA,GAIAiB,YAXN;;;QAaF,IAAIG,WAAW,GAAGjB,aAAlB,EAAiC;UAC/BiB,WAAW,GAAGrB,iBAAiB,GAAGI,aAApB,GAAoCc,YAAlD;UACAE,WAAW,IAAIzF,SAAf;;;;MAIJ,IAAMiG,iBAAiB,GAAGZ,aAAa,GAAGI,WAAhB,GAA8BlB,OAAxD;;MACA,IAAI0B,iBAAiB,GAAG7B,kBAAkB,GAAGG,OAA7C,EAAsD;QACpDkB,WAAW,GAAGrB,kBAAkB,GAAGiB,aAAnC;;;MAEFL,WAAW,CAACS,WAAD,CAAX;MACAP,WAAW,CAACQ,WAAD,CAAX;;GA3DK,EA6DN,CACDd,UADC,EAED/J,IAFC,EAGD2J,WAHC,EAIDF,OAJC,EAKDC,OALC,EAMD/H,YANC,EAODiI,aAPC,EAQDzE,SARC,EASDoE,kBATC,EAUDC,iBAVC,EAWDF,GAXC,EAYDQ,UAZC,CA7DM,CAAT;EA4EA,OACEpG,mBAAA,MAAA;IACE2H,GAAG,EAAEtB;IACLpG,SAAS,EACPyG,QAAQ,GACJxG,QAAM,CAAC0H,uBADH,GAEJ1H,QAAM,CAAC2H;IAEbzH,KAAK,EAAE;MAAEyD,IAAI,EAAE6C,QAAR;MAAkB9C,GAAG,EAAE4C;;GAPhC,EASExG,mBAAA,CAACmG,cAAD;IACE7J,IAAI,EAAEA;IACN6B,QAAQ,EAAEA;IACVD,UAAU,EAAEA;IACZ2C,IAAI,EAAEA;GAJR,CATF,CADF;AAkBD,CAlHM;AAoHP,AAAO,IAAMiH,sBAAsB,GAK9B,SALQA,sBAKR;;;MAAGxL,aAAAA;MAAM6B,iBAAAA;MAAUD,mBAAAA;MAAY2C,aAAAA;EAClC,IAAMT,KAAK,GAAG;IACZjC,QAAQ,EAARA,QADY;IAEZD,UAAU,EAAVA;GAFF;EAMA,IAAM6J,uBAAuB,GAC3BzL,IAAI,CAACJ,KAAL,IAAcI,IAAI,CAACD,GAAnB,IAA0BC,IAAI,CAACD,GAAL,CAASF,OAAT,KAAqBG,IAAI,CAACJ,KAAL,CAAWC,OAAX,EAArB,GAA4C,CAAtE,GACIf,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAAChJ,IAAI,CAACD,GAAL,CAASF,OAAT,KAAqBG,IAAI,CAACJ,KAAL,CAAWC,OAAX,EAAtB,KAA+C,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAAhE,CAAX,CAAZ,CADJ,4BAEIG,IAAI,CAAC8I,eAFT,oCAE4B,CAH9B;EAKA,IAAM6C,sBAAsB,GAC1B3L,IAAI,CAACC,WAAL,IAAoBD,IAAI,CAACE,SAAzB,IAAsCF,IAAI,CAACE,SAAL,CAAeL,OAAf,KAA2BG,IAAI,CAACC,WAAL,CAAiBJ,OAAjB,EAA3B,GAAwD,CAA9F,GACIf,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAAChJ,IAAI,CAACE,SAAL,CAAeL,OAAf,KAA2BG,IAAI,CAACC,WAAL,CAAiBJ,OAAjB,EAA5B,KAA2D,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAA5E,CAAX,CAAZ,CADJ,2BAEIG,IAAI,CAACiJ,cAFT,mCAE2B,CAH7B;EAKA,IAAI1E,IAAI,IAAI,SAAZ,EACE,OACEb,mBAAA,MAAA;IAAKC,SAAS,EAAEC,QAAM,CAACgI;IAAyB9H,KAAK,EAAEA;GAAvD,EACEJ,mBAAA,IAAA;IACEI,KAAK,EAAE;MAAEjC,QAAQ,EAAEA,QAAQ,GAAG;;GADhC,EAEK7B,IAAI,CAAC0F,IAFV,uBADF,EAIEhC,mBAAA,IAAA,MAAA,EACE1D,IAAI,CAACJ,KAAL,CAAW/B,QAAX,KAAwB,CAD1B,SAEImC,IAAI,CAACJ,KAAL,CAAW9B,OAAX,EAFJ,SAE4BkC,IAAI,CAACJ,KAAL,CAAWhC,WAAX,EAF5B,YAGEoC,IAAI,CAACD,GAAL,CAASlC,QAAT,KAAsB,CAHxB,UAIImC,IAAI,CAACD,GAAL,CAASjC,OAAT,EAJJ,SAI0BkC,IAAI,CAACD,GAAL,CAASnC,WAAT,EAJ1B,CAJF,EASGoC,IAAI,CAACD,GAAL,CAASF,OAAT,KAAqBG,IAAI,CAACJ,KAAL,CAAWC,OAAX,EAArB,KAA8C,CAA9C,IACC6D,mBAAA,IAAA;IACEC,SAAS,EAAEC,QAAM,CAACiI;GADpB,iBAEeJ,uBAFf,aAVJ,EAeE/H,mBAAA,IAAA;IAAGC,SAAS,EAAEC,QAAM,CAACiI;GAArB,EACG,CAAC,CAAC7L,IAAI,CAAC6I,QAAP,mBAAgC7I,IAAI,CAAC6I,QAArC,OADH,CAfF,CADF,CADF,KAuBE,OACEnF,mBAAA,MAAA;IAAKC,SAAS,EAAEC,QAAM,CAACgI;IAAyB9H,KAAK,EAAEA;GAAvD,EACEJ,mBAAA,IAAA;IACEI,KAAK,EAAE;MAAEjC,QAAQ,EAAEA,QAAQ,GAAG;;GADhC,EAEK7B,IAAI,CAAC0F,IAFV,sBADF,EAIEhC,mBAAA,IAAA,MAAA,EACE1D,IAAI,CAACC,WAAL,CAAiBpC,QAAjB,KAA8B,CADhC,SAEImC,IAAI,CAACC,WAAL,CAAiBnC,OAAjB,EAFJ,SAEkCkC,IAAI,CAACC,WAAL,CAAiBrC,WAAjB,EAFlC,YAGEoC,IAAI,CAACE,SAAL,CAAerC,QAAf,KAA4B,CAH9B,UAIImC,IAAI,CAACE,SAAL,CAAepC,OAAf,EAJJ,SAIgCkC,IAAI,CAACE,SAAL,CAAetC,WAAf,EAJhC,CAJF,EASGoC,IAAI,CAACE,SAAL,CAAeL,OAAf,KAA2BG,IAAI,CAACC,WAAL,CAAiBJ,OAAjB,EAA3B,KAA0D,CAA1D,IACC6D,mBAAA,IAAA;IACEC,SAAS,EAAEC,QAAM,CAACiI;GADpB,iBAEeF,sBAFf,aAVJ,EAeEjI,mBAAA,IAAA;IAAGC,SAAS,EAAEC,QAAM,CAACiI;GAArB,EACG,CAAC,CAAC7L,IAAI,CAAC6I,QAAP,mBAAgC7I,IAAI,CAAC6I,QAArC,OADH,CAfF,CADF;AAqBH,CAlEM;;;;AC7IA,IAAMiD,cAAc,GAOtB,SAPQA,cAOR;MACHC,cAAAA;MACAC,mBAAAA;MACAC,uBAAAA;MACAtK,oBAAAA;MACA2H,WAAAA;MACA4C,gBAAAA;EAEA,IAAMC,SAAS,GAAGnC,MAAM,CAAiB,IAAjB,CAAxB;EAEAM,SAAS,CAAC;IACR,IAAI6B,SAAS,CAAC5B,OAAd,EAAuB;MACrB4B,SAAS,CAAC5B,OAAV,CAAkB6B,SAAlB,GAA8BL,MAA9B;;GAFK,EAIN,CAACA,MAAD,CAJM,CAAT;EAMA,OACErI,mBAAA,MAAA;IACEI,KAAK,EAAE;MACLK,MAAM,EAAE6H,WADH;MAELK,SAAS,EAAE1K,YAFN;MAGL2K,UAAU,EAAEhD,GAAG,GAAG,EAAH,GAAQ,OAHlB;MAILiD,WAAW,EAAE;;IAEf5I,SAAS,EAAEC,QAAM,CAACmI;IAClBG,QAAQ,EAAEA;IACVb,GAAG,EAAEc;GATP,EAWEzI,mBAAA,MAAA;IAAKI,KAAK,EAAE;MAAEK,MAAM,EAAE8H,eAAV;MAA2BxI,KAAK,EAAE;;GAA9C,CAXF,CADF;AAeD,CAtCM;;SCQS+I,mBACdzK,cACA0K;EAEA,IAAMC,OAAO,GAAqB,EAAlC;EAEA,IAAID,WAAJ,EAAiBC,OAAO,CAAC5L,IAAR,CAAa;IAAEkF,EAAE,EAAE,QAAN;IAAgB1D,MAAM,EAAE;GAArC;EAEjBoK,OAAO,CAAC5L,IAAR,CACE;IAAEkF,EAAE,EAAE,IAAN;IAAY1D,MAAM,EAAE;GADtB,EAEE;IAAE0D,EAAE,EAAE,KAAN;IAAa1D,MAAM,EAAE;GAFvB,EAGE;IAAE0D,EAAE,EAAE,MAAN;IAAc1D,MAAM,EAAE;GAHxB,EAIE;IAAE0D,EAAE,EAAE,cAAN;IAAsB1D,MAAM,EAAE;GAJhC,EAKE;IAAE0D,EAAE,EAAE,YAAN;IAAoB1D,MAAM,EAAE;GAL9B;;EAQA,IAAIP,YAAY,KAAK,WAArB,EAAkC;IAChC2K,OAAO,CAAC5L,IAAR,CACE;MAAEkF,EAAE,EAAE,aAAN;MAAqB1D,MAAM,EAAE;KAD/B,EAEE;MAAE0D,EAAE,EAAE,WAAN;MAAmB1D,MAAM,EAAE;KAF7B;;;EAMF,IAAIP,YAAY,KAAK,MAArB,EAA6B;IAC3B2K,OAAO,CAAC5L,IAAR,CACE;MAAEkF,EAAE,EAAE,iBAAN;MAAyB1D,MAAM,EAAE;KADnC,EAEE;MAAE0D,EAAE,EAAE,iBAAN;MAAyB1D,MAAM,EAAE;KAFnC,EAGE;MAAE0D,EAAE,EAAE,mBAAN;MAA2B1D,MAAM,EAAE;KAHrC,EAIE;MAAE0D,EAAE,EAAE,gBAAN;MAAwB1D,MAAM,EAAE;KAJlC,EAKE;MAAE0D,EAAE,EAAE,cAAN;MAAsB1D,MAAM,EAAE;KALhC;;;EASF,OAAOoK,OAAP;AACD;AAGD,AAAO,IAAMC,gBAAgB,GAAG,EAAzB;AAGP,SAAgBC,yBACd7K,cACA0K,aACA3K;EAEA,IAAM+K,IAAI,GAAGtK,QAAQ,CAACT,QAAD,CAAR,IAAsB,CAAnC;EACA,IAAMgL,MAAM,GAA2B,EAAvC;;EACA,qDAAkBN,kBAAkB,CAACzK,YAAD,EAAe0K,WAAf,CAApC,wCAAiE;IAAA,IAAtDM,GAAsD;IAC/DD,MAAM,CAACC,GAAG,CAAC/G,EAAL,CAAN,GAAiB6G,IAAI,GAAGE,GAAG,CAACzK,MAA5B;;;EAEF,OAAOwK,MAAP;AACD;;;;ACCM,IAAME,QAAQ,GAA4B,SAApCA,QAAoC;MAC/CrL,oBAAAA;MACAC,kBAAAA;MACAC,gBAAAA;MACAC,gBAAAA;MACAqD,iBAAAA;MACAuE,eAAAA;MACAlK,aAAAA;MACAuC,oBAAAA;MACAqD,iBAAAA;MACA6H,oBAAAA;MACAC,uBAAAA;MACA7H,uBAAAA;MACArE,cAAAA;MACAgL,mBAAAA;MACAmB,mBAAAA;MACAC,gCAAAA;MACAC,sBAAAA;MACAC,qBAAAA;MACA9H,yBAAAA;MACA+H,qBAAAA;MACAC,sBAAAA;MACAC,yBAAAA;MACAC,4BAAAA;MACAC,sBAAAA;MACwBC,sCAAxBC;EAEA,IAAMC,8BAA8B,GAAG9D,MAAM,CAAiB,IAAjB,CAA7C;EACA,IAAM6D,sBAAsB,GAAGD,8BAAH,WAAGA,8BAAH,GAAqCE,8BAAjE;EACA,IAAMC,eAAe,GAAG/D,MAAM,CAAiB,IAAjB,CAA9B;EAEAM,SAAS,CAAC;IACR,IAAM0D,MAAM,GAAGH,sBAAsB,CAACtD,OAAtC;IACA,IAAI,CAACyD,MAAL,EAAa;;IACb,IAAM9B,QAAQ,GAAG,SAAXA,QAAW;MACf,IAAI6B,eAAe,CAACxD,OAApB,EAA6B;QAC3BwD,eAAe,CAACxD,OAAhB,CAAwB0D,UAAxB,GAAqCD,MAAM,CAACC,UAA5C;;KAFJ;;IAKAD,MAAM,CAAC5K,gBAAP,CAAwB,QAAxB,EAAkC8I,QAAlC;IACA,OAAO;MAAA,OAAM8B,MAAM,CAAC7K,mBAAP,CAA2B,QAA3B,EAAqC+I,QAArC,CAAN;KAAP;GATO,EAUN,CAAC2B,sBAAD,CAVM,CAAT;;EAWA,gBAA0C5D,QAAQ,CAAW,EAAX,CAAlD;MAAO3E,aAAP;MAAsB4I,gBAAtB;;EAIA,IAAMzB,WAAW,GAAG,CAAC,CAACc,aAAtB;;EACA,iBAAwCtD,QAAQ,CAAyB;IAAA,OACvE2C,wBAAwB,CAAC7K,YAAD,EAAe0K,WAAf,EAA4B3K,QAA5B,CAD+C;GAAzB,CAAhD;MAAOI,YAAP;MAAqBiM,eAArB;;EAOA7D,SAAS,CAAC;IACR,IAAM8D,QAAQ,GAAGxB,wBAAwB,CAAC7K,YAAD,EAAe0K,WAAf,EAA4B3K,QAA5B,CAAzC;IACAqM,eAAe,CAAC,UAAAE,IAAI;MAClB,IAAMC,GAAG,GAAGC,MAAM,CAACC,IAAP,CAAYJ,QAAZ,CAAZ;MACA,IAAMK,OAAO,GACXH,GAAG,CAACI,MAAJ,KAAeH,MAAM,CAACC,IAAP,CAAYH,IAAZ,EAAkBK,MAAjC,IAA2CJ,GAAG,CAACK,KAAJ,CAAU,UAAA3I,EAAE;QAAA,OAAIA,EAAE,IAAIqI,IAAV;OAAZ,CAD7C;MAEA,IAAII,OAAJ,EAAa,OAAOJ,IAAP;MACb,IAAMO,IAAI,GAA2B,EAArC;;MACA,wBAAiBN,GAAjB;QAAA;;QAAK,IAAMtI,EAAE,WAAR;QAAiB4I,IAAI,CAAC5I,EAAD,CAAJ,eAAWqI,IAAI,CAACrI,EAAD,CAAf,uBAAuBoI,QAAQ,CAACpI,EAAD,CAA/B;;;MACtB,OAAO4I,IAAP;KAPa,CAAf;GAFO,EAWN,CAAC7M,YAAD,EAAe0K,WAAf,EAA4B3K,QAA5B,CAXM,CAAT;;EAaA,IAAM+M,kBAAkB,GAAG,SAArBA,kBAAqB,CAACxM,KAAD,EAAgBoB,KAAhB;IACzB0K,eAAe,CAAC,UAAAE,IAAI;MAAA;;MAAA,oBACfA,IADe,6BAEjBhM,KAFiB,IAETvD,IAAI,CAAC4M,GAAL,CAASiB,gBAAT,EAA2BlJ,KAA3B,CAFS;KAAL,CAAf;GADF;;EAUA,IAAMqL,YAAY,GAAGlJ,OAAO,CAC1B;IAAA,OAAM2I,MAAM,CAACQ,MAAP,CAAc7M,YAAd,EAA4B8M,MAA5B,CAAmC,UAACC,GAAD,EAAMC,CAAN;MAAA,OAAYD,GAAG,GAAGC,CAAlB;KAAnC,EAAwD,CAAxD,CAAN;GAD0B,EAE1B,CAAChN,YAAD,CAF0B,CAA5B;EAIAoI,SAAS,CAAC;IACRoD,oBAAoB,SAApB,IAAAA,oBAAoB,WAApB,YAAAA,oBAAoB,CAAGoB,YAAH,CAApB;GADO,EAEN,CAACA,YAAD,EAAepB,oBAAf,CAFM,CAAT;;EAIA,iBAAkDzD,QAAQ,CAA0C,EAA1C,CAA1D;MAAOkF,iBAAP;MAA0BC,oBAA1B;;EACA,IAAMC,oBAAoB,GAAGrF,MAAM,CAAW,EAAX,CAAnC;EACA,IAAMsF,aAAa,GAAGtF,MAAM,CAAW,EAAX,CAA5B;EAEA,IAAMuF,WAAW,GAAGC,cAAc,CAAC;IACjCC,KAAK,EAAEjQ,KAAK,CAACkP,MADoB;IAEjCgB,gBAAgB,EAAE;MAAA,OAAM7B,sBAAsB,CAACtD,OAA7B;KAFe;IAGjCoF,YAAY,EAAE;MAAA,OAAMxK,SAAN;KAHmB;IAIjCyK,QAAQ,EAAE;GAJsB,CAAlC;EAOAtF,SAAS,CAAC;IACR,IAAIuD,sBAAsB,CAACtD,OAA3B,EAAoC;MAClCsD,sBAAsB,CAACtD,OAAvB,CAA+B6B,SAA/B,GAA2C1C,OAA3C;;GAFK,EAIN,CAACA,OAAD,CAJM,CAAT;EAMAY,SAAS,CAAC;IACR,IACEiD,aAAa,IACbtQ,IAAI,CAACC,SAAL,CAAemS,oBAAoB,CAAC9E,OAApC,MACEtN,IAAI,CAACC,SAAL,CAAeoI,aAAf,CAHJ,EAIE;MACA,IAAMuK,mBAAmB,GAAGrQ,KAAK,CAACsQ,MAAN,CAAa,UAAA9P,IAAI;QAAA,OAC3CsF,aAAa,CAAC8B,QAAd,CAAuBpH,IAAI,CAACgG,EAA5B,CAD2C;OAAjB,CAA5B;MAGAqJ,oBAAoB,CAAC9E,OAArB,aAAmCjF,aAAnC;MACAiI,aAAa,CAACsC,mBAAD,CAAb;;GAVK,EAYN,CAACvK,aAAD,EAAgB9F,KAAhB,EAAuB+N,aAAvB,CAZM,CAAT;EAiBAjD,SAAS,CAAC;IACR,IAAI6E,iBAAiB,CAACT,MAAlB,KAA6B,CAAjC,EAAoC;IAEpC,IAAMqB,WAAW,GAAG,IAAIjK,GAAJ,CAAQR,aAAR,CAApB;IACA6J,iBAAiB,CAACa,OAAlB,CAA0B;UAAG9J,eAAAA;UAAQ+J,iBAAAA;;MACnC,IAAIA,QAAJ,EAAc;QAEZC,aAAa,CAAChK,MAAD,EAAS1G,KAAT,CAAb;QAEA,IAAM2Q,WAAW,GAAGC,cAAc,CAAClK,MAAD,EAAS1G,KAAT,CAAlC;QACAuQ,WAAW,CAACM,GAAZ,CAAgBnK,MAAhB;QACAiK,WAAW,CAACH,OAAZ,CAAoB,UAAAM,CAAC;UAAA,OAAIP,WAAW,CAACM,GAAZ,CAAgBC,CAAhB,CAAJ;SAArB;OANF,MAOO;QACL,IAAMH,YAAW,GAAGC,cAAc,CAAClK,MAAD,EAAS1G,KAAT,CAAlC;;QACAuQ,WAAW,UAAX,CAAmB7J,MAAnB;;QACAiK,YAAW,CAACH,OAAZ,CAAoB,UAAAM,CAAC;UAAA,OAAIP,WAAW,UAAX,CAAmBO,CAAnB,CAAJ;SAArB;;KAXJ;IAeApC,gBAAgB,CAACqC,KAAK,CAACC,IAAN,CAAWT,WAAX,CAAD,CAAhB;IACAX,oBAAoB,CAAC,EAAD,CAApB;GApBO,EAqBN,CAACD,iBAAD,CArBM,CAAT;EAwBA7E,SAAS,CAAC;IACRgF,aAAa,CAAC/E,OAAd,GAAwB+E,aAAa,CAAC/E,OAAd,CAAsBuF,MAAtB,CAA6B,UAAA9J,EAAE;MACvD,IAAMP,CAAC,GAAGjG,KAAK,CAAC6G,IAAN,CAAW,UAAArG,IAAI;QAAA,OAAIA,IAAI,CAACgG,EAAL,KAAYA,EAAhB;OAAf,CAAV;MACA,OAAOP,CAAC,IAAI,CAACA,CAAC,CAACyB,YAAf;KAFwB,CAAxB;IAIA,IAAI5B,aAAa,CAACoJ,MAAd,KAAyB,CAA7B,EAAgC;IAEhC,IAAMqB,WAAW,GAAG,IAAIjK,GAAJ,EAApB;IACAR,aAAa,CAAC0K,OAAd,CAAsB,UAAA9J,MAAM;MAE1B,IAAI1G,KAAK,CAAC6G,IAAN,CAAW,UAAAZ,CAAC;QAAA,OAAIA,CAAC,CAACO,EAAF,KAASE,MAAb;OAAZ,CAAJ,EAAsC;QACpCgK,aAAa,CAAChK,MAAD,EAAS1G,KAAT,CAAb;QACAuQ,WAAW,CAACM,GAAZ,CAAgBnK,MAAhB;QACA,IAAMiK,WAAW,GAAGC,cAAc,CAAClK,MAAD,EAAS1G,KAAT,CAAlC;QACA2Q,WAAW,CAACH,OAAZ,CAAoB,UAAAM,CAAC;UAAA,OAAIP,WAAW,CAACM,GAAZ,CAAgBC,CAAhB,CAAJ;SAArB;;KANJ;IAUA,IAAMG,gBAAgB,GAAGF,KAAK,CAACC,IAAN,CAAWT,WAAX,CAAzB;;IACA,IAAI9S,IAAI,CAACC,SAAL,CAAeuT,gBAAf,MAAqCxT,IAAI,CAACC,SAAL,CAAeoI,aAAf,CAAzC,EAAwE;MACtE4I,gBAAgB,CAACuC,gBAAD,CAAhB;;GApBK,EAsBN,CAACjR,KAAK,CAACkP,MAAP,CAtBM,CAAT;;EAyBA,IAAM0B,cAAc,GAAG,SAAjBA,cAAiB,CAAClK,MAAD,EAAiBE,QAAjB;IACrB,IAAMpG,IAAI,GAAGoG,QAAQ,CAACC,IAAT,CAAc,UAAAZ,CAAC;MAAA,OAAIA,CAAC,CAACO,EAAF,KAASE,MAAb;KAAf,CAAb;IACA,IAAI,CAAClG,IAAL,EAAW,OAAO,EAAP;IACX,IAAM0Q,QAAQ,GAAGtK,QAAQ,CAAC0J,MAAT,CAAgB,UAAArK,CAAC;MAAA,OAAIc,YAAY,CAACd,CAAC,CAACO,EAAH,CAAZ,KAAuBE,MAA3B;KAAjB,CAAjB;IACA,OAAOwK,QAAQ,CAACC,OAAT,CAAiB,UAAAC,KAAK;MAAA,QAAKA,KAAK,CAAC5K,EAAX,SAAkBoK,cAAc,CAACQ,KAAK,CAAC5K,EAAP,EAAWI,QAAX,CAAhC;KAAtB,CAAP;GAJF;;EAOA,IAAM8J,aAAa,GAAG,SAAhBA,aAAgB,CAAChK,MAAD,EAAiBE,QAAjB;IACpB,IAAMpG,IAAI,GAAGoG,QAAQ,CAACC,IAAT,CAAc,UAAAZ,CAAC;MAAA,OAAIA,CAAC,CAACO,EAAF,KAASE,MAAb;KAAf,CAAb;IACA,IAAI,CAAClG,IAAL,EAAW;;IACX,IAAI,CAACsP,aAAa,CAAC/E,OAAd,CAAsBnD,QAAtB,CAA+BlB,MAA/B,CAAD,IAA2ClG,IAAI,CAACkH,YAApD,EAAkE;MAChE7B,eAAe,CAACrF,IAAD,CAAf;MACAsP,aAAa,CAAC/E,OAAd,aAA4B+E,aAAa,CAAC/E,OAA1C,GAAmDrE,MAAnD;;;IAEF,IAAMwK,QAAQ,GAAGtK,QAAQ,CAAC0J,MAAT,CAAgB,UAAArK,CAAC;MAAA,OAAIc,YAAY,CAACd,CAAC,CAACO,EAAH,CAAZ,KAAuBE,MAA3B;KAAjB,CAAjB;IACAwK,QAAQ,CAACV,OAAT,CAAiB,UAAAa,CAAC;MAAA,OAAIX,aAAa,CAACW,CAAC,CAAC7K,EAAH,EAAOI,QAAP,CAAjB;KAAlB;GARF;;EAWA,IAAM0K,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAC5K,MAAD,EAAiB+J,QAAjB;IACvBb,oBAAoB,CAAC,UAAAf,IAAI;MAAA,iBAAQA,IAAR,GAAc;QAAEnI,MAAM,EAANA,MAAF;QAAU+J,QAAQ,EAARA;OAAxB;KAAL,CAApB;GADF;;EAIA,IAAMc,eAAe,GAAG,SAAlBA,eAAkB,CAACd,QAAD;IACtB,IAAIA,QAAJ,EAAc;MACZ,IAAMe,aAAa,GAAGxR,KAAK,CAACsQ,MAAN,CAAa,UAAA9P,IAAI;QAAA,OAAI,CAACuG,YAAY,CAACvG,IAAI,CAACgG,EAAN,CAAjB;OAAjB,CAAtB;MACAoJ,oBAAoB,CAAC4B,aAAa,CAACjL,GAAd,CAAkB,UAAA/F,IAAI;QAAA,OAAK;UAAEkG,MAAM,EAAElG,IAAI,CAACgG,EAAf;UAAmBiK,QAAQ,EAAE;SAAlC;OAAtB,CAAD,CAApB;KAFF,MAGO;MACL/B,gBAAgB,CAAC,EAAD,CAAhB;MACAkB,oBAAoB,CAAC,EAAD,CAApB;;GANJ;;EAUA,IAAM6B,WAAW,GAAG;IAClBtP,YAAY,EAAZA,YADkB;IAElBC,UAAU,EAAVA,UAFkB;IAGlBC,QAAQ,EAARA,QAHkB;IAIlBC,QAAQ,EAARA,QAJkB;IAKlBC,YAAY,EAAZA,YALkB;IAMlBC,WAAW,EAAExC,KAAK,CAACkP,MAAN,GAAe,CAAf,IAAoBpJ,aAAa,CAACoJ,MAAd,KAAyBlP,KAAK,CAACkP,MAN9C;IAOlBzM,WAAW,EAAEsL,aAAa,GAAGwD,eAAH,GAAqBG,SAP7B;IAQlBhP,YAAY,EAAZA,YARkB;IASlBC,cAAc,EAAE0M;GATlB;EAWA,IAAMsC,cAAc,GAAGlE,YAAY,GAAGA,YAAY,CAACjH,EAAhB,GAAqB,EAAxD;EAEA,IAAMoL,UAAU,GAAG;IACjBjM,SAAS,EAATA,SADiB;IAEjBrD,QAAQ,EAARA,QAFiB;IAGjBF,UAAU,EAAVA,UAHiB;IAIjBC,QAAQ,EAARA,QAJiB;IAKjBrC,KAAK,EAALA,KALiB;IAMjB4F,SAAS,EAATA,SANiB;IAOjBrD,YAAY,EAAZA,YAPiB;IAQjBf,MAAM,EAANA,MARiB;IASjBmQ,cAAc,EAAEA,cATC;IAUjBjE,eAAe,EAAfA,eAViB;IAWjB7H,eAAe,EAAfA,eAXiB;IAYjBC,aAAa,EAAEiI,aAAa,GAAGjI,aAAH,GAAmB4L,SAZ9B;IAajB3L,YAAY,EAAEgI,aAAa,GAAGuD,gBAAH,GAAsBI,SAbhC;IAcjB1L,iBAAiB,EAAjBA,iBAdiB;IAejBG,YAAY,EAAE4J,WAAW,CAAC8B,eAAZ,EAfG;IAgBjBnP,YAAY,EAAZA;GAhBF;EAmBA,OACEwB,mBAAA,MAAA;IACE2H,GAAG,EAAE8B;IACLrJ,KAAK,EACH0J,cAAc,IAAI,IAAlB,IAA0BC,iBAAiB,IAAI,IAA/C,gBAEUD,cAAc,IAAI,IAAlB,GAAyB;MAAE/J,KAAK,EAAE+J;KAAlC,GAAqD,EAF/D,EAGUC,iBAAiB,IAAI,IAArB,GAA4B;MAAEzJ,QAAQ,EAAEyJ;KAAxC,GAA8D,EAHxE;MAIM6D,QAAQ,EAAE,QAJhB;MAKMC,UAAU,EAAE;SAEd;GAVR,EAaE7N,mBAAA,MAAA;IACE2H,GAAG,EAAEsC;IACLhK,SAAS,EAAEC,QAAM,CAAC4N;IAClB1N,KAAK,EAAE;MAAE2N,SAAS,EAAE;;GAHtB,EAKE/N,mBAAA,MAAA;IAAK2H,GAAG,EAAE0C;IAAiBjK,KAAK,EAAE;MAAEwN,QAAQ,EAAE;;GAA9C,EACE5N,mBAAA,CAAC2J,cAAD,oBAAoB4D,YAApB,CADF,CALF,EAQEvN,mBAAA,MAAA;IACE2H,GAAG,EAAEwC;IACLlK,SAAS,EAAEyJ;IACXtJ,KAAK,EAAEkI,WAAW,GAAG;MAAE7H,MAAM,EAAE6H;KAAb,GAA6B;GAHjD,EAKEtI,mBAAA,MAAA;IACEI,KAAK,EAAE;MACLK,MAAM,EAAKoL,WAAW,CAACmC,YAAZ,EAAL,OADD;MAELjO,KAAK,EAAE,MAFF;MAGLQ,QAAQ,EAAE;;GAJd,EAOEP,mBAAA,CAAC4J,aAAD,oBAAmB8D,WAAnB,CAPF,CALF,CARF,CAbF,CADF;AAwCD,CAhRM;;SC5DSO,mBAAmBlM;EACjC,IAAMmM,KAAK,GAAGnM,CAAC,CAACoM,KAAF,CAAQ,GAAR,EAAa9L,GAAb,CAAiB+L,MAAjB,CAAd;EACA,OAAOF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAArB,IAA4BA,KAAK,CAAC,CAAD,CAAL,GAAWA,KAAK,CAAC,CAAD,CAAL,GAAW,EAAtB,GAA2B,CAAvD,CAAP;AACD;;AAGD,SAASG,YAAT,CAAsBxU,IAAtB;EACE,IAAMyU,CAAC,GAAGzU,IAAI,CAACK,WAAL,EAAV;EACA,IAAMqU,CAAC,GAAGC,MAAM,CAAC3U,IAAI,CAACM,QAAL,KAAkB,CAAnB,CAAN,CAA4BsU,QAA5B,CAAqC,CAArC,EAAwC,GAAxC,CAAV;EACA,IAAM7B,CAAC,GAAG4B,MAAM,CAAC3U,IAAI,CAACO,OAAL,EAAD,CAAN,CAAuBqU,QAAvB,CAAgC,CAAhC,EAAmC,GAAnC,CAAV;EACA,OAAUH,CAAV,SAAeC,CAAf,SAAoB3B,CAApB;AACD;;AAGD,SAAgB8B,UAAU7U,MAAY8U;EACpC,IAAIA,GAAG,CAACC,QAAJ,IAAgBD,GAAG,CAACC,QAAJ,CAAa5D,MAAb,GAAsB,CAA1C,EAA6C;IAC3C,OAAO2D,GAAG,CAACC,QAAJ,CAAalL,QAAb,CAAsB2K,YAAY,CAACxU,IAAD,CAAlC,CAAP;GADF,MAEO;IACL,OAAO,KAAP;;AAEH;AAGD,SAAgBgV,SAAShV,MAAY8U;EACnC,IAAIA,GAAG,CAACG,QAAJ,IAAgBH,GAAG,CAACG,QAAJ,CAAa9D,MAAb,GAAsB,CAA1C,EAA6C;IAC3C,OAAO2D,GAAG,CAACG,QAAJ,CAAapL,QAAb,CAAsB7J,IAAI,CAACgE,MAAL,EAAtB,KAAwC6Q,SAAS,CAAC7U,IAAD,EAAO8U,GAAP,CAAxD;GADF,MAEO;IACL,OAAO,KAAP;;AAEH;AAGD,SAQgBI,gBACdlV,MACA8U;EAEA,IAAIE,QAAQ,CAAChV,IAAD,EAAO8U,GAAP,CAAR,IAAuB,CAACA,GAAG,CAACK,MAAhC,EAAwC,OAAO,EAAP;EACxC,OAAOL,GAAG,CAACK,MAAJ,CAAW3M,GAAX,CAAe;IAAA,IAAE4M,CAAF;QAAKjQ,CAAL;IAAA,OAAa;MACjC9C,KAAK,EAAE+R,kBAAkB,CAACgB,CAAD,CADQ;MAEjC5S,GAAG,EAAE4R,kBAAkB,CAACjP,CAAD;KAFH;GAAf,CAAP;AAID;AAQD,SAAgBkQ,oBACdhT,OACAG,KACAsS;EAEA,IAAIzS,KAAK,IAAIG,GAAb,EAAkB,OAAO,EAAP;EAClB,IAAM8S,SAAS,GAAsC,EAArD;EAGA,IAAMC,MAAM,GAAG,IAAInV,IAAJ,CAASiC,KAAT,CAAf;EACAkT,MAAM,CAACC,QAAP,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;;EAEA,OAAOD,MAAM,IAAI/S,GAAjB,EAAsB;IACpB,IAAM2S,MAAM,GAAGD,eAAe,CAACK,MAAD,EAAST,GAAT,CAA9B;;IAEA,qDAAoBK,MAApB,wCAA4B;MAAA,IAAjBM,KAAiB;MAE1B,IAAMC,UAAU,GAAG,IAAItV,IAAJ,CAASmV,MAAT,CAAnB;MACAG,UAAU,CAACF,QAAX,CACEjU,IAAI,CAACC,KAAL,CAAWiU,KAAK,CAACpT,KAAN,GAAc,EAAzB,CADF,EAEEd,IAAI,CAACC,KAAL,CAAWiU,KAAK,CAACpT,KAAN,GAAc,EAAzB,CAFF,EAGEd,IAAI,CAACkK,KAAL,CAAYgK,KAAK,CAACpT,KAAN,GAAc,CAAf,GAAoB,EAA/B,CAHF,EAIE,CAJF;MAMA,IAAMsT,QAAQ,GAAG,IAAIvV,IAAJ,CAASmV,MAAT,CAAjB;MACAI,QAAQ,CAACH,QAAT,CACEjU,IAAI,CAACC,KAAL,CAAWiU,KAAK,CAACjT,GAAN,GAAY,EAAvB,CADF,EAEEjB,IAAI,CAACC,KAAL,CAAWiU,KAAK,CAACjT,GAAN,GAAY,EAAvB,CAFF,EAGEjB,IAAI,CAACkK,KAAL,CAAYgK,KAAK,CAACjT,GAAN,GAAY,CAAb,GAAkB,EAA7B,CAHF,EAIE,CAJF;MAQA,IAAMoT,aAAa,GAAGF,UAAU,GAAGrT,KAAb,GAAqBA,KAArB,GAA6BqT,UAAnD;MACA,IAAMG,WAAW,GAAGF,QAAQ,GAAGnT,GAAX,GAAiBA,GAAjB,GAAuBmT,QAA3C;;MAEA,IAAIC,aAAa,GAAGC,WAApB,EAAiC;QAC/BP,SAAS,CAAC/R,IAAV,CAAe;UAAElB,KAAK,EAAEuT,aAAT;UAAwBpT,GAAG,EAAEqT;SAA5C;;;;IAKJN,MAAM,CAACrR,OAAP,CAAeqR,MAAM,CAAChV,OAAP,KAAmB,CAAlC;;;EAGF,OAAO+U,SAAP;AACD;AAQD,SAAgBQ,kBACd9V,MACA8U,KACAiB;EAEA,IAAMC,QAAQ,GAAG,EAAjB;EACA,IAAMC,MAAM,GAAG,IAAI7V,IAAJ,CAASJ,IAAT,CAAf;;EAEA,KAAK,IAAIkW,OAAO,GAAG,CAAnB,EAAsBA,OAAO,GAAGF,QAAQ,GAAG,EAAX,GAAgB,EAAhD,EAAoDE,OAAO,EAA3D,EAA+D;IAC7D,IAAMC,QAAQ,GAAG,IAAI/V,IAAJ,CAAS6V,MAAT,CAAjB;IACAE,QAAQ,CAACX,QAAT,CAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B;IACA,IAAML,MAAM,GAAGD,eAAe,CAACiB,QAAD,EAAWrB,GAAX,CAA9B;;IAEA,IAAIK,MAAM,CAAChE,MAAP,GAAgB,CAApB,EAAuB;MACrB,IAAI4E,SAAS,KAAK,SAAlB,EAA6B;QAE3B,IAAMK,WAAW,GACfH,MAAM,CAACzV,QAAP,KAAoB,EAApB,GACAyV,MAAM,CAACxV,UAAP,EADA,GAEAwV,MAAM,CAACvV,UAAP,KAAsB,EAHxB;;QAIA,sDAAoByU,MAApB,2CAA4B;UAAA,IAAjBM,KAAiB;;UAC1B,IAAIW,WAAW,IAAIX,KAAK,CAACjT,GAAzB,EAA8B;YAE5B,IAAI4T,WAAW,GAAGX,KAAK,CAACpT,KAAxB,EAA+B;cAC7B4T,MAAM,CAACT,QAAP,CACEjU,IAAI,CAACC,KAAL,CAAWiU,KAAK,CAACpT,KAAN,GAAc,EAAzB,CADF,EAEEd,IAAI,CAACkK,KAAL,CAAWgK,KAAK,CAACpT,KAAN,GAAc,EAAzB,CAFF,EAGE,CAHF,EAIE,CAJF;;;YAOF,OAAO4T,MAAP;;;;QAIJA,MAAM,CAAC/R,OAAP,CAAe+R,MAAM,CAAC1V,OAAP,KAAmB,CAAlC;QACA0V,MAAM,CAACT,QAAP,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;OAtBF,MAuBO;QAEL,IAAMY,YAAW,GACfH,MAAM,CAACzV,QAAP,KAAoB,EAApB,GACAyV,MAAM,CAACxV,UAAP,EADA,GAEAwV,MAAM,CAACvV,UAAP,KAAsB,EAHxB;;QAKA,KAAK,IAAI2V,CAAC,GAAGlB,MAAM,CAAChE,MAAP,GAAgB,CAA7B,EAAgCkF,CAAC,IAAI,CAArC,EAAwCA,CAAC,EAAzC,EAA6C;UAC3C,IAAID,YAAW,IAAIjB,MAAM,CAACkB,CAAD,CAAN,CAAUhU,KAA7B,EAAoC;YAClC,IAAI+T,YAAW,GAAGjB,MAAM,CAACkB,CAAD,CAAN,CAAU7T,GAA5B,EAAiC;cAC/ByT,MAAM,CAACT,QAAP,CACEjU,IAAI,CAACC,KAAL,CAAW2T,MAAM,CAACkB,CAAD,CAAN,CAAU7T,GAAV,GAAgB,EAA3B,CADF,EAEEjB,IAAI,CAACkK,KAAL,CAAW0J,MAAM,CAACkB,CAAD,CAAN,CAAU7T,GAAV,GAAgB,EAA3B,CAFF,EAGE,CAHF,EAIE,CAJF;;;YAOF,OAAOyT,MAAP;;;;QAIJA,MAAM,CAAC/R,OAAP,CAAe+R,MAAM,CAAC1V,OAAP,KAAmB,CAAlC;QACA0V,MAAM,CAACT,QAAP,CAAgB,EAAhB,EAAoB,EAApB,EAAwB,EAAxB,EAA4B,CAA5B;;KA9CJ,MAgDO;MAEL,IAAIO,SAAS,KAAK,SAAlB,EAA6B;QAC3BE,MAAM,CAAC/R,OAAP,CAAe+R,MAAM,CAAC1V,OAAP,KAAmB,CAAlC;QACA0V,MAAM,CAACT,QAAP,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;OAFF,MAGO;QACLS,MAAM,CAAC/R,OAAP,CAAe+R,MAAM,CAAC1V,OAAP,KAAmB,CAAlC;QACA0V,MAAM,CAACT,QAAP,CAAgB,EAAhB,EAAoB,EAApB,EAAwB,EAAxB,EAA4B,CAA5B;;;;;EAMN,OAAOxV,IAAP;AACD;AAMD,SAagBsW,iBACdtW,MACAmB;EAEA,IAAMC,KAAK,GAAGpB,IAAI,CAACM,QAAL,EAAd;EAEA,IAAMe,MAAM,GAAI,CAACD,KAAK,GAAGD,YAAR,GAAuB,EAAxB,IAA8B,EAA9C;EACA,OAAOI,IAAI,CAACC,KAAL,CAAWH,MAAM,GAAG,CAApB,IAAyB,CAAhC;AACD;;;;AChMM,IAAMkV,QAAQ,GAA4B,SAApCA,QAAoC;;;MAC/CtU,aAAAA;MACAuC,oBAAAA;MACAlB,aAAAA;MACAsE,iBAAAA;MACA4O,gBAAAA;MACAC,mBAAAA;MACAC,kBAAAA;MACAC,oBAAAA;MACA5K,WAAAA;+BACA3D;MAAAA,8CAAe;MACfwO,qBAAAA;MACAC,mBAAAA;MACAC,uBAAAA;MACA5U,gBAAAA;EAEA,IAAM6U,aAAa,GAAGF,WAAW,GAAGD,aAApC;EACA,IAAM1L,GAAG,GAAG,IAAI9K,IAAJ,EAAZ;EAGA,IAAM4W,KAAK,GACT5O,YAAY,CAAC+I,MAAb,GAAsB,CAAtB,GACI/I,YADJ,GAEInG,KAAK,CAACuG,GAAN,CAAU,UAACW,CAAD,EAAIkN,CAAJ;IAAA,OAAW;MACnBjN,KAAK,EAAEiN,CADY;MAEnBhU,KAAK,EAAEgU,CAAC,GAAGzO,SAFQ;MAGnBpF,GAAG,EAAE,CAAC6T,CAAC,GAAG,CAAL,IAAUzO,SAHI;MAInByB,IAAI,EAAEzB,SAJa;MAKnBnI,GAAG,EAAE4W;KALG;GAAV,CAHN;;EAWA,IAAMY,QAAQ,GAAG,SAAXA,QAAW,CAACjX,IAAD;IACf,IAAI8W,eAAJ,EAAqB,OAAO9B,QAAQ,CAAChV,IAAD,EAAO8W,eAAP,CAAf;IACrB,IAAM/D,CAAC,GAAG/S,IAAI,CAACgE,MAAL,EAAV;IACA,OAAO+O,CAAC,KAAK,CAAN,IAAWA,CAAC,KAAK,CAAxB;GAHF;;EAMA,IAAMmE,aAAa,GAAG,SAAhBA,aAAgB,CAACb,CAAD;IACpB,IAAMrW,IAAI,GAAGsD,KAAK,CAAC+S,CAAD,CAAlB;IACA,IAAMhF,IAAI,GAAG/N,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAlB;IACA,IAAIhF,IAAI,IAAIrR,IAAI,IAAIkL,GAAhB,IAAuBmG,IAAI,GAAGnG,GAAlC,EAAuC,OAAO,IAAP;;IACvC,IAAI,CAACmG,IAAD,IAASrR,IAAI,IAAIkL,GAArB,EAA0B;MAIxB,IAAM4F,IAAI,GAAGxN,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAlB;MACA,IAAMc,IAAI,GAAGrG,IAAI,GAAG9Q,IAAI,CAACsC,OAAL,KAAiBwO,IAAI,CAACxO,OAAL,EAApB,GAAqC,QAAtD;MACA,IAAME,GAAG,GAAGzC,SAAS,CAACC,IAAD,EAAOmX,IAAP,EAAa,aAAb,CAArB;MACA,OAAO3U,GAAG,GAAG0I,GAAb;;;IAEF,OAAO,KAAP;GAbF;;EAiBA,IAAMkM,UAAU,GAAsB,EAAtC;EACA,IAAMC,WAAW,GAAsB,EAAvC;EACA,IAAMC,YAAY,4BAAGR,eAAH,aAAGA,eAAH,uBAAGA,eAAe,CAAES,UAApB,oCAAkC,CAApD;;EAEA,KAAK,IAAIlB,CAAC,GAAG,CAAR,EAAWmB,CAAC,GAAG,CAApB,EAAuBnB,CAAC,GAAG/S,KAAK,CAAC6N,MAAjC,EAAyCkF,CAAC,IAAImB,CAAC,IAAIf,WAAnD,EAAgE;IAC9D,IAAIS,aAAa,CAACb,CAAD,CAAjB,EAAsB;MACpBe,UAAU,CAAC7T,IAAX,CACE4C,mBAAA,OAAA;QACE1G,GAAG,aAAW4W;QACdmB,CAAC,EAAEzL,GAAG,GAAGyL,CAAC,GAAGf,WAAP,GAAqBe;QAC3B/C,CAAC,EAAEmC;QACH1Q,KAAK,EAAEuQ;QACP7P,MAAM,EAAEmQ;QACRU,IAAI,EAAEf;OANR,CADF;;;IAYF,IAAIxU,QAAQ,KAAK9C,QAAQ,CAACyC,KAAtB,IAA+BK,QAAQ,KAAK9C,QAAQ,CAAC0C,OAAzD,EAAkE;MAAA;;MAChE,IAAM4V,IAAI,aAAGpU,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAR,qBAAmBtW,SAAS,CAACuD,KAAK,CAAC+S,CAAD,CAAN,EAAW,CAAX,EAAc,KAAd,CAAtC;MACA,IAAMsB,QAAQ,GAAGD,IAAI,CAACpV,OAAL,KAAiBgB,KAAK,CAAC+S,CAAD,CAAL,CAAS/T,OAAT,EAAlC;;MACA,IAAIqV,QAAQ,GAAG,CAAf,EAAkB;QAChB,IAAMpC,MAAM,GAAG,IAAInV,IAAJ,CAASkD,KAAK,CAAC+S,CAAD,CAAd,CAAf;QACAd,MAAM,CAACC,QAAP,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;;QACA,OAAOD,MAAM,CAACjT,OAAP,KAAmBoV,IAAI,CAACpV,OAAL,EAA1B,EAA0C;UACxC,IAAI2U,QAAQ,CAAC1B,MAAD,CAAZ,EAAsB;YACpB,IAAMqC,EAAE,GAAGrC,MAAM,CAACjT,OAAP,KAAmBgB,KAAK,CAAC+S,CAAD,CAAL,CAAS/T,OAAT,EAA9B;YACA,IAAMuV,EAAE,GAAGD,EAAE,GAAG,QAAhB;YACA,IAAME,SAAS,GAAGvW,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAYyJ,EAAZ,IAAkBD,QAApC;YACA,IAAMI,OAAO,GAAGxW,IAAI,CAACyW,GAAL,CAASL,QAAT,EAAmBE,EAAnB,IAAyBF,QAAzC;YACA,IAAMM,EAAE,GAAG,CAACF,OAAO,GAAGD,SAAX,IAAwBrB,WAAnC;;YACA,IAAIwB,EAAE,GAAG,GAAT,EAAc;cACZZ,WAAW,CAAC9T,IAAZ,CACE4C,mBAAA,OAAA;gBACE1G,GAAG,cAAY4W,CAAZ,SAAiBd,MAAM,CAACjT,OAAP;gBACpBkV,CAAC,EAAEA,CAAC,GAAGM,SAAS,GAAGrB;gBACnBhC,CAAC,EAAEmC;gBACH1Q,KAAK,EAAE+R;gBACPrR,MAAM,EAAEmQ;gBACRU,IAAI,EAAEd;eANR,CADF;;;;UAYJpB,MAAM,CAACrR,OAAP,CAAeqR,MAAM,CAAChV,OAAP,KAAmB,CAAlC;;;;;;EASR,IAAM2X,SAAS,GAAGhW,QAAQ,KAAK9C,QAAQ,CAACuC,GAAxC;EACA,IAAMwW,UAAU,GAAGjW,QAAQ,KAAK9C,QAAQ,CAACwC,IAAzC;EACA,IAAMwW,SAAS,GAAG9U,KAAK,CAACkF,GAAN,CAAU,UAACxI,IAAD,EAAOqW,CAAP;IAC1B,IAAIgC,SAAS,GAAGhS,QAAM,CAACiS,QAAvB;;IACA,IAAIJ,SAAJ,EAAe;MACbG,SAAS,GACPrY,IAAI,CAACgE,MAAL,OAAkBsT,YAAlB,GACIjR,QAAM,CAACkS,iBADX,GAEIlS,QAAM,CAACmS,cAHb;KADF,MAKO,IAAIL,UAAJ,EAAgB;MACrBE,SAAS,GAAGhS,QAAM,CAACkS,iBAAnB;;;IAEF,OACEpS,mBAAA,OAAA;MACE1G,GAAG,YAAU4W;MACb9I,EAAE,EAAE8I,CAAC,GAAGI;MACRgC,EAAE,EAAE7B;MACJpJ,EAAE,EAAE6I,CAAC,GAAGI;MACRiC,EAAE,EAAE7B;MACJzQ,SAAS,EAAEiS;KANb,CADF;GAVgB,CAAlB;EAuBA,IAAMM,cAAc,GAAsB,EAA1C;EACA,IAAMC,QAAQ,GAAsB,EAApC;EAIA,IAAMC,WAAW,GAAsB,EAAvC;EAGAD,QAAQ,CAACrV,IAAT,CACE4C,mBAAA,OAAA;IACE1G,GAAG,EAAC;IACJ8N,EAAE,EAAE;IACJkL,EAAE,EAAE7B;IACJpJ,EAAE,EAAEgJ;IACJkC,EAAE,EAAE9B;IACJxQ,SAAS,EAAEC,QAAM,CAACyS;GANpB,CADF;EAWA,IAAMC,iBAAiB,GACrB7W,QAAQ,KAAK9C,QAAQ,CAACyC,KAAtB,IAA+BK,QAAQ,KAAK9C,QAAQ,CAAC0C,OADvD;;EAGA,qDAAiBkV,KAAjB,wCAAwB;IAAA,IAAbvN,EAAa;IACtB,IAAMhH,IAAI,GAAGR,KAAK,CAACwH,EAAE,CAACL,KAAJ,CAAlB;IACA,IAAI,CAAC3G,IAAL,EAAW;IAEX,IAAMgS,CAAC,GAAGhL,EAAE,CAACpH,KAAb;IACA,IAAM2W,WAAW,GAAGvW,IAAI,CAACuE,IAAL,KAAc,WAAlC;IAEA,IAAMiS,QAAQ,GAAGD,WAAW,GACxB3S,QAAM,CAAC6S,aADiB,GAExB1U,YAAY,KAAK,WAAjB,GACA6B,QAAM,CAAC8S,gBADP,GAEA9S,QAAM,CAAC+S,OAJX;IAMAT,cAAc,CAACpV,IAAf,CACE4C,mBAAA,OAAA;MACE1G,GAAG,UAAQgK,EAAE,CAAChK;MACd+X,CAAC,EAAE;MACH/C,CAAC,EAAEA;MACHvO,KAAK,EAAEsQ;MACP5P,MAAM,EAAEgB;MACRxB,SAAS,EAAE6S;KANb,CADF;IAWAL,QAAQ,CAACrV,IAAT,CACE4C,mBAAA,OAAA;MACE1G,GAAG,YAAUgK,EAAE,CAAChK;MAChB8N,EAAE,EAAE;MACJkL,EAAE,EAAEhE,CAAC,GAAG7M;MACR4F,EAAE,EAAEgJ;MACJkC,EAAE,EAAEjE,CAAC,GAAG7M;MACRxB,SAAS,EAAEC,QAAM,CAACyS;KANpB,CADF;;IAWA,IAAIC,iBAAJ,EAAuB;MAIrB,IAAMM,OAAO,GAAG5P,EAAE,CAACL,KAAH,GAAW,CAAX,KAAiB,CAAjC;MACA,IAAMkQ,OAAO,GAAGN,WAAW,GACvB,SADuB,GAEvBxU,YAAY,KAAK,WAAjB,GACA,MADA,GAEA6U,OAAO,GACP,SADO,GAEP,MANJ;MAOAR,WAAW,CAACtV,IAAZ,CACE4C,mBAAA,OAAA;QACE1G,GAAG,iBAAegK,EAAE,CAAChK;QACrB+X,CAAC,EAAE;QACH/C,CAAC,EAAEA;QACHvO,KAAK,EAAEsQ;QACP5P,MAAM,EAAEgB;QACR6P,IAAI,EAAE6B;OANR,CADF;MAYA,IAAMxE,GAAG,GAAGrS,IAAI,CAAC8W,QAAjB;;MACA,IAAIzE,GAAJ,EAAS;QACP,KAAK,IAAIuB,EAAC,GAAG,CAAR,EAAWmB,EAAC,GAAG,CAApB,EAAuBnB,EAAC,GAAG/S,KAAK,CAAC6N,MAAjC,EAAyCkF,EAAC,IAAImB,EAAC,IAAIf,WAAnD,EAAgE;UAAA;;UAC9D,IAAMiB,KAAI,cAAGpU,KAAK,CAAC+S,EAAC,GAAG,CAAL,CAAR,sBAAmBtW,SAAS,CAACuD,KAAK,CAAC+S,EAAD,CAAN,EAAW,CAAX,EAAc,KAAd,CAAtC;;UACA,IAAMsB,SAAQ,GAAGD,KAAI,CAACpV,OAAL,KAAiBgB,KAAK,CAAC+S,EAAD,CAAL,CAAS/T,OAAT,EAAlC;;UACA,IAAIqV,SAAQ,IAAI,CAAhB,EAAmB;;UACnB,IAAMpC,OAAM,GAAG,IAAInV,IAAJ,CAASkD,KAAK,CAAC+S,EAAD,CAAd,CAAf;;UACAd,OAAM,CAACC,QAAP,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;;UACA,OAAOD,OAAM,CAACjT,OAAP,KAAmBoV,KAAI,CAACpV,OAAL,EAA1B,EAA0C;YACxC,IAAI0S,QAAQ,CAACO,OAAD,EAAST,GAAT,CAAZ,EAA2B;cACzB,IAAM8C,GAAE,GAAGrC,OAAM,CAACjT,OAAP,KAAmBgB,KAAK,CAAC+S,EAAD,CAAL,CAAS/T,OAAT,EAA9B;;cACA,IAAMuV,GAAE,GAAGD,GAAE,GAAG,QAAhB;;cACA,IAAME,UAAS,GAAGvW,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAYyJ,GAAZ,IAAkBD,SAApC;;cACA,IAAMI,QAAO,GAAGxW,IAAI,CAACyW,GAAL,CAASL,SAAT,EAAmBE,GAAnB,IAAyBF,SAAzC;;cACA,IAAMM,GAAE,GAAG,CAACF,QAAO,GAAGD,UAAX,IAAwBrB,WAAnC;;cACA,IAAIwB,GAAE,GAAG,GAAT,EAAc;gBACZY,WAAW,CAACtV,IAAZ,CACE4C,mBAAA,OAAA;kBACE1G,GAAG,kBAAgBgK,EAAE,CAAChK,GAAnB,SAA0B8V,OAAM,CAACjT,OAAP;kBAC7BkV,CAAC,EAAEzL,GAAG,GAAGyL,EAAC,GAAGf,WAAJ,IAAmBqB,UAAS,GAAGrB,WAAZ,GAA0BwB,GAA7C,CAAH,GAAsDT,EAAC,GAAGM,UAAS,GAAGrB;kBAC5EhC,CAAC,EAAEA;kBACHvO,KAAK,EAAE+R;kBACPrR,MAAM,EAAEgB;kBACR6P,IAAI,EAAEd;iBANR,CADF;;;;YAYJpB,OAAM,CAACrR,OAAP,CAAeqR,OAAM,CAAChV,OAAP,KAAmB,CAAlC;;;;;;;EAOV,OACE4F,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EACED,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAAqBuS,cAArB,CADF,EAEExS,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAAyBwS,QAAzB,CAFF,EAGEzS,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAAwBiR,WAAxB,CAHF,EAIElR,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAA4ByS,WAA5B,CAJF,EAKE1S,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAAsBgS,SAAtB,CALF,EAMEjS,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAAsBgR,UAAtB,CANF,CADF;AAUD,CAlQM;;ACpBA,IAAMoC,IAAI,GAAwB,SAA5BA,IAA4B,CAAAC,KAAK;EAC5C,OACEtT,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EACED,mBAAA,CAACoQ,QAAD,oBAAckD,MAAd,CADF,CADF;AAKD,CANM;;;;ACSA,IAAMC,iBAAiB,GAAqC,SAAtDA,iBAAsD;MACjEC,aAAAA;MACAC,cAAAA;MACAC,cAAAA;MACAC,cAAAA;MACAC,aAAAA;MACAC,aAAAA;6BACAC;MAAAA,0CAAa;EAEb,IAAMC,eAAe,GACnBD,UAAU,KAAK,OAAf,GACI5T,QAAM,CAAC8T,eADX,GAEIF,UAAU,KAAK,QAAf,GACA5T,QAAM,CAAC+T,gBADP,GAEA/T,QAAM,CAACgU,aALb;EAMA,OACElU,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EACED,mBAAA,OAAA;IACEoH,EAAE,EAAEqM;IACJnB,EAAE,EAAEoB;IACJrM,EAAE,EAAEoM;IACJlB,EAAE,EAAEoB;IACJ1T,SAAS,EAAEC,QAAM,CAACiU;IAClB7a,GAAG,EAAEka,KAAK,GAAG;GANf,CADF,EASExT,mBAAA,OAAA;IACE1G,GAAG,EAAEka,KAAK,GAAG;IACblF,CAAC,EAAEuF;IACHxC,CAAC,EAAEuC;IACH3T,SAAS,EAAKC,QAAM,CAACkU,eAAZ,SAA+BL;GAJ1C,EAMGP,KANH,CATF,CADF;AAoBD,CAnCM;;ACeA,IAAMa,QAAQ,GAA4B,SAApCA,QAAoC;MAC/CC,iBAAAA;MACAhX,cAAAA;MACAvB,gBAAAA;MACA6J,WAAAA;MACA3H,oBAAAA;MACAqS,mBAAAA;MACApS,kBAAAA;MACAC,gBAAAA;MACAwS,uBAAAA;MACAH,oBAAAA;;EAGA,IAAMM,QAAQ,GAAG,SAAXA,QAAW,CAACjX,IAAD;IACf,IAAI8W,eAAJ,EAAqB,OAAO9B,QAAQ,CAAChV,IAAD,EAAO8W,eAAP,CAAf;IAErB,OAAO,KAAP;GAHF;;EAMA,IAAM4D,UAAU,GAAG,SAAbA,UAAa,CAAC1a,IAAD;IAAA,OACjBA,IAAI,CAAC2a,cAAL,CAAoBlX,MAApB,EAA4B;MAAErC,KAAK,EAAE;KAArC,CADiB;GAAnB;;EAGA,IAAMwZ,wBAAwB,GAAG,SAA3BA,wBAA2B;IAC/B,IAAMC,SAAS,GAAiB,EAAhC;IACA,IAAMC,YAAY,GAAiB,EAAnC;IACA,IAAMC,gBAAgB,GAAG3W,YAAY,GAAG,GAAxC;;IACA,KAAK,IAAIiS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoE,SAAS,CAACnX,KAAV,CAAgB6N,MAApC,EAA4CkF,CAAC,EAA7C,EAAiD;MAC/C,IAAMrW,IAAI,GAAGya,SAAS,CAACnX,KAAV,CAAgB+S,CAAhB,CAAb;MACA,IAAM1S,WAAW,GAAG3D,IAAI,CAACK,WAAL,EAApB;MACAya,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,EAAEO,IAAI,CAACK,WAAL;QACLoU,CAAC,EAAErQ,YAAY,GAAG;QAClBoT,CAAC,EAAEf,WAAW,GAAGJ,CAAd,GAAkBI,WAAW,GAAG;QACnCrQ,SAAS,EAAEC,QAAM,CAAC2U;OAJpB,EAMGrX,WANH,CADF;;MAUA,IACE0S,CAAC,KAAK,CAAN,IACArW,IAAI,CAACK,WAAL,OAAuBoa,SAAS,CAACnX,KAAV,CAAgB+S,CAAC,GAAG,CAApB,EAAuBhW,WAAvB,EAFzB,EAGE;QACA,IAAM4a,QAAQ,GAAGjb,IAAI,CAACK,WAAL,GAAmBmH,QAAnB,EAAjB;QACA,IAAIuS,KAAa,SAAjB;;QACA,IAAIhO,GAAJ,EAAS;UACPgO,KAAK,GAAG,CAAC,IAAI1D,CAAJ,GAAQrW,IAAI,CAACK,WAAL,EAAR,GAA6B,CAA9B,IAAmCoW,WAA3C;SADF,MAEO;UACLsD,KAAK,GAAG,CAAC,IAAI1D,CAAJ,GAAQrW,IAAI,CAACK,WAAL,EAAT,IAA+BoW,WAAvC;;;QAEFoE,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;UACEja,GAAG,EAAEwb;UACLtB,KAAK,EAAEsB;UACPrB,MAAM,EAAEnD,WAAW,GAAGJ;UACtBwD,MAAM,EAAE;UACRC,MAAM,EAAE1V;UACR2V,KAAK,EAAEA;UACPC,KAAK,EAAEe,gBAAgB,GAAG;SAP5B,CADF;;;;IAaJ,OAAO,CAACF,SAAD,EAAYC,YAAZ,CAAP;GAzCF;;EA+CA,IAAMI,2BAA2B,GAAG,SAA9BA,2BAA8B;;;IAClC,IAAML,SAAS,GAAiB,EAAhC;IACA,IAAMC,YAAY,GAAiB,EAAnC;IACA,IAAMzD,WAAW,GAAiB,EAAlC;IACA,IAAMlW,YAAY,4BAAG2V,eAAH,aAAGA,eAAH,uBAAGA,eAAe,CAAEqE,aAApB,oCAAqC,CAAvD;IACA,IAAMC,IAAI,GAAGhX,YAAY,GAAG,CAA5B;;IAEA,KAAK,IAAIiS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoE,SAAS,CAACnX,KAAV,CAAgB6N,MAApC,EAA4CkF,CAAC,EAA7C,EAAiD;MAC/C,IAAMrW,IAAI,GAAGya,SAAS,CAACnX,KAAV,CAAgB+S,CAAhB,CAAb;MACA,IAAMgF,IAAI,GAAG/E,gBAAgB,CAACtW,IAAD,EAAOmB,YAAP,CAA7B;;MAGA,KAAK,IAAIuT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;QAC1B,IAAM4G,SAAS,GAAGvb,SAAS,CAACC,IAAD,EAAO0U,CAAP,EAAU,OAAV,CAA3B;QACAoG,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;UACE1G,GAAG,cAAY4W,CAAZ,SAAiB3B;UACpBD,CAAC,EAAErQ,YAAY,GAAG;UAClBoT,CAAC,EAAEf,WAAW,GAAGJ,CAAd,GAAkBI,WAAW,IAAI/B,CAAC,GAAG,CAAJ,GAAQ,CAAZ,CAAX,GAA4B;UACjDtO,SAAS,EAAKC,QAAM,CAACkU,eAAZ,SAA+BlU,QAAM,CAAC+T;SAJjD,EAMGM,UAAU,CAACY,SAAD,CANb,CADF;;;MAaFR,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,cAAY4W;QACf5B,CAAC,EAAE2G,IAAI,GAAG;QACV5D,CAAC,EAAEf,WAAW,GAAGJ,CAAd,GAAkBI,WAAW,GAAG;QACnCrQ,SAAS,EAAKC,QAAM,CAACkU,eAAZ,SAA+BlU,QAAM,CAAC+T;OAJjD,WAMUiB,IANV,CADF;MAYAP,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,YAAU4W;QACb9I,EAAE,EAAEkJ,WAAW,GAAGJ;QAClBoC,EAAE,EAAE2C;QACJ5N,EAAE,EAAEiJ,WAAW,GAAGJ;QAClBqC,EAAE,EAAEtU;QACJgC,SAAS,EAAEC,QAAM,CAACiU;OANpB,CADF;;MAYA,IAAIjE,CAAC,KAAK,CAAV,EAAa;QACXyE,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;UACE1G,GAAG,EAAC;UACJ8N,EAAE,EAAE;UACJkL,EAAE,EAAE2C;UACJ5N,EAAE,EAAEiJ,WAAW,GAAGgE,SAAS,CAACnX,KAAV,CAAgB6N;UAClCuH,EAAE,EAAE0C;UACJhV,SAAS,EAAEC,QAAM,CAACiU;SANpB,CADF;QAUAQ,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;UACE1G,GAAG,EAAC;UACJ8N,EAAE,EAAE;UACJkL,EAAE,EAAE2C,IAAI,GAAG;UACX5N,EAAE,EAAEiJ,WAAW,GAAGgE,SAAS,CAACnX,KAAV,CAAgB6N;UAClCuH,EAAE,EAAE0C,IAAI,GAAG;UACXhV,SAAS,EAAEC,QAAM,CAACiU;SANpB,CADF;;;MAaF,IACEjE,CAAC,KAAK,CAAN,IACArW,IAAI,CAACK,WAAL,OAAuBoa,SAAS,CAACnX,KAAV,CAAgB+S,CAAC,GAAG,CAApB,EAAuBhW,WAAvB,EAFzB,EAGE;QACA,IAAM4a,QAAQ,GAAGjb,IAAI,CAACK,WAAL,GAAmBmH,QAAnB,EAAjB;QAEA,IAAI+T,IAAI,GAAG,CAAX;;QACA,KAAK,IAAIC,CAAC,GAAGnF,CAAb,EAAgBmF,CAAC,GAAGf,SAAS,CAACnX,KAAV,CAAgB6N,MAApB,IAA8BsJ,SAAS,CAACnX,KAAV,CAAgBkY,CAAhB,EAAmBnb,WAAnB,OAAqCL,IAAI,CAACK,WAAL,EAAnF,EAAuGmb,CAAC,EAAxG,EAA4G;UAC1GD,IAAI;;;QAEN,IAAMxB,KAAK,GAAGtD,WAAW,GAAGJ,CAAd,GAAmBI,WAAW,GAAG8E,IAAf,GAAuB,CAAvD;QACAV,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;UACEja,GAAG,EAAEwb,QAAQ,GAAG5E;UAChBsD,KAAK,EAAEsB;UACPrB,MAAM,EAAEnD,WAAW,GAAGJ;UACtBwD,MAAM,EAAE;UACRC,MAAM,EAAEsB;UACRrB,KAAK,EAAEA;UACPC,KAAK,EAAEoB,IAAI,GAAG;UACdnB,UAAU,EAAC;SARb,CADF;;;;IAeJ,OAAO,CAACY,SAAD,EAAYC,YAAZ,EAA0BzD,WAA1B,CAAP;GArGF;;EA2GA,IAAMoE,yBAAyB,GAAG,SAA5BA,yBAA4B;;;IAChC,IAAMZ,SAAS,GAAiB,EAAhC;IACA,IAAMC,YAAY,GAAiB,EAAnC;IACA,IAAMzD,WAAW,GAAiB,EAAlC;IACA,IAAM0D,gBAAgB,GAAG3W,YAAY,GAAG,GAAxC;IACA,IAAMjD,YAAY,6BAAG2V,eAAH,aAAGA,eAAH,uBAAGA,eAAe,CAAEqE,aAApB,qCAAqC,CAAvD;;IAEA,KAAK,IAAI9E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoE,SAAS,CAACnX,KAAV,CAAgB6N,MAApC,EAA4CkF,CAAC,EAA7C,EAAiD;MAC/C,IAAMrW,IAAI,GAAGya,SAAS,CAACnX,KAAV,CAAgB+S,CAAhB,CAAb;MACA,IAAM1S,WAAW,GAAG+W,UAAU,CAAC1a,IAAD,CAA9B;MACA8a,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,EAAEkE,WAAW,GAAG3D,IAAI,CAACK,WAAL,EAAd,GAAmCgW;QACxC5B,CAAC,EAAErQ,YAAY,GAAG;QAClBoT,CAAC,EAAEf,WAAW,GAAGJ,CAAd,GAAkBI,WAAW,GAAG;QACnCrQ,SAAS,EAAKC,QAAM,CAACkU,eAAZ,SAA+BlU,QAAM,CAAC+T;OAJjD,EAMGzW,WANH,CADF;MAYA,IAAM0X,IAAI,GAAG/E,gBAAgB,CAACtW,IAAD,EAAOmB,YAAP,CAA7B;MACA,IAAMua,QAAQ,GAAGrF,CAAC,GAAG,CAAJ,GAAQoE,SAAS,CAACnX,KAAV,CAAgB+S,CAAC,GAAG,CAApB,CAAR,GAAiC,IAAlD;MACA,IAAMsF,QAAQ,GAAGD,QAAQ,GAAGpF,gBAAgB,CAACoF,QAAD,EAAWva,YAAX,CAAnB,GAA8C,CAAC,CAAxE;MACA,IAAMya,YAAY,GAChBvF,CAAC,KAAK,CAAN,IACAgF,IAAI,KAAKM,QADT,IAEA3b,IAAI,CAACK,WAAL,QAAwBqb,QAAQ,GAAGA,QAAQ,CAACrb,WAAT,EAAH,GAA4B,CAAC,CAA7D,CAHF;;MAKA,IAAIub,YAAJ,EAAkB;QAChB,IAAMX,QAAQ,YAAUI,IAAV,UAAmBrb,IAAI,CAACK,WAAL,EAAjC;QAEA,IAAIkb,IAAI,GAAG,CAAX;;QACA,KACE,IAAIC,CAAC,GAAGnF,CADV,EAEEmF,CAAC,GAAGf,SAAS,CAACnX,KAAV,CAAgB6N,MAApB,IACAmF,gBAAgB,CAACmE,SAAS,CAACnX,KAAV,CAAgBkY,CAAhB,CAAD,EAAqBra,YAArB,CAAhB,KAAuDka,IADvD,IAEAZ,SAAS,CAACnX,KAAV,CAAgBkY,CAAhB,EAAmBnb,WAAnB,OAAqCL,IAAI,CAACK,WAAL,EAJvC,EAKEmb,CAAC,EALH,EAME;UACAD,IAAI;;;QAEN,IAAMxB,KAAK,GAAGhO,GAAG,GACb0K,WAAW,GAAGJ,CAAd,GAAkBI,WAAW,GAAG8E,IAAd,GAAqB,GAAvC,GAA6C9E,WADhC,GAEbA,WAAW,GAAGJ,CAAd,GAAmBI,WAAW,GAAG8E,IAAf,GAAuB,CAF7C;QAIAV,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;UACEja,GAAG,EAAEwb,QAAQ,GAAG5E;UAChBsD,KAAK,EAAEsB;UACPrB,MAAM,EAAEnD,WAAW,GAAGJ;UACtBwD,MAAM,EAAE;UACRC,MAAM,EAAEiB;UACRhB,KAAK,EAAEA;UACPC,KAAK,EAAEe,gBAAgB,GAAG;UAC1Bd,UAAU,EAAC;SARb,CADF;;QAaA,IAAI5D,CAAC,GAAG,CAAR,EAAW;UACTyE,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;YACE1G,GAAG,cAAY4W;YACf9I,EAAE,EAAEkJ,WAAW,GAAGJ;YAClBoC,EAAE,EAAEsC;YACJvN,EAAE,EAAEiJ,WAAW,GAAGJ;YAClBqC,EAAE,EAAEtU;YACJgC,SAAS,EAAEC,QAAM,CAACiU;WANpB,CADF;;;;;IAaN,OAAO,CAACO,SAAD,EAAYC,YAAZ,EAA0BzD,WAA1B,CAAP;GA1EF;;EAgFA,IAAMwE,wBAAwB,GAAG,SAA3BA,wBAA2B;IAC/B,IAAMhB,SAAS,GAAiB,EAAhC;IACA,IAAMC,YAAY,GAAiB,EAAnC;IACA,IAAMzD,WAAW,GAAiB,EAAlC;IACA,IAAIyE,UAAU,GAAW,CAAzB;IACA,IAAMf,gBAAgB,GAAG3W,YAAY,GAAG,GAAxC;IACA,IAAMd,KAAK,GAAGmX,SAAS,CAACnX,KAAxB;;IACA,KAAK,IAAI+S,CAAC,GAAG/S,KAAK,CAAC6N,MAAN,GAAe,CAA5B,EAA+BkF,CAAC,IAAI,CAApC,EAAuCA,CAAC,EAAxC,EAA4C;MAC1C,IAAMrW,IAAI,GAAGsD,KAAK,CAAC+S,CAAD,CAAlB;MACA,IAAI4E,QAAQ,GAAG,EAAf;;MACA,IAAI5E,CAAC,KAAK,CAAN,IAAWrW,IAAI,CAACM,QAAL,OAAoBgD,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAL,CAAa/V,QAAb,EAAnC,EAA4D;QAE1D2a,QAAQ,GAAMP,UAAU,CAAC1a,IAAD,CAAhB,SAA0BA,IAAI,CAACK,WAAL,EAAlC;;;MAGF,IAAMsD,WAAW,GAAG3D,IAAI,CAACO,OAAL,GAAeiH,QAAf,EAApB;MAEAsT,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,EAAEO,IAAI,CAACsC,OAAL;QACLmS,CAAC,EAAErQ,YAAY,GAAG;QAClBoT,CAAC,EAAEf,WAAW,IAAIJ,CAAC,GAAG,CAACtK,GAAT;QACd3F,SAAS,EAAKC,QAAM,CAACkU,eAAZ,SAA+BlU,QAAM,CAAC8T;OAJjD,EAMGxW,WANH,CADF;;MAWA,IAAIsX,QAAJ,EAAc;QACZ,IAAI5E,CAAC,KAAK/S,KAAK,CAAC6N,MAAN,GAAe,CAAzB,EAA4B;UAC1B0J,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;YACEja,GAAG,EAAEwb,QAAQ,GAAG5E;YAChBsD,KAAK,EAAEsB;YACPrB,MAAM,EAAEnD,WAAW,GAAGJ,CAAd,GAAkByF,UAAU,GAAGrF;YACvCoD,MAAM,EAAE;YACRC,MAAM,EAAEiB;YACRhB,KAAK,EAAEtD,WAAW,GAAGJ,CAAd,GAAkBI,WAAW,GAAGqF,UAAd,GAA2B;YACpD9B,KAAK,EAAEe,gBAAgB,GAAG;YAC1Bd,UAAU,EAAC;WARb,CADF;;;QAaF6B,UAAU,GAAG,CAAb;;;MAEFA,UAAU;;;IAEZ,OAAO,CAACjB,SAAD,EAAYC,YAAZ,EAA0BzD,WAA1B,CAAP;GA/CF;;EAsDA,IAAM0E,uBAAuB,GAAG,SAA1BA,uBAA0B;;;IAC9B,IAAMlB,SAAS,GAAiB,EAAhC;IACA,IAAMC,YAAY,GAAiB,EAAnC;IACA,IAAMzD,WAAW,GAAiB,EAAlC;IACA,IAAMe,SAAS,GAAiB,EAAhC;IACA,IAAM2C,gBAAgB,GAAG3W,YAAY,GAAG,GAAxC;IACA,IAAMd,KAAK,GAAGmX,SAAS,CAACnX,KAAxB;IACA,IAAMgU,YAAY,4BAAGR,eAAH,aAAGA,eAAH,uBAAGA,eAAe,CAAES,UAApB,oCAAkC,CAApD;;IAEA,KAAK,IAAIlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/S,KAAK,CAAC6N,MAA1B,EAAkCkF,CAAC,EAAnC,EAAuC;MACrC,IAAMrW,IAAI,GAAGsD,KAAK,CAAC+S,CAAD,CAAlB;;MAKA,IAAIY,QAAQ,CAACjX,IAAD,CAAZ,EAAoB;QAClBqX,WAAW,CAAC9T,IAAZ,CACE4C,mBAAA,OAAA;UACE1G,GAAG,qBAAmB4W;UACtBmB,CAAC,EAAEf,WAAW,GAAGJ;UACjB5B,CAAC,EAAEsG;UACH7U,KAAK,EAAEuQ;UACP7P,MAAM,EAAExC,YAAY,GAAG2W;UACvBtD,IAAI,EAAEd;SANR,CADF;;;MAaF,IAAMqF,WAAW,GAAGhc,IAAI,CAACgE,MAAL,OAAkBsT,YAAtC;MACAc,SAAS,CAAC7U,IAAV,CACE4C,mBAAA,OAAA;QACE1G,GAAG,gBAAc4W;QACjB9I,EAAE,EAAEkJ,WAAW,GAAGJ;QAClBoC,EAAE,EAAEsC;QACJvN,EAAE,EAAEiJ,WAAW,GAAGJ;QAClBqC,EAAE,EAAEtU;QACJgC,SAAS,EAAE4V,WAAW,GAAG3V,QAAM,CAAC4V,iBAAV,GAA8B5V,QAAM,CAAC6V;OAN7D,CADF;MAYA,IAAMvY,WAAW,GACf8S,WAAW,GAAG,EAAd,GACOjT,iBAAiB,CAACxD,IAAD,EAAOyD,MAAP,EAAe,OAAf,CADxB,UACoDzD,IAAI,CAACO,OAAL,EADpD,GAEOiD,iBAAiB,CAACxD,IAAD,EAAOyD,MAAP,EAAe,QAAf,CAFxB,SAEoDzD,IAAI,CAACO,OAAL,EAHtD;MAIAua,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,EAAEO,IAAI,CAACsC,OAAL;QACLmS,CAAC,EAAErQ,YAAY,GAAG;QAClBoT,CAAC,EAAEf,WAAW,GAAGJ,CAAd,GAAkBI,WAAW,GAAG;QACnCrQ,SAAS,EAAKC,QAAM,CAACkU,eAAZ,SAA+BlU,QAAM,CAAC+T;OAJjD,EAMGzW,WANH,CADF;;MAYA,IACE0S,CAAC,GAAG,CAAJ,KAAU/S,KAAK,CAAC6N,MAAhB,IACAnR,IAAI,CAACM,QAAL,OAAoBgD,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAL,CAAa/V,QAAb,EAFtB,EAGE;QACA,IAAM2a,QAAQ,GAAMP,UAAU,CAAC1a,IAAD,CAAhB,SAA0BA,IAAI,CAACK,WAAL,EAAxC;QACAwa,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;UACEja,GAAG,EAAEwb,QAAQ,GAAG5E;UAChBsD,KAAK,EAAEsB;UACPrB,MAAM,EAAEnD,WAAW,IAAIJ,CAAC,GAAG,CAAR;UACnBwD,MAAM,EAAE;UACRC,MAAM,EAAEiB;UACRhB,KAAK,EACHc,SAAS,CAAC1J,MAAV,KAAqB,CAArB,GACIsF,WAAW,IAAIJ,CAAC,GAAG,CAAR,CAAX,GAAwB,GAD5B,GAEII,WAAW,IAAIJ,CAAC,GAAG,CAAR,CAAX,GAAwBrW,IAAI,CAACO,OAAL,KAAiBkW,WAAjB,GAA+B;UAE7DuD,KAAK,EAAEe,gBAAgB,GAAG;SAX5B,CADF;;;MAgBF,IAAI1E,CAAC,GAAG,CAAJ,KAAU/S,KAAK,CAAC6N,MAApB,EAA4B;QAC1B,IAAM8J,SAAQ,GAAMP,UAAU,CAAC1a,IAAD,CAAhB,SAA0BA,IAAI,CAACK,WAAL,EAAxC;;QACAwa,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;UACEja,GAAG,EAAEwb,SAAQ,GAAG;UAChBtB,KAAK,EAAEsB;UACPrB,MAAM,EAAEnD,WAAW,IAAIJ,CAAC,GAAG,CAAR;UACnBwD,MAAM,EAAE;UACRC,MAAM,EAAEiB;UACRhB,KAAK,EAAEtD,WAAW,IAAIJ,CAAC,GAAG,CAAR,CAAX,GAAwBrW,IAAI,CAACO,OAAL,KAAiBkW,WAAjB,GAA+B;UAC9DuD,KAAK,EAAEe,gBAAgB,GAAG;SAP5B,CADF;;;;IAaJ,OAAO,CAACF,SAAD,EAAYC,YAAZ,EAA0BzD,WAA1B,EAAuCe,SAAvC,CAAP;GA9FF;;EAiGA,IAAM+D,6BAA6B,GAAG,SAAhCA,6BAAgC;IACpC,IAAMtB,SAAS,GAAiB,EAAhC;IACA,IAAMC,YAAY,GAAiB,EAAnC;IACA,IAAMsB,KAAK,GAAGla,QAAQ,KAAK9C,QAAQ,CAAC4D,OAAtB,GAAgC,CAAhC,GAAoC,CAAlD;IACA,IAAM+X,gBAAgB,GAAG3W,YAAY,GAAG,GAAxC;IACA,IAAMd,KAAK,GAAGmX,SAAS,CAACnX,KAAxB;;IACA,KAAK,IAAI+S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/S,KAAK,CAAC6N,MAA1B,EAAkCkF,CAAC,EAAnC,EAAuC;MACrC,IAAMrW,IAAI,GAAGsD,KAAK,CAAC+S,CAAD,CAAlB;MACA,IAAM1S,WAAW,GAAGrE,uBAAuB,CAACmE,MAAD,EAAS;QAClD4Y,IAAI,EAAE;OADmC,CAAvB,CAEjB3Y,MAFiB,CAEV1D,IAFU,CAApB;MAIA8a,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,EAAEO,IAAI,CAACsC,OAAL;QACLmS,CAAC,EAAErQ,YAAY,GAAG;QAClBoT,CAAC,EAAEf,WAAW,IAAIJ,CAAC,GAAG,CAACtK,GAAT;QACd3F,SAAS,EAAKC,QAAM,CAACkU,eAAZ,SAA+BlU,QAAM,CAAC+T;QAC/C/V,UAAU,EAAEA;OALd,EAOGV,WAPH,CADF;;MAWA,IAAI0S,CAAC,KAAK,CAAN,IAAWrW,IAAI,CAACO,OAAL,OAAmB+C,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAL,CAAa9V,OAAb,EAAlC,EAA0D;QACxD,IAAM0a,QAAQ,GAAMzX,iBAAiB,CAACxD,IAAD,EAAOyD,MAAP,EAAe,OAAf,CAAvB,UAAmDzD,IAAI,CAACO,OAAL,EAAnD,SAAqEma,UAAU,CAAC1a,IAAD,CAA7F;QACA6a,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;UACEja,GAAG,EAAEwb,QAAQ,GAAGjb,IAAI,CAACK,WAAL;UAChBsZ,KAAK,EAAEsB;UACPrB,MAAM,EAAEnD,WAAW,GAAGJ,CAAd,GAAkB+F,KAAK,GAAG3F;UAClCoD,MAAM,EAAE;UACRC,MAAM,EAAEiB;UACRhB,KAAK,EAAEtD,WAAW,GAAGJ,CAAd,GAAkB+F,KAAK,GAAG3F,WAAR,GAAsB;UAC/CuD,KAAK,EAAEe,gBAAgB,GAAG;SAP5B,CADF;;;;IAcJ,OAAO,CAACF,SAAD,EAAYC,YAAZ,CAAP;GAvCF;;EA0CA,IAAMwB,wBAAwB,GAAG,SAA3BA,wBAA2B;IAC/B,IAAMzB,SAAS,GAAiB,EAAhC;IACA,IAAMC,YAAY,GAAiB,EAAnC;IACA,IAAMC,gBAAgB,GAAG3W,YAAY,GAAG,GAAxC;IACA,IAAMd,KAAK,GAAGmX,SAAS,CAACnX,KAAxB;;IACA,KAAK,IAAI+S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/S,KAAK,CAAC6N,MAA1B,EAAkCkF,CAAC,EAAnC,EAAuC;MACrC,IAAMrW,IAAI,GAAGsD,KAAK,CAAC+S,CAAD,CAAlB;MACA,IAAM1S,WAAW,GAAGrE,uBAAuB,CAACmE,MAAD,EAAS;QAClD4Y,IAAI,EAAE;OADmC,CAAvB,CAEjB3Y,MAFiB,CAEV1D,IAFU,CAApB;MAIA8a,YAAY,CAACvX,IAAb,CACE4C,mBAAA,OAAA;QACE1G,GAAG,EAAEO,IAAI,CAACsC,OAAL;QACLmS,CAAC,EAAErQ,YAAY,GAAG;QAClBoT,CAAC,EAAEf,WAAW,IAAIJ,CAAC,GAAG,CAACtK,GAAT;QACd3F,SAAS,EAAEC,QAAM,CAAC2U;QAClB3W,UAAU,EAAEA;OALd,EAOGV,WAPH,CADF;;MAWA,IAAI0S,CAAC,KAAK,CAAN,IAAWrW,IAAI,CAACO,OAAL,OAAmB+C,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAL,CAAa9V,OAAb,EAAlC,EAA0D;QACxD,IAAMgc,WAAW,GAAGjZ,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAzB;QACA,IAAM4E,QAAQ,GAAMzX,iBAAiB,CAAC+Y,WAAD,EAAc9Y,MAAd,EAAsB,MAAtB,CAAvB,UAAyD8Y,WAAW,CAAChc,OAAZ,EAAzD,SAAkFma,UAAU,CAAC6B,WAAD,CAA1G;QACA,IAAMC,WAAW,GAAG,CAACxc,IAAI,CAACQ,QAAL,KAAkB,EAAnB,IAAyB,CAA7C;QACAqa,SAAS,CAACtX,IAAV,CACE4C,mBAAA,CAACuT,iBAAD;UACEja,GAAG,EAAEwb,QAAQ,GAAGsB,WAAW,CAAClc,WAAZ;UAChBsZ,KAAK,EAAEsB;UACPrB,MAAM,EAAEnD,WAAW,GAAGJ;UACtBwD,MAAM,EAAE;UACRC,MAAM,EAAEiB;UACRhB,KAAK,EAAEtD,WAAW,IAAIJ,CAAC,GAAGmG,WAAR;UAClBxC,KAAK,EAAEe,gBAAgB,GAAG;SAP5B,CADF;;;;IAcJ,OAAO,CAACF,SAAD,EAAYC,YAAZ,CAAP;GAxCF;;EA2CA,IAAID,SAAS,GAAiB,EAA9B;EACA,IAAIC,YAAY,GAAiB,EAAjC;EACA,IAAI2B,WAAW,GAAiB,EAAhC;EACA,IAAIrE,SAAS,GAAiB,EAA9B;;EAEA,QAAQqC,SAAS,CAACvY,QAAlB;IACE,KAAK9C,QAAQ,CAACwD,IAAd;MAAA,4BAC8BgY,wBAAwB,EADtD;;MACGC,SADH;MACcC,YADd;MAEE;;IACF,KAAK1b,QAAQ,CAAC0C,OAAd;MAAuB;QACrB,IAAM4a,CAAC,GAAGxB,2BAA2B,EAArC;QACAL,SAAS,GAAG6B,CAAC,CAAC,CAAD,CAAb;QAAkB5B,YAAY,GAAG4B,CAAC,CAAC,CAAD,CAAhB;QAAqBD,WAAW,GAAGC,CAAC,CAAC,CAAD,CAAD,IAAQ,EAAtB;QACvC;;;IAEF,KAAKtd,QAAQ,CAACyC,KAAd;MAAqB;QACnB,IAAM6a,EAAC,GAAGjB,yBAAyB,EAAnC;;QACAZ,SAAS,GAAG6B,EAAC,CAAC,CAAD,CAAb;QAAkB5B,YAAY,GAAG4B,EAAC,CAAC,CAAD,CAAhB;QAAqBD,WAAW,GAAGC,EAAC,CAAC,CAAD,CAAD,IAAQ,EAAtB;QACvC;;;IAEF,KAAKtd,QAAQ,CAACwC,IAAd;MAAoB;QAClB,IAAM8a,GAAC,GAAGb,wBAAwB,EAAlC;;QACAhB,SAAS,GAAG6B,GAAC,CAAC,CAAD,CAAb;QAAkB5B,YAAY,GAAG4B,GAAC,CAAC,CAAD,CAAhB;QAAqBD,WAAW,GAAGC,GAAC,CAAC,CAAD,CAAD,IAAQ,EAAtB;QACvC;;;IAEF,KAAKtd,QAAQ,CAACuC,GAAd;MAAmB;QACjB,IAAMsU,MAAM,GAAG8F,uBAAuB,EAAtC;QACAlB,SAAS,GAAG5E,MAAM,CAAC,CAAD,CAAlB;QACA6E,YAAY,GAAG7E,MAAM,CAAC,CAAD,CAArB;QACAwG,WAAW,GAAGxG,MAAM,CAAC,CAAD,CAApB;QACAmC,SAAS,GAAGnC,MAAM,CAAC,CAAD,CAAlB;QACA;;;IAEF,KAAK7W,QAAQ,CAAC2D,UAAd;IACA,KAAK3D,QAAQ,CAAC4D,OAAd;MAAA,6BAC8BmZ,6BAA6B,EAD3D;;MACGtB,SADH;MACcC,YADd;MAEE;;IACF,KAAK1b,QAAQ,CAAC6D,IAAd;MAAA,6BAC8BqZ,wBAAwB,EADtD;;MACGzB,SADH;MACcC,YADd;;;EAGF,OACE3U,mBAAA,IAAA;IACEC,SAAS,EAAC;IACV9B,QAAQ,EAAEA;IACVD,UAAU,EAAEA;IACZ6B,KAAK,EAAEuQ,WAAW,GAAGgE,SAAS,CAACnX,KAAV,CAAgB6N;GAJvC,EAMEhL,mBAAA,OAAA;IACEqR,CAAC,EAAE;IACH/C,CAAC,EAAE;IACHvO,KAAK,EAAEuQ,WAAW,GAAGgE,SAAS,CAACnX,KAAV,CAAgB6N;IACrCvK,MAAM,EAAExC;IACRgC,SAAS,EAAEC,QAAM,CAACsW;GALpB,CANF,EAaGF,WAbH,EAcGrE,SAdH,EAeG0C,YAfH,EAgBGD,SAhBH,CADF;AAoBD,CAviBM;;AC5BP;AACA,AAkKA;AACA,AAAO,MAAM,eAAe,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,YAAY,CAAC;AAC/J,AA2DA;AACA,AAAO,MAAM,oBAAoB,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,iBAAiB,CAAC;AACxL,AA8UA;AACA;AACA,AAAO,SAAS,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;AACtC,CAAC,IAAI;AACL,EAAE,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;AACtB,EAAE,CAAC,MAAM,CAAC,EAAE;AACZ,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,EAAE;AACF,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC5B,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACtC,EAAE;AACF,CAAC,OAAO,MAAM,CAAC;AACf,CAAC;;AC9iBM,IAAM+B,KAAK,GAAyB,SAA9BA,KAA8B;MACzCC,gBAAAA;MACAC,cAAAA;MACAlV,iBAAAA;MACAmV,kBAAAA;MACA3Q,mBAAAA;MACA4Q,kBAAAA;MACAC,sBAAAA;;EAEA,2BAA6BC,mBAAmB,CAC9CL,QAD8C,EAE9CC,MAF8C,EAG9ClV,SAH8C,EAI9CmV,UAJ8C,EAK9C3Q,WAL8C,EAM9C6Q,cAN8C,CAAhD;MAAKE,IAAL;MAAWC,cAAX;;EASA,OACEjX,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EACED,mBAAA,OAAA;IAAMkX,WAAW,EAAC;IAAMtK,CAAC,EAAEoK;IAAM1F,IAAI,EAAC;IAAO6F,MAAM,EAAEN;GAArD,CADF,EAEE7W,mBAAA,UAAA;IAASoX,MAAM,EAAEH;IAAgB3F,IAAI,EAAEuF;GAAvC,CAFF,CADF;AAMD,CAxBM;;AA0BP,IAAME,mBAAmB,GAAG,SAAtBA,mBAAsB,CAC1BL,QAD0B,EAE1BC,MAF0B,EAG1BlV,SAH0B,EAI1BmV,UAJ0B,EAK1B3Q,WAL0B,EAM1B6Q,cAN0B;EAQ1B,IAAMO,YAAY,GAAGX,QAAQ,CAACzT,KAAT,GAAiB0T,MAAM,CAAC1T,KAAxB,GAAgC,CAAC,CAAjC,GAAqC,CAA1D;EACA,IAAMqU,UAAU,GAAGX,MAAM,CAACrI,CAAP,GAAWsI,UAAU,GAAG,CAA3C;EACA,IAAMW,cAAc,GAAGF,YAAY,IAAI5V,SAAS,GAAG,CAAhB,CAAnC;;EAGA,IAAM+V,IAAI,GAAG,SAAPA,IAAO,CAACzV,CAAD;IAEX,IAAIA,CAAC,CAAC0V,eAAF,IAAqB1V,CAAC,CAAC0V,eAAF,CAAkBzM,MAAlB,GAA2B,CAApD,EAAuD;MACrD,IAAM0M,CAAC,GAAG3V,CAAC,CAAC0V,eAAF,CAAkB,CAAlB,EAAqBrQ,EAA/B;MACA,IAAIrF,CAAC,CAAC4V,cAAF,IAAoB5V,CAAC,CAAC4V,cAAF,CAAiB3M,MAAjB,GAA0B,CAAlD,EAAqD,OAAO5P,IAAI,CAACyW,GAAL,CAAS6F,CAAT,EAAY3V,CAAC,CAAC4V,cAAF,CAAiB,CAAjB,EAAoBvQ,EAAhC,CAAP;MACrD,OAAOsQ,CAAP;;;IAEF,IAAI3V,CAAC,CAAC4V,cAAF,IAAoB5V,CAAC,CAAC4V,cAAF,CAAiB3M,MAAjB,GAA0B,CAAlD,EAAqD,OAAOjJ,CAAC,CAAC4V,cAAF,CAAiB,CAAjB,EAAoBvQ,EAA3B;IAIrD,IAAMwQ,UAAU,GAAa,EAA7B;IACA,IAAI7V,CAAC,CAACsF,EAAF,GAAOtF,CAAC,CAACqF,EAAb,EAAiBwQ,UAAU,CAACxa,IAAX,CAAgB2E,CAAC,CAACqF,EAAlB;IACjB,IAAIrF,CAAC,CAACwF,QAAF,GAAaxF,CAAC,CAAC0F,QAAnB,EAA6BmQ,UAAU,CAACxa,IAAX,CAAgB2E,CAAC,CAAC0F,QAAlB;IAC7B,OAAOmQ,UAAU,CAAC5M,MAAX,GAAoB,CAApB,GAAwB5P,IAAI,CAACyW,GAAL,OAAAzW,IAAI,EAAQwc,UAAR,CAA5B,GAAkD,CAAzD;GAdF;;EAgBA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAAC9V,CAAD;IACX,IAAIA,CAAC,CAAC0V,eAAF,IAAqB1V,CAAC,CAAC0V,eAAF,CAAkBzM,MAAlB,GAA2B,CAApD,EAAuD;MACrD,IAAM0M,CAAC,GAAG3V,CAAC,CAAC0V,eAAF,CAAkB1V,CAAC,CAAC0V,eAAF,CAAkBzM,MAAlB,GAA2B,CAA7C,EAAgD3D,EAA1D;MACA,IAAItF,CAAC,CAAC4V,cAAF,IAAoB5V,CAAC,CAAC4V,cAAF,CAAiB3M,MAAjB,GAA0B,CAAlD,EAAqD,OAAO5P,IAAI,CAAC4M,GAAL,CAAS0P,CAAT,EAAY3V,CAAC,CAAC4V,cAAF,CAAiB5V,CAAC,CAAC4V,cAAF,CAAiB3M,MAAjB,GAA0B,CAA3C,EAA8C3D,EAA1D,CAAP;MACrD,OAAOqQ,CAAP;;;IAEF,IAAI3V,CAAC,CAAC4V,cAAF,IAAoB5V,CAAC,CAAC4V,cAAF,CAAiB3M,MAAjB,GAA0B,CAAlD,EAAqD,OAAOjJ,CAAC,CAAC4V,cAAF,CAAiB5V,CAAC,CAAC4V,cAAF,CAAiB3M,MAAjB,GAA0B,CAA3C,EAA8C3D,EAArD;IAGrD,IAAMuQ,UAAU,GAAa,EAA7B;IACA,IAAI7V,CAAC,CAACsF,EAAF,GAAOtF,CAAC,CAACqF,EAAb,EAAiBwQ,UAAU,CAACxa,IAAX,CAAgB2E,CAAC,CAACsF,EAAlB;IACjB,IAAItF,CAAC,CAACwF,QAAF,GAAaxF,CAAC,CAAC0F,QAAnB,EAA6BmQ,UAAU,CAACxa,IAAX,CAAgB2E,CAAC,CAACwF,QAAlB;IAC7B,OAAOqQ,UAAU,CAAC5M,MAAX,GAAoB,CAApB,GAAwB5P,IAAI,CAAC4M,GAAL,OAAA5M,IAAI,EAAQwc,UAAR,CAA5B,GAAkD,CAAzD;GAZF;;EAeA,IAAIE,SAAJ,EAAuBC,OAAvB;;EACA,QAAQjB,cAAR;IACE,KAAK,IAAL;MACEgB,SAAS,GAAGN,IAAI,CAACd,QAAD,CAAhB;MACAqB,OAAO,GAAGP,IAAI,CAACb,MAAD,CAAd;MACA;;IACF,KAAK,IAAL;MACEmB,SAAS,GAAGN,IAAI,CAACd,QAAD,CAAhB;MACAqB,OAAO,GAAGF,IAAI,CAAClB,MAAD,CAAd;MACA;;IACF,KAAK,IAAL;MACEmB,SAAS,GAAGD,IAAI,CAACnB,QAAD,CAAhB;MACAqB,OAAO,GAAGP,IAAI,CAACb,MAAD,CAAd;MACA;;IACF,KAAK,IAAL;MACEmB,SAAS,GAAGD,IAAI,CAACnB,QAAD,CAAhB;MACAqB,OAAO,GAAGF,IAAI,CAAClB,MAAD,CAAd;MACA;;;EAIJ,IAAMqB,WAAW,GAAG,SAAdA,WAAc,CAAC3G,CAAD,EAAY/C,CAAZ,EAAuB2J,KAAvB;IAAA,IAAuBA,KAAvB;MAAuBA,KAAvB,GAA+B,IAA/B;;;IAAA,OAClBA,KAAK,GACE5G,CADF,SACO/C,CADP,UACY+C,CAAC,GAAG,CADhB,WACqB/C,CAAC,GAAG,CADzB,WAC8B+C,CAAC,GAAG,CADlC,WACuC/C,CAAC,GAAG,CAD3C,IAEE+C,CAFF,SAEO/C,CAFP,UAEY+C,CAAC,GAAG,CAFhB,WAEqB/C,CAAC,GAAG,CAFzB,WAE8B+C,CAAC,GAAG,CAFlC,WAEuC/C,CAAC,GAAG,CAF3C,CADa;GAApB;;EAKA,IAAI0I,IAAJ;EACA,IAAIC,cAAJ;;EAGA,QAAQH,cAAR;IACE,KAAK,IAAL;MACEE,IAAI,UAAQc,SAAR,UAAqBpB,QAAQ,CAACpI,CAAT,GAAasI,UAAU,GAAG,CAA/C,4BAEMkB,SAAS,GAAG1c,IAAI,CAACyW,GAAL,CAASkG,OAAO,GAAGD,SAAnB,EAA8B,CAA9B,CAAZ,GAA+C,IAAI7R,WAFzD,2BAIQqR,UAJR,2BAKQS,OAAO,GAAG,CALlB,CAAJ;MAMAd,cAAc,GAAGe,WAAW,CAACD,OAAD,EAAUT,UAAV,EAAsB,IAAtB,CAA5B;MACA;;IAEF,KAAK,IAAL;MACEN,IAAI,UAAQc,SAAR,UAAqBpB,QAAQ,CAACpI,CAAT,GAAasI,UAAU,GAAG,CAA/C,4BACQkB,SAAS,GAAG,IAAI7R,WADxB,4BAEQyQ,QAAQ,CAACpI,CAAT,GAAasI,UAAU,GAAG,CAA1B,GAA8BW,cAFtC,4BAIQO,SAAS,GAAGC,OAAZ,GAAsB,IAAI9R,WAA1B,GACI,EADJ,WAES8R,OAAO,GAAG,IAAI9R,WAFvB,CAJR,2BAQQqR,UARR,2BASQS,OAAO,GAAG,CATlB,CAAJ;MAUAd,cAAc,GAAGe,WAAW,CAACD,OAAD,EAAUT,UAAV,EAAsB,KAAtB,CAA5B;MACA;;IAEF,KAAK,IAAL;MACEN,IAAI,UAAQc,SAAR,UAAqBpB,QAAQ,CAACpI,CAAT,GAAasI,UAAU,GAAG,CAA/C,4BACQkB,SAAS,GAAG,IAAI7R,WADxB,4BAEQyQ,QAAQ,CAACpI,CAAT,GAAasI,UAAU,GAAG,CAA1B,GAA8BW,cAFtC,4BAIQQ,OAAO,GAAGD,SAAV,GAAsB,IAAI7R,WAA1B,GACI,EADJ,WAES8R,OAAO,GAAG,IAAI9R,WAFvB,CAJR,2BAQQqR,UARR,2BASQS,OAAO,GAAG,CATlB,CAAJ;MAUAd,cAAc,GAAGe,WAAW,CAACD,OAAD,EAAUT,UAAV,EAAsB,IAAtB,CAA5B;MACA;;IAEF,KAAK,IAAL;MACEN,IAAI,UAAQc,SAAR,UAAqBpB,QAAQ,CAACpI,CAAT,GAAasI,UAAU,GAAG,CAA/C,4BAEMkB,SAAS,GAAG1c,IAAI,CAAC4M,GAAL,CAAS+P,OAAO,GAAGD,SAAnB,EAA8B,CAA9B,CAAZ,GAA+C,IAAI7R,WAFzD,2BAIQqR,UAJR,2BAKQS,OAAO,GAAG,CALlB,CAAJ;MAMAd,cAAc,GAAGe,WAAW,CAACD,OAAD,EAAUT,UAAV,EAAsB,KAAtB,CAA5B;MACA;;;EAGJ,OAAO,CAACN,IAAD,EAAOC,cAAP,CAAP;AACD,CA7HD;;AClCO,IAAMiB,iBAAiB,GAAG,SAApBA,iBAAoB,CAC/Bpc,KAD+B,EAE/BqB,KAF+B,EAG/BmT,WAH+B,EAI/B7O,SAJ+B,EAK/BmV,UAL+B,EAM/BuB,eAN+B,EAO/BC,WAP+B,EAQ/BxS,GAR+B,EAS/ByS,gBAT+B,EAU/BC,wBAV+B,EAW/BC,kBAX+B,EAY/BC,0BAZ+B,EAa/BC,oBAb+B,EAc/BC,4BAd+B,EAe/BC,sBAf+B,EAgB/BC,8BAhB+B,EAiB/BC,wBAjB+B,EAkB/BC,gCAlB+B;EAoB/B,IAAIC,QAAQ,GAAGjd,KAAK,CAACuG,GAAN,CAAU,UAACN,CAAD,EAAImO,CAAJ;IACvB,OAAO8I,gBAAgB,CACrBjX,CADqB,EAErBmO,CAFqB,EAGrB/S,KAHqB,EAIrBmT,WAJqB,EAKrB7O,SALqB,EAMrBmV,UANqB,EAOrBuB,eAPqB,EAQrBC,WARqB,EASrBxS,GATqB,EAUrByS,gBAVqB,EAWrBC,wBAXqB,EAYrBC,kBAZqB,EAarBC,0BAbqB,EAcrBC,oBAdqB,EAerBC,4BAfqB,EAgBrBC,sBAhBqB,EAiBrBC,8BAjBqB,EAkBrBC,wBAlBqB,EAmBrBC,gCAnBqB,CAAvB;GADa,CAAf;EAyBAC,QAAQ,GAAGA,QAAQ,CAAC1W,GAAT,CAAa,UAAA/F,IAAI;IAC1B,IAAM2c,YAAY,GAAG3c,IAAI,CAAC2c,YAAL,IAAqB,EAA1C;;+BACS5D;MACP,IAAM6D,UAAU,GAAGH,QAAQ,CAACI,SAAT,CACjB,UAAA3F,KAAK;QAAA,OAAIA,KAAK,CAAClR,EAAN,KAAa2W,YAAY,CAAC5D,CAAD,CAAZ,CAAgB/S,EAAjC;OADY,CAAnB;;MAGA,IACE4W,UAAU,KAAK,CAAC,CAAhB,IACA5c,IAAI,CAACJ,KAAL,CAAWC,OAAX,KAAuB,CADvB,IAEAG,IAAI,CAACD,GAAL,CAASF,OAAT,KAAqB,CAHvB,EAIE;QACA,IAAMid,QAAQ,gBAAQ9c,IAAR;UAAcwa,cAAc,EAAEmC,YAAY,CAAC5D,CAAD,CAAZ,CAAgBxU;UAA5D;;QACAkY,QAAQ,CAACG,UAAD,CAAR,CAAqBG,WAArB,CAAiCjc,IAAjC,CAAsCgc,QAAtC;;;;IAVJ,KAAK,IAAI/D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4D,YAAY,CAACjO,MAAjC,EAAyCqK,CAAC,EAA1C,EAA8C;MAAA,MAArCA,CAAqC;;;IAa9C,OAAO/Y,IAAP;GAfS,CAAX;EAkBA,OAAOyc,QAAP;AACD,CAhEM;;AAkEP,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CACvB1c,IADuB,EAEvB2G,KAFuB,EAGvB9F,KAHuB,EAIvBmT,WAJuB,EAKvB7O,SALuB,EAMvBmV,UANuB,EAOvBuB,eAPuB,EAQvBC,WARuB,EASvBxS,GATuB,EAUvByS,gBAVuB,EAWvBC,wBAXuB,EAYvBC,kBAZuB,EAavBC,0BAbuB,EAcvBC,oBAduB,EAevBC,4BAfuB,EAgBvBC,sBAhBuB,EAiBvBC,8BAjBuB,EAkBvBC,wBAlBuB,EAmBvBC,gCAnBuB;EAqBvB,IAAIQ,OAAJ;;EACA,QAAQhd,IAAI,CAACuE,IAAb;IACE,KAAK,WAAL;MACEyY,OAAO,GAAGC,kBAAkB,CAC1Bjd,IAD0B,EAE1B2G,KAF0B,EAG1B9F,KAH0B,EAI1BmT,WAJ0B,EAK1B7O,SAL0B,EAM1BmV,UAN0B,EAO1BuB,eAP0B,EAQ1BC,WAR0B,EAS1BS,wBAT0B,EAU1BC,gCAV0B,CAA5B;MAYA;;IACF,KAAK,SAAL;MACEQ,OAAO,GAAGE,YAAY,CACpBld,IADoB,EAEpB2G,KAFoB,EAGpB9F,KAHoB,EAIpBmT,WAJoB,EAKpB7O,SALoB,EAMpBmV,UANoB,EAOpBuB,eAPoB,EAQpBC,WARoB,EASpBxS,GAToB,EAUpB6S,oBAVoB,EAWpBC,4BAXoB,EAYpBC,sBAZoB,EAapBC,8BAboB,CAAtB;MAeA;;IACF;MACEU,OAAO,GAAGE,YAAY,CACpBld,IADoB,EAEpB2G,KAFoB,EAGpB9F,KAHoB,EAIpBmT,WAJoB,EAKpB7O,SALoB,EAMpBmV,UANoB,EAOpBuB,eAPoB,EAQpBC,WARoB,EASpBxS,GAToB,EAUpByS,gBAVoB,EAWpBC,wBAXoB,EAYpBC,kBAZoB,EAapBC,0BAboB,CAAtB;MAeA;;;EAEJ,OAAOc,OAAP;AACD,CAzED;;AA2EA,IAAME,YAAY,GAAG,SAAfA,YAAe,CACnBld,IADmB,EAEnB2G,KAFmB,EAGnB9F,KAHmB,EAInBmT,WAJmB,EAKnB7O,SALmB,EAMnBmV,UANmB,EAOnBuB,eAPmB,EAQnBC,WARmB,EASnBxS,GATmB,EAUnByS,gBAVmB,EAWnBC,wBAXmB,EAYnBC,kBAZmB,EAanBC,0BAbmB;EAenB,IAAIpR,EAAJ;EACA,IAAIC,EAAJ;EACA,IAAII,QAAJ;EACA,IAAIF,QAAJ;EACA,IAAIkS,kBAAJ;EACA,IAAIC,gBAAJ;;EACA,IAAI9T,GAAJ,EAAS;IACPyB,EAAE,GAAG/K,IAAI,CAACJ,KAAL,GAAayd,kBAAkB,CAACrd,IAAI,CAACJ,KAAN,EAAaiB,KAAb,EAAoBmT,WAApB,CAA/B,GAAkE,CAAC,CAAxE;IACAlJ,EAAE,GAAG9K,IAAI,CAACD,GAAL,GAAWsd,kBAAkB,CAACrd,IAAI,CAACD,GAAN,EAAWc,KAAX,EAAkBmT,WAAlB,CAA7B,GAA8D,CAAC,CAApE;IACA7I,QAAQ,GAAGnL,IAAI,CAACC,WAAL,GACPod,kBAAkB,CAACrd,IAAI,CAACC,WAAN,EAAmBY,KAAnB,EAA0BmT,WAA1B,CADX,GAEP,CAAC,CAFL;IAGA/I,QAAQ,GAAGjL,IAAI,CAACE,SAAL,GACPmd,kBAAkB,CAACrd,IAAI,CAACE,SAAN,EAAiBW,KAAjB,EAAwBmT,WAAxB,CADX,GAEP,CAAC,CAFL;GANF,MASO;IACLlJ,EAAE,GAAG9K,IAAI,CAACJ,KAAL,GAAa0d,eAAe,CAACnf,WAAW,CAAC6B,IAAI,CAACJ,KAAN,EAAa,KAAb,CAAZ,EAAiCiB,KAAjC,EAAwCmT,WAAxC,CAA5B,GAAmF,CAAC,CAAzF;IACAjJ,EAAE,GAAG/K,IAAI,CAACD,GAAL,GAAWud,eAAe,CAAChgB,SAAS,CAACa,WAAW,CAAC6B,IAAI,CAACD,GAAN,EAAW,KAAX,CAAZ,EAA+B,CAA/B,EAAkC,KAAlC,CAAV,EAAoDc,KAApD,EAA2DmT,WAA3D,CAA1B,GAAoG,CAAC,CAA1G;IACA7I,QAAQ,GAAGnL,IAAI,CAACC,WAAL,GACPqd,eAAe,CAACnf,WAAW,CAAC6B,IAAI,CAACC,WAAN,EAAmB,KAAnB,CAAZ,EAAuCY,KAAvC,EAA8CmT,WAA9C,CADR,GAEP,CAAC,CAFL;IAGA/I,QAAQ,GAAGjL,IAAI,CAACE,SAAL,GACPod,eAAe,CAAChgB,SAAS,CAACa,WAAW,CAAC6B,IAAI,CAACE,SAAN,EAAiB,KAAjB,CAAZ,EAAqC,CAArC,EAAwC,KAAxC,CAAV,EAA0DW,KAA1D,EAAiEmT,WAAjE,CADR,GAEP,CAAC,CAFL;;;EAKFmJ,kBAAkB,GAAGhS,QAAQ,IAAIL,EAAZ,GAAiBhM,IAAI,CAACye,GAAL,CAASpS,QAAQ,GAAGL,EAApB,CAAjB,GAA2C,CAAC,CAAjE;EACAsS,gBAAgB,GAAGnS,QAAQ,IAAIF,EAAZ,GAAiBjM,IAAI,CAACye,GAAL,CAAStS,QAAQ,GAAGF,EAApB,CAAjB,GAA2C,CAAC,CAA/D;EAEA,IAAIyS,YAAY,GAAqBxd,IAAI,CAACuE,IAA1C;;EAOA,4BAAmCkZ,oBAAoB,CACrDtS,QADqD,EAErDF,QAFqD,EAGrDjL,IAAI,CAAC6I,QAHgD,EAIrDS,GAJqD,CAAvD;MAAOoU,aAAP;MAAsBC,SAAtB;;EAOA,IAAM3L,CAAC,GAAG4L,eAAe,CAACjX,KAAD,EAAQxB,SAAR,EAAmBmV,UAAnB,CAAzB;EAEA,IAAMpT,YAAY,GAAGlH,IAAI,CAACkH,YAAL,IAAqB,KAA1C;EAGA,IAAIiU,eAAJ;EACA,IAAIE,cAAJ;;EAEA,IAAIrb,IAAI,CAAC8W,QAAL,IAAiB9W,IAAI,CAACJ,KAAtB,IAA+BI,IAAI,CAACD,GAApC,IAA2CC,IAAI,CAACJ,KAAL,CAAWC,OAAX,KAAuB,CAAtE,EAAyE;IACvE,IAAMge,OAAO,GAAGvgB,SAAS,CAACa,WAAW,CAAC6B,IAAI,CAACD,GAAN,EAAW,KAAX,CAAZ,EAA+B,CAA/B,EAAkC,KAAlC,CAAzB;IACA,IAAM8S,SAAS,GAAGD,mBAAmB,CAAC5S,IAAI,CAACJ,KAAN,EAAaie,OAAb,EAAsB7d,IAAI,CAAC8W,QAA3B,CAArC;IACA,IAAMgH,IAAI,GAAGjL,SAAS,CACnB9M,GADU,CACN,UAAAgY,EAAE;MAAA,OAAK;QACVjT,EAAE,EAAEwS,eAAe,CAACS,EAAE,CAACne,KAAJ,EAAWiB,KAAX,EAAkBmT,WAAlB,CADT;QAEVjJ,EAAE,EAAEuS,eAAe,CAACS,EAAE,CAAChe,GAAJ,EAASc,KAAT,EAAgBmT,WAAhB;OAFd;KADI,EAKVlE,MALU,CAKH,UAAA6C,CAAC;MAAA,OAAIA,CAAC,CAAC5H,EAAF,GAAO4H,CAAC,CAAC7H,EAAb;KALE,CAAb;IAMA,IAAIgT,IAAI,CAACpP,MAAL,GAAc,CAAlB,EAAqByM,eAAe,GAAG2C,IAAlB;;;EAGvB,IACE9d,IAAI,CAAC8W,QAAL,IACA9W,IAAI,CAACC,WADL,IAEAD,IAAI,CAACE,SAFL,IAGAF,IAAI,CAACC,WAAL,CAAiBJ,OAAjB,KAA6B,CAJ/B,EAKE;IACA,IAAMme,MAAM,GAAG1gB,SAAS,CAACa,WAAW,CAAC6B,IAAI,CAACE,SAAN,EAAiB,KAAjB,CAAZ,EAAqC,CAArC,EAAwC,KAAxC,CAAxB;;IACA,IAAM2S,UAAS,GAAGD,mBAAmB,CACnC5S,IAAI,CAACC,WAD8B,EAEnC+d,MAFmC,EAGnChe,IAAI,CAAC8W,QAH8B,CAArC;;IAKA,IAAMgH,KAAI,GAAGjL,UAAS,CACnB9M,GADU,CACN,UAAAgY,EAAE;MAAA,OAAK;QACVjT,EAAE,EAAEwS,eAAe,CAACS,EAAE,CAACne,KAAJ,EAAWiB,KAAX,EAAkBmT,WAAlB,CADT;QAEVjJ,EAAE,EAAEuS,eAAe,CAACS,EAAE,CAAChe,GAAJ,EAASc,KAAT,EAAgBmT,WAAhB;OAFd;KADI,EAKVlE,MALU,CAKH,UAAA6C,CAAC;MAAA,OAAIA,CAAC,CAAC5H,EAAF,GAAO4H,CAAC,CAAC7H,EAAb;KALE,CAAb;;IAMA,IAAIgT,KAAI,CAACpP,MAAL,GAAc,CAAlB,EAAqB2M,cAAc,GAAGyC,KAAjB;;;EAGvB,IAAMla,MAAM;IACVqa,eAAe,EAAEhC,kBADP;IAEViC,uBAAuB,EAAEhC,0BAFf;IAGViC,aAAa,EAAEpC,gBAHL;IAIVqC,qBAAqB,EAAEpC;KACpBhc,IAAI,CAAC4D,MALE,CAAZ;;EAOA,oBACK5D,IADL;IAEEwd,YAAY,EAAZA,YAFF;IAGE1S,EAAE,EAAFA,EAHF;IAIEC,EAAE,EAAFA,EAJF;IAKEI,QAAQ,EAARA,QALF;IAMEF,QAAQ,EAARA,QANF;IAOEkS,kBAAkB,EAAlBA,kBAPF;IAQEC,gBAAgB,EAAhBA,gBARF;IASEpL,CAAC,EAADA,CATF;IAUErL,KAAK,EAALA,KAVF;IAWEgX,SAAS,EAATA,SAXF;IAYED,aAAa,EAAbA,aAZF;IAaE7B,eAAe,EAAfA,eAbF;IAcEC,WAAW,EAAXA,WAdF;IAeE5U,YAAY,EAAZA,YAfF;IAgBE/C,MAAM,EAAEmW,UAhBV;IAiBEyC,WAAW,EAAE,EAjBf;IAkBEnZ,MAAM,EAANA,MAlBF;IAmBEuX,eAAe,EAAfA,eAnBF;IAoBEE,cAAc,EAAdA;;AAEH,CAhID;;AAkIA,IAAM4B,kBAAkB,GAAG,SAArBA,kBAAqB,CACzBjd,IADyB,EAEzB2G,KAFyB,EAGzB9F,KAHyB,EAIzBmT,WAJyB,EAKzB7O,SALyB,EAMzBmV,UANyB,EAOzBuB,eAPyB,EAQzBC,WARyB,EASzBS,wBATyB,EAUzBC,gCAVyB;EAYzB,IAAMzH,CAAC,GACL/U,IAAI,CAACJ,KAAL,IAAcI,IAAI,CAACD,GAAnB,GACIud,eAAe,CAACtd,IAAI,CAACD,GAAN,EAAWc,KAAX,EAAkBmT,WAAlB,CADnB,GAEI,CAHN;EAIA,IAAMhC,CAAC,GAAG4L,eAAe,CAACjX,KAAD,EAAQxB,SAAR,EAAmBmV,UAAnB,CAAzB;EAEA,IAAMxP,EAAE,GAAG9K,IAAI,CAACJ,KAAL,IAAcI,IAAI,CAACD,GAAnB,GAAyBgV,CAAC,GAAGuF,UAAU,GAAG,GAA1C,GAAgD,CAA3D;EACA,IAAMvP,EAAE,GAAG/K,IAAI,CAACJ,KAAL,IAAcI,IAAI,CAACD,GAAnB,GAAyBgV,CAAC,GAAGuF,UAAU,GAAG,GAA1C,GAAgD,CAA3D;EAEA,IAAM+D,aAAa,GAAG/D,UAAU,GAAG,KAAnC;;EACA,IAAM1W,MAAM;IACVqa,eAAe,EAAE1B,wBADP;IAEV2B,uBAAuB,EAAE1B,gCAFf;IAGV2B,aAAa,EAAE,EAHL;IAIVC,qBAAqB,EAAE;KACpBpe,IAAI,CAAC4D,MALE,CAAZ;;EAOA,oBACK5D,IADL;IAEE8K,EAAE,EAAFA,EAFF;IAGEC,EAAE,EAAFA,EAHF;IAIEI,QAAQ,EAAEL,EAJZ;IAKEG,QAAQ,EAAEF,EALZ;IAMEoS,kBAAkB,EAAE,CANtB;IAOEC,gBAAgB,EAAE,CAPpB;IAQEpL,CAAC,EAADA,CARF;IASErL,KAAK,EAALA,KATF;IAUEgX,SAAS,EAAE,CAVb;IAWED,aAAa,EAAE,CAXjB;IAYE7B,eAAe,EAAfA,eAZF;IAaEC,WAAW,EAAXA,WAbF;IAcE0B,YAAY,EAAExd,IAAI,CAACuE,IAdrB;IAeEsE,QAAQ,EAAE,CAfZ;IAgBE1E,MAAM,EAAEka,aAhBV;IAiBEnX,YAAY,EAAEgK,SAjBhB;IAkBE6L,WAAW,EAAE,EAlBf;IAmBEnZ,MAAM,EAANA;;AAEH,CAlDD;;AAoDA,AAAO,IAAM0Z,eAAe,GAAG,SAAlBA,eAAkB,CAACgB,KAAD,EAAczd,KAAd,EAA6BmT,WAA7B;EAC7B,IAAMrN,KAAK,GAAG9F,KAAK,CAACgc,SAAN,CAAgB,UAAAvM,CAAC;IAAA,OAAIA,CAAC,CAACzQ,OAAF,MAAeye,KAAK,CAACze,OAAN,EAAnB;GAAjB,IAAuD,CAArE;;EACA,IAAI8G,KAAK,GAAG,CAAZ,EAAe;IACb,IAAI9F,KAAK,CAACA,KAAK,CAAC6N,MAAN,GAAe,CAAhB,CAAL,CAAwB7O,OAAxB,MAAqCye,KAAK,CAACze,OAAN,EAAzC,EAA0D;MACxD,OAAOgB,KAAK,CAAC6N,MAAN,GAAesF,WAAtB;KADF,MAEO;MACL,OAAO,CAAP;;;;EAGJ,IAAMuK,eAAe,GAAGD,KAAK,CAACze,OAAN,KAAkBgB,KAAK,CAAC8F,KAAD,CAAL,CAAa9G,OAAb,EAA1C;EACA,IAAM2e,iBAAiB,GACrBD,eAAe,IAAI1d,KAAK,CAAC8F,KAAK,GAAG,CAAT,CAAL,CAAiB9G,OAAjB,KAA6BgB,KAAK,CAAC8F,KAAD,CAAL,CAAa9G,OAAb,EAAjC,CADjB;EAEA,IAAMkV,CAAC,GAAGpO,KAAK,GAAGqN,WAAR,GAAsBwK,iBAAiB,GAAGxK,WAApD;EACA,OAAOe,CAAP;AACD,CAdM;;AAeP,IAAMsI,kBAAkB,GAAG,SAArBA,kBAAqB,CACzBiB,KADyB,EAEzBzd,KAFyB,EAGzBmT,WAHyB;EAKzB,IAAIe,CAAC,GAAGuI,eAAe,CAACgB,KAAD,EAAQzd,KAAR,EAAemT,WAAf,CAAvB;EACAe,CAAC,IAAIf,WAAL;EACA,OAAOe,CAAP;AACD,CARD;;AASA,IAAM6I,eAAe,GAAG,SAAlBA,eAAkB,CACtBjX,KADsB,EAEtBxB,SAFsB,EAGtBmV,UAHsB;EAKtB,IAAMtI,CAAC,GAAGrL,KAAK,GAAGxB,SAAR,GAAoB,CAACA,SAAS,GAAGmV,UAAb,IAA2B,CAAzD;EACA,OAAOtI,CAAP;AACD,CAPD;;AASA,AAAO,IAAMyL,oBAAoB,GAAG,SAAvBA,oBAAuB,CAClCgB,MADkC,EAElCC,MAFkC,EAGlC7V,QAHkC,EAIlCS,GAJkC;EAMlC,IAAMoU,aAAa,GACjBgB,MAAM,GAAG,CAAT,IAAcD,MAAM,GAAG,CAAvB,GAA2B,CAACC,MAAM,GAAGD,MAAV,IAAoB5V,QAApB,GAA+B,IAA1D,GAAiE,CADnE;EAEA,IAAI8U,SAAJ;;EACA,IAAIrU,GAAJ,EAAS;IACPqU,SAAS,GAAGe,MAAM,GAAG,CAAT,GAAaA,MAAM,GAAGhB,aAAtB,GAAsC,CAAlD;GADF,MAEO;IACLC,SAAS,GAAGc,MAAM,GAAG,CAAT,GAAaA,MAAb,GAAsB,CAAlC;;;EAEF,OAAO,CAACf,aAAD,EAAgBC,SAAhB,CAAP;AACD,CAfM;AAiBP,AA8BO,IAAMgB,gBAAgB,GAAG,SAAnBA,gBAAmB,CAC9BhB,SAD8B,EAE9BiB,KAF8B,EAG9BtE,UAH8B;EAK9B,IAAMuE,KAAK,GAAG,CACZlB,SAAS,GAAG,CADA,EAEZiB,KAAK,GAAGtE,UAFI,EAGZqD,SAAS,GAAG,CAHA,EAIZiB,KAAK,GAAGtE,UAJI,EAKZqD,SALY,EAMZiB,KAAK,GAAGtE,UAAR,GAAqB,IANT,CAAd;EAQA,OAAOuE,KAAK,CAACC,IAAN,CAAW,GAAX,CAAP;AACD,CAdM;;AAgBP,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAChK,CAAD,EAAYiK,KAAZ,EAA2Bhf,IAA3B;EACf,IAAI+U,CAAC,IAAI/U,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8b,WAAL,GAAmB,CAAtC,EAAyC;IACvC/G,CAAC,GAAG/U,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8b,WAAL,GAAmB,CAAjC;;;EAEF,IAAMmD,KAAK,GAAGngB,IAAI,CAACkK,KAAL,CAAW,CAAC+L,CAAC,GAAG/U,IAAI,CAAC8K,EAAV,IAAgBkU,KAA3B,CAAd;EACA,IAAME,gBAAgB,GAAGD,KAAK,GAAGD,KAAjC;EACA,IAAMG,IAAI,GAAGnf,IAAI,CAAC8K,EAAL,GAAUoU,gBAAvB;EACA,OAAOC,IAAP;AACD,CARD;;AAUA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACrK,CAAD,EAAYiK,KAAZ,EAA2Bhf,IAA3B;EACrB,IAAI+U,CAAC,IAAI/U,IAAI,CAACiL,QAAL,GAAgBjL,IAAI,CAAC8b,WAAL,GAAmB,CAA5C,EAA+C;IAC7C/G,CAAC,GAAG/U,IAAI,CAACiL,QAAL,GAAgBjL,IAAI,CAAC8b,WAAL,GAAmB,CAAvC;;;EAEF,IAAMmD,KAAK,GAAGngB,IAAI,CAACkK,KAAL,CAAW,CAAC+L,CAAC,GAAG/U,IAAI,CAACmL,QAAV,IAAsB6T,KAAjC,CAAd;EACA,IAAME,gBAAgB,GAAGD,KAAK,GAAGD,KAAjC;EACA,IAAMG,IAAI,GAAGnf,IAAI,CAACmL,QAAL,GAAgB+T,gBAA7B;EACA,OAAOC,IAAP;AACD,CARD;;AAUA,IAAME,MAAM,GAAG,SAATA,MAAS,CAACtK,CAAD,EAAYiK,KAAZ,EAA2Bhf,IAA3B;EACb,IAAI+U,CAAC,IAAI/U,IAAI,CAAC8K,EAAL,GAAU9K,IAAI,CAAC8b,WAAL,GAAmB,CAAtC,EAAyC;IACvC/G,CAAC,GAAG/U,IAAI,CAAC8K,EAAL,GAAU9K,IAAI,CAAC8b,WAAL,GAAmB,CAAjC;;;EAEF,IAAMmD,KAAK,GAAGngB,IAAI,CAACkK,KAAL,CAAW,CAAC+L,CAAC,GAAG/U,IAAI,CAAC+K,EAAV,IAAgBiU,KAA3B,CAAd;EACA,IAAME,gBAAgB,GAAGD,KAAK,GAAGD,KAAjC;EACA,IAAMG,IAAI,GAAGnf,IAAI,CAAC+K,EAAL,GAAUmU,gBAAvB;EACA,OAAOC,IAAP;AACD,CARD;;AAUA,IAAMG,YAAY,GAAG,SAAfA,YAAe,CAACvK,CAAD,EAAYiK,KAAZ,EAA2Bhf,IAA3B;EACnB,IAAI+U,CAAC,IAAI/U,IAAI,CAACmL,QAAL,GAAgBnL,IAAI,CAAC8b,WAAL,GAAmB,CAA5C,EAA+C;IAC7C/G,CAAC,GAAG/U,IAAI,CAACmL,QAAL,GAAgBnL,IAAI,CAAC8b,WAAL,GAAmB,CAAvC;;;EAEF,IAAMmD,KAAK,GAAGngB,IAAI,CAACkK,KAAL,CAAW,CAAC+L,CAAC,GAAG/U,IAAI,CAACiL,QAAV,IAAsB+T,KAAjC,CAAd;EACA,IAAME,gBAAgB,GAAGD,KAAK,GAAGD,KAAjC;EACA,IAAMG,IAAI,GAAGnf,IAAI,CAACiL,QAAL,GAAgBiU,gBAA7B;EACA,OAAOC,IAAP;AACD,CARD;;AAUA,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAACxK,CAAD,EAAYiK,KAAZ,EAA2Bhf,IAA3B;EACd,IAAMif,KAAK,GAAGngB,IAAI,CAACkK,KAAL,CAAW,CAAC+L,CAAC,GAAG/U,IAAI,CAAC8K,EAAV,IAAgBkU,KAA3B,CAAd;EACA,IAAME,gBAAgB,GAAGD,KAAK,GAAGD,KAAjC;EACA,IAAMQ,KAAK,GAAGxf,IAAI,CAAC8K,EAAL,GAAUoU,gBAAxB;EACA,IAAMO,KAAK,GAAGD,KAAK,GAAGxf,IAAI,CAAC+K,EAAb,GAAkB/K,IAAI,CAAC8K,EAArC;EACA,OAAO,CAAC0U,KAAD,EAAQC,KAAR,CAAP;AACD,CAND;;AAQA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAC3K,CAAD,EAAYiK,KAAZ,EAA2Bhf,IAA3B;EACpB,IAAMif,KAAK,GAAGngB,IAAI,CAACkK,KAAL,CAAW,CAAC+L,CAAC,GAAG/U,IAAI,CAACmL,QAAV,IAAsB6T,KAAjC,CAAd;EACA,IAAME,gBAAgB,GAAGD,KAAK,GAAGD,KAAjC;EACA,IAAMQ,KAAK,GAAGxf,IAAI,CAACmL,QAAL,GAAgB+T,gBAA9B;EACA,IAAMO,KAAK,GAAGD,KAAK,GAAGxf,IAAI,CAACiL,QAAb,GAAwBjL,IAAI,CAACmL,QAA3C;EACA,OAAO,CAACqU,KAAD,EAAQC,KAAR,CAAP;AACD,CAND;;AAQA,IAAME,OAAO,GAAG,SAAVA,OAAU,CACd5K,CADc,EAEd6K,KAFc,EAGdC,QAHc,EAIdb,KAJc,EAKdc,QALc;EAOd,IAAIpiB,OAAO,GAAG,IAAIC,IAAJ,CAAU,CAACoX,CAAC,GAAG6K,KAAL,IAAcZ,KAAf,GAAwBc,QAAxB,GAAmCD,QAAQ,CAAChgB,OAAT,EAA5C,CAAd;EACAnC,OAAO,GAAG,IAAIC,IAAJ,CACRD,OAAO,CAACmC,OAAR,KACE,CAACnC,OAAO,CAACqiB,iBAAR,KAA8BF,QAAQ,CAACE,iBAAT,EAA/B,IAA+D,KAFzD,CAAV;EAIA,OAAOriB,OAAP;AACD,CAbD;;AAkBA,AAAO,IAAMsiB,yBAAyB,GAAG,SAA5BA,yBAA4B,CACvCC,IADuC,EAEvCC,MAFuC,EAGvCjT,YAHuC,EAIvC1I,IAJuC,EAKvCya,KALuC,EAMvCc,QANuC,EAOvCK,gBAPuC,EAQvC7W,GARuC;EAUvC,IAAIkK,MAAJ;;EACA,QAAQvG,YAAY,CAAC1I,IAArB;IACE,KAAK,WAAL;MACEiP,MAAM,GAAG4M,qCAAqC,CAC5CH,IAD4C,EAE5CC,MAF4C,EAG5CjT,YAH4C,EAI5C+R,KAJ4C,EAK5Cc,QAL4C,EAM5CK,gBAN4C,CAA9C;MAQA;;IACF;MACE3M,MAAM,GAAG6M,+BAA+B,CACtCJ,IADsC,EAEtCC,MAFsC,EAGtCjT,YAHsC,EAItC1I,IAJsC,EAKtCya,KALsC,EAMtCc,QANsC,EAOtCK,gBAPsC,EAQtC7W,GARsC,CAAxC;MAUA;;;EAEJ,OAAOkK,MAAP;AACD,CApCM;;AAsCP,IAAM6M,+BAA+B,GAAG,SAAlCA,+BAAkC,CACtCJ,IADsC,EAEtCC,MAFsC,EAGtCjT,YAHsC,EAItC1I,IAJsC,EAKtCya,KALsC,EAMtCc,QANsC,EAOtCK,gBAPsC,EAQtC7W,GARsC;EAUtC,IAAMgX,WAAW,gBAAiBrT,YAAjB,CAAjB;;EACA,IAAIsT,SAAS,GAAG,KAAhB;;EACA,QAAQL,MAAR;IAmBE,KAAK,OAAL;MAAc;QACZ,IAAMV,KAAK,GACTjb,IAAI,IAAI,SAAR,GACIwa,QAAQ,CAACkB,IAAD,EAAOjB,KAAP,EAAc/R,YAAd,CADZ,GAEImS,cAAc,CAACa,IAAD,EAAOjB,KAAP,EAAc/R,YAAd,CAHpB;QAIA,IAAI1I,IAAI,IAAI,SAAZ,EAAuB+b,WAAW,CAACxV,EAAZ,GAAiB0U,KAAjB,CAAvB,KACK,IAAIjb,IAAI,IAAI,QAAZ,EAAsB+b,WAAW,CAACnV,QAAZ,GAAuBqU,KAAvB;QAC3Be,SAAS,GACPD,WAAW,CAACxV,EAAZ,KAAmBmC,YAAY,CAACnC,EAAhC,IACAwV,WAAW,CAACnV,QAAZ,KAAyB8B,YAAY,CAAC9B,QAFxC;;QAGA,IAAIoV,SAAJ,EAAe;UACb,IAAIjX,GAAJ,EAAS;YACP,IAAI/E,IAAI,IAAI,SAAZ,EACE+b,WAAW,CAACvgB,GAAZ,GAAkB4f,OAAO,CACvBH,KADuB,EAEvBvS,YAAY,CAACnC,EAFU,EAGvBmC,YAAY,CAAClN,GAHU,EAIvBif,KAJuB,EAKvBc,QALuB,CAAzB;YAOF,IAAIvb,IAAI,IAAI,QAAZ,EACE+b,WAAW,CAACpgB,SAAZ,GAAwByf,OAAO,CAC7BH,KAD6B,EAE7BvS,YAAY,CAAC9B,QAFgB,EAG7B8B,YAAY,CAAC/M,SAHgB,EAI7B8e,KAJ6B,EAK7Bc,QAL6B,CAA/B;WAVJ,MAiBO;YACL,IAAIvb,IAAI,IAAI,SAAZ,EACE+b,WAAW,CAAC1gB,KAAZ,GAAoB+f,OAAO,CACzBH,KADyB,EAEzBvS,YAAY,CAACnC,EAFY,EAGzBmC,YAAY,CAACrN,KAHY,EAIzBof,KAJyB,EAKzBc,QALyB,CAA3B;YAOF,IAAIvb,IAAI,IAAI,QAAZ,EACE+b,WAAW,CAACrgB,WAAZ,GAA0B0f,OAAO,CAC/BH,KAD+B,EAE/BvS,YAAY,CAAC9B,QAFkB,EAG/B8B,YAAY,CAAChN,WAHkB,EAI/B+e,KAJ+B,EAK/Bc,QAL+B,CAAjC;;;UAQJ,6BAAmCrC,oBAAoB,CACrD6C,WAAW,CAACxV,EADyC,EAErDwV,WAAW,CAACvV,EAFyC,EAGrDuV,WAAW,CAACzX,QAHyC,EAIrDS,GAJqD,CAAvD;cAAOoU,aAAP;cAAsBC,SAAtB;;UAMA2C,WAAW,CAAC5C,aAAZ,GAA4BA,aAA5B;UACA4C,WAAW,CAAC3C,SAAZ,GAAwBA,SAAxB;;;QAEF;;;IAEF,KAAK,KAAL;MAAY;QACV,IAAM8B,KAAK,GACTlb,IAAI,IAAI,SAAR,GACI8a,MAAM,CAACY,IAAD,EAAOjB,KAAP,EAAc/R,YAAd,CADV,GAEIqS,YAAY,CAACW,IAAD,EAAOjB,KAAP,EAAc/R,YAAd,CAHlB;QAIA,IAAI1I,IAAI,IAAI,SAAZ,EAAuB+b,WAAW,CAACvV,EAAZ,GAAiB0U,KAAjB,CAAvB,KACK,IAAIlb,IAAI,IAAI,QAAZ,EAAsB+b,WAAW,CAACrV,QAAZ,GAAuBwU,KAAvB;QAC3Bc,SAAS,GACPD,WAAW,CAACvV,EAAZ,KAAmBkC,YAAY,CAAClC,EAAhC,IACAuV,WAAW,CAACrV,QAAZ,KAAyBgC,YAAY,CAAChC,QAFxC;;QAGA,IAAIsV,SAAJ,EAAe;UACb,IAAIjX,GAAJ,EAAS;YACP,IAAI/E,IAAI,IAAI,SAAZ,EACE+b,WAAW,CAAC1gB,KAAZ,GAAoB+f,OAAO,CACzBF,KADyB,EAEzBxS,YAAY,CAAClC,EAFY,EAGzBkC,YAAY,CAACrN,KAHY,EAIzBof,KAJyB,EAKzBc,QALyB,CAA3B;YAOF,IAAIvb,IAAI,IAAI,QAAZ,EACE+b,WAAW,CAACrgB,WAAZ,GAA0B0f,OAAO,CAC/BF,KAD+B,EAE/BxS,YAAY,CAAChC,QAFkB,EAG/BgC,YAAY,CAAChN,WAHkB,EAI/B+e,KAJ+B,EAK/Bc,QAL+B,CAAjC;WAVJ,MAiBO;YACL,IAAIvb,IAAI,IAAI,SAAZ,EACE+b,WAAW,CAACvgB,GAAZ,GAAkB4f,OAAO,CACvBF,KADuB,EAEvBxS,YAAY,CAAClC,EAFU,EAGvBkC,YAAY,CAAClN,GAHU,EAIvBif,KAJuB,EAKvBc,QALuB,CAAzB;YAOF,IAAIvb,IAAI,IAAI,QAAZ,EACE+b,WAAW,CAACpgB,SAAZ,GAAwByf,OAAO,CAC7BF,KAD6B,EAE7BxS,YAAY,CAAChC,QAFgB,EAG7BgC,YAAY,CAAC/M,SAHgB,EAI7B8e,KAJ6B,EAK7Bc,QAL6B,CAA/B;;;UAQJ,6BAAmCrC,oBAAoB,CACrD6C,WAAW,CAACxV,EADyC,EAErDwV,WAAW,CAACvV,EAFyC,EAGrDuV,WAAW,CAACzX,QAHyC,EAIrDS,GAJqD,CAAvD;cAAOoU,cAAP;cAAsBC,UAAtB;;UAMA2C,WAAW,CAAC5C,aAAZ,GAA4BA,cAA5B;UACA4C,WAAW,CAAC3C,SAAZ,GAAwBA,UAAxB;;;QAEF;;;IAEF,KAAK,MAAL;MAAa;QACX,WACEpZ,IAAI,IAAI,SAAR,GACIgb,OAAO,CAACU,IAAI,GAAGE,gBAAR,EAA0BnB,KAA1B,EAAiC/R,YAAjC,CADX,GAEIyS,aAAa,CAACO,IAAI,GAAGE,gBAAR,EAA0BnB,KAA1B,EAAiC/R,YAAjC,CAHnB;YAAOuT,SAAP;YAAkBC,SAAlB;;QAIA,IAAIlc,IAAI,IAAI,SAAZ,EAAuBgc,SAAS,GAAGC,SAAS,KAAKvT,YAAY,CAACnC,EAAvC;QACvB,IAAIvG,IAAI,IAAI,QAAZ,EAAsBgc,SAAS,GAAGC,SAAS,KAAKvT,YAAY,CAAC9B,QAAvC;;QACtB,IAAIoV,SAAJ,EAAe;UACb,IAAIhc,IAAI,IAAI,SAAZ,EAAuB;YACrB+b,WAAW,CAAC1gB,KAAZ,GAAoB+f,OAAO,CACzBa,SADyB,EAEzBvT,YAAY,CAACnC,EAFY,EAGzBmC,YAAY,CAACrN,KAHY,EAIzBof,KAJyB,EAKzBc,QALyB,CAA3B;YAOAQ,WAAW,CAACvgB,GAAZ,GAAkB4f,OAAO,CACvBc,SADuB,EAEvBxT,YAAY,CAAClC,EAFU,EAGvBkC,YAAY,CAAClN,GAHU,EAIvBif,KAJuB,EAKvBc,QALuB,CAAzB;YAOAQ,WAAW,CAACxV,EAAZ,GAAiB0V,SAAjB;YACAF,WAAW,CAACvV,EAAZ,GAAiB0V,SAAjB;;;UAEF,IAAIlc,IAAI,IAAI,QAAZ,EAAsB;YACpB+b,WAAW,CAACrgB,WAAZ,GAA0B0f,OAAO,CAC/Ba,SAD+B,EAE/BvT,YAAY,CAAC9B,QAFkB,EAG/B8B,YAAY,CAAChN,WAHkB,EAI/B+e,KAJ+B,EAK/Bc,QAL+B,CAAjC;YAOAQ,WAAW,CAACpgB,SAAZ,GAAwByf,OAAO,CAC7Bc,SAD6B,EAE7BxT,YAAY,CAAChC,QAFgB,EAG7BgC,YAAY,CAAC/M,SAHgB,EAI7B8e,KAJ6B,EAK7Bc,QAL6B,CAA/B;YAOAQ,WAAW,CAACnV,QAAZ,GAAuBqV,SAAvB;YACAF,WAAW,CAACrV,QAAZ,GAAuBwV,SAAvB;;;;QAYJ;;;;EAGJ,OAAO;IAAEF,SAAS,EAATA,SAAF;IAAaD,WAAW,EAAXA;GAApB;AACD,CA3MD;;AA6MA,IAAMF,qCAAqC,GAAG,SAAxCA,qCAAwC,CAC5CH,IAD4C,EAE5CC,MAF4C,EAG5CjT,YAH4C,EAI5C+R,KAJ4C,EAK5Cc,QAL4C,EAM5CK,gBAN4C;EAQ5C,IAAMG,WAAW,gBAAiBrT,YAAjB,CAAjB;;EACA,IAAIsT,SAAS,GAAG,KAAhB;;EACA,QAAQL,MAAR;IACE,KAAK,MAAL;MAAa;QACX,eAA+BX,OAAO,CACpCU,IAAI,GAAGE,gBAD6B,EAEpCnB,KAFoC,EAGpC/R,YAHoC,CAAtC;YAAOuT,SAAP;YAAkBC,SAAlB;;QAKAF,SAAS,GAAGC,SAAS,KAAKvT,YAAY,CAACnC,EAAvC;;QACA,IAAIyV,SAAJ,EAAe;UACbD,WAAW,CAAC1gB,KAAZ,GAAoB+f,OAAO,CACzBa,SADyB,EAEzBvT,YAAY,CAACnC,EAFY,EAGzBmC,YAAY,CAACrN,KAHY,EAIzBof,KAJyB,EAKzBc,QALyB,CAA3B;UAOAQ,WAAW,CAACvgB,GAAZ,GAAkBugB,WAAW,CAAC1gB,KAA9B;UACA0gB,WAAW,CAACxV,EAAZ,GAAiB0V,SAAjB;UACAF,WAAW,CAACvV,EAAZ,GAAiB0V,SAAjB;;;QAEF;;;;EAGJ,OAAO;IAAEF,SAAS,EAATA,SAAF;IAAaD,WAAW,EAAXA;GAApB;AACD,CAlCD;;SCnuBgBI,gBACdC;EAEA,OAAQA,KAA6B,CAAC3jB,GAA9B,KAAsCkU,SAA9C;AACD;AAED,SAUgB0P,kBAAkBphB;EAChC,IAAMqhB,YAAY,GAAGrhB,KAAK,CAACsQ,MAAN,CACnB,UAAArK,CAAC;IAAA,OAAIA,CAAC,CAACyB,YAAF,IAAkBzB,CAAC,CAAClB,IAAF,KAAW,SAAjC;GADkB,CAArB;;EAGA,IAAIsc,YAAY,CAACnS,MAAb,GAAsB,CAA1B,EAA6B;IAAA,2BAClBkF,CADkB;MAEzB,IAAMkN,WAAW,GAAGD,YAAY,CAACjN,CAAD,CAAhC;MACA,IAAMlD,QAAQ,GAAGqQ,WAAW,CAACvhB,KAAD,EAAQshB,WAAR,CAA5B;MACAthB,KAAK,GAAGA,KAAK,CAACsQ,MAAN,CAAa,UAAArK,CAAC;QAAA,OAAIiL,QAAQ,CAAClS,OAAT,CAAiBiH,CAAjB,MAAwB,CAAC,CAA7B;OAAd,CAAR;;;IAHF,KAAK,IAAImO,CAAC,GAAG,CAAb,EAAgBiN,YAAY,CAACnS,MAAb,GAAsBkF,CAAtC,EAAyCA,CAAC,EAA1C,EAA8C;MAAA,MAArCA,CAAqC;;;;EAMhD,OAAOpU,KAAP;AACD;;AAED,SAASuhB,WAAT,CAAqBC,QAArB,EAAuChhB,IAAvC;EACE,IAAIR,KAAK,GAAW,EAApB;;EACA,IAAIQ,IAAI,CAACuE,IAAL,KAAc,SAAlB,EAA6B;IAC3B/E,KAAK,GAAGwhB,QAAQ,CAAClR,MAAT,CACN,UAAArK,CAAC;MAAA,OACCA,CAAC,CAACkX,YAAF,IACAlX,CAAC,CAACkX,YAAF,CAAe5W,GAAf,CAAmB;QAAA,IAAGC,EAAH,QAAGA,EAAH;QAAA,OAAYA,EAAZ;OAAnB,EAAmCxH,OAAnC,CAA2CwB,IAAI,CAACgG,EAAhD,MAAwD,CAAC,CAF1D;KADK,CAAR;GADF,MAMO;IACLxG,KAAK,GAAGwhB,QAAQ,CAAClR,MAAT,CAAgB,UAAArK,CAAC;MAAA,OAAIA,CAAC,CAACwb,OAAF,IAAaxb,CAAC,CAACwb,OAAF,KAAcjhB,IAAI,CAACgG,EAApC;KAAjB,CAAR;;;EAEF,IAAIkb,YAAY,GAAW,EAA3B;EACA1hB,KAAK,CAACwQ,OAAN,CAAc,UAAAvK,CAAC;IACbyb,YAAY,CAACpgB,IAAb,OAAAogB,YAAY,EAASH,WAAW,CAACC,QAAD,EAAWvb,CAAX,CAApB,CAAZ;GADF;EAGAjG,KAAK,GAAGA,KAAK,CAAC2hB,MAAN,CAAa3hB,KAAb,EAAoB0hB,YAApB,CAAR;EACA,OAAO1hB,KAAP;AACD;;AAED,AAAO,IAAM4hB,SAAS,GAAG,SAAZA,SAAY,CAACC,KAAD,EAAcC,KAAd;EACvB,IAAMC,MAAM,GAAGF,KAAK,CAACG,YAAN,IAAsB1P,MAAM,CAAC2P,SAA5C;EACA,IAAMC,MAAM,GAAGJ,KAAK,CAACE,YAAN,IAAsB1P,MAAM,CAAC2P,SAA5C;;EACA,IAAIF,MAAM,GAAGG,MAAb,EAAqB;IACnB,OAAO,CAAP;GADF,MAEO,IAAIH,MAAM,GAAGG,MAAb,EAAqB;IAC1B,OAAO,CAAC,CAAR;GADK,MAEA;IACL,OAAO,CAAP;;AAEH,CAVM;;ACxBA,IAAMC,UAAU,GAA8B,SAAxCA,UAAwC;MACnD5M,SAAAA;MACA/C,SAAAA;MACAzN,YAAAA;MACAd,aAAAA;MACAU,cAAAA;MACAgD,kBAAAA;MACAwW,iBAAAA;MACAD,qBAAAA;MACA7B,uBAAAA;MACAjY,cAAAA;MACAge,gBAAAA;MACAxd,mBAAAA;;EAEA,IAAMyd,eAAe,GAAG,SAAlBA,eAAkB;IACtB,OAAO1a,UAAU,GAAGvD,MAAM,CAACwa,qBAAV,GAAkCxa,MAAM,CAACua,aAA1D;GADF;;EAIA,IAAM2D,WAAW,GAAG,SAAdA,WAAc;IAClB,OAAO3a,UAAU,GAAGvD,MAAM,CAACsa,uBAAV,GAAoCta,MAAM,CAACqa,eAA5D;GADF;;EAIA,IAAI1Z,IAAI,KAAK,SAAb,EAAwB;IACtB,IAAIqd,QAAQ,IAAIA,QAAQ,CAAClT,MAAT,GAAkB,CAAlC,EAAqC;MAEnC,IAAMqT,UAAU,GAAGte,KAAnB;MACA,OACEC,mBAAA,IAAA;QAAGU,WAAW,EAAEA;OAAhB,EACGwd,QAAQ,CAAC7b,GAAT,CAAa,UAACic,GAAD,EAAMC,GAAN;QAAA,OACZve,mBAAA,OAAA;UACE1G,GAAG,WAASilB;UACZlN,CAAC,EAAEiN,GAAG,CAAClX;UACPrH,KAAK,EAAEue,GAAG,CAACjX,EAAJ,GAASiX,GAAG,CAAClX;UACpBkH,CAAC,EAAEA;UACH7N,MAAM,EAAEA;UACR+d,EAAE,EAAErG;UACJsG,EAAE,EAAEtG;UACJ7G,IAAI,EAAE8M,WAAW;UACjBlH,WAAW,EAAE;UACbC,MAAM,EAAEjX,MAAM,CAACwe;SAVjB,CADY;OAAb,CADH,EAgBG1E,aAAa,GAAG,CAAhB,IAAsB;QACrB,IAAM2E,KAAK,GAAsB,EAAjC;QACA,IAAIC,SAAS,GAAG5E,aAAhB;;QACA,qDAAkBkE,QAAlB,wCAA4B;UAAA,IAAjBI,GAAiB;UAC1B,IAAIM,SAAS,IAAI,CAAjB,EAAoB;UACpB,IAAMC,IAAI,GAAGP,GAAG,CAACjX,EAAJ,GAASiX,GAAG,CAAClX,EAA1B;UACA,IAAM0X,KAAK,GAAGT,UAAU,GAAG,CAAb,GAAiBQ,IAAI,GAAGR,UAAxB,GAAqC,CAAnD;UACA,IAAMU,EAAE,GAAG3jB,IAAI,CAACyW,GAAL,CAAS+M,SAAT,EAAoB5E,aAAa,GAAG8E,KAApC,CAAX;;UACA,IAAIC,EAAE,GAAG,CAAT,EAAY;YACVJ,KAAK,CAACvhB,IAAN,CACE4C,mBAAA,OAAA;cACE1G,GAAG,YAAUglB,GAAG,CAAClX;cACjBiK,CAAC,EAAEiN,GAAG,CAAClX;cACPrH,KAAK,EAAEgf;cACPzQ,CAAC,EAAEA;cACH7N,MAAM,EAAEA;cACR+d,EAAE,EAAErG;cACJsG,EAAE,EAAEtG;cACJ7G,IAAI,EAAE6M,eAAe;aARvB,CADF;YAYAS,SAAS,IAAIG,EAAb;;;;QAGJ,OAAOJ,KAAP;OAxBoB,EAhBxB,CADF;;;IA8CF,OACE3e,mBAAA,IAAA;MAAGU,WAAW,EAAEA;KAAhB,EACEV,mBAAA,OAAA;MACEqR,CAAC,EAAEA;MACHtR,KAAK,EAAEA;MACPuO,CAAC,EAAEA;MACH7N,MAAM,EAAEA;MACR+d,EAAE,EAAErG;MACJsG,EAAE,EAAEtG;MACJ7G,IAAI,EAAE8M,WAAW;MACjBlH,WAAW,EAAE;MACbC,MAAM,EAAEjX,MAAM,CAACwe;KATjB,CADF,EAYE1e,mBAAA,OAAA;MACEqR,CAAC,EAAE4I;MACHla,KAAK,EAAEia;MACP1L,CAAC,EAAEA;MACH7N,MAAM,EAAEA;MACR+d,EAAE,EAAErG;MACJsG,EAAE,EAAEtG;MACJ7G,IAAI,EAAE6M,eAAe;KAPvB,CAZF,CADF;GAlDF,MA0EO;IACL,IAAID,QAAQ,IAAIA,QAAQ,CAAClT,MAAT,GAAkB,CAAlC,EAAqC;MACnC,OACEhL,mBAAA,IAAA;QAAGU,WAAW,EAAEA;OAAhB,EACGwd,QAAQ,CAAC7b,GAAT,CAAa,UAACic,GAAD,EAAMC,GAAN;QAAA,OACZve,mBAAA,OAAA;UACE1G,GAAG,YAAUilB;UACblN,CAAC,EAAEiN,GAAG,CAAClX;UACPrH,KAAK,EAAEue,GAAG,CAACjX,EAAJ,GAASiX,GAAG,CAAClX;UACpBkH,CAAC,EAAEA;UACH7N,MAAM,EAAEA;UACR+d,EAAE,EAAErG;UACJsG,EAAE,EAAEtG;UACJ7G,IAAI,EAAEpR,MAAM,CAAC8e;SARf,CADY;OAAb,CADH,EAaEhf,mBAAA,OAAA;QACEqR,CAAC,EAAE4I;QACHla,KAAK,EAAEia;QACP1L,CAAC,EAAEA;QACH7N,MAAM,EAAEA;QACR+d,EAAE,EAAErG;QACJsG,EAAE,EAAEtG;QACJ7G,IAAI,EAAE6M,eAAe;OAPvB,CAbF,CADF;;;IA0BF,OACEne,mBAAA,IAAA;MAAGU,WAAW,EAAEA;KAAhB,EACEV,mBAAA,OAAA;MACEqR,CAAC,EAAEA;MACHtR,KAAK,EAAEA;MACPuO,CAAC,EAAEA;MACH7N,MAAM,EAAEA;MACR+d,EAAE,EAAErG;MACJsG,EAAE,EAAEtG;MACJ7G,IAAI,EAAEpR,MAAM,CAAC8e;KAPf,CADF,EAUEhf,mBAAA,OAAA;MACEqR,CAAC,EAAE4I;MACHla,KAAK,EAAEia;MACP1L,CAAC,EAAEA;MACH7N,MAAM,EAAEA;MACR+d,EAAE,EAAErG;MACJsG,EAAE,EAAEtG;MACJ7G,IAAI,EAAE6M,eAAe;KAPvB,CAVF,CADF;;AAuBH,CAnJM;;;;ACjBA,IAAMc,aAAa,GAAiC,SAA9CA,aAA8C;MACzD5N,SAAAA;MACA/C,SAAAA;MACAvO,aAAAA;MACAU,cAAAA;MACA0X,uBAAAA;MACAzX,mBAAAA;EAEA,OACEV,mBAAA,OAAA;IACEqR,CAAC,EAAEA;IACH/C,CAAC,EAAEA;IACHvO,KAAK,EAAEA;IACPU,MAAM,EAAEA;IACRR,SAAS,EAAEC,QAAM,CAACgf;IAClBV,EAAE,EAAErG;IACJsG,EAAE,EAAEtG;IACJzX,WAAW,EAAEA;GARf,CADF;AAYD,CApBM;;ACJA,IAAMye,iBAAiB,GAAqC,SAAtDA,iBAAsD;;;EAMjE,OACEnf,mBAAA,MAAA,MAAA,CADF;AAQD,CAdM;;ACCA,IAAMof,GAAG,GAA4B,SAA/BA,GAA+B;MAC1C9iB,YAAAA;MACA+iB,4BAAAA;MACAC,wBAAAA;MACA1Z,WAAAA;MACA/E,YAAAA;MACA0e,oBAAAA;MACA9b,kBAAAA;EAEA,IAAM+b,aAAa,GAAGvE,gBAAgB,CACpC,CAAC,CAACrV,GAAF,GAAQtJ,IAAI,CAAC0d,aAAb,GAA6B1d,IAAI,CAAC2d,SADE,EAEpC3d,IAAI,CAACgS,CAF+B,EAGpChS,IAAI,CAACmE,MAH+B,CAAtC;EAKA,IAAMgf,YAAY,GAAGnjB,IAAI,CAACmE,MAAL,GAAc,CAAd,GAAkB,CAAvC;EAKA,IAAMif,WAAW,GAAGpjB,IAAI,CAACmb,eAAzB;EACA,IAAMkI,kBAAkB,GAAGD,WAAW,SAAX,IAAAA,WAAW,WAAX,IAAAA,WAAW,CAAE1U,MAAb,GACvB0U,WAAW,CAAC,CAAD,CAAX,CAAetY,EADQ,GAEvB9K,IAAI,CAAC8K,EAFT;EAGA,IAAMwY,mBAAmB,GAAGF,WAAW,SAAX,IAAAA,WAAW,WAAX,IAAAA,WAAW,CAAE1U,MAAb,GACxB0U,WAAW,CAACA,WAAW,CAAC1U,MAAZ,GAAqB,CAAtB,CAAX,CAAoC3D,EADZ,GAExB/K,IAAI,CAAC+K,EAFT;EAIA,IAAMwY,UAAU,GAAGvjB,IAAI,CAACqb,cAAxB;EACA,IAAMmI,iBAAiB,GAAGD,UAAU,SAAV,IAAAA,UAAU,WAAV,IAAAA,UAAU,CAAE7U,MAAZ,GACtB6U,UAAU,CAAC,CAAD,CAAV,CAAczY,EADQ,GAEtB9K,IAAI,CAACmL,QAFT;EAGA,IAAMsY,kBAAkB,GAAGF,UAAU,SAAV,IAAAA,UAAU,WAAV,IAAAA,UAAU,CAAE7U,MAAZ,GACvB6U,UAAU,CAACA,UAAU,CAAC7U,MAAX,GAAoB,CAArB,CAAV,CAAkC3D,EADX,GAEvB/K,IAAI,CAACiL,QAFT;;EAIA,IAAI1G,IAAI,IAAI,SAAZ,EAAuB;IACrB,IAAI,CAAAvE,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE8K,EAAN,KAAY,CAAZ,IAAiB,CAAA9K,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE+K,EAAN,KAAY,CAA7B,IAAkC/K,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8K,EAAf,IAAqB,CAA3D,EACE,OACEpH,mBAAA,IAAA;MAAGC,SAAS,EAAEC,QAAM,CAAC8f;MAAYC,QAAQ,EAAE;KAA3C,EAEEjgB,mBAAA,OAAA;MAAMqR,CAAC,EAAE/U,IAAI,CAAC8K;MAAIkH,CAAC,EAAEhS,IAAI,CAACgS;MAAGvO,KAAK,EAAEzD,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8K;MAAI3G,MAAM,EAAEnE,IAAI,CAACmE,MAAL,GAAc;MAAG6Q,IAAI,EAAC;KAArF,CAFF,EAGEtR,mBAAA,CAACie,UAAD;MACE5M,CAAC,EAAE/U,IAAI,CAAC8K;MACRkH,CAAC,EAAEhS,IAAI,CAACgS;MACRzN,IAAI,EAAEA;MACNqf,kBAAkB,EAAE5jB,IAAI,CAACmd;MACzB0G,gBAAgB,EAAE7jB,IAAI,CAACod;MACvB3Z,KAAK,EAAEzD,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8K;MACtB3G,MAAM,EAAEnE,IAAI,CAACmE,MAAL,GAAc;MACtBwZ,SAAS,EAAE3d,IAAI,CAAC2d;MAChBD,aAAa,EAAE1d,IAAI,CAAC0d;MACpB7B,eAAe,EAAE7b,IAAI,CAAC6b;MACtBjY,MAAM,EAAE5D,IAAI,CAAC4D;MACbuD,UAAU,EAAEA;MACZya,QAAQ,EAAE5hB,IAAI,CAACmb;MACf/W,WAAW,EAAE,qBAAA1B,CAAC;QACZsgB,gBAAgB,IAAIC,YAAY,CAAC,MAAD,EAASjjB,IAAT,EAAe0C,CAAf,EAAkB,SAAlB,CAAhC;;KAfJ,CAHF,EAqBEgB,mBAAA,IAAA;MAAGC,SAAS,EAAC;KAAb,EACGqf,gBAAgB,IACftf,mBAAA,IAAA,MAAA,EAGEA,mBAAA,CAACif,aAAD;MACE5N,CAAC,EAAEsO,kBAAkB,GAAG;MACxBrR,CAAC,EAAEhS,IAAI,CAACgS,CAAL,GAAS;MACZvO,KAAK,EAAEzD,IAAI,CAAC8b;MACZ3X,MAAM,EAAEgf;MACRtH,eAAe,EAAE7b,IAAI,CAAC6b;MACtBzX,WAAW,EAAE,qBAAA1B,CAAC;QACZugB,YAAY,CAAC,OAAD,EAAUjjB,IAAV,EAAgB0C,CAAhB,EAAmB,SAAnB,CAAZ;;KAPJ,CAHF,EAcEgB,mBAAA,CAACif,aAAD;MACE5N,CAAC,EAAEuO,mBAAmB,GAAGtjB,IAAI,CAAC8b,WAA3B,GAAyC;MAC5C9J,CAAC,EAAEhS,IAAI,CAACgS,CAAL,GAAS;MACZvO,KAAK,EAAEzD,IAAI,CAAC8b;MACZ3X,MAAM,EAAEgf;MACRtH,eAAe,EAAE7b,IAAI,CAAC6b;MACtBzX,WAAW,EAAE,qBAAA1B,CAAC;QACZugB,YAAY,CAAC,KAAD,EAAQjjB,IAAR,EAAc0C,CAAd,EAAiB,SAAjB,CAAZ;;KAPJ,CAdF,CAFJ,EA4BGqgB,oBAAoB,IACnBrf,mBAAA,CAACmf,iBAAD;MACEK,aAAa,EAAEA;MACf9e,WAAW,EAAE,qBAAA1B,CAAC;QACZugB,YAAY,CAAC,UAAD,EAAajjB,IAAb,EAAmB0C,CAAnB,EAAsB,SAAtB,CAAZ;;KAHJ,CA7BJ,CArBF,CADF,CADF,KA8DK,OAAOgB,mBAAA,IAAA;MAAGC,SAAS,EAAEC,QAAM,CAAC8f;MAAYC,QAAQ,EAAE;KAA3C,CAAP;GA/DP,MAgEO,IAAI,CAAA3jB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEmL,QAAN,KAAkB,CAAlB,IAAuB,CAAAnL,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEiL,QAAN,KAAkB,CAAzC,IAA8CjL,IAAI,CAACiL,QAAL,GAAgBjL,IAAI,CAACmL,QAArB,IAAiC,CAAnF,EAAsF;IAC3F,OACEzH,mBAAA,IAAA;MAAGC,SAAS,EAAEC,QAAM,CAAC8f;MAAYC,QAAQ,EAAE;KAA3C,EAEEjgB,mBAAA,OAAA;MAAMqR,CAAC,EAAE/U,IAAI,CAACmL;MAAU6G,CAAC,EAAEhS,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc;MAAGV,KAAK,EAAEzD,IAAI,CAACiL,QAAL,GAAgBjL,IAAI,CAACmL;MAAUhH,MAAM,EAAEnE,IAAI,CAACmE,MAAL,GAAc;MAAG6Q,IAAI,EAAC;KAAzH,CAFF,EAGEtR,mBAAA,CAACie,UAAD;MACE5M,CAAC,EAAE/U,IAAI,CAACmL;MACR6G,CAAC,EAAEhS,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc;MAC1BI,IAAI,EAAEA;MACNqf,kBAAkB,EAAE5jB,IAAI,CAACmd;MACzB0G,gBAAgB,EAAE7jB,IAAI,CAACod;MACvB3Z,KAAK,EAAEzD,IAAI,CAACiL,QAAL,GAAgBjL,IAAI,CAACmL;MAC5BhH,MAAM,EAAEnE,IAAI,CAACmE,MAAL,GAAc;MACtBwZ,SAAS,EAAE3d,IAAI,CAAC2d;MAChBD,aAAa,EAAE1d,IAAI,CAAC0d;MACpB7B,eAAe,EAAE7b,IAAI,CAAC6b;MACtBjY,MAAM,EAAE5D,IAAI,CAAC4D;MACbuD,UAAU,EAAEA;MACZya,QAAQ,EAAE5hB,IAAI,CAACqb;MACfjX,WAAW,EAAE,qBAAA1B,CAAC;QACZsgB,gBAAgB,IAAIC,YAAY,CAAC,MAAD,EAASjjB,IAAT,EAAe0C,CAAf,EAAkB,QAAlB,CAAhC;;KAfJ,CAHF,EAqBEgB,mBAAA,IAAA;MAAGC,SAAS,EAAC;KAAb,EACGqf,gBAAgB,IACftf,mBAAA,IAAA,MAAA,EAEEA,mBAAA,CAACif,aAAD;MACE5N,CAAC,EAAEyO,iBAAiB,GAAG;MACvBxR,CAAC,EAAEhS,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc,CAAvB,GAA2B;MAC9BV,KAAK,EAAEzD,IAAI,CAAC8b;MACZ3X,MAAM,EAAEgf;MACRtH,eAAe,EAAE7b,IAAI,CAAC6b;MACtBzX,WAAW,EAAE,qBAAA1B,CAAC;QACZugB,YAAY,CAAC,OAAD,EAAUjjB,IAAV,EAAgB0C,CAAhB,EAAmB,QAAnB,CAAZ;;KAPJ,CAFF,EAaEgB,mBAAA,CAACif,aAAD;MACE5N,CAAC,EAAE0O,kBAAkB,GAAGzjB,IAAI,CAAC8b,WAA1B,GAAwC;MAC3C9J,CAAC,EAAEhS,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc,CAAvB,GAA2B;MAC9BV,KAAK,EAAEzD,IAAI,CAAC8b;MACZ3X,MAAM,EAAEgf;MACRtH,eAAe,EAAE7b,IAAI,CAAC6b;MACtBzX,WAAW,EAAE,qBAAA1B,CAAC;QACZugB,YAAY,CAAC,KAAD,EAAQjjB,IAAR,EAAc0C,CAAd,EAAiB,QAAjB,CAAZ;;KAPJ,CAbF,CAFJ,EA2BGqgB,oBAAoB,IACnBrf,mBAAA,CAACmf,iBAAD;MACEK,aAAa,EAAEA;MACf9e,WAAW,EAAE,qBAAA1B,CAAC;QACZugB,YAAY,CAAC,UAAD,EAAajjB,IAAb,EAAmB0C,CAAnB,EAAsB,QAAtB,CAAZ;;KAHJ,CA5BJ,CArBF,CADF;GADK,MA6DA;IACL,OAAOgB,mBAAA,IAAA;MAAGC,SAAS,EAAEC,QAAM,CAAC8f;MAAYC,QAAQ,EAAE;KAA3C,CAAP;;AAEH,CAnKM;;ACDA,IAAMG,QAAQ,GAA4B,SAApCA,QAAoC;MAC/C9jB,YAAAA;MACAuE,YAAAA;MACAwe,4BAAAA;MACAC,wBAAAA;MACAC,oBAAAA;MACA9b,kBAAAA;EAEA,IAAM+b,aAAa,GAAGvE,gBAAgB,CACpC3e,IAAI,CAAC0d,aAAL,GAAqB1d,IAAI,CAAC8K,EADU,EAEpC9K,IAAI,CAACgS,CAF+B,EAGpChS,IAAI,CAACmE,MAH+B,CAAtC;EAKA,OACET,mBAAA,IAAA;IAAGC,SAAS,EAAEC,QAAM,CAAC8f;IAAYC,QAAQ,EAAE;GAA3C,EACEjgB,mBAAA,CAACie,UAAD;IACE5M,CAAC,EAAE/U,IAAI,CAAC8K;IACRkH,CAAC,EAAEhS,IAAI,CAACgS;IACRzN,IAAI,EAAEA;IAGNqf,kBAAkB,EAAE5jB,IAAI,CAACmd;IACzB0G,gBAAgB,EAAE7jB,IAAI,CAACod;IACvB3Z,KAAK,EAAEzD,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8K;IACtB3G,MAAM,EAAEnE,IAAI,CAACmE;IACbwZ,SAAS,EAAE3d,IAAI,CAAC2d;IAChBD,aAAa,EAAE1d,IAAI,CAAC0d;IACpB7B,eAAe,EAAE7b,IAAI,CAAC6b;IACtBjY,MAAM,EAAE5D,IAAI,CAAC4D;IACbuD,UAAU,EAAEA;IACZ/C,WAAW,EAAE,qBAAA1B,CAAC;MACZsgB,gBAAgB,IAAIC,YAAY,CAAC,MAAD,EAASjjB,IAAT,EAAe0C,CAAf,CAAhC;;GAhBJ,CADF,EAoBEgB,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EACGof,oBAAoB,IACnBrf,mBAAA,CAACmf,iBAAD;IACEK,aAAa,EAAEA;IACf9e,WAAW,EAAE,qBAAA1B,CAAC;MACZugB,YAAY,CAAC,UAAD,EAAajjB,IAAb,EAAmB0C,CAAnB,CAAZ;;GAHJ,CAFJ,CApBF,CADF;AAiCD,CA9CM;;;;ACHA,IAAMqhB,SAAS,GAA4B,SAArCA,SAAqC;MAChD/jB,YAAAA;MACAgjB,wBAAAA;MACAC,oBAAAA;MACA9b,kBAAAA;EAEA,IAAMK,SAAS,mBAAgBxH,IAAI,CAAC8K,EAAL,GAAU9K,IAAI,CAACmE,MAAL,GAAc,KAAxC,iBACXnE,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc,IADZ,OAAf;;EAEA,IAAM2d,WAAW,GAAG,SAAdA,WAAc;IAClB,OAAO3a,UAAU,GACbnH,IAAI,CAAC4D,MAAL,CAAYsa,uBADC,GAEble,IAAI,CAAC4D,MAAL,CAAYqa,eAFhB;GADF;;EAMA,OACEva,mBAAA,IAAA;IAAGigB,QAAQ,EAAE;IAAGhgB,SAAS,EAAEC,QAAM,CAACogB;GAAlC,EACEtgB,mBAAA,OAAA;IACEsR,IAAI,EAAE8M,WAAW;IACjB/M,CAAC,EAAE/U,IAAI,CAAC8K;IACRrH,KAAK,EAAEzD,IAAI,CAACmE;IACZ6N,CAAC,EAAEhS,IAAI,CAACgS;IACR7N,MAAM,EAAEnE,IAAI,CAACmE;IACbge,EAAE,EAAEniB,IAAI,CAAC6b;IACTqG,EAAE,EAAEliB,IAAI,CAAC6b;IACTrU,SAAS,EAAEA;IACX7D,SAAS,EAAEC,QAAM,CAACqgB;IAClB7f,WAAW,EAAE,qBAAA1B,CAAC;MACZsgB,gBAAgB,IAAIC,YAAY,CAAC,MAAD,EAASjjB,IAAT,EAAe0C,CAAf,EAAiB,SAAjB,CAAhC;;IAEFwhB,aAAa,EAAE,uBAAAxhB,CAAC;MACdugB,YAAY,CAAC,UAAD,EAAajjB,IAAb,EAAmB0C,CAAnB,CAAZ;;GAdJ,CADF,CADF;AAqBD,CAnCM;;;;ACAA,IAAMyhB,OAAO,GAA4B,SAAnCA,OAAmC;MAAGnkB,YAAAA;MAAMmH,kBAAAA;EACvD,IAAMid,QAAQ,GAAGjd,UAAU,GACvBnH,IAAI,CAAC4D,MAAL,CAAYsa,uBADW,GAEvBle,IAAI,CAAC4D,MAAL,CAAYqa,eAFhB;EAGA,IAAMoG,YAAY,GAAGld,UAAU,GAC3BnH,IAAI,CAAC4D,MAAL,CAAYwa,qBADe,GAE3Bpe,IAAI,CAAC4D,MAAL,CAAYua,aAFhB;EAGA,IAAMmG,WAAW,GAAGtkB,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8K,EAAnC;EAEA,IAAMyZ,mBAAmB,GAAG,CAC1BvkB,IAAI,CAAC8K,EADqB,EAE1B9K,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc,CAAvB,GAA2B,CAFD,EAG1BnE,IAAI,CAAC8K,EAHqB,EAI1B9K,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAJY,EAK1BnE,IAAI,CAAC8K,EAAL,GAAU,EALgB,EAM1B9K,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc,CAAvB,GAA2B,CAND,EAO1B2a,IAP0B,CAOrB,GAPqB,CAA5B;EAQA,IAAM0F,oBAAoB,GAAG,CAC3BxkB,IAAI,CAAC+K,EADsB,EAE3B/K,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc,CAAvB,GAA2B,CAFA,EAG3BnE,IAAI,CAAC+K,EAHsB,EAI3B/K,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAJa,EAK3BnE,IAAI,CAAC+K,EAAL,GAAU,EALiB,EAM3B/K,IAAI,CAACgS,CAAL,GAAShS,IAAI,CAACmE,MAAL,GAAc,CAAvB,GAA2B,CANA,EAO3B2a,IAP2B,CAOtB,GAPsB,CAA7B;EASA,OACEpb,mBAAA,IAAA;IAAGigB,QAAQ,EAAE;IAAGhgB,SAAS,EAAEC,QAAM,CAAC6gB;GAAlC,EACE/gB,mBAAA,OAAA;IACEsR,IAAI,EAAEoP;IACNrP,CAAC,EAAE/U,IAAI,CAAC8K;IACRrH,KAAK,EAAE6gB;IACPtS,CAAC,EAAEhS,IAAI,CAACgS;IACR7N,MAAM,EAAEnE,IAAI,CAACmE;IACbge,EAAE,EAAEniB,IAAI,CAAC6b;IACTqG,EAAE,EAAEliB,IAAI,CAAC6b;IACTlY,SAAS,EAAEC,QAAM,CAAC8gB;GARpB,CADF,EAWEhhB,mBAAA,OAAA;IACEqR,CAAC,EAAE/U,IAAI,CAAC2d;IACRla,KAAK,EAAEzD,IAAI,CAAC0d;IACZ1L,CAAC,EAAEhS,IAAI,CAACgS;IACR7N,MAAM,EAAEnE,IAAI,CAACmE;IACb+d,EAAE,EAAEliB,IAAI,CAAC6b;IACTsG,EAAE,EAAEniB,IAAI,CAAC6b;IACT7G,IAAI,EAAEqP;GAPR,CAXF,EAoBE3gB,mBAAA,OAAA;IACEsR,IAAI,EAAEoP;IACNrP,CAAC,EAAE/U,IAAI,CAAC8K;IACRrH,KAAK,EAAE6gB;IACPtS,CAAC,EAAEhS,IAAI,CAACgS;IACR7N,MAAM,EAAEnE,IAAI,CAACmE,MAAL,GAAc;IACtBge,EAAE,EAAEniB,IAAI,CAAC6b;IACTqG,EAAE,EAAEliB,IAAI,CAAC6b;IACTlY,SAAS,EAAEC,QAAM,CAAC+gB;GARpB,CApBF,EA8BEjhB,mBAAA,UAAA;IACEC,SAAS,EAAEC,QAAM,CAAC+gB;IAClB7J,MAAM,EAAEyJ;IACRvP,IAAI,EAAEoP;GAHR,CA9BF,EAmCE1gB,mBAAA,UAAA;IACEC,SAAS,EAAEC,QAAM,CAAC+gB;IAClB7J,MAAM,EAAE0J;IACRxP,IAAI,EAAEoP;GAHR,CAnCF,CADF;AA2CD,CArEM;;ACuBA,IAAMQ,QAAQ,GAA4B,SAApCA,QAAoC,CAAA5N,KAAK;EACpD,0BASKA,KATL;MACEhX,IADF,UACEA,IADF;MAGE6kB,QAHF,UAGEA,QAHF;MAKE1d,UALF,UAKEA,UALF;MAOE8b,YAPF,UAOEA,YAPF;;EAYA,gBAAgChZ,QAAQ,CAAgB,CAACvG,mBAAA,MAAA,MAAA,CAAD,CAAhB,CAAxC;MAAOohB,QAAP;MAAiBC,WAAjB;;EAGAza,SAAS,CAAC;IACR,QAAQtK,IAAI,CAACwd,YAAb;MACE,KAAK,WAAL;QACE,IAAIxd,IAAI,CAAC8K,EAAL,IAAW,CAAX,IAAgB9K,IAAI,CAACmL,QAAL,IAAiB,CAArC,EACE4Z,WAAW,CAAC,CAACrhB,mBAAA,CAACqgB,SAAD,oBAAe/M,MAAf,CAAD,CAAD,CAAX,CADF,KAEK+N,WAAW,CAAC,EAAD,CAAX;QACL;;MACF,KAAK,SAAL;QACE,IACE,CAAA/kB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE8K,EAAN,KAAY,CAAZ,IACA,CAAA9K,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE+K,EAAN,KAAY,CADZ,IAEA/K,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8K,EAFf,IAGA,CAAA9K,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEmL,QAAN,KAAkB,CAHlB,IAIA,CAAAnL,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEiL,QAAN,KAAkB,CAJlB,IAKAjL,IAAI,CAACiL,QAAL,GAAgBjL,IAAI,CAACmL,QANvB,EAQE4Z,WAAW,CAAC,CAACrhB,mBAAA,CAACygB,OAAD,oBAAanN,MAAb,CAAD,CAAD,CAAX,CARF,KASK+N,WAAW,CAAC,EAAD,CAAX;QACL;;MACF,KAAK,WAAL;QACEA,WAAW,CAAC,CAACrhB,mBAAA,CAACogB,QAAD,oBAAc9M,MAAd,CAAD,CAAD,CAAX;QACA;;MACF;QACE;UACE,IAAI8N,SAAQ,GAAG,EAAf;;UACA,IAAI,CAAA9kB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE8K,EAAN,KAAY,CAAZ,IAAiB,CAAA9K,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAE+K,EAAN,KAAY,CAAjC,EAAoC;YAClC+Z,SAAQ,CAAChkB,IAAT,CAAc4C,mBAAA,CAACof,GAAD,oBAAS9L;cAAOzS,IAAI,EAAE;cAAtB,CAAd;;;UAEF,IAAI,CAAAvE,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEmL,QAAN,KAAkB,CAAlB,IAAuB,CAAAnL,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEiL,QAAN,KAAkB,CAA7C,EAAgD;YAC9C6Z,SAAQ,CAAChkB,IAAT,CAAc4C,mBAAA,CAACof,GAAD,oBAAS9L;cAAOzS,IAAI,EAAE;cAAtB,CAAd;;;UAEFwgB,WAAW,CAACD,SAAD,CAAX;;QAEF;;GAjCG,EAmCN,CAAC9kB,IAAD,EAAOmH,UAAP,CAnCM,CAAT;EA6DA,OACEzD,mBAAA,IAAA,MAAA,EACEA,mBAAA,IAAA;IACEshB,SAAS,EAAE,mBAAAtiB,CAAC;MACV,QAAQA,CAAC,CAAC1F,GAAV;QACE,KAAK,QAAL;UAAe;YACb,IAAI6nB,QAAJ,EAAc5B,YAAY,CAAC,QAAD,EAAWjjB,IAAX,EAAiB0C,CAAjB,EAAoB,SAApB,CAAZ;YACd;;;;MAGJA,CAAC,CAACE,eAAF;;IAEFqiB,YAAY,EAAE,sBAAAviB,CAAC;MACbugB,YAAY,CAAC,YAAD,EAAejjB,IAAf,EAAqB0C,CAArB,EAAwB,SAAxB,CAAZ;;IAEFwiB,YAAY,EAAE,sBAAAxiB,CAAC;MACbugB,YAAY,CAAC,YAAD,EAAejjB,IAAf,EAAqB0C,CAArB,EAAwB,SAAxB,CAAZ;;IAEFwhB,aAAa,EAAE,uBAAAxhB,CAAC;MACdugB,YAAY,CAAC,UAAD,EAAajjB,IAAb,EAAmB0C,CAAnB,EAAsB,SAAtB,CAAZ;;IAEF6F,OAAO,EAAE,iBAAA7F,CAAC;MACRugB,YAAY,CAAC,OAAD,EAAUjjB,IAAV,EAAgB0C,CAAhB,EAAmB,SAAnB,CAAZ;;GApBJ,EA0BGoiB,QAAQ,CAAC,CAAD,CA1BX,CADF,EA6BEphB,mBAAA,IAAA;IACEshB,SAAS,EAAE,mBAAAtiB,CAAC;MACV,QAAQA,CAAC,CAAC1F,GAAV;QACE,KAAK,QAAL;UAAe;YACb,IAAI6nB,QAAJ,EAAc5B,YAAY,CAAC,QAAD,EAAWjjB,IAAX,EAAiB0C,CAAjB,EAAoB,QAApB,CAAZ;YACd;;;;MAGJA,CAAC,CAACE,eAAF;;IAEFqiB,YAAY,EAAE,sBAAAviB,CAAC;MACbugB,YAAY,CAAC,YAAD,EAAejjB,IAAf,EAAqB0C,CAArB,EAAwB,QAAxB,CAAZ;;IAEFwiB,YAAY,EAAE,sBAAAxiB,CAAC;MACbugB,YAAY,CAAC,YAAD,EAAejjB,IAAf,EAAqB0C,CAArB,EAAwB,QAAxB,CAAZ;;IAEFwhB,aAAa,EAAE,uBAAAxhB,CAAC;MACdugB,YAAY,CAAC,UAAD,EAAajjB,IAAb,EAAmB0C,CAAnB,EAAsB,QAAtB,CAAZ;;IAEF6F,OAAO,EAAE,iBAAA7F,CAAC;MACRugB,YAAY,CAAC,OAAD,EAAUjjB,IAAV,EAAgB0C,CAAhB,EAAmB,QAAnB,CAAZ;;GApBJ,EA0BGoiB,QAAQ,CAAC,CAAD,CA1BX,CA7BF,CADF;AA4DD,CAzIM;;ACiBA,IAAMK,gBAAgB,GAAoC,SAApDA,gBAAoD;;;MAC/D3lB,aAAAA;MACAqB,aAAAA;MACAukB,kBAAAA;MACAnY,oBAAAA;MACA9H,iBAAAA;MACA6O,mBAAAA;MACA8L,gBAAAA;MACAuF,WAAAA;MACA/K,kBAAAA;MACA3Q,mBAAAA;MACA/H,kBAAAA;MACAC,gBAAAA;MACAyH,WAAAA;+BACA3D;MAAAA,8CAAe;MACf2f,qBAAAA;MACAC,qBAAAA;MACArY,uBAAAA;MACAsY,wBAAAA;MACAC,oBAAAA;MACAC,wBAAAA;MACAxB,qBAAAA;MACA3b,eAAAA;MACAod,gBAAAA;MACAC,uBAAAA;MACAvR,uBAAAA;MACAF,qBAAAA;MACAC,mBAAAA;MACAyR,kBAAAA;EAEA,IAAMhH,KAAK,GAAGwG,GAAH,aAAGA,GAAH,uCAAGA,GAAG,CAAE9a,OAAR,iDAAG,aAAcub,cAAd,EAAd;;EACA,gBAA0B7b,QAAQ,CAAC,CAAD,CAAlC;MAAO+U,KAAP;MAAc+G,QAAd;;EACA,iBAAgD9b,QAAQ,CAAC,CAAD,CAAxD;MAAOkW,gBAAP;MAAyB6F,mBAAzB;;EACA,iBAAgC/b,QAAQ,CAAC,KAAD,CAAxC;MAAOgc,QAAP;MAAiBC,WAAjB;;EAGA5b,SAAS,CAAC;IACR,IAAIzJ,KAAK,CAAC6N,MAAN,GAAe,CAAnB,EAAsB;MAIpBqX,QAAQ,CAAEjG,QAAQ,GAAG9L,WAAZ,GAA2B,QAA5B,CAAR;MACA;;;IAEF,IAAMmS,SAAS,GACbtlB,KAAK,CAAC,CAAD,CAAL,CAAShB,OAAT,KACAgB,KAAK,CAAC,CAAD,CAAL,CAAShB,OAAT,EADA,GAEAgB,KAAK,CAAC,CAAD,CAAL,CAASkf,iBAAT,KAA+B,EAA/B,GAAoC,IAFpC,GAGAlf,KAAK,CAAC,CAAD,CAAL,CAASkf,iBAAT,KAA+B,EAA/B,GAAoC,IAJtC;IAKA,IAAMqG,QAAQ,GAAItG,QAAQ,GAAG9L,WAAZ,GAA2BmS,SAA5C;IACAJ,QAAQ,CAACK,QAAD,CAAR;GAdO,EAeN,CAACpS,WAAD,EAAcnT,KAAd,EAAqBif,QAArB,CAfM,CAAT;EAiBAxV,SAAS,CAAC;IACR,IAAM+b,eAAe,YAAfA,eAAe,CAAU1F,KAAV;MAAA;;;QACnB,IAAI,CAACyE,UAAU,CAAC9E,WAAZ,IAA2B,CAACzB,KAA5B,IAAqC,EAACwG,GAAD,aAACA,GAAD,eAACA,GAAG,CAAE9a,OAAN,CAAzC,EAAwD;QACxDoW,KAAK,CAAChe,cAAN;QAEAkc,KAAK,CAAC9J,CAAN,GAAU4L,KAAK,CAAC7d,OAAhB;QACA,IAAMgQ,MAAM,GAAG+L,KAAK,CAACyH,eAAN,CACbjB,GADa,aACbA,GADa,gDACbA,GAAG,CAAE9a,OAAL,CAAagc,YAAb,EADa,0DACb,sBAA6BC,OAA7B,EADa,CAAf;;QAGA,4BAAmCxG,yBAAyB,CAC1DlN,MAAM,CAACiC,CADmD,EAE1DqQ,UAAU,CAAClF,MAF+C,EAG1DkF,UAAU,CAAC9E,WAH+C,EAI1D8E,UAAU,CAAC7gB,IAJ+C,EAK1Dya,KAL0D,EAM1Dc,QAN0D,EAO1DK,gBAP0D,EAQ1D7W,GAR0D,CAA5D;YAAQiX,SAAR,yBAAQA,SAAR;YAAmBD,WAAnB,yBAAmBA,WAAnB;;QAUA,IAAIC,SAAJ,EAAe;UACb,IAAIkG,SAAS,gBAAQnG,WAAR,CAAb;;UACA,IAAMoG,QAAQ,GAAGtB,UAAU,CAAC7gB,IAA5B;;UACA,IACE+b,WAAW,CAACxJ,QAAZ,KACCsO,UAAU,CAAClF,MAAX,KAAsB,KAAtB,IACCkF,UAAU,CAAClF,MAAX,KAAsB,OADvB,IAECkF,UAAU,CAAClF,MAAX,KAAsB,MAHxB,CADF,EAKE;YACA,IAAM7N,GAAG,GAAGoU,SAAS,CAAC3P,QAAtB;;YACA,IAAI4P,QAAQ,KAAK,QAAjB,EAA2B;cAEzB,IAAItB,UAAU,CAAClF,MAAX,KAAsB,KAA1B,EAAiC;gBAC/B,IAAMyG,OAAO,GAAGtT,iBAAiB,CAACoT,SAAS,CAACvmB,SAAX,EAAsBmS,GAAtB,EAA2B,SAA3B,CAAjC;gBACAoU,SAAS,CAACvmB,SAAV,GAAsBymB,OAAtB;gBACAF,SAAS,CAACxb,QAAV,GAAqBqS,eAAe,CAACqJ,OAAD,EAAU9lB,KAAV,EAAiBmT,WAAjB,CAApC;eAHF,MAIO,IAAIoR,UAAU,CAAClF,MAAX,KAAsB,OAA1B,EAAmC;gBACxC,IAAMyG,QAAO,GAAGtT,iBAAiB,CAACoT,SAAS,CAACxmB,WAAX,EAAwBoS,GAAxB,EAA6B,SAA7B,CAAjC;;gBACAoU,SAAS,CAACxmB,WAAV,GAAwB0mB,QAAxB;gBACAF,SAAS,CAACtb,QAAV,GAAqBmS,eAAe,CAACqJ,QAAD,EAAU9lB,KAAV,EAAiBmT,WAAjB,CAApC;eAHK,MAIA;gBACL,IAAM2S,SAAO,GAAGtT,iBAAiB,CAACoT,SAAS,CAACxmB,WAAX,EAAwBoS,GAAxB,EAA6B,SAA7B,CAAjC;;gBACA,IAAMuU,KAAK,GAAGD,SAAO,CAAC9mB,OAAR,KAAoB4mB,SAAS,CAACxmB,WAAV,CAAsBJ,OAAtB,EAAlC;gBACA4mB,SAAS,CAACxmB,WAAV,GAAwB0mB,SAAxB;gBACAF,SAAS,CAACvmB,SAAV,GAAsB,IAAIvC,IAAJ,CAAS8oB,SAAS,CAACvmB,SAAV,CAAoBL,OAApB,KAAgC+mB,KAAzC,CAAtB;gBACAH,SAAS,CAACtb,QAAV,GAAqBmS,eAAe,CAACmJ,SAAS,CAACxmB,WAAX,EAAwBY,KAAxB,EAA+BmT,WAA/B,CAApC;gBACAyS,SAAS,CAACxb,QAAV,GAAqBqS,eAAe,CAACmJ,SAAS,CAACvmB,SAAX,EAAsBW,KAAtB,EAA6BmT,WAA7B,CAApC;;;cAGF,IAAMgK,MAAM,GAAG1gB,SAAS,CAACa,WAAW,CAACsoB,SAAS,CAACvmB,SAAX,EAAsB,KAAtB,CAAZ,EAA0C,CAA1C,EAA6C,KAA7C,CAAxB;cACA,IAAM2mB,YAAY,GAAGjU,mBAAmB,CAAC6T,SAAS,CAACxmB,WAAX,EAAwB+d,MAAxB,EAAgC3L,GAAhC,CAAxC;cACA,IAAMyU,OAAO,GAAGD,YAAY,CACzB9gB,GADa,CACT,UAAAgY,EAAE;gBAAA,OAAK;kBAAEjT,EAAE,EAAEwS,eAAe,CAACS,EAAE,CAACne,KAAJ,EAAWiB,KAAX,EAAkBmT,WAAlB,CAArB;kBAAqDjJ,EAAE,EAAEuS,eAAe,CAACS,EAAE,CAAChe,GAAJ,EAASc,KAAT,EAAgBmT,WAAhB;iBAA7E;eADO,EAEblE,MAFa,CAEN,UAAA6C,CAAC;gBAAA,OAAIA,CAAC,CAAC5H,EAAF,GAAO4H,CAAC,CAAC7H,EAAb;eAFK,CAAhB;cAGA2b,SAAS,CAACpL,cAAV,GAA2ByL,OAAO,CAACpY,MAAR,GAAiB,CAAjB,GAAqBoY,OAArB,GAA+B5V,SAA1D;cAEA,IAAM6V,OAAO,GAAGjoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACyd,SAAS,CAACvmB,SAAV,CAAoBL,OAApB,KAAgC4mB,SAAS,CAACxmB,WAAV,CAAsBJ,OAAtB,EAAjC,KAAqE,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAAtF,CAAX,CAAZ,CAAhB;cACA4mB,SAAS,CAACxd,cAAV,GAA2B8d,OAA3B;aA3BF,MA4BO;cAEL,IAAI3B,UAAU,CAAClF,MAAX,KAAsB,KAA1B,EAAiC;gBAC/B,IAAMyG,SAAO,GAAGtT,iBAAiB,CAACoT,SAAS,CAAC1mB,GAAX,EAAgBsS,GAAhB,EAAqB,SAArB,CAAjC;;gBACAoU,SAAS,CAAC1mB,GAAV,GAAgB4mB,SAAhB;gBACAF,SAAS,CAAC1b,EAAV,GAAeuS,eAAe,CAACqJ,SAAD,EAAU9lB,KAAV,EAAiBmT,WAAjB,CAA9B;eAHF,MAIO,IAAIoR,UAAU,CAAClF,MAAX,KAAsB,OAA1B,EAAmC;gBACxC,IAAMyG,SAAO,GAAGtT,iBAAiB,CAACoT,SAAS,CAAC7mB,KAAX,EAAkByS,GAAlB,EAAuB,SAAvB,CAAjC;;gBACAoU,SAAS,CAAC7mB,KAAV,GAAkB+mB,SAAlB;gBACAF,SAAS,CAAC3b,EAAV,GAAewS,eAAe,CAACqJ,SAAD,EAAU9lB,KAAV,EAAiBmT,WAAjB,CAA9B;eAHK,MAIA;gBACL,IAAM2S,SAAO,GAAGtT,iBAAiB,CAACoT,SAAS,CAAC7mB,KAAX,EAAkByS,GAAlB,EAAuB,SAAvB,CAAjC;;gBACA,IAAMuU,MAAK,GAAGD,SAAO,CAAC9mB,OAAR,KAAoB4mB,SAAS,CAAC7mB,KAAV,CAAgBC,OAAhB,EAAlC;;gBACA4mB,SAAS,CAAC7mB,KAAV,GAAkB+mB,SAAlB;gBACAF,SAAS,CAAC1mB,GAAV,GAAgB,IAAIpC,IAAJ,CAAS8oB,SAAS,CAAC1mB,GAAV,CAAcF,OAAd,KAA0B+mB,MAAnC,CAAhB;gBACAH,SAAS,CAAC3b,EAAV,GAAewS,eAAe,CAACmJ,SAAS,CAAC7mB,KAAX,EAAkBiB,KAAlB,EAAyBmT,WAAzB,CAA9B;gBACAyS,SAAS,CAAC1b,EAAV,GAAeuS,eAAe,CAACmJ,SAAS,CAAC1mB,GAAX,EAAgBc,KAAhB,EAAuBmT,WAAvB,CAA9B;;;cAGF,IAAM6J,OAAO,GAAGvgB,SAAS,CAACa,WAAW,CAACsoB,SAAS,CAAC1mB,GAAX,EAAgB,KAAhB,CAAZ,EAAoC,CAApC,EAAuC,KAAvC,CAAzB;cACA,IAAMinB,aAAa,GAAGpU,mBAAmB,CAAC6T,SAAS,CAAC7mB,KAAX,EAAkBie,OAAlB,EAA2BxL,GAA3B,CAAzC;cACA,IAAM4U,QAAQ,GAAGD,aAAa,CAC3BjhB,GADc,CACV,UAAAgY,EAAE;gBAAA,OAAK;kBAAEjT,EAAE,EAAEwS,eAAe,CAACS,EAAE,CAACne,KAAJ,EAAWiB,KAAX,EAAkBmT,WAAlB,CAArB;kBAAqDjJ,EAAE,EAAEuS,eAAe,CAACS,EAAE,CAAChe,GAAJ,EAASc,KAAT,EAAgBmT,WAAhB;iBAA7E;eADQ,EAEdlE,MAFc,CAEP,UAAA6C,CAAC;gBAAA,OAAIA,CAAC,CAAC5H,EAAF,GAAO4H,CAAC,CAAC7H,EAAb;eAFM,CAAjB;cAGA2b,SAAS,CAACtL,eAAV,GAA4B8L,QAAQ,CAACvY,MAAT,GAAkB,CAAlB,GAAsBuY,QAAtB,GAAiC/V,SAA7D;cAEA,IAAMgW,QAAQ,GAAGpoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACyd,SAAS,CAAC1mB,GAAV,CAAcF,OAAd,KAA0B4mB,SAAS,CAAC7mB,KAAV,CAAgBC,OAAhB,EAA3B,KAAyD,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAA1E,CAAX,CAAZ,CAAjB;cACA4mB,SAAS,CAAC3d,eAAV,GAA4Boe,QAA5B;;WA9DJ,MAgEO;YAEL,IAAIR,QAAQ,KAAK,QAAjB,EAA2B;cACzB,IAAMK,QAAO,GAAGjoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACyd,SAAS,CAACvmB,SAAV,CAAoBL,OAApB,KAAgC4mB,SAAS,CAACxmB,WAAV,CAAsBJ,OAAtB,EAAjC,KAAqE,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAAtF,CAAX,CAAZ,CAAhB;;cACA4mB,SAAS,CAACxd,cAAV,GAA2B8d,QAA3B;aAFF,MAGO;cACL,IAAMG,SAAQ,GAAGpoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACyd,SAAS,CAAC1mB,GAAV,CAAcF,OAAd,KAA0B4mB,SAAS,CAAC7mB,KAAV,CAAgBC,OAAhB,EAA3B,KAAyD,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAA1E,CAAX,CAAZ,CAAjB;;cACA4mB,SAAS,CAAC3d,eAAV,GAA4Boe,SAA5B;;;;UAGJ5B,aAAa,CAAC;YAAEpF,MAAM,EAAEkF,UAAU,CAAClF,MAArB;YAA6BI,WAAW,EAAEmG,SAA1C;YAAqDliB,IAAI,EAAEmiB;WAA5D,CAAb;;;;OA/FiB;QAAA;;KAArB;;IAmGA,IAAMS,aAAa,YAAbA,aAAa,CAAUxG,KAAV;MAAA;;;;cAmKb,CAACyG;YACH7B,aAAa,CAAC8B,oBAAD,CAAb;;;;QAnKF,IAAQnH,MAAR,GAA4DkF,UAA5D,CAAQlF,MAAR;YAAgBmH,oBAAhB,GAA4DjC,UAA5D,CAAgBiC,oBAAhB;YAAsC/G,WAAtC,GAA4D8E,UAA5D,CAAsC9E,WAAtC;YAAmD/b,IAAnD,GAA4D6gB,UAA5D,CAAmD7gB,IAAnD;QACA,IAAI,CAAC+b,WAAD,IAAgB,CAACzB,KAAjB,IAA0B,EAACwG,GAAD,aAACA,GAAD,eAACA,GAAG,CAAE9a,OAAN,CAA1B,IAA2C,CAAC8c,oBAAhD,EACE;QACF1G,KAAK,CAAChe,cAAN;QAEAkc,KAAK,CAAC9J,CAAN,GAAU4L,KAAK,CAAC7d,OAAhB;QACA,IAAMgQ,MAAM,GAAG+L,KAAK,CAACyH,eAAN,CACbjB,GADa,aACbA,GADa,iDACbA,GAAG,CAAE9a,OAAL,CAAagc,YAAb,EADa,2DACb,uBAA6BC,OAA7B,EADa,CAAf;;QAGA,6BAAwCxG,yBAAyB,CAC/DlN,MAAM,CAACiC,CADwD,EAE/DmL,MAF+D,EAG/DI,WAH+D,EAI/D/b,IAJ+D,EAK/Dya,KAL+D,EAM/Dc,QAN+D,EAO/DK,gBAP+D,EAQ/D7W,GAR+D,CAAjE;YAAqBge,cAArB,0BAAQhH,WAAR;;QAWA,IAAMiH,iBAAiB,GACrBF,oBAAoB,CAACznB,KAArB,KAA+B0nB,cAAc,CAAC1nB,KAA9C,IACAynB,oBAAoB,CAACtnB,GAArB,KAA6BunB,cAAc,CAACvnB,GAD5C,IAEAsnB,oBAAoB,CAACpnB,WAArB,KAAqCqnB,cAAc,CAACrnB,WAFpD,IAGAonB,oBAAoB,CAACnnB,SAArB,KAAmConB,cAAc,CAACpnB,SAHlD,IAIAmnB,oBAAoB,CAACxe,QAArB,KAAkCye,cAAc,CAACze,QALnD;QAQA,IAAM2e,QAAQ,GAAGjjB,IAAjB;;QACA,IACE+iB,cAAc,CAACxQ,QAAf,KACCoJ,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,KAAhC,IAAyCA,MAAM,KAAK,OADrD,CADF,EAGE;UACA,IAAM7N,GAAG,GAAGiV,cAAc,CAACxQ,QAA3B;;UACA,IAAI0Q,QAAQ,KAAK,QAAjB,EAA2B;YAEzB,IAAItH,MAAM,KAAK,KAAf,EAAsB;cACpB,IAAMuH,UAAU,GAAGpU,iBAAiB,CAACiU,cAAc,CAACpnB,SAAhB,EAA2BmS,GAA3B,EAAgC,SAAhC,CAApC;cACAiV,cAAc,CAACpnB,SAAf,GAA2BunB,UAA3B;cACAH,cAAc,CAACrc,QAAf,GAA0BqS,eAAe,CAACmK,UAAD,EAAa5mB,KAAb,EAAoBmT,WAApB,CAAzC;aAHF,MAIO,IAAIkM,MAAM,KAAK,OAAf,EAAwB;cAC7B,IAAMwH,YAAY,GAAGrU,iBAAiB,CAACiU,cAAc,CAACrnB,WAAhB,EAA6BoS,GAA7B,EAAkC,SAAlC,CAAtC;;cACA,IAAIqV,YAAY,IAAIJ,cAAc,CAACpnB,SAAnC,EAA8C;gBAC5CqlB,aAAa,CAAC8B,oBAAD,CAAb;gBACAzB,eAAe,SAAf,IAAAA,eAAe,WAAf,YAAAA,eAAe,CAAG0B,cAAH,EAAmB,mCAAnB,CAAf;gBACAhC,aAAa,CAAC;kBAAEpF,MAAM,EAAE;iBAAX,CAAb;gBACAgG,WAAW,CAAC,KAAD,CAAX;gBACAb,GAAG,CAAC9a,OAAJ,CAAYpH,mBAAZ,CAAgC,WAAhC,EAA6CkjB,eAA7C;gBACAhB,GAAG,CAAC9a,OAAJ,CAAYpH,mBAAZ,CAAgC,SAAhC,EAA2CgkB,aAA3C;gBACA;;;cAEFG,cAAc,CAACrnB,WAAf,GAA6BynB,YAA7B;cACAJ,cAAc,CAACnc,QAAf,GAA0BmS,eAAe,CAACoK,YAAD,EAAe7mB,KAAf,EAAsBmT,WAAtB,CAAzC;aAZK,MAaA;cACL,IAAM0T,aAAY,GAAGrU,iBAAiB,CAACiU,cAAc,CAACrnB,WAAhB,EAA6BoS,GAA7B,EAAkC,SAAlC,CAAtC;;cACA,IAAMuU,KAAK,GAAGc,aAAY,CAAC7nB,OAAb,KAAyBynB,cAAc,CAACrnB,WAAf,CAA2BJ,OAA3B,EAAvC;cACAynB,cAAc,CAACrnB,WAAf,GAA6BynB,aAA7B;cACAJ,cAAc,CAACpnB,SAAf,GAA2B,IAAIvC,IAAJ,CAAS2pB,cAAc,CAACpnB,SAAf,CAAyBL,OAAzB,KAAqC+mB,KAA9C,CAA3B;cACAU,cAAc,CAACnc,QAAf,GAA0BmS,eAAe,CAACoK,aAAD,EAAe7mB,KAAf,EAAsBmT,WAAtB,CAAzC;cACAsT,cAAc,CAACrc,QAAf,GAA0BqS,eAAe,CAACgK,cAAc,CAACpnB,SAAhB,EAA2BW,KAA3B,EAAkCmT,WAAlC,CAAzC;;;YAEF,IAAMgK,MAAM,GAAG1gB,SAAS,CAACa,WAAW,CAACmpB,cAAc,CAACpnB,SAAhB,EAA2B,KAA3B,CAAZ,EAA+C,CAA/C,EAAkD,KAAlD,CAAxB;YACA,IAAM2mB,YAAY,GAAGjU,mBAAmB,CAAC0U,cAAc,CAACrnB,WAAhB,EAA6B+d,MAA7B,EAAqC3L,GAArC,CAAxC;YACA,IAAMyU,OAAO,GAAGD,YAAY,CACzB9gB,GADa,CACT,UAAAgY,EAAE;cAAA,OAAK;gBAAEjT,EAAE,EAAEwS,eAAe,CAACS,EAAE,CAACne,KAAJ,EAAWiB,KAAX,EAAkBmT,WAAlB,CAArB;gBAAqDjJ,EAAE,EAAEuS,eAAe,CAACS,EAAE,CAAChe,GAAJ,EAASc,KAAT,EAAgBmT,WAAhB;eAA7E;aADO,EAEblE,MAFa,CAEN,UAAA6C,CAAC;cAAA,OAAIA,CAAC,CAAC5H,EAAF,GAAO4H,CAAC,CAAC7H,EAAb;aAFK,CAAhB;YAGAwc,cAAc,CAACjM,cAAf,GAAgCyL,OAAO,CAACpY,MAAR,GAAiB,CAAjB,GAAqBoY,OAArB,GAA+B5V,SAA/D;YAEA,IAAM6V,OAAO,GAAGjoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACse,cAAc,CAACpnB,SAAf,CAAyBL,OAAzB,KAAqCynB,cAAc,CAACrnB,WAAf,CAA2BJ,OAA3B,EAAtC,KAA+E,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAAhG,CAAX,CAAZ,CAAhB;YACAynB,cAAc,CAACre,cAAf,GAAgC8d,OAAhC;WAnCF,MAoCO;YAEL,IAAI7G,MAAM,KAAK,KAAf,EAAsB;cACpB,IAAMuH,WAAU,GAAGpU,iBAAiB,CAACiU,cAAc,CAACvnB,GAAhB,EAAqBsS,GAArB,EAA0B,SAA1B,CAApC;;cACAiV,cAAc,CAACvnB,GAAf,GAAqB0nB,WAArB;cACAH,cAAc,CAACvc,EAAf,GAAoBuS,eAAe,CAACmK,WAAD,EAAa5mB,KAAb,EAAoBmT,WAApB,CAAnC;aAHF,MAIO,IAAIkM,MAAM,KAAK,OAAf,EAAwB;cAC7B,IAAMwH,cAAY,GAAGrU,iBAAiB,CAACiU,cAAc,CAAC1nB,KAAhB,EAAuByS,GAAvB,EAA4B,SAA5B,CAAtC;;cACA,IAAIqV,cAAY,IAAIJ,cAAc,CAACvnB,GAAnC,EAAwC;gBACtCwlB,aAAa,CAAC8B,oBAAD,CAAb;gBACAzB,eAAe,SAAf,IAAAA,eAAe,WAAf,YAAAA,eAAe,CAAG0B,cAAH,EAAmB,mCAAnB,CAAf;gBACAhC,aAAa,CAAC;kBAAEpF,MAAM,EAAE;iBAAX,CAAb;gBACAgG,WAAW,CAAC,KAAD,CAAX;gBACAb,GAAG,CAAC9a,OAAJ,CAAYpH,mBAAZ,CAAgC,WAAhC,EAA6CkjB,eAA7C;gBACAhB,GAAG,CAAC9a,OAAJ,CAAYpH,mBAAZ,CAAgC,SAAhC,EAA2CgkB,aAA3C;gBACA;;;cAEFG,cAAc,CAAC1nB,KAAf,GAAuB8nB,cAAvB;cACAJ,cAAc,CAACxc,EAAf,GAAoBwS,eAAe,CAACoK,cAAD,EAAe7mB,KAAf,EAAsBmT,WAAtB,CAAnC;aAZK,MAaA;cACL,IAAM0T,cAAY,GAAGrU,iBAAiB,CAACiU,cAAc,CAAC1nB,KAAhB,EAAuByS,GAAvB,EAA4B,SAA5B,CAAtC;;cACA,IAAMuU,OAAK,GAAGc,cAAY,CAAC7nB,OAAb,KAAyBynB,cAAc,CAAC1nB,KAAf,CAAqBC,OAArB,EAAvC;;cACAynB,cAAc,CAAC1nB,KAAf,GAAuB8nB,cAAvB;cACAJ,cAAc,CAACvnB,GAAf,GAAqB,IAAIpC,IAAJ,CAAS2pB,cAAc,CAACvnB,GAAf,CAAmBF,OAAnB,KAA+B+mB,OAAxC,CAArB;cACAU,cAAc,CAACxc,EAAf,GAAoBwS,eAAe,CAACoK,cAAD,EAAe7mB,KAAf,EAAsBmT,WAAtB,CAAnC;cACAsT,cAAc,CAACvc,EAAf,GAAoBuS,eAAe,CAACgK,cAAc,CAACvnB,GAAhB,EAAqBc,KAArB,EAA4BmT,WAA5B,CAAnC;;;YAEF,IAAM6J,OAAO,GAAGvgB,SAAS,CAACa,WAAW,CAACmpB,cAAc,CAACvnB,GAAhB,EAAqB,KAArB,CAAZ,EAAyC,CAAzC,EAA4C,KAA5C,CAAzB;YACA,IAAMinB,aAAa,GAAGpU,mBAAmB,CAAC0U,cAAc,CAAC1nB,KAAhB,EAAuBie,OAAvB,EAAgCxL,GAAhC,CAAzC;YACA,IAAM4U,QAAQ,GAAGD,aAAa,CAC3BjhB,GADc,CACV,UAAAgY,EAAE;cAAA,OAAK;gBAAEjT,EAAE,EAAEwS,eAAe,CAACS,EAAE,CAACne,KAAJ,EAAWiB,KAAX,EAAkBmT,WAAlB,CAArB;gBAAqDjJ,EAAE,EAAEuS,eAAe,CAACS,EAAE,CAAChe,GAAJ,EAASc,KAAT,EAAgBmT,WAAhB;eAA7E;aADQ,EAEdlE,MAFc,CAEP,UAAA6C,CAAC;cAAA,OAAIA,CAAC,CAAC5H,EAAF,GAAO4H,CAAC,CAAC7H,EAAb;aAFM,CAAjB;YAGAwc,cAAc,CAACnM,eAAf,GAAiC8L,QAAQ,CAACvY,MAAT,GAAkB,CAAlB,GAAsBuY,QAAtB,GAAiC/V,SAAlE;YAEA,IAAMgW,QAAQ,GAAGpoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACse,cAAc,CAACvnB,GAAf,CAAmBF,OAAnB,KAA+BynB,cAAc,CAAC1nB,KAAf,CAAqBC,OAArB,EAAhC,KAAmE,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAApF,CAAX,CAAZ,CAAjB;YACAynB,cAAc,CAACxe,eAAf,GAAiCoe,QAAjC;;SA5EJ,MA8EO,IAAIhH,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,KAAhC,IAAyCA,MAAM,KAAK,OAAxD,EAAiE;UAEtE,IAAIsH,QAAQ,KAAK,QAAjB,EAA2B;YACzB,IAAMT,SAAO,GAAGjoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACse,cAAc,CAACpnB,SAAf,CAAyBL,OAAzB,KAAqCynB,cAAc,CAACrnB,WAAf,CAA2BJ,OAA3B,EAAtC,KAA+E,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAAhG,CAAX,CAAZ,CAAhB;;YACAynB,cAAc,CAACre,cAAf,GAAgC8d,SAAhC;WAFF,MAGO;YACL,IAAMG,UAAQ,GAAGpoB,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY5M,IAAI,CAACkK,KAAL,CAAW,CAACse,cAAc,CAACvnB,GAAf,CAAmBF,OAAnB,KAA+BynB,cAAc,CAAC1nB,KAAf,CAAqBC,OAArB,EAAhC,KAAmE,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAApF,CAAX,CAAZ,CAAjB;;YACAynB,cAAc,CAACxe,eAAf,GAAiCoe,UAAjC;;;;QAKJ7B,GAAG,CAAC9a,OAAJ,CAAYpH,mBAAZ,CAAgC,WAAhC,EAA6CkjB,eAA7C;QACAhB,GAAG,CAAC9a,OAAJ,CAAYpH,mBAAZ,CAAgC,SAAhC,EAA2CgkB,aAA3C;;QAGA,IAAI3B,gBAAgB,IAAI+B,iBAAxB,EAA2C;UACzC/B,gBAAgB,CAAC8B,cAAD,CAAhB;;;QAEFhC,aAAa,CAAC;UAAEpF,MAAM,EAAE;SAAX,CAAb;QACAgG,WAAW,CAAC,KAAD,CAAX;QAGA,IAAIkB,gBAAgB,GAAG,IAAvB;;;cAEE,CAAClH,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,KAAhC,IAAyCA,MAAM,KAAK,OAArD,KACAuF,YADA,IAEA8B;4CAEI;cAAA,uBACmB9B,YAAY,CAC/B6B,cAD+B,EAE/BA,cAAc,CAACvK,WAFgB,CAD/B,iBACIvJ,MADJ;gBAAA,IAKEA,MAAM,KAAKtC,SALb;kBAMAkW,gBAAgB,GAAG5T,MAAnB;;;2BAEY;cACd4T,gBAAgB,GAAG,KAAnB;;;;;;kBAEO1B,gBAAgB,IAAI6B;iDACzB;kBAAA,uBACmB7B,gBAAgB,CACnC4B,cADmC,EAEnCA,cAAc,CAACvK,WAFoB,CADnC,iBACIvJ,MADJ;oBAAA,IAKEA,MAAM,KAAKtC,SALb;sBAMAkW,gBAAgB,GAAG5T,MAAnB;;;+BAEY;kBACd4T,gBAAgB,GAAG,KAAnB;;;;;;;;;;;;OA9Ja;QAAA;;KAAnB;;IAwKA,IACE,CAACnB,QAAD,KACCb,UAAU,CAAClF,MAAX,KAAsB,MAAtB,IACCkF,UAAU,CAAClF,MAAX,KAAsB,KADvB,IAECkF,UAAU,CAAClF,MAAX,KAAsB,OAFvB,IAGCkF,UAAU,CAAClF,MAAX,KAAsB,UAJxB,KAKAmF,GALA,aAKAA,GALA,eAKAA,GAAG,CAAE9a,OANP,EAOE;MACA8a,GAAG,CAAC9a,OAAJ,CAAYnH,gBAAZ,CAA6B,WAA7B,EAA0CijB,eAA1C;MACAhB,GAAG,CAAC9a,OAAJ,CAAYnH,gBAAZ,CAA6B,SAA7B,EAAwC+jB,aAAxC;MACAjB,WAAW,CAAC,IAAD,CAAX;;GAtRK,EAwRN,CACDd,UADC,EAEDpG,KAFC,EAGDmB,gBAHC,EAIDuF,gBAJC,EAKD5F,QALC,EAMD2F,YANC,EAODG,eAPC,EAQDvR,eARC,EASDgR,GATC,EAUDY,QAVC,EAWDpH,KAXC,EAYDvV,GAZC,EAaDic,aAbC,EAcDD,aAdC,EAeDE,gBAfC,EAgBD3kB,KAhBC,EAiBDmT,WAjBC,CAxRM,CAAT;;EAgTA,IAAM2T,mBAAmB,YAAnBA,mBAAmB,CACvBzH,MADuB,EAEvBlgB,IAFuB,EAGvB2gB,KAHuB,EAIvBpc,IAJuB;IAAA;;YAMnB,CAACoc;cACCT,MAAM,KAAK;YACbhT,eAAe,CAAClN,IAAI,CAACgG,EAAN,CAAf;;;cAIK0a,eAAe,CAACC,KAAD;;kBAClBT,MAAM,KAAK;;sBACTyF;qDACE;sBAAA,uBACmBA,QAAQ,CAAC3lB,IAAD,CAD3B,iBACIwT,MADJ;wBAAA,IAEEA,MAAM,KAAKtC,SAAX,IAAwBsC,MAF1B;0BAGA8R,aAAa,CAAC;4BAAEpF,MAAM,EAANA,MAAF;4BAAUI,WAAW,EAAEtgB;2BAAxB,CAAb;;;iCAEK4nB,OAAO;sBACdC,OAAO,CAACD,KAAR,CAAc,sBAAsBA,KAApC;;;;;;;;;;;;iBAMH,IAAI1H,MAAM,KAAK,YAAf,EAA6B;YAChC,IAAI,CAACkF,UAAU,CAAClF,MAAhB,EAAwB;cACtBoF,aAAa,CAAC;gBACZpF,MAAM,EAANA,MADY;gBAEZI,WAAW,EAAEtgB,IAFD;gBAGZqnB,oBAAoB,EAAErnB,IAHV;gBAIZuE,IAAI,EAAEA;eAJK,CAAb;;WAFC,MASE,IAAI2b,MAAM,KAAK,YAAf,EAA6B;YAClC,IAAIkF,UAAU,CAAClF,MAAX,KAAsB,YAA1B,EAAwC;cACtCoF,aAAa,CAAC;gBAAEpF,MAAM,EAAE;eAAX,CAAb;;WAFG,MAIA,IAAIA,MAAM,KAAK,UAAf,EAA2B;YAChC,CAAC,CAACgE,aAAF,IAAmBA,aAAa,CAAClkB,IAAD,CAAhC;WADK,MAEA,IAAIkgB,MAAM,KAAK,OAAf,EAAwB;YAC7B,CAAC,CAAC3X,OAAF,IAAaA,OAAO,CAACvI,IAAD,CAApB;WADK,MAIF,IAAIkgB,MAAM,KAAK,MAAf,EAAuB;YAAA;;YAC1B,IAAI,EAACmF,GAAD,aAACA,GAAD,eAACA,GAAG,CAAE9a,OAAN,KAAiB,CAACsU,KAAtB,EAA6B;YAC7BA,KAAK,CAAC9J,CAAN,GAAU4L,KAAK,CAAC7d,OAAhB;YACA,IAAMgQ,MAAM,GAAG+L,KAAK,CAACyH,eAAN,2BACbjB,GAAG,CAAC9a,OAAJ,CAAYgc,YAAZ,EADa,2DACb,uBAA4BC,OAA5B,EADa,CAAf;YAGA,IAAIjiB,IAAI,IAAI,SAAZ,EAAuByhB,mBAAmB,CAAClT,MAAM,CAACiC,CAAP,GAAW/U,IAAI,CAAC8K,EAAjB,CAAnB,CAAvB,KACK,IAAIvG,IAAI,IAAI,QAAZ,EAAsByhB,mBAAmB,CAAClT,MAAM,CAACiC,CAAP,GAAW/U,IAAI,CAACmL,QAAjB,CAAnB;YAC3Bma,aAAa,CAAC;cACZpF,MAAM,EAANA,MADY;cAEZI,WAAW,EAAEtgB,IAFD;cAGZqnB,oBAAoB,EAAErnB,IAHV;cAIZuE,IAAI,EAAEA;aAJK,CAAb;WARG,MAcE;YACL+gB,aAAa,CAAC;cACZpF,MAAM,EAANA,MADY;cAEZI,WAAW,EAAEtgB,IAFD;cAGZqnB,oBAAoB,EAAErnB,IAHV;cAIZuE,IAAI,EAAEA;aAJK,CAAb;;;;KA7DqB;MAAA;;GAAzB;;EAsEA,IAAMujB,SAAS,GAAG,SAAZA,SAAY,CAACC,UAAD,EAAsBC,gBAAtB;IAChB,OAAOxoB,KAAK,CAACmR,OAAN,CAAc,UAAAsX,KAAK;MAIxB,IAAMC,CAAC,GAAG9C,UAAU,CAAClF,MAArB;MACA,IAAMiI,cAAc,GAClB,CAACD,CAAC,KAAK,MAAN,IAAgBA,CAAC,KAAK,OAAtB,IAAiCA,CAAC,KAAK,KAAvC,IAAgDA,CAAC,KAAK,UAAvD,KACA,CAAC,CAAC9C,UAAU,CAAC9E,WADb,IAEA8E,UAAU,CAAC9E,WAAX,CAAuBta,EAAvB,KAA8BiiB,KAAK,CAACjiB,EAHtC;;MAKA,IAAMoiB,KAAK,GAAGD,cAAc,gBACnB/C,UAAU,CAAC9E,WADQ;QACMtO,CAAC,EAAEiW,KAAK,CAACjW;WACvCiW,KAFJ;;MAGA,IAAMjoB,IAAI,GACRooB,KAAK,CAACxoB,KAAN,CAAYC,OAAZ,KAAwB,CAAxB,IAA6BuoB,KAAK,CAACroB,GAAN,CAAUF,OAAV,KAAsB,CAAnD,GACIuoB,KADJ,GAEIlX,SAHN;;MAIA,IAAI,CAAClR,IAAL,EAAW;QACT,OAAO,EAAP;;;MAEF,OAAOA,IAAI,CAAC+c,WAAL,CACJhX,GADI,CACA,UAAA6K,KAAK;QACR,IAAMyJ,MAAM,GAAG7a,KAAK,CAACoR,KAAK,CAACjK,KAAP,CAApB;QAKA,IAAM0hB,YAAY,GAChBroB,IAAI,CAAC+K,EAAL,GAAU/K,IAAI,CAAC8K,EAAf,IAAqB9K,IAAI,CAACiL,QAAL,GAAgBjL,IAAI,CAACmL,QAD5C;QAEA,IAAMmd,UAAU,GACd,CAAC,CAACjO,MAAF,KACCA,MAAM,CAACtP,EAAP,GAAYsP,MAAM,CAACvP,EAAnB,IAAyBuP,MAAM,CAACpP,QAAP,GAAkBoP,MAAM,CAAClP,QADnD,CADF;;QAGA,IAAIkd,YAAY,IAAIC,UAApB,EAAgC;UAAA;;UAC9B,IAAMC,YAAY,4BAAGvoB,IAAI,CAACwoB,kBAAR,0DAAG,sBAAyBniB,IAAzB,CACnB,UAAAoiB,KAAK;YAAA,OACHA,KAAK,CAACviB,MAAN,KAAiBmU,MAAM,CAACrU,EAAxB,KACC,CAAC,CAACyiB,KAAK,CAACT,gBAAR,GACGS,KAAK,CAACT,gBAAN,KAA2BA,gBAD9B,GAEG,CAACA,gBAHL,CADG;WADc,CAArB;UAQA,IAAMU,KAAK,GAAG1oB,IAAI,CAACgS,CAAL,GAASsI,UAAU,GAAG,CAApC;UACA,IAAMqO,GAAG,GAAGtO,MAAM,CAACrI,CAAP,GAAWsI,UAAU,GAAG,CAApC;UACA,IAAMsO,IAAI,GAAG9pB,IAAI,CAACyW,GAAL,CAASmT,KAAT,EAAgBC,GAAhB,CAAb;UACA,IAAME,IAAI,GAAG/pB,IAAI,CAAC4M,GAAL,CAASgd,KAAT,EAAgBC,GAAhB,CAAb;;UAEA,IAAIE,IAAI,GAAG1U,aAAP,IAAwByU,IAAI,GAAGxU,WAAnC,EAAgD;YAC9C,OAAO,IAAP;;;UAIF,IAAI,CAAC,CAACmU,YAAF,KAAmBR,UAAvB,EAAmC;YACjC,OACErkB,mBAAA,CAACyW,KAAD;cACEnd,GAAG,kBAAgBgD,IAAI,CAACgG,EAArB,YAA8BqU,MAAM,CAACrU,EAArC,IACD+hB,UAAU,GAAG,WAAH,GAAiB,EAD1B;cAGH3N,QAAQ,EAAEpa;cACVqa,MAAM,EAAEA;cACRlV,SAAS,EAAEA;cACXqV,cAAc,EAAE5J,KAAK,CAAC4J;cACtBF,UAAU,EAAEA;cACZ3Q,WAAW,EAAEA;cACb4Q,UAAU,EAAE,CAAAgO,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEhO,UAAd,KAA4B;aAV1C,CADF;;;;QAgBJ,OAAO,IAAP;OAhDG,EAkDJzK,MAlDI,CAkDGgZ,OAlDH,CAAP;KApBK,CAAP;GADF;;EA4EA,IAAMC,KAAK,GAAGlD,UAAU,KAAK3U,SAAf,GAA2BoM,eAAe,CAAC,IAAI3f,IAAJ,CAASkoB,UAAT,CAAD,EAAuBhlB,KAAvB,EAA8BmT,WAA9B,CAA1C,GAAuF,IAArG;EACA,IAAMgV,WAAW,GAAGxpB,KAAK,CAACkP,MAAN,GAAevJ,SAAnC;EAKA,OACEzB,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAEGolB,KAAK,KAAK,IAAV,IAAkBA,KAAK,GAAG,CAA1B,IACCrlB,mBAAA,OAAA;IACEoH,EAAE,EAAEie;IACJ/S,EAAE,EAAE;IACJjL,EAAE,EAAEge;IACJ9S,EAAE,EAAE+S;IACJnO,MAAM,EAAC;IACPD,WAAW,EAAE;IACbqO,aAAa,EAAC;IACdC,OAAO,EAAE;GARX,CAHJ,EAcExlB,mBAAA,IAAA;IAAGC,SAAS,EAAC;GAAb,EAEGmkB,SAAS,CAAC,KAAD,CAFZ,EAIGA,SAAS,CAAC,IAAD,EAAO,WAAP,CAJZ,EAMGA,SAAS,CAAC,IAAD,EAAO,SAAP,CANZ,CAdF,EAsBEpkB,mBAAA,IAAA;IAAGC,SAAS,EAAC;IAAM/B,UAAU,EAAEA;IAAYC,QAAQ,EAAEA;GAArD,EACG8D,YAAY,CAACI,GAAb,CAAiB,UAAAiB,EAAE;IAClB,IAAMihB,KAAK,GAAGzoB,KAAK,CAACwH,EAAE,CAACL,KAAJ,CAAnB;IAEA,IAAM3G,IAAI,GACRolB,UAAU,CAAC9E,WAAX,IAA0B8E,UAAU,CAAC9E,WAAX,CAAuBta,EAAvB,KAA8BiiB,KAAK,CAACjiB,EAA9D,gBACSof,UAAU,CAAC9E,WADpB;MACiCtO,CAAC,EAAE;sBAC3BiW,KAFT;MAEgBjW,CAAC,EAAE;MAHrB;;IAIA,IAAI,CAAChS,IAAD,IAASioB,KAAK,CAACzK,YAAN,KAAuB,WAApC,EAAiD;MAC/C,OACE9Z,mBAAA,IAAA;QAAG1G,GAAG,EAAEirB,KAAK,CAACjiB;QAAIwB,SAAS,oBAAkBR,EAAE,CAACpH,KAArB;OAA3B,EACE8D,mBAAA,CAACqgB,SAAD;QACE/jB,IAAI,EAAEA;QACN2J,WAAW,EAAEA;QACb2Q,UAAU,EAAEA;QACZyI,oBAAoB,EAAE;QACtBC,gBAAgB,EAAE;QAClB6B,QAAQ,EAAE,CAACoD,KAAK,CAACkB;QACjBlG,YAAY,EAAE0E;QACdxgB,UAAU,EAAE,CAAC,CAAC8F,YAAF,IAAkBgb,KAAK,CAACjiB,EAAN,KAAaiH,YAAY,CAACjH;QACxDsD,GAAG,EAAEA;OATP,CADF,CADF;;;IAgBF,IAAI,CAACtJ,IAAL,EAAW;MACT,OACE0D,mBAAA,IAAA;QACE1G,GAAG,EAAEirB,KAAK,CAACjiB;QACXwB,SAAS,oBAAkBR,EAAE,CAACpH,KAArB;QACTkE,KAAK,EAAE;UAAEK,MAAM,EAAEmW;;OAHnB,CADF;;;IAQF,OACE5W,mBAAA,IAAA;MAAG1G,GAAG,EAAEgD,IAAI,CAACgG;MAAIwB,SAAS,oBAAkBR,EAAE,CAACpH,KAArB;KAA1B,EACE8D,mBAAA,CAACkhB,QAAD;MACE5kB,IAAI,EAAEA;MACN2J,WAAW,EAAEA;MACb2Q,UAAU,EAAEA;MACZyI,oBAAoB,EAAE,CAAC,CAAC2C,gBAAF,IAAsB,CAAC1lB,IAAI,CAACmpB;MAClDnG,gBAAgB,EAAE,CAAC,CAACyC,YAAF,IAAkB,CAACzlB,IAAI,CAACmpB;MAC1CtE,QAAQ,EAAE,CAAC7kB,IAAI,CAACmpB;MAChBlG,YAAY,EAAE0E;MACdxgB,UAAU,EAAE,CAAC,CAAC8F,YAAF,IAAkBjN,IAAI,CAACgG,EAAL,KAAYiH,YAAY,CAACjH;MACvDsD,GAAG,EAAEA;KATP,CADF,CADF;GAjCD,CADH,CAtBF,CADF;AA4ED,CAzkBM;;;;AC7BA,IAAM8f,SAAS,GAA6B,SAAtCA,SAAsC;MACjDC,iBAAAA;MACAC,qBAAAA;MACAC,gBAAAA;MACAvd,mBAAAA;MACAtC,eAAAA;MACAD,eAAAA;EAEA,IAAM+f,WAAW,GAAGxf,MAAM,CAAgB,IAAhB,CAA1B;EACA,IAAM6D,sBAAsB,GAAG7D,MAAM,CAAiB,IAAjB,CAArC;EACA,IAAMyf,yBAAyB,GAAGzf,MAAM,CAAiB,IAAjB,CAAxC;;EACA,IAAM0f,WAAW,gBAAQH,QAAR;IAAkBlE,GAAG,EAAEmE,WAAvB;IAAoCxd,WAAW,EAAXA,WAApC;IAAiDtC,OAAO,EAAPA;IAAlE;;EAEA,IAAMigB,MAAM,GAAGJ,QAAQ,CAACpkB,SAAT,GAAqB,EAApC;EACA,IAAMgP,aAAa,GAAGzK,OAAO,GAAGigB,MAAhC;EACA,IAAMvV,WAAW,GAAG1K,OAAO,GAAGsC,WAAV,GAAwB2d,MAA5C;EAEA,IAAMpa,WAAW,GAAGC,cAAc,CAAC;IACjCC,KAAK,EAAE8Z,QAAQ,CAAC/pB,KAAT,CAAekP,MADW;IAEjCgB,gBAAgB,EAAE;MAAA,OAAM7B,sBAAsB,CAACtD,OAA7B;KAFe;IAGjCoF,YAAY,EAAE;MAAA,OAAM4Z,QAAQ,CAACpkB,SAAf;KAHmB;IAIjCyK,QAAQ,EAAE;GAJsB,CAAlC;EAOAtF,SAAS,CAAC;IACR,IAAIuD,sBAAsB,CAACtD,OAA3B,EAAoC;MAClCsD,sBAAsB,CAACtD,OAAvB,CAA+B6B,SAA/B,GAA2C1C,OAA3C;;GAFK,EAIN,CAACA,OAAD,CAJM,CAAT;EAMAY,SAAS,CAAC;IACR,IAAImf,yBAAyB,CAAClf,OAA9B,EAAuC;MACrCkf,yBAAyB,CAAClf,OAA1B,CAAkC0D,UAAlC,GAA+CxE,OAA/C;;GAFK,EAIN,CAACA,OAAD,CAJM,CAAT;EAMA,OACE/F,mBAAA,MAAA;IACEC,SAAS,EAAEC,QAAM,CAACgmB;IAClBve,GAAG,EAAEoe;IACLI,GAAG,EAAC;GAHN,EAKEnmB,mBAAA,MAAA;IACEomB,KAAK,EAAC;IACNrmB,KAAK,EAAE4lB,SAAS,CAACtV;IACjB5P,MAAM,EAAEmlB,aAAa,CAAC3nB;IACtBC,UAAU,EAAE2nB,QAAQ,CAAC3nB;GAJvB,EAME8B,mBAAA,CAACqU,QAAD,oBAAcuR,cAAd,CANF,CALF,EAaE5lB,mBAAA,MAAA;IACE2H,GAAG,EAAEwC;IACLlK,SAAS,EAAEC,QAAM,CAACmmB;IAClBjmB,KAAK,EACHkI,WAAW,GACP;MAAE7H,MAAM,EAAE6H,WAAV;MAAuBvI,KAAK,EAAE4lB,SAAS,CAACtV;KADjC,GAEP;MAAEtQ,KAAK,EAAE4lB,SAAS,CAACtV;;GAN3B,EASErQ,mBAAA,MAAA;IACEomB,KAAK,EAAC;IACNrmB,KAAK,EAAE4lB,SAAS,CAACtV;IACjB5P,MAAM,EAAEoL,WAAW,CAACmC,YAAZ;IACR9P,UAAU,EAAE2nB,QAAQ,CAAC3nB;IACrByJ,GAAG,EAAEme;GALP,EAOE9lB,mBAAA,CAACqT,IAAD,oBACMsS;IACJ1jB,YAAY,EAAE4J,WAAW,CAAC8B,eAAZ;IACd8C,aAAa,EAAEA;IACfC,WAAW,EAAEA;IAJf,CAPF,EAaE1Q,mBAAA,CAACyhB,gBAAD,oBACMuE;IACJvV,aAAa,EAAEA;IACfC,WAAW,EAAEA;IACbzO,YAAY,EAAE4J,WAAW,CAAC8B,eAAZ;IAJhB,CAbF,CATF,CAbF,CADF;AA8CD,CAlFM;;;;ACZA,IAAM2Y,gBAAgB,GAMxB,SANQA,gBAMR;MAAGje,cAAAA;MAAQgI,gBAAAA;MAAUnK,qBAAAA;MAAeN,WAAAA;MAAK4C,gBAAAA;EAC5C,IAAMC,SAAS,GAAGnC,MAAM,CAAiB,IAAjB,CAAxB;EAEAM,SAAS,CAAC;IACR,IAAI6B,SAAS,CAAC5B,OAAd,EAAuB;MACrB4B,SAAS,CAAC5B,OAAV,CAAkB0D,UAAlB,GAA+BlC,MAA/B;;GAFK,EAIN,CAACA,MAAD,CAJM,CAAT;EAMA,OACErI,mBAAA,MAAA;IACEmmB,GAAG,EAAC;IACJ/lB,KAAK,EAAE;MACLmmB,MAAM,EAAE3gB,GAAG,YACAM,aADA,mCAEQA,aAFR;;IAIbjG,SAAS,EAAEC,aAAM,CAACsmB;IAClBhe,QAAQ,EAAEA;IACVb,GAAG,EAAEc;GATP,EAWEzI,mBAAA,MAAA;IAAKI,KAAK,EAAE;MAAEL,KAAK,EAAEsQ;;IAAYpQ,SAAS,EAAEC,aAAM,CAACmI;GAAnD,CAXF,CADF;AAeD,CA9BM;;ACgCP,IAAMoe,qBAAqB,GAAG,GAA9B;AAEA,IAAMC,yBAAyB,GAAG,EAAlC;AAEA,IAAaC,KAAK,GAAwC,SAA7CA,KAA6C;;;MACxD7qB,aAAAA;4BACA4F;MAAAA,wCAAY;+BACZrD;MAAAA,8CAAe;4BACfrB;MAAAA,wCAAY,IAAI/C,IAAJ;0BACZgD;MAAAA,oCAAU,IAAIhD,IAAJ;+BACVgE;MAAAA,8CAAe;MACF2oB,uBAAbtW;gCACAuW;MAAAA,gDAAgB;4BAChBplB;MAAAA,wCAAY;8BACZ6G;MAAAA,4CAAc;2BACdvM;MAAAA,sCAAW9C,QAAQ,CAACuC;gCACpBQ;MAAAA,gDAAgB;yBAChBsB;MAAAA,kCAAS;0BACTwpB;MAAAA,oCAAU;kCACV3O;MAAAA,oDAAkB;mCAClBE;MAAAA,sDAAmB;mCACnBC;MAAAA,8DAA2B;mCAC3BC;MAAAA,wDAAqB;mCACrBC;MAAAA,gEAA6B;mCAC7BC;MAAAA,0DAAuB;mCACvBC;MAAAA,kEAA+B;mCAC/BC;MAAAA,4DAAyB;oCACzBC;MAAAA,qEAAiC;mCACjCC;MAAAA,8DAA2B;oCAC3BC;MAAAA,uEAAmC;sBACnClT;MAAAA,4BAAM;8BACNwS;MAAAA,4CAAc;2BACdgE;MAAAA,sCAAW;6BACXvF;MAAAA,0CAAa;6BACb3Y;MAAAA,0CAAa;2BACbC;MAAAA,sCAAW;8BACX8H;MAAAA,4CAAc;6BACdsK;MAAAA,0CAAa;+BACbC;MAAAA,8CAAe;MACfuW,gBAAAA;iCACA5gB;MAAAA,kDAAiB2B;iCACjB6B;MAAAA,kDAAiB3L;gCACjB4L;MAAAA,gDAAgBpI;MAChBugB,oBAAAA;MACAC,wBAAAA;MACAxB,qBAAAA;MACA3b,eAAAA;MACAod,gBAAAA;MACA+E,gBAAAA;MACArlB,uBAAAA;MACAkI,qBAAAA;MACA/H,yBAAAA;gCACAmlB;MAAAA,gDAAgB;mCAChBC;MAAAA,iEAA4B;MAC5BvW,uBAAAA;MACAuR,uBAAAA;MACAC,kBAAAA;EAEA,IAAMgF,UAAU,GAAG7gB,MAAM,CAAiB,IAAjB,CAAzB;EACA,IAAMmD,WAAW,GAAGnD,MAAM,CAAiB,IAAjB,CAA1B;EACA,IAAM8gB,eAAe,GAAG9gB,MAAM,CAAC,KAAD,CAA9B;EAGA,IAAM+gB,cAAc,GAAG/gB,MAAM,CAAC,KAAD,CAA7B;EACA,IAAMghB,UAAU,GAAGhhB,MAAM,CAAC,CAAD,CAAzB;EACA,IAAMihB,cAAc,GAAGjhB,MAAM,CAAC,CAAD,CAA7B;EACA,IAAMkhB,YAAY,GAAGlhB,MAAM,CAASmhB,QAAT,CAA3B;;EACA,gBAAsDlhB,QAAQ,CAAgB,IAAhB,CAA9D;MAAOmhB,mBAAP;MAA4BC,sBAA5B;;EACA,IAAMC,mBAAmB,GAAGthB,MAAM,CAAiB,IAAjB,CAAlC;EACA,IAAMuhB,2BAA2B,GAAGvhB,MAAM,CAAiB,IAAjB,CAA1C;EACA,IAAMwhB,eAAe,GAAGxhB,MAAM,CAAiB,IAAjB,CAA9B;;EAGA,iBAAkDC,QAAQ,CAAC,CAAD,CAA1D;MAAOwhB,iBAAP;MAA0BC,oBAA1B;;EACA,iBAAkCzhB,QAAQ,CAAY;IACpD,sBAAuC1K,cAAc,CACnDC,KADmD,EAEnDC,QAFmD,EAGnDC,aAHmD,CAArD;QAAOisB,cAAP;QAAuBC,YAAvB;;IAKA,IAAI7pB,YAAY,KAAK,WAArB,EAAkC;MAChC,OAAO;QAAEtC,QAAQ,EAARA,QAAF;QAAYoB,KAAK,EAAEJ,SAAS,CAACC,SAAD,EAAYC,OAAZ,EAAqBlB,QAArB;OAAnC;;;IAEF,OAAO;MACLA,QAAQ,EAARA,QADK;MAELoB,KAAK,EAAEJ,SAAS,CAACkrB,cAAD,EAAiBC,YAAjB,EAA+BnsB,QAA/B;KAFlB;GATwC,CAA1C;MAAOuY,SAAP;MAAkB6T,YAAlB;;EAcA,iBAA8C5hB,QAAQ,CACpDiH,SADoD,CAAtD;MAAO4a,eAAP;MAAwBC,kBAAxB;;EAIA,iBAA0C9hB,QAAQ,CAAC,CAAD,CAAlD;MAAOL,aAAP;MAAsBoiB,gBAAtB;;EACA,iBAAwC/hB,QAAQ,CAAC,CAAD,CAAhD;MAAOgiB,YAAP;MAAqBC,eAArB;;EAIA,IAAMC,aAAa,GACjBF,YAAY,GAAG,CAAf,GACIntB,IAAI,CAAC4M,GAAL,CACE,GADF,EAEEugB,YAAY,IAAI,IAAI9B,qBAAR,CAAZ,GAA6CC,yBAF/C,CADJ,GAKIe,QANN;EAUA,IAAMiB,QAAQ,GAAGttB,IAAI,CAACyW,GAAL,CACf4W,aADe,EAEfV,iBAAiB,GAAG,CAApB,GAAwBA,iBAAxB,GAA4CN,QAF7B,CAAjB;;EAKA,IAAMkB,0BAA0B,GAAG,SAA7BA,0BAA6B,CAAC3pB,CAAD;;;IACjCooB,eAAe,CAACvgB,OAAhB,GAA0B,IAA1B;IACAwgB,cAAc,CAACxgB,OAAf,GAAyB,IAAzB;IACAygB,UAAU,CAACzgB,OAAX,GAAqB7H,CAAC,CAACI,OAAvB;IACAmoB,cAAc,CAAC1gB,OAAf,GAAyB6gB,mBAAzB,WAAyBA,mBAAzB,oDAAiDje,WAAW,CAAC5C,OAA7D,yDAAiD,qBAAqBI,WAAtE,oCAAqF,CAArF;IAGAugB,YAAY,CAAC3gB,OAAb,GAAuB6hB,QAAvB;IACA1pB,CAAC,CAACC,cAAF;GARF;;EAWA2H,SAAS,CAAC;IACR,IAAMgiB,WAAW,GAAG,SAAdA,WAAc,CAAC5pB,CAAD;MAClB,IAAI,CAACooB,eAAe,CAACvgB,OAArB,EAA8B;MAC9B,IAAMgiB,QAAQ,GAAGztB,IAAI,CAACyW,GAAL,CAAS2V,YAAY,CAAC3gB,OAAtB,EAA+BzL,IAAI,CAAC4M,GAAL,CAAS,GAAT,EAAcuf,cAAc,CAAC1gB,OAAf,IAA0B7H,CAAC,CAACI,OAAF,GAAYkoB,UAAU,CAACzgB,OAAjD,CAAd,CAA/B,CAAjB;MACA8gB,sBAAsB,CAACkB,QAAD,CAAtB;MACAP,gBAAgB,CAACO,QAAD,CAAhB;KAJF;;IAMA,IAAMC,SAAS,GAAG,SAAZA,SAAY;MAChB1B,eAAe,CAACvgB,OAAhB,GAA0B,KAA1B;KADF;;IAGArH,QAAQ,CAACE,gBAAT,CAA0B,WAA1B,EAAuCkpB,WAAvC;IACAppB,QAAQ,CAACE,gBAAT,CAA0B,SAA1B,EAAqCopB,SAArC;IACA,OAAO;MACLtpB,QAAQ,CAACC,mBAAT,CAA6B,WAA7B,EAA0CmpB,WAA1C;MACAppB,QAAQ,CAACC,mBAAT,CAA6B,SAA7B,EAAwCqpB,SAAxC;KAFF;GAZO,EAgBN,EAhBM,CAAT;;EAiBA,iBAAkDviB,QAAQ,CAAC,CAAD,CAA1D;MAAOT,iBAAP;MAA0BijB,oBAA1B;;EACA,iBAAoDxiB,QAAQ,CAAC+B,WAAD,CAA5D;MAAOzC,kBAAP;MAA2BmjB,qBAA3B;;EACA,iBAAgCziB,QAAQ,CAAY,EAAZ,CAAxC;MAAOwS,QAAP;MAAiBkQ,WAAjB;;EACA,IAAMC,WAAW,GAAG5iB,MAAM,CAAwB,IAAxB,CAA1B;;EACA,kBAAoCC,QAAQ,CAAa;IACvDiW,MAAM,EAAE;GADkC,CAA5C;MAAOkF,UAAP;MAAmBE,aAAnB;;EAMA,IAAMuH,oBAAoB,GAAG,SAAvBA,oBAAuB,CAAC7sB,IAAD;IAC3B2sB,WAAW,CAAC,UAAAte,IAAI;MAAA,OAAIA,IAAI,CAACtI,GAAL,CAAS,UAAAN,CAAC;QAAA,OAAKA,CAAC,CAACO,EAAF,KAAShG,IAAI,CAACgG,EAAd,GAAmBhG,IAAnB,GAA0ByF,CAA/B;OAAV,CAAJ;KAAL,CAAX;GADF;;EAGA,IAAM6U,UAAU,GAAG1U,OAAO,CACxB;IAAA,OAAOT,SAAS,GAAGqlB,OAAb,GAAwB,GAA9B;GADwB,EAExB,CAACrlB,SAAD,EAAYqlB,OAAZ,CAFwB,CAA1B;;EAKA,kBAAwCvgB,QAAQ,EAAhD;MAAOgD,YAAP;MAAqBC,eAArB;;EACA,kBAAoCjD,QAAQ,CAAiB,IAAjB,CAA5C;MAAO6iB,UAAP;MAAmBvH,aAAnB;;EAOA,kBAAsDtb,QAAQ,CAAgB,IAAhB,CAA9D;MAAO8iB,mBAAP;MAA4BC,sBAA5B;;EACA,IAAMC,sBAAsB,GAAGjjB,MAAM,CAAkB,IAAlB,CAArC;EACAM,SAAS,CAAC;IACR,IAAIggB,eAAe,IAAI,IAAvB,EAA6B;IAC7B,IAAI9gB,iBAAiB,IAAI,CAAzB,EAA4B;IAC5B,IAAM0jB,UAAU,GAAGjuB,+BAA+B,CAACQ,QAAD,CAAlD;IACA,IAAI,CAACytB,UAAL,EAAiB;IACjB,IAAMC,UAAU,GAAG7tB,2BAA2B,CAACG,QAAD,CAA9C;IAUA,IAAM2tB,YAAY,GAAGH,sBAAsB,CAAC1iB,OAA5C;;IACA,IACE6iB,YAAY,IAAI,IAAhB,IACAA,YAAY,KAAK3tB,QADjB,IAEAstB,mBAAmB,IAAI,IAHzB,EAIE;MACA,IAAMM,OAAO,GAAG7jB,iBAAiB,GAAGujB,mBAApC;MACA,IAAMO,MAAM,GAAGruB,+BAA+B,CAACmuB,YAAD,CAA9C;MACA,IAAMG,MAAM,GAAGjuB,2BAA2B,CAAC8tB,YAAD,CAA1C;MAEA,IAAIxe,KAAI,GAAGme,mBAAX;;MACA,IAAII,UAAU,IAAIG,MAAM,IAAI,IAAxB,IAAgCC,MAAM,IAAI,IAA1C,IAAkDA,MAAM,GAAGD,MAA/D,EAAuE;QAErE,IAAM7nB,CAAC,GAAG3G,IAAI,CAACyW,GAAL,CAAS,CAAT,EAAYzW,IAAI,CAAC4M,GAAL,CAAS,CAAT,EAAY,CAAC2hB,OAAO,GAAGC,MAAX,KAAsBC,MAAM,GAAGD,MAA/B,CAAZ,CAAZ,CAAV;QACA,IAAME,aAAa,GAAGN,UAAU,GAAGznB,CAAC,IAAI0nB,UAAU,GAAGD,UAAjB,CAApC;QACAte,KAAI,GAAG9P,IAAI,CAACC,KAAL,CAAWyK,iBAAiB,GAAGgkB,aAA/B,CAAP;OAJF,MAKO,IAAIH,OAAO,GAAGH,UAAd,EAA0B;QAE/Bte,KAAI,GAAG9P,IAAI,CAACC,KAAL,CAAWyK,iBAAiB,GAAG0jB,UAA/B,CAAP;OAFK,MAGA,IAAIC,UAAU,IAAIE,OAAO,GAAGF,UAA5B,EAAwC;QAC7Cve,KAAI,GAAG9P,IAAI,CAACqK,IAAL,CAAUK,iBAAiB,GAAG2jB,UAA9B,CAAP;;;MAEFve,KAAI,GAAG9P,IAAI,CAAC4M,GAAL,CAAS,EAAT,EAAakD,KAAb,CAAP;MACAqe,sBAAsB,CAAC1iB,OAAvB,GAAiC9K,QAAjC;MACAsrB,cAAc,CAACxgB,OAAf,GAAyB,IAAzB;;MACA,IAAIqE,KAAI,KAAKme,mBAAb,EAAkC;QAChCC,sBAAsB,CAACpe,KAAD,CAAtB;;;MAEF;;;IAKF,IAAM6e,qBAAqB,GACzBR,sBAAsB,CAAC1iB,OAAvB,KAAmC9K,QAAnC,IAA+CstB,mBAAmB,IAAI,IADxE;IAEA,IAAIhC,cAAc,CAACxgB,OAAf,IAA0BkjB,qBAA9B,EAAqD;IACrD,IAAM7e,IAAI,GAAG9P,IAAI,CAAC4M,GAAL,CAAS,EAAT,EAAa5M,IAAI,CAACC,KAAL,CAAWyK,iBAAiB,GAAG0jB,UAA/B,CAAb,CAAb;IACAD,sBAAsB,CAAC1iB,OAAvB,GAAiC9K,QAAjC;;IACA,IAAImP,IAAI,KAAKme,mBAAb,EAAkC;MAChCC,sBAAsB,CAACpe,IAAD,CAAtB;;GAtDK,EAwDN,CAACnP,QAAD,EAAW+J,iBAAX,EAA8B8gB,eAA9B,EAA+CyC,mBAA/C,CAxDM,CAAT;EAyDA,IAAM/Y,WAAW,YAAGsW,eAAH,WAAGA,eAAH,GAAsByC,mBAAtB,oBAA6C,EAA9D;EASA,IAAMW,oBAAoB,GAAG9nB,OAAO,CAAC;IACnC,IAAI4D,iBAAiB,IAAI,CAArB,IAA0BwO,SAAS,CAACnX,KAAV,CAAgB6N,MAAhB,IAA0B,CAAxD,EAA2D,OAAOsF,WAAP;;IAC3D,IAAIsW,eAAe,IAAI,IAAvB,EAA6B;MAC3B,IAAM6C,UAAU,GAAG7tB,2BAA2B,CAACG,QAAD,CAA9C;;MACA,IAAI0tB,UAAJ,EAAgB;QACd,OAAOruB,IAAI,CAAC4M,GAAL,CAASsI,WAAT,EAAsBlV,IAAI,CAACqK,IAAL,CAAUK,iBAAiB,GAAG2jB,UAA9B,CAAtB,CAAP;;;MAEF,OAAOnZ,WAAP;;;IAEF,OAAOlV,IAAI,CAAC4M,GAAL,CAASsI,WAAT,EAAsBlV,IAAI,CAACqK,IAAL,CAAUK,iBAAiB,GAAGwO,SAAS,CAACnX,KAAV,CAAgB6N,MAA9C,CAAtB,CAAP;GATkC,EAUjC,CAACsF,WAAD,EAAcsW,eAAd,EAA+B7qB,QAA/B,EAAyC+J,iBAAzC,EAA4DwO,SAAS,CAACnX,KAAV,CAAgB6N,MAA5E,CAViC,CAApC;EAYA,IAAMqF,QAAQ,GACZ2Z,oBAAoB,GAAG,EAAvB,GACI,CAAC1V,SAAS,CAACnX,KAAV,CAAgB6N,MAAhB,GAAyB,GAA1B,IAAiCgf,oBADrC,GAEI1V,SAAS,CAACnX,KAAV,CAAgB6N,MAAhB,GAAyBgf,oBAH/B;EAIA,IAAMzhB,eAAe,GAAGrG,OAAO,CAAC;IAAA,OAAM6W,QAAQ,CAAC/N,MAAT,GAAkBvJ,SAAxB;GAAD,EAAoC,CAACsX,QAAQ,CAAC/N,MAAV,EAAkBvJ,SAAlB,CAApC,CAA/B;;EAEA,kBAA8B8E,QAAQ,CAAC,CAAD,CAAtC;MAAOP,OAAP;MAAgBikB,UAAhB;;EACA,kBAA8B1jB,QAAQ,CAAC,CAAC,CAAF,CAAtC;MAAOR,OAAP;MAAgBmkB,UAAhB;;EACA,kBAAkD3jB,QAAQ,CAAC,KAAD,CAA1D;MAAO4jB,iBAAP;MAA0BC,oBAA1B;;EACA,kBAAoC7jB,QAAQ,CAAC,CAAD,CAA5C;MAAO8jB,UAAP;MAAmBC,aAAnB;;EACA,kBAAoC/jB,QAAQ,CAAC,CAAD,CAA5C;MAAOgkB,UAAP;MAAmBC,aAAnB;;EACA,kBAAwCjkB,QAAQ,CAAC,KAAD,CAAhD;MAAOkkB,YAAP;MAAqBC,eAArB;;EAEA,IAAMzE,MAAM,GAAGxkB,SAAS,GAAG,EAA3B;EACA,IAAMgP,aAAa,GAAGzK,OAAO,GAAGigB,MAAhC;EACA,IAAMvV,WAAW,GAAG1K,OAAO,GAAGsC,WAAV,GAAwB2d,MAA5C;EACArf,SAAS,CAAC;IACR,IAAIvI,YAAY,KAAK,WAAjB,IAAgCrB,SAAhC,IAA6CC,OAAjD,EAA0D;MACxDkrB,YAAY,CAAC;QACXpsB,QAAQ,EAARA,QADW;QAEXoB,KAAK,EAAEJ,SAAS,CAACC,SAAD,EAAYC,OAAZ,EAAqBlB,QAArB;OAFN,CAAZ;;GAFK,EAON,CAACiB,SAAD,EAAYC,OAAZ,CAPM,CAAT;EASA2J,SAAS,CAAC;IACR,IAAIsiB,WAAW,CAACriB,OAAhB,EAAyB;MACvB8jB,YAAY,CAACzB,WAAW,CAACriB,OAAb,CAAZ;;;IAEF,IAAG,CAACqgB,2BAAJ,EAAgC;MAChCwD,eAAe,CAAC,IAAD,CAAf;;;IAEAxB,WAAW,CAACriB,OAAZ,GAAsB+jB,UAAU,CAAC;;;MAC/B,IAAIC,aAAJ;MAEAA,aAAa,GAAG3N,iBAAiB,CAACphB,KAAD,CAAjC;MAIA+uB,aAAa,GAAGA,aAAa,CAACC,IAAd,CAAmBpN,SAAnB,CAAhB;;MACA,uBAAuC7hB,cAAc,CACnDgvB,aADmD,EAEnD9uB,QAFmD,EAGnDC,aAHmD,2BAInD2U,eAJmD,aAInDA,eAJmD,uBAInDA,eAAe,CAAEqE,aAJkC,oCAIjB,CAJiB,CAArD;UAAOiT,cAAP;UAAuBC,YAAvB;;MAMA,IAAI6C,QAAQ,GAAGhuB,SAAS,CAACkrB,cAAD,EAAiBC,YAAjB,EAA+BnsB,QAA/B,CAAxB;;MACA,IAAIsC,YAAY,KAAK,WAArB,EAAkC;QAChC0sB,QAAQ,GAAGhuB,SAAS,CAACC,SAAD,EAAYC,OAAZ,EAAqBlB,QAArB,CAApB;;;MAEF,IAAI6J,GAAJ,EAAS;QACPmlB,QAAQ,GAAGA,QAAQ,CAACC,OAAT,EAAX;;QACA,IAAIjlB,OAAO,KAAK,CAAC,CAAjB,EAAoB;UAClBmkB,UAAU,CAACa,QAAQ,CAAC/f,MAAT,GAAkBgf,oBAAnB,CAAV;;;;MAGJ,IAAI3rB,YAAY,KAAK,WAArB,EAAkC;QAChC8pB,YAAY,CAAC;UACXhrB,KAAK,EAAEJ,SAAS,CAACkrB,cAAD,EAAiBC,YAAjB,EAA+BnsB,QAA/B,CADL;UAEXA,QAAQ,EAARA;SAFU,CAAZ;;;MAMF,wBAAmCkvB,gBAAgB,CAACvpB,SAAD,CAAnD;UAAKwpB,WAAL;UAAkBC,aAAlB;;MAGAC,UAAU,CAACtvB,KAAD,CAAV;;MACA,IAAIuC,YAAY,KAAK,WAArB,EAAkC;QAChCgtB,SAAS,CAACF,aAAD,EAAgB,SAAhB,EAA2BrvB,KAA3B,EAAkC,WAAlC,CAAT;QACAuvB,SAAS,CAACH,WAAD,EAAc,SAAd,EAAyBpvB,KAAzB,EAAgC,SAAhC,CAAT;;;MAEFmtB,WAAW,CACT/Q,iBAAiB,CACf2S,aADe,EAEfE,QAFe,EAGff,oBAHe,EAIfvoB,SAJe,EAKfmV,UALe,EAMfuB,eANe,EAOfC,WAPe,EAQfxS,GARe,EASfyS,gBATe,EAUfC,wBAVe,EAWfC,kBAXe,EAYfC,0BAZe,EAafC,oBAbe,EAcfC,4BAde,EAefC,sBAfe,EAgBfC,8BAhBe,EAiBfC,wBAjBe,EAkBfC,gCAlBe,CADR,CAAX;MAsBA4R,eAAe,CAAC,KAAD,CAAf;KA7D8B,EA8D7BzD,aA9D6B,CAAhC;GAPO,EAsEN,CACDnrB,KADC,EAEDC,QAFC,EAGDC,aAHC,EAIDyF,SAJC,EAKD0W,eALC,EAMDvB,UANC,EAODwB,WAPC,EAQDC,gBARC,EASDC,wBATC,EAUDC,kBAVC,EAWDC,0BAXC,EAYDC,oBAZC,EAaDC,4BAbC,EAcDC,sBAdC,EAeDC,8BAfC,EAgBDC,wBAhBC,EAiBDC,gCAjBC,EAkBDlT,GAlBC,EAmBDshB,2BAnBC,EAoBD8C,oBApBC,EAqBDrZ,eArBC,CAtEM,CAAT;EA8FA/J,SAAS,CAAC;IACR,OAAO;MACL+jB,YAAY,CAACzB,WAAW,CAACriB,OAAb,CAAZ;KADF;GADO,EAIN,EAJM,CAAT;EAMAD,SAAS,CAAC;IACR,IACE7K,QAAQ,KAAKuY,SAAS,CAACvY,QAAvB,KACEgrB,QAAQ,IAAI,CAACqB,eAAd,IACErB,QAAQ,IAAI,CAAAqB,eAAe,SAAf,IAAAA,eAAe,WAAf,YAAAA,eAAe,CAAEkD,OAAjB,QAA+BvE,QAAQ,CAACuE,OAAT,EAF9C,CADF,EAIE;MACA,IAAMnuB,KAAK,GAAGmX,SAAS,CAACnX,KAAxB;MACA,IAAM8F,KAAK,GAAG9F,KAAK,CAACgc,SAAN,CACZ,UAACvM,CAAD,EAAIsD,CAAJ;QAAA,OACE6W,QAAQ,CAACuE,OAAT,MAAsB1e,CAAC,CAAC0e,OAAF,EAAtB,IACApb,CAAC,GAAG,CAAJ,KAAU/S,KAAK,CAAC6N,MADhB,IAEA+b,QAAQ,CAACuE,OAAT,KAAqBnuB,KAAK,CAAC+S,CAAC,GAAG,CAAL,CAAL,CAAaob,OAAb,EAHvB;OADY,CAAd;;MAMA,IAAIroB,KAAK,KAAK,CAAC,CAAf,EAAkB;QAChB;;;MAEFolB,kBAAkB,CAACtB,QAAD,CAAlB;MACAmD,UAAU,CAACF,oBAAoB,GAAG/mB,KAAxB,CAAV;;GAjBK,EAmBN,CACD8jB,QADC,EAEDiD,oBAFC,EAGD1V,SAAS,CAACnX,KAHT,EAIDmX,SAAS,CAACvY,QAJT,EAKDA,QALC,EAMDqsB,eANC,EAODC,kBAPC,CAnBM,CAAT;EA6BAzhB,SAAS,CAAC;IACR,IAAQgW,WAAR,GAAgC8E,UAAhC,CAAQ9E,WAAR;QAAqBJ,MAArB,GAAgCkF,UAAhC,CAAqBlF,MAArB;;IACA,IAAII,WAAJ,EAAiB;MACf,IAAIJ,MAAM,KAAK,QAAf,EAAyB;QACvBoF,aAAa,CAAC;UAAEpF,MAAM,EAAE;SAAX,CAAb;QACAyM,WAAW,CAAClQ,QAAQ,CAAC3M,MAAT,CAAgB,UAAArK,CAAC;UAAA,OAAIA,CAAC,CAACO,EAAF,KAASsa,WAAW,CAACta,EAAzB;SAAjB,CAAD,CAAX;;;GALG,EAYN,CAACof,UAAD,EAAa3I,QAAb,CAZM,CAAT;EAcAnS,SAAS,CAAC;IACR,IAAIwiB,UAAJ,EAAgB;MACdH,WAAW,CAAClQ,QAAQ,CAAC1W,GAAT,CAAa,UAAAN,CAAC;QAAA,OAAKA,CAAC,CAACO,EAAF,KAAS8mB,UAAU,CAAC9mB,EAApB,GAAyBP,CAAzB,GAA6BqnB,UAAlC;OAAd,CAAD,CAAX;MACAvH,aAAa,CAAC,IAAD,CAAb;;GAHK,EAKN,CAACuH,UAAD,EAAarQ,QAAb,CALM,CAAT;EAOAnS,SAAS,CAAC;IACR,IAAI,CAACigB,aAAL,EAAoB;MAClByB,gBAAgB,CAAC,CAAD,CAAhB;;;IAEF,IAAI7e,WAAW,CAAC5C,OAAhB,EAAyB;MACvByhB,gBAAgB,CAAC7e,WAAW,CAAC5C,OAAZ,CAAoBI,WAArB,CAAhB;;GALK,EAON,CAACwC,WAAD,EAAcod,aAAd,CAPM,CAAT;EAaAjgB,SAAS,CAAC;IACR,IAAI,CAACigB,aAAD,IAAkB,CAACpd,WAAW,CAAC5C,OAAnC,EAA4C;IAC5C,IAAI,OAAO0kB,cAAP,KAA0B,WAA9B,EAA2C;;IAC3C,IAAMC,OAAO,GAAG,SAAVA,OAAU;MACd,IAAI/hB,WAAW,CAAC5C,OAAhB,EAAyB;QACvByhB,gBAAgB,CAAC7e,WAAW,CAAC5C,OAAZ,CAAoBI,WAArB,CAAhB;;KAFJ;;IAKA,IAAMwkB,QAAQ,GAAG,IAAIF,cAAJ,CAAmBC,OAAnB,CAAjB;IACAC,QAAQ,CAACC,OAAT,CAAiBjiB,WAAW,CAAC5C,OAA7B;IACA2kB,OAAO;IACP,OAAO;MAAA,OAAMC,QAAQ,CAACE,UAAT,EAAN;KAAP;GAXO,EAYN,CAAC9E,aAAD,EAAgBxoB,YAAhB,CAZM,CAAT;EAcAuI,SAAS,CAAC;IACR,IAAIugB,UAAU,CAACtgB,OAAf,EAAwB;MAEtBkiB,oBAAoB,CAAC5B,UAAU,CAACtgB,OAAX,CAAmBI,WAAnB,GAAiCf,aAAjC,GAAiD,EAAlD,CAApB;;GAHK,EAKN,CAACihB,UAAD,EAAajhB,aAAb,EAA4BqiB,YAA5B,CALM,CAAT;EASA3hB,SAAS,CAAC;IACR,IAAMglB,IAAI,GAAGzE,UAAU,CAACtgB,OAAxB;IACA,IAAI,CAAC+kB,IAAL,EAAW;;IACX,IAAI,OAAOL,cAAP,KAA0B,WAA9B,EAA2C;MACzC/C,eAAe,CAACoD,IAAI,CAAC3kB,WAAN,CAAf;MACA;;;IAEF,IAAMukB,OAAO,GAAG,SAAVA,OAAU;MAAA,OAAMhD,eAAe,CAACoD,IAAI,CAAC3kB,WAAN,CAArB;KAAhB;;IACA,IAAMwkB,QAAQ,GAAG,IAAIF,cAAJ,CAAmBC,OAAnB,CAAjB;IACAC,QAAQ,CAACC,OAAT,CAAiBE,IAAjB;IACAJ,OAAO;IACP,OAAO;MAAA,OAAMC,QAAQ,CAACE,UAAT,EAAN;KAAP;GAXO,EAYN,EAZM,CAAT;EAcA/kB,SAAS,CAAC;IACR,IAAI0B,WAAJ,EAAiB;MACf0gB,qBAAqB,CAAC1gB,WAAW,GAAGrK,YAAf,CAArB;KADF,MAEO;MACL+qB,qBAAqB,CAACltB,KAAK,CAACkP,MAAN,GAAevJ,SAAf,GAA2BxD,YAA5B,CAArB;;GAJK,EAMN,CAACqK,WAAD,EAAcxM,KAAd,EAAqBmC,YAArB,EAAmCwD,SAAnC,CANM,CAAT;EASAmF,SAAS,CAAC;;;IACR,IAAMilB,WAAW,GAAG,SAAdA,WAAc,CAAC5O,KAAD;MAClB,IAAIA,KAAK,CAAC6O,QAAN,IAAkB7O,KAAK,CAAC8O,MAA5B,EAAoC;QAClC,IAAMC,UAAU,GAAG/O,KAAK,CAAC8O,MAAN,GAAe9O,KAAK,CAAC8O,MAArB,GAA8B9O,KAAK,CAACgP,MAAvD;QACA,IAAIC,UAAU,GAAGnmB,OAAO,GAAGimB,UAA3B;;QACA,IAAIE,UAAU,GAAG,CAAjB,EAAoB;UAClBA,UAAU,GAAG,CAAb;SADF,MAEO,IAAIA,UAAU,GAAG7b,QAAjB,EAA2B;UAChC6b,UAAU,GAAG7b,QAAb;;;QAEF6Z,UAAU,CAACgC,UAAD,CAAV;QACAjP,KAAK,CAAChe,cAAN;OATF,MAUO,IAAIqJ,WAAJ,EAAiB;QACtB,IAAI6jB,UAAU,GAAGnmB,OAAO,GAAGiX,KAAK,CAACgP,MAAjC;;QACA,IAAIE,UAAU,GAAG,CAAjB,EAAoB;UAClBA,UAAU,GAAG,CAAb;SADF,MAEO,IAAIA,UAAU,GAAG5jB,eAAe,GAAGD,WAAnC,EAAgD;UACrD6jB,UAAU,GAAG5jB,eAAe,GAAGD,WAA/B;;;QAEF,IAAI6jB,UAAU,KAAKnmB,OAAnB,EAA4B;UAC1BikB,UAAU,CAACkC,UAAD,CAAV;UACAlP,KAAK,CAAChe,cAAN;;;;MAIJmrB,oBAAoB,CAAC,IAAD,CAApB;KAxBF;;IA2BA,IAAMgC,cAAc,GAAG,SAAjBA,cAAiB,CAACnP,KAAD;MACrB,IAAIA,KAAJ,EAAW;QACTqN,aAAa,CAACrN,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBC,KAAzB,CAAb;QACA9B,aAAa,CAACvN,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBE,KAAzB,CAAb;;KAHJ;;IAOA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACvP,KAAD;MAClB,IAAIA,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBC,KAAxB,IAAiCrP,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBE,KAA7D,EAAoE;QAClE,IAAIR,MAAM,GAAG9O,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBC,KAAxB,GAAgCjC,UAA7C;QACA,IAAI4B,MAAM,GAAGhP,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBE,KAAxB,GAAgChC,UAA7C;;QAGA,IAAInvB,IAAI,CAACye,GAAL,CAASkS,MAAT,IAAmB3wB,IAAI,CAACye,GAAL,CAASoS,MAAT,CAAvB,EAAyC;UACvC,IAAIC,UAAU,GAAGnmB,OAAO,GAAGgmB,MAAM,GAAG,CAApC;;UACA,IAAIG,UAAU,GAAG,CAAb,IAAkBA,UAAU,GAAG,IAAnC,EAAyC;YACvChC,UAAU,CAACgC,UAAD,CAAV;WADF,MAEO,IAAIA,UAAU,GAAG,CAAjB,EAAoB;YACzBhC,UAAU,CAAC,CAAD,CAAV;WADK,MAEA;YACLA,UAAU,CAAC,IAAD,CAAV;;SAPJ,MASO;UACL,IAAIiC,UAAU,GAAGnmB,OAAO,GAAGimB,MAA3B;;UACA,IAAIE,UAAU,GAAG,CAAb,IAAkBA,UAAU,GAAG,IAAnC,EAAyC;YACvClC,UAAU,CAACkC,UAAD,CAAV;WADF,MAEO,IAAIA,UAAU,GAAG,CAAjB,EAAoB;YACzBlC,UAAU,CAAC,CAAD,CAAV;WADK,MAEA;YACLA,UAAU,CAAC,IAAD,CAAV;;;;QAKJK,aAAa,CAACrN,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBC,KAAzB,CAAb;QACA9B,aAAa,CAACvN,KAAK,CAACoP,cAAN,CAAqB,CAArB,EAAwBE,KAAzB,CAAb;;;MA0BFnC,oBAAoB,CAAC,IAAD,CAApB;KAtDF;;IA0DA,uBAAAjD,UAAU,CAACtgB,OAAX,4EAAoBnH,gBAApB,CAAqC,OAArC,EAA8CmsB,WAA9C,EAA2D;MACzDY,OAAO,EAAE;KADX;IAGA,wBAAAtF,UAAU,CAACtgB,OAAX,8EAAoBnH,gBAApB,CAAqC,WAArC,EAAkD8sB,WAAlD,EAA+D;MAC7DC,OAAO,EAAE;KADX;IAGA,wBAAAtF,UAAU,CAACtgB,OAAX,8EAAoBnH,gBAApB,CAAqC,YAArC,EAAmD0sB,cAAnD,EAAmE;MACjEK,OAAO,EAAE;KADX;IAGA,wBAAAtF,UAAU,CAACtgB,OAAX,8EAAoBnH,gBAApB,CAAqC,UAArC,EAAiD0sB,cAAjD,EAAiE;MAC/DK,OAAO,EAAE;KADX;IAGA,OAAO;;;MACL,wBAAAtF,UAAU,CAACtgB,OAAX,8EAAoBpH,mBAApB,CAAwC,OAAxC,EAAiDosB,WAAjD;MACA,wBAAA1E,UAAU,CAACtgB,OAAX,8EAAoBpH,mBAApB,CAAwC,WAAxC,EAAqD+sB,WAArD;MACA,wBAAArF,UAAU,CAACtgB,OAAX,8EAAoBpH,mBAApB,CAAwC,UAAxC,EAAoD2sB,cAApD;MACA,wBAAAjF,UAAU,CAACtgB,OAAX,8EAAoBpH,mBAApB,CAAwC,UAAxC,EAAoD2sB,cAApD;KAJF;GAzGO,EA+GN,CACDjF,UADC,EAEDnhB,OAFC,EAGDD,OAHC,EAIDuC,WAJC,EAKD+H,QALC,EAMDzK,GANC,EAOD2C,eAPC,CA/GM,CAAT;;EAyHA,IAAMmkB,aAAa,GAAG,SAAhBA,aAAgB,CAACzP,KAAD;IACpB,IAAIjX,OAAO,KAAKiX,KAAK,CAAC0P,aAAN,CAAoBjkB,SAAhC,IAA6C,CAACyhB,iBAAlD,EAAqE;MACnEF,UAAU,CAAChN,KAAK,CAAC0P,aAAN,CAAoBjkB,SAArB,CAAV;MACA0hB,oBAAoB,CAAC,IAAD,CAApB;KAFF,MAGO;MACLA,oBAAoB,CAAC,KAAD,CAApB;;GALJ;;EASA,IAAMwC,aAAa,GAAG,SAAhBA,aAAgB,CAAC3P,KAAD;IACpB,IAAIlX,OAAO,KAAKkX,KAAK,CAAC0P,aAAN,CAAoBpiB,UAAhC,IAA8C,CAAC4f,iBAAnD,EAAsE;MACpED,UAAU,CAACjN,KAAK,CAAC0P,aAAN,CAAoBpiB,UAArB,CAAV;MACA6f,oBAAoB,CAAC,IAAD,CAApB;KAFF,MAGO;MACLA,oBAAoB,CAAC,KAAD,CAApB;;GALJ;;EAaA,IAAMyC,aAAa,GAAG,SAAhBA,aAAgB,CAAC5P,KAAD;IACpBA,KAAK,CAAChe,cAAN;IACA,IAAIktB,UAAU,GAAGnmB,OAAjB;IACA,IAAIkmB,UAAU,GAAGnmB,OAAjB;IACA,IAAI+mB,GAAG,GAAG,IAAV;;IACA,QAAQ7P,KAAK,CAAC3jB,GAAd;MACE,KAAK,MAAL;MACA,KAAK,WAAL;QACE6yB,UAAU,IAAI1qB,SAAd;QACAqrB,GAAG,GAAG,KAAN;QACA;;MACF,KAAK,IAAL;MACA,KAAK,SAAL;QACEX,UAAU,IAAI1qB,SAAd;QACAqrB,GAAG,GAAG,KAAN;QACA;;MACF,KAAK,MAAL;MACA,KAAK,WAAL;QACEZ,UAAU,IAAIlC,oBAAd;QACA;;MACF,KAAK,OAAL;MACA,KAAK,YAAL;QACEkC,UAAU,IAAIlC,oBAAd;QACA;;;IAEJ,IAAI8C,GAAJ,EAAS;MACP,IAAIZ,UAAU,GAAG,CAAjB,EAAoB;QAClBA,UAAU,GAAG,CAAb;OADF,MAEO,IAAIA,UAAU,GAAG7b,QAAjB,EAA2B;QAChC6b,UAAU,GAAG7b,QAAb;;;MAEF6Z,UAAU,CAACgC,UAAD,CAAV;KANF,MAOO;MACL,IAAIC,UAAU,GAAG,CAAjB,EAAoB;QAClBA,UAAU,GAAG,CAAb;OADF,MAEO,IAAIA,UAAU,GAAG5jB,eAAe,GAAGD,WAAnC,EAAgD;QACrD6jB,UAAU,GAAG5jB,eAAe,GAAGD,WAA/B;;;MAEF2hB,UAAU,CAACkC,UAAD,CAAV;;;IAEF/B,oBAAoB,CAAC,IAAD,CAApB;GAxCF;;EA8CA,IAAM2C,kBAAkB,GAAG,SAArBA,kBAAqB,CAACvqB,MAAD;IACzB,IAAMwqB,eAAe,GAAGjU,QAAQ,CAACpW,IAAT,CAAc,UAAAZ,CAAC;MAAA,OAAIA,CAAC,CAACO,EAAF,KAASE,MAAb;KAAf,CAAxB;IACA,IAAMyqB,eAAe,GAAGlU,QAAQ,CAACpW,IAAT,CACtB,UAAAZ,CAAC;MAAA,OAAI,CAAC,CAACwH,YAAF,IAAkBxH,CAAC,CAACO,EAAF,KAASiH,YAAY,CAACjH,EAA5C;KADqB,CAAxB;;IAGA,IAAI0kB,QAAJ,EAAc;MACZ,IAAIiG,eAAJ,EAAqB;QACnBjG,QAAQ,CAACiG,eAAD,EAAkB,KAAlB,CAAR;;;MAEF,IAAID,eAAJ,EAAqB;QACnBhG,QAAQ,CAACgG,eAAD,EAAkB,IAAlB,CAAR;;;;IAGJxjB,eAAe,CAACwjB,eAAD,CAAf;GAbF;;EAeA,IAAME,mBAAmB,GAAG,SAAtBA,mBAAsB,CAAC5wB,IAAD;IAC1B,IAAIqF,eAAe,IAAIrF,IAAI,CAACkH,YAAL,KAAsBgK,SAA7C,EAAwD;MACtD7L,eAAe,cAAMrF,IAAN;QAAYkH,YAAY,EAAE,CAAClH,IAAI,CAACkH;SAA/C;;GAFJ;;EAKA,IAAMmiB,SAAS,GAAc;IAC3BrV,WAAW,EAAE0Z,oBADc;IAE3B3Z,QAAQ,EAARA,QAF2B;IAG3BvU,KAAK,EAAEA,KAHoB;IAI3BuC,YAAY,EAAEA,YAJa;IAK3BoD,SAAS,EAATA,SAL2B;IAM3BtE,KAAK,EAAEmX,SAAS,CAACnX,KANU;IAO3BoT,UAAU,EAAVA,UAP2B;IAQ3BC,YAAY,EAAZA,YAR2B;IAS3B5K,GAAG,EAAHA,GAT2B;IAU3B6K,aAAa,EAAbA,aAV2B;IAW3BC,WAAW,EAAXA,WAX2B;IAY3BC,eAAe,EAAfA,eAZ2B;IAa3B5U,QAAQ,EAARA;GAbF;EAeA,IAAM6pB,aAAa,GAAkB;IACnCtR,SAAS,EAATA,SADmC;IAEnChX,MAAM,EAANA,MAFmC;IAGnCvB,QAAQ,EAARA,QAHmC;IAInCkC,YAAY,EAAZA,YAJmC;IAKnCqS,WAAW,EAAE0Z,oBALsB;IAMnC9rB,UAAU,EAAVA,UANmC;IAOnCC,QAAQ,EAARA,QAPmC;IAQnCyH,GAAG,EAAHA,GARmC;IASnC+K,eAAe,EAAfA,eATmC;IAUnCH,YAAY,EAAZA;GAVF;EAYA,IAAMqV,QAAQ,GAA0B;IACtC/pB,KAAK,EAAEid,QAD+B;IAEtC5b,KAAK,EAAEmX,SAAS,CAACnX,KAFqB;IAGtCukB,UAAU,EAAVA,UAHsC;IAItCnY,YAAY,EAAZA,YAJsC;IAKtC9H,SAAS,EAATA,SALsC;IAMtCmV,UAAU,EAAVA,UANsC;IAOtCtG,WAAW,EAAE0Z,oBAPyB;IAQtCnT,UAAU,EAAVA,UARsC;IAStCuF,QAAQ,EAARA,QATsC;IAUtCle,UAAU,EAAVA,UAVsC;IAWtCC,QAAQ,EAARA,QAXsC;IAYtC8H,WAAW,EAAXA,WAZsC;IAatCoK,QAAQ,EAARA,QAbsC;IActCzK,GAAG,EAAHA,GAdsC;IAetCgc,aAAa,EAAbA,aAfsC;IAgBtCC,aAAa,EAAbA,aAhBsC;IAiBtCrY,eAAe,EAAEujB,kBAjBqB;IAkBtCjL,gBAAgB,EAAEqH,oBAlBoB;IAmBtCpH,YAAY,EAAZA,YAnBsC;IAoBtCC,gBAAgB,EAAhBA,gBApBsC;IAqBtCxB,aAAa,EAAbA,aArBsC;IAsBtC3b,OAAO,EAAPA,OAtBsC;IAuBtCod,QAAQ,EAARA,QAvBsC;IAwBtCC,eAAe,EAAfA,eAxBsC;IAyBtCvR,eAAe,EAAfA,eAzBsC;IA0BtCF,aAAa,EAAbA,aA1BsC;IA2BtCC,WAAW,EAAXA,WA3BsC;IA4BtCyR,UAAU,EAAVA;GA5BF;EA+BA,IAAMgL,UAAU,GAAGjrB,OAAO,CAAC;IACzB,OAAOwf,UAAU,CAAC9E,WAAX,GACH7D,QAAQ,CAAC1W,GAAT,CAAa,UAAAN,CAAC;MAAA,OAAKA,CAAC,CAACO,EAAF,KAASof,UAAU,CAAC9E,WAAX,CAAwBta,EAAjC,GAAsCof,UAAU,CAAC9E,WAAjD,GAAgE7a,CAArE;KAAd,CADG,GAEHgX,QAFJ;GADwB,EAIvB,CAACA,QAAD,EAAW2I,UAAU,CAAC9E,WAAtB,CAJuB,CAA1B;EAMA,IAAMlP,UAAU,GAAkB;IAChCjM,SAAS,EAATA,SADgC;IAEhCrD,QAAQ,EAAEyoB,aAFsB;IAGhC3oB,UAAU,EAAVA,UAHgC;IAIhCC,QAAQ,EAARA,QAJgC;IAKhCrC,KAAK,EAAEqxB,UALyB;IAMhCzrB,SAAS,EAATA,SANgC;IAOhCrD,YAAY,EAAZA,YAPgC;IAQhCf,MAAM,EAANA,MARgC;IAShCW,YAAY,EAAZA,YATgC;IAUhC+H,OAAO,EAAPA,OAVgC;IAWhCsC,WAAW,EAAXA,WAXgC;IAYhCoB,wBAAwB,EAAExJ,QAAM,CAACmmB,mBAZD;IAahC9c,YAAY,EAAZA,YAbgC;IAchCE,WAAW,EAAXA,WAdgC;IAehCD,eAAe,EAAEujB,kBAfe;IAgBhCprB,eAAe,EAAEurB,mBAhBe;IAiBhC1M,aAAa,EAAbA,aAjBgC;IAkBhC7W,cAAc,EAAdA,cAlBgC;IAmBhCC,aAAa,EAAbA,aAnBgC;IAoBhC9H,iBAAiB,EAAjBA,iBApBgC;IAqBhC+H,aAAa,EAAbA,aArBgC;IAyBhCC,cAAc,EACZud,cAAc,CAACxgB,OAAf,IAA0B6gB,mBAAmB,IAAI,IAAjD,GACItsB,IAAI,CAACyW,GAAL,CAAS6V,mBAAT,EAA8BgB,QAA9B,CADJ,GAEIlb,SA5B0B;IA6BhCzD,iBAAiB,EAAE2e,QAAQ,KAAKjB,QAAb,GAAwBja,SAAxB,GAAoCkb,QA7BvB;IA8BhC1e,oBAAoB,EAAEge,oBA9BU;IA+BhC/d,cAAc,EAAE2d,mBA/BgB;IAgChCzd,sBAAsB,EAAE0d;GAhC1B;EAmCA,OACE7nB,mBAAA,MAAA;IAAKI,KAAK,EAAE;MAAEG,QAAQ,EAAE;;GAAxB,EACEP,mBAAA,MAAA;IACEC,SAAS,EAAEC,QAAM,CAACktB;IAClB9L,SAAS,EAAEuL;IACX5M,QAAQ,EAAE;IACVtY,GAAG,EAAEwf;GAJP,EAMGN,aAAa,IAAI7mB,mBAAA,CAACsJ,QAAD,oBAAcoE,WAAd,CANpB,EAOGmZ,aAAa,IAAIxoB,YAAY,KAAK,MAAlC,IACC2B,mBAAA,MAAA;IACEI,KAAK,EAAE;MACLL,KAAK,EAAE,MADF;MAELqP,MAAM,EAAE,YAFH;MAGLmL,eAAe,EAAE,SAHZ;MAIL1M,UAAU,EAAE,CAJP;MAKLwf,MAAM,EAAE,CALH;MAMLC,SAAS,EAAE,SANN;MAOLlpB,OAAO,EAAE,MAPJ;MAQLE,UAAU,EAAE,QARP;MASLD,cAAc,EAAE,QATX;MAULkpB,UAAU,EAAE,MAVP;MAWLpvB,QAAQ,EAAE,MAXL;MAYL6G,KAAK,EAAE,MAZF;MAaLwoB,aAAa,EAAE;;IAEjB9sB,WAAW,EAAEioB;GAhBf,iBAAA,CARJ,EA6BE3oB,mBAAA,CAAC0lB,SAAD;IACEC,SAAS,EAAEA;IACXC,aAAa,EAAEA;IACfC,QAAQ,EAAEA;IACVvd,WAAW,EAAEA;IACbtC,OAAO,EAAEA;IACTD,OAAO,EAAEA;GANX,CA7BF,EAqCG2b,UAAU,CAAC9E,WAAX,IACC5c,mBAAA,CAAC2F,OAAD;IACEM,WAAW,EAAEA;IACbxE,SAAS,EAAEA;IACXoE,kBAAkB,EAAEA;IACpBC,iBAAiB,EAAEA;IACnB5H,UAAU,EAAEA;IACZC,QAAQ,EAAEA;IACV4H,OAAO,EAAEA;IACTC,OAAO,EAAEA;IACT1J,IAAI,EAAEolB,UAAU,CAAC9E;IACjB/b,IAAI,EAAE6gB,UAAU,CAAC7gB;IACjB5C,YAAY,EAAEA;IACdiI,aAAa,EAAEA;IACfC,cAAc,EAAEA;IAChBP,GAAG,EAAEA;IACLyK,QAAQ,EAAEA;IACVjK,UAAU,EACRsb,UAAU,CAAClF,MAAX,KAAsB,MAAtB,IACAkF,UAAU,CAAClF,MAAX,KAAsB,OADtB,IAEAkF,UAAU,CAAClF,MAAX,KAAsB,KAFtB,IAGAkF,UAAU,CAAClF,MAAX,KAAsB;GApB1B,CAtCJ,EA8DExc,mBAAA,CAACoI,cAAD;IACEG,eAAe,EAAEA;IACjBD,WAAW,EAAEA;IACbrK,YAAY,EAAEA;IACdoK,MAAM,EAAErC;IACRwC,QAAQ,EAAEkkB;IACV9mB,GAAG,EAAEA;GANP,CA9DF,CADF,EAwEG6kB,YAAY,IACXzqB,mBAAA,MAAA;IACEI,KAAK,EAAE;MACLG,QAAQ,EAAE,UADL;MAELqD,GAAG,EAAE,CAFA;MAGLC,IAAI,EAAE,CAHD;MAILoU,KAAK,EAAE,CAJF;MAKLwV,MAAM,EAAE,CALH;MAMLlT,eAAe,EAAE,2BANZ;MAOLnW,OAAO,EAAE,MAPJ;MAQLC,cAAc,EAAE,QARX;MASLC,UAAU,EAAE,QATP;MAULopB,GAAG,EAAE,MAVA;MAWLL,MAAM,EAAE,IAXH;MAYL9H,aAAa,EAAE,MAZV;MAaLoI,YAAY,EAAE;;GAdlB,EAiBE3tB,mBAAA,OAAA;IACEI,KAAK,EAAE;MACLjC,QAAQ,EAAE,MADL;MAELyvB,UAAU,EAAE,KAFP;MAGL5oB,KAAK,EAAE,SAHF;MAIL9G,UAAU,EAAE;;GALhB,cAAA,CAjBF,EA2BE8B,mBAAA,MAAA;IAAKC,SAAS,EAAEC,QAAM,CAAC2tB;GAAvB,CA3BF,CAzEJ,EAuGE7tB,mBAAA,MAAA;IAAKI,KAAK,EAAE;MAAEgE,OAAO,EAAE;;GAAvB,EACGyiB,aAAa,IACZ7mB,mBAAA,MAAA;IACE2H,GAAG,EAAEmgB;IACL7nB,SAAS,EAAE6tB,aAAa,CAACtH;IACzBpmB,KAAK,EAAE;MAAEL,KAAK,EAAEmG,aAAa,GAAG,CAAzB;MAA4B2H,UAAU,EAAE;;IAC/CrF,QAAQ,EAAE,kBAACxJ,CAAD;MACR,IAAI6oB,2BAA2B,CAAChhB,OAAhC,EAAyC;QACvCghB,2BAA2B,CAAChhB,OAA5B,CAAoC0D,UAApC,GAAiDvL,CAAC,CAAC2tB,aAAF,CAAgBpiB,UAAjE;;;GANN,EAUEvK,mBAAA,MAAA;IAAKI,KAAK,EAAE;MAAEL,KAAK,EAAEgoB;;GAArB,CAVF,CAFJ,EAeE/nB,mBAAA,MAAA;IAAKI,KAAK,EAAE;MAAE2tB,IAAI,EAAE,CAAR;MAAW1tB,QAAQ,EAAE;;GAAjC,EACEL,mBAAA,CAACsmB,gBAAD;IACEjW,QAAQ,EAAEA;IACVnK,aAAa,EAAE;IACfmC,MAAM,EAAEtC;IACRH,GAAG,EAAEA;IACL4C,QAAQ,EAAEokB;GALZ,CADF,CAfF,CAvGF,CADF;AAmID,CAn5BM;AAs5BP,SAAgBoB,0BACdC,QACAC,SACAC;EAEA,IAAI,CAACD,OAAO,CAACD,MAAD,CAAZ,EAAsB,OAAO,IAAP;EACtB,IAAIC,OAAO,CAACD,MAAD,CAAP,CAAgBG,QAApB,EAA8B,OAAO,IAAP;;EAC9B,IAAIF,OAAO,CAACD,MAAD,CAAP,CAAgBI,OAApB,EAA6B;IAC3BlK,OAAO,CAACmK,GAAR,CAAY,qBAAqBL,MAAjC;IACA,OAAO,KAAP;;;EAGFC,OAAO,CAACD,MAAD,CAAP,CAAgBI,OAAhB,GAA0B,IAA1B;EAEA,IAAI/xB,IAAI,GAAS4xB,OAAO,CAACD,MAAD,CAAP,CAAgB3xB,IAAjC;EACA,IAAIA,IAAI,CAAC2c,YAAT,EACE,KAAK,IAAI/I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5T,IAAI,CAAC2c,YAAL,CAAkBjO,MAAtC,EAA8CkF,CAAC,EAA/C,EAAmD;IACjD,IAAIqe,UAAU,GAAGP,yBAAyB,CACxC1xB,IAAI,CAAC2c,YAAL,CAAkB/I,CAAlB,EAAqB5N,EADmB,EAExC4rB,OAFwC,EAGxCC,cAHwC,CAA1C;IAKA,IAAI,CAACI,UAAL,EAAiB,OAAO,KAAP;;EAGrBL,OAAO,CAACD,MAAD,CAAP,CAAgBG,QAAhB,GAA2B,IAA3B;EAEAD,cAAc,CAAC/wB,IAAf,CAAoB6wB,MAApB;EACA,OAAO,IAAP;AACD;AACD,SAAgBhD,iBAAiBvpB;EAQ/BA,SAAS,GAAGA,SAAS,CAAC0K,MAAV,CACV,UAAArK,CAAC;IAAA,OACCA,CAAC,CAAClB,IAAF,KAAW,WAAX,KACCkB,CAAC,CAAC7F,KAAF,CAAQC,OAAR,OAAsB,CAAtB,IAA2B4F,CAAC,CAAC1F,GAAF,CAAMF,OAAN,OAAoB,CADhD,CADD;GADS,CAAZ;EAQA,IAAI+xB,OAAO,GAAG,EAAd;;EACA,KAAK,IAAIhe,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxO,SAAS,CAACsJ,MAA9B,EAAsCkF,CAAC,EAAvC;IACEge,OAAO,CAACxsB,SAAS,CAACwO,CAAD,CAAT,CAAa5N,EAAd,CAAP,GAA2B;MAAEhG,IAAI,EAAEoF,SAAS,CAACwO,CAAD;KAA5C;;;EAIF,IAAIie,cAAc,GAAa,EAA/B;;EACA,KAAK,IAAIje,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGxO,SAAS,CAACsJ,MAA9B,EAAsCkF,EAAC,EAAvC,EAA2C;IACzC,IAAIqe,UAAU,GAAGP,yBAAyB,CACxCtsB,SAAS,CAACwO,EAAD,CAAT,CAAa5N,EAD2B,EAExC4rB,OAFwC,EAGxCC,cAHwC,CAA1C;IAKA,IAAI,CAACI,UAAL,EAAiB,OAAO,CAAC,EAAD,EAAK,EAAL,CAAP;;;EAMnB,KAAK,IAAIre,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGxO,SAAS,CAACsJ,MAA9B,EAAsCkF,GAAC,EAAvC;IACEge,OAAO,CAACxsB,SAAS,CAACwO,GAAD,CAAT,CAAa5N,EAAd,CAAP,CAAyBksB,UAAzB,GAAsC,EAAtC;;;EACF,KAAK,IAAIte,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGxO,SAAS,CAACsJ,MAA9B,EAAsCkF,GAAC,EAAvC,EAA2C;IACzC,IAAI5T,IAAI,GAAGoF,SAAS,CAACwO,GAAD,CAApB;IACA,IAAI5T,IAAI,CAAC2c,YAAT,EACE,KAAK,IAAI5D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG/Y,IAAI,CAAC2c,YAAL,CAAkBjO,MAAtC,EAA8CqK,CAAC,EAA/C;MAAA;;MACE,yBAAA6Y,OAAO,CAAC5xB,IAAI,CAAC2c,YAAL,CAAkB5D,CAAlB,EAAqB/S,EAAtB,CAAP,gFAAkCksB,UAAlC,CAA6CpxB,IAA7C,CAAkDd,IAAI,CAACgG,EAAvD;;;;EAKN,KAAK,IAAI4N,GAAC,GAAG,CAAAie,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEnjB,MAAhB,IAAyB,CAAtC,EAAyCkF,GAAC,IAAI,CAA9C,EAAiDA,GAAC,EAAlD;IACEue,mBAAmB,CAACN,cAAc,CAACje,GAAD,CAAf,EAAoBge,OAApB,CAAnB;;;EAMF,IAAIQ,aAAa,GAAG,EAApB;;EACA,KAAK,IAAIxe,GAAC,GAAG,CAAb,EAAgBA,GAAC,IAAGie,cAAH,aAAGA,cAAH,uBAAGA,cAAc,CAAEnjB,MAAnB,CAAjB,EAA4CkF,GAAC,EAA7C,EAAiD;IAC/C,KAAK,IAAImF,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG6Y,OAAO,CAACC,cAAc,CAACje,GAAD,CAAf,CAAP,CAA2Bye,KAA3B,CAAiC3jB,MAArD,EAA6DqK,EAAC,EAA9D,EAAkE;MAChEqZ,aAAa,CAACtxB,IAAd,CAAmB8wB,OAAO,CAACC,cAAc,CAACje,GAAD,CAAf,CAAP,CAA2Bye,KAA3B,CAAiCtZ,EAAjC,CAAnB;;;;EAYJ,IAAIqZ,aAAa,CAAC1jB,MAAd,GAAuB,CAA3B,EAA8B;IAI5B0jB,aAAa,CAAC5D,IAAd,CAAmB,UAACtG,CAAD,EAAIoK,CAAJ;MAAA,OAAUA,CAAC,CAACC,QAAF,GAAarK,CAAC,CAACqK,QAAzB;KAAnB;IAGA,IAAIC,WAAW,GAAGJ,aAAa,CAAC,CAAD,CAAb,CAAiBK,MAAnC;IACA,IAAI7D,WAAW,GAAG,EAAlB;;IAEA,OAAO4D,WAAW,KAAKthB,SAAvB,EAAkC;MAGhC0d,WAAW,CAAC9tB,IAAZ,CAAiB8wB,OAAO,CAACY,WAAD,CAAP,CAAqBxyB,IAAtC;;MAGA,IAAI4xB,OAAO,CAACY,WAAD,CAAP,CAAqBH,KAArB,CAA2B3jB,MAA3B,KAAsC,CAA1C,EAA6C;QAC3C8jB,WAAW,GAAGthB,SAAd;QACA;;;MAIF,IAAIwhB,eAAe,GAAGd,OAAO,CAACY,WAAD,CAAP,CAAqBH,KAArB,CAA2B,CAA3B,EAA8BE,QAApD;MACA,IAAII,QAAQ,GAAGf,OAAO,CAACY,WAAD,CAAP,CAAqBH,KAArB,CAA2B,CAA3B,CAAf;;MACA,KAAK,IAAIze,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGge,OAAO,CAACY,WAAD,CAAP,CAAqBH,KAArB,CAA2B3jB,MAA/C,EAAuDkF,GAAC,EAAxD,EAA4D;QAC1D,IAAIgf,WAAW,GAAGhB,OAAO,CAACY,WAAD,CAAP,CAAqBH,KAArB,CAA2Bze,GAA3B,EAA8B2e,QAAhD;;QACA,IAAIK,WAAW,GAAGF,eAAlB,EAAmC;UACjCC,QAAQ,GAAGf,OAAO,CAACY,WAAD,CAAP,CAAqBH,KAArB,CAA2Bze,GAA3B,CAAX;UACA8e,eAAe,GAAGE,WAAlB;;;;MAKJD,QAAQ,CAACE,OAAT,GAAmB,IAAnB;MAGAL,WAAW,GAAGG,QAAQ,CAAC3yB,IAAvB;;;IAMF,IAAI8yB,aAAa,GAAGV,aAAa,CAAC,CAAD,CAAb,CAAiBK,MAArC;;IAEA,KAAK,IAAI7e,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGwe,aAAa,CAAC1jB,MAAlC,EAA0CkF,GAAC,EAA3C,EAA+C;MAC7C,IAAI,CAACwe,aAAa,CAACxe,GAAD,CAAb,CAAiBif,OAAtB,EAA+B;QAC7BC,aAAa,GAAGV,aAAa,CAACxe,GAAD,CAAb,CAAiB6e,MAAjC;QACA;;;;IAIJ,IAAI5D,aAAa,GAAG,EAApB;;IAEA,OAAOiE,aAAa,KAAK5hB,SAAzB,EAAoC;MAGlC2d,aAAa,CAAC/tB,IAAd,CAAmB8wB,OAAO,CAACkB,aAAD,CAAP,CAAuB9yB,IAA1C;;MAGA,IAAI4xB,OAAO,CAACkB,aAAD,CAAP,CAAuBT,KAAvB,CAA6B3jB,MAA7B,KAAwC,CAA5C,EAA+C;QAC7CokB,aAAa,GAAG5hB,SAAhB;QACA;;;MAIF,IAAI6hB,iBAAiB,GAAGnB,OAAO,CAACkB,aAAD,CAAP,CAAuBT,KAAvB,CAA6B,CAA7B,EAAgCE,QAAxD;MACA,IAAII,SAAQ,GAAGf,OAAO,CAACkB,aAAD,CAAP,CAAuBT,KAAvB,CAA6B,CAA7B,CAAf;MAGA,IAAIM,SAAQ,CAACE,OAAb,EAAsBE,iBAAiB,GAAG,CAApB;;MAEtB,KAAK,IAAInf,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGge,OAAO,CAACkB,aAAD,CAAP,CAAuBT,KAAvB,CAA6B3jB,MAAjD,EAAyDkF,GAAC,EAA1D,EAA8D;QAC5D,IAAIgf,YAAW,GAAGhB,OAAO,CAACkB,aAAD,CAAP,CAAuBT,KAAvB,CAA6Bze,GAA7B,EAAgC2e,QAAlD;;QAEA,IAAIK,YAAW,GAAGG,iBAAd,IAAmC,CAACnB,OAAO,CAACkB,aAAD,CAAP,CAAuBT,KAAvB,CAA6Bze,GAA7B,EAAgCif,OAAxE,EAAiF;UAC/EF,SAAQ,GAAGf,OAAO,CAACkB,aAAD,CAAP,CAAuBT,KAAvB,CAA6Bze,GAA7B,CAAX;UACAmf,iBAAiB,GAAGH,YAApB;;;;MAKJ,IAAID,SAAQ,CAACE,OAAb,EAAsB;QACpB;;;MAIFF,SAAQ,CAACE,OAAT,GAAmB,IAAnB;MAGAC,aAAa,GAAGH,SAAQ,CAAC3yB,IAAzB;;;IAIF,OAAO,CAAC4uB,WAAD,EAAcC,aAAd,CAAP;;;EAGF,OAAO,CAAC,EAAD,EAAK,EAAL,CAAP;AACD;AAED,SAAgBsD,oBAAoBR,QAAgBC;EAClD,IAAI5xB,IAAI,GAAS4xB,OAAO,CAACD,MAAD,CAAP,CAAgB3xB,IAAjC;EACA,IAAIkyB,UAAU,GAAGN,OAAO,CAACD,MAAD,CAAP,CAAgBO,UAAjC;EAEAN,OAAO,CAACD,MAAD,CAAP,CAAgB/xB,KAAhB,GAAwBI,IAAI,CAACJ,KAAL,CAAWC,OAAX,EAAxB;EACA+xB,OAAO,CAACD,MAAD,CAAP,CAAgB5xB,GAAhB,GAAsBC,IAAI,CAACD,GAAL,CAASF,OAAT,EAAtB;EACA+xB,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,GAAwB,EAAxB;;EACA,KAAK,IAAItZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmZ,UAAU,CAACxjB,MAA/B,EAAuCqK,CAAC,EAAxC,EAA4C;IAE1C,IAAIia,QAAQ,GAAGpB,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4BJ,KAA5B,CAAkCC,OAAlC,EAAf;IACA,IAAIozB,MAAM,GAAGrB,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4BD,GAA5B,CAAgCF,OAAhC,EAAb;IAGA,IAAIqzB,WAAW,GAAGD,MAAM,GAAGD,QAA3B;IAGA,IAAIG,SAAS,GAAGr0B,IAAI,CAACC,KAAL,CAAW,CAAEi0B,QAAQ,GAAG,QAAZ,GAAwB,CAAzB,IAA8B,CAAzC,CAAhB;IACA,IAAII,OAAO,GAAGt0B,IAAI,CAACC,KAAL,CAAW,CAAEk0B,MAAM,GAAG,QAAV,GAAsB,CAAvB,IAA4B,CAAvC,CAAd;IACA,IAAII,OAAO,GAAG,CAAd;;IAEA,IAAIzB,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAAhC,EAA0C;MAGxC,IAAI8a,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCtE,QAArC,IAAiDof,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCtE,QAArC,CAA8C9D,MAAnG,EAA2G;QACzG,KAAK,IAAI4B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGshB,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCtE,QAArC,CAA8C9D,MAAlD,IAA4D,CAA5E,EAA+E4B,CAAC,EAAhF,EAAoF;UAClF,KAAK,IAAIpB,CAAC,GAAGikB,SAAb,EAAwBjkB,CAAC,IAAIkkB,OAA7B,EAAsClkB,CAAC,EAAvC,EAA2C;YACzC,IAAIokB,YAAY,GAAG1B,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCtE,QAArC,CAA8ClC,CAA9C,CAAnB;YAEA,IAAIijB,MAAM,GAAG,YAAa,IAAIrkB,CAAJ,GAAQ,CAAT,GAAcokB,YAA1B,CAAb;;YAEA,IAAIC,MAAM,IAAIP,QAAV,IAAsBO,MAAM,IAAIN,MAAhC,KAA2CM,MAAM,GAAG3B,OAAO,CAACD,MAAD,CAAP,CAAgB5xB,GAAzB,IAAgC6xB,OAAO,CAACD,MAAD,CAAP,CAAgB3xB,IAAhB,CAAqB8W,QAArB,CAA8BtE,QAA9B,CAAuCpL,QAAvC,CAAgDksB,YAAhD,CAA3E,CAAJ,EAA+I;cAE7ID,OAAO,IAAI,QAAX;;;;;;MAOR,IAAIzB,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCxE,QAArC,IAAiDsf,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCxE,QAArC,CAA8C5D,MAAnG,EAA2G;QACzG,KAAK,IAAI8kB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5B,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCxE,QAArC,CAA8C5D,MAAlD,IAA4D,CAA5E,EAA+E8kB,CAAC,EAAhF,EAAoF;UAElF,IAAIC,OAAO,GAAG7B,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuB/Y,IAAvB,CAA4B8W,QAA5B,CAAqCxE,QAArC,CAA8CkhB,CAA9C,CAAd;;UAEA,IAAIC,OAAO,IAAIT,QAAX,IAAuBS,OAAO,IAAIR,MAAtC,EAA8C;YAE5CI,OAAO,IAAI,QAAX;;;;;;IAOR,IAAIK,OAAO,GAAG50B,IAAI,CAAC4M,GAAL,CAAUkmB,OAAO,CAACD,MAAD,CAAP,CAAgB5xB,GAAhB,GAAsBizB,QAAhC,EAA2C,CAA3C,CAAd;IAGA,IAAIX,KAAK,GAAGT,OAAO,CAACM,UAAU,CAACnZ,CAAD,CAAX,CAAP,CAAuBsZ,KAAnC;;IACA,IAAIA,KAAK,IAAIA,KAAK,CAAC3jB,MAAnB,EAA2B;MACzB,KAAK,IAAIilB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGtB,KAAK,CAAC3jB,MAA1B,EAAkCilB,CAAC,EAAnC,EAAuC;QAErC,IAAIC,aAAa,GAAGhC,OAAO,CAACD,MAAD,CAAP,CAAgB5xB,GAAhB,GAAsB6xB,OAAO,CAACD,MAAD,CAAP,CAAgB/xB,KAAtC,GAA8C8zB,OAA9C,GAAwDL,OAAxD,GAAkEhB,KAAK,CAACsB,CAAD,CAAL,CAASpB,QAA/F;;QAEA,IAAIX,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB3jB,MAAtB,GAA+B,CAAnC,EAAsC;UACpCkjB,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsBvxB,IAAtB,CAA2B;YACzByxB,QAAQ,EAAEqB,aADe;YAEzB5zB,IAAI,EAAEkyB,UAAU,CAACnZ,CAAD,CAFS;YAGzB0Z,MAAM,EAAEd,MAHiB;YAIzBkB,OAAO,EAAE;WAJX;SADF,MAOO,IAAIe,aAAa,GAAGhC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAA7C,EAAuD;UAC5DX,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAAzB,GAAoCqB,aAApC;UACAhC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBryB,IAAzB,GAAgCkyB,UAAU,CAACnZ,CAAD,CAA1C;UACA6Y,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBI,MAAzB,GAAkCd,MAAlC;UACAC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBQ,OAAzB,GAAmC,KAAnC;SAJK,MAKA,IAAIe,aAAa,GAAGhC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAA7C,EAAuD;UAC5DX,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAAzB,GAAoCqB,aAApC;UACAhC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBryB,IAAzB,GAAgCkyB,UAAU,CAACnZ,CAAD,CAA1C;UACA6Y,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBI,MAAzB,GAAkCd,MAAlC;UACAC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBQ,OAAzB,GAAmC,KAAnC;;;KArBN,MAyBO;MAGL,IAAIgB,sBAAsB,GAAGjC,OAAO,CAACD,MAAD,CAAP,CAAgB5xB,GAAhB,GAAsB6xB,OAAO,CAACD,MAAD,CAAP,CAAgB/xB,KAAtC,GAA8CszB,WAA9C,GAA4DQ,OAA5D,GAAsEL,OAAnG;;MAGA,IAAIzB,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB3jB,MAAtB,GAA+B,CAAnC,EAAsC;QACpCkjB,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsBvxB,IAAtB,CAA2B;UACzByxB,QAAQ,EAAEsB,sBADe;UAEzB7zB,IAAI,EAAEkyB,UAAU,CAACnZ,CAAD,CAFS;UAGzB0Z,MAAM,EAAEd,MAHiB;UAIzBkB,OAAO,EAAE;SAJX;OADF,MAOO,IAAIgB,sBAAsB,GAAGjC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAAtD,EAAgE;QACrEX,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAAzB,GAAoCsB,sBAApC;QACAjC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBryB,IAAzB,GAAgCkyB,UAAU,CAACnZ,CAAD,CAA1C;QACA6Y,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBI,MAAzB,GAAkCd,MAAlC;QACAC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBQ,OAAzB,GAAmC,KAAnC;OAJK,MAKA,IAAIgB,sBAAsB,GAAGjC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAAtD,EAAgE;QACrEX,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBE,QAAzB,GAAoCsB,sBAApC;QACAjC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBryB,IAAzB,GAAgCkyB,UAAU,CAACnZ,CAAD,CAA1C;QACA6Y,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBI,MAAzB,GAAkCd,MAAlC;QACAC,OAAO,CAACD,MAAD,CAAP,CAAgBU,KAAhB,CAAsB,CAAtB,EAAyBQ,OAAzB,GAAmC,KAAnC;;;;AAIP;AAED,SAAgB/D,WAAWtvB;EACzBA,KAAK,CAACwQ,OAAN,CAAc,UAAAhQ,IAAI;IAChB,IAAIA,IAAI,CAAC4D,MAAT,EAAiB,OAAO5D,IAAI,CAAC4D,MAAL,CAAYwe,iBAAnB;IACjB,OAAOpiB,IAAI,CAACwoB,kBAAZ;GAFF;AAID;AAED,SAAgBuG,UAAUrU,MAAchS,OAAelJ,OAAcwoB;EAEnE,KAAK,IAAIpU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8G,IAAI,CAAChM,MAAzB,EAAiCkF,CAAC,EAAlC,EAAsC;IAEpC,IAAIkgB,eAAe,GAAG,CAAtB;IACA,IAAIC,WAAW,SAAf;;IACA,KAAK,IAAIhb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvZ,KAAK,CAACkP,MAA1B,EAAkCqK,CAAC,EAAnC,EAAuC;MACrC,IAAI2B,IAAI,CAAC9G,CAAD,CAAJ,CAAQ5N,EAAR,KAAexG,KAAK,CAACuZ,CAAD,CAAL,CAAS/S,EAA5B,EAAgC;QAC9B+tB,WAAW,GAAGv0B,KAAK,CAACuZ,CAAD,CAAnB;QACA;;;MAEF,IACE2B,IAAI,CAAC9G,CAAD,CAAJ,CAAQ5N,EAAR,CAAWguB,UAAX,CAAsBx0B,KAAK,CAACuZ,CAAD,CAAL,CAAS/S,EAAT,GAAc,GAApC,KACAxG,KAAK,CAACuZ,CAAD,CAAL,CAAS/S,EAAT,CAAY0I,MAAZ,GAAqBolB,eAFvB,EAGE;QACAA,eAAe,GAAGt0B,KAAK,CAACuZ,CAAD,CAAL,CAAS/S,EAAT,CAAY0I,MAA9B;QACAqlB,WAAW,GAAGv0B,KAAK,CAACuZ,CAAD,CAAnB;;;;IAIJ,IAAIgb,WAAJ,EAAiB;MAAA;;MACf,IAAInwB,OAAM,0BAAGmwB,WAAW,CAACnwB,MAAf,kCAAyB,EAAnC;;MACAA,OAAM,CAACwe,iBAAP,GAA2B1Z,KAA3B;MACAqrB,WAAW,CAACnwB,MAAZ,GAAqBA,OAArB;;;;6BAIKgQ;IAEP,IAAIqgB,aAAa,SAAjB;;IACA,KAAK,IAAIlb,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGvZ,KAAK,CAACkP,MAA1B,EAAkCqK,GAAC,EAAnC;MACE,IAAI2B,IAAI,CAAC9G,GAAD,CAAJ,CAAQ5N,EAAR,KAAexG,KAAK,CAACuZ,GAAD,CAAL,CAAS/S,EAA5B,EAAgC;QAC9BiuB,aAAa,GAAGz0B,KAAK,CAACuZ,GAAD,CAArB;QACA;;;;IAEJ,IAAIkb,aAAJ,EAAmB;MACjB,IAAIC,MAAM,GAAGD,aAAa,CAACzL,kBAA3B;MAEA,IAAI,CAAC0L,MAAL,EAAaA,MAAM,GAAG,EAAT;MAEb,IAAIzL,KAAK,GAAGyL,MAAM,CAAC7tB,IAAP,CAAY,UAAAoiB,KAAK;QAAA,OAAIA,KAAK,CAACviB,MAAN,KAAiBwU,IAAI,CAAC9G,GAAC,GAAG,CAAL,CAAJ,CAAY5N,EAAjC;OAAjB,CAAZ;;MACA,IAAIyiB,KAAJ,EAAW;QACTA,KAAK,CAAClO,UAAN,GAAmB7R,KAAnB;QACA+f,KAAK,CAACT,gBAAN,GAAyBA,gBAAzB;OAFF,MAKKkM,MAAM,CAACpzB,IAAP,CAAY;QAAEoF,MAAM,EAAEwU,IAAI,CAAC9G,GAAC,GAAG,CAAL,CAAJ,CAAY5N,EAAtB;QAA0BuU,UAAU,EAAE7R,KAAtC;QAA6Csf,gBAAgB,EAAEA;OAA3E;;MACLiM,aAAa,CAACzL,kBAAd,GAAmC0L,MAAnC;;;;EApBJ,KAAK,IAAItgB,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG,CAAJ,GAAQ8G,IAAI,CAAChM,MAA7B,EAAqCkF,GAAC,EAAtC,EAA0C;IAAA,MAAjCA,GAAiC;;AAuB3C;AACD,AAAO,IAAMrN,YAAY,GAAG,SAAfA,YAAe,CAAC4tB,GAAD;EAC1B,IAAMvS,QAAQ,GAAGuS,GAAG,CAACtiB,KAAJ,CAAU,GAAV,CAAjB;EACA,IAAI+P,QAAQ,CAAClT,MAAT,IAAmB,CAAvB,EAA0B,OAAOwC,SAAP;EAC1B,OAAO0Q,QAAQ,CAACwS,KAAT,CAAe,CAAf,EAAkB,CAAC,CAAnB,EAAsBtV,IAAtB,CAA2B,GAA3B,CAAP;AACD,CAJM;;;;"}