{"version":3,"file":"worktile-gantt.mjs","sources":["../../../packages/gantt/src/class/view-tick.ts","../../../packages/gantt/src/class/event.ts","../../../packages/gantt/src/utils/date.ts","../../../packages/gantt/src/class/link.ts","../../../packages/gantt/src/class/item.ts","../../../packages/gantt/src/class/group.ts","../../../packages/gantt/src/class/view-type.ts","../../../packages/gantt/src/class/baseline.ts","../../../packages/gantt/src/utils/helpers.ts","../../../packages/gantt/src/gantt-dom.service.ts","../../../packages/gantt/src/i18n/i18n.ts","../../../packages/gantt/src/i18n/locales/zh-hans.ts","../../../packages/gantt/src/i18n/locales/zh-hant.ts","../../../packages/gantt/src/gantt.config.ts","../../../packages/gantt/src/i18n/locales/en-us.ts","../../../packages/gantt/src/i18n/locales/ja-jp.ts","../../../packages/gantt/src/i18n/locales/de-de.ts","../../../packages/gantt/src/i18n/locales/ru-ru.ts","../../../packages/gantt/src/i18n/index.ts","../../../packages/gantt/src/views/view.ts","../../../packages/gantt/src/views/day.ts","../../../packages/gantt/src/views/hour.ts","../../../packages/gantt/src/views/month.ts","../../../packages/gantt/src/views/quarter.ts","../../../packages/gantt/src/views/week.ts","../../../packages/gantt/src/views/year.ts","../../../packages/gantt/src/views/factory.ts","../../../packages/gantt/src/gantt-upper.ts","../../../packages/gantt/src/gantt-drag-container.ts","../../../packages/gantt/src/utils/drag-scroll.ts","../../../packages/gantt/src/utils/passive-listeners.ts","../../../packages/gantt/src/components/bar/bar-drag.ts","../../../packages/gantt/src/gantt.styles.ts","../../../packages/gantt/src/gantt-item-upper.ts","../../../packages/gantt/src/components/bar/bar.component.ts","../../../packages/gantt/src/components/bar/bar.component.html","../../../packages/gantt/src/components/bar/placeholder.component.ts","../../../packages/gantt/src/components/baseline/baseline.component.ts","../../../packages/gantt/src/components/baseline/baseline.component.html","../../../packages/gantt/src/components/calendar/grid/calendar-grid.component.ts","../../../packages/gantt/src/components/calendar/grid/calendar-grid.component.html","../../../packages/gantt/src/components/calendar/header/calendar-header.component.ts","../../../packages/gantt/src/components/calendar/header/calendar-header.component.html","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.ts","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.html","../../../packages/gantt/src/components/loader/loader.component.ts","../../../packages/gantt/src/components/range/range.component.ts","../../../packages/gantt/src/components/range/range.component.html","../../../packages/gantt/src/gantt-sync-scroll.service.ts","../../../packages/gantt/src/directives/sync-scroll.directive.ts","../../../packages/gantt/src/components/scrollbar/scrollbar.component.ts","../../../packages/gantt/src/components/scrollbar/scrollbar.component.html","../../../packages/gantt/src/components/toolbar/toolbar.component.ts","../../../packages/gantt/src/components/toolbar/toolbar.component.html","../../../packages/gantt/src/gantt-print.service.ts","../../../packages/gantt/src/gantt.pipe.ts","../../../packages/gantt/src/components/links/lines/line.ts","../../../packages/gantt/src/components/links/lines/curve.ts","../../../packages/gantt/src/components/links/lines/straight.ts","../../../packages/gantt/src/components/links/lines/factory.ts","../../../packages/gantt/src/components/links/links.component.ts","../../../packages/gantt/src/components/links/links.component.html","../../../packages/gantt/src/components/icon/icons.ts","../../../packages/gantt/src/components/icon/icon.component.ts","../../../packages/gantt/src/components/main/gantt-main.component.ts","../../../packages/gantt/src/components/main/gantt-main.component.html","../../../packages/gantt/src/gantt-abstract.ts","../../../packages/gantt/src/utils/set-style-with-vendor-prefix.ts","../../../packages/gantt/src/components/table/header/gantt-table-header.component.ts","../../../packages/gantt/src/components/table/header/gantt-table-header.component.html","../../../packages/gantt/src/components/table/body/gantt-table-body.component.ts","../../../packages/gantt/src/components/table/body/gantt-table-body.component.html","../../../packages/gantt/src/root.component.ts","../../../packages/gantt/src/root.component.html","../../../packages/gantt/src/table/gantt-column.component.ts","../../../packages/gantt/src/table/gantt-table.component.ts","../../../packages/gantt/src/gantt.component.ts","../../../packages/gantt/src/gantt.component.html","../../../packages/gantt/src/gantt.module.ts","../../../packages/gantt/src/public-api.ts","../../../packages/gantt/src/worktile-gantt.ts"],"sourcesContent":["import { GanttDate } from '../utils/date';\n\ninterface GanttViewTickSchema {\n    date: GanttDate;\n\n    rect: {\n        x: number;\n        width: number;\n        background?: string;\n    };\n    label: {\n        text: string;\n        y: number | string;\n        x?: number;\n        style?: {\n            color?: string;\n            fontSize?: number | string;\n            fontWeight?: string | number;\n        };\n    };\n    metadata?: {\n        isWeekend?: boolean;\n        isToday?: boolean;\n        [key: string]: any;\n    };\n}\n\nexport class GanttViewTick {\n    constructor(private schema: GanttViewTickSchema) {\n        if (!schema.label.x) {\n            schema.label.x = schema.rect.x + schema.rect.width / 2;\n        }\n    }\n\n    get date(): GanttDate {\n        return this.schema.date;\n    }\n\n    get rect(): GanttViewTickSchema['rect'] {\n        return this.schema.rect;\n    }\n\n    get label(): GanttViewTickSchema['label'] {\n        return this.schema.label;\n    }\n\n    get metadata(): GanttViewTickSchema['metadata'] {\n        return this.schema.metadata;\n    }\n}\n","import { NgxGanttTableColumnComponent } from '../table/gantt-column.component';\nimport { GanttItem } from './item';\nimport { GanttLinkType } from './link';\n\nexport class GanttDragEvent<T = unknown> {\n    item: GanttItem<T>;\n}\n\nexport class GanttTableEvent {\n    columns: ReadonlyArray<NgxGanttTableColumnComponent>;\n}\n\nexport class GanttLinkDragEvent<T = unknown> {\n    source: GanttItem<T>;\n    target?: GanttItem<T>;\n    type?: GanttLinkType;\n}\n\nexport class GanttLoadOnScrollEvent {\n    start: number;\n    end: number;\n}\n\nexport class GanttLineClickEvent<T = unknown> {\n    event: MouseEvent;\n    source: GanttItem<T>;\n    target: GanttItem<T>;\n}\n\nexport class GanttBarClickEvent<T = unknown> {\n    event: Event;\n    item: GanttItem<T>;\n}\n\nexport class GanttTableItemClickEvent<T = unknown> {\n    event: Event;\n    current?: GanttItem<T>;\n}\n\nexport class GanttSelectedEvent<T = unknown> extends GanttTableItemClickEvent<T> {\n    selectedValue: GanttItem<T> | GanttItem<T>[];\n}\n\nexport class GanttTableDragDroppedEvent<T = unknown> {\n    source: GanttItem<T>;\n    sourceParent: GanttItem<T>;\n    target: GanttItem<T>;\n    targetParent: GanttItem<T>;\n    dropPosition: GanttTableDropPosition;\n}\n\nexport class GanttTableDragStartedEvent<T = unknown> {\n    source: GanttItem<T>;\n    sourceParent: GanttItem<T>;\n}\n\nexport class GanttTableDragEndedEvent<T = unknown> {\n    source: GanttItem<T>;\n    sourceParent: GanttItem<T>;\n}\n\nexport type GanttTableDropPosition = 'before' | 'inside' | 'after';\n\nexport class GanttTableDragEnterPredicateContext<T = unknown> {\n    source: GanttItem<T>;\n    target: GanttItem<T>;\n    dropPosition: GanttTableDropPosition;\n}\n\nexport class GanttVirtualScrolledIndexChangeEvent {\n    index: number;\n    renderedRange: {\n        start: number;\n        end: number;\n    };\n    count: number;\n}\n","import {\n    addDays,\n    addHours,\n    addMinutes,\n    addMonths,\n    addQuarters,\n    addSeconds,\n    addWeeks,\n    addYears,\n    differenceInCalendarDays,\n    endOfDay,\n    endOfMonth,\n    endOfQuarter,\n    endOfWeek,\n    endOfYear,\n    format,\n    fromUnixTime,\n    getDaysInMonth,\n    getUnixTime,\n    getWeek,\n    isToday,\n    isWeekend,\n    setDate,\n    startOfDay,\n    startOfMonth,\n    startOfQuarter,\n    startOfWeek,\n    startOfYear,\n    startOfMinute,\n    startOfHour,\n    endOfHour,\n    endOfMinute,\n    Locale\n} from 'date-fns';\nimport type { FirstWeekContainsDate } from 'date-fns';\nimport { TZDate } from '@date-fns/tz';\n\nexport {\n    Locale,\n    addDays,\n    addHours,\n    addMinutes,\n    addMonths,\n    addQuarters,\n    addSeconds,\n    addWeeks,\n    addYears,\n    differenceInCalendarDays,\n    differenceInCalendarQuarters,\n    differenceInDays,\n    eachDayOfInterval,\n    eachMonthOfInterval,\n    eachWeekOfInterval,\n    endOfDay,\n    endOfMonth,\n    endOfQuarter,\n    endOfWeek,\n    endOfYear,\n    format,\n    fromUnixTime,\n    getDaysInMonth,\n    getUnixTime,\n    getWeek,\n    isToday,\n    isWeekend,\n    setDate,\n    startOfDay,\n    startOfMonth,\n    startOfQuarter,\n    startOfWeek,\n    startOfYear,\n    startOfMinute,\n    startOfHour,\n    endOfMinute,\n    endOfHour,\n    differenceInMinutes,\n    eachHourOfInterval\n} from 'date-fns';\n\nexport type GanttDateUtil = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nlet timeZone: string;\n\nexport function setDefaultTimeZone(zone: string) {\n    timeZone = zone ?? undefined;\n}\n\nexport function getDefaultTimeZone() {\n    return timeZone;\n}\n\nexport class GanttDate {\n    value: Date;\n\n    constructor(date?: Date | string | number) {\n        if (date) {\n            if (date instanceof Date) {\n                this.value = date;\n            } else if (typeof date === 'string' || typeof date === 'number') {\n                if (date.toString().length < 13) {\n                    this.value = new TZDate(fromUnixTime(+date), timeZone);\n                } else {\n                    this.value = new TZDate(date as any, timeZone);\n                }\n            } else {\n                throw new Error(\n                    `The input date type is not supported expect Date | string\n                     | number | { date: number; with_time: 0 | 1}, actual ${JSON.stringify(date)}`\n                );\n            }\n        } else {\n            this.value = new TZDate(new Date(), timeZone);\n        }\n    }\n\n    getYear(): number {\n        return this.value.getFullYear();\n    }\n\n    getMonth(): number {\n        return this.value.getMonth();\n    }\n\n    getDay(): number {\n        return this.value.getDay();\n    }\n\n    getTime(): number {\n        return this.value.getTime();\n    }\n\n    getDate(): number {\n        return this.value.getDate();\n    }\n\n    getHours(): number {\n        return this.value.getHours();\n    }\n\n    getMinutes(): number {\n        return this.value.getMinutes();\n    }\n\n    getSeconds(): number {\n        return this.value.getSeconds();\n    }\n\n    getMilliseconds(): number {\n        return this.value.getMilliseconds();\n    }\n\n    getWeek(options?: { locale?: Locale; weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }): number {\n        return getWeek(this.value, options);\n    }\n\n    getDaysInMonth() {\n        return getDaysInMonth(this.value);\n    }\n\n    getDaysInQuarter() {\n        return differenceInCalendarDays(this.endOfQuarter().addSeconds(1).value, this.startOfQuarter().value);\n    }\n\n    getDaysInYear() {\n        return differenceInCalendarDays(this.endOfYear().addSeconds(1).value, this.startOfYear().value);\n    }\n\n    setDate(dayOfMonth: number): GanttDate {\n        return new GanttDate(setDate(this.value, dayOfMonth));\n    }\n\n    clone(): GanttDate {\n        return new GanttDate(new Date(this.value));\n    }\n\n    add(amount: number, unit?: GanttDateUtil) {\n        switch (unit) {\n            case 'second':\n                return new GanttDate(this.value).addSeconds(amount);\n            case 'minute':\n                return new GanttDate(this.value).addMinutes(amount);\n            case 'hour':\n                return new GanttDate(this.value).addHours(amount);\n            case 'day':\n                return new GanttDate(this.value).addDays(amount);\n            case 'week':\n                return new GanttDate(this.value).addWeeks(amount);\n            case 'month':\n                return new GanttDate(this.value).addMonths(amount);\n            case 'quarter':\n                return new GanttDate(this.value).addQuarters(amount);\n            case 'year':\n                return new GanttDate(this.value).addYears(amount);\n            default:\n                return new GanttDate(this.value).addSeconds(amount);\n        }\n    }\n\n    addSeconds(amount: number): GanttDate {\n        return new GanttDate(addSeconds(this.value, amount));\n    }\n\n    addMinutes(amount: number): GanttDate {\n        return new GanttDate(addMinutes(this.value, amount));\n    }\n\n    addHours(amount: number): GanttDate {\n        return new GanttDate(addHours(this.value, amount));\n    }\n\n    addDays(amount: number): GanttDate {\n        return new GanttDate(addDays(this.value, amount));\n    }\n\n    addWeeks(amount: number) {\n        return new GanttDate(addWeeks(this.value, amount));\n    }\n\n    addMonths(amount: number): GanttDate {\n        return new GanttDate(addMonths(this.value, amount));\n    }\n\n    addQuarters(amount: number): GanttDate {\n        return new GanttDate(addQuarters(this.value, amount));\n    }\n\n    addYears(amount: number): GanttDate {\n        return new GanttDate(addYears(this.value, amount));\n    }\n\n    startOfMinute(): GanttDate {\n        return new GanttDate(startOfMinute(this.value));\n    }\n\n    startOfHour(): GanttDate {\n        return new GanttDate(startOfHour(this.value));\n    }\n\n    startOfDay(): GanttDate {\n        return new GanttDate(startOfDay(this.value));\n    }\n\n    startOfWeek(options?: { locale?: Locale; weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }): GanttDate {\n        return new GanttDate(startOfWeek(this.value, options));\n    }\n\n    startOfMonth(): GanttDate {\n        return new GanttDate(startOfMonth(this.value));\n    }\n\n    startOfQuarter(): GanttDate {\n        return new GanttDate(startOfQuarter(this.value));\n    }\n\n    startOfYear(): GanttDate {\n        return new GanttDate(startOfYear(this.value));\n    }\n\n    endOfMinute(): GanttDate {\n        return new GanttDate(endOfMinute(this.value));\n    }\n\n    endOfHour(): GanttDate {\n        return new GanttDate(endOfHour(this.value));\n    }\n\n    endOfDay(): GanttDate {\n        return new GanttDate(endOfDay(this.value));\n    }\n\n    endOfWeek(options?: { locale?: Locale; weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }): GanttDate {\n        return new GanttDate(endOfWeek(this.value, options));\n    }\n\n    endOfMonth(): GanttDate {\n        return new GanttDate(endOfMonth(this.value));\n    }\n\n    endOfQuarter(): GanttDate {\n        return new GanttDate(endOfQuarter(this.value));\n    }\n\n    endOfYear(): GanttDate {\n        return new GanttDate(endOfYear(this.value));\n    }\n\n    getUnixTime(): number {\n        return getUnixTime(this.value);\n    }\n\n    format(\n        mat: string,\n        options?: {\n            locale?: Locale;\n            weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n            firstWeekContainsDate?: FirstWeekContainsDate;\n            useAdditionalWeekYearTokens?: boolean;\n            useAdditionalDayOfYearTokens?: boolean;\n        }\n    ) {\n        return format(this.value, mat, options);\n    }\n\n    isWeekend() {\n        return isWeekend(this.value);\n    }\n\n    isToday() {\n        return isToday(this.value);\n    }\n}\n","import { GanttDate } from '../utils/date';\nimport { GanttItem } from './item';\n\nexport enum GanttLinkType {\n    fs = 1,\n    ff = 2,\n    ss = 3,\n    sf = 4\n}\n\nexport enum GanttLinkLineType {\n    curve = 'curve',\n    straight = 'straight'\n}\n\nexport interface GanttLink {\n    type: GanttLinkType;\n    link: string;\n    color?: { default: string; active?: string } | string;\n}\n\nexport interface GanttLinkItem {\n    id: string;\n    before: { x: number; y: number };\n    after: { x: number; y: number };\n    start: GanttDate;\n    end: GanttDate;\n    origin: GanttItem;\n    links: GanttLink[];\n}\n\nexport interface LinkInternal {\n    path: string;\n    source: GanttItem;\n    target: GanttItem;\n    type: GanttLinkType;\n    color: string;\n    defaultColor?: string;\n    activeColor?: string;\n}\n\nexport interface GanttLinkOptions {\n    dependencyTypes?: GanttLinkType[];\n    showArrow?: boolean;\n    lineType?: GanttLinkLineType;\n}\n","import { GanttDate } from '../utils/date';\nimport { BehaviorSubject } from 'rxjs';\nimport { GanttLink, GanttLinkType } from './link';\nimport { GanttViewType } from './view-type';\nimport { GanttView } from '../views/view';\n\nconst DEFAULT_FILL_INCREMENT_WIDTH = 120;\n\nexport interface GanttItemRefs {\n    width: number;\n    x: number;\n    y: number;\n}\n\nexport enum GanttItemType {\n    bar = 'bar',\n    range = 'range',\n    custom = 'custom'\n}\n\nexport interface GanttItem<T = unknown> {\n    id: string;\n    title: string;\n    start?: number | Date;\n    end?: number | Date;\n    group_id?: string;\n    links?: (GanttLink | string)[];\n    draggable?: boolean;\n    itemDraggable?: boolean;\n    linkable?: boolean;\n    expandable?: boolean;\n    expanded?: boolean;\n    children?: GanttItem[];\n    color?: string;\n    barStyle?: Partial<CSSStyleDeclaration>;\n    laneStyle?: Partial<CSSStyleDeclaration>;\n    origin?: T;\n    type?: GanttItemType;\n    progress?: number;\n}\n\nexport class GanttItemInternal {\n    id: string;\n    title: string;\n    start: GanttDate | null;\n    end: GanttDate | null;\n    links: GanttLink[];\n    color?: string;\n    barStyle?: Partial<CSSStyleDeclaration>;\n    laneStyle?: Partial<CSSStyleDeclaration>;\n    draggable?: boolean;\n    itemDraggable?: boolean;\n    linkable?: boolean;\n    origin: GanttItem;\n    expandable?: boolean;\n    expanded?: boolean;\n    loading: boolean;\n    children: GanttItemInternal[];\n    type?: GanttItemType;\n    progress?: number;\n    viewType?: GanttViewType;\n    level: number;\n\n    get refs() {\n        return this.refs$.getValue();\n    }\n\n    refs$ = new BehaviorSubject<{ width: number; x: number; y: number }>(null as any);\n\n    constructor(\n        item: GanttItem,\n        level: number,\n        private view?: GanttView\n    ) {\n        this.origin = item;\n        this.id = this.origin.id;\n        this.links = (this.origin.links || []).map((link) => {\n            if (typeof link === 'string') {\n                return {\n                    type: GanttLinkType.fs,\n                    link\n                };\n            } else {\n                return link;\n            }\n        });\n        this.color = this.origin.color;\n        this.barStyle = this.origin.barStyle;\n        this.laneStyle = this.origin.laneStyle;\n        this.linkable = this.origin.linkable === undefined ? true : this.origin.linkable;\n        this.draggable = this.origin.draggable === undefined ? true : this.origin.draggable;\n        this.itemDraggable = this.origin.itemDraggable;\n        this.expandable = this.origin.expandable || (this.origin.children || []).length > 0;\n        this.expanded = this.origin.expanded === undefined ? false : this.origin.expanded;\n        this.start = item.start ? new GanttDate(item.start) : null;\n        this.end = item.end ? new GanttDate(item.end) : null;\n        this.level = level;\n        this.children = (item.children || []).map((subItem) => {\n            return new GanttItemInternal(subItem, level + 1, view);\n        });\n        this.type = this.origin.type || GanttItemType.bar;\n        this.progress = this.origin.progress;\n        this.fillDateWhenStartOrEndIsNil(item);\n    }\n\n    private fillDateWhenStartOrEndIsNil(item: GanttItem) {\n        if (this.view) {\n            if (item.start && !item.end) {\n                this.end = this.view.getDateAtX(this.view.getXAtDate(new GanttDate(item.start)) + DEFAULT_FILL_INCREMENT_WIDTH);\n            }\n            if (!item.start && item.end) {\n                this.start = this.view.getDateAtX(this.view.getXAtDate(new GanttDate(item.end)) - DEFAULT_FILL_INCREMENT_WIDTH);\n            }\n        }\n    }\n\n    updateRefs(refs: GanttItemRefs) {\n        this.refs$.next(refs);\n    }\n\n    updateDate(start: GanttDate, end: GanttDate) {\n        this.start = start;\n        this.end = end;\n        this.origin.start = this.start.getUnixTime();\n        this.origin.end = this.end.getUnixTime();\n    }\n\n    updateLevel(level: number) {\n        this.level = level;\n    }\n\n    addChildren(items: GanttItem[]) {\n        this.origin.children = items;\n        this.children = (items || []).map((subItem) => {\n            return new GanttItemInternal(subItem, this.level + 1, this.view);\n        });\n    }\n\n    setExpand(expanded: boolean) {\n        this.expanded = expanded;\n        this.origin.expanded = expanded;\n    }\n\n    addLink(link: GanttLink) {\n        this.links = [...this.links, link];\n        this.origin.links = this.links;\n    }\n}\n","import { GanttItemInternal } from './item';\n\nexport interface GanttGroup<T = unknown> {\n    id: string;\n    title: string;\n    expanded?: boolean;\n    origin?: T;\n    class?: string;\n}\n\nexport class GanttGroupInternal {\n    id: string;\n    title: string;\n    origin: GanttGroup;\n    items: GanttItemInternal[];\n    mergedItems: GanttItemInternal[][];\n    expanded?: boolean;\n    refs?: {\n        height?: number;\n    } = {};\n    class?: string;\n    constructor(group: GanttGroup) {\n        this.id = group.id;\n        this.origin = group;\n        this.title = group.title;\n        this.expanded = group.expanded === undefined ? true : group.expanded;\n        this.items = [];\n        this.mergedItems = [[]];\n        this.class = group.class || '';\n    }\n\n    setExpand(expanded: boolean) {\n        this.expanded = expanded;\n        this.origin.expanded = expanded;\n    }\n}\n","export enum GanttViewType {\n    day = 'day',\n    quarter = 'quarter',\n    month = 'month',\n    year = 'year',\n    week = 'week',\n    hour = 'hour'\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { GanttDate } from '../utils/date';\nimport { GanttItemRefs } from './item';\n\nexport interface GanttBaselineItem {\n    id: string;\n    start?: number;\n    end?: number;\n}\n\nexport class GanttBaselineItemInternal {\n    id: string;\n    start: GanttDate;\n    end: GanttDate;\n    origin: GanttBaselineItem;\n\n    get refs() {\n        return this.refs$.getValue();\n    }\n\n    refs$ = new BehaviorSubject<{ width: number; x: number; y: number }>(null);\n\n    constructor(item: GanttBaselineItem) {\n        this.origin = item;\n        this.id = this.origin.id;\n        this.start = item.start ? new GanttDate(item.start) : null;\n        this.end = item.end ? new GanttDate(item.end) : null;\n    }\n\n    updateRefs(refs: GanttItemRefs) {\n        this.refs$.next(refs);\n    }\n}\n","import { GanttItem, GanttItemInternal } from '../class/item';\n\nexport interface Dictionary<T = unknown> {\n    [key: string]: T;\n}\n\nexport function isNumber(value: any) {\n    return typeof value === 'number';\n}\n\nexport function isString(value: any) {\n    return typeof value === 'string';\n}\n\nexport function isUndefined(value: any) {\n    return value === undefined;\n}\n\nexport function hexToRgb(color: string, opacity = 1) {\n    if (/^#/g.test(color)) {\n        return `rgba(${parseInt(color.slice(1, 3), 16)},${parseInt(color.slice(3, 5), 16)},${parseInt(color.slice(5, 7), 16)},${opacity})`;\n    } else {\n        return color;\n    }\n}\n\nexport function uniqBy<T = unknown>(array: T[], key: keyof T) {\n    const valuesMap: Dictionary<T> = {};\n    const result = [];\n    (array || []).forEach((value) => {\n        const _key = value[key as string];\n        if (!valuesMap[_key]) {\n            valuesMap[_key] = value;\n            result.push(value);\n        }\n    });\n    return result;\n}\n\nexport function flatten<T = unknown>(array: T[]) {\n    return array.reduce((pre, cur) => {\n        return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);\n    }, []);\n}\n\n// export function recursiveItems(items: GanttItemInternal[]) {\n//     const result = [];\n//     (items || []).forEach((item) => {\n//         result.push(item);\n//         if (item.expanded && item.children) {\n//             result.push(...recursiveItems(item.children));\n//         }\n//     });\n//     return result;\n// }\n\nexport function recursiveItems(items: GanttItemInternal[]) {\n    const result = [];\n    (items || []).forEach((item) => {\n        result.push(item);\n        if (item.expanded && item.children) {\n            result.push(...recursiveItems(item.children));\n        }\n    });\n    return result;\n}\n\nexport function getFlatItems(items: GanttItem[]) {\n    const result = [];\n    (items || []).forEach((item) => {\n        result.push(item);\n        if (item.children) {\n            result.push(...getFlatItems(item.children));\n        }\n    });\n    return result;\n}\n\nexport function keyBy<T>(array: T[], key: T extends object ? keyof T : never): { [key: string]: T } {\n    const result: { [key: string]: T } = {};\n    array.forEach((item) => {\n        const keyValue = item[key];\n        (result as any)[keyValue] = item;\n    });\n    return result;\n}\n","import { isPlatformServer } from '@angular/common';\nimport { ElementRef, Injectable, NgZone, OnDestroy, PLATFORM_ID, WritableSignal, signal, inject } from '@angular/core';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { EMPTY, Observable, Subject, fromEvent, merge } from 'rxjs';\nimport { auditTime, filter, map, pairwise, takeUntil } from 'rxjs/operators';\nimport { isNumber } from './utils/helpers';\nimport { GanttStyleOptions } from './gantt.config';\n\nconst scrollThreshold = 50;\n\nexport enum ScrollDirection {\n    NONE,\n    LEFT,\n    RIGHT\n}\n\nexport interface ScrollEvent {\n    target: Element;\n    direction: ScrollDirection;\n}\n\n@Injectable()\nexport class GanttDomService implements OnDestroy {\n    private ngZone = inject(NgZone);\n    private platformId = inject(PLATFORM_ID);\n\n    public root: Element;\n\n    public side: Element;\n\n    public container: Element;\n\n    public sideContainer: Element;\n\n    public mainContainer: Element;\n\n    public verticalScrollContainer: Element;\n\n    public calendarHeader: Element;\n\n    public mainItems: Element;\n\n    public calendarOverlay: Element;\n\n    public linksOverlay: Element;\n\n    public visibleRangeX: WritableSignal<{ min: number; max: number }> = signal({ min: 0, max: 0 });\n\n    private mainFooter: Element;\n\n    private mainScrollbar: Element;\n\n    private unsubscribe$ = new Subject<void>();\n\n    constructor() {}\n\n    private disableBrowserWheelEvent() {\n        const container = this.mainContainer as HTMLElement;\n        this.ngZone.runOutsideAngular(() =>\n            fromEvent(container, 'wheel')\n                .pipe(takeUntil(this.unsubscribe$))\n                .subscribe((event: WheelEvent) => {\n                    const delta = event.deltaX;\n                    if (!delta) {\n                        return;\n                    }\n                    if (\n                        (container.scrollLeft + container.offsetWidth === container.scrollWidth && delta > 0) ||\n                        (container.scrollLeft === 0 && delta < 0)\n                    ) {\n                        event.preventDefault();\n                    }\n                })\n        );\n    }\n\n    initialize(root: ElementRef<HTMLElement>) {\n        this.root = root.nativeElement;\n        this.side = this.root.getElementsByClassName('gantt-side')[0];\n        this.container = this.root.getElementsByClassName('gantt-container')[0];\n        this.sideContainer = this.root.getElementsByClassName('gantt-side-container')[0];\n        this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];\n        this.mainScrollbar = this.root.getElementsByClassName('gantt-main-scrollbar')[0];\n        this.mainFooter = this.root.getElementsByClassName('gantt-container-footer')[0];\n        this.verticalScrollContainer = this.root.getElementsByClassName('gantt-scroll-container')[0];\n        const mainItems = this.mainContainer.getElementsByClassName('gantt-main-items')[0];\n        const mainGroups = this.mainContainer.getElementsByClassName('gantt-main-groups')[0];\n        this.mainItems = mainItems || mainGroups;\n        this.calendarHeader = this.root.getElementsByClassName('gantt-calendar-header')[0];\n        this.calendarOverlay = this.root.getElementsByClassName('gantt-calendar-grid')[0];\n\n        this.disableBrowserWheelEvent();\n    }\n\n    /**\n     * @returns An observable that will emit outside the Angular zone. Note, consumers should re-enter the Angular zone\n     * to run the change detection if needed.\n     */\n    getViewerScroll(options?: AddEventListenerOptions): Observable<ScrollEvent> {\n        const scrollObservers = [fromEvent(this.mainContainer, 'scroll', options)];\n        this.mainFooter && scrollObservers.push(fromEvent(this.mainFooter, 'scroll', options));\n        this.mainScrollbar && scrollObservers.push(fromEvent(this.mainScrollbar, 'scroll', options));\n\n        return new Observable<ScrollEvent>((subscriber) =>\n            this.ngZone.runOutsideAngular(() =>\n                merge(...scrollObservers)\n                    .pipe(\n                        map(() => this.mainContainer.scrollLeft),\n                        pairwise(),\n                        map(([previous, current]) => {\n                            this.setVisibleRangeX();\n                            // 向左滚动且接近起点 => 左侧扩展；向右滚动且接近末尾 => 右侧扩展\n                            let direction = ScrollDirection.NONE;\n                            if (current < previous && this.mainContainer.scrollLeft <= scrollThreshold) {\n                                direction = ScrollDirection.LEFT;\n                            } else if (\n                                current > previous &&\n                                this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft <=\n                                    scrollThreshold\n                            ) {\n                                direction = ScrollDirection.RIGHT;\n                            }\n\n                            return {\n                                target: this.mainContainer,\n                                direction\n                            };\n                        }),\n                        filter((event) => event.direction !== ScrollDirection.NONE)\n                    )\n                    .subscribe(subscriber)\n            )\n        );\n    }\n\n    getResize(): Observable<Event> {\n        return isPlatformServer(this.platformId) ? EMPTY : fromEvent(window, 'resize').pipe(auditTime(150));\n    }\n\n    getResizeByElement(element: Element) {\n        return new Observable((observer) => {\n            const resizeObserver = new ResizeObserver(() => {\n                observer.next(null);\n            });\n            resizeObserver.observe(element);\n        });\n    }\n\n    scrollMainContainer(left: number) {\n        if (isNumber(left)) {\n            const scrollLeft = left - this.mainContainer.clientWidth / 2;\n            this.mainContainer.scrollLeft = scrollLeft > scrollThreshold ? scrollLeft : 0;\n            this.calendarHeader.scrollLeft = this.mainContainer.scrollLeft;\n            this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;\n            this.mainScrollbar && (this.mainScrollbar.scrollLeft = this.mainContainer.scrollLeft);\n            this.mainFooter && (this.mainFooter.scrollLeft = this.mainContainer.scrollLeft);\n        }\n    }\n\n    syncHorizontalScroll(left: number) {\n        const nextLeft = Math.max(left, 0);\n        this.mainContainer.scrollLeft = nextLeft;\n        this.calendarHeader.scrollLeft = nextLeft;\n        this.calendarOverlay.scrollLeft = nextLeft;\n        this.mainScrollbar && (this.mainScrollbar.scrollLeft = nextLeft);\n        this.mainFooter && (this.mainFooter.scrollLeft = nextLeft);\n        this.setVisibleRangeX();\n    }\n\n    setVisibleRangeX() {\n        this.visibleRangeX.set({\n            min: this.mainContainer.scrollLeft,\n            max: this.mainContainer.scrollLeft + this.mainContainer.clientWidth\n        });\n    }\n\n    applyCssVariables(element: HTMLElement, options?: GanttStyleOptions) {\n        if (!options) {\n            return;\n        }\n        if (options.headerHeight) {\n            element.style.setProperty('--gantt-header-height', coerceCssPixelValue(options.headerHeight));\n        }\n        if (options.rowHeight) {\n            element.style.setProperty('--gantt-row-height', coerceCssPixelValue(options.rowHeight));\n        }\n        if (options.barHeight) {\n            element.style.setProperty('--gantt-bar-height', coerceCssPixelValue(options.barHeight));\n        }\n\n        const theme = options.themes?.[options.defaultTheme];\n        if (theme) {\n            const themeStyles: Record<string, string> = {\n                '--gantt-color-primary': theme.primary,\n                '--gantt-color-danger': theme.danger,\n                '--gantt-color-highlight': theme.highlight,\n                '--gantt-color-background': theme.background,\n                '--gantt-color-text-main': theme.text?.main,\n                '--gantt-color-text-muted': theme.text?.muted,\n                '--gantt-color-text-light': theme.text?.light,\n                '--gantt-color-text-inverse': theme.text?.inverse,\n                '--gantt-color-gray-100': theme.gray?.[100],\n                '--gantt-color-gray-200': theme.gray?.[200],\n                '--gantt-color-gray-300': theme.gray?.[300],\n                '--gantt-color-gray-400': theme.gray?.[400],\n                '--gantt-color-gray-500': theme.gray?.[500],\n                '--gantt-color-gray-600': theme.gray?.[600]\n            };\n\n            Object.keys(themeStyles).forEach((key) => {\n                if (themeStyles[key]) {\n                    element.style.setProperty(key, themeStyles[key]);\n                }\n            });\n        }\n    }\n\n    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n    }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { Locale as DateFnsLocale } from 'date-fns';\nimport { GanttViewType } from '../class';\n\nexport enum GanttI18nLocale {\n    zhHans = 'zh-hans',\n    zhHant = 'zh-hant',\n    enUs = 'en-us',\n    deDe = 'de-de',\n    jaJp = 'ja-jp',\n    ruRu = 'ru-ru'\n}\n\nexport type GanttI18nLocaleConfig = {\n    id: GanttI18nLocale | string;\n    dateLocale?: DateFnsLocale;\n    views: Record<\n        GanttViewType,\n        {\n            label: string;\n            tickFormats: {\n                period?: string;\n                unit?: string;\n            };\n        }\n    >;\n};\n\nexport const GANTT_I18N_LOCALE_TOKEN = new InjectionToken<GanttI18nLocaleConfig[]>('gantt-i18n-locale');\n","import { GanttViewType } from '../../class';\nimport { GanttI18nLocale } from '../i18n';\n\nexport default {\n    id: GanttI18nLocale.zhHans,\n    views: {\n        [GanttViewType.hour]: {\n            label: '小时',\n            tickFormats: {\n                period: 'M月d日',\n                unit: 'HH:mm'\n            }\n        },\n        [GanttViewType.day]: {\n            label: '天',\n            tickFormats: {\n                period: 'yyyy年MM月',\n                unit: 'd'\n            }\n        },\n        [GanttViewType.week]: {\n            label: '周',\n            tickFormats: {\n                period: 'yyyy年',\n                unit: '第w周'\n            }\n        },\n        [GanttViewType.month]: {\n            label: '月',\n            tickFormats: {\n                period: `yyyy年'Q'Q`,\n                unit: 'M月'\n            }\n        },\n        [GanttViewType.quarter]: {\n            label: '季',\n            tickFormats: {\n                period: 'yyyy年',\n                unit: `yyyy年'Q'Q`\n            }\n        },\n        [GanttViewType.year]: {\n            label: '年',\n            tickFormats: {\n                unit: 'yyyy年'\n            }\n        }\n    }\n};\n","import { GanttViewType } from '../../class';\nimport { GanttI18nLocale } from '../i18n';\n\nexport default {\n    id: GanttI18nLocale.zhHant,\n    views: {\n        [GanttViewType.hour]: {\n            label: '小時',\n            tickFormats: {\n                period: 'M月d日',\n                unit: 'HH:mm'\n            }\n        },\n        [GanttViewType.day]: {\n            label: '天',\n            tickFormats: {\n                period: 'yyyy年MM月',\n                unit: 'd'\n            }\n        },\n        [GanttViewType.week]: {\n            label: '週',\n            tickFormats: {\n                period: 'yyyy年',\n                unit: '第w週'\n            }\n        },\n        [GanttViewType.month]: {\n            label: '月',\n            tickFormats: {\n                period: `yyyy年'Q'Q`,\n                unit: 'M月'\n            }\n        },\n        [GanttViewType.quarter]: {\n            label: '季',\n            tickFormats: {\n                period: 'yyyy年',\n                unit: `yyyy年'Q'Q`\n            }\n        },\n        [GanttViewType.year]: {\n            label: '年',\n            tickFormats: {\n                unit: 'yyyy年'\n            }\n        }\n    }\n};\n","import { inject, InjectionToken } from '@angular/core';\nimport { setDefaultOptions } from 'date-fns';\nimport { GanttLinkLineType, GanttLinkOptions, GanttLinkType } from './class/link';\nimport { Injectable } from '@angular/core';\nimport { GANTT_I18N_LOCALE_TOKEN, GanttI18nLocaleConfig, GanttI18nLocale } from './i18n/i18n';\nimport zhHans from './i18n/locales/zh-hans';\nimport zhHant from './i18n/locales/zh-hant';\nimport { setDefaultTimeZone } from './utils/date';\n\nexport interface GanttDateOptions {\n    timeZone?: string;\n    weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport interface GanttStyleOptions {\n    primaryColor?: string;\n    headerHeight?: number;\n    /** @deprecated use rowHeight instead */\n    lineHeight?: number;\n    rowHeight?: number;\n    barHeight?: number;\n    defaultTheme?: string;\n    themes?: Record<\n        string,\n        {\n            primary?: string;\n            danger?: string;\n            highlight?: string;\n            background?: string;\n            text?: {\n                main?: string;\n                muted?: string;\n                light?: string;\n                inverse?: string;\n            };\n            gray?: {\n                100?: string;\n                200?: string;\n                300?: string;\n                400?: string;\n                500?: string;\n                600?: string;\n            };\n        }\n    >;\n}\n\nexport interface GanttGlobalConfig {\n    locale?: GanttI18nLocale | string;\n    dateOptions?: GanttDateOptions;\n    linkOptions?: GanttLinkOptions;\n    styleOptions?: GanttStyleOptions;\n}\n\nexport const defaultConfig: GanttGlobalConfig = {\n    locale: GanttI18nLocale.zhHans,\n    linkOptions: {\n        dependencyTypes: [GanttLinkType.fs],\n        showArrow: false,\n        lineType: GanttLinkLineType.curve\n    },\n    styleOptions: {\n        primaryColor: '#6698ff',\n        headerHeight: 44,\n        rowHeight: 44,\n        barHeight: 22,\n        defaultTheme: 'default',\n        themes: {\n            default: {\n                primary: '#6698ff',\n                danger: '#FF7575',\n                highlight: '#ff9f73',\n                background: '#ffffff',\n                text: {\n                    main: '#333333',\n                    muted: '#888888',\n                    light: '#aaaaaa',\n                    inverse: '#ffffff'\n                },\n                gray: {\n                    100: '#fafafa',\n                    200: '#f5f5f5',\n                    300: '#f3f3f3',\n                    400: '#eeeeee',\n                    500: '#dddddd',\n                    600: '#cacaca'\n                }\n            }\n        }\n    },\n    dateOptions: {\n        weekStartsOn: 1\n    }\n};\n\nexport const GANTT_GLOBAL_CONFIG = new InjectionToken<GanttGlobalConfig>('GANTT_GLOBAL_CONFIG');\n\n@Injectable({ providedIn: 'root' })\nexport class GanttConfigService {\n    public config: GanttGlobalConfig;\n\n    private i18nLocales: Record<GanttI18nLocale | string, GanttI18nLocaleConfig>;\n\n    constructor() {\n        const globalConfig = inject<GanttGlobalConfig>(GANTT_GLOBAL_CONFIG, { optional: true }) || {};\n\n        const localeId = globalConfig.locale || defaultConfig.locale;\n\n        this.config = {\n            locale: localeId,\n            styleOptions: this.mergeStyleOptions(globalConfig.styleOptions),\n            linkOptions: Object.assign({}, defaultConfig.linkOptions, globalConfig.linkOptions),\n            dateOptions: Object.assign({}, defaultConfig.dateOptions, globalConfig.dateOptions)\n        };\n\n        this.i18nLocales = (inject(GANTT_I18N_LOCALE_TOKEN, { optional: true }) || []).reduce(\n            (result, localeConfig) => {\n                result[localeConfig.id] = localeConfig; // 这里使用 `id` 作为 key\n                return result;\n            },\n            {\n                ['zh-cn']: zhHans as GanttI18nLocaleConfig,\n                ['zh-tw']: zhHant as GanttI18nLocaleConfig\n            } as Record<GanttI18nLocale | string, GanttI18nLocaleConfig>\n        );\n\n        if (this.config.dateOptions?.timeZone) {\n            setDefaultTimeZone(this.config.dateOptions.timeZone);\n        }\n\n        setDefaultOptions({\n            locale: this.getDateLocale(),\n            weekStartsOn: this.config?.dateOptions?.weekStartsOn\n        });\n    }\n\n    mergeStyleOptions(options: GanttStyleOptions): GanttStyleOptions {\n        const baseThemes = this.config?.styleOptions?.themes || defaultConfig.styleOptions.themes;\n        const customThemes = options?.themes;\n\n        const mergedThemes: GanttStyleOptions['themes'] = Object.assign({}, baseThemes);\n\n        if (customThemes) {\n            Object.keys(customThemes).forEach((name) => {\n                mergedThemes[name] = {\n                    ...mergedThemes[name],\n                    ...customThemes[name],\n                    text: { ...mergedThemes[name]?.text, ...customThemes[name]?.text },\n                    gray: { ...mergedThemes[name]?.gray, ...customThemes[name]?.gray }\n                };\n            });\n        }\n\n        const styleOptions: GanttStyleOptions = {\n            ...defaultConfig.styleOptions,\n            ...this.config?.styleOptions,\n            ...options,\n            themes: mergedThemes\n        };\n\n        if (!mergedThemes[styleOptions.defaultTheme]) {\n            console.warn(`[ngx-gantt] theme ${styleOptions.defaultTheme} is not found, use default theme instead`);\n            styleOptions.defaultTheme = 'default';\n        }\n\n        // 如果传了 primaryColor,则更新默认主题的 primary\n        if (options?.primaryColor) {\n            mergedThemes[styleOptions.defaultTheme].primary = options.primaryColor;\n        }\n\n        if (styleOptions.lineHeight && !styleOptions.rowHeight) {\n            styleOptions.rowHeight = styleOptions.lineHeight;\n            console.warn('[ngx-gantt] lineHeight is deprecated, use rowHeight instead');\n        }\n\n        return styleOptions;\n    }\n\n    setLocale(locale: string) {\n        this.config.locale = locale;\n    }\n\n    private getLocaleConfig(): GanttI18nLocaleConfig {\n        return (\n            this.i18nLocales[this.config.locale] ?? this.i18nLocales[this.config.locale.toLowerCase()] ?? (zhHans as GanttI18nLocaleConfig)\n        );\n    }\n\n    getViewsLocale(): GanttI18nLocaleConfig['views'] {\n        return this.getLocaleConfig().views;\n    }\n\n    getDateLocale() {\n        return this.getLocaleConfig().dateLocale;\n    }\n}\n","import { GanttViewType } from '../../class';\nimport { GanttI18nLocale } from '../i18n';\n\nexport default {\n    id: GanttI18nLocale.enUs,\n    views: {\n        [GanttViewType.hour]: {\n            label: 'Hourly',\n            tickFormats: {\n                period: 'MMM d',\n                unit: 'HH:mm'\n            }\n        },\n        [GanttViewType.day]: {\n            label: 'Daily',\n            tickFormats: {\n                period: 'MMM yyyy',\n                unit: 'd'\n            }\n        },\n        [GanttViewType.week]: {\n            label: 'Weekly',\n            tickFormats: {\n                period: 'yyyy',\n                unit: 'wo'\n            }\n        },\n        [GanttViewType.month]: {\n            label: 'Monthly',\n            tickFormats: {\n                period: \"yyyy 'Q'Q\",\n                unit: 'MMM'\n            }\n        },\n        [GanttViewType.quarter]: {\n            label: 'Quarterly',\n            tickFormats: {\n                period: 'yyyy',\n                unit: \"yyyy 'Q'Q\"\n            }\n        },\n        [GanttViewType.year]: {\n            label: 'Yearly',\n            tickFormats: {\n                unit: 'yyyy'\n            }\n        }\n    }\n};\n","import { GanttViewType } from '../../class';\nimport { GanttI18nLocale } from '../i18n';\n\nexport default {\n    id: GanttI18nLocale.jaJp,\n    views: {\n        [GanttViewType.hour]: {\n            label: '毎時',\n            tickFormats: {\n                period: 'M月d日',\n                unit: 'HH:mm'\n            }\n        },\n        [GanttViewType.day]: {\n            label: '日',\n            tickFormats: {\n                period: 'yyyy年M月d日',\n                unit: 'd'\n            }\n        },\n        [GanttViewType.week]: {\n            label: '週',\n            tickFormats: {\n                period: 'yyyy年',\n                unit: '第w週'\n            }\n        },\n        [GanttViewType.month]: {\n            label: '月',\n            tickFormats: {\n                period: `yyyy年M月`,\n                unit: 'M月'\n            }\n        },\n        [GanttViewType.quarter]: {\n            label: '四半期',\n            tickFormats: {\n                period: 'yyyy年',\n                unit: `yyyy年第Q四半期`\n            }\n        },\n        [GanttViewType.year]: {\n            label: '年',\n            tickFormats: {\n                unit: 'yyyy年'\n            }\n        }\n    }\n};\n","import { de } from 'date-fns/locale';\nimport type { Locale as DateFnsLocale } from 'date-fns';\nimport { GanttViewType } from '../../class';\nimport { GanttI18nLocale } from '../i18n';\n\nexport default {\n    id: GanttI18nLocale.deDe,\n    dateLocale: de as DateFnsLocale,\n    views: {\n        [GanttViewType.hour]: {\n            label: 'Stündlich',\n            tickFormats: {\n                period: 'dd. MMM',\n                unit: 'HH:mm'\n            }\n        },\n        [GanttViewType.day]: {\n            label: 'Täglich',\n            tickFormats: {\n                period: 'MMM yyyy',\n                unit: 'd'\n            }\n        },\n        [GanttViewType.week]: {\n            label: 'Wöchentlich',\n            tickFormats: {\n                period: 'yyyy',\n                unit: `w. 'Woche'`\n            }\n        },\n        [GanttViewType.month]: {\n            label: 'Monatlich',\n            tickFormats: {\n                period: 'MMM yyyy',\n                unit: 'MMM'\n            }\n        },\n        [GanttViewType.quarter]: {\n            label: 'Vierteljährlich',\n            tickFormats: {\n                period: 'yyyy',\n                unit: `Q. 'Quartal' yyyy`\n            }\n        },\n        [GanttViewType.year]: {\n            label: 'Jährlich',\n            tickFormats: {\n                unit: 'yyyy'\n            }\n        }\n    }\n};\n","import { ru } from 'date-fns/locale';\nimport type { Locale as DateFnsLocale } from 'date-fns';\nimport { GanttViewType } from '../../class';\nimport { GanttI18nLocale } from '../i18n';\n\nexport default {\n    id: GanttI18nLocale.ruRu,\n    dateLocale: ru as DateFnsLocale,\n    views: {\n        [GanttViewType.hour]: {\n            label: 'Ежечасно',\n            tickFormats: {\n                period: 'd MMM',\n                unit: 'HH:mm'\n            }\n        },\n        [GanttViewType.day]: {\n            label: 'Ежедневно',\n            tickFormats: {\n                period: 'MMMM yyyy',\n                unit: 'd'\n            }\n        },\n        [GanttViewType.week]: {\n            label: 'Еженедельно',\n            tickFormats: {\n                period: 'yyyy',\n                unit: 'Неделя w'\n            }\n        },\n        [GanttViewType.month]: {\n            label: 'Ежемесячно',\n            tickFormats: {\n                period: 'MMMM yyyy',\n                unit: 'MMM'\n            }\n        },\n        [GanttViewType.quarter]: {\n            label: 'Ежеквартально',\n            tickFormats: {\n                period: 'yyyy',\n                unit: 'Квартал Q yyyy'\n            }\n        },\n        [GanttViewType.year]: {\n            label: 'Ежегодно',\n            tickFormats: {\n                unit: 'yyyy'\n            }\n        }\n    }\n};\n","import { default as zhHansLocale } from './locales/zh-hans';\nimport { default as zhHantLocale } from './locales/zh-hant';\nimport { default as enUsLocale } from './locales/en-us';\nimport { default as jaJpLocale } from './locales/ja-jp';\nimport { default as deDeLocale } from './locales/de-de';\nimport { default as ruRuLocale } from './locales/ru-ru';\nimport { GANTT_I18N_LOCALE_TOKEN } from './i18n';\nimport { Provider } from '@angular/core';\n\nexport * from './i18n';\n\nexport { zhHansLocale, zhHantLocale, enUsLocale, jaJpLocale, deDeLocale, ruRuLocale };\n\nexport const i18nLocaleProvides: Provider[] = [\n    { provide: GANTT_I18N_LOCALE_TOKEN, useValue: zhHansLocale, multi: true },\n    { provide: GANTT_I18N_LOCALE_TOKEN, useValue: zhHantLocale, multi: true },\n    { provide: GANTT_I18N_LOCALE_TOKEN, useValue: enUsLocale, multi: true },\n    { provide: GANTT_I18N_LOCALE_TOKEN, useValue: jaJpLocale, multi: true },\n    { provide: GANTT_I18N_LOCALE_TOKEN, useValue: deDeLocale, multi: true },\n    { provide: GANTT_I18N_LOCALE_TOKEN, useValue: ruRuLocale, multi: true }\n];\n","import { differenceInCalendarDays, differenceInHours, differenceInMinutes } from 'date-fns';\nimport { BehaviorSubject } from 'rxjs';\nimport { GanttViewType } from '../class';\nimport { GanttViewTick } from '../class/view-tick';\nimport { GanttDate, GanttDateUtil, differenceInDays } from '../utils/date';\n\nexport const PERIOD_TICK_TOP = '40%';\n\nexport const UNIT_TICK_TOP = '80%';\n\nexport interface GanttViewDate {\n    date: GanttDate;\n    isCustom?: boolean;\n}\n\nexport interface GanttViewOptions {\n    start?: GanttDate;\n    end?: GanttDate;\n    minBoundary?: GanttDate;\n    maxBoundary?: GanttDate;\n    unitWidth?: number;\n    loadDuration?: {\n        amount: number;\n        unit: GanttDateUtil;\n    };\n    tickFormats?: { period: string; unit: string };\n    precisionUnit?: 'day' | 'hour' | 'minute';\n    dragTooltipFormat?: string;\n    holiday?: {\n        isHoliday: (GanttDate) => boolean;\n        hideHoliday: boolean;\n    };\n    // custom key and value\n    [key: string]: any;\n}\n\nconst defaultViewOptions: GanttViewOptions = {\n    minBoundary: new GanttDate().addYears(-1).startOfYear(),\n    maxBoundary: new GanttDate().addYears(1).endOfYear(),\n    precisionUnit: 'day',\n    dragTooltipFormat: 'MM-dd'\n};\n\nexport abstract class GanttView {\n    viewType: GanttViewType | string;\n\n    start$: BehaviorSubject<GanttDate>;\n\n    end$: BehaviorSubject<GanttDate>;\n\n    get start() {\n        return this.start$.getValue();\n    }\n\n    get end() {\n        return this.end$.getValue();\n    }\n\n    periodTicks: GanttViewTick[];\n\n    unitTicks: GanttViewTick[];\n\n    width: number;\n\n    unitWidth: number;\n\n    periodWidth: number;\n\n    showNowIndicator = true;\n\n    options: GanttViewOptions;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options: GanttViewOptions) {\n        this.options = Object.assign({}, defaultViewOptions, options);\n\n        const startDate = start.isCustom\n            ? this.rangeStartOf(start.date)\n            : this.rangeStartOf(start.date.value < this.options.start.value ? start.date : this.options.start);\n        const endDate = end.isCustom\n            ? this.rangeEndOf(end.date)\n            : this.rangeEndOf(end.date.value > this.options.end.value ? end.date : this.options.end);\n        this.start$ = new BehaviorSubject<GanttDate>(startDate);\n        this.end$ = new BehaviorSubject<GanttDate>(endDate);\n\n        this.recomputeLayout();\n    }\n\n    abstract rangeStartOf(date: GanttDate): GanttDate;\n\n    abstract rangeEndOf(date: GanttDate): GanttDate;\n\n    // 获取周期刻度合并后的宽度\n    abstract getPeriodWidth(): number;\n\n    // 获取当前视图下每一天占用的宽度\n    abstract getDayWidth(date: GanttDate): number;\n\n    // 获取一级时间刻度（坐标，显示名称）\n    abstract getPeriodTicks(): GanttViewTick[];\n\n    // 获取二级时间刻度（坐标，显示名称）\n    abstract getUnitTicks(): GanttViewTick[];\n\n    protected hideHoliday(date: GanttDate): boolean {\n        return this.options.holiday?.hideHoliday && this.options.holiday?.isHoliday?.(date);\n    }\n\n    protected recomputeLayout() {\n        this.unitWidth = this.getUnitWidth();\n        this.periodTicks = this.getPeriodTicks();\n        this.unitTicks = this.getUnitTicks();\n        this.width = this.getWidth();\n        this.periodWidth = this.getPeriodWidth();\n    }\n\n    alignToPrecisionStart(date: GanttDate) {\n        switch (this.options.precisionUnit) {\n            case 'minute':\n                return date.startOfMinute();\n            case 'hour':\n                return date.startOfHour();\n            default:\n                return date.startOfDay();\n        }\n    }\n\n    alignToPrecisionEnd(date: GanttDate) {\n        switch (this.options.precisionUnit) {\n            case 'minute':\n                return date.endOfMinute();\n            case 'hour':\n                return date.endOfHour();\n            default:\n                return date.endOfDay();\n        }\n    }\n\n    calculateIntervalWidth(start: GanttDate, end: GanttDate) {\n        let result = 0;\n        const days = differenceInDays(end.value, start.value);\n        for (let i = 0; i < Math.abs(days); i++) {\n            result += this.getDayWidth(start.addDays(i));\n        }\n        result = days >= 0 ? result : -result;\n        return Number(result.toFixed(3));\n    }\n\n    extendStart(): { start: GanttDate; end: GanttDate } | null {\n        const duration = this.getLoadDuration();\n        const start = this.rangeStartOf(this.start.add(duration.amount * -1, duration.unit));\n\n        if (start.value >= this.options.minBoundary.value) {\n            const originalStart = this.start;\n            this.start$.next(start);\n            this.recomputeLayout();\n            return { start: this.start, end: originalStart };\n        }\n        return null;\n    }\n\n    extendEnd(): { start: GanttDate; end: GanttDate } | null {\n        const duration = this.getLoadDuration();\n        const end = this.rangeEndOf(this.end.add(duration.amount, duration.unit));\n\n        if (end.value <= this.options.maxBoundary.value) {\n            const originalEnd = this.end;\n            this.end$.next(end);\n            this.recomputeLayout();\n            return { start: originalEnd, end: this.end };\n        }\n        return null;\n    }\n\n    /**\n     * 获取横向滚动加载的时间跨度配置\n     */\n    private getLoadDuration(): { amount: number; unit: GanttDateUtil } {\n        return this.options.loadDuration!;\n    }\n\n    updateDate(start: GanttDate, end: GanttDate) {\n        start = this.rangeStartOf(start);\n        end = this.rangeEndOf(end);\n        if (start.value < this.start.value) {\n            this.start$.next(start);\n        }\n        if (end.value > this.end.value) {\n            this.end$.next(end);\n        }\n        this.recomputeLayout();\n    }\n\n    // 获取View的宽度\n    getWidth() {\n        return this.getUnitWidth() * this.unitTicks.length;\n    }\n\n    // 获取单个网格的宽度\n    getUnitWidth() {\n        return this.options.unitWidth;\n    }\n\n    // 获取当前时间的X坐标\n    getNowX(): number {\n        const today = new GanttDate().startOfDay();\n        if (today.value > this.start.value && today.value < this.end.value) {\n            const x = this.getXAtDate(today) + this.getDayWidth(today) / 2;\n            return x;\n        } else {\n            return null;\n        }\n    }\n\n    // 获取指定时间的X坐标\n    getXAtDate(date: GanttDate) {\n        return this.calculateIntervalWidth(this.start, date);\n    }\n\n    // 根据X坐标获取对应时间\n    getDateAtX(x: number) {\n        const indexOfSecondaryDate = Math.max(Math.floor(x / this.getUnitWidth()), 0);\n        const matchDate = this.unitTicks[Math.min(this.unitTicks.length - 1, indexOfSecondaryDate)];\n        const dayWidth = this.getDayWidth(matchDate?.date);\n        if (dayWidth === this.getUnitWidth()) {\n            return matchDate?.date;\n        } else {\n            const day = Math.floor((x % this.getUnitWidth()) / dayWidth);\n            return matchDate?.date.addDays(day);\n        }\n    }\n\n    // 获取指定时间范围的宽度\n    calculateRangeWidth(start: GanttDate, end: GanttDate) {\n        // addSeconds(1) 是因为计算相差天会以一个整天来计算 end时间一般是59分59秒不是一个整天，所以需要加1\n        return this.calculateIntervalWidth(this.alignToPrecisionStart(start), this.alignToPrecisionEnd(end).addSeconds(1));\n    }\n\n    // 根据日期精度获取最小时间范围的宽度\n    getPrecisionUnitWidth(date: GanttDate) {\n        switch (this.options.precisionUnit) {\n            case 'minute':\n                return this.getDayWidth(date) / 24 / 60;\n            case 'hour':\n                return this.getDayWidth(date) / 24;\n            default:\n                return this.getDayWidth(date);\n        }\n    }\n\n    // 获取两个日期在当前可见时间轴上的索引差值\n    getVisibleDateIndexOffset(start: GanttDate, end: GanttDate): number {\n        switch (this.options.precisionUnit) {\n            case 'minute':\n                return differenceInMinutes(end.value, start.value);\n            case 'hour':\n                return differenceInHours(end.value, start.value);\n            default:\n                return differenceInCalendarDays(end.value, start.value);\n        }\n    }\n\n    // 根据基准日期和索引偏移量，获取新的日期\n    getDateByIndexOffset(baseDate: GanttDate, indexOffset: number): GanttDate {\n        return baseDate.add(indexOffset, this.options.precisionUnit);\n    }\n}\n","import { GanttViewType } from '../class';\nimport { GanttViewTick } from '../class/view-tick';\nimport { zhHantLocale } from '../i18n';\nimport { differenceInCalendarDays, eachDayOfInterval, eachWeekOfInterval, GanttDate } from '../utils/date';\nimport { GanttView, GanttViewDate, GanttViewOptions, PERIOD_TICK_TOP, UNIT_TICK_TOP } from './view';\n\nconst defaultViewOptions: GanttViewOptions = {\n    unitWidth: 35,\n    start: new GanttDate().startOfYear().startOfWeek(),\n    end: new GanttDate().endOfYear().endOfWeek(),\n    loadDuration: {\n        amount: 1,\n        unit: 'month'\n    },\n    tickFormats: {\n        period: zhHantLocale.views.day.tickFormats.period,\n        unit: zhHantLocale.views.day.tickFormats.unit\n    }\n};\n\nexport class GanttViewDay extends GanttView {\n    override showNowIndicator = false;\n\n    override viewType = GanttViewType.day;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, defaultViewOptions, options));\n    }\n\n    rangeStartOf(date: GanttDate) {\n        return date.startOfWeek();\n    }\n\n    rangeEndOf(date: GanttDate) {\n        return date.endOfWeek();\n    }\n\n    getPeriodWidth() {\n        return this.getUnitWidth() * 7;\n    }\n\n    getDayWidth(date: GanttDate): number {\n        if (this.hideHoliday(date)) {\n            return 0;\n        }\n        return this.unitWidth;\n    }\n\n    getPeriodTicks(): GanttViewTick[] {\n        const weeks = eachWeekOfInterval({ start: this.start.value, end: this.end.addSeconds(1).value });\n        const ticks: GanttViewTick[] = [];\n        for (let i = 0; i < weeks.length; i++) {\n            const weekStart = new GanttDate(weeks[i]);\n            const weekEnd = weekStart.addWeeks(1);\n            const increaseWeek = weekStart.getDaysInMonth() - weekStart.getDate() >= 3 ? 0 : 1;\n            const tickWidth = this.calculateIntervalWidth(weekStart, weekEnd);\n            const lastTick = ticks[ticks.length - 1];\n            const rectX = lastTick ? lastTick.rect.x + lastTick.rect.width : 0;\n            const tick = new GanttViewTick({\n                date: weekStart,\n                rect: {\n                    x: rectX,\n                    width: tickWidth\n                },\n                label: {\n                    text: weekStart.addWeeks(increaseWeek).format(this.options.tickFormats?.period),\n                    y: PERIOD_TICK_TOP,\n                    x: rectX + tickWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n\n    getUnitTicks(): GanttViewTick[] {\n        const days = eachDayOfInterval({ start: this.start.value, end: this.end.value }).filter(\n            (day) => !this.hideHoliday(new GanttDate(day))\n        );\n        const ticks: GanttViewTick[] = [];\n        const unitWidth = this.getUnitWidth();\n        for (let i = 0; i < days.length; i++) {\n            const start = new GanttDate(days[i]);\n            const rectX = i * unitWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: unitWidth\n                },\n                label: {\n                    text: start.format(this.options.tickFormats?.unit) || start.getDate().toString(),\n                    y: UNIT_TICK_TOP,\n                    x: rectX + unitWidth / 2\n                },\n                metadata: {\n                    isWeekend: start.isWeekend(),\n                    isToday: start.isToday()\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n\n    // 获取两个日期在当前可见时间轴上的索引差值\n    override getVisibleDateIndexOffset(start: GanttDate, end: GanttDate): number {\n        const startTime = this.alignToPrecisionStart(start).value;\n        const endTime = this.alignToPrecisionStart(end).value;\n\n        const startIndex = this.unitTicks.findIndex((tick) => tick.date.value >= startTime);\n        const endIndex = this.unitTicks.findIndex((tick) => tick.date.value >= endTime);\n\n        if (startIndex !== -1 && endIndex !== -1) {\n            return endIndex - startIndex;\n        }\n        return differenceInCalendarDays(endTime, startTime);\n    }\n\n    // 根据基准日期和索引偏移量，获取新的日期\n    override getDateByIndexOffset(baseDate: GanttDate, indexOffset: number): GanttDate {\n        const baseTime = this.alignToPrecisionStart(baseDate).value;\n        const baseIndex = this.unitTicks.findIndex((tick) => tick.date.value >= baseTime);\n        if (baseIndex !== -1) {\n            const targetIndex = baseIndex + indexOffset;\n            const safeIndex = Math.max(0, Math.min(targetIndex, this.unitTicks.length - 1));\n            return this.unitTicks[safeIndex].date;\n        }\n        return baseDate.addDays(indexOffset);\n    }\n}\n","import { zhHantLocale } from '../i18n';\nimport { GanttViewType } from '../class';\nimport { GanttViewTick } from '../class/view-tick';\nimport { GanttDate, differenceInMinutes, eachDayOfInterval, eachHourOfInterval } from '../utils/date';\nimport { GanttView, GanttViewDate, GanttViewOptions, PERIOD_TICK_TOP, UNIT_TICK_TOP } from './view';\n\nconst defaultViewOptions: GanttViewOptions = {\n    unitWidth: 80,\n    start: new GanttDate().startOfMonth(),\n    end: new GanttDate().endOfMonth(),\n    precisionUnit: 'minute',\n    loadDuration: {\n        amount: 1,\n        unit: 'week'\n    },\n    tickFormats: {\n        period: zhHantLocale.views.hour.tickFormats.period,\n        unit: zhHantLocale.views.hour.tickFormats.unit\n    },\n    dragTooltipFormat: 'HH:mm'\n};\n\nexport class GanttViewHour extends GanttView {\n    override showNowIndicator = true;\n\n    override viewType = GanttViewType.hour;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, defaultViewOptions, options));\n    }\n\n    rangeStartOf(date: GanttDate) {\n        return date.startOfWeek();\n    }\n\n    rangeEndOf(date: GanttDate) {\n        return date.endOfWeek();\n    }\n\n    getPeriodWidth() {\n        return this.getUnitWidth() * 24;\n    }\n\n    getDayWidth(): number {\n        return this.unitWidth * 60;\n    }\n\n    private getHourOccupancyWidth() {\n        return this.getDayWidth() / 60;\n    }\n\n    getPeriodTicks(): GanttViewTick[] {\n        const days = eachDayOfInterval({ start: this.start.value, end: this.end.value });\n        const ticks: GanttViewTick[] = [];\n        const periodWidth = this.getPeriodWidth();\n        for (let i = 0; i < days.length; i++) {\n            const start = this.start.addDays(i);\n            const rectX = i * periodWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: periodWidth\n                },\n                label: {\n                    text: start.format(this.options.tickFormats?.period),\n                    y: PERIOD_TICK_TOP,\n                    x: rectX + periodWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n\n        return ticks;\n    }\n\n    getUnitTicks(): GanttViewTick[] {\n        const hours = eachHourOfInterval({ start: this.start.value, end: this.end.value });\n        const ticks: GanttViewTick[] = [];\n        const unitWidth = this.getUnitWidth();\n        for (let i = 0; i < hours.length; i++) {\n            const start = new GanttDate(hours[i]);\n            const rectX = i * unitWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: unitWidth\n                },\n                label: {\n                    text: start.format(this.options.tickFormats?.unit),\n                    y: UNIT_TICK_TOP,\n                    x: rectX + unitWidth / 2\n                },\n                metadata: {\n                    isWeekend: start.isWeekend(),\n                    isToday: start.isToday()\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n\n    override getNowX(): number {\n        const today = new GanttDate().startOfMinute();\n        if (today.value > this.start.value && today.value < this.end.value) {\n            const x = this.getXAtDate(today);\n            return x;\n        } else {\n            return null;\n        }\n    }\n\n    override calculateIntervalWidth(start: GanttDate, end: GanttDate) {\n        let result = 0;\n        const minutes = differenceInMinutes(end.value, start.value);\n        for (let i = 0; i < minutes; i++) {\n            result += this.getHourOccupancyWidth() / 60;\n        }\n        result = minutes >= 0 ? result : -result;\n        return Number(result.toFixed(3));\n    }\n\n    override getDateAtX(x: number) {\n        const hourWidth = this.getHourOccupancyWidth();\n        const indexOfSecondaryDate = Math.max(Math.floor(x / hourWidth), 0);\n        const matchDate = this.unitTicks[Math.min(this.unitTicks.length - 1, indexOfSecondaryDate)];\n        const minuteWidth = hourWidth / 60;\n        const underOneHourMinutes = Math.floor((x % hourWidth) / minuteWidth);\n        return matchDate?.date.addMinutes(underOneHourMinutes);\n    }\n}\n","import { GanttView, GanttViewOptions, GanttViewDate, UNIT_TICK_TOP, PERIOD_TICK_TOP } from './view';\nimport { GanttDate, differenceInCalendarQuarters, eachMonthOfInterval } from '../utils/date';\nimport { GanttViewTick } from '../class/view-tick';\nimport { GanttViewType } from '../class';\nimport { zhHantLocale } from '../i18n';\n\nconst defaultViewOptions: GanttViewOptions = {\n    start: new GanttDate().startOfQuarter().addQuarters(-1),\n    end: new GanttDate().endOfQuarter().addQuarters(2),\n    unitWidth: 280,\n    loadDuration: {\n        amount: 1,\n        unit: 'quarter'\n    },\n    tickFormats: {\n        period: zhHantLocale.views.month.tickFormats.period,\n        unit: zhHantLocale.views.month.tickFormats.unit\n    }\n};\n\nexport class GanttViewMonth extends GanttView {\n    override viewType = GanttViewType.month;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, defaultViewOptions, options));\n    }\n\n    rangeStartOf(date: GanttDate) {\n        return date.startOfQuarter();\n    }\n\n    rangeEndOf(date: GanttDate) {\n        return date.endOfQuarter();\n    }\n\n    getPeriodWidth() {\n        return this.getUnitWidth() * 3;\n    }\n\n    getDayWidth(date: GanttDate): number {\n        return this.unitWidth / date.getDaysInMonth();\n    }\n\n    getPeriodTicks(): GanttViewTick[] {\n        const quarters = differenceInCalendarQuarters(this.end.addSeconds(1).value, this.start.value);\n        const ticks: GanttViewTick[] = [];\n        const periodWidth = this.getPeriodWidth();\n        for (let i = 0; i < quarters; i++) {\n            const start = this.start.addQuarters(i);\n            const rectX = i * periodWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: periodWidth\n                },\n                label: {\n                    text: start.format(this.options.tickFormats?.period),\n                    y: PERIOD_TICK_TOP,\n                    x: rectX + periodWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n\n        return ticks;\n    }\n\n    getUnitTicks(): GanttViewTick[] {\n        const months = eachMonthOfInterval({ start: this.start.value, end: this.end.value });\n        const ticks: GanttViewTick[] = [];\n        const unitWidth = this.getUnitWidth();\n        for (let i = 0; i < months.length; i++) {\n            const start = new GanttDate(months[i]);\n            const rectX = i * unitWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: unitWidth\n                },\n                label: {\n                    text: start.format(this.options.tickFormats?.unit),\n                    y: UNIT_TICK_TOP,\n                    x: rectX + unitWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n}\n","import { GanttView, GanttViewOptions, GanttViewDate, UNIT_TICK_TOP, PERIOD_TICK_TOP } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttViewTick } from '../class/view-tick';\nimport { eachYearOfInterval, differenceInCalendarQuarters } from 'date-fns';\nimport { GanttViewType } from '../class';\nimport { zhHantLocale } from '../i18n';\n\nconst defaultViewOptions: GanttViewOptions = {\n    start: new GanttDate().addYears(-1).startOfYear(),\n    end: new GanttDate().addYears(1).endOfYear(),\n    minBoundary: new GanttDate().addYears(-2).startOfYear(),\n    maxBoundary: new GanttDate().addYears(2).endOfYear(),\n    unitWidth: 500,\n    loadDuration: {\n        amount: 1,\n        unit: 'year'\n    },\n    tickFormats: {\n        period: zhHantLocale.views.quarter.tickFormats.period,\n        unit: zhHantLocale.views.quarter.tickFormats.unit\n    }\n};\n\nexport class GanttViewQuarter extends GanttView {\n    override viewType = GanttViewType.quarter;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, defaultViewOptions, options));\n    }\n\n    rangeStartOf(date: GanttDate) {\n        return date.startOfYear();\n    }\n\n    rangeEndOf(date: GanttDate) {\n        return date.endOfYear();\n    }\n\n    getPeriodWidth() {\n        return this.getUnitWidth() * 4;\n    }\n\n    getDayWidth(date: GanttDate): number {\n        return this.unitWidth / date.getDaysInQuarter();\n    }\n\n    getPeriodTicks(): GanttViewTick[] {\n        const years = eachYearOfInterval({ start: this.start.value, end: this.end.value });\n        const ticks: GanttViewTick[] = [];\n        const periodWidth = this.getPeriodWidth();\n        for (let i = 0; i < years.length; i++) {\n            const start = new GanttDate(years[i]);\n            const rectX = i * periodWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: periodWidth\n                },\n                label: {\n                    text: `${start.format(this.options.tickFormats?.period)}`,\n                    y: PERIOD_TICK_TOP,\n                    x: rectX + periodWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n\n    getUnitTicks(): GanttViewTick[] {\n        const quarters = differenceInCalendarQuarters(this.end.value, this.start.value);\n        const ticks: GanttViewTick[] = [];\n        const unitWidth = this.getUnitWidth();\n        for (let i = 0; i <= quarters; i++) {\n            const start = this.start.addQuarters(i);\n            const rectX = i * unitWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: unitWidth\n                },\n                label: {\n                    text: start.format(this.options.tickFormats?.unit),\n                    y: UNIT_TICK_TOP,\n                    x: rectX + unitWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n}\n","import { GanttViewType } from '../class';\nimport { GanttViewTick } from '../class/view-tick';\nimport { eachWeekOfInterval, GanttDate } from '../utils/date';\nimport { GanttView, GanttViewDate, GanttViewOptions, PERIOD_TICK_TOP, UNIT_TICK_TOP } from './view';\nimport { zhHantLocale } from '../i18n';\n\nconst defaultViewOptions: GanttViewOptions = {\n    unitWidth: 280,\n    start: new GanttDate().startOfYear().startOfWeek(),\n    end: new GanttDate().endOfYear().endOfWeek(),\n    loadDuration: {\n        amount: 1,\n        unit: 'month'\n    },\n    tickFormats: {\n        period: zhHantLocale.views.week.tickFormats.period,\n        unit: zhHantLocale.views.week.tickFormats.unit\n    }\n};\n\nexport class GanttViewWeek extends GanttView {\n    override viewType = GanttViewType.week;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, defaultViewOptions, options));\n    }\n\n    rangeStartOf(date: GanttDate) {\n        return date.startOfWeek();\n    }\n\n    rangeEndOf(date: GanttDate) {\n        return date.endOfWeek();\n    }\n\n    getPeriodWidth() {\n        return this.getUnitWidth();\n    }\n\n    getDayWidth(): number {\n        return this.unitWidth / 7;\n    }\n\n    getPeriodTicks(): GanttViewTick[] {\n        const weeks = eachWeekOfInterval({ start: this.start.value, end: this.end.addSeconds(1).value });\n        const ticks: GanttViewTick[] = [];\n        const periodWidth = this.getPeriodWidth();\n        for (let i = 0; i < weeks.length; i++) {\n            const weekStart = new GanttDate(weeks[i]);\n            const increaseWeek = weekStart.getDaysInMonth() - weekStart.getDate() >= 3 ? 0 : 1;\n            const rectX = i * periodWidth;\n            const tick = new GanttViewTick({\n                date: weekStart,\n                rect: {\n                    x: rectX,\n                    width: periodWidth\n                },\n                label: {\n                    text: weekStart.addWeeks(increaseWeek).format(this.options.tickFormats?.period),\n                    y: PERIOD_TICK_TOP,\n                    x: rectX + periodWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n\n    getUnitTicks(): GanttViewTick[] {\n        const weeks = eachWeekOfInterval({ start: this.start.value, end: this.end.addSeconds(1).value });\n        const ticks: GanttViewTick[] = [];\n        const unitWidth = this.getUnitWidth();\n        for (let i = 0; i < weeks.length; i++) {\n            const start = new GanttDate(weeks[i]);\n            const rectX = i * unitWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: unitWidth\n                },\n                label: {\n                    text: `${start.format(this.options.tickFormats?.unit)}`,\n                    y: UNIT_TICK_TOP,\n                    x: rectX + unitWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n}\n","import { GanttView, GanttViewOptions, GanttViewDate, PERIOD_TICK_TOP, UNIT_TICK_TOP } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttViewTick } from '../class/view-tick';\nimport { eachYearOfInterval, differenceInCalendarYears } from 'date-fns';\nimport { GanttViewType } from '../class';\nimport { zhHantLocale } from '../i18n';\n\nconst defaultViewOptions: GanttViewOptions = {\n    unitWidth: 480,\n    start: new GanttDate().addYears(-2).startOfYear(),\n    end: new GanttDate().addYears(2).endOfYear(),\n    loadDuration: {\n        amount: 1,\n        unit: 'year'\n    },\n    tickFormats: {\n        period: zhHantLocale.views.year.tickFormats.unit || '',\n        unit: zhHantLocale.views.year.tickFormats.unit || ''\n    }\n};\n\nexport class GanttViewYear extends GanttView {\n    override viewType = GanttViewType.year;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, defaultViewOptions, options));\n    }\n\n    rangeStartOf(date: GanttDate) {\n        return date.startOfYear();\n    }\n\n    rangeEndOf(date: GanttDate) {\n        return date.endOfYear();\n    }\n\n    getPeriodWidth() {\n        return this.getUnitWidth();\n    }\n\n    getDayWidth(date: GanttDate): number {\n        return this.unitWidth / date.getDaysInYear();\n    }\n\n    getPeriodTicks(): GanttViewTick[] {\n        const years = eachYearOfInterval({ start: this.start.value, end: this.end.value });\n        const ticks: GanttViewTick[] = [];\n        const periodWidth = this.getPeriodWidth();\n        for (let i = 0; i < years.length; i++) {\n            const start = new GanttDate(years[i]);\n            const rectX = i * periodWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: periodWidth\n                },\n                label: {\n                    text: ``,\n                    y: PERIOD_TICK_TOP,\n                    x: rectX + periodWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n\n    getUnitTicks(): GanttViewTick[] {\n        const years = differenceInCalendarYears(this.end.value, this.start.value);\n        const ticks: GanttViewTick[] = [];\n        const tickTop = '60%';\n        const unitWidth = this.getUnitWidth();\n        for (let i = 0; i <= years; i++) {\n            const start = this.start.addYears(i);\n            const rectX = i * unitWidth;\n            const tick = new GanttViewTick({\n                date: start,\n                rect: {\n                    x: rectX,\n                    width: unitWidth\n                },\n                label: {\n                    text: `${start.format(this.options.tickFormats?.unit || this.options.tickFormats?.period)}`,\n                    y: tickTop,\n                    x: rectX + unitWidth / 2\n                }\n            });\n            ticks.push(tick);\n        }\n        return ticks;\n    }\n}\n","import { GanttViewType } from '../class/view-type';\nimport { GanttViewDay } from './day';\nimport { GanttViewHour } from './hour';\nimport { GanttViewMonth } from './month';\nimport { GanttViewQuarter } from './quarter';\nimport { GanttView, GanttViewDate, GanttViewOptions } from './view';\nimport { GanttViewWeek } from './week';\nimport { GanttViewYear } from './year';\n\nconst viewRegistry = {\n    [GanttViewType.hour]: GanttViewHour,\n    [GanttViewType.day]: GanttViewDay,\n    [GanttViewType.week]: GanttViewWeek,\n    [GanttViewType.month]: GanttViewMonth,\n    [GanttViewType.quarter]: GanttViewQuarter,\n    [GanttViewType.year]: GanttViewYear\n};\n\nexport function registerView<T extends typeof GanttView>(type: string, view: T) {\n    viewRegistry[type] = view;\n}\n\nexport function createView(type: GanttViewType, start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n    return new viewRegistry[type](start, end, options);\n}\n","import { coerceBooleanProperty, coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    InjectionToken,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Output,\n    OutputEmitterRef,\n    Signal,\n    TemplateRef,\n    afterNextRender,\n    computed,\n    contentChild,\n    effect,\n    inject,\n    input,\n    linkedSignal,\n    model,\n    output,\n    signal,\n    untracked\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { skip, takeUntil } from 'rxjs/operators';\nimport {\n    GanttBarClickEvent,\n    GanttDragEvent,\n    GanttGroup,\n    GanttGroupInternal,\n    GanttItem,\n    GanttItemInternal,\n    GanttLinkDragEvent,\n    GanttLoadOnScrollEvent,\n    GanttToolbarOptions,\n    GanttViewType\n} from './class';\nimport { GanttBaselineItem, GanttBaselineItemInternal } from './class/baseline';\nimport { GanttLinkOptions } from './class/link';\nimport { GanttDragContainer } from './gantt-drag-container';\nimport { GANTT_GLOBAL_CONFIG, GanttConfigService, GanttGlobalConfig, GanttStyleOptions } from './gantt.config';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { GanttDate, getUnixTime } from './utils/date';\nimport { Dictionary, flatten, getFlatItems, keyBy, recursiveItems, uniqBy } from './utils/helpers';\nimport { createView } from './views/factory';\nimport { GanttView, GanttViewOptions } from './views/view';\n\n@Directive()\nexport abstract class GanttUpper implements OnInit, OnDestroy {\n    protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    protected cdr = inject(ChangeDetectorRef);\n\n    protected ngZone = inject(NgZone);\n\n    protected config = inject<GanttGlobalConfig>(GANTT_GLOBAL_CONFIG);\n\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    readonly originItems = input<GanttItem[]>([], { alias: 'items' });\n\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    readonly originGroups = input<GanttGroup[]>([], { alias: 'groups' });\n\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    readonly originBaselineItems = input<GanttBaselineItem[]>([], { alias: 'baselineItems' });\n\n    readonly viewType = model<GanttViewType>(GanttViewType.month);\n\n    readonly start = input<number>();\n\n    readonly end = input<number>();\n\n    readonly showTodayLine = input(true);\n\n    readonly draggable = input<boolean>();\n\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    readonly originStyles = input<GanttStyleOptions>({}, { alias: 'styles' });\n\n    readonly styles = computed(() => {\n        return this.configService.mergeStyleOptions(this.originStyles());\n    });\n\n    readonly showToolbar = input(false);\n\n    readonly toolbarOptions = input<GanttToolbarOptions>({\n        viewTypes: [GanttViewType.day, GanttViewType.month, GanttViewType.year]\n    });\n\n    readonly viewOptions = input<GanttViewOptions>({});\n\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    readonly inputLinkOptions = input<GanttLinkOptions>({}, { alias: 'linkOptions' });\n\n    readonly linkOptions = computed(() => {\n        return Object.assign({}, this.configService.config.linkOptions, this.inputLinkOptions());\n    });\n\n    readonly disabledLoadOnScroll = input<boolean>(true);\n\n    readonly selectable = input(false, { transform: coerceBooleanProperty });\n\n    readonly multiple = input(false, { transform: coerceBooleanProperty });\n\n    readonly quickTimeFocus = input(false);\n\n    readonly loadOnScroll = output<GanttLoadOnScrollEvent>();\n\n    readonly dragStarted = output<GanttDragEvent>();\n\n    readonly dragMoved = output<GanttDragEvent>();\n\n    readonly dragEnded = output<GanttDragEvent>();\n\n    readonly barClick = output<GanttBarClickEvent>();\n\n    readonly viewChange = output<GanttView>();\n\n    readonly expandChange = output<GanttItemInternal | GanttGroupInternal | (GanttItemInternal | GanttGroupInternal)[]>();\n\n    readonly barTemplate = contentChild<TemplateRef<any>>('bar');\n\n    readonly rangeTemplate = contentChild<TemplateRef<any>>('range');\n\n    readonly itemTemplate = contentChild<TemplateRef<any>>('item');\n\n    readonly baselineTemplate = contentChild<TemplateRef<any>>('baseline');\n\n    readonly groupTemplate = contentChild<TemplateRef<any>>('group');\n\n    readonly groupHeaderTemplate = contentChild<TemplateRef<any>>('groupHeader');\n\n    readonly toolbarTemplate = contentChild<TemplateRef<any>>('toolbar');\n\n    readonly disableLoadOnScroll = linkedSignal(() => this.disabledLoadOnScroll());\n\n    readonly previousViewType = linkedSignal({\n        source: () => this.viewType(),\n        computation: (source, previous) => previous?.source\n    });\n\n    readonly previousViewOptions = linkedSignal({\n        source: () => this.viewOptions(),\n        computation: (source, previous) => previous?.source\n    });\n\n    public configService = inject(GanttConfigService);\n\n    public linkable: Signal<boolean> = signal(false);\n\n    public linkDragEnded?: OutputEmitterRef<GanttLinkDragEvent>;\n\n    public view: GanttView;\n\n    public items: GanttItemInternal[] = [];\n\n    public groups: GanttGroupInternal[] = [];\n\n    public baselineItems: GanttBaselineItemInternal[] = [];\n\n    public baselineItemsMap: Dictionary<GanttBaselineItemInternal> = {};\n\n    public get element() {\n        return this.elementRef.nativeElement;\n    }\n\n    public dragContainer: GanttDragContainer;\n\n    public unsubscribe$ = new Subject<void>();\n\n    public selectionModel: SelectionModel<string>;\n\n    public table?: Signal<NgxGanttTableComponent>;\n\n    private groupsMap: { [key: string]: GanttGroupInternal };\n\n    protected isEffectFinished = signal(false);\n\n    public colors = computed(() => {\n        const styles = this.styles();\n        return styles.themes[styles.defaultTheme] ?? styles.themes.default;\n    });\n\n    @HostBinding('class.gantt') ganttClass = true;\n\n    constructor() {\n        effect(() => {\n            this.initSelectionModel();\n        });\n\n        effect(() => {\n            const viewType = this.viewType();\n            const previousViewType = this.previousViewType();\n            const viewOptions = this.viewOptions();\n            const previousViewOptions = this.previousViewOptions();\n            if (\n                (viewType && previousViewType && viewType !== previousViewType) ||\n                (viewOptions && previousViewOptions && viewOptions !== previousViewOptions)\n            ) {\n                untracked(() => {\n                    this.changeView();\n                });\n            }\n        });\n\n        effect(() => {\n            if (this.originItems() || this.originGroups()) {\n                this.setupExpandedState();\n                this.setupGroups();\n                this.setupItems();\n                this.computeRefs();\n                this.isEffectFinished.set(true);\n            }\n        });\n\n        effect(() => {\n            if (this.originBaselineItems()) {\n                untracked(() => {\n                    this.setupBaselineItems();\n                    this.computeItemsRefs(...this.baselineItems);\n                });\n            }\n        });\n    }\n\n    private createView() {\n        const viewDate = this.getViewDate();\n        const viewOptions = { ...this.viewOptions() };\n        viewOptions.styleOptions = this.configService.mergeStyleOptions(viewOptions.styleOptions);\n        const localeFormats = this.configService.getViewsLocale()[this.viewType()]?.tickFormats;\n        if (localeFormats) {\n            viewOptions.tickFormats = {\n                period: localeFormats.period,\n                unit: localeFormats.unit\n            };\n        }\n        this.view = createView(this.viewType(), viewDate.start, viewDate.end, viewOptions);\n    }\n\n    private setupGroups() {\n        const collapsedIds = this.originGroups()\n            .filter((group) => group.expanded === false)\n            .map((group) => group.id);\n        this.groupsMap = {};\n        this.groups = [];\n        this.originGroups().forEach((origin) => {\n            const group = new GanttGroupInternal(origin);\n            group.expanded = !collapsedIds.includes(group.id);\n            this.groupsMap[group.id] = group;\n            this.groups.push(group);\n        });\n    }\n\n    protected setupItems() {\n        // this.originItems = uniqBy(this.originItems(), 'id');\n        this.items = [];\n        if (this.groups.length > 0) {\n            this.originItems().forEach((origin) => {\n                const group = this.groupsMap[origin.group_id];\n                if (group) {\n                    const item = new GanttItemInternal(origin, 0, this.view);\n                    group.items.push(item);\n                }\n            });\n        } else {\n            this.originItems().forEach((origin) => {\n                const item = new GanttItemInternal(origin, 0, this.view);\n                this.items.push(item);\n            });\n        }\n    }\n\n    private setupBaselineItems() {\n        // this.originBaselineItems = uniqBy(this.originBaselineItems(), 'id');\n        this.baselineItems = [];\n\n        this.originBaselineItems().forEach((origin) => {\n            const item = new GanttBaselineItemInternal(origin);\n            this.baselineItems.push(item);\n        });\n\n        this.baselineItemsMap = keyBy(this.baselineItems, 'id');\n    }\n\n    private setupExpandedState() {\n        // this.originItems = uniqBy(this.originItems(), 'id');\n        let items: GanttItemInternal[] = [];\n        const flatOriginItems = getFlatItems(this.originItems());\n\n        if (this.items.length > 0) {\n            items = recursiveItems(this.items);\n        } else {\n            items = flatten(this.groups.map((group) => recursiveItems(group.items)));\n        }\n        items.forEach((item) => {\n            if (item.origin.expanded) {\n                const newItem = flatOriginItems.find((originItem) => originItem.id === item.id);\n                if (newItem) {\n                    if (newItem.expanded === undefined) {\n                        newItem.expanded = true;\n                    }\n                }\n            }\n        });\n    }\n\n    private getViewDate() {\n        let start = this.start();\n        let end = this.end();\n        if (!start || !end) {\n            this.originItems().forEach((item) => {\n                if (item.start && !this.start()) {\n                    const itemStart = item.start instanceof Date ? getUnixTime(item.start) : item.start;\n                    start = start ? Math.min(start, itemStart) : itemStart;\n                }\n                if (item.end && !this.end()) {\n                    const itemEnd = item.end instanceof Date ? getUnixTime(item.end) : item.end;\n                    end = end ? Math.max(end, itemEnd) : itemEnd;\n                }\n            });\n        }\n        return {\n            start: {\n                date: new GanttDate(start),\n                isCustom: this.start() ? true : false\n            },\n            end: {\n                date: new GanttDate(end),\n                isCustom: this.end() ? true : false\n            }\n        };\n    }\n\n    computeRefs() {\n        this.groups.forEach((group) => {\n            const groupItems = recursiveItems(group.items);\n            this.computeItemsRefs(...groupItems);\n        });\n        const items = recursiveItems(this.items);\n        this.computeItemsRefs(...items);\n    }\n\n    private initSelectionModel() {\n        const multiple = this.multiple();\n        const selectable = this.selectable();\n        if (selectable) {\n            this.selectionModel = new SelectionModel(multiple, []);\n        } else {\n            this.selectionModel?.clear();\n        }\n    }\n\n    expandGroups(expanded: boolean) {\n        this.groups.forEach((group) => {\n            group.setExpand(expanded);\n        });\n        this.expandChange.emit(this.groups);\n        this.cdr.detectChanges();\n    }\n\n    ngOnInit() {\n        this.createView();\n\n        this.ngZone.runOutsideAngular(() => {\n            this.element.style.opacity = '1';\n            this.dragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {\n                this.disableLoadOnScroll.set(true);\n                this.dragStarted.emit(event);\n            });\n\n            this.dragContainer.dragMoved.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {\n                this.dragMoved.emit(event);\n            });\n\n            this.dragContainer.dragEnded.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {\n                this.disableLoadOnScroll.set(this.disabledLoadOnScroll());\n                this.dragEnded.emit(event);\n            });\n        });\n\n        this.view?.start$.pipe(skip(1), takeUntil(this.unsubscribe$)).subscribe(() => {\n            this.computeRefs();\n        });\n    }\n\n    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n    }\n\n    computeItemsRefs(...items: GanttItemInternal[] | GanttBaselineItemInternal[]) {\n        items.forEach((item) => {\n            item.updateRefs({\n                width: item.start && item.end ? this.view.calculateRangeWidth(item.start, item.end) : 0,\n                x: item.start ? this.view.getXAtDate(item.start) : 0,\n                y: (this.styles().rowHeight - this.styles().barHeight) / 2 - 1\n            });\n        });\n    }\n\n    trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n        return item.id || index;\n    }\n\n    detectChanges() {\n        this.cdr.detectChanges();\n    }\n\n    // public functions\n\n    expandGroup(group: GanttGroupInternal) {\n        group.setExpand(!group.expanded);\n        this.expandChange.emit(group);\n        this.cdr.detectChanges();\n    }\n\n    expandAll() {\n        this.expandGroups(true);\n    }\n\n    collapseAll() {\n        this.expandGroups(false);\n    }\n\n    getGanttItem(id: string) {\n        return this.getGanttItems([id])[0] || null;\n    }\n\n    getGanttItems(ids: string[]) {\n        let items: GanttItemInternal[] = [];\n        if (this.items.length > 0) {\n            items = recursiveItems(this.items);\n        } else {\n            items = flatten(this.groups.map((group) => recursiveItems(group.items)));\n        }\n        return items.filter((item) => ids.includes(item.id));\n    }\n\n    isSelected(id: string) {\n        if (!this.selectable()) {\n            return false;\n        }\n        if (!this.selectionModel?.hasValue()) {\n            return false;\n        }\n        return this.selectionModel?.isSelected(id);\n    }\n\n    changeView() {\n        this.createView();\n        if (this.previousViewType()) {\n            this.setupGroups();\n            this.setupItems();\n            this.computeRefs();\n            this.setupBaselineItems();\n            this.computeItemsRefs(...this.baselineItems);\n        }\n        this.viewChange.emit(this.view);\n    }\n\n    rerenderView() {\n        this.changeView();\n    }\n}\n\nexport const GANTT_UPPER_TOKEN = new InjectionToken<GanttUpper>('GANTT_UPPER_TOKEN');\n","import { Injectable, EventEmitter, inject } from '@angular/core';\nimport { GanttLinkType } from './class';\nimport { GanttDragEvent, GanttLinkDragEvent } from './class/event';\nimport { GanttItemInternal } from './class/item';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\n\nfunction getDependencyType(path: LinkDragPath, dependencyTypes: GanttLinkType[]): GanttLinkType {\n    if (dependencyTypes.includes(GanttLinkType.ss) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.start) {\n        return GanttLinkType.ss;\n    }\n    if (dependencyTypes.includes(GanttLinkType.ff) && path.from.pos === InBarPosition.finish && path.to.pos === InBarPosition.finish) {\n        return GanttLinkType.ff;\n    }\n    if (dependencyTypes.includes(GanttLinkType.sf) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.finish) {\n        return GanttLinkType.sf;\n    }\n    return GanttLinkType.fs;\n}\n\nexport enum InBarPosition {\n    start = 'start',\n    finish = 'finish'\n}\n\nexport type LinkDragPosition = {\n    element: HTMLElement;\n    item: GanttItemInternal;\n    pos?: InBarPosition;\n};\n\nexport interface LinkDragPath {\n    from?: LinkDragPosition;\n    to?: LinkDragPosition;\n}\n\n@Injectable()\nexport class GanttDragContainer {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    dragStarted = new EventEmitter<GanttDragEvent>();\n\n    dragMoved = new EventEmitter<GanttDragEvent>();\n\n    dragEnded = new EventEmitter<GanttDragEvent>();\n\n    linkDragStarted = new EventEmitter<GanttLinkDragEvent>();\n\n    linkDragEntered = new EventEmitter<GanttLinkDragEvent>();\n\n    linkDragEnded = new EventEmitter<GanttLinkDragEvent>();\n\n    linkDraggingId: string;\n\n    linkDragPath: LinkDragPath = { from: null, to: null };\n\n    constructor() {}\n\n    emitLinkDragStarted(from: LinkDragPosition) {\n        this.linkDraggingId = from.item.id;\n        this.linkDragPath.from = from;\n        this.linkDragStarted.emit({\n            source: from.item.origin,\n            target: null\n        });\n    }\n\n    emitLinkDragEntered(to: LinkDragPosition) {\n        this.linkDragPath.to = to;\n        this.linkDragEntered.emit({\n            source: this.linkDragPath.from.item.origin,\n            target: to.item.origin\n        });\n    }\n\n    emitLinkDragLeaved() {\n        this.linkDragPath.to = null;\n    }\n\n    emitLinkDragEnded(to?: LinkDragPosition) {\n        if (to) {\n            this.linkDragPath.to = to;\n            const dependencyType = getDependencyType(this.linkDragPath, this.ganttUpper.linkOptions()?.dependencyTypes);\n            this.linkDragPath.from.item.addLink({\n                link: this.linkDragPath.to.item.id,\n                type: dependencyType\n            });\n            this.linkDragEnded.emit({\n                source: this.linkDragPath.from.item.origin,\n                target: this.linkDragPath.to.item.origin,\n                type: dependencyType\n            });\n        }\n\n        this.linkDraggingId = null;\n        this.linkDragPath = { from: null, to: null };\n    }\n}\n","/** Horizontal direction in which we can auto-scroll. */\nexport const enum AutoScrollHorizontalDirection {\n    NONE,\n    LEFT,\n    RIGHT\n}\n\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the\n * viewport. The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nexport function getHorizontalScrollDirection(clientRect: DOMRect, pointerX: number) {\n    const { left, right, width } = clientRect;\n    const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n\n    if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n        return AutoScrollHorizontalDirection.LEFT;\n    } else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n        return AutoScrollHorizontalDirection.RIGHT;\n    }\n\n    return AutoScrollHorizontalDirection.NONE;\n}\n\n/**\n * Checks whether the pointer coordinates are close to a ClientRect.\n * @param rect ClientRect to check against.\n * @param threshold Threshold around the ClientRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nexport function isPointerNearClientRect(rect: DOMRect, threshold: number, pointerX: number, pointerY: number): boolean {\n    const { top, right, bottom, left, width, height } = rect;\n    const xThreshold = width * threshold;\n    const yThreshold = height * threshold;\n\n    return pointerY > top - yThreshold && pointerY < bottom + yThreshold && pointerX > left - xThreshold && pointerX < right + xThreshold;\n}\n\n/**\n * Gets the speed rate of auto scrolling\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n * @param horizontalScrollDirection The direction in which the mouse is dragged horizontally\n */\nexport function getAutoScrollSpeedRates(clientRect: DOMRect, pointerX: number, horizontalScrollDirection: AutoScrollHorizontalDirection) {\n    let autoScrollSpeedRates = 4;\n    const speedLevels = 4;\n    const { left, right, width } = clientRect;\n    const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n\n    if (horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n        autoScrollSpeedRates = Math.ceil((xThreshold - (pointerX > left ? pointerX - left : 0)) / (xThreshold / speedLevels));\n    }\n    if (horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n        autoScrollSpeedRates = Math.ceil((xThreshold - (right > pointerX ? right - pointerX : 0)) / (xThreshold / speedLevels));\n    }\n\n    return autoScrollSpeedRates;\n}\n","/** Cached result of whether the user's browser supports passive event listeners. */\nlet supportsPassiveEvents: boolean;\n\n/**\n * Checks whether the user's browser supports passive event listeners.\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function supportsPassiveEventListeners(): boolean {\n    if (supportsPassiveEvents == null && typeof window !== 'undefined') {\n        try {\n            window.addEventListener(\n                'test',\n                null!,\n                Object.defineProperty({}, 'passive', {\n                    get: () => (supportsPassiveEvents = true)\n                })\n            );\n        } finally {\n            supportsPassiveEvents = supportsPassiveEvents || false;\n        }\n    }\n\n    return supportsPassiveEvents;\n}\n\n/**\n * Normalizes an `AddEventListener` object to something that can be passed\n * to `addEventListener` on any browser, no matter whether it supports the\n * `options` parameter.\n */\nexport function normalizePassiveListenerOptions(options: AddEventListenerOptions): AddEventListenerOptions | boolean {\n    return supportsPassiveEventListeners() ? options : !!options.capture;\n}\n\n/** Options used to bind passive event listeners. */\nexport const passiveListenerOptions = <AddEventListenerOptions>normalizePassiveListenerOptions({ passive: true });\n","import { DragDrop, DragRef } from '@angular/cdk/drag-drop';\nimport { effect, ElementRef, inject, Injectable, NgZone, OnDestroy, signal, WritableSignal } from '@angular/core';\nimport { animationFrameScheduler, fromEvent, interval, merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { GanttViewType } from '../../class';\nimport { GanttItemInternal } from '../../class/item';\nimport { GanttLinkType } from '../../class/link';\nimport { GanttDomService } from '../../gantt-dom.service';\nimport { GanttDragContainer, InBarPosition } from '../../gantt-drag-container';\nimport { GanttUpper } from '../../gantt-upper';\nimport { GanttDate } from '../../utils/date';\nimport {\n    AutoScrollHorizontalDirection,\n    getAutoScrollSpeedRates,\n    getHorizontalScrollDirection,\n    isPointerNearClientRect\n} from '../../utils/drag-scroll';\nimport { passiveListenerOptions } from '../../utils/passive-listeners';\n\n/**\n * Proximity, as a ratio to width/height, at which a\n * dragged item will affect the drop container.\n */\nconst DROP_PROXIMITY_THRESHOLD = 0.05;\n\nconst dragMinWidth = 10;\nconst autoScrollBaseStep = 2;\nconst activeClass = 'gantt-bar-active';\nconst dropActiveClass = 'gantt-bar-drop-active';\nconst singleDropActiveClass = 'gantt-bar-single-drop-active';\n\nfunction createSvgElement(qualifiedName: string, className: string) {\n    const element = document.createElementNS('http://www.w3.org/2000/svg', qualifiedName);\n    element.classList.add(className);\n    return element;\n}\n\n@Injectable()\nexport class GanttBarDrag implements OnDestroy {\n    private dragDrop = inject(DragDrop);\n    private dom = inject(GanttDomService);\n    private dragContainer = inject(GanttDragContainer);\n    private _ngZone = inject(NgZone);\n\n    private ganttUpper: GanttUpper;\n\n    private barElement: HTMLElement;\n\n    private item: WritableSignal<GanttItemInternal> = signal(null);\n\n    private hasMonitorMouseEvent: boolean;\n\n    private get dragDisabled() {\n        return !this.item()?.draggable || !this.ganttUpper.draggable();\n    }\n\n    private get linkDragDisabled() {\n        return !this.item().linkable || !this.ganttUpper.linkable();\n    }\n\n    private get barHandleDragMoveAndScrollDistance() {\n        return this.barHandleDragMoveDistance + this.dragScrollDistance;\n    }\n\n    private get autoScrollStep() {\n        return Math.pow(autoScrollBaseStep, this.autoScrollSpeedRates);\n    }\n\n    private linkDraggingLine: SVGElement;\n\n    private barDragRef: DragRef;\n\n    private linkDragRefs: DragRef[] = [];\n\n    private barHandleDragRefs: DragRef[] = [];\n\n    private destroy$ = new Subject<void>();\n\n    /** Used to signal to the current auto-scroll sequence when to stop. */\n    private stopScrollTimers$ = new Subject<void>();\n\n    /** container element scrollLeft */\n    private containerScrollLeft: number;\n\n    /** move distance when drag bar */\n    private barDragMoveDistance = 0;\n\n    /** move distance when drag bar handle */\n    private barHandleDragMoveDistance = 0;\n\n    /** scrolling state when drag */\n    private dragScrolling = false;\n\n    /** dragScrollDistance */\n    private dragScrollDistance = 0;\n\n    /** Horizontal direction in which the list is currently scrolling. */\n    private _horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n\n    /** Record bar days when bar handle drag move. */\n    private barHandleDragMoveRecordDiffs: number;\n\n    /** Speed ratio for auto scroll */\n    private autoScrollSpeedRates = 1;\n\n    constructor() {\n        effect(() => {\n            const item: GanttItemInternal = this.item();\n            if (item) {\n                this.createDrags();\n            }\n        });\n    }\n\n    private createDragRef<T = any>(element: ElementRef<HTMLElement> | HTMLElement): DragRef<T> {\n        const dragRef = this.dragDrop.createDrag(element);\n        return dragRef;\n    }\n\n    private createDragScrollEvent(dragRef: DragRef) {\n        return fromEvent(this.dom.mainContainer, 'scroll', passiveListenerOptions).pipe(takeUntil(dragRef.ended));\n    }\n\n    private createMouseEvents() {\n        if (!this.hasMonitorMouseEvent && (!this.dragDisabled || !this.linkDragDisabled)) {\n            this.hasMonitorMouseEvent = true;\n            const linkOptions = this.ganttUpper.linkOptions();\n            const dropClass =\n                linkOptions?.dependencyTypes?.length === 1 && linkOptions?.dependencyTypes[0] === GanttLinkType.fs\n                    ? singleDropActiveClass\n                    : dropActiveClass;\n\n            fromEvent(this.barElement, 'mouseenter', passiveListenerOptions)\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => {\n                    if (this.dragContainer.linkDraggingId && this.dragContainer.linkDraggingId !== this.item().id) {\n                        if (!this.linkDragDisabled) {\n                            this.barElement.classList.add(dropClass);\n                            this.dragContainer.emitLinkDragEntered({\n                                item: this.item(),\n                                element: this.barElement\n                            });\n                        }\n                    } else {\n                        if (!this.dragDisabled || !this.linkDragDisabled) {\n                            this.barElement.classList.add(activeClass);\n                        }\n                    }\n                });\n\n            fromEvent(this.barElement, 'mouseleave', passiveListenerOptions)\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => {\n                    if (!this.dragContainer.linkDraggingId) {\n                        this.barElement.classList.remove(activeClass);\n                    } else {\n                        this.dragContainer.emitLinkDragLeaved();\n                    }\n                    this.barElement.classList.remove(dropClass);\n                });\n        }\n    }\n\n    private createBarDrag() {\n        const dragRef = this.createDragRef(this.barElement);\n        dragRef.disabled = this.dragDisabled;\n        dragRef.lockAxis = 'x';\n        dragRef.withBoundaryElement(this.dom.mainItems as HTMLElement);\n        dragRef.started.subscribe(() => {\n            this.setDraggingStyles();\n            dragRef.data = {\n                start: this.item().start,\n                end: this.item().end\n            };\n            this.containerScrollLeft = this.dom.mainContainer.scrollLeft;\n            this.createDragScrollEvent(dragRef).subscribe(() => {\n                if (dragRef.isDragging()) {\n                    const dragScrollDistance = this.dom.mainContainer.scrollLeft - this.containerScrollLeft;\n                    this.dragScrollDistance = dragScrollDistance;\n                    dragRef['_boundaryRect'] = this.dom.mainItems.getBoundingClientRect();\n                    this.barDragMove();\n                }\n            });\n            this.dragContainer.dragStarted.emit({ item: this.item().origin });\n        });\n\n        dragRef.moved.subscribe((event) => {\n            this.startScrollingIfNecessary(event.pointerPosition.x, event.pointerPosition.y);\n            this.barDragMoveDistance = event.distance.x;\n            if (!this.dragScrolling) {\n                this.barDragMove();\n            }\n        });\n\n        dragRef.ended.subscribe((event) => {\n            this.clearDraggingStyles();\n            this.closeDragBackdrop();\n            event.source.reset();\n            event.source.data = null;\n            this.stopScrolling();\n            this.dragScrolling = false;\n            this.dragScrollDistance = 0;\n            this.barDragMoveDistance = 0;\n            this.item().updateRefs({\n                width: this.ganttUpper.view.calculateRangeWidth(this.item().start, this.item().end),\n                x: this.ganttUpper.view.getXAtDate(this.item().start),\n                y: (this.ganttUpper.styles().rowHeight - this.ganttUpper.styles().barHeight) / 2 - 1\n            });\n            this.dragContainer.dragEnded.emit({ item: this.item().origin });\n        });\n\n        return dragRef;\n    }\n\n    private createBarHandleDrags() {\n        const dragRefs = [];\n        const handles = this.barElement.querySelectorAll<HTMLElement>('.drag-handles .handle');\n        handles.forEach((handle, index) => {\n            const isBefore = index === 0;\n            const dragRef = this.createDragRef(handle);\n            dragRef.disabled = this.dragDisabled;\n            dragRef.lockAxis = 'x';\n            dragRef.withBoundaryElement(this.dom.mainItems as HTMLElement);\n            dragRef.started.subscribe(() => {\n                this.setDraggingStyles();\n                this.containerScrollLeft = this.dom.mainContainer.scrollLeft;\n                this.createDragScrollEvent(dragRef).subscribe(() => {\n                    if (dragRef.isDragging()) {\n                        const dragScrollDistance = this.dom.mainContainer.scrollLeft - this.containerScrollLeft;\n                        this.dragScrollDistance = dragScrollDistance;\n                        dragRef['_boundaryRect'] = this.dom.mainItems.getBoundingClientRect();\n\n                        if (this.dragScrolling && this.isStartGreaterThanEndWhenBarHandleDragMove(isBefore)) {\n                            this.stopScrolling();\n                            this.dragScrolling = false;\n                        }\n\n                        if (isBefore) {\n                            this.barBeforeHandleDragMove();\n                        } else {\n                            this.barAfterHandleDragMove();\n                        }\n                    }\n                });\n                this.dragContainer.dragStarted.emit({ item: this.item().origin });\n            });\n\n            dragRef.moved.subscribe((event) => {\n                if (this.barHandleDragMoveRecordDiffs && this.barHandleDragMoveRecordDiffs > 0) {\n                    this.startScrollingIfNecessary(event.pointerPosition.x, event.pointerPosition.y);\n                }\n                this.barHandleDragMoveDistance = event.distance.x;\n                if (!this.dragScrolling) {\n                    if (isBefore) {\n                        this.barBeforeHandleDragMove();\n                    } else {\n                        this.barAfterHandleDragMove();\n                    }\n                }\n            });\n\n            dragRef.ended.subscribe((event) => {\n                this.clearDraggingStyles();\n                this.closeDragBackdrop();\n                event.source.reset();\n                this.stopScrolling();\n                this.dragScrolling = false;\n                this.dragScrollDistance = 0;\n                this.barHandleDragMoveDistance = 0;\n                this.item().updateRefs({\n                    width: this.ganttUpper.view.calculateRangeWidth(this.item().start, this.item().end),\n                    x: this.ganttUpper.view.getXAtDate(this.item().start),\n                    y: (this.ganttUpper.styles().rowHeight - this.ganttUpper.styles().barHeight) / 2 - 1\n                });\n                this.dragContainer.dragEnded.emit({ item: this.item().origin });\n            });\n            dragRefs.push(dragRef);\n        });\n        return dragRefs;\n    }\n\n    private createLinkHandleDrags() {\n        const dragRefs = [];\n        const handles = this.barElement.querySelectorAll<HTMLElement>('.link-handles .handle');\n        handles.forEach((handle, index) => {\n            const isBegin = index === 0;\n            const dragRef = this.dragDrop.createDrag(handle);\n            dragRef.disabled = this.linkDragDisabled;\n            dragRef.withBoundaryElement(this.dom.root as HTMLElement);\n\n            let needsCleanup = false;\n\n            dragRef.beforeStarted.subscribe(() => {\n                needsCleanup = true;\n                handle.style.pointerEvents = 'none';\n                if (this.barDragRef) {\n                    this.barDragRef.disabled = true;\n                }\n                this.createLinkDraggingLine();\n                this.dragContainer.emitLinkDragStarted({\n                    element: this.barElement,\n                    item: this.item(),\n                    pos: isBegin ? InBarPosition.start : InBarPosition.finish\n                });\n\n                // Fallback: 如果 beforeStarted 触发但 ended 未触发（只点击未移动），通过 mouseup 清理\n                const subscription = fromEvent(document, 'mouseup', passiveListenerOptions)\n                    .pipe(takeUntil(this.destroy$), takeUntil(dragRef.started), takeUntil(dragRef.ended))\n                    .subscribe(() => {\n                        if (needsCleanup) {\n                            needsCleanup = false;\n                            this.cleanupLinkDrag(handle, null, isBegin);\n                        }\n                        subscription.unsubscribe();\n                    });\n            });\n\n            dragRef.started.subscribe(() => {\n                needsCleanup = false;\n            });\n\n            dragRef.moved.subscribe(() => {\n                const positions = this.calcLinkLinePositions(handle, isBegin);\n                this.linkDraggingLine.setAttribute('x1', positions.x1.toString());\n                this.linkDraggingLine.setAttribute('y1', positions.y1.toString());\n                this.linkDraggingLine.setAttribute('x2', positions.x2.toString());\n                this.linkDraggingLine.setAttribute('y2', positions.y2.toString());\n            });\n\n            dragRef.ended.subscribe((event) => {\n                needsCleanup = false;\n                this.cleanupLinkDrag(handle, event, isBegin);\n            });\n\n            dragRefs.push(dragRef);\n        });\n        return dragRefs;\n    }\n\n    private openDragBackdrop(dragElement: HTMLElement, start: GanttDate, end: GanttDate) {\n        const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop') as HTMLElement;\n        const dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask') as HTMLElement;\n        const rootRect = this.dom.root.getBoundingClientRect();\n        const dragRect = dragElement.getBoundingClientRect();\n        let left = dragRect.left - rootRect.left - (this.dom.side.clientWidth + 1);\n        if (this.dragScrolling) {\n            if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n                left += this.autoScrollStep;\n            } else if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n                left -= this.autoScrollStep;\n            }\n        }\n        const width = dragRect.right - dragRect.left;\n\n        // Note: updating styles will cause re-layout so we have to place them consistently one by one.\n        dragMaskElement.style.left = left + 'px';\n        dragMaskElement.style.width = width + 'px';\n        dragMaskElement.style.display = 'block';\n        dragBackdropElement.style.display = 'block';\n        // This will invalidate the layout, but we won't need re-layout, because we set styles previously.\n        dragMaskElement.querySelector('.start').innerHTML = start.format(this.ganttUpper.view.options.dragTooltipFormat);\n        dragMaskElement.querySelector('.end').innerHTML = end.format(this.ganttUpper.view.options.dragTooltipFormat);\n    }\n\n    private closeDragBackdrop() {\n        const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop') as HTMLElement;\n        const dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask') as HTMLElement;\n        dragMaskElement.style.display = 'none';\n        dragBackdropElement.style.display = 'none';\n    }\n\n    private setDraggingStyles() {\n        this.barElement.classList.add('gantt-bar-draggable-drag');\n    }\n\n    private clearDraggingStyles() {\n        this.barElement.classList.remove('gantt-bar-draggable-drag');\n    }\n\n    private barDragMove() {\n        const { start: originStart, end: originEnd } = this.barDragRef.data;\n\n        // 获取原始开始和结束日期在当前可见时间轴上的索引差值,用于计算新的结束日期\n        const indexOffset = this.ganttUpper.view.getVisibleDateIndexOffset(originStart, originEnd);\n\n        const currentX = this.item().refs.x + this.barDragMoveDistance + this.dragScrollDistance;\n        const currentDate = this.ganttUpper.view.getDateAtX(currentX);\n        const currentStartX = this.ganttUpper.view.getXAtDate(currentDate);\n\n        let start = currentDate;\n        // 根据索引差值计算新的结束日期\n        let end = this.ganttUpper.view.getDateByIndexOffset(currentDate, indexOffset);\n\n        // 日视图特殊逻辑处理\n        if (this.ganttUpper.view.viewType === GanttViewType.day) {\n            const dayWidth = this.ganttUpper.view.getDayWidth(currentDate);\n            if (currentX > currentStartX + dayWidth / 2) {\n                start = this.ganttUpper.view.getDateByIndexOffset(start, 1);\n                end = this.ganttUpper.view.getDateByIndexOffset(end, 1);\n            }\n        }\n\n        if (this.dragScrolling) {\n            const left = currentX - this.barDragMoveDistance;\n            this.barElement.style.left = left + 'px';\n        }\n\n        this.openDragBackdrop(this.barElement, start, end);\n\n        if (!this.isStartOrEndInsideView(start, end)) {\n            return;\n        }\n        this.updateItemDate(start, end);\n        this.dragContainer.dragMoved.emit({ item: this.item().origin });\n    }\n\n    private barBeforeHandleDragMove() {\n        const { x, start, minRangeWidthWidth } = this.startOfBarHandle();\n        const width = this.item().refs.width + this.barHandleDragMoveAndScrollDistance * -1;\n        const diffs = this.ganttUpper.view.getVisibleDateIndexOffset(start, this.item().end);\n\n        if (width > dragMinWidth && diffs > 0) {\n            this.barElement.style.width = width + 'px';\n            this.barElement.style.left = x + 'px';\n            this.openDragBackdrop(this.barElement, start, this.item().end);\n\n            if (!this.isStartOrEndInsideView(start, this.item().end)) {\n                return;\n            }\n\n            this.updateItemDate(start, this.item().end);\n        } else {\n            if (this.barHandleDragMoveRecordDiffs > 0 && diffs <= 0) {\n                this.barElement.style.width = minRangeWidthWidth + 'px';\n                const x = this.ganttUpper.view.getXAtDate(this.item().end);\n                this.barElement.style.left = x + 'px';\n            }\n            this.openDragBackdrop(this.barElement, this.item().end, this.item().end);\n            this.updateItemDate(this.item().end, this.item().end);\n        }\n        this.barHandleDragMoveRecordDiffs = diffs;\n\n        this.dragContainer.dragMoved.emit({ item: this.item().origin });\n    }\n\n    private barAfterHandleDragMove() {\n        const { width, end } = this.endOfBarHandle();\n        const offset = this.ganttUpper.view.getVisibleDateIndexOffset(this.item().start, end);\n\n        if (width > dragMinWidth && offset > 0) {\n            this.barElement.style.width = width + 'px';\n            this.openDragBackdrop(this.barElement, this.item().start, end);\n            if (!this.isStartOrEndInsideView(this.item().start, end)) {\n                return;\n            }\n            this.updateItemDate(this.item().start, end);\n        } else {\n            if (this.barHandleDragMoveRecordDiffs > 0 && offset <= 0) {\n                const minRangeWidth = this.ganttUpper.view.getPrecisionUnitWidth(this.item().start);\n                this.barElement.style.width = minRangeWidth + 'px';\n            }\n            this.openDragBackdrop(this.barElement, this.item().start, this.item().start);\n            this.updateItemDate(this.item().start, this.item().start);\n        }\n        this.barHandleDragMoveRecordDiffs = offset;\n        this.dragContainer.dragMoved.emit({ item: this.item().origin });\n    }\n\n    private calcLinkLinePositions(target: HTMLElement, isBefore: boolean) {\n        const rootRect = this.dom.root.getBoundingClientRect();\n        const targetRect = target.getBoundingClientRect();\n        const layerRect = target.parentElement.parentElement.getBoundingClientRect();\n        return {\n            x1: layerRect.left + (isBefore ? 0 : layerRect.width) - rootRect.left,\n            y1: layerRect.top + layerRect.height / 2 - rootRect.top,\n            x2: targetRect.left - rootRect.left + targetRect.width / 2,\n            y2: targetRect.top - rootRect.top + targetRect.height / 2\n        };\n    }\n\n    private createLinkDraggingLine() {\n        if (!this.linkDraggingLine) {\n            const svgElement = createSvgElement('svg', 'gantt-link-drag-container');\n            const linElement = createSvgElement('line', 'link-dragging-line');\n            linElement.style.pointerEvents = 'none';\n            svgElement.appendChild(linElement);\n            this.dom.root.appendChild(svgElement);\n            this.linkDraggingLine = linElement;\n        }\n    }\n\n    private destroyLinkDraggingLine() {\n        if (this.linkDraggingLine) {\n            this.linkDraggingLine.parentElement.remove();\n            this.linkDraggingLine = null;\n        }\n    }\n\n    private cleanupLinkDrag(handle: HTMLElement, event: any, isBegin: boolean) {\n        handle.style.pointerEvents = '';\n\n        if (this.barDragRef) {\n            this.barDragRef.disabled = false;\n        }\n\n        if (event?.source) {\n            // 计算line拖动的落点位于目标Bar的值，如果值大于Bar宽度的一半，说明是拖动到Begin位置，否则则为拖动到End位置\n            if (this.dragContainer.linkDragPath.to) {\n                const placePointX =\n                    event.source.getRootElement().getBoundingClientRect().x -\n                    this.dragContainer.linkDragPath.to.element.getBoundingClientRect().x;\n\n                this.dragContainer.emitLinkDragEnded({\n                    ...this.dragContainer.linkDragPath.to,\n                    pos: placePointX < this.dragContainer.linkDragPath.to.item.refs.width / 2 ? InBarPosition.start : InBarPosition.finish\n                });\n            } else {\n                this.dragContainer.emitLinkDragEnded();\n            }\n            event.source.reset();\n        } else {\n            this.dragContainer.emitLinkDragEnded();\n        }\n\n        this.barElement.classList.remove(activeClass);\n        this.destroyLinkDraggingLine();\n    }\n\n    private startScrollInterval = () => {\n        this.stopScrolling();\n        interval(0, animationFrameScheduler)\n            .pipe(takeUntil(this.stopScrollTimers$))\n            .subscribe(() => {\n                const node = this.dom.mainContainer;\n                const scrollStep = this.autoScrollStep;\n                if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n                    node.scrollBy(-scrollStep, 0);\n                } else if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n                    node.scrollBy(scrollStep, 0);\n                }\n            });\n    };\n\n    private startScrollingIfNecessary(pointerX: number, pointerY: number) {\n        const clientRect = this.dom.mainContainer.getBoundingClientRect();\n        const scrollLeft = this.dom.mainContainer.scrollLeft;\n        if (isPointerNearClientRect(clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n            const horizontalScrollDirection = getHorizontalScrollDirection(clientRect, pointerX);\n\n            if (\n                (horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT && scrollLeft > 0) ||\n                (horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT &&\n                    scrollLeft < this.ganttUpper.view.width - clientRect.width)\n            ) {\n                this._horizontalScrollDirection = horizontalScrollDirection;\n                this.autoScrollSpeedRates = getAutoScrollSpeedRates(clientRect, pointerX, horizontalScrollDirection);\n                this.dragScrolling = true;\n                this._ngZone.runOutsideAngular(this.startScrollInterval);\n            } else {\n                this.dragScrolling = false;\n                this.stopScrolling();\n            }\n        }\n    }\n\n    // Conditions to stop auto-scroll: when the start is greater than the end and the bar appears in the view\n    private isStartGreaterThanEndWhenBarHandleDragMove(isBefore: boolean) {\n        let isStartGreaterThanEnd: boolean;\n        let isBarAppearsInView: boolean;\n\n        const scrollLeft = this.dom.mainContainer.scrollLeft;\n        const clientWidth = this.dom.mainContainer.clientWidth;\n        const xThreshold = clientWidth * DROP_PROXIMITY_THRESHOLD;\n\n        if (isBefore) {\n            const { start, minRangeWidthWidth } = this.startOfBarHandle();\n            const xPointerByEndDate = this.ganttUpper.view.getXAtDate(this.item().end);\n\n            isStartGreaterThanEnd = start.value > this.item().end.value;\n            isBarAppearsInView = xPointerByEndDate + minRangeWidthWidth + xThreshold <= scrollLeft + clientWidth;\n        } else {\n            const { end } = this.endOfBarHandle();\n            const xPointerByStartDate = this.ganttUpper.view.getXAtDate(this.item().start);\n\n            isStartGreaterThanEnd = end.value < this.item().start.value;\n            isBarAppearsInView = scrollLeft + xThreshold <= xPointerByStartDate;\n        }\n\n        return isStartGreaterThanEnd && isBarAppearsInView ? true : false;\n    }\n\n    // Some data information about dragging start until it is equal to or greater than end\n    private startOfBarHandle() {\n        const x = this.item().refs.x + this.barHandleDragMoveAndScrollDistance;\n        return {\n            x,\n            start: this.ganttUpper.view.getDateAtX(x),\n            minRangeWidthWidth: this.ganttUpper.view.getPrecisionUnitWidth(this.item().end)\n        };\n    }\n\n    // Some data information about dragging end of bar handle\n    private endOfBarHandle() {\n        const width = this.item().refs.width + this.barHandleDragMoveAndScrollDistance;\n\n        return {\n            width,\n            end: this.ganttUpper.view.getDateAtX(this.item().refs.x + width)\n        };\n    }\n\n    private stopScrolling() {\n        this.stopScrollTimers$.next();\n    }\n\n    private isStartOrEndInsideView(start: GanttDate, end: GanttDate) {\n        const itemStart = start.getUnixTime();\n        const itemEnd = end.getUnixTime();\n        const viewStart = this.ganttUpper.view.start.getUnixTime();\n        const viewEnd = this.ganttUpper.view.end.getUnixTime();\n        if (itemStart < viewStart || itemEnd > viewEnd) {\n            return false;\n        } else {\n            return true;\n        }\n    }\n\n    private updateItemDate(start: GanttDate, end: GanttDate) {\n        this.item().updateDate(this.ganttUpper.view.alignToPrecisionStart(start), this.ganttUpper.view.alignToPrecisionEnd(end));\n    }\n\n    initialize(elementRef: ElementRef, item: GanttItemInternal, ganttUpper: GanttUpper) {\n        this.barElement = elementRef.nativeElement;\n        this.ganttUpper = ganttUpper;\n        this.item.set(item);\n    }\n\n    private createBarDragRef() {\n        if (this.barDragRef) {\n            this.barDragRef.disabled = this.dragDisabled;\n        } else if (!this.dragDisabled) {\n            this.barDragRef = this.createBarDrag();\n        }\n    }\n\n    private createBarHandleDragRefs() {\n        if (this.barHandleDragRefs.length > 0) {\n            this.barHandleDragRefs.forEach((dragRef) => {\n                dragRef.disabled = this.dragDisabled;\n            });\n        } else if (!this.dragDisabled) {\n            this.barHandleDragRefs = this.createBarHandleDrags();\n        }\n    }\n\n    private createLinkDragRefs() {\n        if (this.linkDragRefs.length > 0) {\n            this.linkDragRefs.forEach((dragRef) => {\n                dragRef.disabled = this.linkDragDisabled;\n            });\n        } else if (!this.linkDragDisabled) {\n            this.linkDragRefs = this.createLinkHandleDrags();\n        }\n    }\n\n    createDrags() {\n        this.createMouseEvents();\n        this.createBarDragRef();\n        this.createBarHandleDragRefs();\n        this.createLinkDragRefs();\n    }\n\n    updateItem(item: GanttItemInternal) {\n        this.item.set(item);\n    }\n\n    ngOnDestroy() {\n        this.closeDragBackdrop();\n        this.barDragRef?.dispose();\n        this.linkDragRefs?.forEach((dragRef) => dragRef.dispose());\n        this.barHandleDragRefs?.forEach((dragRef) => dragRef.dispose());\n        this.destroy$.next();\n        this.destroy$.complete();\n        this.stopScrolling();\n        this.stopScrollTimers$.complete();\n    }\n}\n","export const rangeHeight = 17;\n\nexport const todayHeight = 24;\n\nexport const todayWidth = 35;\n\nexport const todayBorderRadius = 4;\n","import { ElementRef, TemplateRef, Directive, OnDestroy, inject, input, effect } from '@angular/core';\nimport { GanttItemInternal, GanttItemType } from './class';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { rangeHeight } from './gantt.styles';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from './gantt-upper';\n\n@Directive()\nexport abstract class GanttItemUpper implements OnDestroy {\n    protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    protected ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    readonly template = input<TemplateRef<any>>();\n\n    readonly item = input<GanttItemInternal>();\n\n    public firstChange = true;\n\n    public unsubscribe$ = new Subject<void>();\n\n    public refsUnsubscribe$ = new Subject<void>();\n\n    constructor() {\n        effect(() => {\n            this.itemChange();\n        });\n    }\n\n    private itemChange() {\n        if (this.firstChange) {\n            this.firstChange = false;\n            this.item()\n                .refs$.pipe(takeUntil(this.refsUnsubscribe$))\n                .subscribe(() => {\n                    this.setPositions();\n                });\n        } else {\n            this.refsUnsubscribe$.next();\n            this.refsUnsubscribe$.complete();\n            this.refsUnsubscribe$ = new Subject<void>();\n            this.item()\n                .refs$.pipe(takeUntil(this.refsUnsubscribe$))\n                .subscribe(() => {\n                    this.setPositions();\n                });\n        }\n    }\n\n    private setPositions() {\n        const itemElement = this.elementRef.nativeElement;\n        const item = this.item();\n        itemElement.style.left = item.refs?.x + 'px';\n        itemElement.style.top = item.refs?.y + 'px';\n        itemElement.style.width = item.refs?.width + 'px';\n        if (item.type === GanttItemType.range) {\n            itemElement.style.height = rangeHeight + 'px';\n        }\n    }\n\n    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n        this.refsUnsubscribe$.next();\n        this.refsUnsubscribe$.complete();\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    Component,\n    ElementRef,\n    OnDestroy,\n    output,\n    viewChild,\n    ViewChildren,\n    QueryList,\n    inject,\n    NgZone,\n    effect,\n    linkedSignal,\n    Signal,\n    HostBinding,\n    OnInit,\n    afterNextRender\n} from '@angular/core';\nimport { fromEvent, merge, Observable } from 'rxjs';\nimport { startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { GanttBarDrag } from './bar-drag';\nimport { hexToRgb } from '../../utils/helpers';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { GanttBarClickEvent, GanttItemInternal } from '../../class';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttItemUpper } from '../../gantt-item-upper';\n\nfunction linearGradient(sideOrCorner: string, color: string, stop: string) {\n    return `linear-gradient(${sideOrCorner},${color} 0%,${stop} 40%)`;\n}\n\n@Component({\n    selector: 'ngx-gantt-bar,gantt-bar',\n    templateUrl: './bar.component.html',\n    providers: [GanttBarDrag],\n    imports: [NgTemplateOutlet]\n})\nexport class NgxGanttBarComponent extends GanttItemUpper implements OnInit, AfterViewInit, OnDestroy {\n    private dragContainer = inject(GanttDragContainer);\n\n    private drag = inject(GanttBarDrag);\n\n    private ngZone = inject(NgZone);\n\n    override ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    readonly barClick = output<GanttBarClickEvent>();\n\n    readonly contentElementRef = viewChild<ElementRef<HTMLDivElement>>('content');\n\n    readonly previousItem: Signal<GanttItemInternal> = linkedSignal({\n        source: () => this.item(),\n        computation: (source, previous) => previous?.source\n    });\n\n    @HostBinding('class.gantt-bar') ganttItemClass = true;\n\n    @ViewChildren('handle') handles: QueryList<ElementRef<HTMLElement>>;\n\n    constructor() {\n        super();\n        afterNextRender(() => {\n            this.ngZone.runOutsideAngular(() => {\n                this.drag.initialize(this.elementRef, this.item(), this.ganttUpper);\n            });\n        });\n        effect(() => {\n            const item = this.item();\n            const previousItem = this.previousItem();\n            if (item && previousItem && item !== previousItem) {\n                this.drag.updateItem(item);\n                if (\n                    item.refs?.width !== previousItem.refs?.width ||\n                    item.color !== previousItem.color ||\n                    item.start?.value !== previousItem.start?.value ||\n                    item.end?.value !== previousItem.end?.value\n                ) {\n                    this.setContentBackground();\n                }\n            }\n        });\n    }\n\n    ngOnInit() {\n        this.dragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n            this.elementRef.nativeElement.style.pointerEvents = 'none';\n        });\n        this.dragContainer.dragEnded.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n            this.elementRef.nativeElement.style.pointerEvents = '';\n            this.setContentBackground();\n        });\n    }\n\n    ngAfterViewInit() {\n        this.setContentBackground();\n        this.handles.changes\n            .pipe(\n                startWith(this.handles),\n                switchMap(\n                    () =>\n                        // Note: we need to explicitly subscribe outside of the Angular zone since `addEventListener`\n                        // is called when the `fromEvent` is subscribed.\n                        new Observable<Event>((subscriber) =>\n                            this.ngZone.runOutsideAngular(() =>\n                                merge(...this.handles.map((handle) => fromEvent(handle.nativeElement, 'mousedown'))).subscribe(subscriber)\n                            )\n                        )\n                ),\n                takeUntil(this.unsubscribe$)\n            )\n            .subscribe((event) => {\n                event.stopPropagation();\n            });\n    }\n\n    onBarClick(event: Event) {\n        this.barClick.emit({ event, item: this.item().origin });\n    }\n\n    private setContentBackground() {\n        const item = this.item();\n        let style: Partial<CSSStyleDeclaration> = { ...(item.barStyle || {}) };\n        const contentElement = this.contentElementRef().nativeElement;\n        const barElement = this.elementRef.nativeElement;\n\n        if (item.refs?.width) {\n            const color = item.color || this.ganttUpper.colors().primary;\n\n            if (item.origin.start && item.origin.end) {\n                style.background = color;\n                style.borderRadius = '';\n            }\n            if (item.origin.start && !item.origin.end) {\n                style.background = linearGradient('to left', hexToRgb(color, 0.55), hexToRgb(color, 1));\n\n                const borderRadius = '4px 12.5px 12.5px 4px';\n                style.borderRadius = borderRadius;\n                barElement.style.borderRadius = borderRadius;\n            }\n            if (!item.origin.start && item.origin.end) {\n                style.background = linearGradient('to right', hexToRgb(color, 0.55), hexToRgb(color, 1));\n\n                const borderRadius = '12.5px 4px 4px 12.5px';\n                style.borderRadius = borderRadius;\n                barElement.style.borderRadius = borderRadius;\n            }\n            if (item.progress >= 0) {\n                const contentProgressElement = contentElement.querySelector('.gantt-bar-content-progress') as HTMLDivElement;\n                style.background = hexToRgb(color, 0.3);\n                contentProgressElement.style.background = color;\n            }\n        }\n        style = Object.assign({}, style, item.barStyle || {});\n\n        for (const key in style) {\n            if (style.hasOwnProperty(key)) {\n                contentElement.style[key] = style[key];\n            }\n        }\n    }\n\n    stopPropagation(event: Event) {\n        event.stopPropagation();\n    }\n}\n","<div class=\"gantt-bar-layer\">\n  <div class=\"drag-handles\">\n    @if (item().draggable && ganttUpper.draggable()) {\n      <span class=\"handle\" #handle></span>\n      <span class=\"handle\" #handle></span>\n    }\n  </div>\n  @if (item().linkable && ganttUpper.linkable()) {\n    <div class=\"link-handles\">\n      <span class=\"handle\"><span class=\"point\"></span></span>\n      <span class=\"handle\"> <span class=\"point\"></span></span>\n    </div>\n  }\n</div>\n<div class=\"gantt-bar-border\"></div>\n<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n  @if (item().progress >= 0) {\n    <div class=\"gantt-bar-content-progress\" [style.width.%]=\"item().progress * 100\"></div>\n  }\n  <ng-template [ngTemplateOutlet]=\"template()\" [ngTemplateOutletContext]=\"{ item: item().origin, refs: item().refs }\"> </ng-template>\n</div>\n","import { Component } from '@angular/core';\nimport { GanttItemUpper } from '../../gantt-item-upper';\n\n@Component({\n    selector: 'ngx-gantt-bar-placeholder,gantt-bar-placeholder',\n    template: '',\n    host: {\n        class: 'gantt-bar-placeholder'\n    }\n})\nexport class NgxGanttPlaceholderComponent extends GanttItemUpper {\n    constructor() {\n        super();\n    }\n}\n","import { Component, ElementRef, HostBinding, OnInit, TemplateRef, inject, input } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { GanttBaselineItemInternal } from '../../class/baseline';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from '../../gantt-upper';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n    selector: 'ngx-gantt-baseline,gantt-baseline',\n    templateUrl: './baseline.component.html',\n    imports: [NgTemplateOutlet]\n})\nexport class NgxGanttBaselineComponent implements OnInit {\n    private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    readonly baselineItem = input<GanttBaselineItemInternal>(undefined);\n\n    readonly template = input<TemplateRef<any>>(undefined);\n\n    public unsubscribe$ = new Subject<void>();\n\n    @HostBinding('class.gantt-baseline') ganttBaselineClass = true;\n\n    constructor() {}\n\n    ngOnInit() {\n        this.baselineItem()\n            .refs$.pipe(takeUntil(this.unsubscribe$))\n            .subscribe(() => {\n                this.setPositions();\n            });\n    }\n\n    private setPositions() {\n        const itemElement = this.elementRef.nativeElement;\n        itemElement.style.left = this.baselineItem().refs.x + 'px';\n        itemElement.style.bottom = '2px';\n        itemElement.style.width = this.baselineItem().refs.width + 'px';\n    }\n}\n","@if (baselineItem()) {\n  <div #content class=\"baseline-content\">\n    <ng-template\n      [ngTemplateOutlet]=\"template()\"\n      [ngTemplateOutletContext]=\"{ item: baselineItem().origin, refs: baselineItem().refs }\"\n    ></ng-template>\n  </div>\n}\n","import { Component, HostBinding, OnDestroy, ElementRef, inject, afterNextRender } from '@angular/core';\nimport { Subject, merge } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { isNumber } from '../../../utils/helpers';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../../gantt-upper';\nimport { GanttViewType } from './../../../class/view-type';\nimport { todayBorderRadius } from '../../../gantt.styles';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nconst mainHeight = 5000;\n\n@Component({\n    selector: 'gantt-calendar-grid',\n    templateUrl: './calendar-grid.component.html'\n})\nexport class GanttCalendarGridComponent implements OnDestroy {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    get view() {\n        return this.ganttUpper.view;\n    }\n    private unsubscribe$ = new Subject<void>();\n\n    mainHeight = mainHeight;\n\n    todayBorderRadius = todayBorderRadius;\n\n    viewTypes = GanttViewType;\n\n    @HostBinding('class') className = `gantt-calendar gantt-calendar-grid`;\n\n    constructor() {\n        afterNextRender(() => {\n            merge(outputToObservable(this.ganttUpper.viewChange), this.ganttUpper.view.start$)\n                .pipe(takeUntil(this.unsubscribe$))\n                .subscribe(() => {\n                    this.setTodayPoint();\n                });\n        });\n    }\n\n    setTodayPoint() {\n        const x = this.view.getNowX();\n        const todayEle = this.elementRef.nativeElement.getElementsByClassName('gantt-calendar-today-overlay')[0] as HTMLElement;\n        const line = this.elementRef.nativeElement.getElementsByClassName('today-line')[0] as HTMLElement;\n        if (isNumber(x)) {\n            if (line) {\n                line.style.left = `${x}px`;\n                line.style.top = `0px`;\n                line.style.bottom = `${-mainHeight}px`;\n            }\n        } else {\n            todayEle.style.display = 'none';\n        }\n    }\n\n    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n    }\n}\n","<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n  @if (ganttUpper.showTodayLine()) {\n    <span class=\"today-line\"> </span>\n  }\n</div>\n<svg class=\"gantt-calendar-grid-fill\" [attr.width]=\"view.width\" [attr.height]=\"1\">\n  <g>\n    @for (tick of view.unitTicks; track tick.rect.x) {\n      @if (tick.rect.background) {\n        <rect [attr.x]=\"tick.rect.x\" y=\"0\" [attr.width]=\"tick.rect.width\" [attr.height]=\"mainHeight\" [attr.fill]=\"tick.rect.background\" />\n      }\n    }\n  </g>\n</svg>\n\n<svg class=\"gantt-calendar-grid-main\" [attr.width]=\"view.width\" [attr.height]=\"ganttUpper.styles().headerHeight - 1\">\n  <g>\n    @if (view.showNowIndicator) {\n      <g>\n        @for (tick of view.unitTicks; track tick.rect.x) {\n          <line\n            [attr.x1]=\"tick.rect.x + tick.rect.width\"\n            [attr.x2]=\"tick.rect.x + tick.rect.width\"\n            [attr.y1]=\"0\"\n            [attr.y2]=\"mainHeight\"\n            class=\"secondary-line\"\n          ></line>\n        }\n      </g>\n    }\n    <g>\n      @for (tick of view.periodTicks; track tick.rect.x) {\n        @let rightX = tick.rect.x + tick.rect.width;\n        <line [attr.x1]=\"rightX\" [attr.x2]=\"rightX\" [attr.y1]=\"0\" [attr.y2]=\"mainHeight\" class=\"primary-line\"></line>\n      }\n    </g>\n  </g>\n</svg>\n","import { outputToObservable } from '@angular/core/rxjs-interop';\nimport { Component, OnInit, HostBinding, NgZone, ElementRef, inject } from '@angular/core';\nimport { todayHeight, todayWidth } from '../../../gantt.styles';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../../gantt-upper';\nimport { GanttViewType } from '../../../class';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { Subject, merge } from 'rxjs';\nimport { GanttDate } from '../../../utils/date';\nimport { isNumber } from '../../../utils/helpers';\nimport { NgStyle } from '@angular/common';\n\n@Component({\n    selector: 'gantt-calendar-header',\n    templateUrl: './calendar-header.component.html',\n    imports: [NgStyle]\n})\nexport class GanttCalendarHeaderComponent implements OnInit {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    get view() {\n        return this.ganttUpper.view;\n    }\n\n    private unsubscribe$ = new Subject();\n\n    viewTypes = GanttViewType;\n\n    @HostBinding('class') className = `gantt-calendar gantt-calendar-header`;\n\n    constructor() {}\n\n    ngOnInit() {\n        merge(outputToObservable(this.ganttUpper.viewChange), this.ganttUpper.view.start$)\n            .pipe(takeUntil(this.unsubscribe$))\n            .subscribe(() => {\n                if (this.ganttUpper.viewType() === GanttViewType.day) this.setTodayPoint();\n            });\n    }\n\n    setTodayPoint() {\n        const x = this.view.getNowX();\n        const today = new GanttDate().getDate();\n        const todayEle = this.elementRef.nativeElement.getElementsByClassName('gantt-calendar-today-overlay')[0] as HTMLElement;\n        const rect = this.elementRef.nativeElement.getElementsByClassName('today-rect')[0] as HTMLElement;\n\n        if (isNumber(x)) {\n            if (rect) {\n                rect.style.left = `${x - todayWidth / 2}px`;\n                rect.style.top = `${this.ganttUpper.styles().headerHeight - todayHeight}px`;\n                rect.innerHTML = today.toString();\n            }\n        } else {\n            todayEle.style.display = 'none';\n        }\n    }\n}\n","<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n  <span class=\"today-rect\" [hidden]=\"ganttUpper.viewType() !== viewTypes.day\"> </span>\n</div>\n<svg [attr.width]=\"view.width\" [attr.height]=\"ganttUpper.styles().headerHeight\">\n  <g>\n    @for (tick of view.unitTicks; track tick.rect.x) {\n      @if (tick.rect.background) {\n        <rect\n          [attr.x]=\"tick.rect.x\"\n          y=\"0\"\n          [attr.width]=\"tick.rect.width\"\n          [attr.height]=\"ganttUpper.styles().headerHeight\"\n          [attr.fill]=\"tick.rect.background\"\n        />\n      }\n      <text\n        class=\"secondary-text\"\n        [ngStyle]=\"{\n          fill: tick.label.style?.color,\n          fontSize: tick.label.style?.fontSize,\n          fontWeight: tick.label.style?.fontWeight\n        }\"\n        [class.today]=\"tick.metadata?.isToday\"\n        [class.weekend]=\"tick.metadata?.isWeekend\"\n        [attr.x]=\"tick.label.x\"\n        [attr.y]=\"tick.label.y\"\n      >\n        {{ tick.label.text }}\n      </text>\n    }\n\n    @for (tick of view.periodTicks; track tick.rect.x) {\n      <text\n        class=\"primary-text\"\n        [ngStyle]=\"{\n          fill: tick.label.style?.color,\n          fontSize: tick.label.style?.fontSize,\n          fontWeight: tick.label.style?.fontWeight\n        }\"\n        [class.today]=\"tick.metadata?.isToday\"\n        [class.weekend]=\"tick.metadata?.isWeekend\"\n        [attr.x]=\"tick.label.x\"\n        [attr.y]=\"tick.label.y\"\n      >\n        {{ tick.label.text }}\n      </text>\n    }\n\n    <g>\n      @for (tick of view.periodTicks; track tick.rect.x) {\n        @let rightX = tick.rect.x + tick.rect.width;\n        <line [attr.x1]=\"rightX\" [attr.x2]=\"rightX\" [attr.y1]=\"0\" [attr.y2]=\"ganttUpper.styles().headerHeight\" class=\"primary-line\"></line>\n      }\n    </g>\n\n    <g>\n      <line\n        [attr.x1]=\"0\"\n        [attr.x2]=\"view.width\"\n        [attr.y1]=\"ganttUpper.styles().headerHeight\"\n        [attr.y2]=\"ganttUpper.styles().headerHeight\"\n        class=\"header-line\"\n      ></line>\n    </g>\n  </g>\n</svg>\n","import { Component, inject } from '@angular/core';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\n@Component({\n    selector: 'gantt-drag-backdrop',\n    templateUrl: `./drag-backdrop.component.html`,\n    host: {\n        class: 'gantt-drag-backdrop'\n    }\n})\nexport class GanttDragBackdropComponent {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    constructor() {}\n}\n","<div class=\"gantt-drag-mask\">\n  <div class=\"date-range\">\n    <span class=\"start\"></span>\n    <span class=\"end\"></span>\n  </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n    selector: 'gantt-loader',\n    template: `\n        <div class=\"gantt-loader-wrapper\">\n            <div class=\"gantt-loader-loading\">\n                <span class=\"gantt-loader-loading-spot\"></span>\n            </div>\n        </div>\n    `,\n    host: {\n        class: 'gantt-loader gantt-loader-overlay'\n    }\n})\nexport class GanttLoaderComponent {}\n","import { Component, HostBinding } from '@angular/core';\nimport { GanttItemUpper } from '../../gantt-item-upper';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n    selector: 'ngx-gantt-range,gantt-range',\n    templateUrl: './range.component.html',\n    imports: [NgTemplateOutlet]\n})\nexport class NgxGanttRangeComponent extends GanttItemUpper {\n    @HostBinding('class.gantt-range') ganttRangeClass = true;\n\n    constructor() {\n        super();\n    }\n}\n","@if (item().start && item().end) {\n  <div class=\"gantt-range-main\">\n    @if (item().progress >= 0) {\n      <div class=\"gantt-range-main-progress\" [style.width.%]=\"item().progress * 100\"></div>\n    }\n  </div>\n  <div class=\"gantt-range-triangle left\"></div>\n  <div class=\"gantt-range-triangle right\"></div>\n  <ng-template [ngTemplateOutlet]=\"template()\" [ngTemplateOutletContext]=\"{ item: item().origin, refs: item().refs }\"></ng-template>\n}\n","import { inject, Injectable, NgZone } from '@angular/core';\nimport { fromEvent, merge, Subject, takeUntil } from 'rxjs';\nimport { passiveListenerOptions } from './utils/passive-listeners';\n\n@Injectable()\nexport class GanttSyncScrollService {\n    private ngZone = inject(NgZone);\n\n    private scrollGroupsMap = new Map<string, { elements: HTMLElement[]; direction: 'x' | 'y'; destroy$: Subject<void> }>();\n\n    constructor() {}\n\n    registerScrollEvent(groupName: string, element: HTMLElement, direction: 'x' | 'y') {\n        const group = this.scrollGroupsMap.get(groupName) || { elements: [], destroy$: new Subject<void>(), direction };\n        group.elements.push(element);\n        this.scrollGroupsMap.set(groupName, group);\n        this.monitorScrollChange(group);\n    }\n\n    unregisterScrollEvent(groupName: string, element: HTMLElement) {\n        const group = this.scrollGroupsMap.get(groupName);\n        if (group) {\n            group.elements = group.elements.filter((el) => el !== element);\n            if (!group.elements.length) {\n                this.scrollGroupsMap.delete(groupName);\n            } else {\n                this.scrollGroupsMap.set(groupName, group);\n            }\n            this.monitorScrollChange(group);\n        }\n    }\n\n    private monitorScrollChange(group: { elements: HTMLElement[]; destroy$: Subject<void>; direction: 'x' | 'y' }) {\n        const { elements, destroy$, direction } = group;\n        destroy$.next();\n        destroy$.complete();\n        if (elements.length) {\n            const scrollObservers = elements.map((el) => fromEvent(el, 'scroll', passiveListenerOptions));\n            this.ngZone.runOutsideAngular(() =>\n                merge(...scrollObservers)\n                    .pipe(takeUntil(destroy$))\n                    .subscribe((event) => {\n                        elements.forEach((el) => {\n                            if (direction === 'x') {\n                                el.scrollLeft = (event.currentTarget as HTMLElement).scrollLeft;\n                            } else {\n                                el.scrollTop = (event.currentTarget as HTMLElement).scrollTop;\n                            }\n                        });\n                    })\n            );\n        }\n    }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { GanttSyncScrollService } from '../gantt-sync-scroll.service';\n@Directive({\n    selector: '[syncScrollX]'\n})\nexport class GanttSyncScrollXDirective implements OnInit, OnDestroy {\n    readonly syncScrollX = input<string>();\n\n    private elementRef = inject(ElementRef<HTMLElement>);\n\n    private syncScrollService = inject(GanttSyncScrollService);\n\n    constructor() {}\n\n    ngOnInit() {\n        this.syncScrollService.registerScrollEvent(this.syncScrollX(), this.elementRef.nativeElement, 'x');\n    }\n\n    ngOnDestroy() {\n        this.syncScrollService.unregisterScrollEvent(this.syncScrollX(), this.elementRef.nativeElement);\n    }\n}\n\n@Directive({\n    selector: '[syncScrollY]'\n})\nexport class GanttSyncScrollYDirective implements OnInit, OnDestroy {\n    readonly syncScrollY = input<string>();\n\n    private syncScrollService = inject(GanttSyncScrollService);\n\n    private elementRef = inject(ElementRef<HTMLElement>);\n\n    constructor() {}\n\n    ngOnInit() {\n        this.syncScrollService.registerScrollEvent(this.syncScrollY(), this.elementRef.nativeElement, 'y');\n    }\n\n    ngOnDestroy() {\n        this.syncScrollService.unregisterScrollEvent(this.syncScrollY(), this.elementRef.nativeElement);\n    }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, input, inject } from '@angular/core';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { NgxGanttRootComponent } from '../../root.component';\nimport { GanttSyncScrollXDirective } from '../../directives/sync-scroll.directive';\n\n@Component({\n    selector: 'gantt-scrollbar',\n    templateUrl: `./scrollbar.component.html`,\n    imports: [NgClass, GanttSyncScrollXDirective]\n})\nexport class GanttScrollbarComponent {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    hasFooter = input<boolean>(false);\n\n    tableWidth = input<number>();\n\n    ganttRoot = input<NgxGanttRootComponent>();\n\n    tableScrollWidth = input<number>(0);\n\n    constructor() {}\n}\n","<div\n  class=\"gantt-scrollbar\"\n  [ngClass]=\"{ 'gantt-scrollbar-bg': hasFooter() }\"\n  [style.height.px]=\"ganttRoot()?.horizontalScrollbarHeight + 1\"\n  [style.right.px]=\"ganttRoot()?.verticalScrollbarWidth\"\n>\n  <div\n    class=\"gantt-table-scrollbar\"\n    syncScrollX=\"ganttTableXScroll\"\n    [class.with-scrollbar]=\"ganttRoot()?.horizontalScrollbarHeight\"\n    [style.width.px]=\"tableWidth()\"\n  >\n    <div class=\"h-100\" [style.width.px]=\"tableScrollWidth() - 1\"></div>\n  </div>\n  <div class=\"gantt-main-scrollbar\" syncScrollX=\"ganttMainXScroll\">\n    <div class=\"h-100\" [style.width.px]=\"ganttRoot()['view']?.width\"></div>\n  </div>\n</div>\n","import { Component, HostBinding, TemplateRef, inject, input } from '@angular/core';\nimport { GanttViewType } from '../../class';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from '../../gantt-upper';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { GanttConfigService } from '../../gantt.config';\n\n@Component({\n    selector: 'ngx-gantt-toolbar,gantt-toolbar',\n    templateUrl: './toolbar.component.html',\n    imports: [NgTemplateOutlet]\n})\nexport class NgxGanttToolbarComponent {\n    protected ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    readonly template = input<TemplateRef<any>>();\n\n    @HostBinding('class.gantt-toolbar') ganttItemClass = true;\n\n    views = inject(GanttConfigService).getViewsLocale();\n\n    constructor() {}\n\n    selectView(view: GanttViewType) {\n        this.ganttUpper.viewType.set(view);\n    }\n}\n","<div class=\"toolbar-container\">\n  @if (!template()) {\n    @if (this.ganttUpper.toolbarOptions()?.viewTypes?.length) {\n      <div class=\"toolbar-views\">\n        @for (viewType of this.ganttUpper.toolbarOptions()?.viewTypes; track viewType) {\n          @if (views[viewType]) {\n            <div class=\"toolbar-view\" [class.active]=\"viewType === this.ganttUpper.viewType()\" (click)=\"selectView(viewType)\">\n              {{ views[viewType].label }}\n            </div>\n          }\n        }\n      </div>\n    }\n  }\n  <ng-template [ngTemplateOutlet]=\"template()\"></ng-template>\n</div>\n","import { Injectable, ElementRef } from '@angular/core';\n\n@Injectable()\nexport class GanttPrintService {\n    private root: HTMLElement;\n\n    private mainContainer: HTMLElement;\n\n    constructor() {}\n\n    private setInlineStyles(targetElem: Element) {\n        const svgElements = Array.from(targetElem.getElementsByTagName('svg'));\n        for (const svgElement of svgElements) {\n            this.recursElementChildren(svgElement);\n        }\n    }\n\n    private recursElementChildren(node: SVGSVGElement | HTMLElement) {\n        const transformProperties = [\n            'fill',\n            'color',\n            'font-size',\n            'stroke',\n            'font',\n            'text-anchor',\n            'stroke-dasharray',\n            'shape-rendering',\n            'stroke-width'\n        ];\n        if (!node.style) {\n            return;\n        }\n        const styles = getComputedStyle(node);\n        for (const transformProperty of transformProperties) {\n            node.style[transformProperty] = styles[transformProperty];\n        }\n        for (const child of Array.from(node.childNodes)) {\n            this.recursElementChildren(child as SVGSVGElement);\n        }\n    }\n\n    register(root: ElementRef<HTMLElement>) {\n        this.root = root.nativeElement;\n        this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0] as HTMLElement;\n    }\n\n    async html2canvas(ignoreElementClass?: string) {\n        const root = this.root as HTMLElement;\n\n        const mainContainer = this.mainContainer as HTMLElement;\n        // set print width\n        const printWidth = root.offsetWidth;\n\n        // set print height\n        const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;\n\n        const html2canvas = (await import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;\n\n        return html2canvas(root, {\n            logging: false,\n            allowTaint: true,\n            useCORS: true,\n            width: printWidth,\n            height: printHeight,\n            ignoreElements: (element) => {\n                if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {\n                    return true;\n                }\n                if (element.classList.contains('gantt-calendar-today-overlay')) {\n                    return true;\n                }\n            },\n\n            onclone: (cloneDocument: Document) => {\n                const ganttClass = root.className;\n                const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\\s+/g, '.')}`) as HTMLElement;\n                const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container') as HTMLElement;\n                const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-grid-main') as HTMLElement;\n                const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main') as HTMLElement;\n\n                // change targetDom width\n                cloneGanttDom.style.width = `${printWidth}px`;\n                cloneGanttDom.style.height = `${printHeight}px`;\n                cloneGanttDom.style.overflow = `unset`;\n                cloneGanttContainerDom.style.backgroundColor = '#fff';\n                cloneCalendarOverlay.setAttribute('height', `${printHeight}`);\n                cloneCalendarOverlay.setAttribute('style', `background: transparent`);\n\n                if (cloneLinksOverlay) {\n                    cloneLinksOverlay.setAttribute('height', `${printHeight}`);\n                    cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);\n                }\n\n                // setInlineStyles for svg\n                this.setInlineStyles(cloneGanttDom);\n            }\n        });\n    }\n\n    async print(name: string = 'download', ignoreElementClass?: string) {\n        this.html2canvas(ignoreElementClass).then((canvas: HTMLCanvasElement) => {\n            const link = document.createElement('a');\n            const dataUrl = canvas.toDataURL('image/png');\n            link.download = `${name}.png`;\n            link.href = dataUrl;\n            link.click();\n        });\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GanttGroupInternal, GanttItemInternal, GanttItemType } from './class';\n\n@Pipe({\n    name: 'isGanttRangeItem'\n})\nexport class IsGanttRangeItemPipe implements PipeTransform {\n    transform(value: GanttItemType) {\n        return value === GanttItemType.range;\n    }\n}\n\n@Pipe({\n    name: 'isGanttBarItem'\n})\nexport class IsGanttBarItemPipe implements PipeTransform {\n    transform(value: GanttItemType) {\n        return value === GanttItemType.bar;\n    }\n}\n\n@Pipe({\n    name: 'isGanttCustomItem'\n})\nexport class IsGanttCustomItemPipe implements PipeTransform {\n    transform(value: GanttItemType) {\n        return value === GanttItemType.custom;\n    }\n}\n\n@Pipe({\n    name: 'isGanttGroup'\n})\nexport class IsGanttGroupPipe implements PipeTransform {\n    transform(data: GanttItemInternal | GanttGroupInternal): data is GanttGroupInternal {\n        return !!(data as GanttGroupInternal).items;\n    }\n}\n","import { GanttLinkItem, GanttLinkType } from '../../../class/link';\n\nexport abstract class GanttLinkLine {\n    constructor() {}\n\n    abstract generateSSPath(source: GanttLinkItem, target: GanttLinkItem): string;\n\n    abstract generateFFPath(source: GanttLinkItem, target: GanttLinkItem): string;\n\n    abstract generateFSAndSFPath(source: GanttLinkItem, target: GanttLinkItem, type?: GanttLinkType): string;\n\n    generatePath(source: GanttLinkItem, target: GanttLinkItem, type: GanttLinkType) {\n        if (source.before && source.after && target.before && target.after) {\n            let path = '';\n\n            switch (type) {\n                case GanttLinkType.ss:\n                    path = this.generateSSPath(source, target);\n                    break;\n                case GanttLinkType.ff:\n                    path = this.generateFFPath(source, target);\n                    break;\n\n                case GanttLinkType.sf:\n                    path = this.generateFSAndSFPath(source, target, type);\n                    break;\n                default:\n                    path = this.generateFSAndSFPath(source, target);\n            }\n\n            return path;\n        }\n    }\n}\n","import { Inject } from '@angular/core';\nimport { GanttLinkItem, GanttLinkType } from '../../../class/link';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../../gantt-upper';\nimport { GanttLinkLine } from './line';\n\nexport class GanttLinkLineCurve extends GanttLinkLine {\n    constructor(@Inject(GANTT_UPPER_TOKEN) private ganttUpper: GanttUpper) {\n        super();\n    }\n\n    generateSSPath(source: GanttLinkItem, target: GanttLinkItem) {\n        const x1 = source.before.x;\n        const y1 = source.before.y;\n        const x4 = target.before.x;\n        const y4 = target.before.y;\n        const isMirror = y4 > y1 ? 0 : 1;\n        const radius = Math.abs(y4 - y1) / 2;\n\n        if (x4 > x1) {\n            return `M ${x1} ${y1}\n                    A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}\n                    L ${x4} ${y4}`;\n        } else {\n            return `M ${x1} ${y1}\n                    L ${x4} ${y1}\n                    A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;\n        }\n    }\n    generateFFPath(source: GanttLinkItem, target: GanttLinkItem) {\n        const x1 = source.after.x;\n        const y1 = source.after.y;\n        const x4 = target.after.x;\n        const y4 = target.after.y;\n        const isMirror = y4 > y1 ? 1 : 0;\n        const radius = Math.abs(y4 - y1) / 2;\n        if (x4 > x1) {\n            return `M ${x1} ${y1}\n                    L ${x4} ${y1}\n                    A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;\n        } else {\n            return `M ${x1} ${y1}\n                    A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}\n                    L ${x4} ${y4}`;\n        }\n    }\n\n    generateFSAndSFPath(source: GanttLinkItem, target: GanttLinkItem, type?: GanttLinkType) {\n        let x1 = source.after.x;\n        let y1 = source.after.y;\n        let x4 = target.before.x;\n        let y4 = target.before.y;\n        const bezierWeight = 0.5;\n\n        if (type === GanttLinkType.sf) {\n            x1 = target.after.x;\n            y1 = target.after.y;\n            x4 = source.before.x;\n            y4 = source.before.y;\n        }\n\n        let dx = Math.abs(x4 - x1) * bezierWeight;\n        let x2 = x1 + dx;\n        let x3 = x4 - dx;\n\n        const centerX = (x1 + x4) / 2;\n        const centerY = (y1 + y4) / 2;\n\n        let controlX = this.ganttUpper.styles().rowHeight / 2;\n        const controlY = this.ganttUpper.styles().rowHeight / 2;\n\n        if (x1 >= x4) {\n            if (Math.abs(y4 - y1) <= this.ganttUpper.styles().rowHeight) {\n                return `M ${x1} ${y1}\n                    C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${x1} ${\n                        y4 > y1 ? y1 + controlY : y1 - controlY\n                    }\n                    L ${x4} ${y4 > y1 ? y4 - controlY : y4 + controlY}\n                    C ${x4 - controlY} ${y4 > y1 ? y4 - controlY : y4 + controlY}  ${x4 - controlX} ${y4} ${x4} ${y4}\n                    `;\n            } else {\n                controlX = this.ganttUpper.styles().rowHeight;\n                return `M ${x1} ${y1}\n                    C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${centerX} ${centerY}\n                    C ${x4 - controlX} ${y4 > y1 ? y4 - controlX : y4 + controlX} ${x4 - controlX} ${y4} ${x4} ${y4}\n                    `;\n            }\n        } else if (this.ganttUpper.linkOptions()?.showArrow && x4 - x1 < 200) {\n            dx = Math.max(Math.abs(y4 - y1) * bezierWeight, 60);\n            x2 = x1 + dx;\n            x3 = x4 - dx;\n            return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;\n        }\n\n        return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;\n    }\n}\n","import { GanttLinkLine } from './line';\nimport { GanttLinkItem, GanttLinkType } from '../../../class/link';\n\nexport class GanttLinkLineStraight extends GanttLinkLine {\n    private pathControl = 20;\n\n    constructor() {\n        super();\n    }\n\n    generateSSPath(source: GanttLinkItem, target: GanttLinkItem) {\n        const x1 = source.before.x;\n        const y1 = source.before.y;\n        const x4 = target.before.x;\n        const y4 = target.before.y;\n        const control = this.pathControl;\n\n        return `M ${x1} ${y1}\n                        L ${x4 > x1 ? x1 - control : x4 - control} ${y1}\n                        L ${x4 > x1 ? x1 - control : x4 - control} ${y4}\n                        L ${x4} ${y4}`;\n    }\n\n    generateFFPath(source: GanttLinkItem, target: GanttLinkItem) {\n        const x1 = source.after.x;\n        const y1 = source.after.y;\n        const x4 = target.after.x;\n        const y4 = target.after.y;\n        const control = this.pathControl;\n\n        return `M ${x1} ${y1}\n                        L ${x4 > x1 ? x4 + control : x1 + control} ${y1}\n                        L ${x4 > x1 ? x4 + control : x1 + control} ${y4}\n                        L ${x4} ${y4}`;\n    }\n\n    generateFSAndSFPath(source: GanttLinkItem, target: GanttLinkItem, type?: GanttLinkType) {\n        let x1 = source.after.x;\n        let y1 = source.after.y;\n        let x4 = target.before.x;\n        let y4 = target.before.y;\n        const control = this.pathControl;\n\n        if (type === GanttLinkType.sf) {\n            x1 = target.after.x;\n            y1 = target.after.y;\n            x4 = source.before.x;\n            y4 = source.before.y;\n        }\n\n        if (x4 - x1 >= 40) {\n            return `M ${x1} ${y1}\n                        L ${x1 + control} ${y1}\n                        L ${x1 + control} ${y4}\n                        L ${x4} ${y4}`;\n        } else {\n            return `M ${x1} ${y1}\n                        L ${x1 + control} ${y1}\n                        L ${x1 + control} ${y4 > y1 ? y1 + control : y1 - control}\n                        L ${x4 - control} ${y4 > y1 ? y1 + control : y1 - control}\n                        L ${x4 - control} ${y4}\n                        L ${x4} ${y4}`;\n        }\n    }\n}\n","import { GanttLinkLineType } from '../../../class/link';\nimport { GanttUpper } from '../../../gantt-upper';\nimport { GanttLinkLineCurve } from './curve';\nimport { GanttLinkLineStraight } from './straight';\n\nexport function createLineGenerator(type: GanttLinkLineType, ganttUpper?: GanttUpper) {\n    switch (type) {\n        case GanttLinkLineType.curve:\n            return new GanttLinkLineCurve(ganttUpper);\n        case GanttLinkLineType.straight:\n            return new GanttLinkLineStraight();\n        default:\n            throw new Error('gantt link path type invalid');\n    }\n}\n","import { Component, OnInit, HostBinding, ChangeDetectorRef, ElementRef, OnDestroy, inject, input, output, effect } from '@angular/core';\nimport { EMPTY, merge, Subject } from 'rxjs';\nimport { takeUntil, skip, debounceTime } from 'rxjs/operators';\nimport { GanttGroupInternal } from '../../class/group';\nimport { GanttItemInternal } from './../../class/item';\nimport { GanttLineClickEvent } from '../../class/event';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttLinkItem, LinkInternal, GanttLinkType } from '../../class/link';\nimport { GanttLinkLine } from './lines/line';\nimport { createLineGenerator } from './lines/factory';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'gantt-links-overlay',\n    templateUrl: './links.component.html',\n    imports: []\n})\nexport class GanttLinksComponent implements OnInit, OnDestroy {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    private cdr = inject(ChangeDetectorRef);\n\n    private elementRef = inject(ElementRef);\n\n    private ganttDragContainer = inject(GanttDragContainer);\n\n    readonly flatItems = input<(GanttGroupInternal | GanttItemInternal)[]>([]);\n\n    readonly lineClick = output<GanttLineClickEvent>();\n\n    public links: LinkInternal[] = [];\n\n    public ganttLinkTypes = GanttLinkType;\n\n    public showArrow = false;\n\n    private linkItems: GanttLinkItem[] = [];\n\n    private linkLine: GanttLinkLine;\n\n    private unsubscribe$ = new Subject<void>();\n\n    @HostBinding('class.gantt-links-overlay') ganttLinksOverlay = true;\n\n    constructor() {\n        effect(() => {\n            this.buildLinks();\n        });\n    }\n\n    ngOnInit() {\n        const linkOptions = this.ganttUpper.linkOptions();\n        this.linkLine = createLineGenerator(linkOptions.lineType, this.ganttUpper);\n\n        this.showArrow = linkOptions.showArrow;\n\n        this.ganttDragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n            this.elementRef.nativeElement.style.visibility = 'hidden';\n        });\n\n        merge(\n            outputToObservable(this.ganttUpper.viewChange),\n            outputToObservable(this.ganttUpper.expandChange),\n            this.ganttUpper.view.start$,\n            outputToObservable(this.ganttUpper.dragEnded),\n            this.ganttUpper.linkDragEnded ? outputToObservable(this.ganttUpper.linkDragEnded) : EMPTY,\n            outputToObservable(this.ganttUpper.table()?.dragDropped) || EMPTY\n        )\n            .pipe(skip(1), debounceTime(0), takeUntil(this.unsubscribe$))\n            .subscribe(() => {\n                this.elementRef.nativeElement.style.visibility = 'visible';\n                this.buildLinks();\n                this.cdr.detectChanges();\n            });\n    }\n\n    private computeItemPosition() {\n        const rowHeight = this.ganttUpper.styles().rowHeight;\n        const barHeight = this.ganttUpper.styles().barHeight;\n        this.linkItems = [];\n\n        this.flatItems().forEach((item, itemIndex) => {\n            if (!item.hasOwnProperty('items')) {\n                const ganttItem = item as GanttItemInternal;\n                if (ganttItem.refs && ganttItem.refs.width > 0) {\n                    const y = itemIndex * rowHeight + ganttItem.refs.y + barHeight / 2;\n                    this.linkItems.push({\n                        ...ganttItem,\n                        before: {\n                            x: ganttItem.refs.x,\n                            y\n                        },\n                        after: {\n                            x: ganttItem.refs.x + ganttItem.refs.width,\n                            y\n                        }\n                    });\n                }\n            }\n        });\n    }\n\n    buildLinks() {\n        this.computeItemPosition();\n        this.links = [];\n        this.linkItems.forEach((source) => {\n            if (source.origin.start || source.origin.end) {\n                source.links.forEach((link) => {\n                    const target = this.linkItems.find((item) => item.id === link.link);\n                    if (target && (target.origin.start || target.origin.end)) {\n                        const linkColors = {\n                            default: this.ganttUpper.colors().gray[600],\n                            active: this.ganttUpper.colors().primary,\n                            blocked: this.ganttUpper.colors().danger\n                        };\n\n                        let defaultColor: string = linkColors.default;\n                        let activeColor: string = linkColors.active;\n\n                        if (link.type === GanttLinkType.ff && source.end.getTime() > target.end.getTime()) {\n                            defaultColor = linkColors.blocked;\n                            activeColor = linkColors.blocked;\n                        } else if (link.type === GanttLinkType.fs && source.end.getTime() > target.start.getTime()) {\n                            defaultColor = linkColors.blocked;\n                            activeColor = linkColors.blocked;\n                        } else if (link.type === GanttLinkType.sf && source.start.getTime() > target.end.getTime()) {\n                            defaultColor = linkColors.blocked;\n                            activeColor = linkColors.blocked;\n                        } else if (link.type === GanttLinkType.ss && source.start.getTime() > target.start.getTime()) {\n                            defaultColor = linkColors.blocked;\n                            activeColor = linkColors.blocked;\n                        }\n\n                        if (link.color) {\n                            if (typeof link.color === 'string') {\n                                defaultColor = link.color;\n                                activeColor = link.color;\n                            } else {\n                                defaultColor = link.color.default;\n                                activeColor = link.color.active;\n                            }\n                        }\n\n                        this.links.push({\n                            path: this.linkLine.generatePath(source, target, link.type),\n                            source: source.origin,\n                            target: target.origin,\n                            type: link.type,\n                            color: defaultColor,\n                            defaultColor,\n                            activeColor\n                        });\n                    }\n                });\n            }\n        });\n    }\n\n    trackBy(index: number) {\n        return index;\n    }\n\n    onLineClick(event: MouseEvent, link: LinkInternal) {\n        this.lineClick.emit({\n            event,\n            source: link.source,\n            target: link.target\n        });\n    }\n\n    mouseEnterPath(link: LinkInternal, index: number) {\n        link.color = link.activeColor || link.defaultColor;\n        if (index < this.links.length - 1) {\n            this.links.splice(index, 1);\n            this.links.push(link);\n        }\n    }\n\n    mouseLeavePath(link: LinkInternal) {\n        link.color = link.defaultColor;\n    }\n\n    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n    }\n}\n","<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n  @for (link of links; track trackBy(i); let i = $index) {\n    <ng-container>\n      <path\n        [attr.d]=\"link.path\"\n        fill=\"transparent\"\n        stroke-width=\"2\"\n        [attr.stroke]=\"link.color\"\n        pointer-events=\"none\"\n        [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n      ></path>\n      <g>\n        <path\n          class=\"link-line\"\n          (click)=\"onLineClick($event, link)\"\n          [attr.d]=\"link.path\"\n          (mouseenter)=\"mouseEnterPath(link, i)\"\n          (mouseleave)=\"mouseLeavePath(link)\"\n          stroke=\"transparent\"\n          stroke-width=\"9\"\n          fill=\"none\"\n          cursor=\"pointer\"\n        ></path>\n      </g>\n      @if (showArrow) {\n        <defs>\n          @if (link.type === ganttLinkTypes.sf) {\n            <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"180\">\n              <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n            </marker>\n          } @else {\n            <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n              <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n            </marker>\n          }\n        </defs>\n      }\n    </ng-container>\n  }\n  <line class=\"link-dragging-line\"></line>\n</svg>\n","const angleRight = `<svg xmlns=\"http://www.w3.org/2000/svg\" fit=\"\"  preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><g id=\"amnavigation/angle-right\" stroke-width=\"1\" fill-rule=\"evenodd\"><path d=\"M7.978 11.498l-.005.005L2.3 5.831 3.13 5l4.848 4.848L12.826 5l.83.831-5.673 5.672-.005-.005z\"   transform=\"rotate(-90 7.978 8.252)\"></path></g></svg>`;\nconst angleDown = `<svg xmlns=\"http://www.w3.org/2000/svg\" fit=\"\"  preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><g id=\"aknavigation/angle-down\" stroke-width=\"1\" fill-rule=\"evenodd\"><path d=\"M7.978 11.997l-.005.006L2.3 6.33l.83-.831 4.848 4.848L12.826 5.5l.83.83-5.673 5.673-.005-.006z\" ></path></g></svg>`;\nconst plusSquare = `<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" fit=\"\"   preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><g id=\"kxaction/plus-square\" stroke-width=\"1\" fill-rule=\"evenodd\"><path d=\"M2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2zm0 1.2a.8.8 0 0 0-.8.8v12a.8.8 0 0 0 .8.8h12a.8.8 0 0 0 .8-.8V2a.8.8 0 0 0-.8-.8H2zm5.45 6.2V4.75h1.2V7.4h2.65v1.2H8.65v2.65h-1.2V8.6H4.8V7.4h2.65z\"></path></g></svg>`;\nconst minusSquare = `<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" fit=\"\" preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><g id=\"jnaction/minus-square\" stroke-width=\"1\" fill-rule=\"evenodd\"><path d=\"M2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2zm0 1.2a.8.8 0 0 0-.8.8v12a.8.8 0 0 0 .8.8h12a.8.8 0 0 0 .8-.8V2a.8.8 0 0 0-.8-.8H2zm2.8 6.2h6.5v1.2H4.8V7.4z\"></path></g></svg>`;\nconst loadingIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"  viewBox=\"0 0 50 50\" style=\"enable-background:new 0 0 50 50\" xml:space=\"preserve\">\n<path fill=\"#aaa\" d=\"M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z\" transform=\"rotate(275.098 25 25)\">\n    <animateTransform attributeType=\"xml\" attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\" dur=\"0.6s\" repeatCount=\"indefinite\"></animateTransform>\n</path>\n</svg>`;\nconst emptyIcon = `<svg\nwidth=\"148px\"\nheight=\"134px\"\nviewBox=\"0 0 148 134\"\nversion=\"1.1\"\nxmlns=\"http://www.w3.org/2000/svg\"\nxmlns:xlink=\"http://www.w3.org/1999/xlink\"\n>\n<defs>\n  <filter x=\"0.0%\" y=\"0.0%\" width=\"100.0%\" height=\"100.0%\" filterUnits=\"objectBoundingBox\" id=\"filter-1\">\n    <feGaussianBlur stdDeviation=\"0\" in=\"SourceGraphic\"></feGaussianBlur>\n  </filter>\n</defs>\n<g id=\"148x134\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n  <g id=\"编组-6\" transform=\"translate(1.000000, 1.000000)\">\n    <ellipse\n      id=\"椭圆形\"\n      fill=\"#EDEEF2\"\n      opacity=\"0.3\"\n      filter=\"url(#filter-1)\"\n      cx=\"73.0800017\"\n      cy=\"115.920003\"\n      rx=\"73.0800017\"\n      ry=\"16.8000004\"\n    ></ellipse>\n    <g id=\"编组-5\" transform=\"translate(15.120000, 0.000000)\">\n      <polygon\n        id=\"矩形\"\n        fill=\"#E2E4E9\"\n        points=\"19.2789848 49.5600011 99.1200023 48.7200011 117.600003 75.9297673 117.600003 92.313049 0 92.313049 0 75.0356267\"\n      ></polygon>\n      <path\n        d=\"M23.5200005,0 L94.0800002,0 C97.7913538,2.06413823e-16 100.8,3.00864655 100.8,6.72000015 L100.8,99.1200023 L100.8,99.1200023 L16.8000004,99.1200023 L16.8000004,6.72000015 C16.8000004,3.00864655 19.8086469,1.56994302e-15 23.5200005,0 Z\"\n        id=\"矩形\"\n        fill=\"#F9FAFB\"\n      ></path>\n      <path\n        d=\"M30.9200007,12.4400003 L86.6800019,12.4400003 C88.5356787,12.4400003 90.040002,13.9443236 90.040002,15.8000004 L90.040002,42.000001 C90.040002,43.8556778 88.5356787,45.360001 86.6800019,45.360001 L30.9200007,45.360001 C29.0643239,45.360001 27.5600006,43.8556778 27.5600006,42.000001 L27.5600006,15.8000004 C27.5600006,13.9443236 29.0643239,12.4400003 30.9200007,12.4400003 Z\"\n        id=\"矩形\"\n        fill=\"#E8EAEE\"\n      ></path>\n      <text\n        id=\"&lt;/null&gt;\"\n        font-family=\"PingFangSC-Medium, PingFang SC\"\n        font-size=\"15.1200003\"\n        font-weight=\"400\"\n        fill=\"#BCBECD\"\n      >\n        <tspan x=\"33.6000008\" y=\"32.8000004\">&lt;/null&gt;</tspan>\n      </text>\n      <rect id=\"矩形\" fill=\"#E8EAEE\" x=\"27.5600006\" y=\"52.0800012\" width=\"61.4800014\" height=\"5.04000011\" rx=\"2.52000006\"></rect>\n      <rect\n        id=\"矩形备份\"\n        fill=\"#E8EAEE\"\n        x=\"27.5600006\"\n        y=\"63.8400014\"\n        width=\"61.4800014\"\n        height=\"5.04000011\"\n        rx=\"2.52000006\"\n      ></rect>\n      <path\n        d=\"M0,75.6000017 L29.280235,75.6000017 C32.0637502,75.6000017 34.3202352,77.8564866 34.3202352,80.6400018 L34.3202352,86.2591426 C34.3202352,89.0426578 36.5767201,91.2991427 39.3602353,91.2991427 L78.4136737,91.2991427 C81.1971889,91.2991427 83.4536738,89.0426578 83.4536738,86.2591426 L83.4536738,80.6400018 C83.4536738,77.8564866 85.7101587,75.6000017 88.4936739,75.6000017 L117.600003,75.6000017 L117.600003,75.6000017 L117.600003,110.880003 C117.600003,115.519195 113.839194,119.280003 109.200002,119.280003 L8.40000019,119.280003 C3.76080819,119.280003 -6.53729019e-15,115.519195 0,110.880003 L0,75.6000017 L0,75.6000017 Z\"\n        id=\"矩形\"\n        fill=\"#EDEFF2\"\n      ></path>\n    </g>\n  </g>\n</g>\n</svg>`;\n\nconst dragIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" fit=\"\" preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><g id=\"aijaction/drag--\" stroke-width=\"1\" fill-rule=\"evenodd\"><g id=\"aij拖动\" transform=\"translate(5 1)\" fill-rule=\"nonzero\"><path d=\"M1 2a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm4 0a1 1 0 1 1 0-2 1 1 0 0 1 0 2zM1 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm4 0a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm-4 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm4 0a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm-4 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm4 0a1 1 0 1 1 0-2 1 1 0 0 1 0 2z\" id=\"aij形状结合\"></path></g></g></svg>`;\nconst arrowLeftIcon = `<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" fit=\"\" height=\"1em\" width=\"1em\" preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><g id=\"adinavigation/arrow-left\" stroke-width=\"1\" fill-rule=\"evenodd\"><path d=\"M7.4 4.15L4.438 7.315a.6.6 0 0 1-.876-.82l3.97-4.243a.598.598 0 0 1 .93-.057l3.97 4.323a.6.6 0 1 1-.885.812L8.6 4.118v9.149c0 .404-.269.733-.6.733-.332 0-.6-.329-.6-.733V4.15z\" id=\"adi形状结合\" transform=\"rotate(-90 7.995 8)\"></path></g></svg>`;\nconst arrowRightIcon = `<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" fit=\"\" height=\"1em\" width=\"1em\" preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\"><g id=\"adlnavigation/arrow-right\" stroke-width=\"1\" fill-rule=\"evenodd\"><path d=\"M7.4 4.15L4.438 7.315a.6.6 0 0 1-.876-.82l3.97-4.243a.598.598 0 0 1 .93-.057l3.97 4.323a.6.6 0 1 1-.885.812L8.6 4.118v9.149c0 .404-.269.733-.6.733-.332 0-.6-.329-.6-.733V4.15z\" id=\"adl形状结合\" transform=\"rotate(90 7.995 8)\"></path></g></svg>`;\nexport const icons = {\n    'angle-right': angleRight,\n    'angle-down': angleDown,\n    'plus-square': plusSquare,\n    'minus-square': minusSquare,\n    loading: loadingIcon,\n    empty: emptyIcon,\n    drag: dragIcon,\n    'arrow-left': arrowLeftIcon,\n    'arrow-right': arrowRightIcon\n};\n","import { Component, Input, ElementRef, HostBinding, inject, input, effect } from '@angular/core';\nimport { icons } from './icons';\n\n@Component({\n    selector: 'gantt-icon',\n    template: ''\n})\nexport class GanttIconComponent {\n    private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    @HostBinding('class.gantt-icon') isIcon = true;\n\n    readonly iconName = input<string>();\n\n    constructor() {\n        effect(() => {\n            this.setSvg(this.iconName());\n        });\n    }\n\n    setSvg(name: string) {\n        const iconSvg = icons[name];\n        if (iconSvg) {\n            this.elementRef.nativeElement.innerHTML = iconSvg;\n        } else {\n            this.elementRef.nativeElement.innerHTML = '';\n        }\n    }\n}\n","import { Component, HostBinding, TemplateRef, OnInit, NgZone, inject, input, output, afterNextRender } from '@angular/core';\nimport { GanttGroupInternal, GanttItemInternal, GanttBarClickEvent, GanttLineClickEvent, GanttItem } from '../../class';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { IsGanttRangeItemPipe, IsGanttBarItemPipe, IsGanttCustomItemPipe, IsGanttGroupPipe } from '../../gantt.pipe';\nimport { NgxGanttBaselineComponent } from '../baseline/baseline.component';\nimport { NgxGanttBarComponent } from '../bar/bar.component';\nimport { NgxGanttRangeComponent } from '../range/range.component';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { GanttLinksComponent } from '../links/links.component';\nimport { NgxGanttRootComponent } from './../../root.component';\nimport { GanttIconComponent } from '../icon/icon.component';\nimport { GanttDomService } from '../../gantt-dom.service';\nimport { combineLatest, Subject, takeUntil } from 'rxjs';\nimport { NgxGanttPlaceholderComponent } from '../bar/placeholder.component';\n\n@Component({\n    selector: 'gantt-main',\n    templateUrl: './gantt-main.component.html',\n    imports: [\n        GanttLinksComponent,\n        NgClass,\n        NgTemplateOutlet,\n        NgxGanttRangeComponent,\n        NgxGanttBarComponent,\n        NgxGanttBaselineComponent,\n        IsGanttRangeItemPipe,\n        IsGanttBarItemPipe,\n        IsGanttCustomItemPipe,\n        IsGanttGroupPipe,\n        GanttIconComponent,\n        NgxGanttPlaceholderComponent\n    ]\n})\nexport class GanttMainComponent {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    dom = inject(GanttDomService);\n\n    protected ngZone = inject(NgZone);\n\n    readonly viewportItems = input<(GanttGroupInternal | GanttItemInternal)[]>(undefined);\n\n    readonly flatItems = input<(GanttGroupInternal | GanttItemInternal)[]>(undefined);\n\n    readonly groupHeaderTemplate = input<TemplateRef<any>>(undefined);\n\n    readonly itemTemplate = input<TemplateRef<any>>(undefined);\n\n    readonly barTemplate = input<TemplateRef<any>>(undefined);\n\n    readonly rangeTemplate = input<TemplateRef<any>>(undefined);\n\n    readonly baselineTemplate = input<TemplateRef<any>>(undefined);\n\n    readonly ganttRoot = input<NgxGanttRootComponent>(undefined);\n\n    readonly quickTimeFocus = input<boolean>(undefined);\n\n    readonly barClick = output<GanttBarClickEvent>();\n\n    readonly lineClick = output<GanttLineClickEvent>();\n\n    @HostBinding('class.gantt-main-container') ganttMainClass = true;\n\n    private unsubscribe$ = new Subject<void>();\n\n    constructor() {\n        afterNextRender(() => {\n            this.ngZone.runOutsideAngular(() => {\n                this.setupResize();\n            });\n        });\n    }\n\n    toItemType(data: GanttItemInternal | GanttGroupInternal) {\n        return data as GanttItemInternal;\n    }\n\n    trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n        return item.id || index;\n    }\n\n    private setupResize() {\n        combineLatest([this.dom.getResize(), this.dom.getResizeByElement(this.dom.mainContainer)])\n            .pipe(takeUntil(this.unsubscribe$))\n            .subscribe(() => {\n                this.dom.setVisibleRangeX();\n            });\n    }\n\n    quickTime(item: GanttItem, type: 'left' | 'right') {\n        const date = type === 'left' ? item.start || item.end : item.end || item.start;\n        this.ganttRoot().scrollToDate(date);\n    }\n}\n","<gantt-links-overlay [flatItems]=\"flatItems()\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<div class=\"gantt-main-groups\" [style.width.px]=\"ganttUpper.view.width\">\n  @for (data of viewportItems(); track trackBy($index, data)) {\n    @if (data | isGanttGroup) {\n      <div class=\"gantt-group\" [ngClass]=\"data.class\">\n        <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate()\" [ngTemplateOutletContext]=\"{ group: data }\"></ng-template>\n      </div>\n    }\n    @if (!(data | isGanttGroup)) {\n      <div class=\"gantt-item\" [style]=\"data.laneStyle\" [class.gantt-main-item-active]=\"ganttUpper.isSelected(data.id)\">\n        @if (data.type | isGanttCustomItem) {\n          <ng-template\n            [ngTemplateOutlet]=\"itemTemplate()\"\n            [ngTemplateOutletContext]=\"{\n              item: data.origin,\n              refs: data.refs,\n              baseline: ganttUpper.baselineItemsMap[data.id]?.origin,\n              baselineRefs: ganttUpper.baselineItemsMap[data.id]?.refs\n            }\"\n          >\n          </ng-template>\n        }\n        @if ((data.type | isGanttRangeItem) || (data.type | isGanttBarItem)) {\n          @if (data.type | isGanttRangeItem) {\n            @defer (on viewport) {\n              <gantt-range [template]=\"rangeTemplate()\" [item]=\"data\"></gantt-range>\n            } @placeholder {\n              <gantt-bar-placeholder class=\"gantt-bar-placeholder-range\" [item]=\"data\"></gantt-bar-placeholder>\n            }\n          }\n          @if (data.type | isGanttBarItem) {\n            @defer (on viewport) {\n              <gantt-bar [item]=\"data\" [template]=\"barTemplate()\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n            } @placeholder {\n              <gantt-bar-placeholder [item]=\"data\" [style.height.px]=\"ganttUpper.styles().lineHeight\"></gantt-bar-placeholder>\n            }\n          }\n          @if (ganttUpper.baselineItemsMap[data.id]) {\n            <gantt-baseline [baselineItem]=\"ganttUpper.baselineItemsMap[data.id]\" [template]=\"baselineTemplate()\"></gantt-baseline>\n          }\n        }\n      </div>\n    }\n  }\n</div>\n\n@if (quickTimeFocus()) {\n  <div class=\"gantt-quick-time-focus-container\" [style.width.px]=\"ganttUpper.view.width\">\n    <div class=\"gantt-quick-time-focus\" [style.width.px]=\"dom.visibleRangeX().max - dom.visibleRangeX().min\">\n      @for (data of viewportItems(); track trackBy(i, data); let i = $index) {\n        @let item = toItemType(data);\n        <div class=\"gantt-quick-time-focus-item\" [ngClass]=\"{ 'gantt-quick-time-focus-item-hide': !item?.refs?.width }\">\n          <span class=\"ml-2\">\n            @if (item.refs?.x < dom.visibleRangeX().min && item.refs?.width) {\n              <a class=\"gantt-quick-time-focus-item-arrow link-secondary\" href=\"javascript:;\" (click)=\"quickTime(item.origin, 'left')\">\n                <gantt-icon iconName=\"arrow-left\"></gantt-icon>\n              </a>\n            }\n          </span>\n          <span class=\"mr-2\">\n            @if (item.refs?.x + item.refs?.width > dom.visibleRangeX().max && item.refs?.width) {\n              <a class=\"gantt-quick-time-focus-item-arrow link-secondary\" href=\"javascript:;\" (click)=\"quickTime(item.origin, 'right')\">\n                <gantt-icon iconName=\"arrow-right\"></gantt-icon>\n              </a>\n            }\n          </span>\n        </div>\n      }\n    </div>\n  </div>\n}\n","import { InjectionToken, ChangeDetectorRef, Signal } from '@angular/core';\nimport { GanttGroupInternal, GanttItemInternal } from './class';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { GanttStyleOptions } from './gantt.config';\n\nexport interface GanttAbstractComponent {\n    table: Signal<NgxGanttTableComponent>;\n    styles: Signal<GanttStyleOptions>;\n    maxLevel: Signal<number>;\n    async: Signal<boolean>;\n    cdr: ChangeDetectorRef;\n    expandGroup(group: GanttGroupInternal): void;\n    expandChildren(item: GanttItemInternal): void;\n}\n\nexport const GANTT_ABSTRACT_TOKEN = new InjectionToken<GanttAbstractComponent>('gantt-abstract-token');\n","interface SetStyleWithVendorPrefixOptions {\n    element: HTMLElement;\n    // The name of the CSS property, e.g. `transform`.\n    style: string;\n    value: string;\n}\n\nconst supports = (typeof window !== 'undefined' && !!window.CSS && CSS.supports) || (() => false);\n\n/**\n * Note: we don't need to add vendor prefixes within `.scss` files since they're added automatically.\n * This function is necessary when the `element.style` is updated directly through the JavaScript.\n * This is not required to be used with CSS properties that don't require vendor prefixes (e.g. `opacity`).\n */\nexport function setStyleWithVendorPrefix({ element, style, value }: SetStyleWithVendorPrefixOptions): void {\n    element.style[style] = value;\n\n    if (supports(`-webkit-${style}: ${value}`)) {\n        // Note: some browsers still require setting `-webkit` vendor prefix. E.g. Mozilla 49 has implemented\n        // the 3D support for `transform`, but it requires setting `-webkit-` prefix.\n        element.style[`-webkit-${style}`] = value;\n    }\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { CdkDrag, CdkDragEnd, CdkDragMove, CdkDragStart } from '@angular/cdk/drag-drop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, ElementRef, HostBinding, effect, inject, input, untracked, viewChild } from '@angular/core';\nimport { GANTT_ABSTRACT_TOKEN, GanttAbstractComponent } from '../../../gantt-abstract';\nimport { NgxGanttTableColumnComponent } from '../../../table/gantt-column.component';\nimport { setStyleWithVendorPrefix } from '../../../utils/set-style-with-vendor-prefix';\nimport { GanttSyncScrollXDirective } from '../../../directives/sync-scroll.directive';\nexport const defaultColumnWidth = 100;\nexport const minColumnWidth = 80;\ninterface DragFixedConfig {\n    target: HTMLElement;\n    originWidth: number;\n    movedWidth: number;\n    minWidth: number;\n}\n@Component({\n    selector: 'gantt-table-header',\n    templateUrl: './gantt-table-header.component.html',\n    imports: [NgTemplateOutlet, CdkDrag, GanttSyncScrollXDirective]\n})\nexport class GanttTableHeaderComponent {\n    private elementRef = inject(ElementRef);\n\n    gantt = inject<GanttAbstractComponent>(GANTT_ABSTRACT_TOKEN);\n\n    public dragStartLeft: number;\n\n    public tableWidth = 0;\n\n    public customWidth: number;\n\n    private columnsLayoutInitialized = false;\n\n    readonly columns = input<ReadonlyArray<NgxGanttTableColumnComponent>>();\n\n    readonly resizeLineElementRef = viewChild<ElementRef<HTMLElement>>('resizeLine');\n\n    @HostBinding('class') className = `gantt-table-header `;\n\n    constructor() {\n        effect(() => {\n            const cols = this.columns();\n            if (!cols?.length) {\n                return;\n            }\n            if (!this.columnsLayoutInitialized) {\n                this.columnsLayoutInitialized = true;\n                this.columnsChange();\n                return;\n            }\n            untracked(() => {\n                if (!this.gantt?.table()?.width() && !this.customWidth) {\n                    this.columnsChange();\n                }\n            });\n        });\n    }\n\n    private columnsChange() {\n        let tableWidth = 0;\n        this.columns().forEach((column) => {\n            if (!column.columnWidth()) {\n                column.columnWidth.set(coerceCssPixelValue(defaultColumnWidth));\n            }\n            tableWidth += Number(column.columnWidth().replace('px', ''));\n        });\n        this.tableWidth = this.gantt?.table()?.width() ?? this.customWidth ?? this.getCalcWidth(tableWidth);\n        this.gantt.cdr.detectChanges();\n    }\n\n    private dragFixed(config: DragFixedConfig) {\n        if (config.movedWidth < config.minWidth) {\n            setStyleWithVendorPrefix({\n                element: config.target,\n                style: 'transform',\n                value: `translate3d(${config.minWidth - config.originWidth}px, 0, 0)`\n            });\n        }\n    }\n\n    onResizeStarted(event: CdkDragStart) {\n        const target = event.source.element.nativeElement;\n        this.dragStartLeft = target.getBoundingClientRect().left;\n    }\n\n    onResizeMoved(event: CdkDragMove, column?: NgxGanttTableColumnComponent) {\n        const target = event.source.element.nativeElement;\n        const left = target.getBoundingClientRect().left;\n\n        let originWidth: number;\n        let movedWidth: number;\n        let minWidth: number;\n        if (column) {\n            originWidth = parseInt(column.columnWidth(), 10);\n            movedWidth = originWidth + (left - this.dragStartLeft);\n            minWidth = minColumnWidth;\n        } else {\n            originWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n            movedWidth = originWidth + (left - this.dragStartLeft);\n            minWidth = minColumnWidth * this.columns().length;\n        }\n\n        this.dragFixed({\n            target,\n            originWidth,\n            movedWidth,\n            minWidth\n        });\n\n        this.showAuxiliaryLine(event);\n    }\n\n    onResizeEnded(event: CdkDragEnd, column: NgxGanttTableColumnComponent) {\n        const beforeWidth = parseInt(column.columnWidth(), 10);\n        const target = event.source.element.nativeElement;\n        const left = target.getBoundingClientRect().left;\n        const width = parseInt(column.columnWidth(), 10) + (left - this.dragStartLeft);\n        const columnWidth = Math.max(width || 0, minColumnWidth);\n        column.columnWidth.set(coerceCssPixelValue(columnWidth));\n        if (this.gantt.table()) {\n            this.gantt.table()?.columnChanges.emit({ columns: this.columns() });\n        }\n        this.tableWidth =\n            this.gantt?.table()?.width() ?? this.customWidth ?? this.getCalcWidth(this.tableWidth - beforeWidth + columnWidth);\n        this.hideAuxiliaryLine();\n        event.source.reset();\n    }\n\n    onOverallResizeEnded(event: CdkDragEnd) {\n        const target = event.source.element.nativeElement;\n        const left = target.getBoundingClientRect().left;\n        const tableWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n        const dragWidth = left - this.dragStartLeft;\n        this.tableWidth = this.getCalcWidth(parseInt(tableWidth + dragWidth, 10));\n        this.customWidth = this.tableWidth;\n        if (this.gantt.table()) {\n            this.gantt.table()?.resizeChange.emit(this.tableWidth);\n        }\n        this.hideAuxiliaryLine();\n        event.source.reset();\n    }\n\n    private showAuxiliaryLine(event: CdkDragMove) {\n        const tableRect = this.elementRef.nativeElement.getBoundingClientRect();\n        const targetRect = event.source.element.nativeElement.getBoundingClientRect();\n        const distance = { x: targetRect.left - tableRect.left, y: targetRect.top - tableRect.top };\n        const resizeLineElementRef = this.resizeLineElementRef();\n        resizeLineElementRef.nativeElement.style.left = `${distance.x}px`;\n        resizeLineElementRef.nativeElement.style.display = 'block';\n    }\n\n    private hideAuxiliaryLine() {\n        this.resizeLineElementRef().nativeElement.style.display = 'none';\n    }\n\n    private getCalcWidth(width: number): number {\n        const maxWidth = this.gantt.table()?.maxWidth();\n        return maxWidth && width > maxWidth ? maxWidth : width;\n    }\n}\n","<div class=\"gantt-table-header-container\" syncScrollX=\"ganttTableXScroll\" [style.width.px]=\"tableWidth\" cdkScrollable>\n  @for (column of columns(); track $index) {\n    <div class=\"gantt-table-column\" [style.width]=\"column.columnWidth()\">\n      @if (column.headerTemplateRef()) {\n        <ng-container [ngTemplateOutlet]=\"column.headerTemplateRef()\"> </ng-container>\n      } @else {\n        {{ column.name() }}\n      }\n      <div\n        class=\"column-resize-handle\"\n        cdkDrag\n        cdkDragLockAxis=\"x\"\n        cdkDragBoundary=\".gantt\"\n        (cdkDragMoved)=\"onResizeMoved($event, column)\"\n        (cdkDragStarted)=\"onResizeStarted($event)\"\n        (cdkDragEnded)=\"onResizeEnded($event, column)\"\n      ></div>\n    </div>\n  }\n  <div class=\"gantt-table-column gantt-table-column-placeholder\"></div>\n</div>\n\n@if (gantt?.table()?.settingsSlot()) {\n  <ng-template [ngTemplateOutlet]=\"gantt?.table()?.settingsSlot()\"></ng-template>\n}\n\n<div\n  class=\"table-resize-handle\"\n  cdkDrag\n  cdkDragLockAxis=\"x\"\n  cdkDragBoundary=\".gantt\"\n  (cdkDragMoved)=\"onResizeMoved($event)\"\n  (cdkDragStarted)=\"onResizeStarted($event)\"\n  (cdkDragEnded)=\"onOverallResizeEnded($event)\"\n></div>\n\n<div #resizeLine class=\"table-resize-auxiliary-line\"></div>\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { CdkDrag, CdkDragDrop, CdkDragEnd, CdkDragHandle, CdkDragMove, CdkDragStart, CdkDropList } from '@angular/cdk/drag-drop';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    Component,\n    ElementRef,\n    HostBinding,\n    OnDestroy,\n    QueryList,\n    TemplateRef,\n    ViewChildren,\n    DOCUMENT,\n    inject,\n    input,\n    output,\n    computed,\n    effect,\n    signal\n} from '@angular/core';\nimport { auditTime, filter, startWith, Subject, takeUntil } from 'rxjs';\nimport {\n    GanttGroupInternal,\n    GanttItemInternal,\n    GanttSelectedEvent,\n    GanttTableDragDroppedEvent,\n    GanttTableDragEndedEvent,\n    GanttTableDragEnterPredicateContext,\n    GanttTableDragStartedEvent,\n    GanttTableDropPosition\n} from '../../../class';\nimport { GANTT_ABSTRACT_TOKEN, GanttAbstractComponent } from '../../../gantt-abstract';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../../gantt-upper';\nimport { IsGanttGroupPipe, IsGanttRangeItemPipe } from '../../../gantt.pipe';\nimport { NgxGanttTableColumnComponent } from '../../../table/gantt-column.component';\nimport { GanttIconComponent } from '../../icon/icon.component';\nimport { defaultColumnWidth } from '../header/gantt-table-header.component';\n\n@Component({\n    selector: 'gantt-table-body',\n    templateUrl: './gantt-table-body.component.html',\n    host: {\n        class: 'gantt-table-body',\n        '[class.gantt-table-empty]': 'ganttTableEmptyClass()',\n        '[class.gantt-table-dragging]': 'ganttTableDragging',\n        '[class.gantt-table-draggable]': 'draggable()'\n    },\n    imports: [CdkDropList, GanttIconComponent, NgTemplateOutlet, NgClass, CdkDrag, CdkDragHandle, IsGanttRangeItemPipe, IsGanttGroupPipe]\n})\nexport class GanttTableBodyComponent implements OnDestroy, AfterViewInit {\n    gantt = inject<GanttAbstractComponent>(GANTT_ABSTRACT_TOKEN);\n\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    private document = inject<Document>(DOCUMENT);\n\n    protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    readonly viewportItems = input<(GanttGroupInternal | GanttItemInternal)[]>();\n\n    readonly hasGroup = computed(() => {\n        const firstData = this.viewportItems()[0];\n        return firstData && firstData.hasOwnProperty('items');\n    });\n\n    readonly ganttTableEmptyClass = computed(() => !this.viewportItems()?.length);\n\n    readonly flatItems = input<(GanttGroupInternal | GanttItemInternal)[]>();\n\n    readonly columns = input<ReadonlyArray<NgxGanttTableColumnComponent>>();\n\n    readonly groupTemplate = input<TemplateRef<any>>();\n\n    readonly emptyTemplate = input<TemplateRef<any>>();\n\n    readonly rowBeforeTemplate = input<TemplateRef<any>>();\n\n    readonly rowAfterTemplate = input<TemplateRef<any>>();\n\n    readonly draggable = input(false);\n\n    readonly dropEnterPredicate = input<(context: GanttTableDragEnterPredicateContext) => boolean>(undefined);\n\n    readonly dragDropped = output<GanttTableDragDroppedEvent>();\n\n    readonly dragStarted = output<GanttTableDragStartedEvent>();\n\n    readonly dragEnded = output<GanttTableDragEndedEvent>();\n\n    readonly itemClick = output<GanttSelectedEvent>();\n\n    @ViewChildren(CdkDrag<string>) cdkDrags: QueryList<CdkDrag<GanttItemInternal>>;\n\n    readonly hasExpandIcon = signal(false);\n\n    // 缓存 Element 和 DragRef 的关系，方便在 Item 拖动时查找\n    private itemDragsMap = new Map<HTMLElement, CdkDrag<GanttItemInternal>>();\n\n    private itemDragMoved = new Subject<CdkDragMove>();\n\n    // Item 拖动经过目标时临时记录目标id以及相对应目标的位置\n    private itemDropTarget: {\n        position?: GanttTableDropPosition;\n        id?: string;\n    };\n\n    private destroy$ = new Subject<void>();\n\n    ganttTableDragging = false;\n\n    constructor() {\n        effect(() => {\n            const cols = this.columns();\n            if (!cols?.length) {\n                return;\n            }\n            this.hasExpandIcon.set(false);\n            cols.forEach((column) => {\n                if (!column.columnWidth()) {\n                    column.columnWidth.set(coerceCssPixelValue(defaultColumnWidth));\n                }\n                if (column.showExpandIcon()) {\n                    this.hasExpandIcon.set(true);\n                }\n            });\n        });\n    }\n\n    ngAfterViewInit(): void {\n        this.cdkDrags.changes\n            .pipe(startWith(this.cdkDrags), takeUntil(this.destroy$))\n            .subscribe((drags: QueryList<CdkDrag<GanttItemInternal>>) => {\n                this.itemDragsMap.clear();\n                drags.forEach((drag) => {\n                    if (drag.data) {\n                        // cdkDrag 变化时，缓存 Element 与 DragRef 的关系，方便 Drag Move 时查找\n                        this.itemDragsMap.set(drag.element.nativeElement, drag);\n                    }\n                });\n            });\n\n        this.itemDragMoved\n            .pipe(\n                auditTime(30),\n                //  auditTime 可能会导致拖动结束后仍然执行 moved ，所以通过判断 dragging 状态来过滤无效 moved\n                filter((event: CdkDragMove) => event.source._dragRef.isDragging()),\n                takeUntil(this.destroy$)\n            )\n            .subscribe((event) => {\n                this.onItemDragMoved(event);\n            });\n    }\n\n    expandGroup(group: GanttGroupInternal) {\n        this.gantt.expandGroup(group);\n    }\n\n    expandChildren(event: MouseEvent, item: GanttItemInternal) {\n        event.stopPropagation();\n        this.gantt.expandChildren(item);\n    }\n\n    onItemDragStarted(event: CdkDragStart<GanttItemInternal>) {\n        this.ganttTableDragging = true;\n        // 拖动开始时隐藏所有的子项\n        const children = this.getChildrenElementsByElement(event.source.element.nativeElement);\n        children.forEach((element) => {\n            element.classList.add('drag-item-hide');\n        });\n        this.dragStarted.emit({\n            source: event.source.data?.origin,\n            sourceParent: this.getParentByItem(event.source.data)?.origin\n        });\n    }\n\n    emitItemDragMoved(event: CdkDragMove) {\n        this.itemDragMoved.next(event);\n    }\n\n    onItemDragMoved(event: CdkDragMove<GanttItemInternal>) {\n        // 通过鼠标位置查找对应的目标 Item 元素\n        let currentPointElement = this.document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y) as HTMLElement;\n        if (!currentPointElement) {\n            this.cleanupDragArtifacts();\n            return;\n        }\n        let targetElement = currentPointElement.classList.contains('gantt-table-item')\n            ? currentPointElement\n            : (currentPointElement.closest('.gantt-table-item') as HTMLElement);\n        if (!targetElement) {\n            this.cleanupDragArtifacts();\n            return;\n        }\n\n        // 缓存放置目标Id 并计算鼠标相对应的位置\n        this.itemDropTarget = {\n            id: this.itemDragsMap.get(targetElement)?.data.id,\n            position: this.getTargetPosition(targetElement, event)\n        };\n\n        // 执行外部传入的 dropEnterPredicate 判断是否允许拖入目标项\n        const dropEnterPredicate = this.dropEnterPredicate();\n        if (dropEnterPredicate) {\n            const targetDragRef = this.itemDragsMap.get(targetElement);\n            if (\n                dropEnterPredicate({\n                    source: event.source.data.origin,\n                    target: targetDragRef.data.origin,\n                    dropPosition: this.itemDropTarget.position\n                })\n            ) {\n                this.showDropPositionPlaceholder(targetElement);\n            } else {\n                this.itemDropTarget = null;\n                this.cleanupDragArtifacts(false);\n            }\n        } else {\n            this.showDropPositionPlaceholder(targetElement);\n        }\n    }\n\n    onItemDragEnded(event: CdkDragEnd<GanttItemInternal>) {\n        this.ganttTableDragging = false;\n\n        this.dragEnded.emit({\n            source: event.source.data?.origin,\n            sourceParent: this.getParentByItem(event.source.data)?.origin\n        });\n        // dropEnterPredicate 方法返回值为 false 时，始终未执行 onListDropped，所以只能在 dragEnded 中移除 drag-item-hide\n        const children = this.getChildrenElementsByElement(event.source.element.nativeElement);\n        children.forEach((element) => {\n            element.classList.remove('drag-item-hide');\n        });\n    }\n\n    onListDropped(event: CdkDragDrop<GanttItemInternal[], GanttItemInternal[], GanttItemInternal>) {\n        if (!this.itemDropTarget) {\n            return;\n        }\n\n        const sourceItem = event.item.data;\n        const sourceParent = this.getParentByItem(sourceItem);\n        const sourceChildren = this.getExpandChildrenByDrag(event.item);\n\n        const targetDragRef = this.cdkDrags.find((item) => item.data?.id === this.itemDropTarget.id);\n        const targetItem = targetDragRef?.data;\n        const targetParent = this.getParentByItem(targetItem);\n\n        this.removeItem(sourceItem, sourceChildren);\n\n        switch (this.itemDropTarget.position) {\n            case 'before':\n            case 'after':\n                this.insertItem(targetItem, sourceItem, sourceChildren, this.itemDropTarget.position);\n                sourceItem.updateLevel(targetItem.level);\n                break;\n            case 'inside':\n                this.insertChildrenItem(targetItem, sourceItem, sourceChildren);\n                sourceItem.updateLevel(targetItem.level + 1);\n                break;\n        }\n\n        this.dragDropped.emit({\n            source: sourceItem.origin,\n            sourceParent: sourceParent?.origin,\n            target: targetItem.origin,\n            targetParent: targetParent?.origin,\n            dropPosition: this.itemDropTarget.position\n        });\n\n        this.cleanupDragArtifacts(true);\n    }\n\n    trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n        return item.id || index;\n    }\n\n    ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private removeItem(item: GanttItemInternal, children: GanttItemInternal[]) {\n        this.viewportItems().splice(this.viewportItems().indexOf(item), 1 + children.length);\n        this.flatItems().splice(this.flatItems().indexOf(item), 1 + children.length);\n    }\n\n    private insertItem(\n        target: GanttItemInternal,\n        inserted: GanttItemInternal,\n        children: GanttItemInternal[],\n        position: 'before' | 'after'\n    ) {\n        if (position === 'before') {\n            this.viewportItems().splice(this.viewportItems().indexOf(target), 0, inserted, ...children);\n            this.flatItems().splice(this.flatItems().indexOf(target), 0, inserted, ...children);\n        } else {\n            const dragRef = this.cdkDrags.find((drag) => drag.data === target);\n            // 如果目标项是展开的，插入的 index 位置需要考虑子项的数量\n            let childrenCount = 0;\n            if (target.expanded) {\n                childrenCount = this.getChildrenElementsByElement(dragRef.element.nativeElement)?.length || 0;\n            }\n            this.viewportItems().splice(this.viewportItems().indexOf(target) + 1 + childrenCount, 0, inserted, ...children);\n            this.flatItems().splice(this.flatItems().indexOf(target) + 1 + childrenCount, 0, inserted, ...children);\n        }\n    }\n\n    private insertChildrenItem(target: GanttItemInternal, inserted: GanttItemInternal, children: GanttItemInternal[]) {\n        if (target.expanded) {\n            this.viewportItems().splice(this.viewportItems().indexOf(target) + target.children.length + 1, 0, inserted, ...children);\n            this.flatItems().splice(this.flatItems().indexOf(target) + target.children.length + 1, 0, inserted, ...children);\n        }\n        target.children.push(inserted);\n    }\n\n    private getParentByItem(item: GanttItemInternal) {\n        return (this.flatItems() || []).find((n: GanttItemInternal) => {\n            return n.children?.includes(item);\n        });\n    }\n\n    private getExpandChildrenByDrag(dragRef: CdkDrag<GanttItemInternal>) {\n        if (!dragRef.data.expanded) {\n            return [];\n        } else {\n            const childrenElements = this.getChildrenElementsByElement(dragRef.element.nativeElement);\n            return childrenElements.map((element) => this.itemDragsMap.get(element).data);\n        }\n    }\n\n    private getChildrenElementsByElement(dragElement: HTMLElement) {\n        // 通过循环持续查找 next element，如果 element 的 level 小于当前 item 的 level，则为它的 children\n        const children: HTMLElement[] = [];\n        const dragRef = this.itemDragsMap.get(dragElement);\n\n        // 如果当前的 Drag 正在拖拽，会创建 PlaceholderElement 占位，所以以 PlaceholderElement 向下查找\n        let nextElement = (dragRef.getPlaceholderElement() || dragElement).nextElementSibling as HTMLElement;\n        let nextDragRef = this.itemDragsMap.get(nextElement);\n\n        while (nextDragRef && nextDragRef.data.level > dragRef.data.level) {\n            children.push(nextElement);\n            nextElement = nextElement.nextElementSibling as HTMLElement;\n            nextDragRef = this.itemDragsMap.get(nextElement);\n        }\n\n        return children;\n    }\n\n    private getTargetPosition(target: HTMLElement, event: CdkDragMove) {\n        const targetRect = target.getBoundingClientRect();\n        const beforeOrAfterGap = targetRect.height * 0.3;\n        // 将 Item 高度分为上中下三段，其中上下的 Gap 为 height 的 30%，通过判断鼠标位置在哪一段 gap 来计算对应的位置\n        if (event.pointerPosition.y - targetRect.top < beforeOrAfterGap) {\n            return 'before';\n        } else if (event.pointerPosition.y >= targetRect.bottom - beforeOrAfterGap) {\n            return 'after';\n        } else {\n            return 'inside';\n        }\n    }\n\n    private showDropPositionPlaceholder(targetElement: HTMLElement) {\n        this.cleanupDragArtifacts();\n        if (this.itemDropTarget && targetElement) {\n            targetElement.classList.add(`drop-position-${this.itemDropTarget.position}`);\n        }\n    }\n\n    private cleanupDragArtifacts(dropped = false) {\n        if (dropped) {\n            this.itemDropTarget = null;\n            this.document.querySelectorAll('.drag-item-hide').forEach((element) => element.classList.remove('drag-item-hide'));\n        }\n        this.document.querySelectorAll('.drop-position-before').forEach((element) => element.classList.remove('drop-position-before'));\n        this.document.querySelectorAll('.drop-position-after').forEach((element) => element.classList.remove('drop-position-after'));\n        this.document.querySelectorAll('.drop-position-inside').forEach((element) => element.classList.remove('drop-position-inside'));\n    }\n}\n","<div\n  class=\"gantt-table-body-container\"\n  cdkDropList\n  [cdkDropListAutoScrollStep]=\"6\"\n  [cdkDropListData]=\"viewportItems()\"\n  [cdkDropListSortingDisabled]=\"true\"\n  (cdkDropListDropped)=\"onListDropped($event)\"\n>\n  @if (!viewportItems()?.length) {\n    @if (!emptyTemplate()) {\n      <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n      <div class=\"empty-text\">没有数据</div>\n    }\n    <ng-template [ngTemplateOutlet]=\"emptyTemplate()\"></ng-template>\n  }\n\n  @if (viewportItems() && viewportItems().length > 0) {\n    @for (item of viewportItems(); track trackBy($index, item)) {\n      @if (item | isGanttGroup) {\n        <div class=\"gantt-table-group\" [ngClass]=\"item.class\">\n          <div class=\"gantt-table-group-title\" [class.expanded]=\"item.expanded\" (click)=\"expandGroup(item)\">\n            <gantt-icon class=\"expand-icon\" [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n            @if (groupTemplate()) {\n              <ng-template\n                [ngTemplateOutlet]=\"groupTemplate()\"\n                [ngTemplateOutletContext]=\"{ $implicit: item.origin, group: item.origin }\"\n              ></ng-template>\n            } @else {\n              <span class=\"group-title\">{{ item.title }}</span>\n            }\n          </div>\n        </div>\n      }\n      @if (!(item | isGanttGroup)) {\n        <div\n          (click)=\"itemClick.emit({ event: $event, current: item.origin, selectedValue: item.origin })\"\n          cdkDrag\n          [cdkDragData]=\"item\"\n          [cdkDragDisabled]=\"(draggable() && item.itemDraggable === false) || !draggable()\"\n          (cdkDragStarted)=\"onItemDragStarted($event)\"\n          (cdkDragEnded)=\"onItemDragEnded($event)\"\n          (cdkDragMoved)=\"emitItemDragMoved($event)\"\n          class=\"gantt-table-item\"\n          [class.gantt-table-item-with-group]=\"hasGroup()\"\n          [class.gantt-table-item-first-level-group]=\"item.level === 0 && (item.type | isGanttRangeItem)\"\n          [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n        >\n          <ng-template\n            [ngTemplateOutlet]=\"rowBeforeTemplate()\"\n            [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n          ></ng-template>\n          @for (column of columns(); track $index; let first = $first) {\n            <div [classList]=\"column.classList\" [style.width]=\"column.columnWidth()\">\n              <!-- drag icon -->\n              @if (first && draggable()) {\n                <gantt-icon\n                  class=\"gantt-drag-handle\"\n                  iconName=\"drag\"\n                  cdkDragHandle\n                  [cdkDragHandleDisabled]=\"(draggable() && item.itemDraggable === false) || !draggable()\"\n                ></gantt-icon>\n              }\n              <!-- expand icon -->\n              @if (column?.showExpandIcon() || (!hasExpandIcon() && first)) {\n                <div class=\"gantt-expand-icon\" [style.marginLeft.px]=\"item.level * 20\">\n                  @if (item.level < gantt.maxLevel() - 1 && ((gantt.async() && item.expandable) || item.children?.length > 0)) {\n                    @if (!item.loading) {\n                      <gantt-icon\n                        class=\"expand-icon\"\n                        [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n                        (click)=\"expandChildren($event, item)\"\n                      >\n                      </gantt-icon>\n                    }\n                    @if (item.loading) {\n                      <gantt-icon [iconName]=\"'loading'\"></gantt-icon>\n                    }\n                  }\n                </div>\n              }\n              <!-- column content -->\n              <div class=\"gantt-table-column-content\">\n                <ng-template\n                  [ngTemplateOutlet]=\"column.templateRef()\"\n                  [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n                ></ng-template>\n              </div>\n            </div>\n          }\n          <div class=\"gantt-table-column gantt-table-column-placeholder\"></div>\n          <ng-template\n            [ngTemplateOutlet]=\"rowAfterTemplate()\"\n            [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n          ></ng-template>\n        </div>\n      }\n    }\n  }\n</div>\n","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    afterNextRender,\n    ChangeDetectorRef,\n    Component,\n    contentChild,\n    ElementRef,\n    HostListener,\n    inject,\n    input,\n    NgZone,\n    OnDestroy,\n    TemplateRef,\n    viewChild\n} from '@angular/core';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport { GanttCalendarGridComponent } from './components/calendar/grid/calendar-grid.component';\nimport { GanttCalendarHeaderComponent } from './components/calendar/header/calendar-header.component';\nimport { GanttDragBackdropComponent } from './components/drag-backdrop/drag-backdrop.component';\nimport { NgxGanttToolbarComponent } from './components/toolbar/toolbar.component';\nimport { GanttSyncScrollXDirective, GanttSyncScrollYDirective } from './directives/sync-scroll.directive';\nimport { GanttDomService, ScrollDirection } from './gantt-dom.service';\nimport { GanttDragContainer } from './gantt-drag-container';\nimport { GanttPrintService } from './gantt-print.service';\nimport { GanttSyncScrollService } from './gantt-sync-scroll.service';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from './gantt-upper';\nimport { GanttDate } from './utils/date';\nimport { passiveListenerOptions } from './utils/passive-listeners';\n\n@Component({\n    selector: 'ngx-gantt-root',\n    templateUrl: './root.component.html',\n    providers: [GanttDomService, GanttDragContainer, GanttSyncScrollService],\n    imports: [\n        CdkScrollable,\n        NgTemplateOutlet,\n        GanttCalendarHeaderComponent,\n        GanttCalendarGridComponent,\n        GanttDragBackdropComponent,\n        NgxGanttToolbarComponent,\n        GanttSyncScrollXDirective,\n        GanttSyncScrollYDirective\n    ]\n})\nexport class NgxGanttRootComponent implements OnDestroy {\n    private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    private ngZone = inject(NgZone);\n\n    private dom = inject(GanttDomService);\n\n    dragContainer = inject(GanttDragContainer);\n\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    private printService = inject(GanttPrintService, { optional: true })!;\n\n    private cdr = inject(ChangeDetectorRef);\n\n    readonly sideWidth = input<number>(undefined);\n\n    readonly sideTemplate = contentChild<TemplateRef<any>>('sideTemplate');\n\n    readonly mainTemplate = contentChild<TemplateRef<any>>('mainTemplate');\n\n    /** The native `<gantt-drag-backdrop></gantt-drag-backdrop>` element. */\n    readonly backdrop = viewChild(GanttDragBackdropComponent, { read: ElementRef });\n\n    verticalScrollbarWidth = 0;\n\n    horizontalScrollbarHeight = 0;\n\n    private unsubscribe$ = new Subject<void>();\n\n    private get view() {\n        return this.ganttUpper.view;\n    }\n\n    @HostListener('window:resize')\n    onWindowResize() {\n        this.computeScrollBarOffset();\n    }\n\n    constructor() {\n        const dragContainer = this.dragContainer;\n        this.ganttUpper.dragContainer = dragContainer;\n\n        afterNextRender(() => {\n            this.ngZone.runOutsideAngular(() => {\n                this.dom.initialize(this.elementRef);\n\n                if (this.printService) {\n                    this.printService.register(this.elementRef);\n                }\n                this.setupScrollClass();\n                this.setupResize();\n                this.setupViewScroll();\n                // 优化初始化时Scroll滚动体验问题，通过透明度解决，默认透明度为0，滚动结束后恢复\n                this.elementRef.nativeElement.style.opacity = '1';\n                outputToObservable(this.ganttUpper.viewChange)\n                    .pipe(startWith<null, null>(null), takeUntil(this.unsubscribe$))\n                    .subscribe(() => {\n                        this.scrollToToday();\n                    });\n                this.computeScrollBarOffset();\n\n                this.dom.applyCssVariables(this.elementRef.nativeElement, this.ganttUpper.styles());\n            });\n        });\n    }\n\n    computeScrollBarOffset() {\n        const ganttMainContainer = this.dom.mainContainer as HTMLElement;\n        const ganttVerticalScrollContainer = this.dom.verticalScrollContainer as HTMLElement;\n        let verticalScrollbarWidth = 0;\n        if (ganttVerticalScrollContainer) {\n            verticalScrollbarWidth = ganttVerticalScrollContainer.offsetWidth - ganttVerticalScrollContainer.clientWidth;\n        } else {\n            verticalScrollbarWidth = ganttMainContainer?.offsetWidth - ganttMainContainer?.clientWidth;\n        }\n        const horizontalScrollbarHeight = ganttMainContainer?.offsetHeight - ganttMainContainer?.clientHeight;\n        // 只在值真正改变时才触发变更检测，避免无限循环\n        if (this.verticalScrollbarWidth !== verticalScrollbarWidth || this.horizontalScrollbarHeight !== horizontalScrollbarHeight) {\n            this.verticalScrollbarWidth = verticalScrollbarWidth;\n            this.horizontalScrollbarHeight = horizontalScrollbarHeight;\n            this.cdr.markForCheck();\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.unsubscribe$.next();\n    }\n\n    private setupViewScroll() {\n        if (this.ganttUpper.disableLoadOnScroll() && !this.ganttUpper.quickTimeFocus()) {\n            return;\n        }\n        this.dom\n            .getViewerScroll(passiveListenerOptions)\n            .pipe(takeUntil(this.unsubscribe$))\n            .subscribe((event) => {\n                if (event.direction === ScrollDirection.LEFT) {\n                    const dates = this.ganttUpper.view.extendStart();\n                    if (dates) {\n                        const offsetWidth = this.ganttUpper.view.calculateRangeWidth(dates.start, dates.end);\n                        const currentLeft = (this.dom.mainContainer as HTMLElement).scrollLeft;\n                        // 扩展左侧时间后，补偿滚动位置并同步到所有水平容器\n                        this.dom.syncHorizontalScroll(currentLeft + offsetWidth);\n                        this.cdr.markForCheck();\n                        if (this.ganttUpper.loadOnScroll) {\n                            this.ngZone.run(() =>\n                                this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() })\n                            );\n                        }\n                    }\n                }\n                if (event.direction === ScrollDirection.RIGHT) {\n                    const dates = this.ganttUpper.view.extendEnd();\n                    this.cdr.markForCheck();\n                    if (dates && this.ganttUpper.loadOnScroll) {\n                        this.ngZone.run(() =>\n                            this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() })\n                        );\n                    }\n                }\n            });\n    }\n\n    private setupResize() {\n        this.dom\n            .getResize()\n            .pipe(takeUntil(this.unsubscribe$))\n            .subscribe(() => {\n                this.setupScrollClass();\n            });\n    }\n\n    private setupScrollClass() {\n        const mainContainer = this.dom.mainContainer as HTMLElement;\n        const height = mainContainer.offsetHeight;\n        const scrollHeight = mainContainer.scrollHeight;\n        if (scrollHeight > height) {\n            this.elementRef.nativeElement.className = 'gantt gantt-scroll';\n        } else {\n            this.elementRef.nativeElement.className = 'gantt';\n        }\n    }\n\n    public scrollToToday() {\n        const x = this.view.getNowX();\n        this.dom.scrollMainContainer(x);\n    }\n\n    public scrollToDate(date: number | Date | GanttDate) {\n        let x: number;\n        if (typeof date === 'number' || date instanceof Date) {\n            x = this.view.getXAtDate(new GanttDate(date));\n        } else {\n            x = this.view.getXAtDate(date);\n        }\n        this.dom.scrollMainContainer(x);\n    }\n}\n","@if (sideTemplate()) {\n  <div class=\"gantt-side\" [style.width.px]=\"sideWidth()\" [style.padding-bottom.px]=\"horizontalScrollbarHeight\">\n    <div class=\"gantt-side-container\" syncScrollX=\"ganttTableXScroll\" syncScrollY=\"ganttMainYScroll\" cdkScrollable>\n      <ng-template [ngTemplateOutlet]=\"sideTemplate()\"></ng-template>\n    </div>\n  </div>\n}\n@if (mainTemplate()) {\n  <div class=\"gantt-container\">\n    <gantt-calendar-header syncScrollX=\"ganttMainXScroll\" [style.padding-right.px]=\"verticalScrollbarWidth\"></gantt-calendar-header>\n    <gantt-calendar-grid\n      syncScrollX=\"ganttMainXScroll\"\n      [style.padding-right.px]=\"verticalScrollbarWidth\"\n      [style.padding-bottom.px]=\"horizontalScrollbarHeight\"\n    ></gantt-calendar-grid>\n    <gantt-drag-backdrop></gantt-drag-backdrop>\n    <div class=\"gantt-main\">\n      <div class=\"gantt-main-container\" syncScrollX=\"ganttMainXScroll\" syncScrollY=\"ganttMainYScroll\">\n        <ng-template [ngTemplateOutlet]=\"mainTemplate()\"></ng-template>\n      </div>\n    </div>\n  </div>\n}\n<ng-content></ng-content>\n@if (ganttUpper.showToolbar() || ganttUpper.toolbarTemplate()) {\n  <gantt-toolbar [template]=\"ganttUpper.toolbarTemplate()\"> </gantt-toolbar>\n}\n","import {\n    Component,\n    TemplateRef,\n    Input,\n    ElementRef,\n    input,\n    contentChild,\n    inject,\n    computed,\n    WritableSignal,\n    Signal,\n    effect,\n    signal\n} from '@angular/core';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from '../gantt-upper';\n@Component({\n    selector: 'ngx-gantt-column',\n    template: '',\n    host: {\n        class: 'gantt-table-column'\n    }\n})\nexport class NgxGanttTableColumnComponent {\n    ganttUpper = inject<GanttUpper>(GANTT_UPPER_TOKEN);\n\n    private elementRef = inject(ElementRef);\n\n    readonly width = input<number | string>();\n\n    readonly columnWidth: WritableSignal<string> = signal('');\n\n    readonly name = input<string>();\n\n    readonly showExpandIcon = input<boolean>();\n\n    readonly templateRef = contentChild<TemplateRef<any>>('cell');\n\n    readonly headerTemplateRef = contentChild<TemplateRef<any>>('header');\n\n    constructor() {\n        effect(() => {\n            this.columnWidth.set(coerceCssPixelValue(this.width()));\n        });\n    }\n\n    get classList(): DOMTokenList {\n        return this.elementRef.nativeElement.classList;\n    }\n}\n","import { Component, ContentChild, TemplateRef, contentChild, input, output } from '@angular/core';\nimport {\n    GanttTableDragDroppedEvent,\n    GanttTableDragEndedEvent,\n    GanttTableDragEnterPredicateContext,\n    GanttTableDragStartedEvent,\n    GanttTableEvent,\n    GanttTableItemClickEvent\n} from '../class';\n\n@Component({\n    selector: 'ngx-gantt-table',\n    template: ''\n})\nexport class NgxGanttTableComponent {\n    readonly draggable = input(false);\n\n    readonly maxWidth = input<number>(undefined);\n\n    readonly width = input<number>(undefined);\n\n    readonly dropEnterPredicate = input<(context: GanttTableDragEnterPredicateContext) => boolean>(undefined);\n\n    readonly dragDropped = output<GanttTableDragDroppedEvent>();\n\n    readonly dragStarted = output<GanttTableDragStartedEvent>();\n\n    readonly dragEnded = output<GanttTableDragEndedEvent>();\n\n    readonly columnChanges = output<GanttTableEvent>();\n\n    readonly resizeChange = output<number>();\n\n    readonly itemClick = output<GanttTableItemClickEvent>();\n\n    readonly rowBeforeTemplate = contentChild<TemplateRef<any>>('rowBeforeSlot');\n\n    readonly rowAfterTemplate = contentChild<TemplateRef<any>>('rowAfterSlot');\n\n    readonly tableEmptyTemplate = contentChild<TemplateRef<any>>('tableEmpty');\n\n    readonly tableFooterTemplate = contentChild<TemplateRef<any>>('tableFooter');\n\n    readonly settingsSlot = contentChild<TemplateRef<any>>('settingsSlot');\n}\n","import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport, ViewportRuler } from '@angular/cdk/scrolling';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    OnInit,\n    TemplateRef,\n    afterEveryRender,\n    contentChild,\n    contentChildren,\n    effect,\n    forwardRef,\n    inject,\n    input,\n    output,\n    signal,\n    untracked,\n    viewChild\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize, take, takeUntil } from 'rxjs/operators';\nimport {\n    GanttGroupInternal,\n    GanttItem,\n    GanttItemInternal,\n    GanttLineClickEvent,\n    GanttLinkDragEvent,\n    GanttSelectedEvent,\n    GanttTableDragEndedEvent,\n    GanttTableDragStartedEvent,\n    GanttVirtualScrolledIndexChangeEvent\n} from './class';\nimport { GanttCalendarGridComponent } from './components/calendar/grid/calendar-grid.component';\nimport { GanttCalendarHeaderComponent } from './components/calendar/header/calendar-header.component';\nimport { GanttDragBackdropComponent } from './components/drag-backdrop/drag-backdrop.component';\nimport { GanttLoaderComponent } from './components/loader/loader.component';\nimport { GanttMainComponent } from './components/main/gantt-main.component';\nimport { GanttScrollbarComponent } from './components/scrollbar/scrollbar.component';\nimport { GanttTableBodyComponent } from './components/table/body/gantt-table-body.component';\nimport { GanttTableHeaderComponent } from './components/table/header/gantt-table-header.component';\nimport { GanttSyncScrollXDirective, GanttSyncScrollYDirective } from './directives/sync-scroll.directive';\nimport { GANTT_ABSTRACT_TOKEN } from './gantt-abstract';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from './gantt-upper';\nimport { NgxGanttRootComponent } from './root.component';\nimport { NgxGanttTableColumnComponent } from './table/gantt-column.component';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { GanttDate } from './utils/date';\nimport { Dictionary, keyBy, recursiveItems, uniqBy } from './utils/helpers';\n\n@Component({\n    selector: 'ngx-gantt',\n    templateUrl: './gantt.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: GANTT_UPPER_TOKEN,\n            useExisting: forwardRef(() => NgxGanttComponent)\n        },\n        {\n            provide: GANTT_ABSTRACT_TOKEN,\n            useExisting: forwardRef(() => NgxGanttComponent)\n        }\n    ],\n    imports: [\n        NgxGanttRootComponent,\n        GanttTableHeaderComponent,\n        GanttCalendarHeaderComponent,\n        GanttLoaderComponent,\n        CdkVirtualScrollViewport,\n        CdkFixedSizeVirtualScroll,\n        NgClass,\n        CdkVirtualForOf,\n        GanttTableBodyComponent,\n        GanttCalendarGridComponent,\n        GanttMainComponent,\n        GanttDragBackdropComponent,\n        GanttScrollbarComponent,\n        NgTemplateOutlet,\n        GanttSyncScrollXDirective,\n        GanttSyncScrollYDirective\n    ]\n})\nexport class NgxGanttComponent extends GanttUpper implements OnInit, AfterViewInit {\n    private viewportRuler = inject(ViewportRuler);\n\n    readonly maxLevel = input(2);\n\n    readonly async = input<boolean>();\n\n    readonly childrenResolve = input<(GanttItem) => Observable<GanttItem[]>>();\n\n    override readonly linkable = input<boolean>();\n\n    readonly loading = input<boolean>();\n\n    readonly virtualScrollEnabled = input(true);\n\n    readonly loadingDelay = input(0);\n\n    readonly linkDragStarted = output<GanttLinkDragEvent>();\n\n    override readonly linkDragEnded = output<GanttLinkDragEvent>();\n\n    readonly lineClick = output<GanttLineClickEvent>();\n\n    readonly selectedChange = output<GanttSelectedEvent>();\n\n    readonly virtualScrolledIndexChange = output<GanttVirtualScrolledIndexChangeEvent>();\n\n    override readonly table = contentChild(NgxGanttTableComponent);\n\n    readonly columns = contentChildren(NgxGanttTableColumnComponent, { descendants: true });\n\n    readonly ganttRoot = viewChild<NgxGanttRootComponent>('ganttRoot');\n\n    readonly footerTemplate = contentChild<TemplateRef<any>>('footer');\n\n    readonly virtualScroll = viewChild(CdkVirtualScrollViewport);\n\n    readonly ganttTableBody = viewChild<ElementRef<HTMLDivElement>>('ganttTableBody');\n\n    public realLoading = false;\n\n    public tableScrollWidth = signal<number>(0);\n\n    private resizeObserver: ResizeObserver;\n\n    public flatItems: (GanttGroupInternal | GanttItemInternal)[] = [];\n\n    public viewportItems: (GanttGroupInternal | GanttItemInternal)[] = [];\n\n    private loadingTimer: ReturnType<typeof setTimeout> | null = null;\n\n    private rangeStart = 0;\n\n    private rangeEnd = 0;\n\n    private flatItemsMap: Dictionary<GanttGroupInternal | GanttItemInternal>;\n\n    private draggingItem: GanttItem;\n\n    constructor() {\n        super();\n        afterEveryRender(() => {\n            if (this.virtualScrollEnabled() && this.viewportRuler && this.virtualScroll().getRenderedRange().end > 0) {\n                const ganttRoot = this.ganttRoot();\n                if (!ganttRoot.verticalScrollbarWidth) {\n                    ganttRoot.computeScrollBarOffset();\n                }\n            }\n        });\n\n        effect(() => {\n            const loading = this.loading();\n            if (loading) {\n                untracked(() => {\n                    if (this.loadingDelay() > 0) {\n                        this.loadingTimer = setTimeout(() => {\n                            this.realLoading = loading;\n                            this.cdr.markForCheck();\n                        }, this.loadingDelay());\n                    } else {\n                        this.realLoading = loading;\n                    }\n                });\n            } else {\n                clearTimeout(this.loadingTimer);\n                this.realLoading = loading;\n            }\n        });\n    }\n\n    override ngOnInit() {\n        super.ngOnInit();\n        this.ngZone.runOutsideAngular(() => {\n            this.dragContainer.linkDragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe((event: GanttLinkDragEvent) => {\n                this.linkDragStarted.emit(event);\n            });\n\n            this.dragContainer.linkDragEnded.pipe(takeUntil(this.unsubscribe$)).subscribe((event: GanttLinkDragEvent) => {\n                this.linkDragEnded.emit(event);\n            });\n        });\n\n        // 如果虚拟滚动未启用，初始化时需要手动填充 viewportItems\n        if (!this.virtualScrollEnabled()) {\n            this.viewportItems = this.flatItems.slice(this.rangeStart, this.rangeEnd);\n            this.computeRefs();\n        }\n    }\n\n    override computeRefs() {\n        const tempItemData = [];\n        this.viewportItems.forEach((data: GanttGroupInternal | GanttItemInternal) => {\n            if (!data.hasOwnProperty('items')) {\n                const item = data as GanttItemInternal;\n                if (item.links) {\n                    item.links.forEach((link) => {\n                        if (this.flatItemsMap[link.link]) {\n                            tempItemData.push(this.flatItemsMap[link.link]);\n                        }\n                    });\n                }\n                tempItemData.push(data);\n            }\n        });\n        this.computeItemsRefs(...uniqBy(tempItemData, 'id'));\n        this.flatItems = [...this.flatItems];\n        this.viewportItems = [...this.viewportItems];\n    }\n\n    override setupItems() {\n        super.setupItems();\n        this.buildFlatItems();\n        this.viewportItems = this.flatItems.slice(this.rangeStart, this.rangeEnd);\n    }\n\n    ngAfterViewInit() {\n        if (this.virtualScrollEnabled()) {\n            this.virtualScroll()\n                .renderedRangeStream.pipe(takeUntil(this.unsubscribe$))\n                .subscribe((range) => {\n                    const linksElement = this.elementRef.nativeElement.querySelector('.gantt-links-overlay') as HTMLDivElement;\n                    linksElement.style.top = `${-(this.styles().rowHeight * range.start)}px`;\n                    this.rangeStart = range.start;\n                    this.rangeEnd = range.end;\n                    this.viewportItems = this.flatItems.slice(range.start, range.end);\n                    this.appendDraggingItemToViewportItems();\n                    this.computeRefs();\n                });\n        }\n        this.initScrollContainerObserver();\n    }\n\n    private buildFlatItems() {\n        const virtualData = [];\n        if (this.groups.length) {\n            this.groups.forEach((group) => {\n                virtualData.push(group);\n                if (group.expanded) {\n                    const items = recursiveItems(group.items);\n                    virtualData.push(...items);\n                }\n            });\n        }\n\n        if (this.items.length) {\n            virtualData.push(...recursiveItems(this.items));\n        }\n        this.flatItems = [...virtualData];\n        this.flatItemsMap = keyBy(this.flatItems, 'id');\n        if (!this.virtualScrollEnabled()) {\n            this.rangeStart = 0;\n            this.rangeEnd = this.flatItems.length;\n        }\n    }\n\n    private afterExpand() {\n        this.buildFlatItems();\n        this.viewportItems = this.flatItems.slice(this.rangeStart, this.rangeEnd);\n    }\n\n    private appendDraggingItemToViewportItems() {\n        if (this.draggingItem) {\n            let flatItem = this.viewportItems.find((item) => {\n                return item.id === this.draggingItem.id;\n            });\n            if (!flatItem) {\n                flatItem = this.flatItems.find((item) => {\n                    return item.id === this.draggingItem.id;\n                });\n                if (flatItem) {\n                    this.viewportItems.push(flatItem);\n                }\n            }\n        }\n    }\n\n    expandChildren(item: GanttItemInternal) {\n        if (!item.expanded) {\n            item.setExpand(true);\n            const childrenResolve = this.childrenResolve();\n            if (this.async() && childrenResolve && item.children.length === 0) {\n                item.loading = true;\n                childrenResolve(item.origin)\n                    .pipe(\n                        take(1),\n                        finalize(() => {\n                            item.loading = false;\n                            this.afterExpand();\n                            this.expandChange.emit(item);\n                            this.cdr.detectChanges();\n                        })\n                    )\n                    .subscribe((items) => {\n                        item.addChildren(items);\n                        this.computeItemsRefs(...item.children);\n                    });\n            } else {\n                this.computeItemsRefs(...item.children);\n                this.afterExpand();\n                this.expandChange.emit(item);\n            }\n        } else {\n            item.setExpand(false);\n            this.afterExpand();\n            this.expandChange.emit(item);\n        }\n    }\n\n    selectItem(selectEvent: GanttSelectedEvent) {\n        this.table().itemClick.emit({\n            event: selectEvent.event,\n            current: selectEvent.current\n        });\n\n        if (!this.selectable()) {\n            return;\n        }\n        const { event, selectedValue } = selectEvent;\n        this.selectionModel.toggle((selectedValue as GanttItem).id);\n\n        const selectedIds = this.selectionModel.selected;\n        if (this.multiple()) {\n            const _selectedValue = this.getGanttItems(selectedIds).map((item) => item.origin);\n            this.selectedChange.emit({ event, current: selectedValue as GanttItem, selectedValue: _selectedValue });\n        } else {\n            const _selectedValue = this.getGanttItem(selectedIds[0])?.origin;\n            this.selectedChange.emit({ event, current: selectedValue as GanttItem, selectedValue: _selectedValue });\n        }\n    }\n\n    scrollToToday() {\n        this.ganttRoot().scrollToToday();\n    }\n\n    scrollToDate(date: number | Date | GanttDate) {\n        this.ganttRoot().scrollToDate(date);\n    }\n\n    scrolledIndexChange(index: number) {\n        this.virtualScrolledIndexChange.emit({\n            index,\n            renderedRange: {\n                start: this.rangeStart,\n                end: this.rangeEnd\n            },\n            count: this.flatItems.length\n        });\n    }\n\n    override expandGroups(expanded: boolean) {\n        this.groups.forEach((group) => {\n            group.setExpand(expanded);\n        });\n\n        this.afterExpand();\n        this.expandChange.emit(this.groups);\n        this.cdr.detectChanges();\n    }\n\n    override expandGroup(group: GanttGroupInternal) {\n        group.setExpand(!group.expanded);\n        this.afterExpand();\n        this.expandChange.emit(group);\n        this.cdr.detectChanges();\n    }\n\n    itemDragStarted(event: GanttTableDragStartedEvent) {\n        this.table().dragStarted.emit(event);\n        this.draggingItem = event.source;\n    }\n\n    itemDragEnded(event: GanttTableDragEndedEvent) {\n        this.table().dragEnded.emit(event);\n        this.draggingItem = null;\n    }\n\n    private initScrollContainerObserver() {\n        const ganttTableBody = this.ganttTableBody();\n        if (ganttTableBody && ganttTableBody['elementRef']?.nativeElement) {\n            this.tableScrollWidth.set(ganttTableBody['elementRef'].nativeElement.clientWidth);\n            if (typeof ResizeObserver !== 'undefined') {\n                this.resizeObserver = new ResizeObserver((entries) => {\n                    const newWidth = entries[0].target.clientWidth;\n                    if (this.tableScrollWidth() !== newWidth) {\n                        this.tableScrollWidth.set(newWidth);\n                        this.cdr.markForCheck();\n                    }\n                });\n                this.resizeObserver.observe(ganttTableBody['elementRef'].nativeElement);\n            }\n        }\n    }\n\n    override ngOnDestroy() {\n        super.ngOnDestroy();\n        if (this.resizeObserver) {\n            this.resizeObserver.disconnect();\n        }\n    }\n}\n","<ngx-gantt-root #ganttRoot>\n  <div class=\"gantt-header\">\n    <gantt-table-header #tableHeader [columns]=\"columns()\"></gantt-table-header>\n    <div class=\"gantt-container-header\">\n      <gantt-calendar-header\n        syncScrollX=\"ganttMainXScroll\"\n        [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n      ></gantt-calendar-header>\n    </div>\n  </div>\n  @if (realLoading) {\n    <gantt-loader></gantt-loader>\n  }\n\n  <cdk-virtual-scroll-viewport\n    class=\"gantt-virtual-scroll-viewport\"\n    [ngClass]=\"{\n      'gantt-normal-viewport': !virtualScrollEnabled(),\n      'gantt-scroll-container': virtualScrollEnabled(),\n      'with-footer': table()?.tableFooterTemplate() || footerTemplate()\n    }\"\n    [itemSize]=\"styles().rowHeight\"\n    [minBufferPx]=\"styles().rowHeight * 10\"\n    [maxBufferPx]=\"styles().rowHeight * 20\"\n    (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n  >\n    <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n    <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n      <div class=\"gantt-side-container\" syncScrollX=\"ganttTableXScroll\" syncScrollY=\"ganttMainYScroll\">\n        <div class=\"gantt-table\">\n          <gantt-table-body\n            #ganttTableBody\n            [flatItems]=\"flatItems\"\n            [viewportItems]=\"viewportItems\"\n            [columns]=\"columns()\"\n            [groupTemplate]=\"groupTemplate()\"\n            [emptyTemplate]=\"table().tableEmptyTemplate()\"\n            [rowBeforeTemplate]=\"table()?.rowBeforeTemplate()\"\n            [rowAfterTemplate]=\"table()?.rowAfterTemplate()\"\n            [draggable]=\"table().draggable()\"\n            [dropEnterPredicate]=\"table().dropEnterPredicate()\"\n            (dragDropped)=\"table().dragDropped.emit($event)\"\n            (dragStarted)=\"itemDragStarted($event)\"\n            (dragEnded)=\"itemDragEnded($event)\"\n            (itemClick)=\"selectItem($event)\"\n          >\n          </gantt-table-body>\n        </div>\n      </div>\n    </div>\n    <div class=\"gantt-container\">\n      <gantt-calendar-grid\n        syncScrollX=\"ganttMainXScroll\"\n        [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n        [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n      ></gantt-calendar-grid>\n      <div class=\"gantt-main\">\n        <gantt-main\n          syncScrollX=\"ganttMainXScroll\"\n          syncScrollY=\"ganttMainYScroll\"\n          [ganttRoot]=\"ganttRoot\"\n          [flatItems]=\"flatItems\"\n          [viewportItems]=\"viewportItems\"\n          [groupHeaderTemplate]=\"groupHeaderTemplate()\"\n          [itemTemplate]=\"itemTemplate()\"\n          [barTemplate]=\"barTemplate()\"\n          [rangeTemplate]=\"rangeTemplate()\"\n          [baselineTemplate]=\"baselineTemplate()\"\n          [quickTimeFocus]=\"quickTimeFocus()\"\n          (barClick)=\"barClick.emit($event)\"\n          (lineClick)=\"lineClick.emit($event)\"\n        >\n        </gantt-main>\n      </div>\n    </div>\n  </cdk-virtual-scroll-viewport>\n\n  <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n  @if (table()?.tableFooterTemplate() || footerTemplate()) {\n    <div\n      class=\"gantt-footer\"\n      cdkScrollable\n      [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n      [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n    >\n      @if (table()?.tableFooterTemplate()) {\n        <div class=\"gantt-table-footer\" syncScrollX=\"ganttTableXScroll\" [style.width.px]=\"tableHeader.tableWidth + 1\">\n          <ng-template [ngTemplateOutlet]=\"table()?.tableFooterTemplate()\" [ngTemplateOutletContext]=\"{ columns: columns() }\">\n          </ng-template>\n        </div>\n      }\n      @if (footerTemplate()) {\n        <div class=\"gantt-container-footer\" syncScrollX=\"ganttMainXScroll\">\n          <ng-template [ngTemplateOutlet]=\"footerTemplate()\"> </ng-template>\n        </div>\n      }\n    </div>\n  }\n\n  <gantt-scrollbar\n    [ganttRoot]=\"ganttRoot\"\n    [hasFooter]=\"!!table()?.tableFooterTemplate()\"\n    [tableWidth]=\"tableHeader.tableWidth\"\n    [tableScrollWidth]=\"tableScrollWidth()\"\n  ></gantt-scrollbar>\n</ngx-gantt-root>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgxGanttBarComponent } from './components/bar/bar.component';\nimport { NgxGanttBaselineComponent } from './components/baseline/baseline.component';\nimport { GanttCalendarGridComponent } from './components/calendar/grid/calendar-grid.component';\nimport { GanttCalendarHeaderComponent } from './components/calendar/header/calendar-header.component';\nimport { GanttDragBackdropComponent } from './components/drag-backdrop/drag-backdrop.component';\nimport { GanttIconComponent } from './components/icon/icon.component';\nimport { GanttLinksComponent } from './components/links/links.component';\nimport { GanttLoaderComponent } from './components/loader/loader.component';\nimport { GanttMainComponent } from './components/main/gantt-main.component';\nimport { NgxGanttRangeComponent } from './components/range/range.component';\nimport { GanttTableBodyComponent } from './components/table/body/gantt-table-body.component';\nimport { GanttTableHeaderComponent } from './components/table/header/gantt-table-header.component';\nimport { NgxGanttToolbarComponent } from './components/toolbar/toolbar.component';\nimport { NgxGanttComponent } from './gantt.component';\nimport { GANTT_GLOBAL_CONFIG, defaultConfig } from './gantt.config';\nimport { IsGanttBarItemPipe, IsGanttCustomItemPipe, IsGanttGroupPipe, IsGanttRangeItemPipe } from './gantt.pipe';\nimport { NgxGanttRootComponent } from './root.component';\nimport { NgxGanttTableColumnComponent } from './table/gantt-column.component';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { GanttScrollbarComponent } from './components/scrollbar/scrollbar.component';\nimport { i18nLocaleProvides } from './i18n';\nimport { NgxGanttPlaceholderComponent } from './components/bar/placeholder.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        DragDropModule,\n        ScrollingModule,\n        NgxGanttComponent,\n        NgxGanttTableComponent,\n        NgxGanttTableColumnComponent,\n        GanttTableHeaderComponent,\n        GanttTableBodyComponent,\n        GanttMainComponent,\n        GanttCalendarHeaderComponent,\n        GanttCalendarGridComponent,\n        GanttLinksComponent,\n        GanttLoaderComponent,\n        NgxGanttBarComponent,\n        GanttIconComponent,\n        GanttDragBackdropComponent,\n        NgxGanttRangeComponent,\n        NgxGanttRootComponent,\n        NgxGanttBaselineComponent,\n        NgxGanttToolbarComponent,\n        GanttScrollbarComponent,\n        NgxGanttPlaceholderComponent,\n        IsGanttRangeItemPipe,\n        IsGanttBarItemPipe,\n        IsGanttCustomItemPipe,\n        IsGanttGroupPipe\n    ],\n    exports: [\n        NgxGanttComponent,\n        NgxGanttTableComponent,\n        NgxGanttTableColumnComponent,\n        NgxGanttRootComponent,\n        NgxGanttBarComponent,\n        NgxGanttRangeComponent,\n        NgxGanttBaselineComponent,\n        NgxGanttToolbarComponent,\n        NgxGanttPlaceholderComponent,\n        GanttCalendarHeaderComponent,\n        GanttCalendarGridComponent,\n        GanttDragBackdropComponent,\n        GanttScrollbarComponent\n    ],\n    providers: [\n        CdkVirtualScrollViewport,\n        {\n            provide: GANTT_GLOBAL_CONFIG,\n            useValue: defaultConfig\n        },\n        ...i18nLocaleProvides\n    ]\n})\nexport class NgxGanttModule {\n    constructor() {}\n}\n","/*\n * Public API Surface of gantt\n */\n\nexport * from './class';\nexport * from './components/bar/bar.component';\nexport * from './components/bar/placeholder.component';\nexport * from './components/baseline/baseline.component';\nexport * from './components/calendar/grid/calendar-grid.component';\nexport * from './components/calendar/header/calendar-header.component';\nexport * from './components/drag-backdrop/drag-backdrop.component';\nexport * from './components/loader/loader.component';\nexport * from './components/range/range.component';\nexport * from './components/scrollbar/scrollbar.component';\nexport * from './components/toolbar/toolbar.component';\nexport * from './directives/sync-scroll.directive';\nexport * from './gantt-item-upper';\nexport * from './gantt-print.service';\nexport * from './gantt-sync-scroll.service';\nexport * from './gantt-upper';\nexport * from './gantt.component';\nexport * from './gantt.config';\nexport * from './gantt.module';\nexport * from './gantt.pipe';\nexport {\n    deDeLocale,\n    enUsLocale,\n    GANTT_I18N_LOCALE_TOKEN,\n    GanttI18nLocale,\n    GanttI18nLocaleConfig,\n    jaJpLocale,\n    ruRuLocale,\n    zhHansLocale,\n    zhHantLocale\n} from './i18n';\nexport * from './root.component';\nexport * from './table/gantt-column.component';\nexport * from './table/gantt-table.component';\nexport * from './utils/date';\nexport { registerView } from './views/factory';\nexport * from './views/view';\nexport { PERIOD_TICK_TOP as PRIMARY_TICK_TOP, UNIT_TICK_TOP as SECONDARY_TICK_TOP } from './views/view';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["zhHans","zhHant","defaultViewOptions","takeUntil","startWith","auditTime","filter"],"mappings":"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"}