@worktile/gantt 11.0.2 → 12.0.1

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 (232) hide show
  1. package/.all-contributorsrc +53 -0
  2. package/.angulardoc.json +4 -0
  3. package/.circleci/config.yml +17 -0
  4. package/.coveralls.yml +1 -0
  5. package/.docgenirc.js +64 -0
  6. package/.editorconfig +22 -0
  7. package/.prettierrc +24 -0
  8. package/.travis.yml +23 -0
  9. package/CHANGELOG.md +564 -0
  10. package/Dockerfile +4 -0
  11. package/LICENSE +21 -0
  12. package/README.md +116 -13
  13. package/angular.json +136 -0
  14. package/docs/guides/basic/components.md +54 -0
  15. package/docs/guides/basic/event.md +70 -0
  16. package/docs/guides/basic/index.md +4 -0
  17. package/docs/guides/basic/style.md +68 -0
  18. package/docs/guides/basic/type.md +70 -0
  19. package/docs/guides/basic/usage.md +189 -0
  20. package/docs/guides/index.md +5 -0
  21. package/docs/guides/intro/getting-started.md +79 -0
  22. package/docs/guides/intro/index.md +51 -0
  23. package/docs/index.md +0 -0
  24. package/example/browserslist +12 -0
  25. package/example/src/app/app-routing.module.ts +26 -0
  26. package/example/src/app/app.component.html +2 -0
  27. package/example/src/app/app.component.ts +11 -0
  28. package/example/src/app/app.module.ts +57 -0
  29. package/example/src/app/components/components.component.html +6 -0
  30. package/example/src/app/components/components.component.ts +33 -0
  31. package/example/src/app/configuration/parameters/api/zh-cn.js +350 -0
  32. package/example/src/app/configuration/parameters/doc/zh-cn.md +5 -0
  33. package/example/src/app/gantt/gantt.component.html +51 -0
  34. package/example/src/app/gantt/gantt.component.ts +119 -0
  35. package/example/src/app/gantt-advanced/component/flat.component.html +30 -0
  36. package/example/src/app/gantt-advanced/component/flat.component.ts +72 -0
  37. package/example/src/app/gantt-advanced/component/flat.scss +31 -0
  38. package/example/src/app/gantt-advanced/gantt-advanced.component.html +32 -0
  39. package/example/src/app/gantt-advanced/gantt-advanced.component.ts +34 -0
  40. package/example/src/app/gantt-advanced/mocks.ts +158 -0
  41. package/example/src/app/gantt-groups/gantt-groups.component.html +42 -0
  42. package/example/src/app/gantt-groups/gantt-groups.component.ts +62 -0
  43. package/example/src/app/gantt-range/gantt-range.component.html +66 -0
  44. package/example/src/app/gantt-range/gantt-range.component.ts +67 -0
  45. package/example/src/app/gantt-range/mocks.ts +150 -0
  46. package/example/src/app/helper.ts +38 -0
  47. package/example/src/assets/.gitkeep +0 -0
  48. package/example/src/environments/environment.prod.ts +3 -0
  49. package/example/src/environments/environment.ts +16 -0
  50. package/example/src/favicon.ico +0 -0
  51. package/example/src/index.html +13 -0
  52. package/example/src/main.ts +12 -0
  53. package/example/src/polyfills.ts +63 -0
  54. package/example/src/styles.scss +56 -0
  55. package/example/tsconfig.app.json +18 -0
  56. package/nginx.conf +17 -0
  57. package/package.json +113 -17
  58. package/packages/gantt/README.md +24 -0
  59. package/packages/gantt/karma.conf.js +46 -0
  60. package/packages/gantt/ng-package.json +7 -0
  61. package/packages/gantt/ng-package.prod.json +7 -0
  62. package/packages/gantt/package.json +16 -0
  63. package/packages/gantt/src/class/date-point.ts +14 -0
  64. package/{class/event.d.ts → packages/gantt/src/class/event.ts} +12 -6
  65. package/packages/gantt/src/class/group.ts +36 -0
  66. package/{class/index.d.ts → packages/gantt/src/class/index.ts} +0 -0
  67. package/packages/gantt/src/class/item.ts +129 -0
  68. package/packages/gantt/src/class/test/group.spec.ts +21 -0
  69. package/packages/gantt/src/class/test/item.spec.ts +102 -0
  70. package/packages/gantt/src/class/view-type.ts +7 -0
  71. package/packages/gantt/src/components/bar/bar-drag.ts +298 -0
  72. package/packages/gantt/src/components/bar/bar.component.html +17 -0
  73. package/packages/gantt/src/components/bar/bar.component.scss +169 -0
  74. package/packages/gantt/src/components/bar/bar.component.ts +109 -0
  75. package/packages/gantt/src/components/bar/test/bar.component.spec.ts +54 -0
  76. package/packages/gantt/src/components/bar/test/bar.drag.spec.ts +196 -0
  77. package/packages/gantt/src/components/calendar/calendar.component.html +52 -0
  78. package/packages/gantt/src/components/calendar/calendar.component.scss +77 -0
  79. package/packages/gantt/src/components/calendar/calendar.component.ts +100 -0
  80. package/packages/gantt/src/components/drag-backdrop/drag-backdrop.component.html +6 -0
  81. package/packages/gantt/src/components/drag-backdrop/drag-backdrop.component.scss +48 -0
  82. package/packages/gantt/src/components/drag-backdrop/drag-backdrop.component.ts +13 -0
  83. package/packages/gantt/src/components/icon/icon.component.scss +13 -0
  84. package/packages/gantt/src/components/icon/icon.component.ts +28 -0
  85. package/packages/gantt/src/components/icon/icons.ts +86 -0
  86. package/packages/gantt/src/components/links/links.component.html +19 -0
  87. package/packages/gantt/src/components/links/links.component.scss +27 -0
  88. package/packages/gantt/src/components/links/links.component.ts +263 -0
  89. package/packages/gantt/src/components/main/gantt-main.component.html +35 -0
  90. package/packages/gantt/src/components/main/gantt-main.component.ts +35 -0
  91. package/packages/gantt/src/components/range/range.component.html +8 -0
  92. package/packages/gantt/src/components/range/range.component.scss +35 -0
  93. package/packages/gantt/src/components/range/range.component.ts +27 -0
  94. package/packages/gantt/src/components/range/test/range.component.spec.ts +80 -0
  95. package/packages/gantt/src/components/table/gantt-table.component.html +105 -0
  96. package/packages/gantt/src/components/table/gantt-table.component.scss +144 -0
  97. package/packages/gantt/src/components/table/gantt-table.component.ts +166 -0
  98. package/packages/gantt/src/components/table/test/table.spec.ts +129 -0
  99. package/packages/gantt/src/gantt-abstract.ts +14 -0
  100. package/packages/gantt/src/gantt-dom.service.ts +134 -0
  101. package/packages/gantt/src/gantt-drag-container.ts +73 -0
  102. package/packages/gantt/src/gantt-item-upper.ts +50 -0
  103. package/packages/gantt/src/gantt-print.service.ts +104 -0
  104. package/packages/gantt/src/gantt-upper.ts +289 -0
  105. package/packages/gantt/src/gantt.component.html +18 -0
  106. package/packages/gantt/src/gantt.component.scss +77 -0
  107. package/packages/gantt/src/gantt.component.ts +134 -0
  108. package/packages/gantt/src/gantt.module.ts +47 -0
  109. package/packages/gantt/src/gantt.pipe.ts +31 -0
  110. package/packages/gantt/src/gantt.styles.ts +28 -0
  111. package/{public-api.d.ts → packages/gantt/src/public-api.ts} +6 -0
  112. package/packages/gantt/src/root.component.html +12 -0
  113. package/packages/gantt/src/root.component.ts +121 -0
  114. package/packages/gantt/src/styles/index.scss +9 -0
  115. package/packages/gantt/src/styles/variables.scss +46 -0
  116. package/packages/gantt/src/table/gantt-column.component.ts +25 -0
  117. package/packages/gantt/src/table/gantt-table.component.ts +14 -0
  118. package/packages/gantt/src/table/test/table.spec.ts +56 -0
  119. package/packages/gantt/src/test/gantt.component.spec.ts +404 -0
  120. package/packages/gantt/src/test/mocks/data.ts +303 -0
  121. package/packages/gantt/src/test.ts +21 -0
  122. package/packages/gantt/src/utils/date.ts +276 -0
  123. package/packages/gantt/src/utils/helpers.ts +66 -0
  124. package/packages/gantt/src/utils/test/date.spec.ts +105 -0
  125. package/packages/gantt/src/utils/test/helpers.spec.ts +73 -0
  126. package/packages/gantt/src/utils/testing.ts +64 -0
  127. package/packages/gantt/src/views/day.ts +74 -0
  128. package/packages/gantt/src/views/factory.ts +25 -0
  129. package/packages/gantt/src/views/month.ts +66 -0
  130. package/packages/gantt/src/views/quarter.ts +68 -0
  131. package/packages/gantt/src/views/test/day.spec.ts +45 -0
  132. package/packages/gantt/src/views/test/factory.spec.ts +41 -0
  133. package/packages/gantt/src/views/test/mock.ts +14 -0
  134. package/packages/gantt/src/views/test/month.spec.ts +45 -0
  135. package/packages/gantt/src/views/test/quarter.spec.ts +45 -0
  136. package/packages/gantt/src/views/test/view.spec.ts +144 -0
  137. package/packages/gantt/src/views/test/week.spec.ts +45 -0
  138. package/packages/gantt/src/views/test/year.spec.ts +45 -0
  139. package/packages/gantt/src/views/view.ts +186 -0
  140. package/packages/gantt/src/views/week.ts +66 -0
  141. package/packages/gantt/src/views/year.ts +62 -0
  142. package/packages/gantt/tsconfig.lib.json +20 -0
  143. package/packages/gantt/tsconfig.lib.prod.json +9 -0
  144. package/packages/gantt/tsconfig.schematics.json +25 -0
  145. package/packages/gantt/tsconfig.spec.json +17 -0
  146. package/packages/gantt/tslint.json +18 -0
  147. package/scss-bundle.config.json +7 -0
  148. package/tsconfig.json +26 -0
  149. package/tslint.json +51 -0
  150. package/bundles/worktile-gantt.umd.js +0 -3129
  151. package/bundles/worktile-gantt.umd.js.map +0 -1
  152. package/bundles/worktile-gantt.umd.min.js +0 -16
  153. package/bundles/worktile-gantt.umd.min.js.map +0 -1
  154. package/class/date-point.d.ts +0 -15
  155. package/class/group.d.ts +0 -22
  156. package/class/item.d.ts +0 -70
  157. package/class/view-type.d.ts +0 -7
  158. package/components/bar/bar-drag.d.ts +0 -34
  159. package/components/bar/bar.component.d.ts +0 -23
  160. package/components/calendar/calendar.component.d.ts +0 -25
  161. package/components/drag-backdrop/drag-backdrop.component.d.ts +0 -6
  162. package/components/icon/icon.component.d.ts +0 -10
  163. package/components/icon/icons.d.ts +0 -8
  164. package/components/links/links.component.d.ts +0 -44
  165. package/components/main/gantt-main.component.d.ts +0 -18
  166. package/components/range/range.component.d.ts +0 -10
  167. package/components/table/gantt-table.component.d.ts +0 -31
  168. package/esm2015/class/date-point.js +0 -10
  169. package/esm2015/class/event.js +0 -13
  170. package/esm2015/class/group.js +0 -17
  171. package/esm2015/class/index.js +0 -6
  172. package/esm2015/class/item.js +0 -78
  173. package/esm2015/class/view-type.js +0 -9
  174. package/esm2015/components/bar/bar-drag.js +0 -266
  175. package/esm2015/components/bar/bar.component.js +0 -91
  176. package/esm2015/components/calendar/calendar.component.js +0 -82
  177. package/esm2015/components/drag-backdrop/drag-backdrop.component.js +0 -18
  178. package/esm2015/components/icon/icon.component.js +0 -36
  179. package/esm2015/components/icon/icons.js +0 -87
  180. package/esm2015/components/links/links.component.js +0 -207
  181. package/esm2015/components/main/gantt-main.component.js +0 -35
  182. package/esm2015/components/range/range.component.js +0 -32
  183. package/esm2015/components/table/gantt-table.component.js +0 -128
  184. package/esm2015/gantt-dom.service.js +0 -101
  185. package/esm2015/gantt-drag-container.js +0 -57
  186. package/esm2015/gantt-item-upper.js +0 -55
  187. package/esm2015/gantt-print.service.js +0 -92
  188. package/esm2015/gantt-upper.js +0 -231
  189. package/esm2015/gantt.component.js +0 -105
  190. package/esm2015/gantt.module.js +0 -43
  191. package/esm2015/gantt.pipe.js +0 -33
  192. package/esm2015/gantt.styles.js +0 -15
  193. package/esm2015/public-api.js +0 -16
  194. package/esm2015/root.component.js +0 -111
  195. package/esm2015/table/gantt-column.component.js +0 -28
  196. package/esm2015/table/gantt-table.component.js +0 -18
  197. package/esm2015/utils/date.js +0 -160
  198. package/esm2015/utils/helpers.js +0 -45
  199. package/esm2015/views/day.js +0 -54
  200. package/esm2015/views/factory.js +0 -23
  201. package/esm2015/views/month.js +0 -48
  202. package/esm2015/views/quarter.js +0 -51
  203. package/esm2015/views/view.js +0 -121
  204. package/esm2015/views/week.js +0 -49
  205. package/esm2015/views/year.js +0 -50
  206. package/esm2015/worktile-gantt.js +0 -16
  207. package/fesm2015/worktile-gantt.js +0 -2491
  208. package/fesm2015/worktile-gantt.js.map +0 -1
  209. package/gantt-dom.service.d.ts +0 -29
  210. package/gantt-drag-container.d.ts +0 -20
  211. package/gantt-item-upper.d.ts +0 -17
  212. package/gantt-print.service.d.ts +0 -10
  213. package/gantt-upper.d.ts +0 -62
  214. package/gantt.component.d.ts +0 -28
  215. package/gantt.module.d.ts +0 -2
  216. package/gantt.pipe.d.ts +0 -11
  217. package/gantt.styles.d.ts +0 -15
  218. package/root.component.d.ts +0 -25
  219. package/style.scss +0 -645
  220. package/table/gantt-column.component.d.ts +0 -12
  221. package/table/gantt-table.component.d.ts +0 -7
  222. package/utils/date.d.ts +0 -59
  223. package/utils/helpers.d.ts +0 -11
  224. package/views/day.d.ts +0 -14
  225. package/views/factory.d.ts +0 -8
  226. package/views/month.d.ts +0 -12
  227. package/views/quarter.d.ts +0 -12
  228. package/views/view.d.ts +0 -56
  229. package/views/week.d.ts +0 -12
  230. package/views/year.d.ts +0 -12
  231. package/worktile-gantt.d.ts +0 -15
  232. 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","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","_a","_b","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","find","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.items = [];\n this.originItems = uniqBy(this.originItems, 'id');\n // 根据上一次数据展开状态同步新的数据展开状态\n this.originItems.forEach((item) => {\n if (!this.firstChange) {\n item.expanded = item.expanded || this.expandedItemIds.includes(item.id);\n }\n });\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"]}
