qms-angular 1.0.55 → 1.0.56

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 (411) hide show
  1. package/bundles/qms-angular.umd.js +4003 -12241
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/app-icon/app-icon.module.js +16 -29
  4. package/esm2015/lib/components/app-icon/icon-registry.service.js +7 -9
  5. package/esm2015/lib/components/badges/qms-badges.component.js +15 -24
  6. package/esm2015/lib/components/badges/qms-badges.module.js +18 -33
  7. package/esm2015/lib/components/banner/qms-banner/qms-banner.component.js +16 -28
  8. package/esm2015/lib/components/banner/qms-banner/qms-banner.module.js +19 -36
  9. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.js +16 -28
  10. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.js +19 -36
  11. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.component.js +13 -19
  12. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.module.js +17 -30
  13. package/esm2015/lib/components/breadcrumb/breadcrumb-direction-icon.directive.js +10 -11
  14. package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +17 -20
  15. package/esm2015/lib/components/breadcrumb/breadcrumb.js +28 -40
  16. package/esm2015/lib/components/breadcrumb/breadcrumb.module.js +26 -50
  17. package/esm2015/lib/components/button/button-toggle.js +85 -120
  18. package/esm2015/lib/components/button/button.js +78 -86
  19. package/esm2015/lib/components/button/button.module.js +27 -51
  20. package/esm2015/lib/components/comment/comment.js +18 -29
  21. package/esm2015/lib/components/dialog/dialog.js +28 -38
  22. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +16 -24
  23. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.js +31 -71
  24. package/esm2015/lib/components/list/list.js +89 -101
  25. package/esm2015/lib/components/list/list.module.js +50 -94
  26. package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +29 -55
  27. package/esm2015/lib/components/qms-app-bar/qms-app-bar.module.js +20 -39
  28. package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +22 -32
  29. package/esm2015/lib/components/qms-stepper/qms-stepper.module.js +25 -35
  30. package/esm2015/lib/components/related/content/related-content.component.js +12 -19
  31. package/esm2015/lib/components/related/list-other-related/list-related.component.js +25 -29
  32. package/esm2015/lib/components/related/popup/related-popup.component.js +33 -50
  33. package/esm2015/lib/components/related/related.module.js +43 -96
  34. package/esm2015/lib/components/related/risk/analysis/analysis.component.js +17 -23
  35. package/esm2015/lib/components/related/risk/list/list.component.js +18 -22
  36. package/esm2015/lib/components/related/risk/result/result.component.js +16 -23
  37. package/esm2015/lib/components/related/service/related-global.service.js +6 -7
  38. package/esm2015/lib/components/related/sidenav/sidenav.component.js +12 -21
  39. package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +18 -22
  40. package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +18 -22
  41. package/esm2015/lib/components/reports/qms-reports.module.js +20 -29
  42. package/esm2015/lib/components/rich-text/rich-text.js +32 -47
  43. package/esm2015/lib/components/rich-text/rich-text.module.js +21 -35
  44. package/esm2015/lib/components/select-dialog/select-dialog.js +16 -31
  45. package/esm2015/lib/components/select-include-children/select-include-children.component.js +33 -47
  46. package/esm2015/lib/components/select-include-children/select-include-children.module.js +33 -78
  47. package/esm2015/lib/components/select-include-children/services/select-global.service.js +6 -7
  48. package/esm2015/lib/components/suffix-field/suffix-field.directive.js +21 -22
  49. package/esm2015/lib/components/table/table-action.js +31 -31
  50. package/esm2015/lib/components/table/table.module.js +21 -37
  51. package/esm2015/lib/components/test-only/test-only.component.js +11 -14
  52. package/esm2015/lib/components/tooltip/tooltip.js +19 -24
  53. package/esm2015/lib/components/tooltip/tooltip.module.js +20 -38
  54. package/esm2015/lib/components/tree/tree.component.js +33 -46
  55. package/esm2015/lib/components/tree/tree.module.js +30 -69
  56. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +16 -22
  57. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.js +31 -71
  58. package/esm2015/lib/directives/chip-input/chip-input-chip-list.directive.js +13 -13
  59. package/esm2015/lib/directives/chip-input/chip-input-field.directive.js +10 -11
  60. package/esm2015/lib/directives/chip-input/chip-input-select-dropdown.directive.js +10 -11
  61. package/esm2015/lib/directives/chip-input/chip-input-select-field.directive.js +14 -17
  62. package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +13 -14
  63. package/esm2015/lib/directives/chips/chip-body.directive.js +10 -11
  64. package/esm2015/lib/directives/chips/chip.directive.js +13 -13
  65. package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +14 -16
  66. package/esm2015/lib/directives/file-upload/file-upload-attachment-list.directive.js +10 -11
  67. package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +16 -19
  68. package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +14 -16
  69. package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +20 -26
  70. package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +15 -19
  71. package/esm2015/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.js +10 -11
  72. package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +18 -25
  73. package/esm2015/lib/directives/file-upload/file-upload.directive.js +20 -24
  74. package/esm2015/lib/directives/form.directive.js +51 -48
  75. package/esm2015/lib/directives/margin.directive.js +14 -15
  76. package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +10 -11
  77. package/esm2015/lib/directives/range-slider/range-slider.directive.js +14 -17
  78. package/esm2015/lib/directives/scroll-selected/scroll-to-selected.directive.js +15 -16
  79. package/esm2015/lib/directives/scrollbar/scrollbar.directive.js +13 -13
  80. package/esm2015/lib/directives/search-field.directive.js +22 -21
  81. package/esm2015/lib/directives/side-sheet/drawer-content.directive.js +10 -11
  82. package/esm2015/lib/directives/side-sheet/drawer-header-action.directive.js +10 -11
  83. package/esm2015/lib/directives/side-sheet/drawer-header.directive.js +10 -11
  84. package/esm2015/lib/directives/side-sheet/drawer.directive.js +10 -11
  85. package/esm2015/lib/directives/tab/tab-group-advanced.directive.js +14 -15
  86. package/esm2015/lib/directives/tab/tab-group.directive.js +10 -11
  87. package/esm2015/lib/directives/tab/tab-label.directive.js +10 -11
  88. package/esm2015/lib/directives/text-block/text-block-line.directive.js +16 -20
  89. package/esm2015/lib/directives/text-block/text-block.directive.js +14 -17
  90. package/esm2015/lib/directives/tooltip/tooltip-image.directive.js +13 -14
  91. package/esm2015/lib/directives/tooltip/tooltip-renderer.directive.js +22 -35
  92. package/esm2015/lib/material-module.js +16 -35
  93. package/esm2015/lib/model/en.js +4 -35
  94. package/esm2015/lib/model/no.js +3 -34
  95. package/esm2015/lib/pipe/dateFormat.pipe.js +10 -11
  96. package/esm2015/lib/qms-angular.component.js +11 -13
  97. package/esm2015/lib/qms-angular.module.js +121 -232
  98. package/esm2015/lib/qms-angular.service.js +8 -9
  99. package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +12 -32
  100. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +1 -5
  101. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +1 -10
  102. package/esm2015/lib/qms-ckeditor-components/common/enums/document-type.enum.js +1 -2
  103. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +2 -2
  104. package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +16 -23
  105. package/esm2015/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.js +19 -34
  106. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +53 -577
  107. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +35 -69
  108. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +8 -12
  109. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +30 -39
  110. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +18 -22
  111. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +20 -29
  112. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +18 -22
  113. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +23 -35
  114. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +20 -30
  115. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +18 -27
  116. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor-base.component.js +4 -7
  117. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +44 -118
  118. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +55 -131
  119. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.js +10 -10
  120. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +9 -9
  121. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +26 -66
  122. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.js +8 -9
  123. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.js +9 -9
  124. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +9 -9
  125. package/esm2015/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.js +9 -9
  126. package/esm2015/lib/services/translation-registry.service.js +8 -9
  127. package/esm2015/lib/shared.module.js +4 -9
  128. package/esm2015/public-api.js +1 -16
  129. package/esm2015/qms-angular.js +9 -1
  130. package/fesm2015/qms-angular.js +3031 -11134
  131. package/fesm2015/qms-angular.js.map +1 -1
  132. package/lib/components/app-icon/app-icon.module.d.ts +0 -7
  133. package/lib/components/app-icon/icon-registry.service.d.ts +0 -3
  134. package/lib/components/badges/qms-badges.component.d.ts +0 -3
  135. package/lib/components/badges/qms-badges.module.d.ts +0 -9
  136. package/lib/components/banner/qms-banner/qms-banner.component.d.ts +0 -3
  137. package/lib/components/banner/qms-banner/qms-banner.module.d.ts +0 -10
  138. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.d.ts +0 -3
  139. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.d.ts +0 -10
  140. package/lib/components/banner/qms-banner-loading/qms-banner-loading.component.d.ts +0 -3
  141. package/lib/components/banner/qms-banner-loading/qms-banner-loading.module.d.ts +0 -8
  142. package/lib/components/breadcrumb/breadcrumb-direction-icon.directive.d.ts +0 -3
  143. package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +0 -3
  144. package/lib/components/breadcrumb/breadcrumb.d.ts +0 -3
  145. package/lib/components/breadcrumb/breadcrumb.module.d.ts +0 -13
  146. package/lib/components/button/button-toggle.d.ts +0 -5
  147. package/lib/components/button/button.d.ts +0 -7
  148. package/lib/components/button/button.module.d.ts +0 -9
  149. package/lib/components/comment/comment.d.ts +0 -3
  150. package/lib/components/dialog/dialog.d.ts +0 -5
  151. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +0 -3
  152. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.d.ts +0 -16
  153. package/lib/components/list/list.d.ts +0 -15
  154. package/lib/components/list/list.module.d.ts +0 -11
  155. package/lib/components/qms-app-bar/qms-app-bar.component.d.ts +0 -3
  156. package/lib/components/qms-app-bar/qms-app-bar.module.d.ts +0 -12
  157. package/lib/components/qms-stepper/qms-stepper.component.d.ts +0 -3
  158. package/lib/components/qms-stepper/qms-stepper.module.d.ts +0 -8
  159. package/lib/components/related/content/related-content.component.d.ts +0 -3
  160. package/lib/components/related/list-other-related/list-related.component.d.ts +0 -3
  161. package/lib/components/related/popup/related-popup.component.d.ts +0 -3
  162. package/lib/components/related/related.module.d.ts +0 -29
  163. package/lib/components/related/risk/analysis/analysis.component.d.ts +0 -3
  164. package/lib/components/related/risk/list/list.component.d.ts +0 -3
  165. package/lib/components/related/risk/result/result.component.d.ts +0 -3
  166. package/lib/components/related/service/related-global.service.d.ts +0 -3
  167. package/lib/components/related/sidenav/sidenav.component.d.ts +0 -3
  168. package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +0 -3
  169. package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +0 -3
  170. package/lib/components/reports/qms-reports.module.d.ts +0 -7
  171. package/lib/components/rich-text/rich-text.d.ts +0 -3
  172. package/lib/components/rich-text/rich-text.module.d.ts +0 -8
  173. package/lib/components/select-dialog/select-dialog.d.ts +0 -3
  174. package/lib/components/select-include-children/select-include-children.component.d.ts +0 -3
  175. package/lib/components/select-include-children/select-include-children.module.d.ts +0 -25
  176. package/lib/components/select-include-children/services/select-global.service.d.ts +0 -3
  177. package/lib/components/suffix-field/suffix-field.directive.d.ts +0 -5
  178. package/lib/components/table/table-action.d.ts +0 -5
  179. package/lib/components/table/table.module.d.ts +0 -8
  180. package/lib/components/test-only/test-only.component.d.ts +0 -3
  181. package/lib/components/tooltip/tooltip.d.ts +0 -3
  182. package/lib/components/tooltip/tooltip.module.d.ts +0 -9
  183. package/lib/components/tree/tree.component.d.ts +0 -3
  184. package/lib/components/tree/tree.module.d.ts +0 -22
  185. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +0 -3
  186. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.d.ts +0 -16
  187. package/lib/directives/chip-input/chip-input-chip-list.directive.d.ts +0 -3
  188. package/lib/directives/chip-input/chip-input-field.directive.d.ts +0 -3
  189. package/lib/directives/chip-input/chip-input-select-dropdown.directive.d.ts +0 -3
  190. package/lib/directives/chip-input/chip-input-select-field.directive.d.ts +0 -3
  191. package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +0 -3
  192. package/lib/directives/chips/chip-body.directive.d.ts +0 -3
  193. package/lib/directives/chips/chip.directive.d.ts +0 -3
  194. package/lib/directives/dropdown-menu/dropdown-item.directive.d.ts +0 -3
  195. package/lib/directives/file-upload/file-upload-attachment-list.directive.d.ts +0 -3
  196. package/lib/directives/file-upload/file-upload-display.directive.d.ts +0 -3
  197. package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +0 -3
  198. package/lib/directives/file-upload/file-upload-multiple-selector.directive.d.ts +0 -3
  199. package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +0 -3
  200. package/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.d.ts +0 -3
  201. package/lib/directives/file-upload/file-upload-selector.directive.d.ts +0 -3
  202. package/lib/directives/file-upload/file-upload.directive.d.ts +0 -5
  203. package/lib/directives/form.directive.d.ts +0 -11
  204. package/lib/directives/margin.directive.d.ts +0 -3
  205. package/lib/directives/range-slider/range-slider-lockup.directive.d.ts +0 -3
  206. package/lib/directives/range-slider/range-slider.directive.d.ts +0 -3
  207. package/lib/directives/scroll-selected/scroll-to-selected.directive.d.ts +0 -3
  208. package/lib/directives/scrollbar/scrollbar.directive.d.ts +0 -3
  209. package/lib/directives/search-field.directive.d.ts +0 -5
  210. package/lib/directives/side-sheet/drawer-content.directive.d.ts +0 -3
  211. package/lib/directives/side-sheet/drawer-header-action.directive.d.ts +0 -3
  212. package/lib/directives/side-sheet/drawer-header.directive.d.ts +0 -3
  213. package/lib/directives/side-sheet/drawer.directive.d.ts +0 -3
  214. package/lib/directives/tab/tab-group-advanced.directive.d.ts +0 -3
  215. package/lib/directives/tab/tab-group.directive.d.ts +0 -3
  216. package/lib/directives/tab/tab-label.directive.d.ts +0 -3
  217. package/lib/directives/text-block/text-block-line.directive.d.ts +0 -3
  218. package/lib/directives/text-block/text-block.directive.d.ts +0 -3
  219. package/lib/directives/tooltip/tooltip-image.directive.d.ts +0 -3
  220. package/lib/directives/tooltip/tooltip-renderer.directive.d.ts +0 -3
  221. package/lib/material-module.d.ts +0 -12
  222. package/lib/model/en.d.ts +0 -31
  223. package/lib/model/no.d.ts +0 -31
  224. package/lib/pipe/dateFormat.pipe.d.ts +0 -3
  225. package/lib/qms-angular.component.d.ts +0 -3
  226. package/lib/qms-angular.module.d.ts +0 -49
  227. package/lib/qms-angular.service.d.ts +0 -3
  228. package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +2 -2
  229. package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +0 -4
  230. package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +0 -9
  231. package/lib/qms-ckeditor-components/common/enums/document-type.enum.d.ts +0 -1
  232. package/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.d.ts +0 -3
  233. package/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.d.ts +0 -3
  234. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +4 -88
  235. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +2 -11
  236. package/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.d.ts +0 -3
  237. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +0 -3
  238. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.d.ts +0 -3
  239. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +0 -3
  240. package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +0 -3
  241. package/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.d.ts +0 -4
  242. package/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.d.ts +0 -3
  243. package/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.d.ts +0 -3
  244. package/lib/qms-ckeditor-components/qms-ckeditor-base.component.d.ts +0 -3
  245. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +0 -8
  246. package/lib/qms-ckeditor-components/qms-ckeditor.module.d.ts +0 -44
  247. package/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.d.ts +0 -3
  248. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +0 -3
  249. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +0 -4
  250. package/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.d.ts +0 -3
  251. package/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.d.ts +0 -3
  252. package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +0 -3
  253. package/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.d.ts +0 -3
  254. package/lib/services/translation-registry.service.d.ts +0 -3
  255. package/lib/shared.module.d.ts +0 -4
  256. package/lib.theme.scss +0 -8
  257. package/package.json +2 -1
  258. package/public-api.d.ts +0 -14
  259. package/qms-angular.d.ts +8 -1
  260. package/qms-angular.metadata.json +1 -0
  261. package/src/assets/jointjs/scss/bpmn.scss +35 -36
  262. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  263. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  264. package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +1 -1
  265. package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -1
  266. package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +1 -1
  267. package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
  268. package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
  269. package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
  270. package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
  271. package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
  272. package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +1 -1
  273. package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
  274. package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
  275. package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
  276. package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +1 -1
  277. package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
  278. package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
  279. package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
  280. package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
  281. package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
  282. package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
  283. package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
  284. package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
  285. package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
  286. package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
  287. package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
  288. package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +1 -1
  289. package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
  290. package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +1 -1
  291. package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +1 -1
  292. package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
  293. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
  294. package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
  295. package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
  296. package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +1 -1
  297. package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
  298. package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
  299. package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
  300. package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +1 -1
  301. package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
  302. package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
  303. package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +1 -1
  304. package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
  305. package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
  306. package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
  307. package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +1 -1
  308. package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
  309. package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
  310. package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
  311. package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
  312. package/src/assets/qms-ckeditor-plugin/package-lock.json +12177 -17
  313. package/src/assets/qms-ckeditor-plugin/package.json +0 -1
  314. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +3 -22
  315. package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +173 -0
  316. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +5 -24
  317. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +1 -7
  318. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +0 -20
  319. package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +87 -0
  320. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +43 -47
  321. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +1 -1
  322. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +108 -72
  323. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +3 -4
  324. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +0 -13
  325. package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +8 -8
  326. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +24 -23
  327. package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +50 -1
  328. package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
  329. package/src/lib/components/tree/tree.component.scss +1 -1
  330. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +1 -15
  331. package/src/lib/qms-ckeditor-components/styles/_layout.scss +0 -24
  332. package/src/lib/qms-ckeditor-components/styles/_modules.scss +0 -8
  333. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.js +0 -7
  334. package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +0 -8
  335. package/esm2015/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.js +0 -16
  336. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/halo-service.js +0 -105
  337. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.js +0 -3762
  338. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +0 -68
  339. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +0 -372
  340. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.js +0 -1041
  341. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.js +0 -326
  342. package/esm2015/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.js +0 -318
  343. package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +0 -80
  344. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.js +0 -9
  345. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.js +0 -9
  346. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +0 -3
  347. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +0 -43
  348. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +0 -322
  349. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +0 -8
  350. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.js +0 -26
  351. package/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.d.ts +0 -6
  352. package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +0 -6
  353. package/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.d.ts +0 -14
  354. package/lib/qms-ckeditor-components/common/flowchart/service/halo-service.d.ts +0 -48
  355. package/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.d.ts +0 -18
  356. package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +0 -17
  357. package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +0 -62
  358. package/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.d.ts +0 -1183
  359. package/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.d.ts +0 -216
  360. package/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.d.ts +0 -61
  361. package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +0 -36
  362. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.d.ts +0 -7
  363. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.d.ts +0 -7
  364. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +0 -7
  365. package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +0 -18
  366. package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +0 -44
  367. package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +0 -7
  368. package/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.d.ts +0 -13
  369. package/src/assets/images/ckeditor5.svg +0 -1
  370. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Bold.ttf +0 -0
  371. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Light.ttf +0 -0
  372. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf +0 -0
  373. package/src/assets/jointjs/fonts/Alegreya_Sans/OFL.txt +0 -92
  374. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Bold.ttf +0 -0
  375. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Light.ttf +0 -0
  376. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Regular.ttf +0 -0
  377. package/src/assets/jointjs/fonts/Averia_Libre/OFL.txt +0 -93
  378. package/src/assets/jointjs/fonts/Roboto_Condensed/LICENSE.txt +0 -202
  379. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Bold.ttf +0 -0
  380. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Light.ttf +0 -0
  381. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf +0 -0
  382. package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
  383. package/src/assets/jointjs/images/image-icon1.svg +0 -1
  384. package/src/assets/jointjs/images/image-icon2.svg +0 -6
  385. package/src/assets/jointjs/images/image-icon3.svg +0 -11
  386. package/src/assets/jointjs/images/image-icon4.svg +0 -8
  387. package/src/assets/jointjs/images/member-female.png +0 -0
  388. package/src/assets/jointjs/images/member-male.png +0 -0
  389. package/src/assets/jointjs/images/no-color-icon.svg +0 -72
  390. package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
  391. package/src/assets/jointjs/images/save-icon-modern.png +0 -0
  392. package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
  393. package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
  394. package/src/assets/jointjs/images/toolbar-icons-dark.woff +0 -0
  395. package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
  396. package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
  397. package/src/assets/jointjs/images/transparent-icon.svg +0 -50
  398. package/src/assets/jointjs/scss/style.dark.scss +0 -233
  399. package/src/assets/jointjs/scss/style.material.scss +0 -234
  400. package/src/assets/jointjs/scss/style.modern.scss +0 -225
  401. package/src/assets/jointjs/scss/style.scss +0 -216
  402. package/src/assets/jointjs/scss/theme-picker.scss +0 -21
  403. package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +0 -28
  404. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +0 -63
  405. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/openimagemapcommand.js +0 -58
  406. package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +0 -507
  407. package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +0 -1
  408. package/src/lib/components/select-one/select-one.component.scss +0 -240
  409. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +0 -16
  410. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +0 -5
  411. package/src/themes/_non-bg-srcollbar.scss +0 -4
