@worktile/gantt 12.1.3 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"worktile-gantt.js","sources":["../../../packages/gantt/src/class/date-point.ts","../../../packages/gantt/src/class/event.ts","../../../packages/gantt/src/utils/date.ts","../../../packages/gantt/src/class/view-type.ts","../../../packages/gantt/src/class/item.ts","../../../packages/gantt/src/class/group.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/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/components/icon/icons.ts","../../../packages/gantt/src/components/icon/icon.component.ts","../../../packages/gantt/src/gantt.pipe.ts","../../../packages/gantt/src/components/table/gantt-table.component.ts","../../../packages/gantt/src/components/table/gantt-table.component.html","../../../packages/gantt/src/gantt-dom.service.ts","../../../packages/gantt/src/gantt-drag-container.ts","../../../packages/gantt/src/gantt-print.service.ts","../../../packages/gantt/src/components/calendar/calendar.component.ts","../../../packages/gantt/src/components/calendar/calendar.component.html","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.ts","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.html","../../../packages/gantt/src/root.component.ts","../../../packages/gantt/src/root.component.html","../../../packages/gantt/src/components/links/links.component.ts","../../../packages/gantt/src/components/links/links.component.html","../../../packages/gantt/src/gantt-item-upper.ts","../../../packages/gantt/src/components/range/range.component.ts","../../../packages/gantt/src/components/range/range.component.html","../../../packages/gantt/src/components/bar/bar-drag.ts","../../../packages/gantt/src/components/bar/bar.component.ts","../../../packages/gantt/src/components/bar/bar.component.html","../../../packages/gantt/src/components/main/gantt-main.component.ts","../../../packages/gantt/src/components/main/gantt-main.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/worktile-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 ) {}\n}\n","import { QueryList } from '@angular/core';\nimport { NgxGanttTableColumnComponent } from '../table/gantt-column.component';\nimport { GanttItem } from './item';\n\nexport class GanttDragEvent<T = unknown> {\n item: 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}\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","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} 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 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","export enum GanttViewType {\n day = 'day',\n quarter = 'quarter',\n month = 'month',\n year = 'year',\n week = 'week'\n}\n","import { GanttDate } from '../utils/date';\nimport { BehaviorSubject } from 'rxjs';\nimport { GanttViewType } from './view-type';\n\ninterface 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 links?: string[];\n draggable?: 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}\n\nexport class GanttItemInternal {\n id: string;\n title: string;\n start: GanttDate;\n end: GanttDate;\n links: string[];\n color?: string;\n barStyle?: Partial<CSSStyleDeclaration>;\n draggable?: boolean;\n linkable?: boolean;\n origin: GanttItem;\n expandable?: boolean;\n expanded?: boolean;\n loading: boolean;\n children: GanttItemInternal[];\n type?: GanttItemType;\n progress?: number;\n viewType?: GanttViewType;\n\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, options?: { viewType: GanttViewType }) {\n this.origin = item;\n this.id = this.origin.id;\n this.links = this.origin.links || [];\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.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.viewType = options && options.viewType ? options.viewType : GanttViewType.month;\n this.children = (item.children || []).map((subItem) => {\n return new GanttItemInternal(subItem, { viewType: this.viewType });\n });\n this.type = this.origin.type || GanttItemType.bar;\n this.progress = this.origin.progress;\n // fill one month when start or end is null\n this.fillItemStartOrEnd(item);\n }\n\n fillItemStartOrEnd(item: GanttItem) {\n let addInterval: number;\n switch (this.viewType) {\n case GanttViewType.day:\n case GanttViewType.week:\n addInterval = 0;\n break;\n default:\n addInterval = 30;\n break;\n }\n if (item.start && !item.end) {\n this.end = new GanttDate(item.start).addDays(addInterval).endOfDay();\n }\n if (!item.start && item.end) {\n this.start = new GanttDate(item.end).addDays(-addInterval).startOfDay();\n }\n }\n\n updateRefs(refs: GanttItemRefs) {\n this.refs$.next(refs);\n }\n\n updateDate(start: GanttDate, end: GanttDate) {\n this.start = start.startOfDay();\n this.end = end.endOfDay();\n this.origin.start = this.start.getUnixTime();\n this.origin.end = this.end.getUnixTime();\n }\n\n addChildren(items: GanttItem[]) {\n this.origin.children = items;\n this.children = (items || []).map((subItem) => {\n return new GanttItemInternal(subItem, { viewType: this.viewType });\n });\n }\n\n setExpand(expanded: boolean) {\n this.expanded = expanded;\n this.origin.expanded = expanded;\n }\n\n addLink(linkId: string) {\n this.links = [...this.links, linkId];\n this.origin.links = this.links;\n }\n}\n","import { GanttItemInternal } from './item';\n\nexport interface GanttGroup<T = unknown> {\n id: string;\n title: string;\n expanded?: boolean;\n origin?: T;\n class?: string;\n}\n\nexport class GanttGroupInternal {\n id: string;\n title: string;\n origin: GanttGroup;\n items: GanttItemInternal[];\n mergedItems: GanttItemInternal[][];\n expanded?: boolean;\n refs?: {\n height?: number;\n } = {};\n class?: string;\n constructor(group: GanttGroup) {\n this.id = group.id;\n this.origin = group;\n this.title = group.title;\n this.expanded = group.expanded === undefined ? true : group.expanded;\n this.items = [];\n this.mergedItems = [[]];\n this.class = group.class || '';\n }\n\n setExpand(expanded: boolean) {\n this.expanded = expanded;\n this.origin.expanded = expanded;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface GanttDateFormat {\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}\n\nexport const defaultConfig = {\n dateFormat: {\n week: '第w周',\n month: 'M月',\n quarter: 'QQQ',\n year: 'yyyy年',\n yearMonth: 'yyyy年MM月',\n yearQuarter: 'yyyy年QQQ',\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';\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}\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 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\n ? this.endOf(end.date)\n : 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 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 protected 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 const start = this.startOf(this.start.add(this.options.addAmount * -1, this.options.addUnit));\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 const end = this.endOf(this.end.add(this.options.addAmount, this.options.addUnit));\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().startOfDay();\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) {\n const indexOfSecondaryDate = Math.floor(x / this.getCellWidth());\n const matchDate = this.secondaryDatePoints[indexOfSecondaryDate];\n const dayWidth = this.getDayOccupancyWidth(matchDate?.start);\n if (dayWidth === this.getCellWidth()) {\n return matchDate?.start;\n } else {\n const day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;\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, end.addSeconds(1));\n }\n}\n","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate, differenceInCalendarQuarters, eachMonthOfInterval } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\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};\n\nexport class GanttViewMonth extends GanttView {\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","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachYearOfInterval, differenceInCalendarQuarters } from 'date-fns';\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};\n\nexport class GanttViewQuarter extends GanttView {\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","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate, eachWeekOfInterval, eachDayOfInterval } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\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};\n\nexport class GanttViewDay extends GanttView {\n showWeekBackdrop = true;\n\n showTimeline = false;\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 { 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};\n\nexport class GanttViewWeek extends GanttView {\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","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachYearOfInterval, differenceInCalendarYears } from 'date-fns';\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};\n\nexport class GanttViewYear extends GanttView {\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","import { GanttViewOptions, GanttViewDate } from './view';\nimport { GanttViewMonth } from './month';\nimport { GanttDate } from '../utils/date';\nimport { GanttViewType } from '../class/view-type';\nimport { GanttViewQuarter } from './quarter';\nimport { GanttViewDay } from './day';\nimport { GanttViewWeek } from './week';\nimport { GanttViewYear } from './year';\n\nexport function createViewFactory(type: GanttViewType, start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n switch (type) {\n case GanttViewType.month:\n return new GanttViewMonth(start, end, options);\n case GanttViewType.week:\n return new GanttViewWeek(start, end, options);\n case GanttViewType.quarter:\n return new GanttViewQuarter(start, end, options);\n case GanttViewType.day:\n return new GanttViewDay(start, end, options);\n case GanttViewType.year:\n return new GanttViewYear(start, end, options);\n default:\n throw new Error('gantt view type invalid');\n }\n}\n","export const defaultStyles = {\n lineHeight: 44,\n barHeight: 22\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 = '#348fe4';\n\nexport const rangeHeight = 17;\n\nexport const todayHeight = 24;\n\nexport const todayWidth = 35;\n\nexport const todayBorderRadius = 4;\n\n\n","import { GanttItem, GanttItemInternal } from '../class/item';\n\nexport interface Dictionary<T = unknown> {\n [key: string]: T;\n}\n\nexport function isNumber(value: any) {\n return typeof value === 'number';\n}\n\nexport function isString(value: any) {\n return typeof value === 'string';\n}\n\nexport function isUndefined(value: any) {\n return value === undefined;\n}\n\nexport function hexToRgb(color: string, opacity = 1) {\n if (/^#/g.test(color)) {\n return `rgba(${parseInt(color.slice(1, 3), 16)},${parseInt(color.slice(3, 5), 16)},${parseInt(color.slice(5, 7), 16)},${opacity})`;\n } else {\n return color;\n }\n}\n\nexport function uniqBy<T = unknown>(array: T[], key: keyof T) {\n const valuesMap: Dictionary<T> = {};\n const result = [];\n (array || []).forEach((value) => {\n const _key = value[key as string];\n if (!valuesMap[_key]) {\n valuesMap[_key] = value;\n result.push(value);\n }\n });\n return result;\n}\n\nexport function flatten<T = unknown>(array: T[]) {\n return array.reduce((pre, cur) => {\n return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);\n }, []);\n}\n\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","import {\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 Optional\n} from '@angular/core';\nimport { 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} 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 } from './utils/helpers';\nimport { GanttDragContainer } from './gantt-drag-container';\nimport { GANTT_GLOBAL_CONFIG, GanttGlobalConfig, defaultConfig } from './gantt.config';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Directive()\nexport abstract class GanttUpper {\n @Input('items') originItems: GanttItem[] = [];\n\n @Input('groups') originGroups: GanttGroup[] = [];\n\n @Input() viewType: GanttViewType = GanttViewType.month;\n\n @Input() start: number;\n\n @Input() end: number;\n\n @Input() showTodayLine = true;\n\n @Input() draggable: boolean;\n\n @Input() styles: GanttStyles;\n\n @Input() viewOptions: GanttViewOptions = {};\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() barClick = new EventEmitter<GanttBarClickEvent>();\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('group', { static: true }) groupTemplate: TemplateRef<any>;\n\n @ContentChild('groupHeader', { static: true }) groupHeaderTemplate: TemplateRef<any>;\n\n public linkable: boolean;\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 viewChange = new EventEmitter<GanttView>();\n\n public expandChange = new EventEmitter<void>();\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();\n\n public selectionModel: SelectionModel<string>;\n\n private groupsMap: { [key: string]: GanttGroupInternal };\n\n private _selectable = false;\n\n private _multiple = false;\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) protected 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\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, { viewType: this.viewType });\n group.items.push(item);\n }\n });\n } else {\n this.originItems.forEach((origin) => {\n const item = new GanttItemInternal(origin, { viewType: this.viewType });\n this.items.push(item);\n });\n }\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 if (item.start && !this.start) {\n start = start ? Math.min(start, item.start) : item.start;\n }\n if (item.end && !this.end) {\n end = end ? Math.max(end, item.end) : item.end;\n }\n });\n }\n return {\n start: {\n date: new GanttDate(start),\n isCustom: this.start ? true : false\n },\n end: {\n date: new GanttDate(end),\n isCustom: this.end ? true : false\n }\n };\n }\n\n computeRefs() {\n this.groups.forEach((group) => {\n const groupItems = recursiveItems(group.items);\n this.computeItemsRefs(...groupItems);\n });\n const items = recursiveItems(this.items);\n this.computeItemsRefs(...items);\n }\n\n private expandGroups(expanded: boolean) {\n this.groups.forEach((group) => {\n group.setExpand(expanded);\n });\n this.expandChange.next();\n this.cdr.detectChanges();\n }\n\n private initSelectionModel() {\n return new SelectionModel(this.multiple, []);\n }\n\n onInit() {\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.initSelectionModel();\n this.firstChange = false;\n\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.element.style.opacity = '1';\n\n this.dragContainer.dragStarted.subscribe((event) => {\n this.dragStarted.emit(event);\n });\n\n this.dragContainer.dragMoved.subscribe((event) => {\n this.dragMoved.emit(event);\n });\n this.dragContainer.dragEnded.subscribe((event) => {\n this.dragEnded.emit(event);\n this.computeRefs();\n this.detectChanges();\n });\n });\n\n this.view.start$.pipe(skip(1), takeUntil(this.unsubscribe$)).subscribe(() => {\n this.computeRefs();\n });\n }\n\n onChanges(changes: SimpleChanges) {\n if (!this.firstChange) {\n if (changes.viewType && changes.viewType.currentValue) {\n this.createView();\n this.setupGroups();\n this.setupItems();\n this.computeRefs();\n this.viewChange.emit(this.view);\n }\n if (changes.originItems || changes.originGroups) {\n this.setupExpandedState();\n this.setupGroups();\n this.setupItems();\n this.computeRefs();\n }\n }\n }\n\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n computeItemsRefs(...items: GanttItemInternal[]) {\n items.forEach((item) => {\n item.updateRefs({\n width: item.start && item.end ? this.view.getDateRangeWidth(item.start.startOfDay(), item.end.endOfDay()) : 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 expandGroup(group: GanttGroupInternal) {\n group.setExpand(!group.expanded);\n this.expandChange.emit();\n this.cdr.detectChanges();\n }\n\n // public functions\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\nexport const GANTT_UPPER_TOKEN = new InjectionToken<GanttUpper>('GANTT_UPPER_TOKEN');\n","import { Component, OnInit, ContentChild, TemplateRef, Input, EventEmitter, Inject, Output } 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})\nexport class NgxGanttTableColumnComponent implements OnInit {\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 @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) {}\n\n ngOnInit() {}\n}\n","import { Component, ContentChild, EventEmitter, OnInit, Output, TemplateRef } from '@angular/core';\nimport { GanttTableEvent } from '../class';\n\n@Component({\n selector: 'ngx-gantt-table',\n template: ''\n})\nexport class NgxGanttTableComponent implements OnInit {\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 constructor() {}\n\n ngOnInit() {}\n}\n","import { InjectionToken } 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 expandGroup(group: GanttGroupInternal): void;\n expandChildren(item: GanttItemInternal): void;\n}\n\nexport const GANTT_ABSTRACT_TOKEN = new InjectionToken<GanttAbstractComponent>('gantt-abstract-token');\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>`;\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};\n","import { Component, OnInit, Input, AfterViewInit, ElementRef, HostBinding } from '@angular/core';\nimport { icons } from './icons';\n@Component({\n selector: 'gantt-icon',\n template: ''\n})\nexport class GanttIconComponent implements OnInit, AfterViewInit {\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 ngOnInit(): void {}\n\n ngAfterViewInit() {}\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 {\n Component,\n HostBinding,\n TemplateRef,\n QueryList,\n Input,\n OnInit,\n ViewChild,\n ElementRef,\n OnChanges,\n SimpleChanges,\n Inject,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { GanttItemInternal, GanttGroupInternal, GanttSelectedEvent } from '../../class';\nimport { NgxGanttTableColumnComponent } from '../../table/gantt-column.component';\n// import { defaultColumnWidth, minColumnWidth } from '../../gantt.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 { GanttUpper, GANTT_UPPER_TOKEN } from '../../gantt-upper';\n\nexport const defaultColumnWidth = 100;\nexport const minColumnWidth = 80;\n\ninterface DragFixedConfig {\n target: HTMLElement;\n originWidth: number;\n movedWidth: number;\n minWidth: number;\n}\n@Component({\n selector: 'gantt-table',\n templateUrl: './gantt-table.component.html'\n})\nexport class GanttTableComponent implements OnInit, OnChanges {\n public columnList: QueryList<NgxGanttTableColumnComponent>;\n\n public dragStartLeft: number;\n\n @Input() groups: GanttGroupInternal[];\n\n @Input() items: GanttItemInternal[];\n\n @Input()\n set columns(columns: QueryList<NgxGanttTableColumnComponent>) {\n columns.forEach((column) => {\n if (!column.columnWidth) {\n column.columnWidth = coerceCssPixelValue(defaultColumnWidth);\n }\n });\n this.columnList = columns;\n }\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 @Output() itemClick = new EventEmitter<GanttSelectedEvent>();\n\n @ViewChild('dragLine', { static: true }) draglineElementRef: ElementRef<HTMLElement>;\n\n @HostBinding('class.gantt-table') ganttTableClass = true;\n\n @HostBinding('class.gantt-table-empty') ganttTableEmptyClass = false;\n\n constructor(\n @Inject(GANTT_ABSTRACT_TOKEN) public gantt: GanttAbstractComponent,\n @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.groups.currentValue?.length && !changes.items.currentValue?.length) {\n this.ganttTableEmptyClass = true;\n } else {\n this.ganttTableEmptyClass = false;\n }\n }\n\n private dragFixed(config: DragFixedConfig) {\n if (config.movedWidth < config.minWidth) {\n config.target.style.transform = `translate3d(${config.minWidth - config.originWidth}px, 0, 0)`;\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 dragStarted(event: CdkDragStart) {\n const target = event.source.element.nativeElement;\n this.dragStartLeft = target.getBoundingClientRect().left;\n }\n\n dragMoved(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.columnList.length;\n }\n\n this.dragFixed({\n target,\n originWidth,\n movedWidth,\n minWidth\n });\n\n this.showAuxiliaryLine(event);\n }\n\n columnDragEnded(event: CdkDragEnd, column: NgxGanttTableColumnComponent) {\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.columnList });\n }\n\n this.hideAuxiliaryLine();\n event.source.reset();\n }\n\n tableDragEnded(event: CdkDragEnd) {\n const target = event.source.element.nativeElement;\n const left = target.getBoundingClientRect().left;\n const tableWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n const dragWidth = left - this.dragStartLeft;\n this.columnList.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 });\n\n if (this.gantt.table) {\n this.gantt.table.columnChanges.emit({ columns: this.columnList });\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.draglineElementRef.nativeElement.style.left = `${distance.x}px`;\n this.draglineElementRef.nativeElement.style.display = 'block';\n }\n\n private hideAuxiliaryLine() {\n this.draglineElementRef.nativeElement.style.display = 'none';\n }\n\n trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n return item.id || index;\n }\n}\n","<div class=\"gantt-table-header gantt-table-row\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; 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=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event, column)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"columnDragEnded($event, column)\"\n ></div>\n </div>\n</div>\n<div class=\"gantt-table-body\">\n <ng-container *ngIf=\"!groups.length && !items.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=\"groups && groups.length > 0; else itemsTemplate\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"group.class\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"group.expanded\" (click)=\"expandGroup(group)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"group.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ group.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <ng-container *ngIf=\"group.expanded\">\n <ng-template\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ group: group, items: group.items, level: 0 }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"tableDragEnded($event)\"\n></div>\n\n<div #dragLine class=\"gantt-table-drag-auxiliary-line\"></div>\n\n<ng-template #itemsTemplate>\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items, level: 0 }\"></ng-template>\n</ng-template>\n\n<ng-template #ganttItems let-group=\"group\" let-items=\"items\" let-level=\"level\">\n <ng-container *ngFor=\"let item of items; trackBy: trackBy\">\n <div\n (click)=\"itemClick.emit({ event: $event, selectedValue: this.item.origin })\"\n class=\"gantt-table-item gantt-table-row\"\n [class.gantt-table-item-first-level-group]=\"level === 0 && (item.type | isGanttRangeItem)\"\n [class.gantt-table-item-with-group]=\"group\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let first = first\" [style.width]=\"column.columnWidth\">\n <div *ngIf=\"first\" class=\"gantt-expand-icon\" [style.marginLeft.px]=\"level * 20\">\n <ng-container *ngIf=\"level < gantt.maxLevel - 1 && item.expandable\">\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 ></gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\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-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n","import { Injectable, ElementRef, OnDestroy } from '@angular/core';\nimport { fromEvent, Subject, merge } from 'rxjs';\nimport { pairwise, map, auditTime, takeUntil, take, startWith } from 'rxjs/operators';\nimport { isNumber } from './utils/helpers';\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 calendarOverlay: Element;\n\n public linksOverlay: Element;\n\n private unsubscribe$ = new Subject<void>();\n\n constructor() {}\n\n private monitorScrollChange() {\n merge(fromEvent(this.mainContainer, 'scroll'), fromEvent(this.sideContainer, 'scroll'))\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((event) => {\n this.syncScroll(event);\n });\n\n fromEvent(this.mainContainer, 'scroll')\n .pipe(startWith(), takeUntil(this.unsubscribe$))\n .subscribe((event) => {\n // if (this.mainContainer.scrollLeft > 0) {\n // this.side.classList.add('gantt-side-has-shadow');\n // } else {\n // this.side.classList.remove('gantt-side-has-shadow');\n // }\n });\n }\n\n private syncScroll(event: Event) {\n const target = event.currentTarget as HTMLElement;\n this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;\n\n this.sideContainer.scrollTop = target.scrollTop;\n this.mainContainer.scrollTop = target.scrollTop;\n }\n\n private disableBrowserWheelEvent() {\n const container = this.mainContainer as HTMLElement;\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 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.calendarOverlay = this.root.getElementsByClassName('gantt-calendar-overlay')[0];\n this.monitorScrollChange();\n this.disableBrowserWheelEvent();\n }\n\n getViewerScroll() {\n return fromEvent<Event>(this.mainContainer, 'scroll').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 }\n if (current - previous > 0) {\n if (this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft < scrollThreshold) {\n event.direction = ScrollDirection.RIGHT;\n }\n }\n return event;\n })\n );\n }\n\n getResize() {\n return 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.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;\n }\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { Injectable, EventEmitter } from '@angular/core';\nimport { GanttDragEvent, GanttLinkDragEvent } from './class/event';\nimport { GanttItemInternal } from './class/item';\n\nexport type LinkDragFrom = 'source' | 'target';\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 linkDragStarted = new EventEmitter<GanttLinkDragEvent>();\n\n linkDragEntered = new EventEmitter<GanttLinkDragEvent>();\n\n linkDragEnded = new EventEmitter<GanttLinkDragEvent>();\n\n linkDraggingId: string;\n\n private linkDragSource: GanttItemInternal;\n\n private linkDragTarget: GanttItemInternal;\n\n private linkDragFrom: LinkDragFrom;\n\n constructor() {}\n\n emitLinkDragStarted(from: LinkDragFrom, item: GanttItemInternal) {\n this.linkDraggingId = item.id;\n this.linkDragFrom = from;\n this.linkDragSource = this.linkDragFrom === 'source' ? item : null;\n this.linkDragTarget = this.linkDragFrom === 'target' ? item : null;\n this.linkDragStarted.emit({\n source: this.linkDragSource && this.linkDragSource.origin,\n target: this.linkDragTarget && this.linkDragTarget.origin\n });\n }\n\n emitLinkDragEntered(item: GanttItemInternal) {\n if (this.linkDragFrom === 'source') {\n this.linkDragTarget = item;\n } else {\n this.linkDragSource = item;\n }\n this.linkDragEntered.emit({\n source: this.linkDragSource.origin,\n target: this.linkDragTarget.origin\n });\n }\n\n emitLinkDragLeaved() {\n if (this.linkDragFrom === 'source') {\n this.linkDragTarget = null;\n } else {\n this.linkDragSource = null;\n }\n }\n\n emitLinkDragEnded() {\n this.linkDraggingId = null;\n if (this.linkDragSource && this.linkDragTarget) {\n this.linkDragSource.addLink(this.linkDragTarget.id);\n\n this.linkDragEnded.emit({\n source: this.linkDragSource.origin,\n target: this.linkDragTarget.origin\n });\n }\n this.linkDragSource = null;\n this.linkDragTarget = null;\n }\n}\n","import { Injectable, ElementRef } from '@angular/core';\nimport html2canvas from 'html2canvas';\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 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 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-overlay-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 {\n Component,\n OnInit,\n HostBinding,\n OnChanges,\n SimpleChanges,\n OnDestroy,\n NgZone,\n Inject,\n ElementRef,\n AfterViewInit\n} from '@angular/core';\nimport { GanttDatePoint } from '../../class/date-point';\nimport { Subject, merge } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { headerHeight, todayHeight, todayWidth, todayBorderRadius } from '../../gantt.styles';\nimport { isNumber } from '../../utils/helpers';\nimport { GanttDate } from '../../utils/date';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttViewType } from './../../class/view-type';\n\nconst mainHeight = 5000;\n\n@Component({\n selector: 'gantt-calendar-overlay',\n templateUrl: './calendar.component.html'\n})\nexport class GanttCalendarComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n get view() {\n return this.ganttUpper.view;\n }\n\n private unsubscribe$ = new Subject();\n\n headerHeight = headerHeight;\n\n mainHeight = mainHeight;\n\n todayHeight = todayHeight;\n\n todayWidth = todayWidth;\n\n todayBorderRadius = todayBorderRadius;\n\n viewTypes = GanttViewType;\n\n @HostBinding('class.gantt-calendar-overlay') className = true;\n\n constructor(\n @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n private ngZone: NgZone,\n private elementRef: ElementRef<HTMLElement>\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 const line = this.elementRef.nativeElement.getElementsByClassName('today-line')[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 if (line) {\n line.style.left = `${x}px`;\n line.style.top = `${headerHeight}px`;\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 });\n });\n }\n\n ngAfterViewInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {}\n\n trackBy(index: number, point: GanttDatePoint) {\n return point.text || index;\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n <span class=\"today-rect\" [hidden]=\"ganttUpper.viewType !== viewTypes.day\"> </span>\n <span class=\"today-line\" *ngIf=\"ganttUpper.showTodayLine\"> </span>\n</div>\n\n<svg class=\"gantt-calendar-overlay-main\" [attr.width]=\"view.width\" [attr.height]=\"headerHeight\">\n <g>\n <text class=\"primary-text\" *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text class=\"secondary-text\" [class.secondary-text-weekend]=\"point.additions?.isWeekend\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\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]=\"mainHeight\"\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 <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]=\"headerHeight\"\n [attr.y2]=\"mainHeight\"\n class=\"secondary-line\"\n ></line>\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, OnInit, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'gantt-drag-backdrop',\n templateUrl: `./drag-backdrop.component.html`\n})\nexport class GanttDragBackdropComponent implements OnInit {\n @HostBinding('class.gantt-drag-backdrop') backdropClass = true;\n\n constructor() {}\n\n ngOnInit() {}\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 {\n Component,\n OnInit,\n HostBinding,\n NgZone,\n ElementRef,\n Inject,\n ContentChild,\n TemplateRef,\n Input,\n Optional,\n AfterViewInit\n} from '@angular/core';\nimport { GanttDomService, ScrollDirection } from './gantt-dom.service';\nimport { GanttDragContainer } from './gantt-drag-container';\nimport { take, takeUntil, startWith } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\nimport { GanttPrintService } from './gantt-print.service';\n\n@Component({\n selector: 'ngx-gantt-root',\n templateUrl: './root.component.html',\n providers: [GanttDomService, GanttDragContainer]\n})\nexport class NgxGanttRootComponent implements OnInit {\n @Input() sideWidth: number;\n\n @HostBinding('class.gantt') ganttClass = true;\n\n @ContentChild('sideTemplate', { static: true }) sideTemplate: TemplateRef<any>;\n\n @ContentChild('mainTemplate', { static: true }) mainTemplate: TemplateRef<any>;\n\n private unsubscribe$ = new Subject();\n\n private get view() {\n return this.ganttUpper.view;\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) private ganttUpper: GanttUpper,\n @Optional() private printService: GanttPrintService\n ) {\n this.ganttUpper.dragContainer = dragContainer;\n }\n\n ngOnInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.dom.initialize(this.elementRef);\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)).subscribe(() => {\n this.scrollToToday();\n });\n });\n }\n\n private setupViewScroll() {\n if (this.ganttUpper.disabledLoadOnScroll) {\n return;\n }\n this.dom\n .getViewerScroll()\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 this.ngZone.run(() => {\n this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() });\n });\n }\n }\n if (event.direction === ScrollDirection.RIGHT) {\n const dates = this.view.addEndDate();\n if (dates) {\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 private scrollToToday() {\n const x = this.view.getTodayXPoint();\n this.dom.scrollMainContainer(x);\n }\n}\n","<div class=\"gantt-side\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\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} from '@angular/core';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil, skip } from 'rxjs/operators';\nimport { GanttGroupInternal } from '../../class/group';\nimport { GanttItemInternal, GanttItem } from './../../class/item';\nimport { GanttLineClickEvent } from '../../class/event';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { recursiveItems } from '../../utils/helpers';\nimport { GanttDate } from '../../utils/date';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\n\nenum LinkColors {\n default = '#cacaca',\n blocked = '#FF7575',\n active = '#348FE4'\n}\n\ninterface 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: string[];\n}\n\ninterface LinkInternal {\n path: string;\n source: GanttItem;\n target: GanttItem;\n color: LinkColors;\n}\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 @Output() lineClick = new EventEmitter<GanttLineClickEvent>();\n\n public links: LinkInternal[] = [];\n\n private linkItems: GanttLinkItem[] = [];\n\n private bezierWeight = -0.5;\n\n private firstChange = true;\n\n private unsubscribe$ = new Subject();\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 ) {}\n\n ngOnInit() {\n this.buildLinks();\n this.firstChange = false;\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 )\n .pipe(takeUntil(this.unsubscribe$), skip(1))\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\n private generatePath(source: GanttLinkItem, target: GanttLinkItem) {\n if (source.before && source.after && target.before && target.after) {\n const x1 = source.after.x;\n const y1 = source.after.y;\n\n const x4 = target.before.x;\n const y4 = target.before.y;\n\n const dx = Math.abs(x4 - x1) * this.bezierWeight;\n const x2 = x1 - dx;\n const 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 (y4 > y1) {\n if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {\n return `M ${x1} ${y1}\n C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 + controlX} ${x1} ${y1 + controlY}\n L ${x1} ${y1 + controlY} ${centerX} ${centerY}\n\n M ${x4} ${y4}\n C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 - controlX} ${x4} ${y4 - controlY}\n L ${x4} ${y4 - controlY} ${centerX} ${centerY}`;\n } else {\n controlX = this.ganttUpper.styles.lineHeight;\n return `M ${x1} ${y1}\n C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 + controlX} ${centerX} ${centerY}\n\n\n M ${x4} ${y4}\n C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 - controlX} ${centerX} ${centerY}`;\n }\n } else {\n if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {\n return `M ${x1} ${y1}\n C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 - controlX} ${x1} ${y1 - controlY}\n L ${x1} ${y1 - controlY} ${centerX} ${centerY}\n\n M ${x4} ${y4}\n C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 + controlX} ${x4} ${y4 + controlY}\n L ${x4} ${y4 + controlY} ${centerX} ${centerY}\n `;\n } else {\n controlX = this.ganttUpper.styles.lineHeight;\n return `M ${x1} ${y1}\n C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 - controlX} ${centerX} ${centerY}\n\n M ${x4} ${y4}\n C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 + controlX} ${centerX} ${centerY}`;\n }\n }\n }\n\n return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;\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((linkId) => {\n const target = this.linkItems.find((item) => item.id === linkId);\n if (target && (target.origin.start || target.origin.end)) {\n this.links.push({\n path: this.generatePath(source, target),\n source: source.origin,\n target: target.origin,\n color: source.end.getTime() > target.start.getTime() ? LinkColors.blocked : LinkColors.default\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) {\n if (link.color === LinkColors.default) {\n link.color = LinkColors.active;\n }\n }\n\n mouseLeavePath(link: LinkInternal) {\n if (link.color === LinkColors.active) {\n link.color = LinkColors.default;\n }\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 [attr.d]=\"link.path\" fill=\"transparent\" stroke-width=\"2\" [attr.stroke]=\"link.color\" pointer-events=\"none\"></path>\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n (mouseenter)=\"mouseEnterPath(link)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n [attr.d]=\"link.path\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n","import { Input, ElementRef, Inject, TemplateRef, Directive } 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 {\n @Input() template: TemplateRef<any>;\n\n @Input() item: GanttItemInternal;\n\n public firstChange = true;\n\n public unsubscribe$ = new Subject();\n\n constructor(protected elementRef: ElementRef<HTMLElement>, @Inject(GANTT_UPPER_TOKEN) protected ganttUpper: GanttUpper) {}\n\n onInit() {\n this.firstChange = false;\n this.item.refs$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n this.setPositions();\n });\n }\n\n onChanges(): void {\n if (!this.firstChange) {\n this.setPositions();\n }\n }\n\n private setPositions() {\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 } else {\n }\n }\n\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { Component, OnInit, HostBinding, ElementRef, OnChanges, OnDestroy, 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 implements OnInit, OnChanges, OnDestroy {\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 ngOnInit() {\n super.onInit();\n }\n\n ngOnChanges(): void {\n super.onChanges();\n }\n\n ngOnDestroy() {\n super.onDestroy();\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 { Injectable, ElementRef, OnDestroy, NgZone } from '@angular/core';\nimport { DragRef, DragDrop } from '@angular/cdk/drag-drop';\nimport { GanttDomService } from '../../gantt-dom.service';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { GanttItemInternal } from '../../class/item';\nimport { GanttDate, differenceInCalendarDays } from '../../utils/date';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { GanttUpper } from '../../gantt-upper';\n\nconst dragMinWidth = 10;\nconst activeClass = 'gantt-bar-active';\nconst linkDropClass = 'gantt-bar-link-drop';\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 linkDraggingLine: SVGElement;\n\n private barDragRef: DragRef;\n\n private dragRefs: DragRef[] = [];\n\n private destroy$ = new Subject();\n\n constructor(private dragDrop: DragDrop, private dom: GanttDomService, private dragContainer: GanttDragContainer) {}\n\n private createMouseEvents() {\n fromEvent(this.barElement, 'mouseenter')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.dragContainer.linkDraggingId && this.dragContainer.linkDraggingId !== this.item.id) {\n if (this.item.linkable) {\n this.barElement.classList.add(linkDropClass);\n this.dragContainer.emitLinkDragEntered(this.item);\n }\n } else {\n this.barElement.classList.add(activeClass);\n }\n });\n\n fromEvent(this.barElement, 'mouseleave')\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(linkDropClass);\n });\n }\n\n private createBarDrag() {\n const dragRef = this.dragDrop.createDrag(this.barElement);\n dragRef.lockAxis = 'x';\n dragRef.started.subscribe(() => {\n this.setDraggingStyles();\n this.dragContainer.dragStarted.emit({ item: this.item.origin });\n });\n dragRef.moved.subscribe((event) => {\n const x = this.item.refs.x + event.distance.x;\n const days = differenceInCalendarDays(this.item.end.value, this.item.start.value);\n const start = this.ganttUpper.view.getDateByXPoint(x);\n const end = start.addDays(days);\n this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(x), end);\n this.item.updateDate(start, end);\n this.dragContainer.dragMoved.emit({ item: this.item.origin });\n });\n dragRef.ended.subscribe((event) => {\n const days = differenceInCalendarDays(this.item.end.value, this.item.start.value);\n const start = this.ganttUpper.view.getDateByXPoint(this.item.refs.x + event.distance.x);\n const end = start.addDays(days);\n this.item.updateDate(start, end);\n this.clearDraggingStyles();\n this.closeDragBackdrop();\n event.source.reset();\n this.dragContainer.dragEnded.emit({ item: this.item.origin });\n });\n this.barDragRef = dragRef;\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.dragDrop.createDrag(handle);\n dragRef.lockAxis = 'x';\n dragRef.withBoundaryElement(this.dom.root as HTMLElement);\n\n dragRef.started.subscribe(() => {\n this.setDraggingStyles();\n this.dragContainer.dragStarted.emit({ item: this.item.origin });\n });\n\n dragRef.moved.subscribe((event) => {\n if (isBefore) {\n const x = this.item.refs.x + event.distance.x;\n const width = this.item.refs.width + event.distance.x * -1;\n if (width > dragMinWidth) {\n this.barElement.style.width = width + 'px';\n this.barElement.style.left = x + 'px';\n this.openDragBackdrop(\n this.barElement,\n this.ganttUpper.view.getDateByXPoint(x),\n this.ganttUpper.view.getDateByXPoint(x + width)\n );\n this.item.updateDate(this.ganttUpper.view.getDateByXPoint(x), this.item.end);\n }\n } else {\n const width = this.item.refs.width + event.distance.x;\n if (width > dragMinWidth) {\n this.barElement.style.width = width + 'px';\n this.openDragBackdrop(\n this.barElement,\n this.ganttUpper.view.getDateByXPoint(this.item.refs.x),\n this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width)\n );\n }\n this.item.updateDate(this.item.start, this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width));\n }\n this.dragContainer.dragMoved.emit({ item: this.item.origin });\n event.source.reset();\n });\n\n dragRef.ended.subscribe((event) => {\n if (isBefore) {\n const width = this.item.refs.width + event.distance.x * -1;\n if (width > dragMinWidth) {\n this.item.updateDate(this.ganttUpper.view.getDateByXPoint(this.item.refs.x + event.distance.x), this.item.end);\n } else {\n this.item.updateDate(this.item.end.startOfDay(), this.item.end);\n }\n } else {\n const width = this.item.refs.width + event.distance.x;\n if (width > dragMinWidth) {\n this.item.updateDate(\n this.item.start,\n this.ganttUpper.view.getDateByXPoint(this.item.refs.x + this.item.refs.width + event.distance.x)\n );\n } else {\n this.item.updateDate(this.item.start, this.item.start.endOfDay());\n }\n }\n this.clearDraggingStyles();\n this.closeDragBackdrop();\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 isBefore = 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(isBefore ? 'target' : 'source', this.item);\n });\n\n dragRef.moved.subscribe(() => {\n const positions = this.calcLinkLinePositions(handle, isBefore);\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 event.source.reset();\n handle.style.pointerEvents = '';\n if (this.barDragRef) {\n this.barDragRef.disabled = false;\n }\n this.barElement.classList.remove(activeClass);\n this.destroyLinkDraggingLine();\n this.dragContainer.emitLinkDragEnded();\n });\n\n dragRefs.push(dragRef);\n });\n return dragRefs;\n }\n\n private openDragBackdrop(dragElement: HTMLElement, start: GanttDate, end: GanttDate) {\n const dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask') as HTMLElement;\n const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop') as HTMLElement;\n const rootRect = this.dom.root.getBoundingClientRect();\n const dragRect = dragElement.getBoundingClientRect();\n const left = dragRect.left - rootRect.left - this.dom.side.clientWidth;\n const width = dragRect.right - dragRect.left;\n dragMaskElement.style.left = left + 'px';\n dragMaskElement.style.width = width + 'px';\n dragMaskElement.querySelector('.start').innerHTML = start.format('MM-dd');\n dragMaskElement.querySelector('.end').innerHTML = end.format('MM-dd');\n dragMaskElement.style.display = 'block';\n dragBackdropElement.style.display = 'block';\n }\n\n private closeDragBackdrop() {\n const dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask') as HTMLElement;\n const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop') as HTMLElement;\n dragMaskElement.style.display = 'none';\n dragBackdropElement.style.display = 'none';\n }\n\n private setDraggingStyles() {\n this.barElement.style.pointerEvents = 'none';\n this.barElement.classList.add('gantt-bar-draggable-drag');\n }\n\n private clearDraggingStyles() {\n this.barElement.style.pointerEvents = '';\n this.barElement.classList.remove('gantt-bar-draggable-drag');\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 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 createDrags(elementRef: ElementRef, item: GanttItemInternal, ganttUpper: GanttUpper) {\n this.item = item;\n this.barElement = elementRef.nativeElement;\n this.ganttUpper = ganttUpper;\n\n if (!item.draggable || (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 ngOnDestroy() {\n this.closeDragBackdrop();\n this.dragRefs.forEach((dragRef) => dragRef.dispose());\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n TemplateRef,\n HostBinding,\n ElementRef,\n OnChanges,\n OnDestroy,\n Inject,\n ViewChild,\n Output,\n EventEmitter,\n AfterViewInit\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { GanttBarDrag } from './bar-drag';\nimport { hexToRgb } from '../../utils/helpers';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { barBackground } from '../../gantt.styles';\nimport { GanttBarClickEvent } from '../../class';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttItemUpper } from '../../gantt-item-upper';\n\nfunction linearGradient(sideOrCorner: string, color: string, stop: string) {\n return `linear-gradient(${sideOrCorner},${color} 0%,${stop} 40%)`;\n}\n\n@Component({\n selector: 'ngx-gantt-bar,gantt-bar',\n templateUrl: './bar.component.html',\n providers: [GanttBarDrag]\n})\nexport class NgxGanttBarComponent extends GanttItemUpper implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n @Output() barClick = new EventEmitter<GanttBarClickEvent>();\n\n @ViewChild('content') contentElementRef: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.gantt-bar') ganttItemClass = true;\n\n color = 'red';\n\n constructor(\n private dragContainer: GanttDragContainer,\n private drag: GanttBarDrag,\n elementRef: ElementRef<HTMLDivElement>,\n @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper\n ) {\n super(elementRef, ganttUpper);\n }\n\n ngOnInit() {\n super.onInit();\n this.dragContainer.dragEnded.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n this.setContentBackground();\n });\n }\n\n ngAfterViewInit() {\n this.drag.createDrags(this.elementRef, this.item, this.ganttUpper);\n this.setContentBackground();\n }\n\n ngOnChanges(): void {\n super.onChanges();\n }\n\n onBarClick(event: Event) {\n this.barClick.emit({ event, item: this.item.origin });\n }\n\n private setContentBackground() {\n const contentElement = this.contentElementRef.nativeElement;\n const color = this.item.color || barBackground;\n const style: Partial<CSSStyleDeclaration> = this.item.barStyle || {};\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 style.borderRadius = '4px 12.5px 12.5px 4px';\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 style.borderRadius = '12.5px 4px 4px 12.5px';\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 stopPropagation(event: Event) {\n event.stopPropagation();\n }\n\n ngOnDestroy() {\n super.onDestroy();\n }\n}\n","<div class=\"gantt-bar-layer\">\n <div *ngIf=\"item.draggable && ganttUpper.draggable\" class=\"drag-handles\">\n <ng-container>\n <span class=\"handle\" (mousedown)=\"stopPropagation($event)\"></span>\n <span class=\"handle\" (mousedown)=\"stopPropagation($event)\"></span>\n </ng-container>\n </div>\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<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</div>\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { Component, OnInit, 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 implements OnInit {\n @Input() groups: GanttGroupInternal[];\n\n @Input() items: 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 @Output() barClick = new EventEmitter<GanttBarClickEvent>();\n\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 ngOnInit() {}\n\n trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n return item.id || index;\n }\n}\n","<gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<!-- groups -->\n<div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div>\n<!-- items -->\n<ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items;\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n </ng-container>\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n","import {\n Component,\n OnInit,\n ElementRef,\n ChangeDetectionStrategy,\n Input,\n EventEmitter,\n Output,\n ChangeDetectorRef,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ContentChildren,\n QueryList,\n AfterViewInit,\n ContentChild,\n TemplateRef,\n forwardRef,\n Inject\n} from '@angular/core';\nimport { startWith, takeUntil, take, finalize } from 'rxjs/operators';\nimport { Subject, Observable } from 'rxjs';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\nimport { GanttLinkDragEvent, GanttLineClickEvent, GanttItemInternal, GanttItem, GanttSelectedEvent } from './class';\nimport { NgxGanttTableColumnComponent } from './table/gantt-column.component';\nimport { sideWidth } from './gantt.styles';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { GANTT_ABSTRACT_TOKEN } from './gantt-abstract';\nimport { defaultColumnWidth } from './components/table/gantt-table.component';\nimport { GanttGlobalConfig, GANTT_GLOBAL_CONFIG } from './gantt.config';\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, AfterViewInit, OnChanges, OnDestroy {\n @Input() maxLevel = 2;\n\n @Input() async: boolean;\n\n @Input() childrenResolve: (GanttItem) => Observable<GanttItem[]>;\n\n @Input() linkable: boolean;\n\n @Output() linkDragStarted = new EventEmitter<GanttLinkDragEvent>();\n\n @Output() linkDragEnded = new EventEmitter<GanttLinkDragEvent>();\n\n @Output() lineClick = new EventEmitter<GanttLineClickEvent>();\n\n @Output() selectedChange = new EventEmitter<GanttSelectedEvent>();\n\n @ContentChild(NgxGanttTableComponent) table: NgxGanttTableComponent;\n\n @ContentChildren(NgxGanttTableColumnComponent, { descendants: true }) columns: QueryList<NgxGanttTableColumnComponent>;\n\n @ContentChild('tableEmpty', { static: true }) tableEmptyTemplate: TemplateRef<any>;\n\n private ngUnsubscribe$ = new Subject();\n\n public sideTableWidth = sideWidth;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n cdr: ChangeDetectorRef,\n ngZone: NgZone,\n @Inject(GANTT_GLOBAL_CONFIG) config: GanttGlobalConfig\n ) {\n super(elementRef, cdr, ngZone, config);\n }\n\n ngOnInit() {\n super.onInit();\n\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.dragContainer.linkDragStarted.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event: GanttLinkDragEvent) => {\n this.linkDragStarted.emit(event);\n });\n this.dragContainer.linkDragEnded.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event: GanttLinkDragEvent) => {\n this.linkDragEnded.emit(event);\n });\n });\n }\n\n ngAfterViewInit() {\n this.columns.changes.pipe(startWith(true), takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n this.columns.forEach((column) => {\n if (!column.columnWidth) {\n column.columnWidth = coerceCssPixelValue(defaultColumnWidth);\n }\n });\n this.cdr.detectChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n super.onChanges(changes);\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.expandChange.emit();\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.expandChange.emit();\n }\n } else {\n item.setExpand(false);\n this.expandChange.emit();\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 });\n } else {\n const selectedValue = this.getGanttItem(selectedIds[0])?.origin;\n this.selectedChange.emit({ event, selectedValue });\n }\n }\n\n ngOnDestroy() {\n super.onDestroy();\n }\n}\n","<ngx-gantt-root>\n <ng-template #sideTemplate>\n <gantt-table\n [groups]=\"groups\"\n [items]=\"items\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n (itemClick)=\"selectItem($event)\"\n ></gantt-table>\n </ng-template>\n <ng-template #mainTemplate>\n <gantt-main\n [groups]=\"groups\"\n [items]=\"items\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </ng-template>\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 { GanttCalendarComponent } from './components/calendar/calendar.component';\nimport { GanttTableComponent } from './components/table/gantt-table.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';\n\n@NgModule({\n imports: [CommonModule, DragDropModule],\n exports: [\n NgxGanttComponent,\n NgxGanttTableComponent,\n NgxGanttTableColumnComponent,\n NgxGanttRootComponent,\n NgxGanttBarComponent,\n NgxGanttRangeComponent\n ],\n declarations: [\n NgxGanttComponent,\n NgxGanttTableComponent,\n NgxGanttTableColumnComponent,\n GanttTableComponent,\n GanttMainComponent,\n GanttCalendarComponent,\n GanttLinksComponent,\n NgxGanttBarComponent,\n GanttIconComponent,\n GanttDragBackdropComponent,\n NgxGanttRangeComponent,\n NgxGanttRootComponent,\n IsGanttRangeItemPipe,\n IsGanttBarItemPipe,\n IsGanttCustomItemPipe\n ],\n providers: [\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 './utils/date';\nexport * from './class';\nexport * from './views/view';\nexport * from './gantt-item-upper';\nexport * from './gantt.pipe';\nexport * from './gantt-print.service';\nexport * from './gantt.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["viewOptions"],"mappings":"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"}
1
+ {"version":3,"file":"worktile-gantt.js","sources":["../../../packages/gantt/src/class/date-point.ts","../../../packages/gantt/src/class/event.ts","../../../packages/gantt/src/utils/date.ts","../../../packages/gantt/src/class/view-type.ts","../../../packages/gantt/src/class/link.ts","../../../packages/gantt/src/class/item.ts","../../../packages/gantt/src/class/group.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/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/components/icon/icons.ts","../../../packages/gantt/src/components/icon/icon.component.ts","../../../packages/gantt/src/gantt.pipe.ts","../../../packages/gantt/src/components/table/gantt-table.component.ts","../../../packages/gantt/src/components/table/gantt-table.component.html","../../../packages/gantt/src/gantt-dom.service.ts","../../../packages/gantt/src/gantt-drag-container.ts","../../../packages/gantt/src/gantt-print.service.ts","../../../packages/gantt/src/components/calendar/calendar.component.ts","../../../packages/gantt/src/components/calendar/calendar.component.html","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.ts","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.html","../../../packages/gantt/src/root.component.ts","../../../packages/gantt/src/root.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/components/links/links.component.ts","../../../packages/gantt/src/components/links/links.component.html","../../../packages/gantt/src/gantt-item-upper.ts","../../../packages/gantt/src/components/range/range.component.ts","../../../packages/gantt/src/components/range/range.component.html","../../../packages/gantt/src/components/bar/bar-drag.ts","../../../packages/gantt/src/components/bar/bar.component.ts","../../../packages/gantt/src/components/bar/bar.component.html","../../../packages/gantt/src/components/main/gantt-main.component.ts","../../../packages/gantt/src/components/main/gantt-main.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/worktile-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 ) {}\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 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","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} 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 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","export enum GanttViewType {\n day = 'day',\n quarter = 'quarter',\n month = 'month',\n year = 'year',\n week = 'week'\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 = '#348FE4'\n}\n\nexport interface GanttLink {\n type: GanttLinkType;\n link: string;\n color?: 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 color: string;\n type: GanttLinkType;\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 { GanttViewType } from './view-type';\nimport { GanttLink, GanttLinkType } from './link';\n\ninterface 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 links?: (GanttLink | string)[];\n draggable?: 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}\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 linkable?: boolean;\n origin: GanttItem;\n expandable?: boolean;\n expanded?: boolean;\n loading: boolean;\n children: GanttItemInternal[];\n type?: GanttItemType;\n progress?: number;\n viewType?: GanttViewType;\n\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, options?: { viewType: GanttViewType }) {\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.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.viewType = options && options.viewType ? options.viewType : GanttViewType.month;\n this.children = (item.children || []).map((subItem) => {\n return new GanttItemInternal(subItem, { viewType: this.viewType });\n });\n this.type = this.origin.type || GanttItemType.bar;\n this.progress = this.origin.progress;\n // fill one month when start or end is null\n this.fillItemStartOrEnd(item);\n }\n\n fillItemStartOrEnd(item: GanttItem) {\n let addInterval: number;\n switch (this.viewType) {\n case GanttViewType.day:\n case GanttViewType.week:\n addInterval = 0;\n break;\n default:\n addInterval = 30;\n break;\n }\n if (item.start && !item.end) {\n this.end = new GanttDate(item.start).addDays(addInterval).endOfDay();\n }\n if (!item.start && item.end) {\n this.start = new GanttDate(item.end).addDays(-addInterval).startOfDay();\n }\n }\n\n updateRefs(refs: GanttItemRefs) {\n this.refs$.next(refs);\n }\n\n updateDate(start: GanttDate, end: GanttDate) {\n this.start = start.startOfDay();\n this.end = end.endOfDay();\n this.origin.start = this.start.getUnixTime();\n this.origin.end = this.end.getUnixTime();\n }\n\n addChildren(items: GanttItem[]) {\n this.origin.children = items;\n this.children = (items || []).map((subItem) => {\n return new GanttItemInternal(subItem, { viewType: this.viewType });\n });\n }\n\n setExpand(expanded: boolean) {\n this.expanded = expanded;\n this.origin.expanded = expanded;\n }\n\n addLink(link: GanttLink) {\n console.log(link);\n this.links = [...this.links, link];\n this.origin.links = this.links;\n }\n}\n","import { GanttItemInternal } from './item';\n\nexport interface GanttGroup<T = unknown> {\n id: string;\n title: string;\n expanded?: boolean;\n origin?: T;\n class?: string;\n}\n\nexport class GanttGroupInternal {\n id: string;\n title: string;\n origin: GanttGroup;\n items: GanttItemInternal[];\n mergedItems: GanttItemInternal[][];\n expanded?: boolean;\n refs?: {\n height?: number;\n } = {};\n class?: string;\n constructor(group: GanttGroup) {\n this.id = group.id;\n this.origin = group;\n this.title = group.title;\n this.expanded = group.expanded === undefined ? true : group.expanded;\n this.items = [];\n this.mergedItems = [[]];\n this.class = group.class || '';\n }\n\n setExpand(expanded: boolean) {\n this.expanded = expanded;\n this.origin.expanded = expanded;\n }\n}\n","import { GanttLinkType, GanttLinkOptions, GanttLinkLineType } from './class/link';\nimport { InjectionToken } from '@angular/core';\n\nexport interface GanttDateFormat {\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 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';\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}\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 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\n ? this.endOf(end.date)\n : 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 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 protected 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 const start = this.startOf(this.start.add(this.options.addAmount * -1, this.options.addUnit));\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 const end = this.endOf(this.end.add(this.options.addAmount, this.options.addUnit));\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().startOfDay();\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) {\n const indexOfSecondaryDate = Math.floor(x / this.getCellWidth());\n const matchDate = this.secondaryDatePoints[indexOfSecondaryDate];\n const dayWidth = this.getDayOccupancyWidth(matchDate?.start);\n if (dayWidth === this.getCellWidth()) {\n return matchDate?.start;\n } else {\n const day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;\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, end.addSeconds(1));\n }\n}\n","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate, differenceInCalendarQuarters, eachMonthOfInterval } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\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};\n\nexport class GanttViewMonth extends GanttView {\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","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachYearOfInterval, differenceInCalendarQuarters } from 'date-fns';\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};\n\nexport class GanttViewQuarter extends GanttView {\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","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate, eachWeekOfInterval, eachDayOfInterval } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\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};\n\nexport class GanttViewDay extends GanttView {\n showWeekBackdrop = true;\n\n showTimeline = false;\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 { 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};\n\nexport class GanttViewWeek extends GanttView {\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","import { GanttView, GanttViewOptions, primaryDatePointTop, secondaryDatePointTop, GanttViewDate } from './view';\nimport { GanttDate } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { eachYearOfInterval, differenceInCalendarYears } from 'date-fns';\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};\n\nexport class GanttViewYear extends GanttView {\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","import { GanttViewOptions, GanttViewDate } from './view';\nimport { GanttViewMonth } from './month';\nimport { GanttDate } from '../utils/date';\nimport { GanttViewType } from '../class/view-type';\nimport { GanttViewQuarter } from './quarter';\nimport { GanttViewDay } from './day';\nimport { GanttViewWeek } from './week';\nimport { GanttViewYear } from './year';\n\nexport function createViewFactory(type: GanttViewType, start: GanttViewDate, end: GanttViewDate, options?: GanttViewOptions) {\n switch (type) {\n case GanttViewType.month:\n return new GanttViewMonth(start, end, options);\n case GanttViewType.week:\n return new GanttViewWeek(start, end, options);\n case GanttViewType.quarter:\n return new GanttViewQuarter(start, end, options);\n case GanttViewType.day:\n return new GanttViewDay(start, end, options);\n case GanttViewType.year:\n return new GanttViewYear(start, end, options);\n default:\n throw new Error('gantt view type invalid');\n }\n}\n","export const defaultStyles = {\n lineHeight: 44,\n barHeight: 22\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 = '#348fe4';\n\nexport const rangeHeight = 17;\n\nexport const todayHeight = 24;\n\nexport const todayWidth = 35;\n\nexport const todayBorderRadius = 4;\n\n\n","import { GanttItem, GanttItemInternal } from '../class/item';\n\nexport interface Dictionary<T = unknown> {\n [key: string]: T;\n}\n\nexport function isNumber(value: any) {\n return typeof value === 'number';\n}\n\nexport function isString(value: any) {\n return typeof value === 'string';\n}\n\nexport function isUndefined(value: any) {\n return value === undefined;\n}\n\nexport function hexToRgb(color: string, opacity = 1) {\n if (/^#/g.test(color)) {\n return `rgba(${parseInt(color.slice(1, 3), 16)},${parseInt(color.slice(3, 5), 16)},${parseInt(color.slice(5, 7), 16)},${opacity})`;\n } else {\n return color;\n }\n}\n\nexport function uniqBy<T = unknown>(array: T[], key: keyof T) {\n const valuesMap: Dictionary<T> = {};\n const result = [];\n (array || []).forEach((value) => {\n const _key = value[key as string];\n if (!valuesMap[_key]) {\n valuesMap[_key] = value;\n result.push(value);\n }\n });\n return result;\n}\n\nexport function flatten<T = unknown>(array: T[]) {\n return array.reduce((pre, cur) => {\n return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);\n }, []);\n}\n\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","import {\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} from '@angular/core';\nimport { 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} 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 } 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';\n\n@Directive()\nexport abstract class GanttUpper {\n @Input('items') originItems: GanttItem[] = [];\n\n @Input('groups') originGroups: GanttGroup[] = [];\n\n @Input() viewType: GanttViewType = GanttViewType.month;\n\n @Input() start: number;\n\n @Input() end: number;\n\n @Input() showTodayLine = true;\n\n @Input() draggable: boolean;\n\n @Input() styles: GanttStyles;\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() barClick = new EventEmitter<GanttBarClickEvent>();\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('group', { static: true }) groupTemplate: TemplateRef<any>;\n\n @ContentChild('groupHeader', { static: true }) groupHeaderTemplate: TemplateRef<any>;\n\n public linkable: boolean;\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 viewChange = new EventEmitter<GanttView>();\n\n public expandChange = new EventEmitter<void>();\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();\n\n public selectionModel: SelectionModel<string>;\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\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, { viewType: this.viewType });\n group.items.push(item);\n }\n });\n } else {\n this.originItems.forEach((origin) => {\n const item = new GanttItemInternal(origin, { viewType: this.viewType });\n this.items.push(item);\n });\n }\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 if (item.start && !this.start) {\n start = start ? Math.min(start, item.start) : item.start;\n }\n if (item.end && !this.end) {\n end = end ? Math.max(end, item.end) : item.end;\n }\n });\n }\n return {\n start: {\n date: new GanttDate(start),\n isCustom: this.start ? true : false\n },\n end: {\n date: new GanttDate(end),\n isCustom: this.end ? true : false\n }\n };\n }\n\n computeRefs() {\n this.groups.forEach((group) => {\n const groupItems = recursiveItems(group.items);\n this.computeItemsRefs(...groupItems);\n });\n const items = recursiveItems(this.items);\n this.computeItemsRefs(...items);\n }\n\n private expandGroups(expanded: boolean) {\n this.groups.forEach((group) => {\n group.setExpand(expanded);\n });\n this.expandChange.next();\n this.cdr.detectChanges();\n }\n\n private initSelectionModel() {\n return new SelectionModel(this.multiple, []);\n }\n\n onInit() {\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.initSelectionModel();\n this.firstChange = false;\n\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.element.style.opacity = '1';\n\n this.dragContainer.dragStarted.subscribe((event) => {\n this.dragStarted.emit(event);\n });\n\n this.dragContainer.dragMoved.subscribe((event) => {\n this.dragMoved.emit(event);\n });\n this.dragContainer.dragEnded.subscribe((event) => {\n this.dragEnded.emit(event);\n this.computeRefs();\n this.detectChanges();\n });\n });\n\n this.view.start$.pipe(skip(1), takeUntil(this.unsubscribe$)).subscribe(() => {\n this.computeRefs();\n });\n }\n\n onChanges(changes: SimpleChanges) {\n if (!this.firstChange) {\n if (changes.viewType && changes.viewType.currentValue) {\n this.createView();\n this.setupGroups();\n this.setupItems();\n this.computeRefs();\n this.viewChange.emit(this.view);\n }\n if (changes.originItems || changes.originGroups) {\n this.setupExpandedState();\n this.setupGroups();\n this.setupItems();\n this.computeRefs();\n }\n }\n }\n\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n computeItemsRefs(...items: GanttItemInternal[]) {\n items.forEach((item) => {\n item.updateRefs({\n width: item.start && item.end ? this.view.getDateRangeWidth(item.start.startOfDay(), item.end.endOfDay()) : 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 expandGroup(group: GanttGroupInternal) {\n group.setExpand(!group.expanded);\n this.expandChange.emit();\n this.cdr.detectChanges();\n }\n\n // public functions\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\nexport const GANTT_UPPER_TOKEN = new InjectionToken<GanttUpper>('GANTT_UPPER_TOKEN');\n","import { Component, OnInit, ContentChild, TemplateRef, Input, EventEmitter, Inject, Output } 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})\nexport class NgxGanttTableColumnComponent implements OnInit {\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 @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) {}\n\n ngOnInit() {}\n}\n","import { Component, ContentChild, EventEmitter, OnInit, Output, TemplateRef } from '@angular/core';\nimport { GanttTableEvent } from '../class';\n\n@Component({\n selector: 'ngx-gantt-table',\n template: ''\n})\nexport class NgxGanttTableComponent implements OnInit {\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 constructor() {}\n\n ngOnInit() {}\n}\n","import { InjectionToken } 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 expandGroup(group: GanttGroupInternal): void;\n expandChildren(item: GanttItemInternal): void;\n}\n\nexport const GANTT_ABSTRACT_TOKEN = new InjectionToken<GanttAbstractComponent>('gantt-abstract-token');\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>`;\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};\n","import { Component, OnInit, Input, AfterViewInit, ElementRef, HostBinding } from '@angular/core';\nimport { icons } from './icons';\n@Component({\n selector: 'gantt-icon',\n template: ''\n})\nexport class GanttIconComponent implements OnInit, AfterViewInit {\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 ngOnInit(): void {}\n\n ngAfterViewInit() {}\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 {\n Component,\n HostBinding,\n TemplateRef,\n QueryList,\n Input,\n OnInit,\n ViewChild,\n ElementRef,\n OnChanges,\n SimpleChanges,\n Inject,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { GanttItemInternal, GanttGroupInternal, GanttSelectedEvent } from '../../class';\nimport { NgxGanttTableColumnComponent } from '../../table/gantt-column.component';\n// import { defaultColumnWidth, minColumnWidth } from '../../gantt.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 { GanttUpper, GANTT_UPPER_TOKEN } from '../../gantt-upper';\n\nexport const defaultColumnWidth = 100;\nexport const minColumnWidth = 80;\n\ninterface DragFixedConfig {\n target: HTMLElement;\n originWidth: number;\n movedWidth: number;\n minWidth: number;\n}\n@Component({\n selector: 'gantt-table',\n templateUrl: './gantt-table.component.html'\n})\nexport class GanttTableComponent implements OnInit, OnChanges {\n public columnList: QueryList<NgxGanttTableColumnComponent>;\n\n public dragStartLeft: number;\n\n @Input() groups: GanttGroupInternal[];\n\n @Input() items: GanttItemInternal[];\n\n @Input()\n set columns(columns: QueryList<NgxGanttTableColumnComponent>) {\n columns.forEach((column) => {\n if (!column.columnWidth) {\n column.columnWidth = coerceCssPixelValue(defaultColumnWidth);\n }\n });\n this.columnList = columns;\n }\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 @Output() itemClick = new EventEmitter<GanttSelectedEvent>();\n\n @ViewChild('dragLine', { static: true }) draglineElementRef: ElementRef<HTMLElement>;\n\n @HostBinding('class.gantt-table') ganttTableClass = true;\n\n @HostBinding('class.gantt-table-empty') ganttTableEmptyClass = false;\n\n constructor(\n @Inject(GANTT_ABSTRACT_TOKEN) public gantt: GanttAbstractComponent,\n @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.groups.currentValue?.length && !changes.items.currentValue?.length) {\n this.ganttTableEmptyClass = true;\n } else {\n this.ganttTableEmptyClass = false;\n }\n }\n\n private dragFixed(config: DragFixedConfig) {\n if (config.movedWidth < config.minWidth) {\n config.target.style.transform = `translate3d(${config.minWidth - config.originWidth}px, 0, 0)`;\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 dragStarted(event: CdkDragStart) {\n const target = event.source.element.nativeElement;\n this.dragStartLeft = target.getBoundingClientRect().left;\n }\n\n dragMoved(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.columnList.length;\n }\n\n this.dragFixed({\n target,\n originWidth,\n movedWidth,\n minWidth\n });\n\n this.showAuxiliaryLine(event);\n }\n\n columnDragEnded(event: CdkDragEnd, column: NgxGanttTableColumnComponent) {\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.columnList });\n }\n\n this.hideAuxiliaryLine();\n event.source.reset();\n }\n\n tableDragEnded(event: CdkDragEnd) {\n const target = event.source.element.nativeElement;\n const left = target.getBoundingClientRect().left;\n const tableWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n const dragWidth = left - this.dragStartLeft;\n this.columnList.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 });\n\n if (this.gantt.table) {\n this.gantt.table.columnChanges.emit({ columns: this.columnList });\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.draglineElementRef.nativeElement.style.left = `${distance.x}px`;\n this.draglineElementRef.nativeElement.style.display = 'block';\n }\n\n private hideAuxiliaryLine() {\n this.draglineElementRef.nativeElement.style.display = 'none';\n }\n\n trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n return item.id || index;\n }\n}\n","<div class=\"gantt-table-header gantt-table-row\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; 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=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event, column)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"columnDragEnded($event, column)\"\n ></div>\n </div>\n</div>\n<div class=\"gantt-table-body\">\n <ng-container *ngIf=\"!groups.length && !items.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=\"groups && groups.length > 0; else itemsTemplate\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"group.class\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"group.expanded\" (click)=\"expandGroup(group)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"group.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ group.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <ng-container *ngIf=\"group.expanded\">\n <ng-template\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ group: group, items: group.items, level: 0 }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"tableDragEnded($event)\"\n></div>\n\n<div #dragLine class=\"gantt-table-drag-auxiliary-line\"></div>\n\n<ng-template #itemsTemplate>\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items, level: 0 }\"></ng-template>\n</ng-template>\n\n<ng-template #ganttItems let-group=\"group\" let-items=\"items\" let-level=\"level\">\n <ng-container *ngFor=\"let item of items; trackBy: trackBy\">\n <div\n (click)=\"itemClick.emit({ event: $event, selectedValue: this.item.origin })\"\n class=\"gantt-table-item gantt-table-row\"\n [class.gantt-table-item-first-level-group]=\"level === 0 && (item.type | isGanttRangeItem)\"\n [class.gantt-table-item-with-group]=\"group\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let first = first\" [style.width]=\"column.columnWidth\">\n <div *ngIf=\"first\" class=\"gantt-expand-icon\" [style.marginLeft.px]=\"level * 20\">\n <ng-container *ngIf=\"level < gantt.maxLevel - 1 && item.expandable\">\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 ></gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\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-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n","import { Injectable, ElementRef, OnDestroy } from '@angular/core';\nimport { fromEvent, Subject, merge } from 'rxjs';\nimport { pairwise, map, auditTime, takeUntil, take, startWith } from 'rxjs/operators';\nimport { isNumber } from './utils/helpers';\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 calendarOverlay: Element;\n\n public linksOverlay: Element;\n\n private unsubscribe$ = new Subject<void>();\n\n constructor() {}\n\n private monitorScrollChange() {\n merge(fromEvent(this.mainContainer, 'scroll'), fromEvent(this.sideContainer, 'scroll'))\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((event) => {\n this.syncScroll(event);\n });\n\n fromEvent(this.mainContainer, 'scroll')\n .pipe(startWith(), takeUntil(this.unsubscribe$))\n .subscribe((event) => {\n // if (this.mainContainer.scrollLeft > 0) {\n // this.side.classList.add('gantt-side-has-shadow');\n // } else {\n // this.side.classList.remove('gantt-side-has-shadow');\n // }\n });\n }\n\n private syncScroll(event: Event) {\n const target = event.currentTarget as HTMLElement;\n this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;\n\n this.sideContainer.scrollTop = target.scrollTop;\n this.mainContainer.scrollTop = target.scrollTop;\n }\n\n private disableBrowserWheelEvent() {\n const container = this.mainContainer as HTMLElement;\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 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.calendarOverlay = this.root.getElementsByClassName('gantt-calendar-overlay')[0];\n this.monitorScrollChange();\n this.disableBrowserWheelEvent();\n }\n\n getViewerScroll() {\n return fromEvent<Event>(this.mainContainer, 'scroll').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 }\n if (current - previous > 0) {\n if (this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft < scrollThreshold) {\n event.direction = ScrollDirection.RIGHT;\n }\n }\n return event;\n })\n );\n }\n\n getResize() {\n return 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.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;\n }\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { Injectable, EventEmitter, Inject } from '@angular/core';\nimport { GanttLinkType } from './class';\nimport { GanttDragEvent, GanttLinkDragEvent } from './class/event';\nimport { GanttItemInternal } from './class/item';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\n\nfunction getDependencyType(path: LinkDragPath, dependencyTypes: GanttLinkType[]): GanttLinkType {\n if (dependencyTypes.includes(GanttLinkType.ss) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.start) {\n return GanttLinkType.ss;\n }\n if (dependencyTypes.includes(GanttLinkType.ff) && path.from.pos === InBarPosition.finish && path.to.pos === InBarPosition.finish) {\n return GanttLinkType.ff;\n }\n if (dependencyTypes.includes(GanttLinkType.sf) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.finish) {\n return GanttLinkType.sf;\n }\n return GanttLinkType.fs;\n}\n\nexport enum InBarPosition {\n start = 'start',\n finish = 'finish'\n}\n\nexport type LinkDragPosition = {\n element: HTMLElement;\n item: GanttItemInternal;\n pos?: InBarPosition;\n};\n\nexport interface LinkDragPath {\n from?: LinkDragPosition;\n to?: LinkDragPosition;\n}\n\n@Injectable()\nexport class GanttDragContainer {\n dragStarted = new EventEmitter<GanttDragEvent>();\n\n dragMoved = new EventEmitter<GanttDragEvent>();\n\n dragEnded = new EventEmitter<GanttDragEvent>();\n\n linkDragStarted = new EventEmitter<GanttLinkDragEvent>();\n\n linkDragEntered = new EventEmitter<GanttLinkDragEvent>();\n\n linkDragEnded = new EventEmitter<GanttLinkDragEvent>();\n\n linkDraggingId: string;\n\n linkDragPath: LinkDragPath = { from: null, to: null };\n\n constructor(@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 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 this.linkDraggingId = null;\n this.linkDragPath = { from: null, to: null };\n }\n}\n","import { Injectable, ElementRef } from '@angular/core';\nimport html2canvas from 'html2canvas';\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 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 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-overlay-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 {\n Component,\n OnInit,\n HostBinding,\n OnChanges,\n SimpleChanges,\n OnDestroy,\n NgZone,\n Inject,\n ElementRef,\n AfterViewInit\n} from '@angular/core';\nimport { GanttDatePoint } from '../../class/date-point';\nimport { Subject, merge } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { headerHeight, todayHeight, todayWidth, todayBorderRadius } from '../../gantt.styles';\nimport { isNumber } from '../../utils/helpers';\nimport { GanttDate } from '../../utils/date';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttViewType } from './../../class/view-type';\n\nconst mainHeight = 5000;\n\n@Component({\n selector: 'gantt-calendar-overlay',\n templateUrl: './calendar.component.html'\n})\nexport class GanttCalendarComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n get view() {\n return this.ganttUpper.view;\n }\n\n private unsubscribe$ = new Subject();\n\n headerHeight = headerHeight;\n\n mainHeight = mainHeight;\n\n todayHeight = todayHeight;\n\n todayWidth = todayWidth;\n\n todayBorderRadius = todayBorderRadius;\n\n viewTypes = GanttViewType;\n\n @HostBinding('class.gantt-calendar-overlay') className = true;\n\n constructor(\n @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper,\n private ngZone: NgZone,\n private elementRef: ElementRef<HTMLElement>\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 const line = this.elementRef.nativeElement.getElementsByClassName('today-line')[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 if (line) {\n line.style.left = `${x}px`;\n line.style.top = `${headerHeight}px`;\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 });\n });\n }\n\n ngAfterViewInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {}\n\n trackBy(index: number, point: GanttDatePoint) {\n return point.text || index;\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n <span class=\"today-rect\" [hidden]=\"ganttUpper.viewType !== viewTypes.day\"> </span>\n <span class=\"today-line\" *ngIf=\"ganttUpper.showTodayLine\"> </span>\n</div>\n\n<svg class=\"gantt-calendar-overlay-main\" [attr.width]=\"view.width\" [attr.height]=\"headerHeight\">\n <g>\n <text class=\"primary-text\" *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text class=\"secondary-text\" [class.secondary-text-weekend]=\"point.additions?.isWeekend\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\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]=\"mainHeight\"\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 <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]=\"headerHeight\"\n [attr.y2]=\"mainHeight\"\n class=\"secondary-line\"\n ></line>\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, OnInit, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'gantt-drag-backdrop',\n templateUrl: `./drag-backdrop.component.html`\n})\nexport class GanttDragBackdropComponent implements OnInit {\n @HostBinding('class.gantt-drag-backdrop') backdropClass = true;\n\n constructor() {}\n\n ngOnInit() {}\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 {\n Component,\n OnInit,\n HostBinding,\n NgZone,\n ElementRef,\n Inject,\n ContentChild,\n TemplateRef,\n Input,\n Optional,\n AfterViewInit\n} from '@angular/core';\nimport { GanttDomService, ScrollDirection } from './gantt-dom.service';\nimport { GanttDragContainer } from './gantt-drag-container';\nimport { take, takeUntil, startWith } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\nimport { GanttPrintService } from './gantt-print.service';\n\n@Component({\n selector: 'ngx-gantt-root',\n templateUrl: './root.component.html',\n providers: [GanttDomService, GanttDragContainer]\n})\nexport class NgxGanttRootComponent implements OnInit {\n @Input() sideWidth: number;\n\n @HostBinding('class.gantt') ganttClass = true;\n\n @ContentChild('sideTemplate', { static: true }) sideTemplate: TemplateRef<any>;\n\n @ContentChild('mainTemplate', { static: true }) mainTemplate: TemplateRef<any>;\n\n private unsubscribe$ = new Subject();\n\n private get view() {\n return this.ganttUpper.view;\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) private ganttUpper: GanttUpper,\n @Optional() private printService: GanttPrintService\n ) {\n this.ganttUpper.dragContainer = dragContainer;\n }\n\n ngOnInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.dom.initialize(this.elementRef);\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)).subscribe(() => {\n this.scrollToToday();\n });\n });\n }\n\n private setupViewScroll() {\n if (this.ganttUpper.disabledLoadOnScroll) {\n return;\n }\n this.dom\n .getViewerScroll()\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 this.ngZone.run(() => {\n this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() });\n });\n }\n }\n if (event.direction === ScrollDirection.RIGHT) {\n const dates = this.view.addEndDate();\n if (dates) {\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 private scrollToToday() {\n const x = this.view.getTodayXPoint();\n this.dom.scrollMainContainer(x);\n }\n}\n","<div class=\"gantt-side\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\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","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n HostBinding,\n Inject,\n ChangeDetectorRef,\n ElementRef,\n OnDestroy,\n OnChanges\n} from '@angular/core';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil, skip, debounceTime } from 'rxjs/operators';\nimport { GanttGroupInternal } from '../../class/group';\nimport { GanttItemInternal } from './../../class/item';\nimport { GanttLineClickEvent } from '../../class/event';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { recursiveItems } from '../../utils/helpers';\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 @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();\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 ) {}\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.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 )\n .pipe(takeUntil(this.unsubscribe$), skip(1), debounceTime(0))\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\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 color = LinkColors.default;\n if (link.type === GanttLinkType.fs && source.end.getTime() > target.start.getTime()) {\n color = LinkColors.blocked;\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: link.color || color\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) {\n if (link.color === LinkColors.default) {\n link.color = LinkColors.active;\n }\n }\n\n mouseLeavePath(link: LinkInternal) {\n if (link.color === LinkColors.active) {\n link.color = LinkColors.default;\n }\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 <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n (mouseenter)=\"mouseEnterPath(link)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n [attr.d]=\"link.path\"\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","import { Input, ElementRef, Inject, TemplateRef, Directive } 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 {\n @Input() template: TemplateRef<any>;\n\n @Input() item: GanttItemInternal;\n\n public firstChange = true;\n\n public unsubscribe$ = new Subject();\n\n constructor(protected elementRef: ElementRef<HTMLElement>, @Inject(GANTT_UPPER_TOKEN) protected ganttUpper: GanttUpper) {}\n\n onInit() {\n this.firstChange = false;\n this.item.refs$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n this.setPositions();\n });\n }\n\n onChanges(): void {\n if (!this.firstChange) {\n this.setPositions();\n }\n }\n\n private setPositions() {\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 } else {\n }\n }\n\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n}\n","import { Component, OnInit, HostBinding, ElementRef, OnChanges, OnDestroy, 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 implements OnInit, OnChanges, OnDestroy {\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 ngOnInit() {\n super.onInit();\n }\n\n ngOnChanges(): void {\n super.onChanges();\n }\n\n ngOnDestroy() {\n super.onDestroy();\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 { Injectable, ElementRef, OnDestroy } 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 } from '../../utils/date';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { GanttUpper } from '../../gantt-upper';\nimport { GanttLinkType } from '../../class/link';\n\nconst dragMinWidth = 10;\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 linkDraggingLine: SVGElement;\n\n private barDragRef: DragRef;\n\n private dragRefs: DragRef[] = [];\n\n private destroy$ = new Subject();\n\n constructor(private dragDrop: DragDrop, private dom: GanttDomService, private dragContainer: GanttDragContainer) {}\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')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\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')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\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 private createBarDrag() {\n const dragRef = this.dragDrop.createDrag(this.barElement);\n dragRef.lockAxis = 'x';\n dragRef.started.subscribe(() => {\n this.setDraggingStyles();\n this.dragContainer.dragStarted.emit({ item: this.item.origin });\n });\n dragRef.moved.subscribe((event) => {\n const currentX = this.item.refs.x + event.distance.x;\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 let start = currentDate;\n let end = currentDate.addDays(diffDays);\n if (currentX > currentStartX + dayWidth / 2) {\n start = start.addDays(1);\n end = end.addDays(1);\n }\n this.openDragBackdrop(this.barElement, start, end);\n this.item.updateDate(start, end);\n this.dragContainer.dragMoved.emit({ item: this.item.origin });\n });\n dragRef.ended.subscribe((event) => {\n this.clearDraggingStyles();\n this.closeDragBackdrop();\n event.source.reset();\n this.dragContainer.dragEnded.emit({ item: this.item.origin });\n });\n this.barDragRef = dragRef;\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.dragDrop.createDrag(handle);\n dragRef.lockAxis = 'x';\n dragRef.withBoundaryElement(this.dom.root as HTMLElement);\n\n dragRef.started.subscribe(() => {\n this.setDraggingStyles();\n this.dragContainer.dragStarted.emit({ item: this.item.origin });\n });\n\n dragRef.moved.subscribe((event) => {\n if (isBefore) {\n const x = this.item.refs.x + event.distance.x;\n const width = this.item.refs.width + event.distance.x * -1;\n if (width > dragMinWidth) {\n this.barElement.style.width = width + 'px';\n this.barElement.style.left = x + 'px';\n this.openDragBackdrop(\n this.barElement,\n this.ganttUpper.view.getDateByXPoint(x),\n this.ganttUpper.view.getDateByXPoint(x + width)\n );\n this.item.updateDate(this.ganttUpper.view.getDateByXPoint(x), this.item.end);\n }\n } else {\n const width = this.item.refs.width + event.distance.x;\n if (width > dragMinWidth) {\n this.barElement.style.width = width + 'px';\n this.openDragBackdrop(\n this.barElement,\n this.ganttUpper.view.getDateByXPoint(this.item.refs.x),\n this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width)\n );\n }\n this.item.updateDate(this.item.start, this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width));\n }\n this.dragContainer.dragMoved.emit({ item: this.item.origin });\n event.source.reset();\n });\n\n dragRef.ended.subscribe((event) => {\n if (isBefore) {\n const width = this.item.refs.width + event.distance.x * -1;\n if (width > dragMinWidth) {\n this.item.updateDate(this.ganttUpper.view.getDateByXPoint(this.item.refs.x + event.distance.x), this.item.end);\n } else {\n this.item.updateDate(this.item.end.startOfDay(), this.item.end);\n }\n } else {\n const width = this.item.refs.width + event.distance.x;\n if (width > dragMinWidth) {\n this.item.updateDate(\n this.item.start,\n this.ganttUpper.view.getDateByXPoint(this.item.refs.x + this.item.refs.width + event.distance.x)\n );\n } else {\n this.item.updateDate(this.item.start, this.item.start.endOfDay());\n }\n }\n this.clearDraggingStyles();\n this.closeDragBackdrop();\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 -\n this.dragContainer.linkDragPath.to.element.getBoundingClientRect().x;\n\n this.dragContainer.emitLinkDragEnded({\n ...this.dragContainer.linkDragPath.to,\n pos:\n placePointX < this.dragContainer.linkDragPath.to.item.refs.width / 2\n ? InBarPosition.start\n : InBarPosition.finish\n });\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 dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask') as HTMLElement;\n const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop') as HTMLElement;\n const rootRect = this.dom.root.getBoundingClientRect();\n const dragRect = dragElement.getBoundingClientRect();\n const left = dragRect.left - rootRect.left - this.dom.side.clientWidth;\n const width = dragRect.right - dragRect.left;\n dragMaskElement.style.left = left + 'px';\n dragMaskElement.style.width = width + 'px';\n dragMaskElement.querySelector('.start').innerHTML = start.format('MM-dd');\n dragMaskElement.querySelector('.end').innerHTML = end.format('MM-dd');\n dragMaskElement.style.display = 'block';\n dragBackdropElement.style.display = 'block';\n }\n\n private closeDragBackdrop() {\n const dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask') as HTMLElement;\n const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop') as HTMLElement;\n dragMaskElement.style.display = 'none';\n dragBackdropElement.style.display = 'none';\n }\n\n private setDraggingStyles() {\n this.barElement.style.pointerEvents = 'none';\n this.barElement.classList.add('gantt-bar-draggable-drag');\n }\n\n private clearDraggingStyles() {\n this.barElement.style.pointerEvents = '';\n this.barElement.classList.remove('gantt-bar-draggable-drag');\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 createDrags(elementRef: ElementRef, item: GanttItemInternal, ganttUpper: GanttUpper) {\n this.item = item;\n this.barElement = elementRef.nativeElement;\n this.ganttUpper = ganttUpper;\n\n if (!item.draggable || (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 ngOnDestroy() {\n this.closeDragBackdrop();\n this.dragRefs.forEach((dragRef) => dragRef.dispose());\n this.destroy$.next();\n this.destroy$.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} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { GanttBarDrag } from './bar-drag';\nimport { hexToRgb } from '../../utils/helpers';\nimport { GanttDragContainer } from '../../gantt-drag-container';\nimport { barBackground } from '../../gantt.styles';\nimport { GanttBarClickEvent } from '../../class';\nimport { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';\nimport { GanttItemUpper } from '../../gantt-item-upper';\n\nfunction linearGradient(sideOrCorner: string, color: string, stop: string) {\n return `linear-gradient(${sideOrCorner},${color} 0%,${stop} 40%)`;\n}\n\n@Component({\n selector: 'ngx-gantt-bar,gantt-bar',\n templateUrl: './bar.component.html',\n providers: [GanttBarDrag]\n})\nexport class NgxGanttBarComponent extends GanttItemUpper implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n @Output() barClick = new EventEmitter<GanttBarClickEvent>();\n\n @ViewChild('content') contentElementRef: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.gantt-bar') ganttItemClass = true;\n\n color = 'red';\n\n constructor(\n private dragContainer: GanttDragContainer,\n private drag: GanttBarDrag,\n elementRef: ElementRef<HTMLDivElement>,\n @Inject(GANTT_UPPER_TOKEN) public ganttUpper: GanttUpper\n ) {\n super(elementRef, ganttUpper);\n }\n\n ngOnInit() {\n super.onInit();\n this.dragContainer.dragEnded.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n this.setContentBackground();\n });\n }\n\n ngAfterViewInit() {\n this.drag.createDrags(this.elementRef, this.item, this.ganttUpper);\n this.setContentBackground();\n }\n\n ngOnChanges(): void {\n super.onChanges();\n }\n\n onBarClick(event: Event) {\n this.barClick.emit({ event, item: this.item.origin });\n }\n\n private setContentBackground() {\n const contentElement = this.contentElementRef.nativeElement;\n const color = this.item.color || barBackground;\n const style: Partial<CSSStyleDeclaration> = this.item.barStyle || {};\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 style.borderRadius = '4px 12.5px 12.5px 4px';\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 style.borderRadius = '12.5px 4px 4px 12.5px';\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 stopPropagation(event: Event) {\n event.stopPropagation();\n }\n\n ngOnDestroy() {\n super.onDestroy();\n }\n}\n","<div class=\"gantt-bar-layer\">\n <div *ngIf=\"item.draggable && ganttUpper.draggable\" class=\"drag-handles\">\n <ng-container>\n <span class=\"handle\" (mousedown)=\"stopPropagation($event)\"></span>\n <span class=\"handle\" (mousedown)=\"stopPropagation($event)\"></span>\n </ng-container>\n </div>\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<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</div>\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { Component, OnInit, 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 implements OnInit {\n @Input() groups: GanttGroupInternal[];\n\n @Input() items: 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 @Output() barClick = new EventEmitter<GanttBarClickEvent>();\n\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 ngOnInit() {}\n\n trackBy(index: number, item: GanttGroupInternal | GanttItemInternal) {\n return item.id || index;\n }\n}\n","<gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<!-- groups -->\n<div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div>\n<!-- items -->\n<ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items;\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n </ng-container>\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n","import {\n Component,\n OnInit,\n ElementRef,\n ChangeDetectionStrategy,\n Input,\n EventEmitter,\n Output,\n ChangeDetectorRef,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ContentChildren,\n QueryList,\n AfterViewInit,\n ContentChild,\n TemplateRef,\n forwardRef,\n Inject\n} from '@angular/core';\nimport { startWith, takeUntil, take, finalize } from 'rxjs/operators';\nimport { Subject, Observable } from 'rxjs';\nimport { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';\nimport { GanttLinkDragEvent, GanttLineClickEvent, GanttItemInternal, GanttItem, GanttSelectedEvent } from './class';\nimport { NgxGanttTableColumnComponent } from './table/gantt-column.component';\nimport { sideWidth } from './gantt.styles';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { NgxGanttTableComponent } from './table/gantt-table.component';\nimport { GANTT_ABSTRACT_TOKEN } from './gantt-abstract';\nimport { defaultColumnWidth } from './components/table/gantt-table.component';\nimport { GanttGlobalConfig, GANTT_GLOBAL_CONFIG } from './gantt.config';\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, AfterViewInit, OnChanges, OnDestroy {\n @Input() maxLevel = 2;\n\n @Input() async: boolean;\n\n @Input() childrenResolve: (GanttItem) => Observable<GanttItem[]>;\n\n @Input() linkable: boolean;\n\n @Output() linkDragStarted = new EventEmitter<GanttLinkDragEvent>();\n\n @Output() linkDragEnded = new EventEmitter<GanttLinkDragEvent>();\n\n @Output() lineClick = new EventEmitter<GanttLineClickEvent>();\n\n @Output() selectedChange = new EventEmitter<GanttSelectedEvent>();\n\n @ContentChild(NgxGanttTableComponent) table: NgxGanttTableComponent;\n\n @ContentChildren(NgxGanttTableColumnComponent, { descendants: true }) columns: QueryList<NgxGanttTableColumnComponent>;\n\n @ContentChild('tableEmpty', { static: true }) tableEmptyTemplate: TemplateRef<any>;\n\n private ngUnsubscribe$ = new Subject();\n\n public sideTableWidth = sideWidth;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n cdr: ChangeDetectorRef,\n ngZone: NgZone,\n @Inject(GANTT_GLOBAL_CONFIG) config: GanttGlobalConfig\n ) {\n super(elementRef, cdr, ngZone, config);\n }\n\n ngOnInit() {\n super.onInit();\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.dragContainer.linkDragStarted.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event: GanttLinkDragEvent) => {\n this.linkDragStarted.emit(event);\n });\n this.dragContainer.linkDragEnded.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event: GanttLinkDragEvent) => {\n this.linkDragEnded.emit(event);\n });\n });\n }\n\n ngAfterViewInit() {\n this.columns.changes.pipe(startWith(true), takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n this.columns.forEach((column) => {\n if (!column.columnWidth) {\n column.columnWidth = coerceCssPixelValue(defaultColumnWidth);\n }\n });\n this.cdr.detectChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n super.onChanges(changes);\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.expandChange.emit();\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.expandChange.emit();\n }\n } else {\n item.setExpand(false);\n this.expandChange.emit();\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 ngOnDestroy() {\n super.onDestroy();\n }\n}\n","<ngx-gantt-root>\n <ng-template #sideTemplate>\n <gantt-table\n [groups]=\"groups\"\n [items]=\"items\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n (itemClick)=\"selectItem($event)\"\n ></gantt-table>\n </ng-template>\n <ng-template #mainTemplate>\n <gantt-main\n [groups]=\"groups\"\n [items]=\"items\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </ng-template>\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 { GanttCalendarComponent } from './components/calendar/calendar.component';\nimport { GanttTableComponent } from './components/table/gantt-table.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';\n\n@NgModule({\n imports: [CommonModule, DragDropModule],\n exports: [\n NgxGanttComponent,\n NgxGanttTableComponent,\n NgxGanttTableColumnComponent,\n NgxGanttRootComponent,\n NgxGanttBarComponent,\n NgxGanttRangeComponent\n ],\n declarations: [\n NgxGanttComponent,\n NgxGanttTableComponent,\n NgxGanttTableColumnComponent,\n GanttTableComponent,\n GanttMainComponent,\n GanttCalendarComponent,\n GanttLinksComponent,\n NgxGanttBarComponent,\n GanttIconComponent,\n GanttDragBackdropComponent,\n NgxGanttRangeComponent,\n NgxGanttRootComponent,\n IsGanttRangeItemPipe,\n IsGanttBarItemPipe,\n IsGanttCustomItemPipe\n ],\n providers: [\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 './utils/date';\nexport * from './class';\nexport * from './views/view';\nexport * from './gantt-item-upper';\nexport * from './gantt.pipe';\nexport * from './gantt-print.service';\nexport * from './gantt.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["viewOptions"],"mappings":"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"}