{"version":3,"file":"midas4ng-midas-gantt.mjs","sources":["../../../packages/gantt/src/class/date-point.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/gantt.config.ts","../../../packages/gantt/src/views/view.ts","../../../packages/gantt/src/views/month.ts","../../../packages/gantt/src/views/quarter.ts","../../../packages/gantt/src/views/day.ts","../../../packages/gantt/src/views/week.ts","../../../packages/gantt/src/views/year.ts","../../../packages/gantt/src/views/TenMinute.ts","../../../packages/gantt/src/views/FiveMinute.ts","../../../packages/gantt/src/views/factory.ts","../../../packages/gantt/src/gantt.styles.ts","../../../packages/gantt/src/utils/helpers.ts","../../../packages/gantt/src/gantt-upper.ts","../../../packages/gantt/src/table/gantt-column.component.ts","../../../packages/gantt/src/table/gantt-table.component.ts","../../../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/icon/icons.ts","../../../packages/gantt/src/components/icon/icon.component.ts","../../../packages/gantt/src/gantt.pipe.ts","../../../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/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/gantt-drag-container.ts","../../../packages/gantt/src/components/links/links.component.ts","../../../packages/gantt/src/components/links/links.component.html","../../../packages/gantt/src/utils/passive-listeners.ts","../../../packages/gantt/src/utils/drag-scroll.ts","../../../packages/gantt/src/gantt-dom.service.ts","../../../packages/gantt/src/components/bar/bar-drag.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/range/range.component.ts","../../../packages/gantt/src/components/range/range.component.html","../../../packages/gantt/src/components/baseline/baseline.component.ts","../../../packages/gantt/src/components/baseline/baseline.component.html","../../../packages/gantt/src/components/main/gantt-main.component.ts","../../../packages/gantt/src/components/main/gantt-main.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/calendar/grid/calendar-grid.component.ts","../../../packages/gantt/src/components/calendar/grid/calendar-grid.component.html","../../../packages/gantt/src/components/loader/loader.component.ts","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.ts","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.html","../../../packages/gantt/src/gantt-print.service.ts","../../../packages/gantt/src/components/toolbar/toolbar.component.ts","../../../packages/gantt/src/components/toolbar/toolbar.component.html","../../../packages/gantt/src/root.component.ts","../../../packages/gantt/src/root.component.html","../../../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/midas4ng-midas-gantt.ts"],"sourcesContent":["import { GanttDate } from '../utils/date';\n\nexport class GanttDatePoint {\n    constructor(\n        public start: GanttDate,\n        public text: string,\n        public x: number,\n        public y: number,\n        public additions?: {\n            isWeekend: boolean;\n            isToday: boolean;\n        },\n        public style?: Partial<CSSStyleDeclaration>\n    ) {}\n}\n","import { QueryList } from '@angular/core';\nimport { 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 DragToOtherRowEvent<T = unknown> {\n    takeTimeItem: GanttItem<T>;\n    fromItem:GanttItem<T>;\n    toItem:GanttItem<T>;\n}\n\nexport class GanttTableEvent {\n    columns: QueryList<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 GanttSelectedEvent<T = unknown> {\n    event: Event;\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  addYears,\n  addMonths,\n  addDays,\n  addWeeks,\n  addQuarters,\n  getUnixTime,\n  startOfDay,\n  startOfWeek,\n  startOfMonth,\n  startOfQuarter,\n  startOfYear,\n  endOfDay,\n  endOfWeek,\n  endOfMonth,\n  endOfQuarter,\n  endOfYear,\n  format,\n  fromUnixTime,\n  getDaysInMonth,\n  addSeconds,\n  setDate,\n  addMinutes,\n  addHours,\n  differenceInCalendarDays,\n  isWeekend,\n  getWeek,\n  isToday,\n  differenceInDays,\n  differenceInCalendarQuarters,\n  eachMonthOfInterval,\n  eachWeekOfInterval,\n  eachDayOfInterval,\n  startOfHour\n} from 'date-fns';\n\nexport {\n  addYears,\n  addMonths,\n  addDays,\n  addWeeks,\n  addQuarters,\n  getUnixTime,\n  startOfDay,\n  startOfWeek,\n  startOfMonth,\n  startOfQuarter,\n  startOfYear,\n  endOfDay,\n  endOfWeek,\n  endOfMonth,\n  endOfQuarter,\n  endOfYear,\n  format,\n  fromUnixTime,\n  getDaysInMonth,\n  addSeconds,\n  setDate,\n  addMinutes,\n  addHours,\n  differenceInCalendarDays,\n  isWeekend,\n  getWeek,\n  isToday,\n  differenceInDays,\n  differenceInCalendarQuarters,\n  eachMonthOfInterval,\n  eachWeekOfInterval,\n  eachDayOfInterval\n} from 'date-fns';\n\nexport type GanttDateUtil = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\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 = fromUnixTime(+date);\n        } else {\n          this.value = new Date(date);\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 Date();\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 } = { weekStartsOn: 1 }): 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  getNowDay() {\n    return new GanttDate(new Date());\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  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?: number;\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 enum LinkColors {\n    default = '#cacaca',\n    blocked = '#FF7575',\n    active = '#6698ff'\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 { differenceInMilliseconds, differenceInMinutes } from 'date-fns';\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;\n  end?: number;\n  group_id?: string;\n  takeTime?: GanttItem<T>[];\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  origin?: T;\n  type?: GanttItemType;\n  progress?: number;\n  dragGroup?: string;\n  changed?: boolean;\n}\n\nexport class GanttItemInternal {\n  id: string;\n  title: string;\n  start: GanttDate;\n  end: GanttDate;\n  links: GanttLink[];\n  color?: string;\n  barStyle?: Partial<CSSStyleDeclaration>;\n  draggable?: boolean;\n  itemDraggable?: boolean;\n  takeTime?: GanttItemInternal[];\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  fillDays?: number;\n  viewType?: GanttViewType;\n  level?: number;\n  overlaps?: { start: GanttDate; end: GanttDate; width: number }[];\n  draging?: boolean;\n  changed?: boolean = false;\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: GanttItem, level?: number, options?: { fillDays: number }) {\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.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    //  默认填充 30 天\n    this.fillDays = options?.fillDays || 30;\n    this.children = (item.children || []).map((subItem) => {\n      return new GanttItemInternal(subItem, level + 1, { fillDays: this.fillDays });\n    });\n    this.type = this.origin.type || GanttItemType.bar;\n    this.progress = this.origin.progress;\n\n    this.takeTime = (item.takeTime || []).map((subItem) => {\n      return new GanttItemInternal(subItem, level + 1, { fillDays: this.fillDays });\n    });\n\n    // fill days when start or end is null\n    this.fillItemStartOrEnd(item);\n  }\n\n  fillItemStartOrEnd(item: GanttItem) {\n    if (this.fillDays > 0) {\n      const fillDays = this.fillDays - 1;\n      if (item.start && !item.end) {\n        this.end = new GanttDate(item.start).addDays(fillDays).endOfDay();\n      }\n      if (!item.start && item.end) {\n        this.start = new GanttDate(item.end).addDays(-fillDays).startOfDay();\n      }\n    }\n  }\n\n  updateRefs(refs: GanttItemRefs) {\n    this.refs$.next(refs);\n  }\n\n  updateDateInMinute(start: GanttDate, end: GanttDate) {\n    this.start = start;\n    this.end = end;\n\n    this.origin.start = this.start.getUnixTime();\n    this.origin.end = this.end.getUnixTime();\n  }\n\n  updateDate(start: GanttDate, end: GanttDate, isInMinute: boolean = false) {\n    if (isInMinute) {\n      this.start = start;\n      this.end = end;\n    } else {\n      this.start = start.startOfDay();\n      this.end = end.endOfDay();\n    }\n\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, { fillDays: this.fillDays });\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  differenceInMinutes() {\n    if (this.end && this.start) {\n \n      return differenceInMinutes(this.end.value,this.start.value);\n    } else {\n      return 0;\n    }\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","/*\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-04 16:56:13\n * @Description: \n */\nexport enum GanttViewType {\n    day = 'day',\n    quarter = 'quarter',\n    month = 'month',\n    year = 'year',\n    week = 'week',\n    TenMinute = 'TenMinute',\n    FiveMinute='FiveMinute'\n}\n\nexport const ganttViews = [\n    {\n        name: '5分钟',\n        value: GanttViewType.FiveMinute\n    },\n    {\n        name: '10分钟',\n        value: GanttViewType.TenMinute\n    },\n    {\n        name: '日',\n        value: GanttViewType.day\n    },\n    {\n        name: '周',\n        value: GanttViewType.week\n    },\n    {\n        name: '月',\n        value: GanttViewType.month\n    },\n    {\n        name: '季',\n        value: GanttViewType.quarter\n    },\n    {\n        name: '年',\n        value: GanttViewType.year\n    }\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    takeTime:any[];\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","/*\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-05 09:57:54\n * @Description: \n */\nimport { GanttLinkType, GanttLinkOptions, GanttLinkLineType } from './class/link';\nimport { InjectionToken } from '@angular/core';\n\nexport interface GanttDateFormat {\n    minute?:string;\n    hour?: string;\n    day?: string;\n    week?: string;\n    month?: string;\n    quarter?: string;\n    year?: string;\n    yearMonth?: string;\n    yearQuarter?: string;\n}\n\nexport interface GanttGlobalConfig {\n    dateFormat?: GanttDateFormat;\n    linkOptions?: GanttLinkOptions;\n}\n\nexport const defaultConfig = {\n    dateFormat: {\n        minute:'mm',\n        hour:'MM月dd日 HH时',\n        day: 'yyyy年MM月dd日',\n        week: '第w周',\n        month: 'M月',\n        quarter: 'QQQ',\n        year: 'yyyy年',\n        yearMonth: 'yyyy年MM月',\n        yearQuarter: 'yyyy年QQQ'\n    },\n    linkOptions: {\n        dependencyTypes: [GanttLinkType.fs],\n        showArrow: false,\n        lineType: GanttLinkLineType.curve\n    }\n};\n\nexport const GANTT_GLOBAL_CONFIG = new InjectionToken<GanttGlobalConfig>('GANTT_GLOBAL_CONFIG');\n","import { GanttDate, differenceInDays, GanttDateUtil } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { BehaviorSubject } from 'rxjs';\nimport { defaultConfig, GanttDateFormat } from '../gantt.config';\nimport { GanttViewType } from '../class';\nimport { differenceInMilliseconds } from 'date-fns';\n\nexport const primaryDatePointTop = 18;\n\nexport const secondaryDatePointTop = 36;\n\nexport interface GanttViewDate {\n  date: GanttDate;\n  isCustom?: boolean;\n}\n\nexport interface GanttViewOptions {\n  start?: GanttDate;\n  end?: GanttDate;\n  min?: GanttDate;\n  max?: GanttDate;\n  cellWidth?: number;\n  addAmount?: number;\n  addUnit?: GanttDateUtil;\n  dateFormat?: GanttDateFormat;\n  // fill days when start or end is null\n  fillDays?: number;\n  // custom key and value\n  [key: string]: any;\n}\n\nconst viewOptions: GanttViewOptions = {\n  min: new GanttDate().addYears(-1).startOfYear(),\n  max: new GanttDate().addYears(1).endOfYear(),\n  dateFormat: defaultConfig.dateFormat\n};\n\nexport abstract class GanttView {\n  viewType: GanttViewType;\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  primaryDatePoints: GanttDatePoint[];\n\n  secondaryDatePoints: GanttDatePoint[];\n\n  width: number;\n\n  cellWidth: number;\n\n  primaryWidth: number;\n\n  showTimeline = true;\n\n  showWeekBackdrop: boolean;\n\n  options: GanttViewOptions;\n\n  constructor(start: GanttViewDate, end: GanttViewDate, options: GanttViewOptions) {\n    this.options = Object.assign({}, viewOptions, options);\n    const startDate = start.isCustom\n      ? this.startOf(start.date)\n      : this.startOf(start.date.value < this.options.start.value ? start.date : this.options.start);\n    const endDate = end.isCustom ? this.endOf(end.date) : this.endOf(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    this.initialize();\n  }\n\n  abstract startOf(date: GanttDate): GanttDate;\n\n  abstract endOf(date: GanttDate): GanttDate;\n\n  // 获取一级时间网格合并后的宽度\n  abstract getPrimaryWidth(): number;\n\n  // 获取当前视图下每一天占用的宽度\n  abstract getDayOccupancyWidth(date: GanttDate): number;\n\n  // 获取当前视图下每一分钟占用的宽度\n  abstract getMinuteOccupancyWidth(date: GanttDate): number;\n\n  // 获取一级时间点（坐标，显示名称）\n  abstract getPrimaryDatePoints(): GanttDatePoint[];\n\n  // 获取二级时间点（坐标，显示名称）\n  abstract getSecondaryDatePoints(): GanttDatePoint[];\n\n  protected getDateIntervalWidth(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.getDayOccupancyWidth(start.addDays(i));\n    }\n    result = days >= 0 ? result : -result;\n    return Number(result.toFixed(3));\n  }\n\n  initialize() {\n    this.primaryDatePoints = this.getPrimaryDatePoints();\n    this.secondaryDatePoints = this.getSecondaryDatePoints();\n    this.width = this.getWidth();\n    this.cellWidth = this.getCellWidth();\n    this.primaryWidth = this.getPrimaryWidth();\n  }\n\n  addStartDate() {\n    let start: GanttDate = this.startOf(this.start.add(this.options.addAmount * -1, this.options.addUnit));\n\n    if (this.options.addUnit == 'minute') {\n      start = this.start.addHours(-1);\n    } else {\n      start = this.startOf(this.start.add(this.options.addAmount * -1, this.options.addUnit));\n    }\n\n    if (start.value >= this.options.min.value) {\n      const origin = this.start;\n      this.start$.next(start);\n      this.initialize();\n      return { start: this.start, end: origin };\n    }\n    return null;\n  }\n\n  addEndDate() {\n    let end = this.endOf(this.end.add(this.options.addAmount, this.options.addUnit));\n\n    if (this.options.addUnit == 'minute') {\n      end = this.end.add(this.options.addAmount, this.options.addUnit);\n    } else {\n      end = this.endOf(this.end.add(this.options.addAmount, this.options.addUnit));\n    }\n\n    if (end.value <= this.options.max.value) {\n      const origin = this.end;\n      this.end$.next(end);\n      this.initialize();\n      return { start: origin, end: this.end };\n    }\n    return null;\n  }\n\n  updateDate(start: GanttDate, end: GanttDate) {\n    start = this.startOf(start);\n    end = this.endOf(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.initialize();\n  }\n\n  // 获取View的宽度\n  getWidth() {\n    return this.getCellWidth() * this.secondaryDatePoints.length;\n  }\n\n  // 获取单个网格的宽度\n  getCellWidth() {\n    return this.options.cellWidth;\n  }\n\n  // 获取当前时间的X坐标\n  getTodayXPoint(): number {\n    const toady = new GanttDate().getNowDay();\n    if (toady.value > this.start.value && toady.value < this.end.value) {\n      const x = this.getXPointByDate(toady) + this.getDayOccupancyWidth(toady) / 2;\n      return x;\n    } else {\n      return null;\n    }\n  }\n\n  // 获取指定时间的X坐标\n  getXPointByDate(date: GanttDate) {\n    return this.getDateIntervalWidth(this.start, date);\n  }\n\n  // 根据X坐标获取对应时间\n  getDateByXPoint(x: number): GanttDate {\n    let indexOfSecondaryDate: number;\n    let matchDate: GanttDatePoint;\n    let dayWidth: number;\n    let day: number;\n    if (x >= 0) {\n      indexOfSecondaryDate = Math.floor(x / this.getCellWidth());\n      matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];\n      dayWidth = this.getDayOccupancyWidth(matchDate?.start);\n    } else {\n      const datePointTemp = this.secondaryDatePoints[0];\n      dayWidth = this.getDayOccupancyWidth(datePointTemp?.start);\n      day = Math.floor(x / dayWidth);\n      return datePointTemp?.start.addDays(day);\n    }\n    if (dayWidth === this.getCellWidth()) {\n      return matchDate?.start;\n    } else {\n      day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;\n      if (indexOfSecondaryDate > this.secondaryDatePoints.length - 1) {\n        day += (indexOfSecondaryDate - (this.secondaryDatePoints.length - 1)) * 30;\n      }\n      if (this.getCellWidth() / dayWidth === 7) {\n        return matchDate?.start.addDays(day);\n      }\n      return matchDate?.start.setDate(day);\n    }\n  }\n\n  // 获取指定时间范围的宽度\n  getDateRangeWidth(start: GanttDate, end: GanttDate) {\n    // addSeconds(1) 是因为计算相差天会以一个整天来计算 end时间一般是59分59秒不是一个整天，所以需要加1\n    return this.getDateIntervalWidth(start.startOfDay(), end.endOfDay().addSeconds(1));\n\n  }\n}\n","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate, differenceInCalendarQuarters, eachMonthOfInterval } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { GanttViewType } from '../class';\n\nconst viewOptions: GanttViewOptions = {\n    start: new GanttDate().startOfQuarter().addQuarters(-1),\n    end: new GanttDate().endOfQuarter().addQuarters(2),\n    cellWidth: 280,\n    addAmount: 1,\n    addUnit: 'quarter',\n    fillDays: 30\n};\n\nexport class GanttViewMonth extends GanttView {\n    override getMinuteOccupancyWidth(date: GanttDate): number {\n        throw new Error('Method not implemented.');\n    }\n    override viewType = GanttViewType.month;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, viewOptions, options));\n    }\n\n    startOf(date: GanttDate) {\n        return date.startOfQuarter();\n    }\n\n    endOf(date: GanttDate) {\n        return date.endOfQuarter();\n    }\n\n    getPrimaryWidth() {\n        return this.getCellWidth() * 3;\n    }\n\n    getDayOccupancyWidth(date: GanttDate): number {\n        return this.cellWidth / date.getDaysInMonth();\n    }\n\n    getPrimaryDatePoints(): GanttDatePoint[] {\n        const quarters = differenceInCalendarQuarters(this.end.addSeconds(1).value, this.start.value);\n        const points: GanttDatePoint[] = [];\n        for (let i = 0; i < quarters; i++) {\n            const start = this.start.addQuarters(i);\n            const point = new GanttDatePoint(\n                start,\n                start.format(this.options.dateFormat.yearQuarter),\n                (this.getCellWidth() * 3) / 2 + i * (this.getCellWidth() * 3),\n                primaryDatePointTop\n            );\n            points.push(point);\n        }\n\n        return points;\n    }\n\n    getSecondaryDatePoints(): GanttDatePoint[] {\n        const months = eachMonthOfInterval({ start: this.start.value, end: this.end.value });\n        const points: GanttDatePoint[] = [];\n        for (let i = 0; i < months.length; i++) {\n            const start = new GanttDate(months[i]);\n            const point = new GanttDatePoint(\n                start,\n                start.format(this.options.dateFormat.month),\n                i * this.getCellWidth() + this.getCellWidth() / 2,\n                secondaryDatePointTop\n            );\n            points.push(point);\n        }\n        return points;\n    }\n}\n","/*\n * @Author: zdk\n * @Date: 2024-06-18 15:46:20\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-19 14:00:13\n * @Description: \n */\nimport { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachYearOfInterval, differenceInCalendarQuarters } from 'date-fns';\nimport { GanttViewType } from '../class';\n\nconst viewOptions: GanttViewOptions = {\n    start: new GanttDate().addYears(-1).startOfYear(),\n    end: new GanttDate().addYears(1).endOfYear(),\n    min: new GanttDate().addYears(-2).startOfYear(),\n    max: new GanttDate().addYears(2).endOfYear(),\n    cellWidth: 500,\n    addAmount: 1,\n    addUnit: 'year',\n    fillDays: 30\n};\n\nexport class GanttViewQuarter extends GanttView {\n    override getMinuteOccupancyWidth(date: GanttDate): number {\n        throw new Error('Method not implemented.');\n    }\n    override viewType = GanttViewType.quarter;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, viewOptions, options));\n    }\n\n    startOf(date: GanttDate) {\n        return date.startOfYear();\n    }\n\n    endOf(date: GanttDate) {\n        return date.endOfYear();\n    }\n\n    getPrimaryWidth() {\n        return this.getCellWidth() * 4;\n    }\n\n    getDayOccupancyWidth(date: GanttDate): number {\n        return this.cellWidth / date.getDaysInQuarter();\n    }\n\n    getPrimaryDatePoints(): GanttDatePoint[] {\n        const years = eachYearOfInterval({ start: this.start.value, end: this.end.value });\n        const points: GanttDatePoint[] = [];\n        for (let i = 0; i < years.length; i++) {\n            const start = new GanttDate(years[i]);\n            const point = new GanttDatePoint(\n                start,\n                `${start.format(this.options.dateFormat.year)}`,\n                (this.getCellWidth() * 4) / 2 + i * (this.getCellWidth() * 4),\n                primaryDatePointTop\n            );\n            points.push(point);\n        }\n        return points;\n    }\n\n    getSecondaryDatePoints(): GanttDatePoint[] {\n        const quarters = differenceInCalendarQuarters(this.end.value, this.start.value);\n        const points: GanttDatePoint[] = [];\n        for (let i = 0; i <= quarters; i++) {\n            const start = this.start.addQuarters(i);\n            const point = new GanttDatePoint(\n                start,\n                start.format(this.options.dateFormat.quarter),\n                i * this.getCellWidth() + this.getCellWidth() / 2,\n                secondaryDatePointTop\n            );\n            points.push(point);\n        }\n        return points;\n    }\n}\n","/*\n * @Author: zdk\n * @Date: 2024-06-18 15:46:20\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-19 14:00:01\n * @Description: \n */\nimport { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate, eachWeekOfInterval, eachDayOfInterval } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { GanttViewType } from '../class';\n\nconst viewOptions: GanttViewOptions = {\n    cellWidth: 35,\n    start: new GanttDate().startOfYear().startOfWeek({ weekStartsOn: 1 }),\n    end: new GanttDate().endOfYear().endOfWeek({ weekStartsOn: 1 }),\n    addAmount: 1,\n    addUnit: 'month',\n    fillDays: 1\n};\n\nexport class GanttViewDay extends GanttView {\n    override getMinuteOccupancyWidth(date: GanttDate): number {\n        throw new Error('Method not implemented.');\n    }\n    override showWeekBackdrop = true;\n\n    override showTimeline = false;\n\n    override viewType = GanttViewType.day;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, viewOptions, options));\n    }\n\n    startOf(date: GanttDate) {\n        return date.startOfWeek({ weekStartsOn: 1 });\n    }\n\n    endOf(date: GanttDate) {\n        return date.endOfWeek({ weekStartsOn: 1 });\n    }\n\n    getPrimaryWidth() {\n        return this.getCellWidth() * 7;\n    }\n\n    getDayOccupancyWidth(): number {\n        return this.cellWidth;\n    }\n\n    getPrimaryDatePoints(): GanttDatePoint[] {\n        const weeks = eachWeekOfInterval({ start: this.start.value, end: this.end.addSeconds(1).value }, { weekStartsOn: 1 });\n        const points: GanttDatePoint[] = [];\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 point = new GanttDatePoint(\n                weekStart,\n                weekStart.addWeeks(increaseWeek).format(this.options.dateFormat.yearMonth),\n                (this.getCellWidth() * 7) / 2 + i * (this.getCellWidth() * 7),\n                primaryDatePointTop\n            );\n            points.push(point);\n        }\n        return points;\n    }\n\n    getSecondaryDatePoints(): GanttDatePoint[] {\n        const days = eachDayOfInterval({ start: this.start.value, end: this.end.value });\n        const points: GanttDatePoint[] = [];\n        for (let i = 0; i < days.length; i++) {\n            const start = new GanttDate(days[i]);\n            const point = new GanttDatePoint(\n                start,\n                start.getDate().toString(),\n                i * this.getCellWidth() + this.getCellWidth() / 2,\n                secondaryDatePointTop,\n                {\n                    isWeekend: start.isWeekend(),\n                    isToday: start.isToday()\n                }\n            );\n            points.push(point);\n        }\n        return points;\n    }\n}\n","import { GanttViewType } from '../class';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachWeekOfInterval, GanttDate } from '../utils/date';\nimport { GanttView, GanttViewDate, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop } from './view';\n\nconst viewOptions: GanttViewOptions = {\n    cellWidth: 280,\n    start: new GanttDate().startOfYear().startOfWeek({ weekStartsOn: 1 }),\n    end: new GanttDate().endOfYear().endOfWeek({ weekStartsOn: 1 }),\n    addAmount: 1,\n    addUnit: 'month',\n    fillDays: 1\n};\n\nexport class GanttViewWeek extends GanttView {\n    override getMinuteOccupancyWidth(date: GanttDate): number {\n        throw new Error('Method not implemented.');\n    }\n    override viewType = GanttViewType.week;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, viewOptions, options));\n    }\n\n    startOf(date: GanttDate) {\n        return date.startOfWeek({ weekStartsOn: 1 });\n    }\n\n    endOf(date: GanttDate) {\n        return date.endOfWeek({ weekStartsOn: 1 });\n    }\n\n    getPrimaryWidth() {\n        return this.getCellWidth();\n    }\n\n    getDayOccupancyWidth(): number {\n        return this.cellWidth / 7;\n    }\n\n    getPrimaryDatePoints(): GanttDatePoint[] {\n        const weeks = eachWeekOfInterval({ start: this.start.value, end: this.end.addSeconds(1).value }, { weekStartsOn: 1 });\n        const points: GanttDatePoint[] = [];\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 point = new GanttDatePoint(\n                weekStart,\n                weekStart.addWeeks(increaseWeek).format(this.options.dateFormat.year),\n                this.getCellWidth() / 2 + i * this.getCellWidth(),\n                primaryDatePointTop\n            );\n            points.push(point);\n        }\n        return points;\n    }\n\n    getSecondaryDatePoints(): GanttDatePoint[] {\n        const weeks = eachWeekOfInterval({ start: this.start.value, end: this.end.value });\n        const points: GanttDatePoint[] = [];\n        for (let i = 0; i < weeks.length; i++) {\n            const start = new GanttDate(weeks[i]);\n            const point = new GanttDatePoint(\n                start,\n                `${start.format(this.options.dateFormat.week)}`,\n                i * this.getCellWidth() + this.getCellWidth() / 2,\n                secondaryDatePointTop\n            );\n            points.push(point);\n        }\n        return points;\n    }\n}\n","/*\n * @Author: zdk\n * @Date: 2024-06-18 15:46:20\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-19 14:00:26\n * @Description: \n */\nimport { GanttView, GanttViewOptions, primaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachYearOfInterval, differenceInCalendarYears } from 'date-fns';\nimport { GanttViewType } from '../class';\n\nconst viewOptions: GanttViewOptions = {\n    cellWidth: 480,\n    start: new GanttDate().addYears(-2).startOfYear(),\n    end: new GanttDate().addYears(2).endOfYear(),\n    addAmount: 1,\n    addUnit: 'year',\n    fillDays: 30\n};\n\nexport class GanttViewYear extends GanttView {\n    override getMinuteOccupancyWidth(date: GanttDate): number {\n        throw new Error('Method not implemented.');\n    }\n    override viewType = GanttViewType.year;\n\n    constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n        super(start, end, Object.assign({}, viewOptions, options));\n    }\n\n    startOf(date: GanttDate) {\n        return date.startOfYear();\n    }\n\n    endOf(date: GanttDate) {\n        return date.endOfYear();\n    }\n\n    getPrimaryWidth() {\n        return this.getCellWidth();\n    }\n\n    getDayOccupancyWidth(date: GanttDate): number {\n        return this.cellWidth / date.getDaysInYear();\n    }\n\n    getPrimaryDatePoints(): GanttDatePoint[] {\n        const years = eachYearOfInterval({ start: this.start.value, end: this.end.value });\n        const points: GanttDatePoint[] = [];\n        for (let i = 0; i < years.length; i++) {\n            const start = new GanttDate(years[i]);\n            const point = new GanttDatePoint(start, ``, this.getCellWidth() / 2 + i * this.getCellWidth(), primaryDatePointTop);\n            points.push(point);\n        }\n        return points;\n    }\n\n    getSecondaryDatePoints(): GanttDatePoint[] {\n        const years = differenceInCalendarYears(this.end.value, this.start.value);\n        const points: GanttDatePoint[] = [];\n        const pointTop = 27;\n        for (let i = 0; i <= years; i++) {\n            const start = this.start.addYears(i);\n            const point = new GanttDatePoint(\n                start,\n                `${start.format(this.options.dateFormat.year)}`,\n                i * this.getCellWidth() + this.getCellWidth() / 2,\n                pointTop\n            );\n            points.push(point);\n        }\n        return points;\n    }\n}\n","/*\n * @Author: zdk\n * @Date: 2024-06-04 09:13:24\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-19 13:59:30\n * @Description:\n */\nimport { differenceInMilliseconds, differenceInMinutes, eachDayOfInterval, eachHourOfInterval, eachMinuteOfInterval } from 'date-fns';\nimport { GanttViewType } from '../class';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachWeekOfInterval, GanttDate } from '../utils/date';\nimport { GanttView, GanttViewDate, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop } from './view';\n\nconst viewOptions: GanttViewOptions = {\n  cellWidth: 50,\n  start: new GanttDate().startOfYear().startOfWeek({ weekStartsOn: 1 }),\n  end: new GanttDate().endOfYear().endOfWeek({ weekStartsOn: 1 }),\n  addAmount: 10,\n  addUnit: 'minute'\n};\n\nexport class GanttViewTenMinute extends GanttView {\n  override viewType = GanttViewType.TenMinute;\n\n  constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n    super(start, end, Object.assign({}, viewOptions, options));\n  }\n\n  startOf(date: GanttDate) {\n    return date.startOfDay();\n  }\n\n  endOf(date: GanttDate) {\n    return date.endOfDay();\n  }\n\n  getPrimaryWidth() {\n    return (this.getCellWidth() * 60) / this.options.addAmount;\n  }\n\n  // 获取指定时间范围的宽度\n  override getDateRangeWidth(start: GanttDate, end: GanttDate) {\n    let result = 0;\n    const diffInMilliseconds = differenceInMilliseconds(end.value, start.value);\n    const minutes = diffInMilliseconds / (1000 * 60);\n\n    result += this.getCellWidth() * Math.abs(minutes / this.options.addAmount);\n\n    result = minutes >= 0 ? result : -result;\n    return Number(result.toFixed(3));\n  }\n\n  // 根据X坐标获取对应时间\n  override getDateByXPoint(x: number): GanttDate {\n    let minutes: number;\n    let cellWidth: number = this.cellWidth;\n    let newDate: GanttDate;\n    if (x >= 0) {\n      minutes = Math.floor(x / this.getMinuteOccupancyWidth());\n      newDate = this.start.addMinutes(minutes);\n      return newDate;\n    } else {\n      const datePointTemp = this.secondaryDatePoints[0];\n      minutes = Math.floor(x / cellWidth);\n      return datePointTemp?.start.addMinutes(minutes * this.options.addAmount);\n    }\n  }\n\n  getPrimaryDatePoints(): GanttDatePoint[] {\n    const weeks = eachHourOfInterval({ start: this.start.value, end: this.end.addSeconds(1).value }, { step: 1 });\n    const points: GanttDatePoint[] = [];\n    for (let i = 0; i < weeks.length; i++) {\n      const weekStart = new GanttDate(weeks[i]);\n      const point = new GanttDatePoint(\n        weekStart,\n        weekStart.format(this.options.dateFormat.hour),\n        (this.getCellWidth() * (60 / this.options.addAmount)) / 2 + i * (this.getCellWidth() * (60 / this.options.addAmount)),\n        primaryDatePointTop\n      );\n      points.push(point);\n    }\n    return points;\n  }\n\n  getSecondaryDatePoints(): GanttDatePoint[] {\n    const weeks = eachMinuteOfInterval({ start: this.start.startOfHour().value, end: this.end.value }, { step: this.options.addAmount });\n    const points: GanttDatePoint[] = [];\n    for (let i = 0; i < weeks.length; i++) {\n      const start = new GanttDate(weeks[i]);\n      const point = new GanttDatePoint(\n        start,\n        i % (60 / this.options.addAmount) == 0 ? null : `${start.format(this.options.dateFormat.minute)}`,\n        i * this.getCellWidth(), // 15是间隔\n        secondaryDatePointTop\n      );\n      points.push(point);\n    }\n    return points;\n  }\n\n  override getDayOccupancyWidth(date: GanttDate): number {\n    return 0;\n  }\n\n  override getMinuteOccupancyWidth() {\n    return this.cellWidth / this.options.addAmount;\n  }\n\n  override getDateIntervalWidth(start: GanttDate, end: GanttDate) {\n    let result = 0;\n    // const minutes = differenceInMinutes(end.value, start.value);\n    const diffInMilliseconds = differenceInMilliseconds(end.value, start.value);\n    const minutes = diffInMilliseconds / (1000 * 60);\n\n    result = this.getMinuteOccupancyWidth() * minutes;\n\n    result = minutes >= 0 ? result : -result;\n    return Number(result.toFixed(3));\n  }\n}\n","/*\n * @Author: zdk\n * @Date: 2024-06-04 09:13:24\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-13 17:24:09\n * @Description:\n */\nimport { differenceInMilliseconds, differenceInMinutes, eachDayOfInterval, eachHourOfInterval, eachMinuteOfInterval } from 'date-fns';\nimport { GanttViewType } from '../class';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachWeekOfInterval, GanttDate, differenceInDays } from '../utils/date';\nimport { GanttView, GanttViewDate, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop } from './view';\nimport { GanttViewTenMinute } from './TenMinute';\nconst viewOptions: GanttViewOptions = {\n  cellWidth: 50,\n  start: new GanttDate().startOfYear().startOfWeek({ weekStartsOn: 1 }),\n  end: new GanttDate().endOfYear().endOfWeek({ weekStartsOn: 1 }),\n  addAmount: 5,\n  addUnit: 'minute'\n};\n\nexport class GanttViewFiveMinute extends GanttViewTenMinute {\n  override viewType = GanttViewType.FiveMinute;\n\n  constructor(start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n    super(start, end, Object.assign({}, viewOptions, options));\n  }\n\n  override getDayOccupancyWidth(date: GanttDate): number {\n    return 0;\n  }\n\n  override getMinuteOccupancyWidth() {\n    return this.cellWidth / this.options.addAmount;\n  }\n\n  override getDateIntervalWidth(start: GanttDate, end: GanttDate) {\n    let result = 0;\n    const diffInMilliseconds = differenceInMilliseconds(end.value, start.value);\n    const minutes = diffInMilliseconds / (1000 * 60);\n\n    result += this.getMinuteOccupancyWidth() * minutes;\n\n    result = minutes >= 0 ? result : -result;\n\n    return Number(result.toFixed(3));\n  }\n}\n","/*\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-05 15:05:55\n * @Description: \n */\nimport { GanttViewOptions, GanttViewDate, GanttView } from './view';\nimport { GanttViewMonth } from './month';\nimport { GanttViewType } from '../class/view-type';\nimport { GanttViewQuarter } from './quarter';\nimport { GanttViewDay } from './day';\nimport { GanttViewWeek } from './week';\nimport { GanttViewYear } from './year';\nimport { GanttViewTenMinute } from './TenMinute';\nimport { GanttViewFiveMinute } from './FiveMinute';\n\nconst ganttViewsMap = {\n    [GanttViewType.day]: GanttViewDay,\n    [GanttViewType.week]: GanttViewWeek,\n    [GanttViewType.month]: GanttViewMonth,\n    [GanttViewType.quarter]: GanttViewQuarter,\n    [GanttViewType.year]: GanttViewYear,\n    [GanttViewType.TenMinute]: GanttViewTenMinute,\n    [GanttViewType.FiveMinute]: GanttViewFiveMinute\n\n\n};\n\nexport function registerView<T extends typeof GanttView>(type: string, view: T) {\n    ganttViewsMap[type] = view;\n}\n\nexport function createViewFactory(type: GanttViewType, start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n    return new ganttViewsMap[type](start, end, options);\n}\n","export const defaultStyles = {\n    lineHeight: 100,\n    barHeight: 24\n};\n\nexport const headerHeight = 44;\n\nexport type GanttStyles = typeof defaultStyles;\n\nexport const sideWidth = 400;\n\nexport const sideMiddleWidth = 500;\n\nexport const sideMaxWidth = 600;\n\nexport const sideMinWidth = 400;\n\nexport const barBackground = '#6698ff';\n\nexport const rangeHeight = 17;\n\nexport const todayHeight = 24;\n\nexport const todayWidth = 35;\n\nexport const todayBorderRadius = 4;\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","/*\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-18 09:17:43\n * @Description:\n */\nimport {\n  Input,\n  TemplateRef,\n  Output,\n  EventEmitter,\n  ContentChild,\n  ElementRef,\n  HostBinding,\n  ChangeDetectorRef,\n  NgZone,\n  SimpleChanges,\n  InjectionToken,\n  Directive,\n  Inject,\n  OnInit,\n  OnDestroy,\n  OnChanges\n} from '@angular/core';\nimport { from, Subject } from 'rxjs';\nimport { takeUntil, take, skip } from 'rxjs/operators';\nimport {\n  GanttItem,\n  GanttGroup,\n  GanttViewType,\n  GanttLoadOnScrollEvent,\n  GanttDragEvent,\n  GanttGroupInternal,\n  GanttItemInternal,\n  GanttBarClickEvent,\n  GanttLinkDragEvent,\n  GanttToolbarOptions,\n  DragToOtherRowEvent\n} from './class';\nimport { GanttView, GanttViewOptions } from './views/view';\nimport { createViewFactory } from './views/factory';\nimport { GanttDate } from './utils/date';\nimport { GanttStyles, defaultStyles } from './gantt.styles';\nimport { uniqBy, flatten, recursiveItems, getFlatItems, Dictionary, keyBy } from './utils/helpers';\nimport { GanttDragContainer } from './gantt-drag-container';\nimport { GANTT_GLOBAL_CONFIG, GanttGlobalConfig, defaultConfig } from './gantt.config';\nimport { GanttLinkOptions } from './class/link';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { GanttBaselineItem, GanttBaselineItemInternal } from './class/baseline';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\n\n@Directive()\nexport abstract class GanttUpper implements OnChanges, OnInit, OnDestroy {\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('items') originItems: GanttItem[] = [];\n\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('groups') originGroups: GanttGroup[] = [];\n\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('baselineItems') originBaselineItems: GanttBaselineItem[] = [];\n\n  @Input() viewType: GanttViewType = GanttViewType.month;\n\n  @Input() start: number;\n\n  @Input() end: number;\n\n  @Input() showTodayLine = true;\n\n  _draggable: boolean;\n  @Input()\n  set draggable(val) {\n    this._draggable = val;\n    this.draggableChange.emit(val);\n  }\n  get draggable() {\n    return this._draggable;\n  }\n\n  @Input() draggableEnable = true;\n\n  @Input() styles: GanttStyles;\n\n  @Input() showToolbar = false;\n\n  @Input() restrictToBounds = true;\n\n  @Input() toolbarOptions: GanttToolbarOptions = {\n    viewTypes: [GanttViewType.day, GanttViewType.month, GanttViewType.year]\n  };\n\n  @Input() viewOptions: GanttViewOptions = {};\n\n  @Input() set linkOptions(options: GanttLinkOptions) {\n    this._linkOptions = options;\n  }\n\n  get linkOptions() {\n    return Object.assign({}, defaultConfig.linkOptions, this.config.linkOptions, this._linkOptions);\n  }\n\n  @Input() disabledLoadOnScroll: boolean;\n\n  @Input()\n  set selectable(value: BooleanInput) {\n    this._selectable = coerceBooleanProperty(value);\n    if (this._selectable) {\n      this.selectionModel = this.initSelectionModel();\n    } else {\n      this.selectionModel?.clear();\n    }\n  }\n\n  get selectable(): boolean {\n    return this._selectable;\n  }\n\n  @Input()\n  set multiple(value: BooleanInput) {\n    this._multiple = coerceBooleanProperty(value);\n    if (this.selectable) {\n      this.selectionModel = this.initSelectionModel();\n    }\n  }\n\n  get multiple(): boolean {\n    return this._multiple;\n  }\n\n  @Output() loadOnScroll = new EventEmitter<GanttLoadOnScrollEvent>();\n\n  @Output() dragStarted = new EventEmitter<GanttDragEvent>();\n\n  @Output() dragMoved = new EventEmitter<GanttDragEvent>();\n\n  @Output() dragEnded = new EventEmitter<GanttDragEvent>();\n\n  @Output() dragToOtherRow = new EventEmitter<DragToOtherRowEvent>(true);\n\n  @Output() draggableChange = new EventEmitter<boolean>();\n\n  @Output() barClick = new EventEmitter<GanttBarClickEvent>();\n  @Output() barDbClick = new EventEmitter<GanttBarClickEvent>();\n  @Output() barContentMenu = new EventEmitter<GanttBarClickEvent>();\n  @Output() barMouseenter = new EventEmitter<GanttBarClickEvent>();\n  @Output() viewChange = new EventEmitter<GanttView>();\n\n  @Output() expandChange = new EventEmitter<GanttItemInternal | GanttGroupInternal>();\n\n  @ContentChild('bar', { static: true }) barTemplate: TemplateRef<any>;\n\n  @ContentChild('range', { static: true }) rangeTemplate: TemplateRef<any>;\n\n  @ContentChild('item', { static: true }) itemTemplate: TemplateRef<any>;\n\n  @ContentChild('baseline', { static: true }) baselineTemplate: TemplateRef<any>;\n\n  @ContentChild('group', { static: true }) groupTemplate: TemplateRef<any>;\n\n  @ContentChild('groupHeader', { static: true }) groupHeaderTemplate: TemplateRef<any>;\n\n  @ContentChild('toolbar', { static: true }) toolbarTemplate: TemplateRef<any>;\n\n  public linkable: boolean;\n\n  public computeAllRefs = true;\n\n  public linkDragEnded = new EventEmitter<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 viewChange = new EventEmitter<GanttView>();\n\n  public get element() {\n    return this.elementRef.nativeElement;\n  }\n\n  public firstChange = true;\n\n  public dragContainer: GanttDragContainer;\n\n  public unsubscribe$ = new Subject<void>();\n\n  public selectionModel: SelectionModel<string>;\n\n  public table?: NgxGanttTableComponent;\n\n  private groupsMap: { [key: string]: GanttGroupInternal };\n\n  private _selectable = false;\n\n  private _multiple = false;\n\n  private _linkOptions: GanttLinkOptions;\n\n  @HostBinding('class.gantt') ganttClass = true;\n\n  constructor(\n    protected elementRef: ElementRef<HTMLElement>,\n    protected cdr: ChangeDetectorRef,\n    protected ngZone: NgZone,\n    @Inject(GANTT_GLOBAL_CONFIG) public config: GanttGlobalConfig\n  ) {}\n\n  private createView() {\n    const viewDate = this.getViewDate();\n    this.view = createViewFactory(this.viewType, viewDate.start, viewDate.end, this.viewOptions);\n\n    this.view.start$.pipe(skip(1), takeUntil(this.unsubscribe$)).subscribe(() => {\n      this.computeRefs();\n    });\n  }\n\n  private setupGroups() {\n    const collapsedIds = this.groups.filter((group) => group.expanded === false).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  private 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, { fillDays: this.view.options?.fillDays });\n          group.items.push(item);\n        }\n      });\n    } else {\n      this.originItems.forEach((origin) => {\n        const item = new GanttItemInternal(origin, 0, { fillDays: this.view.options?.fillDays });\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 (!this.start || !this.end) {\n      this.originItems.forEach((item) => {\n        item.takeTime.forEach((takeTimeItem) => {\n          if (takeTimeItem.start && !this.start) {\n            start = start ? Math.min(start, takeTimeItem.start) : takeTimeItem.start;\n          }\n          if (takeTimeItem.end && !this.end) {\n            end = end ? Math.max(end, takeTimeItem.end) : takeTimeItem.end;\n          }\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    if (this.computeAllRefs) {\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\n  // 计算同一行的任务时间交集\n  computeOverlap() {\n    this.items.forEach((item) => {\n      this.checkOverlappingPeriods(item.takeTime);\n    });\n  }\n\n  /**\n   * 检查数组中每个元素是否与其它元素有重叠，并返回重叠部分的时间段\n   * @param {Array} periods - 包含时间段的数组，每个时间段包含start和end属性\n   * @returns {Array} - 返回包含重叠信息的数组\n   */\n  private checkOverlappingPeriods(takeTimeItems: GanttItemInternal[]) {\n    takeTimeItems.forEach((period, index) => {\n      period.overlaps = [];\n\n      takeTimeItems.forEach((otherPeriod, otherIndex) => {\n        if (index !== otherIndex) {\n          const overlap = this.getOverlapPeriod(period, otherPeriod);\n          if (overlap) {\n            period.overlaps.push(overlap);\n          }\n        }\n      });\n    });\n  }\n\n  /**\n   * 检查两个时间段是否有重叠，并返回重叠部分\n   * @param {Object} period1 - 第一个时间段，包含start和end属性\n   * @param {Object} period2 - 第二个时间段，包含start和end属性\n   * @returns {Object|null} - 如果有重叠，返回重叠部分的时间段，否则返回null\n   */\n  private getOverlapPeriod(period1: GanttItemInternal, period2: GanttItemInternal) {\n    if (period1.start && period1.end && period2.start && period2.end) {\n      if (period1.start.getUnixTime() < period2.end.getUnixTime() && period1.end.getUnixTime() > period2.start.getUnixTime()) {\n        return {\n          start: new GanttDate(Math.max(period1.start.getUnixTime(), period2.start.getUnixTime())),\n          end: new GanttDate(Math.min(period1.end.getUnixTime(), period2.end.getUnixTime())),\n          width: 0 //\n        };\n      }\n    }\n\n    return null;\n  }\n\n  private initSelectionModel() {\n    return new SelectionModel(this.multiple, []);\n  }\n\n  expandGroups(expanded: boolean) {\n    this.groups.forEach((group) => {\n      group.setExpand(expanded);\n    });\n    this.expandChange.next(null);\n    this.cdr.detectChanges();\n  }\n\n  ngOnInit() {\n    this.styles = Object.assign({}, defaultStyles, this.styles);\n    this.viewOptions.dateFormat = Object.assign({}, defaultConfig.dateFormat, this.config.dateFormat, this.viewOptions.dateFormat);\n    this.createView();\n    this.setupGroups();\n    this.setupItems();\n    this.computeRefs();\n    this.computeOverlap();\n    this.setupBaselineItems();\n    this.computeItemsRefs(...this.baselineItems);\n    this.initSelectionModel();\n    this.firstChange = false;\n\n    // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means\n    // the `onStable` will never emit any value.\n    const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));\n    // Normally this isn't in the zone, but it can cause performance regressions for apps\n    // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.\n    this.ngZone.runOutsideAngular(() => {\n      onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n        this.element.style.opacity = '1';\n        const disabledLoadOnScroll = this.disabledLoadOnScroll;\n        this.dragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {\n          this.disabledLoadOnScroll = 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.disabledLoadOnScroll = disabledLoadOnScroll;\n          this.dragEnded.emit(event);\n        });\n\n        this.dragContainer.dragToOtherRow.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {\n          this.disabledLoadOnScroll = disabledLoadOnScroll;\n          this.dragToOtherRow.emit(event);\n        });\n      });\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.firstChange) {\n      if (changes.viewType && changes.viewType.currentValue && changes.viewType.currentValue !== changes.viewType.previousValue) {\n        this.changeView(changes.viewType.currentValue);\n      }\n      if (changes.viewOptions) {\n        this.changeView(this.viewType);\n      }\n      if (changes.originItems || changes.originGroups) {\n        this.setupExpandedState();\n        this.setupGroups();\n        this.setupItems();\n        this.computeRefs();\n      }\n\n      if (changes.originBaselineItems) {\n        this.setupBaselineItems();\n        this.computeItemsRefs(...this.baselineItems);\n      }\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      if (item.takeTime) {\n        item.takeTime.forEach((childItem) => {\n          childItem.updateRefs({\n            width: childItem.start && childItem.end ? this.view.getDateRangeWidth(childItem.start, childItem.end) : 0,\n            x: childItem.start ? this.view.getXPointByDate(childItem.start) : 0,\n            y: (this.styles.lineHeight - this.styles.barHeight) / 2 - 1\n          });\n        });\n      }\n   \n      item.updateRefs({\n        width: item.start && item.end ? this.view.getDateRangeWidth(item.start, item.end) : 0,\n        x: item.start ? this.view.getXPointByDate(item.start) : 0,\n        y: (this.styles.lineHeight - 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(type: GanttViewType) {\n    this.viewType = type;\n    this.createView();\n    this.setupGroups();\n    this.setupItems();\n    this.computeRefs();\n    this.setupBaselineItems();\n    this.computeItemsRefs(...this.baselineItems);\n    this.viewChange.emit(this.view);\n  }\n\n  rerenderView() {\n    this.changeView(this.viewType);\n  }\n}\n\nexport const GANTT_UPPER_TOKEN = new InjectionToken<GanttUpper>('GANTT_UPPER_TOKEN');\n","import { Component, ContentChild, TemplateRef, Input, Inject, ElementRef } 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    public columnWidth: string;\n\n    @Input()\n    set width(width: number | string) {\n        this.columnWidth = coerceCssPixelValue(width);\n    }\n\n    @Input() name: string;\n\n    @Input() showExpandIcon: boolean;\n\n    @ContentChild('cell', { static: true }) templateRef: TemplateRef<any>;\n\n    @ContentChild('header', { static: true }) headerTemplateRef: TemplateRef<any>;\n\n    constructor(@Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper, private elementRef: ElementRef) {}\n\n    get classList(): DOMTokenList {\n        return this.elementRef.nativeElement.classList;\n    }\n}\n","import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport {\n    GanttTableDragEnterPredicateContext,\n    GanttTableDragDroppedEvent,\n    GanttTableEvent,\n    GanttTableDragStartedEvent,\n    GanttTableDragEndedEvent\n} from '../class';\n\n@Component({\n    selector: 'ngx-gantt-table',\n    template: ''\n})\nexport class NgxGanttTableComponent {\n    @Input() draggable = false;\n\n    @Input() dropEnterPredicate?: (context: GanttTableDragEnterPredicateContext) => boolean;\n\n    @Output() dragDropped = new EventEmitter<GanttTableDragDroppedEvent>();\n\n    @Output() dragStarted = new EventEmitter<GanttTableDragStartedEvent>();\n\n    @Output() dragEnded = new EventEmitter<GanttTableDragEndedEvent>();\n\n    @Output() columnChanges = new EventEmitter<GanttTableEvent>();\n\n    @ContentChild('rowBeforeSlot', { static: true }) rowBeforeTemplate: TemplateRef<any>;\n\n    @ContentChild('rowAfterSlot', { static: true }) rowAfterTemplate: TemplateRef<any>;\n\n    @ContentChild('tableEmpty', { static: true }) tableEmptyTemplate: TemplateRef<any>;\n\n    @ContentChild('tableFooter', { static: true }) tableFooterTemplate: TemplateRef<any>;\n}\n","import { InjectionToken, ChangeDetectorRef } from '@angular/core';\nimport { GanttGroupInternal, GanttItemInternal } from './class';\nimport { GanttStyles } from './gantt.styles';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\n\nexport interface GanttAbstractComponent {\n    table: NgxGanttTableComponent;\n    styles: GanttStyles;\n    maxLevel: number;\n    async: 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 {\n    Component,\n    HostBinding,\n    QueryList,\n    Input,\n    OnInit,\n    ViewChild,\n    ElementRef,\n    Inject,\n    OnDestroy,\n    ChangeDetectorRef\n} from '@angular/core';\nimport { NgxGanttTableColumnComponent } from '../../../table/gantt-column.component';\nimport { CdkDragEnd, CdkDragMove, CdkDragStart } from '@angular/cdk/drag-drop';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { GanttAbstractComponent, GANTT_ABSTRACT_TOKEN } from '../../../gantt-abstract';\nimport { setStyleWithVendorPrefix } from '../../../utils/set-style-with-vendor-prefix';\nimport { Subject, takeUntil } from 'rxjs';\n\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})\nexport class GanttTableHeaderComponent implements OnInit, OnDestroy {\n    public dragStartLeft: number;\n\n    public tableWidth = 0;\n\n    private unsubscribe$ = new Subject<void>();\n\n    @Input() columns: QueryList<NgxGanttTableColumnComponent>;\n\n    @ViewChild('resizeLine', { static: true }) resizeLineElementRef: ElementRef<HTMLElement>;\n\n    @HostBinding('class') className = `gantt-table-header `;\n\n    constructor(\n        private elementRef: ElementRef,\n        @Inject(GANTT_ABSTRACT_TOKEN) private gantt: GanttAbstractComponent,\n        private cdr: ChangeDetectorRef\n    ) {}\n\n    ngOnInit() {\n        this.columnsChange();\n        this.columns.changes.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n            this.columnsChange();\n            this.gantt.cdr.detectChanges();\n        });\n    }\n\n    private columnsChange() {\n        let tableWidth = 0;\n        this.columns.forEach((column) => {\n            if (!column.columnWidth) {\n                column.columnWidth = coerceCssPixelValue(defaultColumnWidth);\n            }\n            tableWidth += Number(column.columnWidth.replace('px', ''));\n        });\n        this.tableWidth = tableWidth;\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 = coerceCssPixelValue(columnWidth);\n        if (this.gantt.table) {\n            this.gantt.table.columnChanges.emit({ columns: this.columns });\n        }\n\n        this.tableWidth = 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        let tempWidth = 0;\n        this.columns.forEach((column) => {\n            const lastColumnWidth = parseInt(column.columnWidth, 10);\n            const distributeWidth = parseInt(String(dragWidth * (lastColumnWidth / tableWidth)), 10);\n            const columnWidth = Math.max(lastColumnWidth + distributeWidth || 0, minColumnWidth);\n            column.columnWidth = coerceCssPixelValue(columnWidth);\n            tempWidth += columnWidth;\n        });\n        this.tableWidth = tempWidth;\n        if (this.gantt.table) {\n            this.gantt.table.columnChanges.emit({ columns: this.columns });\n        }\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        this.resizeLineElementRef.nativeElement.style.left = `${distance.x}px`;\n        this.resizeLineElementRef.nativeElement.style.display = 'block';\n    }\n\n    private hideAuxiliaryLine() {\n        this.resizeLineElementRef.nativeElement.style.display = 'none';\n    }\n\n    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n    }\n}\n","<div class=\"d-flex\">\n  <div class=\"gantt-table-column\" *ngFor=\"let column of columns; let i = index\" [style.width]=\"column.columnWidth\">\n    <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"> </ng-container>\n    <ng-template #default>\n      {{ column.name }}\n    </ng-template>\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</div>\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","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>`;\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};\n","import { Component, Input, ElementRef, HostBinding } from '@angular/core';\nimport { icons } from './icons';\n\n@Component({\n    selector: 'gantt-icon',\n    template: ''\n})\nexport class GanttIconComponent {\n    @HostBinding('class.gantt-icon') isIcon = true;\n\n    @Input() set iconName(name: string) {\n        this.setSvg(name);\n    }\n\n    constructor(private elementRef: ElementRef<HTMLElement>) {}\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 { Pipe, PipeTransform } from '@angular/core';\nimport { 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\n@Pipe({\n    name: 'isGanttBarItem'\n})\nexport class IsGanttBarItemPipe implements PipeTransform {\n    transform(value: GanttItemType) {\n        return value === GanttItemType.bar;\n    }\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","import { auditTime, debounceTime, filter, startWith, Subject, takeUntil } from 'rxjs';\nimport {\n    Component,\n    HostBinding,\n    TemplateRef,\n    QueryList,\n    Input,\n    OnInit,\n    Inject,\n    Output,\n    EventEmitter,\n    OnDestroy,\n    ChangeDetectorRef,\n    ViewChildren,\n    AfterViewInit\n} from '@angular/core';\nimport {\n    GanttItemInternal,\n    GanttGroupInternal,\n    GanttSelectedEvent,\n    GanttTableDropPosition,\n    GanttTableDragEnterPredicateContext,\n    GanttTableDragDroppedEvent,\n    GanttTableDragStartedEvent,\n    GanttTableDragEndedEvent\n} from '../../../class';\nimport { NgxGanttTableColumnComponent } from '../../../table/gantt-column.component';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { GanttAbstractComponent, GANTT_ABSTRACT_TOKEN } from '../../../gantt-abstract';\nimport { defaultColumnWidth } from '../header/gantt-table-header.component';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from '../../../gantt-upper';\nimport { CdkDrag, CdkDragDrop, CdkDragEnd, CdkDragMove, CdkDragStart, DragRef } from '@angular/cdk/drag-drop';\nimport { DOCUMENT } from '@angular/common';\n@Component({\n    selector: 'gantt-table-body',\n    templateUrl: './gantt-table-body.component.html'\n})\nexport class GanttTableBodyComponent implements OnInit, OnDestroy, AfterViewInit {\n    private _viewportItems: (GanttGroupInternal | GanttItemInternal)[];\n    @Input() set viewportItems(data: (GanttGroupInternal | GanttItemInternal)[]) {\n        const firstData = data[0];\n        if (firstData && firstData.hasOwnProperty('items')) {\n            this.hasGroup = true;\n        }\n        this.ganttTableEmptyClass = data?.length ? false : true;\n        this._viewportItems = data;\n    }\n\n    get viewportItems() {\n        return this._viewportItems;\n    }\n\n    @Input() flatItems: (GanttGroupInternal | GanttItemInternal)[];\n\n    @Input() columns: QueryList<NgxGanttTableColumnComponent>;\n\n    @Input() groupTemplate: TemplateRef<any>;\n\n    @Input() emptyTemplate: TemplateRef<any>;\n\n    @Input() rowBeforeTemplate: TemplateRef<any>;\n\n    @Input() rowAfterTemplate: TemplateRef<any>;\n\n    @HostBinding('class.gantt-table-draggable')\n    @Input()\n    draggable = false;\n\n    @Input() dropEnterPredicate?: (context: GanttTableDragEnterPredicateContext) => boolean;\n\n    @Output() dragDropped = new EventEmitter<GanttTableDragDroppedEvent>();\n\n    @Output() dragStarted = new EventEmitter<GanttTableDragStartedEvent>();\n\n    @Output() dragEnded = new EventEmitter<GanttTableDragEndedEvent>();\n\n    @Output() itemClick = new EventEmitter<GanttSelectedEvent>();\n\n    @HostBinding('class.gantt-table-body') ganttTableClass = true;\n\n    @HostBinding('class.gantt-table-empty') ganttTableEmptyClass = false;\n\n    @HostBinding('class.gantt-table-dragging') ganttTableDragging = false;\n\n    @ViewChildren(CdkDrag<string>) cdkDrags: QueryList<CdkDrag<GanttItemInternal>>;\n\n    public hasGroup: boolean;\n\n    public hasExpandIcon = 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    constructor(\n        @Inject(GANTT_ABSTRACT_TOKEN) public gantt: GanttAbstractComponent,\n        @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n        private cdr: ChangeDetectorRef,\n        @Inject(DOCUMENT) private document: Document\n    ) {}\n\n    ngOnInit() {\n        this.columns.changes.pipe(startWith(this.columns), takeUntil(this.destroy$)).subscribe(() => {\n            this.hasExpandIcon = false;\n            this.columns.forEach((column) => {\n                if (!column.columnWidth) {\n                    column.columnWidth = coerceCssPixelValue(defaultColumnWidth);\n                }\n                if (column.showExpandIcon) {\n                    this.hasExpandIcon = true;\n                }\n            });\n            this.cdr.detectChanges();\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        if (this.dropEnterPredicate) {\n            const targetDragRef = this.itemDragsMap.get(targetElement);\n            if (\n                this.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  <ng-container *ngIf=\"!viewportItems?.length\">\n    <ng-container *ngIf=\"!emptyTemplate\">\n      <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n      <div class=\"empty-text\">没有数据</div>\n    </ng-container>\n    <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n  </ng-container>\n\n  <ng-container *ngIf=\"viewportItems && viewportItems.length > 0\">\n    <ng-container *ngFor=\"let item of viewportItems; trackBy: trackBy\">\n      <div class=\"gantt-table-group\" [ngClass]=\"item.class\" *ngIf=\"item.items\">\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          <ng-container *ngIf=\"groupTemplate; else default\">\n            <ng-template\n              [ngTemplateOutlet]=\"groupTemplate\"\n              [ngTemplateOutletContext]=\"{ $implicit: item.origin, group: item.origin }\"\n            ></ng-template>\n          </ng-container>\n          <ng-template #default>\n            <span class=\"group-title\">{{ item.title }}</span>\n          </ng-template>\n        </div>\n      </div>\n\n      <div\n        *ngIf=\"!item.items\"\n        (click)=\"itemClick.emit({ event: $event, 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        [style.height.px]=\"gantt.styles.lineHeight\"\n        [style.lineHeight.px]=\"gantt.styles.lineHeight\"\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\n        <div [classList]=\"column.classList\" *ngFor=\"let column of columns; let first = first\" [style.width]=\"column.columnWidth\">\n          <!-- drag icon -->\n          <gantt-icon\n            *ngIf=\"first && draggable\"\n            class=\"gantt-drag-handle\"\n            iconName=\"drag\"\n            cdkDragHandle\n            [cdkDragHandleDisabled]=\"(draggable && item.itemDraggable === false) || !draggable\"\n          ></gantt-icon>\n          <!-- expand icon -->\n          <div\n            *ngIf=\"column?.showExpandIcon || (!hasExpandIcon && first)\"\n            class=\"gantt-expand-icon\"\n            [style.marginLeft.px]=\"item.level * 20\"\n          >\n            <ng-container *ngIf=\"item.level < gantt.maxLevel - 1 && ((gantt.async && item.expandable) || item.children?.length > 0)\">\n              <gantt-icon\n                *ngIf=\"!item.loading\"\n                class=\"expand-icon\"\n                [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n                (click)=\"expandChildren($event, item)\"\n              >\n              </gantt-icon>\n              <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n            </ng-container>\n          </div>\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        <ng-template\n          [ngTemplateOutlet]=\"rowAfterTemplate\"\n          [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n        ></ng-template>\n      </div>\n    </ng-container>\n  </ng-container>\n</div>\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 { GanttUpper, GANTT_UPPER_TOKEN } 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.lineHeight / 2;\n        const controlY = this.ganttUpper.styles.lineHeight / 2;\n\n        if (x1 >= x4) {\n            if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {\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.lineHeight;\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","/*\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-18 15:19:45\n * @Description: \n */\nimport { Injectable, EventEmitter, Inject } from '@angular/core';\nimport { GanttLinkType } from './class';\nimport { DragToOtherRowEvent, 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    dragStarted = new EventEmitter<GanttDragEvent>();\n\n    dragMoved = new EventEmitter<GanttDragEvent>();\n\n    dragEnded = new EventEmitter<GanttDragEvent>();\n\n    dragToOtherRow = new EventEmitter<DragToOtherRowEvent>(true);\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(@Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper) {}\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","import {\n    Component,\n    OnInit,\n    Input,\n    Output,\n    EventEmitter,\n    HostBinding,\n    Inject,\n    ChangeDetectorRef,\n    ElementRef,\n    OnDestroy,\n    OnChanges,\n    NgZone\n} from '@angular/core';\nimport { empty, EMPTY, merge, NEVER, of, Subject, timer } from 'rxjs';\nimport { takeUntil, skip, debounceTime, switchMap, take } 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, LinkColors, GanttLinkType } from '../../class/link';\nimport { GanttLinkLine } from './lines/line';\nimport { createLineGenerator } from './lines/factory';\n\n@Component({\n    selector: 'gantt-links-overlay',\n    templateUrl: './links.component.html'\n})\nexport class GanttLinksComponent implements OnInit, OnChanges, OnDestroy {\n    // @Input() groups: GanttGroupInternal[] = [];\n\n    // @Input() items: GanttItemInternal[] = [];\n\n    @Input() flatItems: (GanttGroupInternal | GanttItemInternal)[] = [];\n\n    @Output() lineClick = new EventEmitter<GanttLineClickEvent>();\n\n    public links: LinkInternal[] = [];\n\n    public ganttLinkTypes = GanttLinkType;\n\n    public showArrow = false;\n\n    private linkItems: GanttLinkItem[] = [];\n\n    private firstChange = true;\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        @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n        private cdr: ChangeDetectorRef,\n        private elementRef: ElementRef,\n        private ganttDragContainer: GanttDragContainer,\n        private ngZone: NgZone\n    ) {}\n\n    ngOnInit() {\n        this.linkLine = createLineGenerator(this.ganttUpper.linkOptions.lineType, this.ganttUpper);\n\n        this.showArrow = this.ganttUpper.linkOptions.showArrow;\n        // this.buildLinks();\n        this.firstChange = false;\n\n        this.buildLinks();\n\n        this.ganttDragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n            this.elementRef.nativeElement.style.visibility = 'hidden';\n        });\n\n        merge(\n            this.ganttUpper.viewChange,\n            this.ganttUpper.expandChange,\n            this.ganttUpper.view.start$,\n            this.ganttUpper.dragEnded,\n            this.ganttUpper.linkDragEnded,\n            this.ngZone.onStable.pipe(take(1)).pipe(switchMap(() => 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    ngOnChanges() {\n        if (!this.firstChange) {\n            this.buildLinks();\n        }\n    }\n\n    private computeItemPosition() {\n        const lineHeight = this.ganttUpper.styles.lineHeight;\n        const barHeight = this.ganttUpper.styles.barHeight;\n        this.linkItems = [];\n        // if (this.groups.length > 0) {\n        //     let itemNum = 0;\n        //     let groupNum = 0;\n        //     this.groups.forEach((group) => {\n        //         groupNum++;\n        //         if (group.expanded) {\n        //             const items = recursiveItems(group.items);\n        //             items.forEach((item, itemIndex) => {\n        //                 const y = (groupNum + itemNum + itemIndex) * lineHeight + item.refs.y + barHeight / 2;\n        //                 this.linkItems.push({\n        //                     ...item,\n        //                     before: {\n        //                         x: item.refs.x,\n        //                         y\n        //                     },\n        //                     after: {\n        //                         x: item.refs.x + item.refs.width,\n        //                         y\n        //                     }\n        //                 });\n        //             });\n        //             itemNum += items.length;\n        //         }\n        //     });\n        // } else {\n        //     const items = recursiveItems(this.items);\n        //     items.forEach((item, itemIndex) => {\n        //         const y = itemIndex * lineHeight + item.refs.y + barHeight / 2;\n        //         this.linkItems.push({\n        //             ...item,\n        //             before: {\n        //                 x: item.refs.x,\n        //                 y\n        //             },\n        //             after: {\n        //                 x: item.refs.x + item.refs.width,\n        //                 y\n        //             }\n        //         });\n        //     });\n        // }\n\n        this.flatItems.forEach((item, itemIndex) => {\n            if (!item.hasOwnProperty('items')) {\n\n\n                const ganttItem = item as GanttItemInternal;\n\n                ganttItem.takeTime.forEach(takeTimeItem=>{\n\n                    if (takeTimeItem.refs) {\n                        const y = itemIndex * lineHeight + takeTimeItem.refs.y + barHeight / 2;\n                        this.linkItems.push({\n                            ...takeTimeItem,\n                            before: {\n                                x: takeTimeItem.refs.x,\n                                y\n                            },\n                            after: {\n                                x: takeTimeItem.refs.x + takeTimeItem.refs.width,\n                                y\n                            }\n                        });\n                    }\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                        let defaultColor: string = LinkColors.default;\n                        let activeColor: string = LinkColors.active;\n\n                        if (link.type === GanttLinkType.fs && source.end.getTime() > target.start.getTime()) {\n                            defaultColor = LinkColors.blocked;\n                            activeColor = LinkColors.blocked;\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  <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\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\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    <defs *ngIf=\"showArrow\">\n      <marker\n        *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n        [id]=\"'triangle' + i\"\n        markerUnits=\"strokeWidth\"\n        markerWidth=\"5\"\n        markerHeight=\"4\"\n        refX=\"5\"\n        refY=\"2\"\n        orient=\"180\"\n      >\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      <ng-template #markerEnd>\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      </ng-template>\n    </defs>\n  </ng-container>\n  <line class=\"link-dragging-line\"></line>\n</svg>\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","/** 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","import { isPlatformServer } from '@angular/common';\nimport { Injectable, ElementRef, OnDestroy, Inject, PLATFORM_ID, NgZone } from '@angular/core';\nimport { fromEvent, Subject, merge, EMPTY, Observable, interval } from 'rxjs';\nimport { pairwise, map, auditTime, takeUntil } from 'rxjs/operators';\nimport { isNumber } from './utils/helpers';\nimport { passiveListenerOptions } from './utils/passive-listeners';\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    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    private mainFooter: Element;\n\n    private mainScrollbar: Element;\n\n    private unsubscribe$ = new Subject<void>();\n\n    constructor(private ngZone: NgZone, @Inject(PLATFORM_ID) private platformId: string) {}\n\n    private monitorScrollChange() {\n        const scrollObservers = [\n            fromEvent(this.mainContainer, 'scroll', passiveListenerOptions),\n            fromEvent(this.sideContainer, 'scroll', passiveListenerOptions)\n        ];\n\n        this.mainFooter && scrollObservers.push(fromEvent(this.mainFooter, 'scroll', passiveListenerOptions));\n        this.mainScrollbar && scrollObservers.push(fromEvent(this.mainScrollbar, 'scroll', passiveListenerOptions));\n\n        this.ngZone.runOutsideAngular(() =>\n            merge(...scrollObservers)\n                .pipe(takeUntil(this.unsubscribe$))\n                .subscribe((event) => {\n                    this.syncScroll(event);\n                })\n        );\n    }\n\n    private syncScroll(event: Event) {\n        const target = event.currentTarget as HTMLElement;\n        const classList = target.classList;\n\n        if (!classList.contains('gantt-side-container')) {\n            this.mainContainer.scrollLeft = target.scrollLeft;\n            this.calendarHeader.scrollLeft = target.scrollLeft;\n            this.calendarOverlay.scrollLeft = target.scrollLeft;\n            this.mainScrollbar && (this.mainScrollbar.scrollLeft = target.scrollLeft);\n            this.mainFooter && (this.mainFooter.scrollLeft = target.scrollLeft);\n            if (classList.contains('gantt-main-container')) {\n                this.sideContainer.scrollTop = target.scrollTop;\n                this.mainContainer.scrollTop = target.scrollTop;\n            }\n        } else {\n            this.sideContainer.scrollTop = target.scrollTop;\n            this.mainContainer.scrollTop = target.scrollTop;\n        }\n    }\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.monitorScrollChange();\n        this.disableBrowserWheelEvent();\n    }\n\n    private isScrollbarClicked(event: MouseEvent, container: HTMLElement): boolean {\n        const { offsetWidth, clientWidth, offsetHeight, clientHeight } = container;\n        const isVerticalScrollbar = offsetWidth > clientWidth && event.offsetX > clientWidth;\n        const isHorizontalScrollbar = offsetHeight > clientHeight && event.offsetY > clientHeight;\n        return isVerticalScrollbar || isHorizontalScrollbar;\n      }\n\n      /**\n       * 滚动到最左边时，无法触发事件，用循环检测来实现\n       */\n    private createIntervalObservable(){\n\n        return new Observable<number>(observer => {\n            const intervalId = setInterval(() => {\n\n                if(this.mainContainer.scrollLeft==0){\n                    observer.next(0);\n                }\n\n              \n            }, 1000);\n        \n            // 当 Observable 被取消订阅时清除定时器\n            return () => {\n              clearInterval(intervalId);\n            };\n          });\n\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 = [\n            fromEvent(this.mainContainer, 'scroll', options),\n            this.createIntervalObservable()\n\n        ];\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                            const event: ScrollEvent = {\n                                target: this.mainContainer,\n                                direction: ScrollDirection.NONE\n                            };\n                            if (current - previous < 0) {\n                                if (this.mainContainer.scrollLeft < scrollThreshold && this.mainContainer.scrollLeft > 0) {\n                                    event.direction = ScrollDirection.LEFT;\n                                }\n                            }else \n                            if (current - previous > 0) {\n                                if (\n                                    this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft <\n                                    scrollThreshold\n                                ) {\n                                    event.direction = ScrollDirection.RIGHT;\n                                }\n                            }else if(current==0&& previous==0){\n                                if (this.mainContainer.scrollLeft == 0) {\n                                    event.direction = ScrollDirection.LEFT;\n                                }\n                            }\n                            return event;\n                        })\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    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    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n    }\n}\n","import { Injectable, ElementRef, OnDestroy, NgZone, EventEmitter } from '@angular/core';\nimport { DragRef, DragDrop } from '@angular/cdk/drag-drop';\nimport { GanttDomService } from '../../gantt-dom.service';\nimport { GanttDragContainer, InBarPosition } from '../../gantt-drag-container';\nimport { GanttItemInternal } from '../../class/item';\nimport { GanttDate, differenceInCalendarDays, differenceInDays } from '../../utils/date';\nimport { animationFrameScheduler, interval, Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { GanttUpper } from '../../gantt-upper';\nimport { GanttLinkType } from '../../class/link';\nimport { passiveListenerOptions } from '../../utils/passive-listeners';\nimport {\n  AutoScrollHorizontalDirection,\n  getHorizontalScrollDirection,\n  isPointerNearClientRect,\n  getAutoScrollSpeedRates\n} from '../../utils/drag-scroll';\nimport { differenceInMinutes } from 'date-fns';\nimport { GanttViewType } from '../../class/view-type';\nimport { defaultStyles } from '../../gantt.styles';\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 ganttUpper: GanttUpper;\n\n  private barElement: HTMLElement;\n\n  private item: GanttItemInternal;\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 dragRefs: 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 barHandleDragMoveRecordDays: number;\n\n  /** Speed ratio for auto scroll */\n  private autoScrollSpeedRates = 1;\n\n  constructor(\n    private dragDrop: DragDrop,\n    private dom: GanttDomService,\n    private dragContainer: GanttDragContainer,\n    private _ngZone: NgZone\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    const dropClass =\n      this.ganttUpper.config.linkOptions?.dependencyTypes?.length === 1 &&\n      this.ganttUpper.config.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.ganttUpper.draggableEnable) return;\n        if (this.dragContainer.linkDraggingId && this.dragContainer.linkDraggingId !== this.item.id) {\n          if (this.item.linkable) {\n            this.barElement.classList.add(dropClass);\n            this.dragContainer.emitLinkDragEntered({\n              item: this.item,\n              element: this.barElement\n            });\n          }\n        } else {\n          this.barElement.classList.add(activeClass);\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 cacle(y: number) {\n    let addRow = 0;\n    if (Math.abs(y) > defaultStyles.lineHeight / 2) {\n      let distance = 0;\n      if (y > 0) {\n        distance = y + (defaultStyles.lineHeight - defaultStyles.barHeight) / 2;\n      } else {\n        distance = y - (defaultStyles.lineHeight - defaultStyles.barHeight) / 2;\n      }\n\n      addRow = Math.trunc(distance / defaultStyles.lineHeight);\n\n      if (addRow == 0) {\n        if (y > 0) {\n          addRow++;\n        } else {\n          addRow--;\n        }\n      }\n    }\n\n    let curRowIndex = this.ganttUpper.originItems.findIndex((item) => {\n      let _idx = item.takeTime.findIndex((takeTimeItem) => takeTimeItem.id == this.item.id);\n\n      return _idx >= 0;\n    });\n\n    let fromItem = this.ganttUpper.originItems[curRowIndex];\n    let toItem = this.ganttUpper.originItems[curRowIndex + addRow];\n\n    if (addRow != 0 && fromItem && toItem && fromItem.dragGroup == toItem.dragGroup) {\n      for (let i = fromItem.takeTime.length - 1; i >= 0; i--) {\n        if (fromItem.takeTime[i].id == this.item.id) {\n          fromItem.takeTime.splice(i, 1);\n          toItem.takeTime.push(this.item.origin);\n\n          this.dragContainer.dragToOtherRow.emit({\n            takeTimeItem: this.item.origin,\n            fromItem: fromItem,\n            toItem: toItem\n          });\n\n          break;\n        }\n      }\n    }\n  }\n\n  private createBarDrag() {\n    const dragRef = this.createDragRef(this.barElement);\n    //dragRef.lockAxis = 'x';\n    if (this.ganttUpper.restrictToBounds) {\n      dragRef.withBoundaryElement(this.dom.mainItems as HTMLElement);\n    }\n    dragRef.isDragging = () => !this.ganttUpper.draggableEnable;\n    \n    dragRef.started.subscribe(() => {\n      if (!this.ganttUpper.draggableEnable) return;\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          this.barDragMove();\n        }\n      });\n      this.item.draging = true;\n      this.dragContainer.dragStarted.emit({ item: this.item.origin });\n    });\n\n    dragRef.moved.subscribe((event) => {\n      console.log(event);\n\n      if (!this.ganttUpper.draggableEnable) return;\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      if (!this.ganttUpper.draggableEnable) return;\n      this.clearDraggingStyles();\n      this.closeDragBackdrop();\n      event.source.reset();\n      this.stopScrolling();\n      this.item.draging = false;\n      this.dragScrolling = false;\n      this.dragScrollDistance = 0;\n      this.barDragMoveDistance = 0;\n\n      this.cacle(event.distance.y);\n      this.item.updateRefs({\n        width: this.ganttUpper.view.getDateRangeWidth(this.item.start, this.item.end),\n        x: this.ganttUpper.view.getXPointByDate(this.item.start),\n        y: (this.ganttUpper.styles.lineHeight - this.ganttUpper.styles.barHeight) / 2 - 1\n      });\n\n      this.item.origin.changed = true;\n\n      this.dragContainer.dragEnded.emit({ item: this.item.origin });\n    });\n    this.barDragRef = dragRef;\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.lockAxis = 'x';\n      dragRef.withBoundaryElement(this.dom.mainItems as HTMLElement);\n      dragRef.started.subscribe(() => {\n        if (!this.ganttUpper.draggableEnable) return;\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.item.origin.changed = true;\n        this.dragContainer.dragStarted.emit({ item: this.item.origin });\n      });\n\n      dragRef.moved.subscribe((event) => {\n        if (!this.ganttUpper.draggableEnable) return;\n        if (this.barHandleDragMoveRecordDays && this.barHandleDragMoveRecordDays > 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        if (!this.ganttUpper.draggableEnable) return;\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.getDateRangeWidth(this.item.start, this.item.end),\n          x: this.ganttUpper.view.getXPointByDate(this.item.start),\n          y: (this.ganttUpper.styles.lineHeight - 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.withBoundaryElement(this.dom.root as HTMLElement);\n      dragRef.beforeStarted.subscribe(() => {\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\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        handle.style.pointerEvents = '';\n        if (this.barDragRef) {\n          this.barDragRef.disabled = false;\n        }\n        // 计算line拖动的落点位于目标Bar的值，如果值大于Bar宽度的一半，说明是拖动到Begin位置，否则则为拖动到End位置\n        if (this.dragContainer.linkDragPath.to) {\n          const placePointX =\n            event.source.getRootElement().getBoundingClientRect().x - 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        this.barElement.classList.remove(activeClass);\n        this.destroyLinkDraggingLine();\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('HH:mm');\n    dragMaskElement.querySelector('.end').innerHTML = end.format('HH:mm');\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 barDragMoveInMinute() {\n    const currentX = this.item.refs.x + this.barDragMoveDistance + this.dragScrollDistance;\n    const currentDate = this.ganttUpper.view.getDateByXPoint(currentX);\n    const currentStartX = this.ganttUpper.view.getXPointByDate(currentDate);\n    const minuteWidth = this.ganttUpper.view.getCellWidth();\n    const diffminutes = differenceInMinutes(this.item.end.value, this.item.start.value);\n\n    let start = currentDate;\n    let end = currentDate.addMinutes(diffminutes);\n\n    // if (currentX > currentStartX + minuteWidth / 2) {\n    //     start = start.addMinutes(this.ganttUpper.view.options.addAmount);\n    //     end = end.addMinutes(this.ganttUpper.view.options.addAmount);\n    // }\n\n    if (this.dragScrolling) {\n      const left = currentX - this.barDragMoveDistance;\n      this.barElement.style.left = left + 'px';\n    }\n\n    this.openDragBackdrop(\n      this.barElement,\n      this.ganttUpper.view.getDateByXPoint(currentX),\n      this.ganttUpper.view.getDateByXPoint(currentX + this.item.refs.width)\n    );\n\n    if (!this.isStartOrEndInsideView(start, end)) {\n      return;\n    }\n\n    console.log(`move currentX:${currentX} start:${start.getMinutes()}`);\n\n    this.item.updateDate(start, end, this.isInMinute());\n    this.dragContainer.dragMoved.emit({ item: this.item.origin });\n  }\n\n  private isInMinute() {\n    return this.ganttUpper.viewType == GanttViewType.TenMinute || this.ganttUpper.viewType == GanttViewType.FiveMinute;\n  }\n\n  private barDragMove() {\n    if (this.isInMinute()) {\n      this.barDragMoveInMinute();\n      return;\n    }\n\n    const currentX = this.item.refs.x + this.barDragMoveDistance + this.dragScrollDistance;\n    const currentDate = this.ganttUpper.view.getDateByXPoint(currentX);\n    const currentStartX = this.ganttUpper.view.getXPointByDate(currentDate);\n    const dayWidth = this.ganttUpper.view.getDayOccupancyWidth(currentDate);\n    const diffDays = differenceInCalendarDays(this.item.end.value, this.item.start.value);\n\n    let start = currentDate;\n    let end = currentDate.addDays(diffDays);\n\n    if (currentX > currentStartX + dayWidth / 2) {\n      start = start.addDays(1);\n      end = end.addDays(1);\n    }\n\n    if (this.dragScrolling) {\n      const left = currentX - this.barDragMoveDistance;\n      this.barElement.style.left = left + 'px';\n    }\n\n    this.openDragBackdrop(\n      this.barElement,\n      this.ganttUpper.view.getDateByXPoint(currentX),\n      this.ganttUpper.view.getDateByXPoint(currentX + this.item.refs.width)\n    );\n\n    if (!this.isStartOrEndInsideView(start, end)) {\n      return;\n    }\n\n    this.item.updateDate(start, end, this.isInMinute());\n    this.dragContainer.dragMoved.emit({ item: this.item.origin });\n  }\n\n  private barBeforeHandleDragMove() {\n    let { x, start, oneDayWidth } = this.startOfBarHandle();\n    let _dragMinWidth = dragMinWidth;\n    const width = this.item.refs.width + this.barHandleDragMoveAndScrollDistance * -1;\n    let intervalTime = differenceInDays(this.item.end.value, start.value);\n    if (this.isInMinute()) {\n      intervalTime = differenceInMinutes(this.item.end.value, start.value);\n      oneDayWidth = this.ganttUpper.view.options.cellWidth;\n    }\n\n    if (width > oneDayWidth && intervalTime > 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.item.updateDate(start, this.item.end, this.isInMinute());\n    } else {\n      console.log(`width:${width},intervalTime:${intervalTime}`);\n      this.barElement.style.width = oneDayWidth + 'px';\n      const x = this.ganttUpper.view.getXPointByDate(this.item.end.addMinutes(-1 * this.ganttUpper.view.options.addAmount));\n      this.barElement.style.left = x + 'px';\n\n      if (this.isInMinute()) {\n        let newBeginDate = this.item.end.addMinutes(-1 * this.ganttUpper.view.options.addAmount);\n        this.openDragBackdrop(this.barElement, newBeginDate, this.item.end);\n\n        this.item.updateDateInMinute(newBeginDate, this.item.end);\n      } else {\n        this.openDragBackdrop(this.barElement, this.item.end.startOfDay(), this.item.end);\n\n        this.item.updateDate(this.item.end.startOfDay(), this.item.end);\n      }\n    }\n    this.barHandleDragMoveRecordDays = intervalTime;\n\n    this.dragContainer.dragMoved.emit({ item: this.item.origin });\n  }\n\n  private barAfterHandleDragMove() {\n    const { width, end } = this.endOfBarHandle();\n    let oneDayWidth = this.ganttUpper.view.getDateRangeWidth(this.item.start, this.item.start.endOfDay());\n\n    let intervalTime = differenceInDays(end.value, this.item.start.value);\n    if (this.isInMinute()) {\n      intervalTime = differenceInMinutes(end.value, this.item.start.value);\n\n      oneDayWidth = this.ganttUpper.view.options.cellWidth;\n    }\n\n    if (width > oneDayWidth && intervalTime > 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.item.updateDate(this.item.start, end, this.isInMinute());\n    } else {\n      if (this.barHandleDragMoveRecordDays > 0 && intervalTime <= 0) {\n        this.barElement.style.width = oneDayWidth + 'px';\n      }\n\n      if (this.isInMinute()) {\n        let newEndDate = this.item.start.addMinutes(this.ganttUpper.view.options.addAmount);\n        this.openDragBackdrop(this.barElement, this.item.start, newEndDate);\n\n        this.item.updateDateInMinute(this.item.start, newEndDate);\n      } else {\n        this.openDragBackdrop(this.barElement, this.item.start, this.item.start.endOfDay());\n\n        this.item.updateDate(this.item.start, this.item.start.endOfDay());\n      }\n    }\n    this.barHandleDragMoveRecordDays = intervalTime;\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 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 && 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, oneDayWidth } = this.startOfBarHandle();\n      const xPointerByEndDate = this.ganttUpper.view.getXPointByDate(this.item.end);\n\n      isStartGreaterThanEnd = start.value > this.item.end.value;\n      isBarAppearsInView = xPointerByEndDate + oneDayWidth + xThreshold <= scrollLeft + clientWidth;\n    } else {\n      const { end } = this.endOfBarHandle();\n      const xPointerByStartDate = this.ganttUpper.view.getXPointByDate(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.getDateByXPoint(x),\n      oneDayWidth: this.ganttUpper.view.getDateRangeWidth(this.item.end.startOfDay(), 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.getDateByXPoint(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 (!this.ganttUpper.restrictToBounds) {\n      return true;\n    }\n    if (itemStart < viewStart || itemEnd > viewEnd) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n\n  createDrags(elementRef: ElementRef, item: GanttItemInternal, ganttUpper: GanttUpper) {\n    this.item = item;\n    this.barElement = elementRef.nativeElement;\n\n    this.ganttUpper = ganttUpper;\n    if (this.dragDisabled && this.linkDragDisabled) {\n      return;\n    } else {\n      this.createMouseEvents();\n      if (!this.dragDisabled) {\n        const dragRef = this.createBarDrag();\n        const dragHandlesRefs = this.createBarHandleDrags();\n        this.dragRefs.push(dragRef, ...dragHandlesRefs);\n      }\n      if (!this.linkDragDisabled) {\n        const linkDragRefs = this.createLinkHandleDrags();\n        this.dragRefs.push(...linkDragRefs);\n      }\n    }\n  }\n\n  updateItem(item: GanttItemInternal) {\n    this.item = item;\n  }\n\n  ngOnDestroy() {\n    this.closeDragBackdrop();\n    this.dragRefs.forEach((dragRef) => dragRef.dispose());\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.stopScrolling();\n    this.stopScrollTimers$.complete();\n  }\n}\n","import { Input, ElementRef, Inject, TemplateRef, Directive, OnInit, OnChanges, OnDestroy, SimpleChanges } 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 OnChanges, OnInit, OnDestroy {\n    @Input() template: TemplateRef<any>;\n\n    @Input() item: GanttItemInternal;\n\n    public firstChange = true;\n\n    public unsubscribe$ = new Subject<void>();\n\n    public refsUnsubscribe$ = new Subject<void>();\n\n    constructor(protected elementRef: ElementRef<HTMLElement>, @Inject(GANTT_UPPER_TOKEN) protected ganttUpper: GanttUpper) {}\n\n    ngOnInit() {\n        this.firstChange = false;\n        this.item.refs$.pipe(takeUntil(this.refsUnsubscribe$)).subscribe(() => {\n            this.setPositions();\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (!this.firstChange) {\n            this.itemChange(changes.item.currentValue);\n        }\n    }\n\n    private itemChange(item: GanttItemInternal) {\n        this.refsUnsubscribe$.next();\n        this.refsUnsubscribe$.complete();\n        this.item = item;\n        this.item.refs$.pipe(takeUntil(this.refsUnsubscribe$)).subscribe(() => {\n            this.setPositions();\n        });\n    }\n\n    private setPositions() {\n     \n        const itemElement = this.elementRef.nativeElement;\n        itemElement.style.left = this.item.refs?.x + 'px';\n        itemElement.style.top = this.item.refs?.y + 'px';\n        itemElement.style.width = this.item.refs?.width + 'px';\n        if (this.item.type === GanttItemType.bar) {\n            itemElement.style.height = this.ganttUpper.styles.barHeight + 'px';\n        } else if (this.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 {\n  Component,\n  OnInit,\n  HostBinding,\n  ElementRef,\n  OnChanges,\n  OnDestroy,\n  Inject,\n  ViewChild,\n  Output,\n  EventEmitter,\n  AfterViewInit,\n  ViewChildren,\n  QueryList,\n  NgZone,\n  SimpleChanges,\n  ChangeDetectorRef\n} from '@angular/core';\nimport { from, fromEvent, merge, Observable } from 'rxjs';\nimport { startWith, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { GanttBarDrag } from './bar-drag';\nimport { hexToRgb } from '../../utils/helpers';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { barBackground, defaultStyles } from '../../gantt.styles';\nimport { GanttBarClickEvent } from '../../class';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttItemUpper } from '../../gantt-item-upper';\nimport { differenceInMilliseconds, differenceInMinutes } from 'date-fns';\nimport eachMinuteOfInterval from 'date-fns/eachMinuteOfInterval';\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})\nexport class NgxGanttBarComponent extends GanttItemUpper implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n  @Output() barClick = new EventEmitter<GanttBarClickEvent>();\n  @Output() barDbClick = new EventEmitter<GanttBarClickEvent>();\n  @Output() barContentMenu = new EventEmitter<GanttBarClickEvent>();\n\n  @ViewChild('content') contentElementRef: ElementRef<HTMLDivElement>;\n\n  @HostBinding('class.gantt-bar') ganttItemClass = true;\n\n  @ViewChildren('handle') handles: QueryList<ElementRef<HTMLElement>>;\n  barHeight: number;\n\n  constructor(\n    private dragContainer: GanttDragContainer,\n    private drag: GanttBarDrag,\n    elementRef: ElementRef<HTMLDivElement>,\n    @Inject(GANTT_UPPER_TOKEN) public override ganttUpper: GanttUpper,\n    private ngZone: NgZone,\n    private cdr: ChangeDetectorRef\n  ) {\n    super(elementRef, ganttUpper);\n\n    this.barHeight = defaultStyles.barHeight;\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.dragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe((ganttItem) => {\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      this.setOverlaps();\n    });\n  }\n\n  override ngOnChanges(changes: SimpleChanges): void {\n    super.ngOnChanges(changes);\n    if (!this.firstChange) {\n      this.drag.updateItem(this.item);\n\n      if (\n        changes.item.currentValue.refs?.width !== changes.item.previousValue.refs?.width ||\n        changes.item.currentValue.color !== changes.item.previousValue.color ||\n        changes.item.currentValue.start?.value !== changes.item.previousValue.start?.value ||\n        changes.item.currentValue.end?.value !== changes.item.previousValue.end?.value\n      ) {\n        this.setContentBackground();\n        this.setOverlaps();\n      }\n    }\n  }\n\n  ngAfterViewInit() {\n    // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means\n    // the `onStable` will never emit any value.\n    const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));\n    // Normally this isn't in the zone, but it can cause performance regressions for apps\n    // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.\n    this.ngZone.runOutsideAngular(() => {\n      onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n        this.drag.createDrags(this.elementRef, this.item, this.ganttUpper);\n      });\n    });\n\n    this.setContentBackground();\n    this.setOverlaps();\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.toArray().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  timer = null;\n  onBarClick(event: Event) {\n    clearTimeout(this.timer);\n    this.timer = setTimeout(() => {\n      this.barClick.emit({ event, item: this.item.origin });\n    }, 300);\n  }\n  onBarDbClick(event: Event) {\n    clearTimeout(this.timer);\n    this.barDbClick.emit({ event, item: this.item.origin });\n  }\n  onContextmenu(event: Event) {\n    event.preventDefault();\n    this.barContentMenu.emit({ event, item: this.item.origin });\n  }\n\n  private setOverlaps() {\n    if (this.item.refs?.width) {\n      this.ngZone.runOutsideAngular(() => {\n        if (this.item.overlaps.length > 0) {\n          this.item.overlaps.forEach((overlap) => {\n            // let minutes = differenceInMinutes(overlap.start.value, overlap.end.value);\n            const diffInMilliseconds = differenceInMilliseconds(overlap.end.value, overlap.start.value);\n            const minutes = diffInMilliseconds / (1000 * 60);\n            \n            overlap.width = Math.abs((minutes / this.ganttUpper.view.options.addAmount) * this.ganttUpper.view.options.cellWidth);\n          });\n        }\n      });\n      this.cdr.detectChanges();\n    }\n  }\n\n  private setContentBackground() {\n    if (this.item.refs?.width) {\n      const contentElement = this.contentElementRef.nativeElement;\n      const color = this.item.color || barBackground;\n      const style: Partial<CSSStyleDeclaration> = this.item.barStyle || {};\n      const barElement = this.elementRef.nativeElement;\n\n      if (this.item.origin.start && this.item.origin.end) {\n        style.background = color;\n        style.borderRadius = '';\n      }\n      if (this.item.origin.start && !this.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 (!this.item.origin.start && this.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 (this.item.progress >= 0) {\n        const contentProgressElement = contentElement.querySelector('.gantt-bar-content-progress') as HTMLDivElement;\n        style.background = hexToRgb(color, 0.3);\n        style.borderRadius = '';\n        contentProgressElement.style.background = color;\n      }\n\n      for (const key in style) {\n        if (style.hasOwnProperty(key)) {\n          contentElement.style[key] = style[key];\n        }\n      }\n    }\n  }\n\n  stopPropagation(event: Event) {\n    event.stopPropagation();\n  }\n}\n","<!--\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-18 10:17:30\n * @Description: \n-->\n \n<div class=\"gantt-bar-layer\">\n  <div class=\"drag-handles\">\n    <ng-container *ngIf=\"item.draggable && ganttUpper.draggable\">\n      <span class=\"handle\" #handle></span>\n      <span class=\"handle\" #handle></span>\n    </ng-container>\n  </div>\n\n  <div *ngIf=\"item.linkable && ganttUpper.linkable\" class=\"link-handles\">\n    <span class=\"handle\"><span class=\"point\"></span></span>\n    <span class=\"handle\"> <span class=\"point\"></span></span>\n  </div>\n</div>\n<div class=\"gantt-bar-border\"></div>\n\n<div\n  #content\n  class=\"gantt-bar-content\"\n  style=\"position: relative; overflow: visible; color: #fff; display: flex; justify-content: space-between; align-items: center\"\n  (click)=\"onBarClick($event)\"\n  (dblclick)=\"onBarDbClick($event)\"\n  (contextmenu)=\"onContextmenu($event)\"\n>\n  <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n\n  <div style=\"white-space: nowrap; order: 5\">{{ item.start?.format('HH:mm') }}</div>\n  <div style=\"white-space: nowrap; order: 6\">{{ item.differenceInMinutes() }}</div>\n  <div style=\"white-space: nowrap; order: 7\">{{ item.end?.format('HH:mm') }}</div>\n  <ng-container *ngIf=\"item.draging !== true && item.overlaps && item.overlaps.length > 0\">\n    <div\n      *ngFor=\"let overlap of item.overlaps; let idx = index\"\n      class=\"gantt-bar-content-overlaps\"\n      style=\"order: 1\"\n      [style.order]=\"overlap.start.value <= item.start.value ? idx : 7 + idx\"\n      [style.width.px]=\"overlap.width\"\n    >\n      <svg [attr.width]=\"overlap.width\" [attr.height]=\"barHeight\" xmlns=\"http://www.w3.org/2000/svg\">\n        <!-- 红白相间的背景 -->\n        <defs>\n          <pattern id=\"stripes\" width=\"10\" height=\"10\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\">\n            <rect width=\"5\" height=\"10\" fill=\"red\"></rect>\n            <rect x=\"5\" width=\"5\" height=\"10\" fill=\"white\"></rect>\n          </pattern>\n        </defs>\n        <rect width=\"100%\" height=\"100%\" fill=\"url(#stripes)\"></rect>\n      </svg>\n    </div>\n  </ng-container>\n\n  <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"> </ng-template>\n</div>\n","import { Component, HostBinding, ElementRef, Inject } from '@angular/core';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttItemUpper } from '../../gantt-item-upper';\n\n@Component({\n    selector: 'ngx-gantt-range,gantt-range',\n    templateUrl: './range.component.html'\n})\nexport class NgxGanttRangeComponent extends GanttItemUpper {\n    @HostBinding('class.gantt-range') ganttRangeClass = true;\n\n    constructor(elementRef: ElementRef<HTMLDivElement>, @Inject(GANTT_UPPER_TOKEN) ganttUpper: GanttUpper) {\n        super(elementRef, ganttUpper);\n    }\n}\n","<ng-container *ngIf=\"item.start && item.end\">\n  <div class=\"gantt-range-main\">\n    <div class=\"gantt-range-main-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\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</ng-container>\n","import { Component, ElementRef, HostBinding, Inject, Input, OnInit, TemplateRef, ViewChild } 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';\n\n@Component({\n    selector: 'ngx-gantt-baseline,gantt-baseline',\n    templateUrl: './baseline.component.html'\n})\nexport class NgxGanttBaselineComponent implements OnInit {\n    @Input() baselineItem: GanttBaselineItemInternal;\n\n    @Input() template: TemplateRef<any>;\n\n    public unsubscribe$ = new Subject<void>();\n\n    @HostBinding('class.gantt-baseline') ganttBaselineClass = true;\n\n    constructor(private elementRef: ElementRef<HTMLElement>, @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper) {}\n\n    ngOnInit() {\n        this.baselineItem.refs$.pipe(takeUntil(this.unsubscribe$)).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","<div #content *ngIf=\"baselineItem\" class=\"baseline-content\">\n  <ng-template\n    [ngTemplateOutlet]=\"template\"\n    [ngTemplateOutletContext]=\"{ item: baselineItem.origin, refs: baselineItem.refs }\"\n  ></ng-template>\n</div>\n","import { Component, HostBinding, Inject, Input, TemplateRef, Output, EventEmitter } from '@angular/core';\nimport { GanttGroupInternal, GanttItemInternal, GanttBarClickEvent, GanttLineClickEvent } from '../../class';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\n\n@Component({\n  selector: 'gantt-main',\n  templateUrl: './gantt-main.component.html'\n})\nexport class GanttMainComponent {\n  @Input() viewportItems: (GanttGroupInternal | GanttItemInternal)[];\n\n  @Input() flatItems: (GanttGroupInternal | GanttItemInternal)[];\n\n  @Input() groupHeaderTemplate: TemplateRef<any>;\n\n  @Input() itemTemplate: TemplateRef<any>;\n\n  @Input() barTemplate: TemplateRef<any>;\n\n  @Input() rangeTemplate: TemplateRef<any>;\n\n  @Input() baselineTemplate: TemplateRef<any>;\n\n  @Output() barClick = new EventEmitter<GanttBarClickEvent>();\n  @Output() barDbClick = new EventEmitter<GanttBarClickEvent>();\n  @Output() barContentMenu = new EventEmitter<GanttBarClickEvent>();\n  @Output() barMouseenter = new EventEmitter<GanttBarClickEvent>();\n  @Output() lineClick = new EventEmitter<GanttLineClickEvent>();\n\n  @HostBinding('class.gantt-main-container') ganttMainClass = true;\n\n  constructor(@Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper) {}\n\n  trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n    return item.id || index;\n  }\n}\n","<!--\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-17 17:08:39\n * @Description: \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  <ng-container *ngFor=\"let data of viewportItems; trackBy: trackBy\">\n    <div class=\"gantt-group\" [ngClass]=\"data.class\" *ngIf=\"data.items\">\n      <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: data }\"></ng-template>\n    </div>\n    <div\n      *ngIf=\"!data.items\"\n      class=\"gantt-item\"\n      [style.height.px]=\"ganttUpper.styles.lineHeight\"\n      [class.gantt-main-item-active]=\"ganttUpper.isSelected(data.id)\"\n    >\n      <ng-container *ngIf=\"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      </ng-container>\n\n      <ng-container *ngIf=\"(data.type | isGanttRangeItem) || (data.type | isGanttBarItem)\">\n        <ng-container *ngFor=\"let takeTimeItem of data.takeTime;\">\n          <gantt-range\n            *ngIf=\"takeTimeItem.type | isGanttRangeItem\"\n            [template]=\"rangeTemplate\"\n            [item]=\"takeTimeItem\"\n          ></gantt-range>\n\n          <gantt-bar\n            *ngIf=\"takeTimeItem.type | isGanttBarItem\"\n            [item]=\"takeTimeItem\"\n            [template]=\"barTemplate\"\n            (barClick)=\"barClick.emit($event)\"\n            (barDbClick)=\"barDbClick.emit($event)\"\n            (barContentMenu)=\"barContentMenu.emit($event)\"\n            (barMouseenter)=\"barMouseenter.emit($event)\"\n          ></gantt-bar>\n\n          <gantt-baseline\n            *ngIf=\"ganttUpper.baselineItemsMap[data.id]\"\n            [baselineItem]=\"ganttUpper.baselineItemsMap[data.id]\"\n            [template]=\"baselineTemplate\"\n          ></gantt-baseline>\n        </ng-container>\n      </ng-container>\n    </div>\n  </ng-container>\n</div>\n","import { Component, OnInit, HostBinding, Inject, NgZone, ElementRef } from '@angular/core';\nimport { GanttDatePoint } from '../../../class/date-point';\nimport { headerHeight, 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';\n\n@Component({\n    selector: 'gantt-calendar-header',\n    templateUrl: './calendar-header.component.html'\n})\nexport class GanttCalendarHeaderComponent implements OnInit {\n    get view() {\n        return this.ganttUpper.view;\n    }\n\n    private unsubscribe$ = new Subject();\n\n    headerHeight = headerHeight;\n\n    viewTypes = GanttViewType;\n\n    @HostBinding('class') className = `gantt-calendar gantt-calendar-header`;\n\n    constructor(\n        @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n        private ngZone: NgZone,\n        private elementRef: ElementRef<HTMLElement>\n    ) {}\n\n    ngOnInit() {\n        this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n            merge(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\n    setTodayPoint() {\n        const x = this.view.getTodayXPoint();\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 = `${headerHeight - todayHeight}px`;\n                rect.innerHTML = today.toString();\n            }\n        } else {\n            todayEle.style.display = 'none';\n        }\n    }\n\n    trackBy(point: GanttDatePoint, index: number) {\n        return point.text || index;\n    }\n}\n","<!--\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-05-28 13:31:53\n * @Description: \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]=\"headerHeight\">\n  <g>\n    <text\n      class=\"primary-text\"\n      [ngStyle]=\"point.style\"\n      [class.today]=\"point.additions?.isToday\"\n      [class.weekend]=\"point.additions?.isWeekend\"\n      *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\"\n      [attr.x]=\"point.x\"\n      [attr.y]=\"point.y\"\n    >\n      {{ point.text }}\n    </text>\n    <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n      <text\n        class=\"secondary-text\"\n        [ngStyle]=\"point.style\"\n        [class.today]=\"point.additions?.isToday\"\n        [class.weekend]=\"point.additions?.isWeekend\"\n        [attr.x]=\"point.x\"\n        [attr.y]=\"point.y\"\n      >\n        {{ point.text }}\n      </text>\n    </ng-container>\n\n    <g>\n      <line\n        *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n        [attr.x1]=\"(i + 1) * view.primaryWidth\"\n        [attr.x2]=\"(i + 1) * view.primaryWidth\"\n        [attr.y1]=\"0\"\n        [attr.y2]=\"headerHeight\"\n        class=\"primary-line\"\n      ></line>\n    </g>\n\n    <g>\n      <line [attr.x1]=\"0\" [attr.x2]=\"view.width\" [attr.y1]=\"headerHeight\" [attr.y2]=\"headerHeight\" class=\"header-line\"></line>\n    </g>\n  </g>\n</svg>\n","/*\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-07 09:56:21\n * @Description:\n */\nimport {\n  Component,\n  OnInit,\n  HostBinding,\n  OnChanges,\n  SimpleChanges,\n  OnDestroy,\n  NgZone,\n  Inject,\n  ElementRef,\n  ChangeDetectorRef\n} from '@angular/core';\nimport { GanttDatePoint } from '../../../class/date-point';\nimport { Subject, merge } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { isNumber } from '../../../utils/helpers';\n\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../../gantt-upper';\nimport { GanttViewType } from './../../../class/view-type';\nimport { headerHeight, todayBorderRadius } from '../../../gantt.styles';\n\nconst mainHeight = 5000;\n\n@Component({\n  selector: 'gantt-calendar-grid',\n  templateUrl: './calendar-grid.component.html'\n})\nexport class GanttCalendarGridComponent implements OnInit, OnDestroy {\n  get view() {\n    return this.ganttUpper.view;\n  }\n  private unsubscribe$ = new Subject<void>();\n\n  headerHeight = headerHeight;\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    @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n    private ngZone: NgZone,\n    private cdr: ChangeDetectorRef,\n    private elementRef: ElementRef<HTMLElement>\n  ) {}\n\n  setTodayPoint() {\n    const x = this.view.getTodayXPoint();\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\n    if (isNumber(x)) {\n      if (line) {\n        todayEle.style.display = '';\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  ngOnInit() {\n    this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n      merge(this.ganttUpper.viewChange, this.ganttUpper.view.start$)\n        .pipe(takeUntil(this.unsubscribe$))\n        .subscribe(() => {\n          this.setTodayPoint();\n          this.cdr.detectChanges();\n        });\n     \n    });\n  }\n\n  trackBy(point: GanttDatePoint, index: number) {\n    return point.text || index;\n  }\n\n  ngOnDestroy() {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<!--\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-07 14:01:14\n * @Description: \n-->\n<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n  <span class=\"today-line\" *ngIf=\"ganttUpper.showTodayLine\"> </span>\n</div>\n\n<svg class=\"gantt-calendar-grid-main\" [attr.width]=\"view.width\" [attr.height]=\"headerHeight - 1\">\n  <g>\n    <g *ngIf=\"view.showTimeline\">\n      <line\n        *ngFor=\"let point of view.secondaryDatePoints; let i = index; trackBy: trackBy\"\n        [attr.x1]=\"(i + 1) * view.cellWidth\"\n        [attr.x2]=\"(i + 1) * view.cellWidth\"\n        [attr.y1]=\"0\"\n        [attr.y2]=\"mainHeight\"\n        class=\"secondary-line\"\n      ></line>\n    </g>\n    <g>\n      <line\n        *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n        [attr.x1]=\"(i + 1) * view.primaryWidth\"\n        [attr.x2]=\"(i + 1) * view.primaryWidth\"\n        [attr.y1]=\"0\"\n        [attr.y2]=\"mainHeight\"\n        class=\"primary-line\"\n      ></line>\n    </g>\n  </g>\n</svg>\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 } from '@angular/core';\n\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","<!--\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-04 17:18:24\n * @Description: \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 { 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 print(name: string = 'download', 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        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        }).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 { Component, HostBinding, Input, TemplateRef, Inject, SimpleChanges, OnChanges } from '@angular/core';\nimport { ganttViews, GanttViewType } from '../../class';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from '../../gantt-upper';\nimport { keyBy } from '../../utils/helpers';\n\n@Component({\n    selector: 'ngx-gantt-toolbar,gantt-toolbar',\n    templateUrl: './toolbar.component.html'\n})\nexport class NgxGanttToolbarComponent {\n    @Input() template: TemplateRef<any>;\n\n    @HostBinding('class.gantt-toolbar') ganttItemClass = true;\n\n    ganttViewsMap = keyBy(ganttViews, 'value');\n\n    constructor(@Inject(GANTT_UPPER_TOKEN) protected ganttUpper: GanttUpper) {}\n\n    selectView(view: GanttViewType) {\n        this.ganttUpper.changeView(view);\n    }\n}\n","<div class=\"toolbar-container\">\n  <ng-container *ngIf=\"!template\">\n    <div class=\"toolbar-views\" *ngIf=\"this.ganttUpper.toolbarOptions?.viewTypes?.length\">\n      <ng-container *ngFor=\"let view of this.ganttUpper.toolbarOptions?.viewTypes\">\n        <div class=\"toolbar-view\" *ngIf=\"ganttViewsMap[view]\" [class.active]=\"view === this.ganttUpper.viewType\" (click)=\"selectView(view)\">\n          {{ ganttViewsMap[view].name }}\n        </div>\n      </ng-container>\n    </div>\n  </ng-container>\n  <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n</div>\n","import {\n    Component,\n    OnInit,\n    NgZone,\n    ElementRef,\n    Inject,\n    ContentChild,\n    TemplateRef,\n    Input,\n    Optional,\n    OnDestroy,\n    ViewChild,\n    HostListener\n} from '@angular/core';\nimport { GanttDomService, ScrollDirection } from './gantt-dom.service';\nimport { GanttDragContainer } from './gantt-drag-container';\nimport { take, takeUntil, startWith, debounceTime } from 'rxjs/operators';\nimport { from, Subject } from 'rxjs';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\nimport { GanttPrintService } from './gantt-print.service';\nimport { passiveListenerOptions } from './utils/passive-listeners';\nimport { GanttDragBackdropComponent } from './components/drag-backdrop/drag-backdrop.component';\nimport { GanttDate } from './utils/date';\n\n@Component({\n    selector: 'ngx-gantt-root',\n    templateUrl: './root.component.html',\n    providers: [GanttDomService, GanttDragContainer],\n    host: {\n        class: 'gantt'\n    }\n})\nexport class NgxGanttRootComponent implements OnInit, OnDestroy {\n    @Input() sideWidth: number;\n\n    @ContentChild('sideTemplate', { static: true }) sideTemplate: TemplateRef<any>;\n\n    @ContentChild('mainTemplate', { static: true }) mainTemplate: TemplateRef<any>;\n\n    /** The native `<gantt-drag-backdrop></gantt-drag-backdrop>` element. */\n    @ViewChild(GanttDragBackdropComponent, { static: true, read: ElementRef }) backdrop: ElementRef<HTMLElement>;\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        private elementRef: ElementRef<HTMLElement>,\n        private ngZone: NgZone,\n        private dom: GanttDomService,\n        public dragContainer: GanttDragContainer,\n        @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n        @Optional() private printService: GanttPrintService\n    ) {\n        this.ganttUpper.dragContainer = dragContainer;\n    }\n\n    ngOnInit() {\n        // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means\n        // the `onStable` will never emit any value.\n        const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));\n        // Normally this isn't in the zone, but it can cause performance regressions for apps\n        // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.\n        this.ngZone.runOutsideAngular(() => {\n            onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\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                this.ganttUpper.viewChange.pipe(startWith<null, null>(null), takeUntil(this.unsubscribe$)).subscribe(() => {\n                    this.scrollToToday();\n                });\n                this.computeScrollBarOffset();\n            });\n        });\n    }\n\n    computeScrollBarOffset() {\n        const ganttMainContainer = this.dom.mainContainer as HTMLElement;\n        const ganttVerticalScrollContainer = this.dom.verticalScrollContainer as HTMLElement;\n\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        this.verticalScrollbarWidth = verticalScrollbarWidth;\n        this.horizontalScrollbarHeight = horizontalScrollbarHeight;\n    }\n\n    ngOnDestroy(): void {\n        this.unsubscribe$.next();\n    }\n\n    private setupViewScroll() {\n        if (this.ganttUpper.disabledLoadOnScroll) {\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.view.addStartDate();\n                    if (dates) {\n                            event.target.scrollLeft += this.view.getDateRangeWidth(dates.start, dates.end);\n                        if (this.ganttUpper.loadOnScroll.observers) {\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.view.addEndDate();\n                    if (dates && this.ganttUpper.loadOnScroll.observers) {\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.getTodayXPoint();\n        this.dom.scrollMainContainer(x);\n    }\n\n    public scrollToDate(date: number | GanttDate) {\n        let x: number;\n        if (typeof date === 'number') {\n            x = this.view.getXPointByDate(new GanttDate(date));\n        } else {\n            x = this.view.getXPointByDate(date);\n        }\n\n        this.dom.scrollMainContainer(x);\n    }\n}\n","<!--\n * @Author: zdk\n * @Date: 2024-05-28 10:00:57\n * @LastEditors: zdk\n * @LastEditTime: 2024-06-17 15:40:21\n * @Description: \n-->\n<div class=\"gantt-side\" *ngIf=\"sideTemplate\" [style.width.px]=\"sideWidth\" [style.padding-bottom.px]=\"horizontalScrollbarHeight\">\n  <div class=\"gantt-side-container\" cdkScrollable>\n    <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n  </div>\n</div>\n<div class=\"gantt-container\" *ngIf=\"mainTemplate\">\n  <gantt-calendar-header [style.padding-right.px]=\"verticalScrollbarWidth\"></gantt-calendar-header>\n  <gantt-calendar-grid\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    <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n  </div>\n</div>\n<ng-content></ng-content>\n<gantt-toolbar *ngIf=\"ganttUpper.showToolbar || ganttUpper.toolbarTemplate\" [template]=\"ganttUpper.toolbarTemplate\"> </gantt-toolbar>\n","import {\n  Component,\n  OnInit,\n  ElementRef,\n  ChangeDetectionStrategy,\n  Input,\n  EventEmitter,\n  Output,\n  ChangeDetectorRef,\n  NgZone,\n  ContentChildren,\n  QueryList,\n  AfterViewInit,\n  ContentChild,\n  TemplateRef,\n  forwardRef,\n  Inject,\n  ViewChild,\n  OnChanges,\n  SimpleChanges,\n  AfterViewChecked\n} from '@angular/core';\nimport { takeUntil, take, finalize, skip } from 'rxjs/operators';\nimport { Observable, from } from 'rxjs';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\nimport {\n  GanttLinkDragEvent,\n  GanttLineClickEvent,\n  GanttItemInternal,\n  GanttItem,\n  GanttSelectedEvent,\n  GanttGroupInternal,\n  GanttVirtualScrolledIndexChangeEvent,\n  GanttTableDragStartedEvent,\n  GanttTableDragEndedEvent\n} from './class';\nimport { NgxGanttTableColumnComponent } from './table/gantt-column.component';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { GANTT_ABSTRACT_TOKEN } from './gantt-abstract';\nimport { GanttGlobalConfig, GANTT_GLOBAL_CONFIG } from './gantt.config';\nimport { NgxGanttRootComponent } from './root.component';\nimport { GanttDate } from './utils/date';\nimport { CdkVirtualScrollViewport, ViewportRuler } from '@angular/cdk/scrolling';\nimport { Dictionary, keyBy, recursiveItems, uniqBy } from './utils/helpers';\nimport { GanttCalendarGridComponent } from './components/calendar/grid/calendar-grid.component';\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: NgxGanttComponent\n    },\n    {\n      provide: GANTT_ABSTRACT_TOKEN,\n      useExisting: forwardRef(() => NgxGanttComponent)\n    }\n  ]\n})\nexport class NgxGanttComponent extends GanttUpper implements OnInit, OnChanges, AfterViewInit, AfterViewChecked {\n  @Input() maxLevel = 2;\n\n  @Input() async: boolean;\n\n  @Input() childrenResolve: (GanttItem) => Observable<GanttItem[]>;\n\n  @Input() override linkable: boolean;\n\n  @Input() set loading(loading: boolean) {\n    if (loading) {\n      if (this.loadingDelay > 0) {\n        this.loadingTimer = setTimeout(() => {\n          this._loading = loading;\n          this.cdr.markForCheck();\n        }, this.loadingDelay);\n      } else {\n        this._loading = loading;\n      }\n    } else {\n      clearTimeout(this.loadingTimer);\n      this._loading = loading;\n    }\n  }\n\n  @Input() virtualScrollEnabled = true;\n\n  @Input() loadingDelay = 0;\n\n  @Output() linkDragStarted = new EventEmitter<GanttLinkDragEvent>();\n\n  @Output() override linkDragEnded = new EventEmitter<GanttLinkDragEvent>();\n\n  @Output() lineClick = new EventEmitter<GanttLineClickEvent>();\n\n  @Output() selectedChange = new EventEmitter<GanttSelectedEvent>();\n\n  @Output() virtualScrolledIndexChange = new EventEmitter<GanttVirtualScrolledIndexChangeEvent>();\n\n  @ContentChild(NgxGanttTableComponent) override table: NgxGanttTableComponent;\n\n  @ContentChildren(NgxGanttTableColumnComponent, { descendants: true }) columns: QueryList<NgxGanttTableColumnComponent>;\n\n  // 此模版已挪到 table 组件下，为了兼容此处暂时保留\n  @ContentChild('tableEmpty', { static: true }) tableEmptyTemplate: TemplateRef<any>;\n\n  @ViewChild('ganttRoot') ganttRoot: NgxGanttRootComponent;\n\n  @ViewChild('ganttCalendarGrid') ganttCalendarGrid: GanttCalendarGridComponent;\n\n  @ContentChild('footer', { static: true })\n  footerTemplate: TemplateRef<any>;\n\n  @ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;\n\n  get loading() {\n    return this._loading;\n  }\n\n  public flatItems: (GanttGroupInternal | GanttItemInternal)[] = [];\n\n  public viewportItems: (GanttGroupInternal | GanttItemInternal)[] = [];\n\n  private _loading = false;\n\n  private loadingTimer;\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    elementRef: ElementRef<HTMLElement>,\n    cdr: ChangeDetectorRef,\n    ngZone: NgZone,\n    private viewportRuler: ViewportRuler,\n    @Inject(GANTT_GLOBAL_CONFIG) config: GanttGlobalConfig\n  ) {\n    super(elementRef, cdr, ngZone, config);\n    this.computeAllRefs = false;\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.buildFlatItems();\n    // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means\n    // the `onStable` will never emit any value.\n    const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));\n    // Normally this isn't in the zone, but it can cause performance regressions for apps\n    // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.\n    this.ngZone.runOutsideAngular(() => {\n      onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\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\n    if (!this.virtualScrollEnabled) {\n      this.viewportItems = this.flatItems.slice(this.rangeStart, this.rangeEnd);\n      this.computeTempDataRefs();\n    }\n  }\n\n  override ngOnChanges(changes: SimpleChanges) {\n    super.ngOnChanges(changes);\n    if (!this.firstChange) {\n      if (changes.viewType && changes.viewType.currentValue) {\n        this.viewportItems = this.flatItems.slice(this.rangeStart, this.rangeEnd);\n        this.computeTempDataRefs();\n        // this.view.start$.pipe(skip(1), takeUntil(this.unsubscribe$)).subscribe(() => {\n        //     this.computeTempDataRefs();\n        // });\n      }\n      if (changes.originItems || changes.originGroups) {\n        this.buildFlatItems();\n        this.viewportItems = this.flatItems.slice(this.rangeStart, this.rangeEnd);\n        this.computeTempDataRefs();\n        this.computeOverlap();\n      }\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this.virtualScrollEnabled) {\n      this.virtualScroll.renderedRangeStream.pipe(takeUntil(this.unsubscribe$)).subscribe((range) => {\n        const linksElement = this.elementRef.nativeElement.querySelector('.gantt-links-overlay') as HTMLDivElement;\n        linksElement.style.top = `${-(this.styles.lineHeight * 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.computeTempDataRefs();\n      });\n    }\n  }\n\n  ngAfterViewChecked() {\n    if (this.virtualScrollEnabled && this.viewportRuler && this.virtualScroll.getRenderedRange().end > 0) {\n      const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));\n      this.ngZone.runOutsideAngular(() => {\n        onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n          if (!this.ganttRoot.verticalScrollbarWidth) {\n            this.ganttRoot.computeScrollBarOffset();\n            this.cdr.markForCheck();\n          }\n        });\n      });\n    }\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 computeTempDataRefs() {\n    const tempItemData = [];\n    this.viewportItems.forEach((data: GanttGroupInternal | GanttItemInternal) => {\n      if (!data.hasOwnProperty('items')) {\n        const item = data as GanttItemInternal;\n\n        let takeTime = item.takeTime;\n\n        takeTime.forEach((takeTimeItem) => {\n          if (takeTimeItem.links) {\n            takeTimeItem.links.forEach((link) => {\n              if (this.flatItemsMap[link.link]) {\n                tempItemData.push(this.flatItemsMap[link.link]);\n              }\n            });\n          }\n          tempItemData.push(takeTimeItem);\n        });\n      }\n    });\n    this.computeItemsRefs(...uniqBy(tempItemData, 'id'));\n    this.flatItems = [...this.flatItems];\n    this.viewportItems = [...this.viewportItems];\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      if (this.async && this.childrenResolve && item.children.length === 0) {\n        item.loading = true;\n        this.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    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, selectedValue: _selectedValue });\n    } else {\n      const _selectedValue = this.getGanttItem(selectedIds[0])?.origin;\n      this.selectedChange.emit({ event, selectedValue: _selectedValue });\n    }\n  }\n\n  scrollToToday() {\n    this.ganttRoot.scrollToToday();\n  }\n\n  scrollToDate(date: number | 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.next(null);\n    this.cdr.detectChanges();\n  }\n\n  override expandGroup(group: GanttGroupInternal) {\n    group.setExpand(!group.expanded);\n    this.afterExpand();\n    this.expandChange.emit();\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  setTodayPoint() {\n    this.ganttCalendarGrid.setTodayPoint();\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 [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n    </div>\n  </div>\n  <gantt-loader *ngIf=\"loading\"></gantt-loader>\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.lineHeight\"\n    [minBufferPx]=\"styles.lineHeight * 10\"\n    [maxBufferPx]=\"styles.lineHeight * 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\">\n        <div class=\"gantt-table\">\n          <gantt-table-body\n            [flatItems]=\"flatItems\"\n            [viewportItems]=\"viewportItems\"\n            [columns]=\"columns\"\n            [groupTemplate]=\"groupTemplate\"\n            [emptyTemplate]=\"table.tableEmptyTemplate || 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        #ganttCalendarGrid\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          [flatItems]=\"flatItems\"\n          [viewportItems]=\"viewportItems\"\n          [groupHeaderTemplate]=\"groupHeaderTemplate\"\n          [itemTemplate]=\"itemTemplate\"\n          [barTemplate]=\"barTemplate\"\n          [rangeTemplate]=\"rangeTemplate\"\n          [baselineTemplate]=\"baselineTemplate\"\n          (barClick)=\"barClick.emit($event)\"\n          (barDbClick)=\"barDbClick.emit($event)\"\n          (barContentMenu)=\"barContentMenu.emit($event)\"\n          (lineClick)=\"lineClick.emit($event)\"\n          (barMouseenter)=\"barMouseenter.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  <div\n    class=\"gantt-scrollbar\"\n    [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n    [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n  >\n    <div\n      [style.width.px]=\"tableHeader.tableWidth\"\n      class=\"gantt-table-scrollbar\"\n      [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n    ></div>\n    <div class=\"gantt-main-scrollbar\">\n      <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n    </div>\n  </div>\n\n  <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n    <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n      <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n    </div>\n    <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n      <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n    </div>\n  </div>\n</ngx-gantt-root>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxGanttComponent } from './gantt.component';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { NgxGanttTableColumnComponent } from './table/gantt-column.component';\nimport { NgxGanttBarComponent } from './components/bar/bar.component';\nimport { GanttMainComponent } from './components/main/gantt-main.component';\nimport { GanttIconComponent } from './components/icon/icon.component';\nimport { GanttDragBackdropComponent } from './components/drag-backdrop/drag-backdrop.component';\nimport { GanttLinksComponent } from './components/links/links.component';\nimport { NgxGanttRootComponent } from './root.component';\nimport { NgxGanttRangeComponent } from './components/range/range.component';\nimport { IsGanttRangeItemPipe, IsGanttBarItemPipe, IsGanttCustomItemPipe } from './gantt.pipe';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { GANTT_GLOBAL_CONFIG, defaultConfig } from './gantt.config';\nimport { NgxGanttBaselineComponent } from './components/baseline/baseline.component';\nimport { NgxGanttToolbarComponent } from './components/toolbar/toolbar.component';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { GanttTableHeaderComponent } from './components/table/header/gantt-table-header.component';\nimport { GanttCalendarHeaderComponent } from './components/calendar/header/calendar-header.component';\nimport { GanttCalendarGridComponent } from './components/calendar/grid/calendar-grid.component';\nimport { GanttTableBodyComponent } from './components/table/body/gantt-table-body.component';\nimport { GanttLoaderComponent } from './components/loader/loader.component';\n\n@NgModule({\n    imports: [CommonModule, DragDropModule, ScrollingModule],\n    exports: [\n        NgxGanttComponent,\n        NgxGanttTableComponent,\n        NgxGanttTableColumnComponent,\n        NgxGanttRootComponent,\n        NgxGanttBarComponent,\n        NgxGanttRangeComponent,\n        NgxGanttBaselineComponent,\n        NgxGanttToolbarComponent,\n        GanttCalendarHeaderComponent,\n        GanttCalendarGridComponent,\n        GanttDragBackdropComponent\n    ],\n    declarations: [\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        IsGanttRangeItemPipe,\n        IsGanttBarItemPipe,\n        IsGanttCustomItemPipe\n    ],\n    providers: [\n        CdkVirtualScrollViewport,\n        {\n            provide: GANTT_GLOBAL_CONFIG,\n            useValue: defaultConfig\n        }\n    ]\n})\nexport class NgxGanttModule {}\n","/*\n * Public API Surface of gantt\n */\n\nexport * from './gantt.module';\nexport * from './gantt-upper';\nexport * from './root.component';\nexport * from './gantt.component';\nexport * from './table/gantt-table.component';\nexport * from './table/gantt-column.component';\nexport * from './components/bar/bar.component';\nexport * from './components/range/range.component';\nexport * from './components/baseline/baseline.component';\nexport * from './components/toolbar/toolbar.component';\nexport * from './components/loader/loader.component';\nexport * from './utils/date';\nexport * from './class';\nexport * from './views/view';\nexport { registerView } from './views/factory';\nexport * from './gantt-item-upper';\nexport * from './gantt.pipe';\nexport * from './gantt-print.service';\nexport * from './gantt.config';\nexport * from './components/calendar/header/calendar-header.component';\nexport * from './components/calendar/grid/calendar-grid.component';\nexport * from './components/drag-backdrop/drag-backdrop.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["viewOptions","takeUntil","i3.GanttIconComponent","i4.IsGanttRangeItemPipe","i1.GanttDragContainer","i2","auditTime","i1","i2.GanttDomService","i3.GanttDragContainer","startWith","i3","i2.GanttLinksComponent","i3.NgxGanttBarComponent","i4.NgxGanttRangeComponent","i5.NgxGanttBaselineComponent","i6.IsGanttRangeItemPipe","i6.IsGanttBarItemPipe","i6.IsGanttCustomItemPipe","i3.GanttPrintService","i4","i5","i6.GanttCalendarHeaderComponent","i7.GanttCalendarGridComponent","i8.GanttDragBackdropComponent","i9.NgxGanttToolbarComponent","i3.GanttTableHeaderComponent","i4.GanttTableBodyComponent","i5.GanttMainComponent","i8.GanttLoaderComponent","i9.GanttDragBackdropComponent","i10.NgxGanttRootComponent"],"mappings":"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"}