@@ -1,15 +0,0 @@
1
- import { GanttDate } from '../utils/date';
2
- export declare class GanttDatePoint {
3
- start: GanttDate;
4
- text: string;
5
- x: number;
6
- y: number;
7
- additions?: {
8
- isWeekend: boolean;
9
- isToday: boolean;
10
- };
11
- constructor(start: GanttDate, text: string, x: number, y: number, additions?: {
12
- isWeekend: boolean;
13
- isToday: boolean;
14
- });
15
- }
package/class/group.d.ts DELETED
@@ -1,22 +0,0 @@
1
- import { GanttItemInternal } from './item';
2
- export interface GanttGroup<T = unknown> {
3
- id: string;
4
- title: string;
5
- expanded?: boolean;
6
- origin?: T;
7
- class?: string;
8
- }
9
- export declare class GanttGroupInternal {
10
- id: string;
11
- title: string;
12
- origin: GanttGroup;
13
- items: GanttItemInternal[];
14
- mergedItems: GanttItemInternal[][];
15
- expanded?: boolean;
16
- refs?: {
17
- height?: number;
18
- };
19
- class?: string;
20
- constructor(group: GanttGroup);
21
- setExpand(expanded: boolean): void;
22
- }
package/class/item.d.ts DELETED
@@ -1,70 +0,0 @@
1
- import { GanttDate } from '../utils/date';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { GanttViewType } from './view-type';
4
- interface GanttItemRefs {
5
- width: number;
6
- x: number;
7
- y: number;
8
- }
9
- export declare enum GanttItemType {
10
- bar = "bar",
11
- range = "range",
12
- custom = "custom"
13
- }
14
- export interface GanttItem<T = unknown> {
15
- id: string;
16
- title: string;
17
- start?: number;
18
- end?: number;
19
- group_id?: string;
20
- links?: string[];
21
- draggable?: boolean;
22
- linkable?: boolean;
23
- expandable?: boolean;
24
- expanded?: boolean;
25
- children?: GanttItem[];
26
- color?: string;
27
- barStyle?: Partial<CSSStyleDeclaration>;
28
- origin?: T;
29
- type?: GanttItemType;
30
- progress?: number;
31
- }
32
- export declare class GanttItemInternal {
33
- id: string;
34
- title: string;
35
- start: GanttDate;
36
- end: GanttDate;
37
- links: string[];
38
- color?: string;
39
- barStyle?: Partial<CSSStyleDeclaration>;
40
- draggable?: boolean;
41
- linkable?: boolean;
42
- origin: GanttItem;
43
- expandable?: boolean;
44
- expanded?: boolean;
45
- loading: boolean;
46
- children: GanttItemInternal[];
47
- type?: GanttItemType;
48
- progress?: number;
49
- viewType?: GanttViewType;
50
- get refs(): {
51
- width: number;
52
- x?: number;
53
- y?: number;
54
- };
55
- refs$: BehaviorSubject<{
56
- width: number;
57
- x?: number;
58
- y?: number;
59
- }>;
60
- constructor(item: GanttItem, options?: {
61
- viewType: GanttViewType;
62
- });
63
- fillItemStartOrEnd(item: GanttItem): void;
64
- updateRefs(refs: GanttItemRefs): void;
65
- updateDate(start: GanttDate, end: GanttDate): void;
66
- addChildren(items: GanttItem[]): void;
67
- setExpand(expanded: boolean): void;
68
- addLink(linkId: string): void;
69
- }
70
- export {};
@@ -1,7 +0,0 @@
1
- export declare enum GanttViewType {
2
- day = "day",
3
- quarter = "quarter",
4
- month = "month",
5
- year = "year",
6
- week = "week"
7
- }