@@ -1,68 +0,0 @@
1
- /*! Rappid v3.2.0 - HTML5 Diagramming Framework
2
-
3
- Copyright (c) 2015 client IO
4
-
5
- 2020-06-12
6
-
7
-
8
- This Source Code Form is subject to the terms of the Rappid License
9
- , v. 2.0. If a copy of the Rappid License was not distributed with this
10
- file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
11
- or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
12
- import * as _ from 'lodash';
13
- export class KeyboardService {
14
- constructor() {
15
- this.keyboard = new window["joint"].ui.Keyboard();
16
- }
17
- create(graph, clipboard, selection, paperScroller, commandManager) {
18
- this.keyboard.on({
19
- 'ctrl+c': () => {
20
- // Copy all selected elements and their associated links.
21
- clipboard.copyElements(selection.collection, graph);
22
- },
23
- 'ctrl+v': () => {
24
- const pastedCells = clipboard.pasteCells(graph, {
25
- translate: { dx: 20, dy: 20 },
26
- useLocalStorage: true
27
- });
28
- const elements = _.filter(pastedCells, cell => cell.isElement());
29
- // Make sure pasted elements get selected immediately. This makes the UX better as
30
- // the user can immediately manipulate the pasted elements.
31
- selection.collection.reset(elements);
32
- },
33
- 'ctrl+x shift+delete': () => {
34
- clipboard.cutElements(selection.collection, graph);
35
- },
36
- 'delete backspace': (evt) => {
37
- evt.preventDefault();
38
- graph.removeCells(selection.collection.toArray());
39
- },
40
- 'ctrl+z': () => {
41
- commandManager.undo();
42
- selection.cancelSelection();
43
- },
44
- 'ctrl+y': () => {
45
- commandManager.redo();
46
- selection.cancelSelection();
47
- },
48
- 'ctrl+a': () => {
49
- selection.collection.reset(graph.getElements());
50
- },
51
- 'ctrl+plus': (evt) => {
52
- evt.preventDefault();
53
- paperScroller.zoom(0.2, { max: 5, grid: 0.2 });
54
- },
55
- 'ctrl+minus': (evt) => {
56
- evt.preventDefault();
57
- paperScroller.zoom(-0.2, { min: 0.2, grid: 0.2 });
58
- },
59
- 'keydown:shift': (evt) => {
60
- paperScroller.setCursor('crosshair');
61
- },
62
- 'keyup:shift': () => {
63
- paperScroller.setCursor('grab');
64
- }
65
- });
66
- }
67
- }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9zZXJ2aWNlL2tleWJvYXJkLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7b0ZBVW9GO0FBSXBGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE1BQU0sT0FBTyxlQUFlO0lBSTFCO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FDSixLQUFzQixFQUN0QixTQUE2QixFQUM3QixTQUE2QixFQUM3QixhQUFxQyxFQUNyQyxjQUF3QztRQUd4QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUVmLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBRWIseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBRWIsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7b0JBQzlDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDN0IsZUFBZSxFQUFFLElBQUk7aUJBQ3RCLENBQUMsQ0FBQztnQkFFSCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUVqRSxrRkFBa0Y7Z0JBQ2xGLDJEQUEyRDtnQkFDM0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELHFCQUFxQixFQUFFLEdBQUcsRUFBRTtnQkFDMUIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFFRCxrQkFBa0IsRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtnQkFDeEMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQixLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBRUQsV0FBVyxFQUFFLENBQUMsR0FBaUIsRUFBRSxFQUFFO2dCQUNqQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBRUQsWUFBWSxFQUFFLENBQUMsR0FBaUIsRUFBRSxFQUFFO2dCQUNsQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxlQUFlLEVBQUUsQ0FBQyxHQUFpQixFQUFFLEVBQUU7Z0JBQ3JDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELGFBQWEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qISBSYXBwaWQgdjMuMi4wIC0gSFRNTDUgRGlhZ3JhbW1pbmcgRnJhbWV3b3JrXHJcblxyXG5Db3B5cmlnaHQgKGMpIDIwMTUgY2xpZW50IElPXHJcblxyXG4gMjAyMC0wNi0xMlxyXG5cclxuXHJcblRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgUmFwcGlkIExpY2Vuc2VcclxuLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgUmFwcGlkIExpY2Vuc2Ugd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXNcclxuZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9qb2ludGpzLmNvbS9saWNlbnNlL3JhcHBpZF92Mi50eHRcclxuIG9yIGZyb20gdGhlIFJhcHBpZCBhcmNoaXZlIGFzIHdhcyBkaXN0cmlidXRlZCBieSBjbGllbnQgSU8uIFNlZSB0aGUgTElDRU5TRSBmaWxlLiovXHJcblxyXG5cclxuaW1wb3J0ICogYXMgam9pbnQgZnJvbSAnQGNsaWVudGlvL3JhcHBpZCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmV4cG9ydCBjbGFzcyBLZXlib2FyZFNlcnZpY2Uge1xyXG5cclxuICBrZXlib2FyZDogam9pbnQudWkuS2V5Ym9hcmQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5rZXlib2FyZCA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS51aS5LZXlib2FyZCgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlKFxyXG4gICAgZ3JhcGg6IGpvaW50LmRpYS5HcmFwaCxcclxuICAgIGNsaXBib2FyZDogam9pbnQudWkuQ2xpcGJvYXJkLFxyXG4gICAgc2VsZWN0aW9uOiBqb2ludC51aS5TZWxlY3Rpb24sXHJcbiAgICBwYXBlclNjcm9sbGVyOiBqb2ludC51aS5QYXBlclNjcm9sbGVyLFxyXG4gICAgY29tbWFuZE1hbmFnZXI6IGpvaW50LmRpYS5Db21tYW5kTWFuYWdlclxyXG4gICkge1xyXG5cclxuICAgIHRoaXMua2V5Ym9hcmQub24oe1xyXG5cclxuICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuXHJcbiAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXHJcbiAgICAgICAgY2xpcGJvYXJkLmNvcHlFbGVtZW50cyhzZWxlY3Rpb24uY29sbGVjdGlvbiwgZ3JhcGgpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2N0cmwrdic6ICgpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgdHJhbnNsYXRlOiB7IGR4OiAyMCwgZHk6IDIwIH0sXHJcbiAgICAgICAgICB1c2VMb2NhbFN0b3JhZ2U6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBfLmZpbHRlcihwYXN0ZWRDZWxscywgY2VsbCA9PiBjZWxsLmlzRWxlbWVudCgpKTtcclxuXHJcbiAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xyXG4gICAgICAgIC8vIHRoZSB1c2VyIGNhbiBpbW1lZGlhdGVseSBtYW5pcHVsYXRlIHRoZSBwYXN0ZWQgZWxlbWVudHMuXHJcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZWxlbWVudHMpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2N0cmwreCBzaGlmdCtkZWxldGUnOiAoKSA9PiB7XHJcbiAgICAgICAgY2xpcGJvYXJkLmN1dEVsZW1lbnRzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLCBncmFwaCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnZGVsZXRlIGJhY2tzcGFjZSc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyLnVuZG8oKTtcclxuICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCt5JzogKCkgPT4ge1xyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcclxuICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCthJzogKCkgPT4ge1xyXG4gICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGdyYXBoLmdldEVsZW1lbnRzKCkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2N0cmwrcGx1cyc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgwLjIsIHsgbWF4OiA1LCBncmlkOiAwLjIgfSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY3RybCttaW51cyc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdjcm9zc2hhaXInKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgICdrZXl1cDpzaGlmdCc6ICgpID0+IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignZ3JhYicpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,372 +0,0 @@
1
- /*! Rappid v3.2.0 - HTML5 Diagramming Framework
2
-
3
- Copyright (c) 2015 client IO
4
-
5
- 2020-06-12
6
-
7
-
8
- This Source Code Form is subject to the terms of the Rappid License
9
- , v. 2.0. If a copy of the Rappid License was not distributed with this
10
- file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
11
- or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
12
- import { __awaiter } from "tslib";
13
- import * as dagre from 'dagre';
14
- import * as _ from 'lodash';
15
- import { FlowChartConst } from '../../constants/ckeditorFlowchart.const';
16
- import * as appShapes from '../shapes/app-shapes';
17
- var joint = window['joint'];
18
- class KitchenSinkService {
19
- constructor(el, stencilService, toolbarService, inspectorService, haloService, keyboardService) {
20
- // backwards compatibility for older shapes
21
- this.exportStylesheet = '.scalable * { vector-effect: non-scaling-stroke }';
22
- this.el = el;
23
- // apply current joint js theme
24
- const view = new window["joint"].mvc.View({ el });
25
- view.delegateEvents({
26
- 'mouseup input[type="range"]': (evt) => evt.target.blur()
27
- });
28
- this.stencilService = stencilService;
29
- this.toolbarService = toolbarService;
30
- this.inspectorService = inspectorService;
31
- this.haloService = haloService;
32
- this.keyboardService = keyboardService;
33
- }
34
- startRappid() {
35
- window["joint"].setTheme('modern');
36
- this.initializePaper();
37
- this.initializeStencil();
38
- this.initializeSelection();
39
- this.initializeToolsAndInspector();
40
- this.initializeNavigator();
41
- this.initializeToolbar();
42
- this.initializeKeyboardShortcuts();
43
- this.initializeTooltips();
44
- this.initializeStencilTooltips();
45
- }
46
- initializePaper() {
47
- const graph = this.graph = new window["joint"].dia.Graph({}, {
48
- cellNamespace: appShapes
49
- });
50
- graph.on('add', (cell, collection, opt) => {
51
- if (opt.stencil) {
52
- this.inspectorService.create(cell);
53
- }
54
- });
55
- this.commandManager = new window["joint"].dia.CommandManager({ graph: graph });
56
- const paper = this.paper = new window["joint"].dia.Paper({
57
- width: 1000,
58
- height: 1000,
59
- gridSize: 10,
60
- drawGrid: true,
61
- model: graph,
62
- cellViewNamespace: appShapes,
63
- defaultLink: new appShapes.app.Link(),
64
- defaultConnectionPoint: appShapes.app.Link.connectionPoint,
65
- interactive: { linkMove: false },
66
- async: true,
67
- sorting: joint.dia.Paper.sorting.APPROX
68
- });
69
- paper.on('blank:mousewheel', _.partial(this.onMousewheel, null), this);
70
- paper.on('cell:mousewheel', this.onMousewheel.bind(this));
71
- this.snaplines = new window["joint"].ui.Snaplines({ paper: paper });
72
- const paperScroller = this.paperScroller = new window["joint"].ui.PaperScroller({
73
- paper,
74
- autoResizePaper: true,
75
- scrollWhileDragging: true,
76
- cursor: 'grab'
77
- });
78
- this.renderPlugin('.paper-container', paperScroller);
79
- paperScroller.render().center();
80
- }
81
- initializeStencil() {
82
- this.stencilService.create(this.paperScroller, this.snaplines);
83
- this.renderPlugin('.stencil-container', this.stencilService.stencil);
84
- this.stencilService.setShapes();
85
- }
86
- initializeSelection() {
87
- this.clipboard = new window["joint"].ui.Clipboard();
88
- this.selection = new window["joint"].ui.Selection({ paper: this.paper, useModelGeometry: true });
89
- this.selection.collection.on('reset add remove', this.onSelectionChange.bind(this));
90
- const keyboard = this.keyboardService.keyboard;
91
- // Initiate selecting when the user grabs the blank area of the paper while the Shift key is pressed.
92
- // Otherwise, initiate paper pan.
93
- this.paper.on('blank:pointerdown', (evt, x, y) => {
94
- if (keyboard.isActive('shift', evt)) {
95
- this.selection.startSelecting(evt);
96
- }
97
- else {
98
- this.selection.collection.reset([]);
99
- this.paperScroller.startPanning(evt);
100
- this.paper.removeTools();
101
- }
102
- });
103
- this.paper.on('element:pointerdown', (elementView, evt) => {
104
- // Select an element if CTRL/Meta key is pressed while the element is clicked.
105
- if (keyboard.isActive('ctrl meta', evt)) {
106
- this.selection.collection.add(elementView.model);
107
- }
108
- });
109
- this.selection.on('selection-box:pointerdown', (elementView, evt) => {
110
- // Unselect an element if the CTRL/Meta key is pressed while a selected element is clicked.
111
- if (keyboard.isActive('ctrl meta', evt)) {
112
- this.selection.collection.remove(elementView.model);
113
- }
114
- }, this);
115
- }
116
- onSelectionChange() {
117
- const { paper, selection } = this;
118
- const { collection } = selection;
119
- paper.removeTools();
120
- joint.ui.Halo.clear(paper);
121
- joint.ui.FreeTransform.clear(paper);
122
- joint.ui.Inspector.close();
123
- if (collection.length === 1) {
124
- const primaryCell = collection.first();
125
- const primaryCellView = paper.requireView(primaryCell);
126
- selection.destroySelectionBox(primaryCell);
127
- this.selectPrimaryCell(primaryCellView);
128
- }
129
- else if (collection.length === 2) {
130
- collection.each(function (cell) {
131
- selection.createSelectionBox(cell);
132
- });
133
- }
134
- }
135
- selectPrimaryCell(cellView) {
136
- const cell = cellView.model;
137
- if (cell.isElement()) {
138
- this.selectPrimaryElement(cellView);
139
- }
140
- else {
141
- this.selectPrimaryLink(cellView);
142
- }
143
- this.inspectorService.create(cell);
144
- }
145
- selectPrimaryElement(elementView) {
146
- const element = elementView.model;
147
- new window["joint"].ui.FreeTransform({
148
- cellView: elementView,
149
- allowRotation: false,
150
- preserveAspectRatio: !!element.get('preserveAspectRatio'),
151
- allowOrthogonalResize: element.get('allowOrthogonalResize') !== false
152
- }).render();
153
- this.haloService.create(elementView);
154
- }
155
- selectPrimaryLink(linkView) {
156
- const ns = joint.linkTools;
157
- const toolsView = new joint.dia.ToolsView({
158
- name: 'link-pointerdown',
159
- tools: [
160
- new ns.Vertices(),
161
- new ns.SourceAnchor(),
162
- new ns.TargetAnchor(),
163
- new ns.SourceArrowhead(),
164
- new ns.TargetArrowhead(),
165
- new ns.Segments,
166
- new ns.Boundary({ padding: 15 }),
167
- new ns.Remove({ offset: -20, distance: 40 })
168
- ]
169
- });
170
- linkView.addTools(toolsView);
171
- }
172
- initializeToolsAndInspector() {
173
- this.paper.on('cell:pointerup', (cellView) => {
174
- const cell = cellView.model;
175
- const { collection } = this.selection;
176
- if (collection.includes(cell)) {
177
- return;
178
- }
179
- collection.reset([cell]);
180
- });
181
- this.paper.on('link:mouseenter', (linkView) => {
182
- // Open tool only if there is none yet
183
- if (linkView.hasTools()) {
184
- return;
185
- }
186
- const ns = joint.linkTools;
187
- const toolsView = new joint.dia.ToolsView({
188
- name: 'link-hover',
189
- tools: [
190
- new ns.Vertices({ vertexAdding: false }),
191
- new ns.SourceArrowhead(),
192
- new ns.TargetArrowhead()
193
- ]
194
- });
195
- linkView.addTools(toolsView);
196
- });
197
- this.paper.on('link:mouseleave', (linkView) => {
198
- // Remove only the hover tool, not the pointerdown tool
199
- if (linkView.hasTools('link-hover')) {
200
- linkView.removeTools();
201
- }
202
- });
203
- this.graph.on('change', (cell, opt) => {
204
- if (!cell.isLink() || !opt.inspector) {
205
- return;
206
- }
207
- const ns = joint.linkTools;
208
- const toolsView = new joint.dia.ToolsView({
209
- name: 'link-inspected',
210
- tools: [
211
- new ns.Boundary({ padding: 15 }),
212
- ]
213
- });
214
- cell.findView(this.paper).addTools(toolsView);
215
- });
216
- }
217
- initializeNavigator() {
218
- const navigator = this.navigator = new joint.ui.Navigator({
219
- width: 240,
220
- height: 115,
221
- paperScroller: this.paperScroller,
222
- zoom: false,
223
- paperOptions: {
224
- async: true,
225
- elementView: appShapes.NavigatorElementView,
226
- linkView: appShapes.NavigatorLinkView,
227
- cellViewNamespace: { /* no other views are accessible in the navigator */}
228
- }
229
- });
230
- this.renderPlugin('.joint-navigator-container', navigator);
231
- }
232
- initializeToolbar() {
233
- this.toolbarService.create(this.commandManager, this.paperScroller);
234
- this.toolbarService.toolbar.on({
235
- // 'svg:pointerclick': this.openAsSVG.bind(this),
236
- // 'png:pointerclick': this.openAsPNG.bind(this),
237
- 'to-front:pointerclick': this.applyOnSelection.bind(this, 'toFront'),
238
- 'to-back:pointerclick': this.applyOnSelection.bind(this, 'toBack'),
239
- 'layout:pointerclick': this.layoutDirectedGraph.bind(this),
240
- 'snapline:change': this.changeSnapLines.bind(this),
241
- 'clear:pointerclick': this.graph.clear.bind(this.graph),
242
- 'print:pointerclick': this.paper.print.bind(this.paper),
243
- 'grid-size:change': this.paper.setGridSize.bind(this.paper),
244
- 'selectTemplate:option:select': this.onChangeTemplate,
245
- 'deleteTemplate:pointerclick': this.onDeleteTemplate,
246
- 'saveAsTemplate:pointerclick': this.onSaveAsTemplate,
247
- 'resetTemplate:pointerclick': this.onResetTemplate
248
- });
249
- this.renderPlugin('.toolbar-container', this.toolbarService.toolbar);
250
- }
251
- applyOnSelection(method) {
252
- this.graph.startBatch('selection');
253
- this.selection.collection.models.forEach(function (model) { model[method](); });
254
- this.graph.stopBatch('selection');
255
- }
256
- changeSnapLines(checked) {
257
- if (checked) {
258
- this.snaplines.startListening();
259
- this.stencilService.stencil.options.snaplines = this.snaplines;
260
- }
261
- else {
262
- this.snaplines.stopListening();
263
- this.stencilService.stencil.options.snaplines = null;
264
- }
265
- }
266
- initializeKeyboardShortcuts() {
267
- this.keyboardService.create(this.graph, this.clipboard, this.selection, this.paperScroller, this.commandManager);
268
- }
269
- initializeTooltips() {
270
- return new joint.ui.Tooltip({
271
- rootTarget: document.getElementById('tooltipcontainer'),
272
- target: '[data-tooltip]',
273
- direction: joint.ui.Tooltip.TooltipArrowPosition.Auto,
274
- padding: 10
275
- });
276
- }
277
- initializeStencilTooltips() {
278
- return new joint.ui.Tooltip({
279
- rootTarget: document.getElementById('flowchartstencil'),
280
- target: '[data-tooltip]',
281
- direction: joint.ui.Tooltip.TooltipArrowPosition.Auto,
282
- padding: 10
283
- });
284
- }
285
- openAsSVG() {
286
- this.paper.hideTools().toSVG((svg) => {
287
- new joint.ui.Lightbox({
288
- image: 'data:image/svg+xml,' + encodeURIComponent(svg),
289
- downloadable: true,
290
- fileName: 'Rappid'
291
- }).open();
292
- this.paper.showTools();
293
- }, {
294
- preserveDimensions: true,
295
- convertImagesToDataUris: true,
296
- useComputedStyles: false,
297
- stylesheet: this.exportStylesheet
298
- });
299
- }
300
- openAsPNG() {
301
- this.paper.hideTools().toPNG((dataURL) => {
302
- new joint.ui.Lightbox({
303
- image: dataURL,
304
- downloadable: true,
305
- fileName: 'Rappid'
306
- }).open();
307
- this.paper.showTools();
308
- }, {
309
- padding: 10,
310
- useComputedStyles: false,
311
- stylesheet: this.exportStylesheet
312
- });
313
- }
314
- onMousewheel(cellView, evt, ox, oy, delta) {
315
- if (this.keyboardService.keyboard.isActive('alt', evt)) {
316
- evt.preventDefault();
317
- this.paperScroller.zoom(delta * 0.2, { min: 0.2, max: 5, grid: 0.2, ox, oy });
318
- }
319
- }
320
- layoutDirectedGraph() {
321
- joint.layout.DirectedGraph.layout(this.graph, {
322
- graphlib: dagre.graphlib,
323
- dagre: dagre,
324
- setVertices: true,
325
- rankDir: 'TB',
326
- marginX: 100,
327
- marginY: 100
328
- });
329
- this.paperScroller.centerContent();
330
- }
331
- renderPlugin(selector, plugin) {
332
- this.el.querySelector(selector).appendChild(plugin.el);
333
- plugin.render();
334
- }
335
- getImageContent() {
336
- return __awaiter(this, void 0, void 0, function* () {
337
- return new Promise((resolve) => {
338
- this.paper.toPNG((imageData) => {
339
- resolve(imageData);
340
- });
341
- });
342
- });
343
- }
344
- getJsonContent() {
345
- return JSON.stringify(this.graph.toJSON());
346
- }
347
- onChangeTemplate(event) {
348
- if (event.jsonContent) {
349
- window[FlowChartConst.KS_SELECTED_FLOWCHART_ID] = event.flowChartId;
350
- window[FlowChartConst.KS_SELECTED_JSONCONTENT] = event.jsonContent;
351
- window.postMessage(FlowChartConst.KS_CHANGE_TEMPLATE, '*');
352
- }
353
- }
354
- onDeleteTemplate(event) {
355
- if (window[FlowChartConst.KS_IS_SELECTED_TEMPLATE]) {
356
- window.postMessage(FlowChartConst.KS_DELETE_TEMPLATE, '*');
357
- }
358
- else {
359
- window.postMessage(FlowChartConst.MUST_SELECT_TEMPLATE, '*');
360
- }
361
- }
362
- onSaveAsTemplate() {
363
- window.postMessage(FlowChartConst.KS_SAVE_AS_TEMPLATE, '*');
364
- }
365
- onResetTemplate() {
366
- if (window[FlowChartConst.KS_IS_SELECTED_TEMPLATE]) {
367
- window.postMessage(FlowChartConst.KS_RESET_TEMPLATE, '*');
368
- }
369
- }
370
- }
371
- export default KitchenSinkService;
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0Y2hlbnNpbmstc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9zZXJ2aWNlL2tpdGNoZW5zaW5rLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7b0ZBVW9GOztBQUdwRixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQkFBc0IsQ0FBQztBQU1sRCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFNUIsTUFBTSxrQkFBa0I7SUFvQnRCLFlBQ0UsRUFBVyxFQUNYLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxXQUF3QixFQUN4QixlQUFnQztRQThUbEMsMkNBQTJDO1FBQzNDLHFCQUFnQixHQUFHLG1EQUFtRCxDQUFDO1FBN1RyRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLCtCQUErQjtRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ2xCLDZCQUE2QixFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtTQUMxRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxH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QUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlEO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohIFJhcHBpZCB2My4yLjAgLSBIVE1MNSBEaWFncmFtbWluZyBGcmFtZXdvcmtcclxuXHJcbkNvcHlyaWdodCAoYykgMjAxNSBjbGllbnQgSU9cclxuXHJcbiAyMDIwLTA2LTEyXHJcblxyXG5cclxuVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBSYXBwaWQgTGljZW5zZVxyXG4sIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBSYXBwaWQgTGljZW5zZSB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xyXG5maWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL2pvaW50anMuY29tL2xpY2Vuc2UvcmFwcGlkX3YyLnR4dFxyXG4gb3IgZnJvbSB0aGUgUmFwcGlkIGFyY2hpdmUgYXMgd2FzIGRpc3RyaWJ1dGVkIGJ5IGNsaWVudCBJTy4gU2VlIHRoZSBMSUNFTlNFIGZpbGUuKi9cclxuXHJcblxyXG5pbXBvcnQgKiBhcyBkYWdyZSBmcm9tICdkYWdyZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3QnO1xyXG5pbXBvcnQgKiBhcyBhcHBTaGFwZXMgZnJvbSAnLi4vc2hhcGVzL2FwcC1zaGFwZXMnO1xyXG5pbXBvcnQgeyBIYWxvU2VydmljZSB9IGZyb20gJy4vaGFsby1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW5zcGVjdG9yU2VydmljZSB9IGZyb20gJy4vaW5zcGVjdG9yLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlib2FyZFNlcnZpY2UgfSBmcm9tICcuL2tleWJvYXJkLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGVuY2lsU2VydmljZSB9IGZyb20gJy4vc3RlbmNpbC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9vbGJhclNlcnZpY2UgfSBmcm9tICcuL3Rvb2xiYXItc2VydmljZSc7XHJcbnZhciBqb2ludCA9IHdpbmRvd1snam9pbnQnXTtcclxuXHJcbmNsYXNzIEtpdGNoZW5TaW5rU2VydmljZSB7XHJcblxyXG4gIGVsOiBFbGVtZW50O1xyXG5cclxuICBncmFwaDogam9pbnQuZGlhLkdyYXBoO1xyXG4gIHBhcGVyOiBqb2ludC5kaWEuUGFwZXI7XHJcbiAgcGFwZXJTY3JvbGxlcjogam9pbnQudWkuUGFwZXJTY3JvbGxlcjtcclxuXHJcbiAgY29tbWFuZE1hbmFnZXI6IGpvaW50LmRpYS5Db21tYW5kTWFuYWdlcjtcclxuICBzbmFwbGluZXM6IGpvaW50LnVpLlNuYXBsaW5lcztcclxuICBjbGlwYm9hcmQ6IGpvaW50LnVpLkNsaXBib2FyZDtcclxuICBzZWxlY3Rpb246IGpvaW50LnVpLlNlbGVjdGlvbjtcclxuICBuYXZpZ2F0b3I6IGpvaW50LnVpLk5hdmlnYXRvcjtcclxuXHJcbiAgc3RlbmNpbFNlcnZpY2U6IFN0ZW5jaWxTZXJ2aWNlO1xyXG4gIHRvb2xiYXJTZXJ2aWNlOiBUb29sYmFyU2VydmljZTtcclxuICBpbnNwZWN0b3JTZXJ2aWNlOiBJbnNwZWN0b3JTZXJ2aWNlO1xyXG4gIGhhbG9TZXJ2aWNlOiBIYWxvU2VydmljZTtcclxuICBrZXlib2FyZFNlcnZpY2U6IEtleWJvYXJkU2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBlbDogRWxlbWVudCxcclxuICAgIHN0ZW5jaWxTZXJ2aWNlOiBTdGVuY2lsU2VydmljZSxcclxuICAgIHRvb2xiYXJTZXJ2aWNlOiBUb29sYmFyU2VydmljZSxcclxuICAgIGluc3BlY3RvclNlcnZpY2U6IEluc3BlY3RvclNlcnZpY2UsXHJcbiAgICBoYWxvU2VydmljZTogSGFsb1NlcnZpY2UsXHJcbiAgICBrZXlib2FyZFNlcnZpY2U6IEtleWJvYXJkU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5lbCA9IGVsO1xyXG4gICAgLy8gYXBwbHkgY3VycmVudCBqb2ludCBqcyB0aGVtZVxyXG4gICAgY29uc3QgdmlldyA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS5tdmMuVmlldyh7IGVsIH0pO1xyXG4gICAgdmlldy5kZWxlZ2F0ZUV2ZW50cyh7XHJcbiAgICAgICdtb3VzZXVwIGlucHV0W3R5cGU9XCJyYW5nZVwiXSc6IChldnQpID0+IGV2dC50YXJnZXQuYmx1cigpXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0ZW5jaWxTZXJ2aWNlID0gc3RlbmNpbFNlcnZpY2U7XHJcbiAgICB0aGlzLnRvb2xiYXJTZXJ2aWNlID0gdG9vbGJhclNlcnZpY2U7XHJcbiAgICB0aGlzLmluc3BlY3RvclNlcnZpY2UgPSBpbnNwZWN0b3JTZXJ2aWNlO1xyXG4gICAgdGhpcy5oYWxvU2VydmljZSA9IGhhbG9TZXJ2aWNlO1xyXG4gICAgdGhpcy5rZXlib2FyZFNlcnZpY2UgPSBrZXlib2FyZFNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBzdGFydFJhcHBpZCgpIHtcclxuXHJcbiAgICB3aW5kb3dbXCJqb2ludFwiXS5zZXRUaGVtZSgnbW9kZXJuJyk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplUGFwZXIoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0ZW5jaWwoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGlvbigpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplVG9vbHNBbmRJbnNwZWN0b3IoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZU5hdmlnYXRvcigpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplVG9vbGJhcigpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplS2V5Ym9hcmRTaG9ydGN1dHMoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRvb2x0aXBzKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVTdGVuY2lsVG9vbHRpcHMoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVQYXBlcigpIHtcclxuXHJcbiAgICBjb25zdCBncmFwaCA9IHRoaXMuZ3JhcGggPSBuZXcgd2luZG93W1wiam9pbnRcIl0uZGlhLkdyYXBoKHt9LCB7XHJcbiAgICAgIGNlbGxOYW1lc3BhY2U6IGFwcFNoYXBlc1xyXG4gICAgfSk7XHJcblxyXG4gICAgZ3JhcGgub24oJ2FkZCcsIChjZWxsOiBqb2ludC5kaWEuQ2VsbCwgY29sbGVjdGlvbjogYW55LCBvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAob3B0LnN0ZW5jaWwpIHsgdGhpcy5pbnNwZWN0b3JTZXJ2aWNlLmNyZWF0ZShjZWxsKTsgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb21tYW5kTWFuYWdlciA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS5kaWEuQ29tbWFuZE1hbmFnZXIoeyBncmFwaDogZ3JhcGggfSk7XHJcblxyXG4gICAgY29uc3QgcGFwZXIgPSB0aGlzLnBhcGVyID0gbmV3IHdpbmRvd1tcImpvaW50XCJdLmRpYS5QYXBlcih7XHJcbiAgICAgIHdpZHRoOiAxMDAwLFxyXG4gICAgICBoZWlnaHQ6IDEwMDAsXHJcbiAgICAgIGdyaWRTaXplOiAxMCxcclxuICAgICAgZHJhd0dyaWQ6IHRydWUsXHJcbiAgICAgIG1vZGVsOiBncmFwaCxcclxuICAgICAgY2VsbFZpZXdOYW1lc3BhY2U6IGFwcFNoYXBlcyxcclxuICAgICAgZGVmYXVsdExpbms6IDxqb2ludC5kaWEuTGluaz5uZXcgYXBwU2hhcGVzLmFwcC5MaW5rKCksXHJcbiAgICAgIGRlZmF1bHRDb25uZWN0aW9uUG9pbnQ6IGFwcFNoYXBlcy5hcHAuTGluay5jb25uZWN0aW9uUG9pbnQsXHJcbiAgICAgIGludGVyYWN0aXZlOiB7IGxpbmtNb3ZlOiBmYWxzZSB9LFxyXG4gICAgICBhc3luYzogdHJ1ZSxcclxuICAgICAgc29ydGluZzogam9pbnQuZGlhLlBhcGVyLnNvcnRpbmcuQVBQUk9YXHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXBlci5vbignYmxhbms6bW91c2V3aGVlbCcsIF8ucGFydGlhbCh0aGlzLm9uTW91c2V3aGVlbCwgbnVsbCksIHRoaXMpO1xyXG4gICAgcGFwZXIub24oJ2NlbGw6bW91c2V3aGVlbCcsIHRoaXMub25Nb3VzZXdoZWVsLmJpbmQodGhpcykpO1xyXG5cclxuICAgIHRoaXMuc25hcGxpbmVzID0gbmV3IHdpbmRvd1tcImpvaW50XCJdLnVpLlNuYXBsaW5lcyh7IHBhcGVyOiBwYXBlciB9KTtcclxuXHJcbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gdGhpcy5wYXBlclNjcm9sbGVyID0gbmV3IHdpbmRvd1tcImpvaW50XCJdLnVpLlBhcGVyU2Nyb2xsZXIoe1xyXG4gICAgICBwYXBlcixcclxuICAgICAgYXV0b1Jlc2l6ZVBhcGVyOiB0cnVlLFxyXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlLFxyXG4gICAgICBjdXJzb3I6ICdncmFiJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJQbHVnaW4oJy5wYXBlci1jb250YWluZXInLCBwYXBlclNjcm9sbGVyKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RlbmNpbCgpIHtcclxuXHJcbiAgICB0aGlzLnN0ZW5jaWxTZXJ2aWNlLmNyZWF0ZSh0aGlzLnBhcGVyU2Nyb2xsZXIsIHRoaXMuc25hcGxpbmVzKTtcclxuICAgIHRoaXMucmVuZGVyUGx1Z2luKCcuc3RlbmNpbC1jb250YWluZXInLCB0aGlzLnN0ZW5jaWxTZXJ2aWNlLnN0ZW5jaWwpO1xyXG4gICAgdGhpcy5zdGVuY2lsU2VydmljZS5zZXRTaGFwZXMoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVTZWxlY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5jbGlwYm9hcmQgPSBuZXcgd2luZG93W1wiam9pbnRcIl0udWkuQ2xpcGJvYXJkKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyB3aW5kb3dbXCJqb2ludFwiXS51aS5TZWxlY3Rpb24oeyBwYXBlcjogdGhpcy5wYXBlciwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24ub24oJ3Jlc2V0IGFkZCByZW1vdmUnLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xyXG5cclxuICAgIGNvbnN0IGtleWJvYXJkID0gdGhpcy5rZXlib2FyZFNlcnZpY2Uua2V5Ym9hcmQ7XHJcblxyXG4gICAgLy8gSW5pdGlhdGUgc2VsZWN0aW5nIHdoZW4gdGhlIHVzZXIgZ3JhYnMgdGhlIGJsYW5rIGFyZWEgb2YgdGhlIHBhcGVyIHdoaWxlIHRoZSBTaGlmdCBrZXkgaXMgcHJlc3NlZC5cclxuICAgIC8vIE90aGVyd2lzZSwgaW5pdGlhdGUgcGFwZXIgcGFuLlxyXG4gICAgdGhpcy5wYXBlci5vbignYmxhbms6cG9pbnRlcmRvd24nLCAoZXZ0OiBqb2ludC5kaWEuRXZlbnQsIHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XHJcblxyXG4gICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChbXSk7XHJcbiAgICAgICAgdGhpcy5wYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQpO1xyXG4gICAgICAgIHRoaXMucGFwZXIucmVtb3ZlVG9vbHMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5wYXBlci5vbignZWxlbWVudDpwb2ludGVyZG93bicsIChlbGVtZW50Vmlldzogam9pbnQuZGlhLkVsZW1lbnRWaWV3LCBldnQ6IGpvaW50LmRpYS5FdmVudCkgPT4ge1xyXG5cclxuICAgICAgLy8gU2VsZWN0IGFuIGVsZW1lbnQgaWYgQ1RSTC9NZXRhIGtleSBpcyBwcmVzc2VkIHdoaWxlIHRoZSBlbGVtZW50IGlzIGNsaWNrZWQuXHJcbiAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnY3RybCBtZXRhJywgZXZ0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24uYWRkKGVsZW1lbnRWaWV3Lm1vZGVsKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uLm9uKCdzZWxlY3Rpb24tYm94OnBvaW50ZXJkb3duJywgKGVsZW1lbnRWaWV3OiBqb2ludC5kaWEuRWxlbWVudFZpZXcsIGV2dDogam9pbnQuZGlhLkV2ZW50KSA9PiB7XHJcblxyXG4gICAgICAvLyBVbnNlbGVjdCBhbiBlbGVtZW50IGlmIHRoZSBDVFJML01ldGEga2V5IGlzIHByZXNzZWQgd2hpbGUgYSBzZWxlY3RlZCBlbGVtZW50IGlzIGNsaWNrZWQuXHJcbiAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnY3RybCBtZXRhJywgZXZ0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVtb3ZlKGVsZW1lbnRWaWV3Lm1vZGVsKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoKSB7XHJcbiAgICBjb25zdCB7IHBhcGVyLCBzZWxlY3Rpb24gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IGNvbGxlY3Rpb24gfSA9IHNlbGVjdGlvbjtcclxuICAgIHBhcGVyLnJlbW92ZVRvb2xzKCk7XHJcbiAgICBqb2ludC51aS5IYWxvLmNsZWFyKHBhcGVyKTtcclxuICAgIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xyXG4gICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XHJcbiAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3QgcHJpbWFyeUNlbGw6IGpvaW50LmRpYS5DZWxsID0gY29sbGVjdGlvbi5maXJzdCgpO1xyXG4gICAgICBjb25zdCBwcmltYXJ5Q2VsbFZpZXcgPSBwYXBlci5yZXF1aXJlVmlldyhwcmltYXJ5Q2VsbCk7XHJcbiAgICAgIHNlbGVjdGlvbi5kZXN0cm95U2VsZWN0aW9uQm94KHByaW1hcnlDZWxsKTtcclxuICAgICAgdGhpcy5zZWxlY3RQcmltYXJ5Q2VsbChwcmltYXJ5Q2VsbFZpZXcpO1xyXG4gICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICBjb2xsZWN0aW9uLmVhY2goZnVuY3Rpb24gKGNlbGw6IGpvaW50LmRpYS5DZWxsKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLmNyZWF0ZVNlbGVjdGlvbkJveChjZWxsKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RQcmltYXJ5Q2VsbChjZWxsVmlldzogam9pbnQuZGlhLkNlbGxWaWV3KSB7XHJcbiAgICBjb25zdCBjZWxsID0gY2VsbFZpZXcubW9kZWw7XHJcbiAgICBpZiAoY2VsbC5pc0VsZW1lbnQoKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdFByaW1hcnlFbGVtZW50KDxqb2ludC5kaWEuRWxlbWVudFZpZXc+Y2VsbFZpZXcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RQcmltYXJ5TGluayg8am9pbnQuZGlhLkxpbmtWaWV3PmNlbGxWaWV3KTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5zcGVjdG9yU2VydmljZS5jcmVhdGUoY2VsbCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RQcmltYXJ5RWxlbWVudChlbGVtZW50Vmlldzogam9pbnQuZGlhLkVsZW1lbnRWaWV3KSB7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRWaWV3Lm1vZGVsO1xyXG5cclxuICAgIG5ldyB3aW5kb3dbXCJqb2ludFwiXS51aS5GcmVlVHJhbnNmb3JtKHtcclxuICAgICAgY2VsbFZpZXc6IGVsZW1lbnRWaWV3LFxyXG4gICAgICBhbGxvd1JvdGF0aW9uOiBmYWxzZSxcclxuICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogISFlbGVtZW50LmdldCgncHJlc2VydmVBc3BlY3RSYXRpbycpLFxyXG4gICAgICBhbGxvd09ydGhvZ29uYWxSZXNpemU6IGVsZW1lbnQuZ2V0KCdhbGxvd09ydGhvZ29uYWxSZXNpemUnKSAhPT0gZmFsc2VcclxuICAgIH0pLnJlbmRlcigpO1xyXG5cclxuICAgIHRoaXMuaGFsb1NlcnZpY2UuY3JlYXRlKGVsZW1lbnRWaWV3KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFByaW1hcnlMaW5rKGxpbmtWaWV3OiBqb2ludC5kaWEuTGlua1ZpZXcpIHtcclxuXHJcbiAgICBjb25zdCBucyA9IGpvaW50LmxpbmtUb29scztcclxuICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgbmFtZTogJ2xpbmstcG9pbnRlcmRvd24nLFxyXG4gICAgICB0b29sczogW1xyXG4gICAgICAgIG5ldyBucy5WZXJ0aWNlcygpLFxyXG4gICAgICAgIG5ldyBucy5Tb3VyY2VBbmNob3IoKSxcclxuICAgICAgICBuZXcgbnMuVGFyZ2V0QW5jaG9yKCksXHJcbiAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxyXG4gICAgICAgIG5ldyBucy5UYXJnZXRBcnJvd2hlYWQoKSxcclxuICAgICAgICBuZXcgbnMuU2VnbWVudHMsXHJcbiAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXHJcbiAgICAgICAgbmV3IG5zLlJlbW92ZSh7IG9mZnNldDogLTIwLCBkaXN0YW5jZTogNDAgfSlcclxuICAgICAgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGlua1ZpZXcuYWRkVG9vbHModG9vbHNWaWV3KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVUb29sc0FuZEluc3BlY3RvcigpIHtcclxuXHJcbiAgICB0aGlzLnBhcGVyLm9uKCdjZWxsOnBvaW50ZXJ1cCcsIChjZWxsVmlldzogam9pbnQuZGlhLkNlbGxWaWV3KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcclxuICAgICAgY29uc3QgeyBjb2xsZWN0aW9uIH0gPSB0aGlzLnNlbGVjdGlvbjtcclxuICAgICAgaWYgKGNvbGxlY3Rpb24uaW5jbHVkZXMoY2VsbCkpIHsgcmV0dXJuOyB9XHJcbiAgICAgIGNvbGxlY3Rpb24ucmVzZXQoW2NlbGxdKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFwZXIub24oJ2xpbms6bW91c2VlbnRlcicsIChsaW5rVmlldzogam9pbnQuZGlhLkxpbmtWaWV3KSA9PiB7XHJcblxyXG4gICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxyXG4gICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoKSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxyXG4gICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICBuZXcgbnMuVmVydGljZXMoeyB2ZXJ0ZXhBZGRpbmc6IGZhbHNlIH0pLFxyXG4gICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxyXG4gICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXHJcbiAgICAgICAgXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhcGVyLm9uKCdsaW5rOm1vdXNlbGVhdmUnLCAobGlua1ZpZXc6IGpvaW50LmRpYS5MaW5rVmlldykgPT4ge1xyXG5cclxuICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIGhvdmVyIHRvb2wsIG5vdCB0aGUgcG9pbnRlcmRvd24gdG9vbFxyXG4gICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoJ2xpbmstaG92ZXInKSkge1xyXG4gICAgICAgIGxpbmtWaWV3LnJlbW92ZVRvb2xzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JhcGgub24oJ2NoYW5nZScsIChjZWxsOiBqb2ludC5kaWEuQ2VsbCwgb3B0OiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGlmICghY2VsbC5pc0xpbmsoKSB8fCAhb3B0Lmluc3BlY3RvcikgeyByZXR1cm47IH1cclxuXHJcbiAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgbmFtZTogJ2xpbmstaW5zcGVjdGVkJyxcclxuICAgICAgICB0b29sczogW1xyXG4gICAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXHJcbiAgICAgICAgXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNlbGwuZmluZFZpZXcodGhpcy5wYXBlcikuYWRkVG9vbHModG9vbHNWaWV3KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZU5hdmlnYXRvcigpIHtcclxuXHJcbiAgICBjb25zdCBuYXZpZ2F0b3IgPSB0aGlzLm5hdmlnYXRvciA9IG5ldyBqb2ludC51aS5OYXZpZ2F0b3Ioe1xyXG4gICAgICB3aWR0aDogMjQwLFxyXG4gICAgICBoZWlnaHQ6IDExNSxcclxuICAgICAgcGFwZXJTY3JvbGxlcjogdGhpcy5wYXBlclNjcm9sbGVyLFxyXG4gICAgICB6b29tOiBmYWxzZSxcclxuICAgICAgcGFwZXJPcHRpb25zOiB7XHJcbiAgICAgICAgYXN5bmM6IHRydWUsXHJcbiAgICAgICAgZWxlbWVudFZpZXc6IGFwcFNoYXBlcy5OYXZpZ2F0b3JFbGVtZW50VmlldyxcclxuICAgICAgICBsaW5rVmlldzogYXBwU2hhcGVzLk5hdmlnYXRvckxpbmtWaWV3LFxyXG4gICAgICAgIGNlbGxWaWV3TmFtZXNwYWNlOiB7IC8qIG5vIG90aGVyIHZpZXdzIGFyZSBhY2Nlc3NpYmxlIGluIHRoZSBuYXZpZ2F0b3IgKi8gfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlbmRlclBsdWdpbignLmpvaW50LW5hdmlnYXRvci1jb250YWluZXInLCBuYXZpZ2F0b3IpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVRvb2xiYXIoKSB7XHJcblxyXG4gICAgdGhpcy50b29sYmFyU2VydmljZS5jcmVhdGUodGhpcy5jb21tYW5kTWFuYWdlciwgdGhpcy5wYXBlclNjcm9sbGVyKTtcclxuXHJcbiAgICB0aGlzLnRvb2xiYXJTZXJ2aWNlLnRvb2xiYXIub24oe1xyXG4gICAgICAvLyAnc3ZnOnBvaW50ZXJjbGljayc6IHRoaXMub3BlbkFzU1ZHLmJpbmQodGhpcyksXHJcbiAgICAgIC8vICdwbmc6cG9pbnRlcmNsaWNrJzogdGhpcy5vcGVuQXNQTkcuYmluZCh0aGlzKSxcclxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRoaXMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0Zyb250JyksXHJcbiAgICAgICd0by1iYWNrOnBvaW50ZXJjbGljayc6IHRoaXMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0JhY2snKSxcclxuICAgICAgJ2xheW91dDpwb2ludGVyY2xpY2snOiB0aGlzLmxheW91dERpcmVjdGVkR3JhcGguYmluZCh0aGlzKSxcclxuICAgICAgJ3NuYXBsaW5lOmNoYW5nZSc6IHRoaXMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXHJcbiAgICAgICdjbGVhcjpwb2ludGVyY2xpY2snOiB0aGlzLmdyYXBoLmNsZWFyLmJpbmQodGhpcy5ncmFwaCksXHJcbiAgICAgICdwcmludDpwb2ludGVyY2xpY2snOiB0aGlzLnBhcGVyLnByaW50LmJpbmQodGhpcy5wYXBlciksXHJcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogdGhpcy5wYXBlci5zZXRHcmlkU2l6ZS5iaW5kKHRoaXMucGFwZXIpLFxyXG4gICAgICAnc2VsZWN0VGVtcGxhdGU6b3B0aW9uOnNlbGVjdCc6IHRoaXMub25DaGFuZ2VUZW1wbGF0ZSxcclxuICAgICAgJ2RlbGV0ZVRlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRoaXMub25EZWxldGVUZW1wbGF0ZSxcclxuICAgICAgJ3NhdmVBc1RlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRoaXMub25TYXZlQXNUZW1wbGF0ZSxcclxuICAgICAgJ3Jlc2V0VGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdGhpcy5vblJlc2V0VGVtcGxhdGVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVuZGVyUGx1Z2luKCcudG9vbGJhci1jb250YWluZXInLCB0aGlzLnRvb2xiYXJTZXJ2aWNlLnRvb2xiYXIpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPblNlbGVjdGlvbihtZXRob2Q6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmFwaC5zdGFydEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG1vZGVsOiBqb2ludC5kaWEuQ2VsbCkgeyBtb2RlbFttZXRob2RdKCk7IH0pO1xyXG4gICAgdGhpcy5ncmFwaC5zdG9wQmF0Y2goJ3NlbGVjdGlvbicpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU25hcExpbmVzKGNoZWNrZWQ6IGJvb2xlYW4pIHtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNuYXBsaW5lcy5zdGFydExpc3RlbmluZygpO1xyXG4gICAgICB0aGlzLnN0ZW5jaWxTZXJ2aWNlLnN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSB0aGlzLnNuYXBsaW5lcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcclxuICAgICAgdGhpcy5zdGVuY2lsU2VydmljZS5zdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuXHJcbiAgICB0aGlzLmtleWJvYXJkU2VydmljZS5jcmVhdGUoXHJcbiAgICAgIHRoaXMuZ3JhcGgsIHRoaXMuY2xpcGJvYXJkLCB0aGlzLnNlbGVjdGlvbiwgdGhpcy5wYXBlclNjcm9sbGVyLCB0aGlzLmNvbW1hbmRNYW5hZ2VyKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVUb29sdGlwcygpOiBqb2ludC51aS5Ub29sdGlwIHtcclxuXHJcbiAgICByZXR1cm4gbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICByb290VGFyZ2V0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbHRpcGNvbnRhaW5lcicpLFxyXG4gICAgICB0YXJnZXQ6ICdbZGF0YS10b29sdGlwXScsXHJcbiAgICAgIGRpcmVjdGlvbjogam9pbnQudWkuVG9vbHRpcC5Ub29sdGlwQXJyb3dQb3NpdGlvbi5BdXRvLFxyXG4gICAgICBwYWRkaW5nOiAxMFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RlbmNpbFRvb2x0aXBzKCk6IGpvaW50LnVpLlRvb2x0aXAge1xyXG5cclxuICAgIHJldHVybiBuZXcgam9pbnQudWkuVG9vbHRpcCh7XHJcbiAgICAgIHJvb3RUYXJnZXQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmbG93Y2hhcnRzdGVuY2lsJyksXHJcbiAgICAgIHRhcmdldDogJ1tkYXRhLXRvb2x0aXBdJyxcclxuICAgICAgZGlyZWN0aW9uOiBqb2ludC51aS5Ub29sdGlwLlRvb2x0aXBBcnJvd1Bvc2l0aW9uLkF1dG8sXHJcbiAgICAgIHBhZGRpbmc6IDEwXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGRlciBzaGFwZXNcclxuICBleHBvcnRTdHlsZXNoZWV0ID0gJy5zY2FsYWJsZSAqIHsgdmVjdG9yLWVmZmVjdDogbm9uLXNjYWxpbmctc3Ryb2tlIH0nO1xyXG5cclxuICBvcGVuQXNTVkcoKSB7XHJcblxyXG4gICAgdGhpcy5wYXBlci5oaWRlVG9vbHMoKS50b1NWRygoc3ZnOiBzdHJpbmcpID0+IHtcclxuICAgICAgbmV3IGpvaW50LnVpLkxpZ2h0Ym94KHtcclxuICAgICAgICBpbWFnZTogJ2RhdGE6aW1hZ2Uvc3ZnK3htbCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KHN2ZyksXHJcbiAgICAgICAgZG93bmxvYWRhYmxlOiB0cnVlLFxyXG4gICAgICAgIGZpbGVOYW1lOiAnUmFwcGlkJ1xyXG4gICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIHRoaXMucGFwZXIuc2hvd1Rvb2xzKCk7XHJcbiAgICB9LCB7XHJcbiAgICAgIHByZXNlcnZlRGltZW5zaW9uczogdHJ1ZSxcclxuICAgICAgY29udmVydEltYWdlc1RvRGF0YVVyaXM6IHRydWUsXHJcbiAgICAgIHVzZUNvbXB1dGVkU3R5bGVzOiBmYWxzZSxcclxuICAgICAgc3R5bGVzaGVldDogdGhpcy5leHBvcnRTdHlsZXNoZWV0XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Bc1BORygpIHtcclxuXHJcbiAgICB0aGlzLnBhcGVyLmhpZGVUb29scygpLnRvUE5HKChkYXRhVVJMOiBzdHJpbmcpID0+IHtcclxuICAgICAgbmV3IGpvaW50LnVpLkxpZ2h0Ym94KHtcclxuICAgICAgICBpbWFnZTogZGF0YVVSTCxcclxuICAgICAgICBkb3dubG9hZGFibGU6IHRydWUsXHJcbiAgICAgICAgZmlsZU5hbWU6ICdSYXBwaWQnXHJcbiAgICAgIH0pLm9wZW4oKTtcclxuICAgICAgdGhpcy5wYXBlci5zaG93VG9vbHMoKTtcclxuICAgIH0sIHtcclxuICAgICAgcGFkZGluZzogMTAsXHJcbiAgICAgIHVzZUNvbXB1dGVkU3R5bGVzOiBmYWxzZSxcclxuICAgICAgc3R5bGVzaGVldDogdGhpcy5leHBvcnRTdHlsZXNoZWV0XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2V3aGVlbChjZWxsVmlldzogam9pbnQuZGlhLkNlbGxWaWV3LCBldnQ6IGpvaW50LmRpYS5FdmVudCwgb3g6IG51bWJlciwgb3k6IG51bWJlciwgZGVsdGE6IG51bWJlcikge1xyXG5cclxuICAgIGlmICh0aGlzLmtleWJvYXJkU2VydmljZS5rZXlib2FyZC5pc0FjdGl2ZSgnYWx0JywgZXZ0KSkge1xyXG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5wYXBlclNjcm9sbGVyLnpvb20oZGVsdGEgKiAwLjIsIHsgbWluOiAwLjIsIG1heDogNSwgZ3JpZDogMC4yLCBveCwgb3kgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsYXlvdXREaXJlY3RlZEdyYXBoKCkge1xyXG5cclxuICAgIGpvaW50LmxheW91dC5EaXJlY3RlZEdyYXBoLmxheW91dCh0aGlzLmdyYXBoLCB7XHJcbiAgICAgIGdyYXBobGliOiBkYWdyZS5ncmFwaGxpYixcclxuICAgICAgZGFncmU6IGRhZ3JlLFxyXG4gICAgICBzZXRWZXJ0aWNlczogdHJ1ZSxcclxuICAgICAgcmFua0RpcjogJ1RCJyxcclxuICAgICAgbWFyZ2luWDogMTAwLFxyXG4gICAgICBtYXJnaW5ZOiAxMDBcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFwZXJTY3JvbGxlci5jZW50ZXJDb250ZW50KCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQbHVnaW4oc2VsZWN0b3I6IHN0cmluZywgcGx1Z2luOiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpLmFwcGVuZENoaWxkKHBsdWdpbi5lbCk7XHJcbiAgICBwbHVnaW4ucmVuZGVyKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRJbWFnZUNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5wYXBlci50b1BORygoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShpbWFnZURhdGEpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SnNvbkNvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5ncmFwaC50b0pTT04oKSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVRlbXBsYXRlKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuanNvbkNvbnRlbnQpIHtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LktTX1NFTEVDVEVEX0ZMT1dDSEFSVF9JRF0gPSBldmVudC5mbG93Q2hhcnRJZDtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LktTX1NFTEVDVEVEX0pTT05DT05URU5UXSA9IGV2ZW50Lmpzb25Db250ZW50O1xyXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuS1NfQ0hBTkdFX1RFTVBMQVRFLCAnKicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EZWxldGVUZW1wbGF0ZShldmVudCkge1xyXG4gICAgaWYgKHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19JU19TRUxFQ1RFRF9URU1QTEFURV0pIHtcclxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LktTX0RFTEVURV9URU1QTEFURSwgJyonKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUsICcqJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNhdmVBc1RlbXBsYXRlKCkge1xyXG4gICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LktTX1NBVkVfQVNfVEVNUExBVEUsICcqJyk7XHJcbiAgfVxyXG5cclxuICBvblJlc2V0VGVtcGxhdGUoKSB7XHJcbiAgICBpZiAod2luZG93W0Zsb3dDaGFydENvbnN0LktTX0lTX1NFTEVDVEVEX1RFTVBMQVRFXSkge1xyXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuS1NfUkVTRVRfVEVNUExBVEUsICcqJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBLaXRjaGVuU2lua1NlcnZpY2U7XHJcbiJdfQ==