@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,87 +0,0 @@
1
- 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>`;
2
- const 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>`;
3
- const 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>`;
4
- const 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>`;
5
- const 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">
6
- <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)">
7
- <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.6s" repeatCount="indefinite"></animateTransform>
8
- </path>
9
- </svg>`;
10
- const emptyIcon = `<svg
11
- width="148px"
12
- height="134px"
13
- viewBox="0 0 148 134"
14
- version="1.1"
15
- xmlns="http://www.w3.org/2000/svg"
16
- xmlns:xlink="http://www.w3.org/1999/xlink"
17
- >
18
- <defs>
19
- <filter x="0.0%" y="0.0%" width="100.0%" height="100.0%" filterUnits="objectBoundingBox" id="filter-1">
20
- <feGaussianBlur stdDeviation="0" in="SourceGraphic"></feGaussianBlur>
21
- </filter>
22
- </defs>
23
- <g id="148x134" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
24
- <g id="编组-6" transform="translate(1.000000, 1.000000)">
25
- <ellipse
26
- id="椭圆形"
27
- fill="#EDEEF2"
28
- opacity="0.3"
29
- filter="url(#filter-1)"
30
- cx="73.0800017"
31
- cy="115.920003"
32
- rx="73.0800017"
33
- ry="16.8000004"
34
- ></ellipse>
35
- <g id="编组-5" transform="translate(15.120000, 0.000000)">
36
- <polygon
37
- id="矩形"
38
- fill="#E2E4E9"
39
- points="19.2789848 49.5600011 99.1200023 48.7200011 117.600003 75.9297673 117.600003 92.313049 0 92.313049 0 75.0356267"
40
- ></polygon>
41
- <path
42
- 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"
43
- id="矩形"
44
- fill="#F9FAFB"
45
- ></path>
46
- <path
47
- 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"
48
- id="矩形"
49
- fill="#E8EAEE"
50
- ></path>
51
- <text
52
- id="&lt;/null&gt;"
53
- font-family="PingFangSC-Medium, PingFang SC"
54
- font-size="15.1200003"
55
- font-weight="400"
56
- fill="#BCBECD"
57
- >
58
- <tspan x="33.6000008" y="32.8000004">&lt;/null&gt;</tspan>
59
- </text>
60
- <rect id="矩形" fill="#E8EAEE" x="27.5600006" y="52.0800012" width="61.4800014" height="5.04000011" rx="2.52000006"></rect>
61
- <rect
62
- id="矩形备份"
63
- fill="#E8EAEE"
64
- x="27.5600006"
65
- y="63.8400014"
66
- width="61.4800014"
67
- height="5.04000011"
68
- rx="2.52000006"
69
- ></rect>
70
- <path
71
- 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"
72
- id="矩形"
73
- fill="#EDEFF2"
74
- ></path>
75
- </g>
76
- </g>
77
- </g>
78
- </svg>`;
79
- export const icons = {
80
- 'angle-right': angleRight,
81
- 'angle-down': angleDown,
82
- 'plus-square': plusSquare,
83
- 'minus-square': minusSquare,
84
- loading: loadingIcon,
85
- empty: emptyIcon
86
- };
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9pY29uL2ljb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxHQUFHLDRVQUE0VSxDQUFDO0FBQ2hXLE1BQU0sU0FBUyxHQUFHLHdTQUF3UyxDQUFDO0FBQzNULE1BQU0sVUFBVSxHQUFHLHFiQUFxYixDQUFDO0FBQ3pjLE1BQU0sV0FBVyxHQUFHLDZZQUE2WSxDQUFDO0FBQ2xhLE1BQU0sV0FBVyxHQUFHOzs7O09BSWIsQ0FBQztBQUNSLE1BQU0sU0FBUyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9FWCxDQUFDO0FBQ1IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ2pCLGFBQWEsRUFBRSxVQUFVO0lBQ3pCLFlBQVksRUFBRSxTQUFTO0lBQ3ZCLGFBQWEsRUFBRSxVQUFVO0lBQ3pCLGNBQWMsRUFBRSxXQUFXO0lBQzNCLE9BQU8sRUFBRSxXQUFXO0lBQ3BCLEtBQUssRUFBRSxTQUFTO0NBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBhbmdsZVJpZ2h0ID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpdD1cIlwiICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaWQgbWVldFwiIGZvY3VzYWJsZT1cImZhbHNlXCI+PGcgaWQ9XCJhbW5hdmlnYXRpb24vYW5nbGUtcmlnaHRcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPjxwYXRoIGQ9XCJNNy45NzggMTEuNDk4bC0uMDA1LjAwNUwyLjMgNS44MzEgMy4xMyA1bDQuODQ4IDQuODQ4TDEyLjgyNiA1bC44My44MzEtNS42NzMgNS42NzItLjAwNS0uMDA1elwiICAgdHJhbnNmb3JtPVwicm90YXRlKC05MCA3Ljk3OCA4LjI1MilcIj48L3BhdGg+PC9nPjwvc3ZnPmA7XG5jb25zdCBhbmdsZURvd24gPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZml0PVwiXCIgIHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCIgZm9jdXNhYmxlPVwiZmFsc2VcIj48ZyBpZD1cImFrbmF2aWdhdGlvbi9hbmdsZS1kb3duXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTcuOTc4IDExLjk5N2wtLjAwNS4wMDZMMi4zIDYuMzNsLjgzLS44MzEgNC44NDggNC44NDhMMTIuODI2IDUuNWwuODMuODMtNS42NzMgNS42NzMtLjAwNS0uMDA2elwiID48L3BhdGg+PC9nPjwvc3ZnPmA7XG5jb25zdCBwbHVzU3F1YXJlID0gYDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaXQ9XCJcIiAgIHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCIgZm9jdXNhYmxlPVwiZmFsc2VcIj48ZyBpZD1cImt4YWN0aW9uL3BsdXMtc3F1YXJlXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTIgMGgxMmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMnptMCAxLjJhLjguOCAwIDAgMC0uOC44djEyYS44LjggMCAwIDAgLjguOGgxMmEuOC44IDAgMCAwIC44LS44VjJhLjguOCAwIDAgMC0uOC0uOEgyem01LjQ1IDYuMlY0Ljc1aDEuMlY3LjRoMi42NXYxLjJIOC42NXYyLjY1aC0xLjJWOC42SDQuOFY3LjRoMi42NXpcIj48L3BhdGg+PC9nPjwvc3ZnPmA7XG5jb25zdCBtaW51c1NxdWFyZSA9IGA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZml0PVwiXCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIiBmb2N1c2FibGU9XCJmYWxzZVwiPjxnIGlkPVwiam5hY3Rpb24vbWludXMtc3F1YXJlXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj48cGF0aCBkPVwiTTIgMGgxMmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJIMmEyIDIgMCAwIDEtMi0yVjJhMiAyIDAgMCAxIDItMnptMCAxLjJhLjguOCAwIDAgMC0uOC44djEyYS44LjggMCAwIDAgLjguOGgxMmEuOC44IDAgMCAwIC44LS44VjJhLjguOCAwIDAgMC0uOC0uOEgyem0yLjggNi4yaDYuNXYxLjJINC44VjcuNHpcIj48L3BhdGg+PC9nPjwvc3ZnPmA7XG5jb25zdCBsb2FkaW5nSWNvbiA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiAgdmlld0JveD1cIjAgMCA1MCA1MFwiIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MCA1MFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG48cGF0aCBmaWxsPVwiI2FhYVwiIGQ9XCJNMjUuMjUxLDYuNDYxYy0xMC4zMTgsMC0xOC42ODMsOC4zNjUtMTguNjgzLDE4LjY4M2g0LjA2OGMwLTguMDcxLDYuNTQzLTE0LjYxNSwxNC42MTUtMTQuNjE1VjYuNDYxelwiIHRyYW5zZm9ybT1cInJvdGF0ZSgyNzUuMDk4IDI1IDI1KVwiPlxuICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZVR5cGU9XCJ4bWxcIiBhdHRyaWJ1dGVOYW1lPVwidHJhbnNmb3JtXCIgdHlwZT1cInJvdGF0ZVwiIGZyb209XCIwIDI1IDI1XCIgdG89XCIzNjAgMjUgMjVcIiBkdXI9XCIwLjZzXCIgcmVwZWF0Q291bnQ9XCJpbmRlZmluaXRlXCI+PC9hbmltYXRlVHJhbnNmb3JtPlxuPC9wYXRoPlxuPC9zdmc+YDtcbmNvbnN0IGVtcHR5SWNvbiA9IGA8c3ZnXG53aWR0aD1cIjE0OHB4XCJcbmhlaWdodD1cIjEzNHB4XCJcbnZpZXdCb3g9XCIwIDAgMTQ4IDEzNFwiXG52ZXJzaW9uPVwiMS4xXCJcbnhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxueG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbj5cbjxkZWZzPlxuICA8ZmlsdGVyIHg9XCIwLjAlXCIgeT1cIjAuMCVcIiB3aWR0aD1cIjEwMC4wJVwiIGhlaWdodD1cIjEwMC4wJVwiIGZpbHRlclVuaXRzPVwib2JqZWN0Qm91bmRpbmdCb3hcIiBpZD1cImZpbHRlci0xXCI+XG4gICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjBcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIj48L2ZlR2F1c3NpYW5CbHVyPlxuICA8L2ZpbHRlcj5cbjwvZGVmcz5cbjxnIGlkPVwiMTQ4eDEzNFwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gIDxnIGlkPVwi57yW57uELTZcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKVwiPlxuICAgIDxlbGxpcHNlXG4gICAgICBpZD1cIuakreWchuW9olwiXG4gICAgICBmaWxsPVwiI0VERUVGMlwiXG4gICAgICBvcGFjaXR5PVwiMC4zXCJcbiAgICAgIGZpbHRlcj1cInVybCgjZmlsdGVyLTEpXCJcbiAgICAgIGN4PVwiNzMuMDgwMDAxN1wiXG4gICAgICBjeT1cIjExNS45MjAwMDNcIlxuICAgICAgcng9XCI3My4wODAwMDE3XCJcbiAgICAgIHJ5PVwiMTYuODAwMDAwNFwiXG4gICAgPjwvZWxsaXBzZT5cbiAgICA8ZyBpZD1cIue8lue7hC01XCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDE1LjEyMDAwMCwgMC4wMDAwMDApXCI+XG4gICAgICA8cG9seWdvblxuICAgICAgICBpZD1cIuefqeW9olwiXG4gICAgICAgIGZpbGw9XCIjRTJFNEU5XCJcbiAgICAgICAgcG9pbnRzPVwiMTkuMjc4OTg0OCA0OS41NjAwMDExIDk5LjEyMDAwMjMgNDguNzIwMDAxMSAxMTcuNjAwMDAzIDc1LjkyOTc2NzMgMTE3LjYwMDAwMyA5Mi4zMTMwNDkgMCA5Mi4zMTMwNDkgMCA3NS4wMzU2MjY3XCJcbiAgICAgID48L3BvbHlnb24+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTIzLjUyMDAwMDUsMCBMOTQuMDgwMDAwMiwwIEM5Ny43OTEzNTM4LDIuMDY0MTM4MjNlLTE2IDEwMC44LDMuMDA4NjQ2NTUgMTAwLjgsNi43MjAwMDAxNSBMMTAwLjgsOTkuMTIwMDAyMyBMMTAwLjgsOTkuMTIwMDAyMyBMMTYuODAwMDAwNCw5OS4xMjAwMDIzIEwxNi44MDAwMDA0LDYuNzIwMDAwMTUgQzE2LjgwMDAwMDQsMy4wMDg2NDY1NSAxOS44MDg2NDY5LDEuNTY5OTQzMDJlLTE1IDIzLjUyMDAwMDUsMCBaXCJcbiAgICAgICAgaWQ9XCLnn6nlvaJcIlxuICAgICAgICBmaWxsPVwiI0Y5RkFGQlwiXG4gICAgICA+PC9wYXRoPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0zMC45MjAwMDA3LDEyLjQ0MDAwMDMgTDg2LjY4MDAwMTksMTIuNDQwMDAwMyBDODguNTM1Njc4NywxMi40NDAwMDAzIDkwLjA0MDAwMiwxMy45NDQzMjM2IDkwLjA0MDAwMiwxNS44MDAwMDA0IEw5MC4wNDAwMDIsNDIuMDAwMDAxIEM5MC4wNDAwMDIsNDMuODU1Njc3OCA4OC41MzU2Nzg3LDQ1LjM2MDAwMSA4Ni42ODAwMDE5LDQ1LjM2MDAwMSBMMzAuOTIwMDAwNyw0NS4zNjAwMDEgQzI5LjA2NDMyMzksNDUuMzYwMDAxIDI3LjU2MDAwMDYsNDMuODU1Njc3OCAyNy41NjAwMDA2LDQyLjAwMDAwMSBMMjcuNTYwMDAwNiwxNS44MDAwMDA0IEMyNy41NjAwMDA2LDEzLjk0NDMyMzYgMjkuMDY0MzIzOSwxMi40NDAwMDAzIDMwLjkyMDAwMDcsMTIuNDQwMDAwMyBaXCJcbiAgICAgICAgaWQ9XCLnn6nlvaJcIlxuICAgICAgICBmaWxsPVwiI0U4RUFFRVwiXG4gICAgICA+PC9wYXRoPlxuICAgICAgPHRleHRcbiAgICAgICAgaWQ9XCImbHQ7L251bGwmZ3Q7XCJcbiAgICAgICAgZm9udC1mYW1pbHk9XCJQaW5nRmFuZ1NDLU1lZGl1bSwgUGluZ0ZhbmcgU0NcIlxuICAgICAgICBmb250LXNpemU9XCIxNS4xMjAwMDAzXCJcbiAgICAgICAgZm9udC13ZWlnaHQ9XCI0MDBcIlxuICAgICAgICBmaWxsPVwiI0JDQkVDRFwiXG4gICAgICA+XG4gICAgICAgIDx0c3BhbiB4PVwiMzMuNjAwMDAwOFwiIHk9XCIzMi44MDAwMDA0XCI+Jmx0Oy9udWxsJmd0OzwvdHNwYW4+XG4gICAgICA8L3RleHQ+XG4gICAgICA8cmVjdCBpZD1cIuefqeW9olwiIGZpbGw9XCIjRThFQUVFXCIgeD1cIjI3LjU2MDAwMDZcIiB5PVwiNTIuMDgwMDAxMlwiIHdpZHRoPVwiNjEuNDgwMDAxNFwiIGhlaWdodD1cIjUuMDQwMDAwMTFcIiByeD1cIjIuNTIwMDAwMDZcIj48L3JlY3Q+XG4gICAgICA8cmVjdFxuICAgICAgICBpZD1cIuefqeW9ouWkh+S7vVwiXG4gICAgICAgIGZpbGw9XCIjRThFQUVFXCJcbiAgICAgICAgeD1cIjI3LjU2MDAwMDZcIlxuICAgICAgICB5PVwiNjMuODQwMDAxNFwiXG4gICAgICAgIHdpZHRoPVwiNjEuNDgwMDAxNFwiXG4gICAgICAgIGhlaWdodD1cIjUuMDQwMDAwMTFcIlxuICAgICAgICByeD1cIjIuNTIwMDAwMDZcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMCw3NS42MDAwMDE3IEwyOS4yODAyMzUsNzUuNjAwMDAxNyBDMzIuMDYzNzUwMiw3NS42MDAwMDE3IDM0LjMyMDIzNTIsNzcuODU2NDg2NiAzNC4zMjAyMzUyLDgwLjY0MDAwMTggTDM0LjMyMDIzNTIsODYuMjU5MTQyNiBDMzQuMzIwMjM1Miw4OS4wNDI2NTc4IDM2LjU3NjcyMDEsOTEuMjk5MTQyNyAzOS4zNjAyMzUzLDkxLjI5OTE0MjcgTDc4LjQxMzY3MzcsOTEuMjk5MTQyNyBDODEuMTk3MTg4OSw5MS4yOTkxNDI3IDgzLjQ1MzY3MzgsODkuMDQyNjU3OCA4My40NTM2NzM4LDg2LjI1OTE0MjYgTDgzLjQ1MzY3MzgsODAuNjQwMDAxOCBDODMuNDUzNjczOCw3Ny44NTY0ODY2IDg1LjcxMDE1ODcsNzUuNjAwMDAxNyA4OC40OTM2NzM5LDc1LjYwMDAwMTcgTDExNy42MDAwMDMsNzUuNjAwMDAxNyBMMTE3LjYwMDAwMyw3NS42MDAwMDE3IEwxMTcuNjAwMDAzLDExMC44ODAwMDMgQzExNy42MDAwMDMsMTE1LjUxOTE5NSAxMTMuODM5MTk0LDExOS4yODAwMDMgMTA5LjIwMDAwMiwxMTkuMjgwMDAzIEw4LjQwMDAwMDE5LDExOS4yODAwMDMgQzMuNzYwODA4MTksMTE5LjI4MDAwMyAtNi41MzcyOTAxOWUtMTUsMTE1LjUxOTE5NSAwLDExMC44ODAwMDMgTDAsNzUuNjAwMDAxNyBMMCw3NS42MDAwMDE3IFpcIlxuICAgICAgICBpZD1cIuefqeW9olwiXG4gICAgICAgIGZpbGw9XCIjRURFRkYyXCJcbiAgICAgID48L3BhdGg+XG4gICAgPC9nPlxuICA8L2c+XG48L2c+XG48L3N2Zz5gO1xuZXhwb3J0IGNvbnN0IGljb25zID0ge1xuICAgICdhbmdsZS1yaWdodCc6IGFuZ2xlUmlnaHQsXG4gICAgJ2FuZ2xlLWRvd24nOiBhbmdsZURvd24sXG4gICAgJ3BsdXMtc3F1YXJlJzogcGx1c1NxdWFyZSxcbiAgICAnbWludXMtc3F1YXJlJzogbWludXNTcXVhcmUsXG4gICAgbG9hZGluZzogbG9hZGluZ0ljb24sXG4gICAgZW1wdHk6IGVtcHR5SWNvblxufTtcbiJdfQ==
@@ -1,207 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, HostBinding, Inject, ChangeDetectorRef, ElementRef } from '@angular/core';
2
- import { merge, Subject } from 'rxjs';
3
- import { takeUntil, skip } from 'rxjs/operators';
4
- import { GanttDragContainer } from '../../gantt-drag-container';
5
- import { recursiveItems } from '../../utils/helpers';
6
- import { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';
7
- var LinkColors;
8
- (function (LinkColors) {
9
- LinkColors["default"] = "#cacaca";
10
- LinkColors["blocked"] = "#FF7575";
11
- LinkColors["active"] = "#348FE4";
12
- })(LinkColors || (LinkColors = {}));
13
- export class GanttLinksComponent {
14
- constructor(ganttUpper, cdr, elementRef, ganttDragContainer) {
15
- this.ganttUpper = ganttUpper;
16
- this.cdr = cdr;
17
- this.elementRef = elementRef;
18
- this.ganttDragContainer = ganttDragContainer;
19
- this.groups = [];
20
- this.items = [];
21
- this.lineClick = new EventEmitter();
22
- this.links = [];
23
- this.linkItems = [];
24
- this.bezierWeight = -0.5;
25
- this.firstChange = true;
26
- this.unsubscribe$ = new Subject();
27
- this.ganttLinksOverlay = true;
28
- }
29
- ngOnInit() {
30
- this.buildLinks();
31
- this.firstChange = false;
32
- this.ganttDragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
33
- this.elementRef.nativeElement.style.visibility = 'hidden';
34
- });
35
- merge(this.ganttUpper.viewChange, this.ganttUpper.expandChange, this.ganttUpper.view.start$, this.ganttUpper.dragEnded, this.ganttUpper.linkDragEnded)
36
- .pipe(takeUntil(this.unsubscribe$), skip(1))
37
- .subscribe(() => {
38
- this.elementRef.nativeElement.style.visibility = 'visible';
39
- this.buildLinks();
40
- this.cdr.detectChanges();
41
- });
42
- }
43
- ngOnChanges() {
44
- if (!this.firstChange) {
45
- this.buildLinks();
46
- }
47
- }
48
- computeItemPosition() {
49
- const lineHeight = this.ganttUpper.styles.lineHeight;
50
- const barHeight = this.ganttUpper.styles.barHeight;
51
- this.linkItems = [];
52
- if (this.groups.length > 0) {
53
- let itemNum = 0;
54
- let groupNum = 0;
55
- this.groups.forEach((group) => {
56
- groupNum++;
57
- if (group.expanded) {
58
- const items = recursiveItems(group.items);
59
- items.forEach((item, itemIndex) => {
60
- const y = (groupNum + itemNum + itemIndex) * lineHeight + item.refs.y + barHeight / 2;
61
- this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
62
- x: item.refs.x,
63
- y
64
- }, after: {
65
- x: item.refs.x + item.refs.width,
66
- y
67
- } }));
68
- });
69
- itemNum += items.length;
70
- }
71
- });
72
- }
73
- else {
74
- const items = recursiveItems(this.items);
75
- items.forEach((item, itemIndex) => {
76
- const y = itemIndex * lineHeight + item.refs.y + barHeight / 2;
77
- this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
78
- x: item.refs.x,
79
- y
80
- }, after: {
81
- x: item.refs.x + item.refs.width,
82
- y
83
- } }));
84
- });
85
- }
86
- }
87
- generatePath(source, target) {
88
- if (source.before && source.after && target.before && target.after) {
89
- const x1 = source.after.x;
90
- const y1 = source.after.y;
91
- const x4 = target.before.x;
92
- const y4 = target.before.y;
93
- const dx = Math.abs(x4 - x1) * this.bezierWeight;
94
- const x2 = x1 - dx;
95
- const x3 = x4 + dx;
96
- const centerX = (x1 + x4) / 2;
97
- const centerY = (y1 + y4) / 2;
98
- let controlX = this.ganttUpper.styles.lineHeight / 2;
99
- const controlY = this.ganttUpper.styles.lineHeight / 2;
100
- if (x1 >= x4) {
101
- if (y4 > y1) {
102
- if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {
103
- return `M ${x1} ${y1}
104
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 + controlX} ${x1} ${y1 + controlY}
105
- L ${x1} ${y1 + controlY} ${centerX} ${centerY}
106
-
107
- M ${x4} ${y4}
108
- C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 - controlX} ${x4} ${y4 - controlY}
109
- L ${x4} ${y4 - controlY} ${centerX} ${centerY}`;
110
- }
111
- else {
112
- controlX = this.ganttUpper.styles.lineHeight;
113
- return `M ${x1} ${y1}
114
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 + controlX} ${centerX} ${centerY}
115
-
116
-
117
- M ${x4} ${y4}
118
- C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 - controlX} ${centerX} ${centerY}`;
119
- }
120
- }
121
- else {
122
- if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {
123
- return `M ${x1} ${y1}
124
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 - controlX} ${x1} ${y1 - controlY}
125
- L ${x1} ${y1 - controlY} ${centerX} ${centerY}
126
-
127
- M ${x4} ${y4}
128
- C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 + controlX} ${x4} ${y4 + controlY}
129
- L ${x4} ${y4 + controlY} ${centerX} ${centerY}
130
- `;
131
- }
132
- else {
133
- controlX = this.ganttUpper.styles.lineHeight;
134
- return `M ${x1} ${y1}
135
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 - controlX} ${centerX} ${centerY}
136
-
137
- M ${x4} ${y4}
138
- C ${x4 - controlX} ${y4} ${x4 - controlX} ${y4 + controlX} ${centerX} ${centerY}`;
139
- }
140
- }
141
- }
142
- return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
143
- }
144
- }
145
- buildLinks() {
146
- this.computeItemPosition();
147
- this.links = [];
148
- this.linkItems.forEach((source) => {
149
- if (source.origin.start || source.origin.end) {
150
- source.links.forEach((linkId) => {
151
- const target = this.linkItems.find((item) => item.id === linkId);
152
- if (target && (target.origin.start || target.origin.end)) {
153
- this.links.push({
154
- path: this.generatePath(source, target),
155
- source: source.origin,
156
- target: target.origin,
157
- color: source.end.getTime() > target.start.getTime() ? LinkColors.blocked : LinkColors.default
158
- });
159
- }
160
- });
161
- }
162
- });
163
- }
164
- trackBy(index) {
165
- return index;
166
- }
167
- onLineClick(event, link) {
168
- this.lineClick.emit({
169
- event,
170
- source: link.source,
171
- target: link.target
172
- });
173
- }
174
- mouseEnterPath(link) {
175
- if (link.color === LinkColors.default) {
176
- link.color = LinkColors.active;
177
- }
178
- }
179
- mouseLeavePath(link) {
180
- if (link.color === LinkColors.active) {
181
- link.color = LinkColors.default;
182
- }
183
- }
184
- ngOnDestroy() {
185
- this.unsubscribe$.next();
186
- this.unsubscribe$.complete();
187
- }
188
- }
189
- GanttLinksComponent.decorators = [
190
- { type: Component, args: [{
191
- selector: 'gantt-links-overlay',
192
- template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path [attr.d]=\"link.path\" fill=\"transparent\" stroke-width=\"2\" [attr.stroke]=\"link.color\" pointer-events=\"none\"></path>\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n (mouseenter)=\"mouseEnterPath(link)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n [attr.d]=\"link.path\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n"
193
- },] }
194
- ];
195
- GanttLinksComponent.ctorParameters = () => [
196
- { type: GanttUpper, decorators: [{ type: Inject, args: [GANTT_UPPER_TOKEN,] }] },
197
- { type: ChangeDetectorRef },
198
- { type: ElementRef },
199
- { type: GanttDragContainer }
200
- ];
201
- GanttLinksComponent.propDecorators = {
202
- groups: [{ type: Input }],
203
- items: [{ type: Input }],
204
- lineClick: [{ type: Output }],
205
- ganttLinksOverlay: [{ type: HostBinding, args: ['class.gantt-links-overlay',] }]
206
- };
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbGlua3MvbGlua3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsVUFBVSxFQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRSxJQUFLLFVBSUo7QUFKRCxXQUFLLFVBQVU7SUFDWCxpQ0FBbUIsQ0FBQTtJQUNuQixpQ0FBbUIsQ0FBQTtJQUNuQixnQ0FBa0IsQ0FBQTtBQUN0QixDQUFDLEVBSkksVUFBVSxLQUFWLFVBQVUsUUFJZDtBQXVCRCxNQUFNLE9BQU8sbUJBQW1CO0lBbUI1QixZQUNzQyxVQUFzQixFQUNoRCxHQUFzQixFQUN0QixVQUFzQixFQUN0QixrQkFBc0M7UUFIWixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2hELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXRCekMsV0FBTSxHQUF5QixFQUFFLENBQUM7UUFFbEMsVUFBSyxHQUF3QixFQUFFLENBQUM7UUFFL0IsY0FBUyxH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Q0FBQztTQUNuQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7OztZQXZOSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0Isc3VCQUFxQzthQUN4Qzs7O1lBNUIyQixVQUFVLHVCQWlEN0IsTUFBTSxTQUFDLGlCQUFpQjtZQTlEN0IsaUJBQWlCO1lBQ2pCLFVBQVU7WUFTTCxrQkFBa0I7OztxQkFpQ3RCLEtBQUs7b0JBRUwsS0FBSzt3QkFFTCxNQUFNO2dDQVlOLFdBQVcsU0FBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEdhbnR0R3JvdXBJbnRlcm5hbCB9IGZyb20gJy4uLy4uL2NsYXNzL2dyb3VwJztcbmltcG9ydCB7IEdhbnR0SXRlbUludGVybmFsLCBHYW50dEl0ZW0gfSBmcm9tICcuLy4uLy4uL2NsYXNzL2l0ZW0nO1xuaW1wb3J0IHsgR2FudHRMaW5lQ2xpY2tFdmVudCB9IGZyb20gJy4uLy4uL2NsYXNzL2V2ZW50JztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciB9IGZyb20gJy4uLy4uL2dhbnR0LWRyYWctY29udGFpbmVyJztcbmltcG9ydCB7IHJlY3Vyc2l2ZUl0ZW1zIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBHYW50dERhdGUgfSBmcm9tICcuLi8uLi91dGlscy9kYXRlJztcbmltcG9ydCB7IEdBTlRUX1VQUEVSX1RPS0VOLCBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuXG5lbnVtIExpbmtDb2xvcnMge1xuICAgIGRlZmF1bHQgPSAnI2NhY2FjYScsXG4gICAgYmxvY2tlZCA9ICcjRkY3NTc1JyxcbiAgICBhY3RpdmUgPSAnIzM0OEZFNCdcbn1cblxuaW50ZXJmYWNlIEdhbnR0TGlua0l0ZW0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYmVmb3JlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gICAgYWZ0ZXI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgICBzdGFydDogR2FudHREYXRlO1xuICAgIGVuZDogR2FudHREYXRlO1xuICAgIG9yaWdpbjogR2FudHRJdGVtO1xuICAgIGxpbmtzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIExpbmtJbnRlcm5hbCB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNvdXJjZTogR2FudHRJdGVtO1xuICAgIHRhcmdldDogR2FudHRJdGVtO1xuICAgIGNvbG9yOiBMaW5rQ29sb3JzO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2dhbnR0LWxpbmtzLW92ZXJsYXknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saW5rcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2FudHRMaW5rc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGdyb3VwczogR2FudHRHcm91cEludGVybmFsW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG5cbiAgICBAT3V0cHV0KCkgbGluZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmVDbGlja0V2ZW50PigpO1xuXG4gICAgcHVibGljIGxpbmtzOiBMaW5rSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBsaW5rSXRlbXM6IEdhbnR0TGlua0l0ZW1bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBiZXppZXJXZWlnaHQgPSAtMC41O1xuXG4gICAgcHJpdmF0ZSBmaXJzdENoYW5nZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LWxpbmtzLW92ZXJsYXknKSBnYW50dExpbmtzT3ZlcmxheSA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChHQU5UVF9VUFBFUl9UT0tFTikgcHVibGljIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGdhbnR0RHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYnVpbGRMaW5rcygpO1xuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5nYW50dERyYWdDb250YWluZXIuZHJhZ1N0YXJ0ZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB9KTtcblxuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci52aWV3Q2hhbmdlLFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmV4cGFuZENoYW5nZSxcbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci52aWV3LnN0YXJ0JCxcbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5kcmFnRW5kZWQsXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIubGlua0RyYWdFbmRlZFxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLCBza2lwKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkTGlua3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTGlua3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZUl0ZW1Qb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodDtcbiAgICAgICAgY29uc3QgYmFySGVpZ2h0ID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5iYXJIZWlnaHQ7XG4gICAgICAgIHRoaXMubGlua0l0ZW1zID0gW107XG4gICAgICAgIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgaXRlbU51bSA9IDA7XG4gICAgICAgICAgICBsZXQgZ3JvdXBOdW0gPSAwO1xuICAgICAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICBncm91cE51bSsrO1xuICAgICAgICAgICAgICAgIGlmIChncm91cC5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gKGdyb3VwTnVtICsgaXRlbU51bSArIGl0ZW1JbmRleCkgKiBsaW5lSGVpZ2h0ICsgaXRlbS5yZWZzLnkgKyBiYXJIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS5yZWZzLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGl0ZW0ucmVmcy54ICsgaXRlbS5yZWZzLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpdGVtTnVtICs9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gaXRlbUluZGV4ICogbGluZUhlaWdodCArIGl0ZW0ucmVmcy55ICsgYmFySGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBpdGVtLnJlZnMueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGl0ZW0ucmVmcy54ICsgaXRlbS5yZWZzLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVQYXRoKHNvdXJjZTogR2FudHRMaW5rSXRlbSwgdGFyZ2V0OiBHYW50dExpbmtJdGVtKSB7XG4gICAgICAgIGlmIChzb3VyY2UuYmVmb3JlICYmIHNvdXJjZS5hZnRlciAmJiB0YXJnZXQuYmVmb3JlICYmIHRhcmdldC5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgeDEgPSBzb3VyY2UuYWZ0ZXIueDtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gc291cmNlLmFmdGVyLnk7XG5cbiAgICAgICAgICAgIGNvbnN0IHg0ID0gdGFyZ2V0LmJlZm9yZS54O1xuICAgICAgICAgICAgY29uc3QgeTQgPSB0YXJnZXQuYmVmb3JlLnk7XG5cbiAgICAgICAgICAgIGNvbnN0IGR4ID0gTWF0aC5hYnMoeDQgLSB4MSkgKiB0aGlzLmJlemllcldlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHgyID0geDEgLSBkeDtcbiAgICAgICAgICAgIGNvbnN0IHgzID0geDQgKyBkeDtcblxuICAgICAgICAgICAgY29uc3QgY2VudGVyWCA9ICh4MSArIHg0KSAvIDI7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXJZID0gKHkxICsgeTQpIC8gMjtcblxuICAgICAgICAgICAgbGV0IGNvbnRyb2xYID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xZID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0IC8gMjtcblxuICAgICAgICAgICAgaWYgKHgxID49IHg0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHk0ID4geTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHk0IC0geTEpIDw9IHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgICAgICBDICR7eDEgKyBjb250cm9sWH0gJHt5MX0gJHt4MSArIGNvbnRyb2xYfSAke3kxICsgY29udHJvbFh9ICR7eDF9ICR7eTEgKyBjb250cm9sWX1cbiAgICAgICAgICAgICAgICAgICAgICAgIEwgJHt4MX0gJHt5MSArIGNvbnRyb2xZfSAke2NlbnRlclh9ICR7Y2VudGVyWX1cblxuICAgICAgICAgICAgICAgICAgICAgICAgTSAke3g0fSAke3k0fVxuICAgICAgICAgICAgICAgICAgICAgICAgQyAke3g0IC0gY29udHJvbFh9ICR7eTR9ICR7eDQgLSBjb250cm9sWH0gJHt5NCAtIGNvbnRyb2xYfSAke3g0fSAke3k0IC0gY29udHJvbFl9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDR9ICR7eTQgLSBjb250cm9sWX0gJHtjZW50ZXJYfSAke2NlbnRlcll9YDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xYID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgICAgICBDICR7eDEgKyBjb250cm9sWH0gJHt5MX0gJHt4MSArIGNvbnRyb2xYfSAke3kxICsgY29udHJvbFh9ICR7Y2VudGVyWH0gJHtjZW50ZXJZfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE0gJHt4NH0gJHt5NH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEMgJHt4NCAtIGNvbnRyb2xYfSAke3k0fSAke3g0IC0gY29udHJvbFh9ICR7eTQgLSBjb250cm9sWH0gJHtjZW50ZXJYfSAke2NlbnRlcll9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh5NCAtIHkxKSA8PSB0aGlzLmdhbnR0VXBwZXIuc3R5bGVzLmxpbmVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgTSAke3gxfSAke3kxfVxuICAgICAgICAgICAgICAgICAgICAgICAgQyAke3gxICsgY29udHJvbFh9ICR7eTF9ICR7eDEgKyBjb250cm9sWH0gJHt5MSAtIGNvbnRyb2xYfSAke3gxfSAke3kxIC0gY29udHJvbFl9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDF9ICR7eTEgLSBjb250cm9sWX0gJHtjZW50ZXJYfSAke2NlbnRlcll9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE0gJHt4NH0gJHt5NH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEMgJHt4NCAtIGNvbnRyb2xYfSAke3k0fSAke3g0IC0gY29udHJvbFh9ICR7eTQgKyBjb250cm9sWH0gJHt4NH0gJHt5NCArIGNvbnRyb2xZfVxuICAgICAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3k0ICsgY29udHJvbFl9ICR7Y2VudGVyWH0gJHtjZW50ZXJZfVxuICAgICAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xYID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgICAgICBDICR7eDEgKyBjb250cm9sWH0gJHt5MX0gJHt4MSArIGNvbnRyb2xYfSAke3kxIC0gY29udHJvbFh9ICR7Y2VudGVyWH0gJHtjZW50ZXJZfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBNICR7eDR9ICR7eTR9XG4gICAgICAgICAgICAgICAgICAgICAgICBDICR7eDQgLSBjb250cm9sWH0gJHt5NH0gJHt4NCAtIGNvbnRyb2xYfSAke3k0ICsgY29udHJvbFh9ICR7Y2VudGVyWH0gJHtjZW50ZXJZfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBgTSAke3gxfSAke3kxfSBDICR7eDJ9ICR7eTF9ICR7eDN9ICR7eTR9ICR7eDR9ICR7eTR9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkTGlua3MoKSB7XG4gICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1Qb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmxpbmtzID0gW107XG4gICAgICAgIHRoaXMubGlua0l0ZW1zLmZvckVhY2goKHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5vcmlnaW4uc3RhcnQgfHwgc291cmNlLm9yaWdpbi5lbmQpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UubGlua3MuZm9yRWFjaCgobGlua0lkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMubGlua0l0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGxpbmtJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC5vcmlnaW4uc3RhcnQgfHwgdGFyZ2V0Lm9yaWdpbi5lbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMuZ2VuZXJhdGVQYXRoKHNvdXJjZSwgdGFyZ2V0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZS5vcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQub3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBzb3VyY2UuZW5kLmdldFRpbWUoKSA+IHRhcmdldC5zdGFydC5nZXRUaW1lKCkgPyBMaW5rQ29sb3JzLmJsb2NrZWQgOiBMaW5rQ29sb3JzLmRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnkoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgb25MaW5lQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGxpbms6IExpbmtJbnRlcm5hbCkge1xuICAgICAgICB0aGlzLmxpbmVDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgc291cmNlOiBsaW5rLnNvdXJjZSxcbiAgICAgICAgICAgIHRhcmdldDogbGluay50YXJnZXRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbW91c2VFbnRlclBhdGgobGluazogTGlua0ludGVybmFsKSB7XG4gICAgICAgIGlmIChsaW5rLmNvbG9yID09PSBMaW5rQ29sb3JzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGxpbmsuY29sb3IgPSBMaW5rQ29sb3JzLmFjdGl2ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdXNlTGVhdmVQYXRoKGxpbms6IExpbmtJbnRlcm5hbCkge1xuICAgICAgICBpZiAobGluay5jb2xvciA9PT0gTGlua0NvbG9ycy5hY3RpdmUpIHtcbiAgICAgICAgICAgIGxpbmsuY29sb3IgPSBMaW5rQ29sb3JzLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,35 +0,0 @@
1
- import { Component, HostBinding, Inject, Input, Output, EventEmitter } from '@angular/core';
2
- import { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';
3
- export class GanttMainComponent {
4
- constructor(ganttUpper) {
5
- this.ganttUpper = ganttUpper;
6
- this.barClick = new EventEmitter();
7
- this.lineClick = new EventEmitter();
8
- this.ganttMainClass = true;
9
- }
10
- ngOnInit() { }
11
- trackBy(item, index) {
12
- return item.id || index;
13
- }
14
- }
15
- GanttMainComponent.decorators = [
16
- { type: Component, args: [{
17
- selector: 'gantt-main',
18
- template: "<gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<!-- groups -->\n<div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div>\n<!-- items -->\n<ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items; trackBy: trackBy\">\n <div class=\"gantt-item\" [style.height.px]=\"ganttUpper.styles.lineHeight\">\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n </ng-container>\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n"
19
- },] }
20
- ];
21
- GanttMainComponent.ctorParameters = () => [
22
- { type: GanttUpper, decorators: [{ type: Inject, args: [GANTT_UPPER_TOKEN,] }] }
23
- ];
24
- GanttMainComponent.propDecorators = {
25
- groups: [{ type: Input }],
26
- items: [{ type: Input }],
27
- groupHeaderTemplate: [{ type: Input }],
28
- itemTemplate: [{ type: Input }],
29
- barTemplate: [{ type: Input }],
30
- rangeTemplate: [{ type: Input }],
31
- barClick: [{ type: Output }],
32
- lineClick: [{ type: Output }],
33
- ganttMainClass: [{ type: HostBinding, args: ['class.gantt-main-container',] }]
34
- };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtbWFpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9tYWluL2dhbnR0LW1haW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFNbEUsTUFBTSxPQUFPLGtCQUFrQjtJQW1CM0IsWUFBOEMsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQU4xRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFFbEQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRW5CLG1CQUFjLEdBQUcsSUFBSSxDQUFDO0lBRU0sQ0FBQztJQUV4RSxRQUFRLEtBQUksQ0FBQztJQUViLE9BQU8sQ0FBQyxJQUE0QyxFQUFFLEtBQWE7UUFDL0QsT0FBTyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQztJQUM1QixDQUFDOzs7WUE3QkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QiwwNkRBQTBDO2FBQzdDOzs7WUFMMkIsVUFBVSx1QkF5QnJCLE1BQU0sU0FBQyxpQkFBaUI7OztxQkFsQnBDLEtBQUs7b0JBRUwsS0FBSztrQ0FFTCxLQUFLOzJCQUVMLEtBQUs7MEJBRUwsS0FBSzs0QkFFTCxLQUFLO3VCQUVMLE1BQU07d0JBRU4sTUFBTTs2QkFFTixXQUFXLFNBQUMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEhvc3RCaW5kaW5nLCBJbmplY3QsIElucHV0LCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdhbnR0R3JvdXBJbnRlcm5hbCwgR2FudHRJdGVtSW50ZXJuYWwsIEdhbnR0QmFyQ2xpY2tFdmVudCwgR2FudHRMaW5lQ2xpY2tFdmVudCB9IGZyb20gJy4uLy4uL2NsYXNzJztcbmltcG9ydCB7IEdBTlRUX1VQUEVSX1RPS0VOLCBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2dhbnR0LW1haW4nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nYW50dC1tYWluLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBHYW50dE1haW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIGdyb3VwczogR2FudHRHcm91cEludGVybmFsW107XG5cbiAgICBASW5wdXQoKSBpdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXTtcblxuICAgIEBJbnB1dCgpIGdyb3VwSGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpIHJhbmdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAT3V0cHV0KCkgYmFyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0QmFyQ2xpY2tFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBsaW5lQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGluZUNsaWNrRXZlbnQ+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LW1haW4tY29udGFpbmVyJykgZ2FudHRNYWluQ2xhc3MgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChHQU5UVF9VUFBFUl9UT0tFTikgcHVibGljIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHt9XG5cbiAgICB0cmFja0J5KGl0ZW06IEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsLCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkIHx8IGluZGV4O1xuICAgIH1cbn1cbiJdfQ==
@@ -1,32 +0,0 @@
1
- import { Component, HostBinding, ElementRef, Inject } from '@angular/core';
2
- import { GANTT_UPPER_TOKEN, GanttUpper } from '../../gantt-upper';
3
- import { GanttItemUpper } from '../../gantt-item-upper';
4
- export class NgxGanttRangeComponent extends GanttItemUpper {
5
- constructor(elementRef, ganttUpper) {
6
- super(elementRef, ganttUpper);
7
- this.ganttRangeClass = true;
8
- }
9
- ngOnInit() {
10
- super.onInit();
11
- }
12
- ngOnChanges() {
13
- super.onChanges();
14
- }
15
- ngOnDestroy() {
16
- super.onDestroy();
17
- }
18
- }
19
- NgxGanttRangeComponent.decorators = [
20
- { type: Component, args: [{
21
- selector: 'ngx-gantt-range,gantt-range',
22
- template: "<ng-container *ngIf=\"item.start && item.end\">\n <div class=\"gantt-range-main\">\n <div class=\"gantt-range-main-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n </div>\n <div class=\"gantt-range-triangle left\"></div>\n <div class=\"gantt-range-triangle right\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</ng-container>\n"
23
- },] }
24
- ];
25
- NgxGanttRangeComponent.ctorParameters = () => [
26
- { type: ElementRef },
27
- { type: GanttUpper, decorators: [{ type: Inject, args: [GANTT_UPPER_TOKEN,] }] }
28
- ];
29
- NgxGanttRangeComponent.propDecorators = {
30
- ganttRangeClass: [{ type: HostBinding, args: ['class.gantt-range',] }]
31
- };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvcmFuZ2UvcmFuZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsV0FBVyxFQUFFLFVBQVUsRUFBd0IsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFNeEQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGNBQWM7SUFHdEQsWUFBWSxVQUFzQyxFQUE2QixVQUFzQjtRQUNqRyxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBSEEsb0JBQWUsR0FBRyxJQUFJLENBQUM7SUFJekQsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDUCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVc7UUFDUCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7O1lBckJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsNkJBQTZCO2dCQUN2QyxpZUFBcUM7YUFDeEM7OztZQVB3QyxVQUFVO1lBQ3ZCLFVBQVUsdUJBVW1CLE1BQU0sU0FBQyxpQkFBaUI7Ozs4QkFGNUUsV0FBVyxTQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBIb3N0QmluZGluZywgRWxlbWVudFJlZiwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC11cHBlcic7XG5pbXBvcnQgeyBHYW50dEl0ZW1VcHBlciB9IGZyb20gJy4uLy4uL2dhbnR0LWl0ZW0tdXBwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1nYW50dC1yYW5nZSxnYW50dC1yYW5nZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBOZ3hHYW50dFJhbmdlQ29tcG9uZW50IGV4dGVuZHMgR2FudHRJdGVtVXBwZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LXJhbmdlJykgZ2FudHRSYW5nZUNsYXNzID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LCBASW5qZWN0KEdBTlRUX1VQUEVSX1RPS0VOKSBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGdhbnR0VXBwZXIpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5vbkluaXQoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm9uRGVzdHJveSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,128 +0,0 @@
1
- import { Component, HostBinding, Input, ViewChild, ElementRef } from '@angular/core';
2
- import { defaultColumnWidth, minColumnWidth, NgxGanttComponent } from '../../gantt.component';
3
- import { coerceCssPixelValue } from '@angular/cdk/coercion';
4
- export class GanttTableComponent {
5
- constructor(gantt, elementRef) {
6
- this.gantt = gantt;
7
- this.elementRef = elementRef;
8
- this.ganttTableClass = true;
9
- this.ganttTableEmptyClass = false;
10
- }
11
- set columns(columns) {
12
- columns.forEach((column) => {
13
- if (!column.columnWidth) {
14
- column.columnWidth = coerceCssPixelValue(defaultColumnWidth);
15
- }
16
- });
17
- this.columnList = columns;
18
- }
19
- ngOnInit() { }
20
- ngOnChanges(changes) {
21
- var _a, _b;
22
- if (!((_a = changes.groups.currentValue) === null || _a === void 0 ? void 0 : _a.length) && !((_b = changes.items.currentValue) === null || _b === void 0 ? void 0 : _b.length)) {
23
- this.ganttTableEmptyClass = true;
24
- }
25
- else {
26
- this.ganttTableEmptyClass = false;
27
- }
28
- }
29
- dragFixed(config) {
30
- if (config.movedWidth < config.minWidth) {
31
- config.target.style.transform = `translate3d(${config.minWidth - config.originWidth}px, 0, 0)`;
32
- }
33
- }
34
- expandGroup(group) {
35
- this.gantt.expandGroup(group);
36
- }
37
- expandChildren(item) {
38
- this.gantt.expandChildren(item);
39
- }
40
- dragStarted(event) {
41
- const target = event.source.element.nativeElement;
42
- this.dragStartLeft = target.getBoundingClientRect().left;
43
- }
44
- dragMoved(event, column) {
45
- const target = event.source.element.nativeElement;
46
- const left = target.getBoundingClientRect().left;
47
- let originWidth;
48
- let movedWidth;
49
- let minWidth;
50
- if (column) {
51
- originWidth = parseInt(column.columnWidth, 10);
52
- movedWidth = originWidth + (left - this.dragStartLeft);
53
- minWidth = minColumnWidth;
54
- }
55
- else {
56
- originWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
57
- movedWidth = originWidth + (left - this.dragStartLeft);
58
- minWidth = minColumnWidth * this.columnList.length;
59
- }
60
- this.dragFixed({
61
- target,
62
- originWidth,
63
- movedWidth,
64
- minWidth
65
- });
66
- this.showAuxiliaryLine(event);
67
- }
68
- columnDragEnded(event, column) {
69
- const target = event.source.element.nativeElement;
70
- const left = target.getBoundingClientRect().left;
71
- const width = parseInt(column.columnWidth, 10) + (left - this.dragStartLeft);
72
- const columnWidth = Math.max(width || 0, minColumnWidth);
73
- column.columnWidth = coerceCssPixelValue(columnWidth);
74
- if (this.gantt.table) {
75
- this.gantt.table.columnChanges.emit({ columns: this.columnList });
76
- }
77
- this.hideAuxiliaryLine();
78
- event.source.reset();
79
- }
80
- tableDragEnded(event) {
81
- const target = event.source.element.nativeElement;
82
- const left = target.getBoundingClientRect().left;
83
- const tableWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
84
- const dragWidth = left - this.dragStartLeft;
85
- this.columnList.forEach((column) => {
86
- const lastColumnWidth = parseInt(column.columnWidth, 10);
87
- const distributeWidth = parseInt(String(dragWidth * (lastColumnWidth / tableWidth)), 10);
88
- const columnWidth = Math.max(lastColumnWidth + distributeWidth || 0, minColumnWidth);
89
- column.columnWidth = coerceCssPixelValue(columnWidth);
90
- });
91
- if (this.gantt.table) {
92
- this.gantt.table.columnChanges.emit({ columns: this.columnList });
93
- }
94
- this.hideAuxiliaryLine();
95
- event.source.reset();
96
- }
97
- showAuxiliaryLine(event) {
98
- const tableRect = this.elementRef.nativeElement.getBoundingClientRect();
99
- const targetRect = event.source.element.nativeElement.getBoundingClientRect();
100
- const distance = { x: targetRect.left - tableRect.left, y: targetRect.top - tableRect.top };
101
- this.draglineElementRef.nativeElement.style.left = `${distance.x}px`;
102
- this.draglineElementRef.nativeElement.style.display = 'block';
103
- }
104
- hideAuxiliaryLine() {
105
- this.draglineElementRef.nativeElement.style.display = 'none';
106
- }
107
- }
108
- GanttTableComponent.decorators = [
109
- { type: Component, args: [{
110
- selector: 'gantt-table',
111
- template: "<div class=\"gantt-table-header gantt-table-row\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"></ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event, column)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"columnDragEnded($event, column)\"\n ></div>\n </div>\n</div>\n<div class=\"gantt-table-body\">\n <ng-container *ngIf=\"!groups.length && !items.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"groups && groups.length > 0; else itemsTemplate\">\n <ng-container *ngFor=\"let group of groups\">\n <div class=\"gantt-table-group\" [ngClass]=\"group.class\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"group.expanded\" (click)=\"expandGroup(group)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"group.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ group.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <ng-container *ngIf=\"group.expanded\">\n <ng-template\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ group: group, items: group.items, level: 0 }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"tableDragEnded($event)\"\n></div>\n\n<div #dragLine class=\"gantt-table-drag-auxiliary-line\"></div>\n\n<ng-template #itemsTemplate>\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items, level: 0 }\"></ng-template>\n</ng-template>\n\n<ng-template #ganttItems let-group=\"group\" let-items=\"items\" let-level=\"level\">\n <ng-container *ngFor=\"let item of items\">\n <div\n class=\"gantt-table-item gantt-table-row\"\n [class.gantt-table-item-first-level-group]=\"level === 0 && (item.type | isGanttRangeItem)\"\n [class.gantt-table-item-with-group]=\"group\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let first = first\" [style.width]=\"column.columnWidth\">\n <div *ngIf=\"first\" class=\"gantt-expand-icon\" [style.marginLeft.px]=\"level * 20\">\n <ng-container *ngIf=\"level < gantt.maxLevel - 1 && item.expandable\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren(item)\"\n ></gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n"
112
- },] }
113
- ];
114
- GanttTableComponent.ctorParameters = () => [
115
- { type: NgxGanttComponent },
116
- { type: ElementRef }
117
- ];
118
- GanttTableComponent.propDecorators = {
119
- groups: [{ type: Input }],
120
- items: [{ type: Input }],
121
- columns: [{ type: Input }],
122
- groupTemplate: [{ type: Input }],
123
- emptyTemplate: [{ type: Input }],
124
- draglineElementRef: [{ type: ViewChild, args: ['dragLine', { static: true },] }],
125
- ganttTableClass: [{ type: HostBinding, args: ['class.gantt-table',] }],
126
- ganttTableEmptyClass: [{ type: HostBinding, args: ['class.gantt-table-empty',] }]
127
- };
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvdGFibGUvZ2FudHQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsV0FBVyxFQUdYLEtBQUssRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUdiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVk1RCxNQUFNLE9BQU8sbUJBQW1CO0lBNkI1QixZQUFtQixLQUF3QixFQUFVLFVBQXNCO1FBQXhELFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUp6QyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUVqQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7SUFFUyxDQUFDO0lBcEIvRSxJQUNJLE9BQU8sQ0FBQyxPQUFnRDtRQUN4RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNoRTtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFDOUIsQ0FBQztJQWNELFFBQVEsS0FBSSxDQUFDO0lBRWIsV0FBVyxDQUFDLE9BQXNCOztRQUM5QixJQUFJLFFBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLDBDQUFFLE1BQU0sQ0FBQSxJQUFJLFFBQUMsT0FBTyxDQUFDLEtBQUss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RSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7OEJBRXRDLFdBQVcsU0FBQyxtQkFBbUI7bUNBRS9CLFdBQVcsU0FBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBRdWVyeUxpc3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHRJdGVtSW50ZXJuYWwsIEdhbnR0R3JvdXBJbnRlcm5hbCB9IGZyb20gJy4uLy4uL2NsYXNzJztcbmltcG9ydCB7IE5neEdhbnR0VGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJsZS9nYW50dC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRDb2x1bW5XaWR0aCwgbWluQ29sdW1uV2lkdGgsIE5neEdhbnR0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZ2FudHQuY29tcG9uZW50JztcbmltcG9ydCB7IENka0RyYWdFbmQsIENka0RyYWdNb3ZlLCBDZGtEcmFnU3RhcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5pbnRlcmZhY2UgRHJhZ0ZpeGVkQ29uZmlnIHtcbiAgICB0YXJnZXQ6IEhUTUxFbGVtZW50O1xuICAgIG9yaWdpbldpZHRoOiBudW1iZXI7XG4gICAgbW92ZWRXaWR0aDogbnVtYmVyO1xuICAgIG1pbldpZHRoOiBudW1iZXI7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2dhbnR0LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2FudHQtdGFibGUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEdhbnR0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgcHVibGljIGNvbHVtbkxpc3Q6IFF1ZXJ5TGlzdDxOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50PjtcblxuICAgIHB1YmxpYyBkcmFnU3RhcnRMZWZ0OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBncm91cHM6IEdhbnR0R3JvdXBJbnRlcm5hbFtdO1xuXG4gICAgQElucHV0KCkgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW107XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb2x1bW5zKGNvbHVtbnM6IFF1ZXJ5TGlzdDxOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50Pikge1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb2x1bW4uY29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4uY29sdW1uV2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGRlZmF1bHRDb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbHVtbkxpc3QgPSBjb2x1bW5zO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBlbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZHJhZ0xpbmUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkcmFnbGluZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dC10YWJsZScpIGdhbnR0VGFibGVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LXRhYmxlLWVtcHR5JykgZ2FudHRUYWJsZUVtcHR5Q2xhc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBnYW50dDogTmd4R2FudHRDb21wb25lbnQsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIG5nT25Jbml0KCkge31cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCFjaGFuZ2VzLmdyb3Vwcy5jdXJyZW50VmFsdWU/Lmxlbmd0aCAmJiAhY2hhbmdlcy5pdGVtcy5jdXJyZW50VmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5nYW50dFRhYmxlRW1wdHlDbGFzcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdhbnR0VGFibGVFbXB0eUNsYXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYWdGaXhlZChjb25maWc6IERyYWdGaXhlZENvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLm1vdmVkV2lkdGggPCBjb25maWcubWluV2lkdGgpIHtcbiAgICAgICAgICAgIGNvbmZpZy50YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7Y29uZmlnLm1pbldpZHRoIC0gY29uZmlnLm9yaWdpbldpZHRofXB4LCAwLCAwKWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKSB7XG4gICAgICAgIHRoaXMuZ2FudHQuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIGV4cGFuZENoaWxkcmVuKGl0ZW06IEdhbnR0SXRlbUludGVybmFsKSB7XG4gICAgICAgIHRoaXMuZ2FudHQuZXhwYW5kQ2hpbGRyZW4oaXRlbSk7XG4gICAgfVxuXG4gICAgZHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5zb3VyY2UuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmRyYWdTdGFydExlZnQgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICB9XG5cbiAgICBkcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlLCBjb2x1bW4/OiBOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnNvdXJjZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICBsZXQgb3JpZ2luV2lkdGg6IG51bWJlcjtcbiAgICAgICAgbGV0IG1vdmVkV2lkdGg6IG51bWJlcjtcbiAgICAgICAgbGV0IG1pbldpZHRoOiBudW1iZXI7XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIG9yaWdpbldpZHRoID0gcGFyc2VJbnQoY29sdW1uLmNvbHVtbldpZHRoLCAxMCk7XG4gICAgICAgICAgICBtb3ZlZFdpZHRoID0gb3JpZ2luV2lkdGggKyAobGVmdCAtIHRoaXMuZHJhZ1N0YXJ0TGVmdCk7XG4gICAgICAgICAgICBtaW5XaWR0aCA9IG1pbkNvbHVtbldpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JpZ2luV2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIG1vdmVkV2lkdGggPSBvcmlnaW5XaWR0aCArIChsZWZ0IC0gdGhpcy5kcmFnU3RhcnRMZWZ0KTtcbiAgICAgICAgICAgIG1pbldpZHRoID0gbWluQ29sdW1uV2lkdGggKiB0aGlzLmNvbHVtbkxpc3QubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcmFnRml4ZWQoe1xuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgb3JpZ2luV2lkdGgsXG4gICAgICAgICAgICBtb3ZlZFdpZHRoLFxuICAgICAgICAgICAgbWluV2lkdGhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zaG93QXV4aWxpYXJ5TGluZShldmVudCk7XG4gICAgfVxuXG4gICAgY29sdW1uRHJhZ0VuZGVkKGV2ZW50OiBDZGtEcmFnRW5kLCBjb2x1bW46IE5neEdhbnR0VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KGNvbHVtbi5jb2x1bW5XaWR0aCwgMTApICsgKGxlZnQgLSB0aGlzLmRyYWdTdGFydExlZnQpO1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IE1hdGgubWF4KHdpZHRoIHx8IDAsIG1pbkNvbHVtbldpZHRoKTtcbiAgICAgICAgY29sdW1uLmNvbHVtbldpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShjb2x1bW5XaWR0aCk7XG4gICAgICAgIGlmICh0aGlzLmdhbnR0LnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmdhbnR0LnRhYmxlLmNvbHVtbkNoYW5nZXMuZW1pdCh7IGNvbHVtbnM6IHRoaXMuY29sdW1uTGlzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGlkZUF1eGlsaWFyeUxpbmUoKTtcbiAgICAgICAgZXZlbnQuc291cmNlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdGFibGVEcmFnRW5kZWQoZXZlbnQ6IENka0RyYWdFbmQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICBjb25zdCB0YWJsZVdpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGNvbnN0IGRyYWdXaWR0aCA9IGxlZnQgLSB0aGlzLmRyYWdTdGFydExlZnQ7XG4gICAgICAgIHRoaXMuY29sdW1uTGlzdC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RDb2x1bW5XaWR0aCA9IHBhcnNlSW50KGNvbHVtbi5jb2x1bW5XaWR0aCwgMTApO1xuICAgICAgICAgICAgY29uc3QgZGlzdHJpYnV0ZVdpZHRoID0gcGFyc2VJbnQoU3RyaW5nKGRyYWdXaWR0aCAqIChsYXN0Q29sdW1uV2lkdGggLyB0YWJsZVdpZHRoKSksIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gTWF0aC5tYXgobGFzdENvbHVtbldpZHRoICsgZGlzdHJpYnV0ZVdpZHRoIHx8IDAsIG1pbkNvbHVtbldpZHRoKTtcbiAgICAgICAgICAgIGNvbHVtbi5jb2x1bW5XaWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoY29sdW1uV2lkdGgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5nYW50dC50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5nYW50dC50YWJsZS5jb2x1bW5DaGFuZ2VzLmVtaXQoeyBjb2x1bW5zOiB0aGlzLmNvbHVtbkxpc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpZGVBdXhpbGlhcnlMaW5lKCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0F1eGlsaWFyeUxpbmUoZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlUmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0YXJnZXRSZWN0ID0gZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSB7IHg6IHRhcmdldFJlY3QubGVmdCAtIHRhYmxlUmVjdC5sZWZ0LCB5OiB0YXJnZXRSZWN0LnRvcCAtIHRhYmxlUmVjdC50b3AgfTtcbiAgICAgICAgdGhpcy5kcmFnbGluZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7ZGlzdGFuY2UueH1weGA7XG4gICAgICAgIHRoaXMuZHJhZ2xpbmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlQXV4aWxpYXJ5TGluZSgpIHtcbiAgICAgICAgdGhpcy5kcmFnbGluZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbn1cbiJdfQ==