@worktile/gantt 11.0.3 → 12.0.2

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.
Files changed (59) hide show
  1. package/bundles/worktile-gantt.umd.js +1261 -1096
  2. package/bundles/worktile-gantt.umd.js.map +1 -1
  3. package/components/bar/bar-drag.d.ts +3 -0
  4. package/components/bar/bar.component.d.ts +3 -0
  5. package/components/calendar/calendar.component.d.ts +4 -1
  6. package/components/drag-backdrop/drag-backdrop.component.d.ts +3 -0
  7. package/components/icon/icon.component.d.ts +3 -0
  8. package/components/links/links.component.d.ts +3 -0
  9. package/components/main/gantt-main.component.d.ts +3 -0
  10. package/components/range/range.component.d.ts +3 -0
  11. package/components/table/gantt-table.component.d.ts +8 -3
  12. package/esm2015/components/bar/bar-drag.js +10 -12
  13. package/esm2015/components/bar/bar.component.js +29 -22
  14. package/esm2015/components/calendar/calendar.component.js +21 -17
  15. package/esm2015/components/drag-backdrop/drag-backdrop.component.js +14 -11
  16. package/esm2015/components/icon/icon.component.js +17 -15
  17. package/esm2015/components/links/links.component.js +28 -22
  18. package/esm2015/components/main/gantt-main.component.js +40 -22
  19. package/esm2015/components/range/range.component.js +21 -16
  20. package/esm2015/components/table/gantt-table.component.js +41 -23
  21. package/esm2015/gantt-abstract.js +3 -0
  22. package/esm2015/gantt-dom.service.js +7 -5
  23. package/esm2015/gantt-drag-container.js +7 -5
  24. package/esm2015/gantt-item-upper.js +17 -14
  25. package/esm2015/gantt-print.service.js +7 -5
  26. package/esm2015/gantt-upper.js +65 -51
  27. package/esm2015/gantt.component.js +60 -34
  28. package/esm2015/gantt.module.js +56 -25
  29. package/esm2015/gantt.pipe.js +26 -16
  30. package/esm2015/public-api.js +3 -1
  31. package/esm2015/root.component.js +37 -25
  32. package/esm2015/table/gantt-column.component.js +26 -17
  33. package/esm2015/table/gantt-table.component.js +13 -11
  34. package/esm2015/utils/helpers.js +11 -1
  35. package/esm2015/views/view.js +1 -1
  36. package/esm2015/views/year.js +3 -3
  37. package/esm2015/worktile-gantt.js +1 -12
  38. package/fesm2015/worktile-gantt.js +1342 -1205
  39. package/fesm2015/worktile-gantt.js.map +1 -1
  40. package/gantt-abstract.d.ts +12 -0
  41. package/gantt-dom.service.d.ts +3 -0
  42. package/gantt-drag-container.d.ts +3 -0
  43. package/gantt-item-upper.d.ts +3 -0
  44. package/gantt-print.service.d.ts +3 -0
  45. package/gantt-upper.d.ts +3 -1
  46. package/gantt.component.d.ts +3 -2
  47. package/gantt.module.d.ts +19 -0
  48. package/gantt.pipe.d.ts +7 -0
  49. package/{style.scss → main.bundle.scss} +63 -63
  50. package/package.json +4 -5
  51. package/public-api.d.ts +2 -0
  52. package/root.component.d.ts +3 -0
  53. package/table/gantt-column.component.d.ts +3 -0
  54. package/table/gantt-table.component.d.ts +3 -0
  55. package/utils/helpers.d.ts +2 -1
  56. package/worktile-gantt.d.ts +1 -11
  57. package/bundles/worktile-gantt.umd.min.js +0 -16
  58. package/bundles/worktile-gantt.umd.min.js.map +0 -1
  59. package/worktile-gantt.metadata.json +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","../../../packages/gantt/src/class/view-type.ts","../../../packages/gantt/src/class/item.ts","../../../packages/gantt/src/class/date-point.ts","../../../packages/gantt/src/class/event.ts","../../../packages/gantt/src/utils/date.ts","../../../packages/gantt/src/class/group.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/gantt.styles.ts","../../../packages/gantt/src/utils/helpers.ts","../../../packages/gantt/src/gantt-upper.ts","../../../packages/gantt/src/views/factory.ts","../../../packages/gantt/src/table/gantt-column.component.ts","../../../packages/gantt/src/table/gantt-table.component.ts","../../../packages/gantt/src/gantt.component.ts","../../../packages/gantt/src/components/calendar/calendar.component.ts","../../../packages/gantt/src/components/table/gantt-table.component.ts","../../../packages/gantt/src/gantt-dom.service.ts","../../../packages/gantt/src/gantt-drag-container.ts","../../../packages/gantt/src/components/bar/bar-drag.ts","../../../packages/gantt/src/gantt-item-upper.ts","../../../packages/gantt/src/components/bar/bar.component.ts","../../../packages/gantt/src/components/main/gantt-main.component.ts","../../../packages/gantt/src/components/icon/icons.ts","../../../packages/gantt/src/components/icon/icon.component.ts","../../../packages/gantt/src/components/links/links.component.ts","../../../packages/gantt/src/components/drag-backdrop/drag-backdrop.component.ts","../../../packages/gantt/src/gantt-print.service.ts","../../../packages/gantt/src/root.component.ts","../../../packages/gantt/src/components/range/range.component.ts","../../../packages/gantt/src/gantt.pipe.ts","../../../packages/gantt/src/gantt.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","__read","n","r","e","ar","push","error","__spread","arguments","concat","GanttViewType","GanttItemType","start","text","x","y","additions","GanttDate","date","Date","Error","JSON","stringify","toString","fromUnixTime","getYear","getFullYear","getMonth","getDay","getTime","getDate","getHours","getMinutes","getSeconds","getMilliseconds","getWeek","options","weekStartsOn","getDaysInMonth","getDaysInQuarter","differenceInCalendarDays","endOfQuarter","addSeconds","startOfQuarter","getDaysInYear","endOfYear","startOfYear","setDate","dayOfMonth","clone","add","amount","unit","addMinutes","addHours","addDays","addWeeks","addMonths","addQuarters","addYears","startOfDay","startOfWeek","startOfMonth","endOfDay","endOfWeek","endOfMonth","getUnixTime","format","mat","isWeekend","isToday","GanttItemInternal","item","_this","refs$","BehaviorSubject","origin","id","links","color","barStyle","linkable","undefined","draggable","expandable","children","expanded","end","viewType","month","map","subItem","type","bar","progress","fillItemStartOrEnd","defineProperty","getValue","addInterval","day","week","updateRefs","refs","updateDate","addChildren","items","setExpand","addLink","linkId","GanttGroupInternal","group","title","mergedItems","class","primaryDatePointTop","viewOptions","min","max","GanttView","showTimeline","assign","startDate","isCustom","startOf","endDate","endOf","start$","end$","initialize","getDateIntervalWidth","result","days","differenceInDays","Math","abs","getDayOccupancyWidth","Number","toFixed","primaryDatePoints","getPrimaryDatePoints","secondaryDatePoints","getSecondaryDatePoints","width","getWidth","cellWidth","getCellWidth","primaryWidth","getPrimaryWidth","addStartDate","addAmount","addUnit","addEndDate","getTodayXPoint","toady","getXPointByDate","getDateByXPoint","indexOfSecondaryDate","floor","matchDate","dayWidth","getDateRangeWidth","GanttViewMonth","_super","quarters","differenceInCalendarQuarters","points","point","GanttDatePoint","months","eachMonthOfInterval","GanttViewQuarter","years","eachYearOfInterval","GanttViewDay","showWeekBackdrop","weeks","eachWeekOfInterval","weekStart","increaseWeek","eachDayOfInterval","GanttViewWeek","GanttViewYear","differenceInCalendarYears","defaultStyles","lineHeight","barHeight","isNumber","hexToRgb","opacity","test","parseInt","slice","flatten","array","reduce","pre","cur","isArray","recursiveItems","forEach","apply","GanttUpper","elementRef","cdr","ngZone","originItems","originGroups","showTodayLine","loadOnScroll","EventEmitter","dragStarted","dragEnded","barClick","linkDragEnded","groups","viewChange","expandChange","firstChange","unsubscribe$","Subject","expandedItemIds","ganttClass","nativeElement","createView","viewDate","getViewDate","view","quarter","year","createViewFactory","setupGroups","collapsedIds","filter","groupsMap","includes","setupItems","key","valuesMap","_key","originItem","oldItem","find","_a","_b","group_id","setupExpandedState","computeRefs","groupItems","computeItemsRefs","expandGroups","detectChanges","onInit","styles","onStable","pipe","take","subscribe","element","style","dragContainer","event","emit","skip","takeUntil","onChanges","changes","currentValue","onDestroy","complete","_i","trackBy","index","expandGroup","expandAll","collapseAll","Directive","ElementRef","ChangeDetectorRef","NgZone","Input","args","Output","ContentChild","static","HostBinding","GANTT_UPPER_TOKEN","InjectionToken","NgxGanttTableColumnComponent","ganttUpper","columnWidth","coerceCssPixelValue","ngOnInit","Component","selector","template","decorators","Inject","NgxGanttTableComponent","columnChanges","NgxGanttComponent","maxLevel","linkDragStarted","lineClick","ngUnsubscribe$","sideTableWidth","ngAfterViewInit","columns","startWith","column","ngOnChanges","expandChildren","async","childrenResolve","loading","finalize","ngOnDestroy","changeDetection","ChangeDetectionStrategy","OnPush","providers","provide","useExisting","ContentChildren","descendants","GanttCalendarComponent","headerHeight","mainHeight","todayHeight","todayWidth","todayBorderRadius","viewTypes","className","setTodayPoint","today","todayEle","getElementsByClassName","rect","line","left","top","innerHTML","bottom","display","merge","GanttTableComponent","gantt","ganttTableClass","ganttTableEmptyClass","columnList","dragFixed","config","movedWidth","minWidth","target","transform","originWidth","source","dragStartLeft","getBoundingClientRect","dragMoved","showAuxiliaryLine","columnDragEnded","table","hideAuxiliaryLine","reset","tableDragEnded","tableWidth","dragWidth","lastColumnWidth","distributeWidth","tableRect","targetRect","distance","draglineElementRef","ViewChild","ScrollDirection","GanttDomService","monitorScrollChange","fromEvent","mainContainer","sideContainer","syncScroll","currentTarget","calendarOverlay","scrollLeft","scrollTop","disableBrowserWheelEvent","container","delta","deltaX","offsetWidth","scrollWidth","preventDefault","root","side","getViewerScroll","pairwise","previous","current","direction","NONE","LEFT","clientWidth","RIGHT","getResize","window","auditTime","scrollMainContainer","Injectable","GanttDragContainer","linkDragEntered","emitLinkDragStarted","from","linkDraggingId","linkDragFrom","linkDragSource","linkDragTarget","emitLinkDragEntered","emitLinkDragLeaved","emitLinkDragEnded","activeClass","linkDropClass","createSvgElement","qualifiedName","document","createElementNS","classList","GanttBarDrag","dragDrop","dom","dragRefs","destroy$","createMouseEvents","barElement","remove","createBarDrag","dragRef","createDrag","lockAxis","started","setDraggingStyles","moved","openDragBackdrop","ended","clearDraggingStyles","closeDragBackdrop","barDragRef","createBarHandleDrags","querySelectorAll","handle","isBefore","withBoundaryElement","createLinkHandleDrags","beforeStarted","pointerEvents","disabled","createLinkDraggingLine","positions","calcLinkLinePositions","linkDraggingLine","setAttribute","x1","y1","x2","y2","destroyLinkDraggingLine","dragElement","dragMaskElement","querySelector","dragBackdropElement","rootRect","dragRect","right","layerRect","parentElement","height","svgElement","linElement","appendChild","createDrags","dragDisabled","linkDragDisabled","dragHandlesRefs","linkDragRefs","dispose","DragDrop","GanttItemUpper","setPositions","itemElement","range","rangeHeight","linearGradient","sideOrCorner","stop","NgxGanttBarComponent","drag","ganttItemClass","setContentBackground","onBarClick","contentElement","contentElementRef","background","borderRadius","contentProgressElement","stopPropagation","GanttMainComponent","ganttMainClass","icons","angle-right","angle-down","plus-square","minus-square","empty","GanttIconComponent","isIcon","name","setSvg","iconSvg","LinkColors","GanttDragBackdropComponent","backdropClass","GanttLinksComponent","ganttDragContainer","linkItems","bezierWeight","ganttLinksOverlay","buildLinks","visibility","computeItemPosition","itemNum_1","groupNum_1","itemIndex","before","after","generatePath","x4","y4","dx","x3","centerX","centerY","controlX","controlY","path","blocked","default","onLineClick","link","mouseEnterPath","active","mouseLeavePath","GanttPrintService","setInlineStyles","targetElem","svgElements","getElementsByTagName","svgElements_1","svgElements_1_1","recursElementChildren","node","getComputedStyle","transformProperties_1","transformProperties_1_1","transformProperty","_c","childNodes","_d","child","register","print","ignoreElementClass","printWidth","printHeight","offsetHeight","scrollHeight","html2canvas","logging","allowTaint","useCORS","ignoreElements","contains","onclone","cloneDocument","cloneGanttDom","replace","cloneGanttContainerDom","cloneCalendarOverlay","cloneLinksOverlay","overflow","backgroundColor","then","canvas","createElement","dataUrl","toDataURL","download","href","click","NgxGanttRootComponent","printService","setupScrollClass","setupResize","setupViewScroll","scrollToToday","disabledLoadOnScroll","dates_1","run","dates_2","Optional","NgxGanttRangeComponent","ganttRangeClass","IsGanttRangeItemPipe","Pipe","IsGanttBarItemPipe","IsGanttCustomItemPipe","custom","NgModule","imports","CommonModule","DragDropModule","exports","declarations"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\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 { 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","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","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 { GanttDate, differenceInDays, GanttDateUtil } from '../utils/date';\nimport { GanttDatePoint } from '../class/date-point';\nimport { BehaviorSubject } from 'rxjs';\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}\n\nconst viewOptions: GanttViewOptions = {\n min: new GanttDate().addYears(-1).startOfYear(),\n max: new GanttDate().addYears(1).endOfYear()\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('yyyy年QQQ'),\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.getMonth() + 1}月`,\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('yyyy')}年`,\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('QQQ'),\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('yyyy年MM月'),\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('yyyy年'),\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('w')}周`,\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(-1).startOfYear(),\n end: new GanttDate().addYears(1).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('yyyy')}年`,\n i * this.getCellWidth() + this.getCellWidth() / 2,\n pointTop\n );\n points.push(point);\n }\n return points;\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 { 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","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} 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 } from './utils/helpers';\nimport { GanttDragContainer } from './gantt-drag-container';\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 @Output() loadOnScroll = new EventEmitter<GanttLoadOnScrollEvent>();\n\n @Output() dragStarted = 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 private groupsMap: { [key: string]: GanttGroupInternal };\n\n private expandedItemIds: string[] = [];\n\n @HostBinding('class.gantt') ganttClass = true;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, protected cdr: ChangeDetectorRef, protected ngZone: NgZone) {}\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\n // 根据上一次数据展开状态同步新的数据展开状态\n this.originItems.forEach((originItem) => {\n const oldItem = this.items.find((item) => {\n return item.id === originItem.id;\n });\n if (!this.firstChange) {\n if (oldItem && !oldItem.children?.length && originItem.children?.length) {\n originItem.expanded = originItem.expanded || this.expandedItemIds.includes(originItem.id);\n } else {\n originItem.expanded = this.expandedItemIds.includes(originItem.id);\n }\n }\n });\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 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 this.expandedItemIds = [];\n items.forEach((item) => {\n if (item.origin.expanded) {\n this.expandedItemIds.push(item.id);\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 onInit() {\n this.styles = Object.assign({}, defaultStyles, this.styles);\n this.createView();\n this.setupGroups();\n this.setupItems();\n this.computeRefs();\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 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(item: GanttGroupInternal | GanttItemInternal, index: number) {\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\nexport const GANTT_UPPER_TOKEN = new InjectionToken<GanttUpper>('GANTT_UPPER_TOKEN');\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","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, EventEmitter, OnInit, Output } 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 constructor() {}\n\n ngOnInit() {}\n}\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 ViewChild,\n ContentChild,\n TemplateRef\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 } 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';\n\nexport const defaultColumnWidth = 100;\nexport const minColumnWidth = 80;\n\n@Component({\n selector: 'ngx-gantt',\n templateUrl: './gantt.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: GANTT_UPPER_TOKEN,\n useExisting: NgxGanttComponent\n }\n ]\n})\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 @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(elementRef: ElementRef<HTMLElement>, cdr: ChangeDetectorRef, ngZone: NgZone) {\n super(elementRef, cdr, ngZone);\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 ngOnDestroy() {\n super.onDestroy();\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(point: GanttDatePoint, index: number) {\n return point.text || index;\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\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} from '@angular/core';\nimport { GanttItemInternal, GanttGroupInternal } from '../../class';\nimport { NgxGanttTableColumnComponent } from '../../table/gantt-column.component';\nimport { defaultColumnWidth, minColumnWidth, NgxGanttComponent } from '../../gantt.component';\nimport { CdkDragEnd, CdkDragMove, CdkDragStart } from '@angular/cdk/drag-drop';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\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 @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(public gantt: NgxGanttComponent, private elementRef: ElementRef) {}\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(item: GanttItemInternal) {\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","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 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, 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 });\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 }\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 }\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 { 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 {\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","import { 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(item: GanttGroupInternal | GanttItemInternal, index: number) {\n return item.id || index;\n }\n}\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 {\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","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","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 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","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","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 { 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';\n\n@NgModule({\n imports: [CommonModule, DragDropModule],\n exports: [NgxGanttComponent, NgxGanttTableComponent, NgxGanttTableColumnComponent, NgxGanttRootComponent, NgxGanttBarComponent],\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})\nexport class NgxGanttModule {}\n"]}