@scion/workbench 18.0.0-beta.1 → 18.0.0-beta.10

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 (275) hide show
  1. package/_index.scss +7 -5
  2. package/design/_workbench-global-styles.scss +18 -0
  3. package/design/_workbench-icon-font.scss +1 -1
  4. package/design/_workbench-popup-global-styles.scss +1 -1
  5. package/design/{_workbench-view-drag-image-global-styles.scss → _workbench-view-global-styles.scss} +1 -2
  6. package/esm2022/lib/common/class-list.mjs +67 -29
  7. package/esm2022/lib/common/math.util.mjs +16 -0
  8. package/esm2022/lib/common/objects.util.mjs +7 -1
  9. package/esm2022/lib/common/operators.mjs +1 -12
  10. package/esm2022/lib/common/uid.util.mjs +22 -0
  11. package/esm2022/lib/content-projection/content-as-overlay.component.mjs +85 -28
  12. package/esm2022/lib/content-projection/workbench-element-references.mjs +32 -0
  13. package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +3 -8
  14. package/esm2022/lib/dialog/movable.directive.mjs +3 -3
  15. package/esm2022/lib/dialog/resizable.directive.mjs +3 -3
  16. package/esm2022/lib/dialog/workbench-dialog.component.mjs +25 -23
  17. package/esm2022/lib/dialog/workbench-dialog.mjs +61 -1
  18. package/esm2022/lib/dialog//311/265workbench-dialog.mjs +98 -60
  19. package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +26 -23
  20. package/esm2022/lib/executor/latest-task-executor.mjs +55 -0
  21. package/esm2022/lib/executor/single-task-executor.mjs +9 -19
  22. package/esm2022/lib/filter-field/filter-field.component.mjs +5 -5
  23. package/esm2022/lib/layout/grid-element/grid-element.component.mjs +8 -18
  24. package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +18 -21
  25. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +11 -0
  26. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v6.model.mjs +11 -0
  27. package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +4 -4
  28. package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +67 -0
  29. package/esm2022/lib/layout/migration/workbench-layout-migration-v6.service.mjs +59 -0
  30. package/esm2022/lib/layout/stringifier.mjs +70 -0
  31. package/esm2022/lib/layout/workbench-layout.component.mjs +18 -22
  32. package/esm2022/lib/layout/workbench-layout.mjs +1 -1
  33. package/esm2022/lib/layout/workbench-layout.model.mjs +1 -1
  34. package/esm2022/lib/layout/workbench-layout.service.mjs +26 -24
  35. package/esm2022/lib/layout/workbench-layouts.util.mjs +1 -9
  36. package/esm2022/lib/layout/workench-layout-serializer.service.mjs +19 -27
  37. package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +3 -2
  38. package/esm2022/lib/layout//311/265workbench-layout.mjs +73 -62
  39. package/esm2022/lib/logging/logging-support.mjs +7 -13
  40. package/esm2022/lib/logging//311/265logger.mjs +10 -10
  41. package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +7 -6
  42. package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +3 -3
  43. package/esm2022/lib/message-box/workbench-message-box.component.mjs +2 -2
  44. package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +3 -2
  45. package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +22 -6
  46. package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +28 -21
  47. package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +3 -3
  48. package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +11 -1
  49. package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +63 -0
  50. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +5 -4
  51. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +6 -10
  52. package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +18 -9
  53. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +7 -6
  54. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +3 -3
  55. package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +15 -13
  56. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +3 -2
  57. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +6 -11
  58. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +39 -0
  59. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +120 -0
  60. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +55 -0
  61. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +19 -0
  62. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +4 -3
  63. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +11 -12
  64. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +12 -28
  65. package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +3 -3
  66. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +11 -27
  67. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +91 -71
  68. package/esm2022/lib/microfrontend-platform/public_api.mjs +2 -1
  69. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +5 -4
  70. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +18 -16
  71. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +30 -8
  72. package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +32 -0
  73. package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +26 -8
  74. package/esm2022/lib/notification/notification-list.component.mjs +4 -8
  75. package/esm2022/lib/notification/notification.component.mjs +4 -5
  76. package/esm2022/lib/notification/notification.service.mjs +5 -4
  77. package/esm2022/lib/page-not-found/page-not-found.component.mjs +5 -7
  78. package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +11 -19
  79. package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +4 -4
  80. package/esm2022/lib/part/part-bar/part-bar.component.mjs +333 -264
  81. package/esm2022/lib/part/part-portal.pipe.mjs +8 -8
  82. package/esm2022/lib/part/part.component.mjs +33 -42
  83. package/esm2022/lib/part/view-context-menu/text.component.mjs +16 -12
  84. package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +4 -6
  85. package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +2 -2
  86. package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +48 -49
  87. package/esm2022/lib/part/view-list/view-list.component.mjs +41 -48
  88. package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +22 -26
  89. package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +15 -17
  90. package/esm2022/lib/part/view-tab/view-tab.component.mjs +99 -110
  91. package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +3 -4
  92. package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +16 -17
  93. package/esm2022/lib/part/workbench-part-action.registry.mjs +18 -42
  94. package/esm2022/lib/part/workbench-part.model.mjs +10 -1
  95. package/esm2022/lib/part/workbench-part.registry.mjs +11 -45
  96. package/esm2022/lib/part//311/265workbench-part.model.mjs +71 -55
  97. package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +3 -3
  98. package/esm2022/lib/perspective/workbench-perspective.model.mjs +1 -1
  99. package/esm2022/lib/perspective/workbench-perspective.registry.mjs +11 -43
  100. package/esm2022/lib/perspective/workbench-perspective.service.mjs +71 -62
  101. package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +2 -2
  102. package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +62 -47
  103. package/esm2022/lib/popup/popup.component.mjs +3 -3
  104. package/esm2022/lib/popup/popup.config.mjs +27 -25
  105. package/esm2022/lib/popup/popup.service.mjs +169 -174
  106. package/esm2022/lib/portal/wb-component-portal.mjs +18 -17
  107. package/esm2022/lib/public_api.mjs +1 -1
  108. package/esm2022/lib/registry/workbench-object-registry.mjs +38 -17
  109. package/esm2022/lib/routing/public_api.mjs +2 -2
  110. package/esm2022/lib/routing/routing.model.mjs +1 -1
  111. package/esm2022/lib/routing/routing.util.mjs +215 -0
  112. package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +110 -0
  113. package/esm2022/lib/routing/workbench-dialog-differ.mjs +3 -3
  114. package/esm2022/lib/routing/workbench-layout-differ.mjs +3 -10
  115. package/esm2022/lib/routing/workbench-message-box-differ.mjs +3 -3
  116. package/esm2022/lib/routing/workbench-navigational-states.mjs +2 -2
  117. package/esm2022/lib/routing/workbench-popup-differ.mjs +3 -3
  118. package/esm2022/lib/routing/workbench-route-guards.mjs +57 -0
  119. package/esm2022/lib/routing/workbench-url-observer.service.mjs +140 -148
  120. package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +58 -0
  121. package/esm2022/lib/routing//311/265workbench-router.service.mjs +119 -74
  122. package/esm2022/lib/startup/splash/splash.component.mjs +3 -3
  123. package/esm2022/lib/startup/workbench-launcher.service.mjs +22 -10
  124. package/esm2022/lib/testing/workbench.provider.mjs +2 -2
  125. package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +15 -19
  126. package/esm2022/lib/view/public_api.mjs +1 -2
  127. package/esm2022/lib/view/view-move-handler.service.mjs +71 -56
  128. package/esm2022/lib/view/view-portal.pipe.mjs +7 -7
  129. package/esm2022/lib/view/view.component.mjs +54 -42
  130. package/esm2022/lib/view/workbench-view.model.mjs +1 -1
  131. package/esm2022/lib/view/workbench-view.registry.mjs +11 -45
  132. package/esm2022/lib/view//311/265workbench-view.model.mjs +183 -153
  133. package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +2 -2
  134. package/esm2022/lib/view-dnd/view-drag.service.mjs +87 -71
  135. package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +6 -6
  136. package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +6 -6
  137. package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +43 -56
  138. package/esm2022/lib/workbench-config.mjs +2 -2
  139. package/esm2022/lib/workbench-id.mjs +3 -3
  140. package/esm2022/lib/workbench.component.mjs +66 -54
  141. package/esm2022/lib/workbench.constants.mjs +1 -5
  142. package/esm2022/lib/workbench.model.mjs +1 -1
  143. package/esm2022/lib/workbench.provider.mjs +3 -9
  144. package/esm2022/lib/workbench.service.mjs +1 -1
  145. package/esm2022/lib//311/265workbench.service.mjs +38 -42
  146. package/fesm2022/scion-workbench.mjs +4054 -3276
  147. package/fesm2022/scion-workbench.mjs.map +1 -1
  148. package/lib/common/class-list.d.ts +35 -22
  149. package/lib/common/math.util.d.ts +7 -0
  150. package/lib/common/objects.util.d.ts +4 -0
  151. package/lib/common/operators.d.ts +1 -6
  152. package/lib/common/uid.util.d.ts +9 -0
  153. package/lib/content-projection/content-as-overlay.component.d.ts +39 -22
  154. package/lib/content-projection/workbench-element-references.d.ts +13 -0
  155. package/lib/dialog/workbench-dialog.component.d.ts +3 -2
  156. package/lib/dialog/workbench-dialog.d.ts +57 -13
  157. package/lib/dialog//311/265workbench-dialog.d.ts +38 -24
  158. package/lib/dialog//311/265workbench-dialog.service.d.ts +10 -11
  159. package/lib/executor/latest-task-executor.d.ts +26 -0
  160. package/lib/executor/single-task-executor.d.ts +5 -8
  161. package/lib/filter-field/filter-field.component.d.ts +1 -1
  162. package/lib/layout/grid-element/grid-element.component.d.ts +1 -8
  163. package/lib/layout/main-area-layout/main-area-layout.component.d.ts +0 -4
  164. package/lib/layout/migration/model/workbench-layout-migration-v5.model.d.ts +36 -0
  165. package/lib/layout/migration/model/workbench-layout-migration-v6.model.d.ts +35 -0
  166. package/lib/layout/migration/workbench-layout-migration-v5.service.d.ts +12 -0
  167. package/lib/layout/migration/workbench-layout-migration-v6.service.d.ts +12 -0
  168. package/lib/layout/stringifier.d.ts +26 -0
  169. package/lib/layout/workbench-layout.component.d.ts +4 -5
  170. package/lib/layout/workbench-layout.d.ts +9 -6
  171. package/lib/layout/workbench-layout.model.d.ts +4 -3
  172. package/lib/layout/workbench-layout.service.d.ts +14 -16
  173. package/lib/layout/workbench-layouts.util.d.ts +0 -6
  174. package/lib/layout/workench-layout-serializer.service.d.ts +13 -16
  175. package/lib/layout//311/265workbench-layout.d.ts +18 -19
  176. package/lib/layout//311/265workbench-layout.factory.d.ts +3 -2
  177. package/lib/logging//311/265logger.d.ts +2 -3
  178. package/lib/microfrontend-platform/common/microfrontend.util.d.ts +5 -1
  179. package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +7 -3
  180. package/lib/microfrontend-platform/manifest-object-cache.service.d.ts +33 -0
  181. package/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.d.ts +3 -6
  182. package/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.d.ts +2 -1
  183. package/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.d.ts +1 -1
  184. package/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.d.ts +2 -1
  185. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.d.ts +10 -0
  186. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.d.ts +24 -0
  187. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.d.ts +20 -0
  188. package/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.d.ts +9 -0
  189. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.d.ts +4 -8
  190. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +0 -4
  191. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.d.ts +5 -12
  192. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +23 -33
  193. package/lib/microfrontend-platform/public_api.d.ts +1 -0
  194. package/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.d.ts +1 -1
  195. package/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.d.ts +3 -7
  196. package/lib/microfrontend-platform/routing/microfrontend-view-routes.d.ts +9 -2
  197. package/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.d.ts +11 -0
  198. package/lib/notification/notification-list.component.d.ts +0 -2
  199. package/lib/page-not-found/page-not-found.component.d.ts +1 -0
  200. package/lib/part/part-action-bar/part-action-bar.component.d.ts +3 -4
  201. package/lib/part/part-action-bar/part-action.directive.d.ts +2 -2
  202. package/lib/part/part-bar/part-bar.component.d.ts +73 -63
  203. package/lib/part/part-portal.pipe.d.ts +3 -5
  204. package/lib/part/part.component.d.ts +9 -12
  205. package/lib/part/view-context-menu/text.component.d.ts +3 -4
  206. package/lib/part/view-context-menu/view-menu.directive.d.ts +1 -1
  207. package/lib/part/view-context-menu/view-menu.service.d.ts +13 -17
  208. package/lib/part/view-list/view-list.component.d.ts +8 -21
  209. package/lib/part/view-list-button/view-list-button.component.d.ts +8 -11
  210. package/lib/part/view-list-item/view-list-item.component.d.ts +3 -7
  211. package/lib/part/view-tab/view-tab.component.d.ts +19 -29
  212. package/lib/part/view-tab-drag-image/view-tab-drag-image.component.d.ts +4 -4
  213. package/lib/part/workbench-part-action.registry.d.ts +3 -23
  214. package/lib/part/workbench-part.model.d.ts +8 -27
  215. package/lib/part/workbench-part.registry.d.ts +3 -26
  216. package/lib/part//311/265workbench-part.model.d.ts +23 -17
  217. package/lib/perspective/workbench-perspective.model.d.ts +18 -25
  218. package/lib/perspective/workbench-perspective.registry.d.ts +3 -26
  219. package/lib/perspective/workbench-perspective.service.d.ts +16 -14
  220. package/lib/perspective/workench-perspective-serializer.service.d.ts +1 -1
  221. package/lib/perspective//311/265workbench-perspective.model.d.ts +30 -21
  222. package/lib/popup/popup.config.d.ts +11 -10
  223. package/lib/popup/popup.service.d.ts +15 -28
  224. package/lib/portal/wb-component-portal.d.ts +21 -5
  225. package/lib/public_api.d.ts +1 -1
  226. package/lib/registry/workbench-object-registry.d.ts +10 -6
  227. package/lib/routing/public_api.d.ts +2 -2
  228. package/lib/routing/routing.model.d.ts +25 -13
  229. package/lib/routing/{router.util.d.ts → routing.util.d.ts} +28 -1
  230. package/lib/routing/{workbench-auxiliary-routes-registrator.service.d.ts → workbench-auxiliary-route-installer.service.d.ts} +10 -3
  231. package/lib/routing/workbench-layout-differ.d.ts +1 -2
  232. package/lib/routing/workbench-navigational-states.d.ts +8 -4
  233. package/lib/{view/workbench-view-route-guards.d.ts → routing/workbench-route-guards.d.ts} +8 -2
  234. package/lib/routing/workbench-url-observer.service.d.ts +31 -55
  235. package/lib/routing/workbench-view-outlet-differ.d.ts +32 -0
  236. package/lib/routing//311/265workbench-router.service.d.ts +22 -18
  237. package/lib/startup/workbench-launcher.service.d.ts +4 -5
  238. package/lib/testing/workbench.provider.d.ts +3 -1
  239. package/lib/theme/workbench-theme-switcher.service.d.ts +4 -6
  240. package/lib/view/public_api.d.ts +0 -1
  241. package/lib/view/view-move-handler.service.d.ts +16 -14
  242. package/lib/view/view-portal.pipe.d.ts +1 -3
  243. package/lib/view/view.component.d.ts +21 -12
  244. package/lib/view/workbench-view.model.d.ts +88 -36
  245. package/lib/view/workbench-view.registry.d.ts +3 -27
  246. package/lib/view//311/265workbench-view.model.d.ts +62 -71
  247. package/lib/view-dnd/view-drag.service.d.ts +79 -49
  248. package/lib/view-dnd/view-drop-placeholder-renderer.service.d.ts +1 -1
  249. package/lib/view-dnd/view-tab-drag-image-renderer.service.d.ts +12 -36
  250. package/lib/workbench-config.d.ts +19 -7
  251. package/lib/workbench.component.d.ts +16 -30
  252. package/lib/workbench.constants.d.ts +0 -5
  253. package/lib/workbench.model.d.ts +31 -3
  254. package/lib/workbench.service.d.ts +58 -56
  255. package/lib//311/265workbench.service.d.ts +18 -31
  256. package/package.json +5 -5
  257. package/esm2022/lib/common/filter-by-predicate.pipe.mjs +0 -27
  258. package/esm2022/lib/common/filter-by-text.pipe.mjs +0 -39
  259. package/esm2022/lib/common/uuid.util.mjs +0 -17
  260. package/esm2022/lib/content-projection/content-projection.directive.mjs +0 -101
  261. package/esm2022/lib/content-projection/view-container.reference.mjs +0 -68
  262. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +0 -41
  263. package/esm2022/lib/page-not-found/format-url.pipe.mjs +0 -26
  264. package/esm2022/lib/part/part-action-bar/part-action-filter.pipe.mjs +0 -26
  265. package/esm2022/lib/routing/router.util.mjs +0 -126
  266. package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +0 -94
  267. package/esm2022/lib/view/workbench-view-route-guards.mjs +0 -47
  268. package/lib/common/filter-by-predicate.pipe.d.ts +0 -10
  269. package/lib/common/filter-by-text.pipe.d.ts +0 -12
  270. package/lib/common/uuid.util.d.ts +0 -8
  271. package/lib/content-projection/content-projection.directive.d.ts +0 -30
  272. package/lib/content-projection/view-container.reference.d.ts +0 -42
  273. package/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.d.ts +0 -10
  274. package/lib/page-not-found/format-url.pipe.d.ts +0 -11
  275. package/lib/part/part-action-bar/part-action-filter.pipe.d.ts +0 -11
@@ -7,25 +7,25 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
- import { Component, HostBinding, inject } from '@angular/core';
10
+ import { Component, HostBinding, inject, signal } from '@angular/core';
11
11
  import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
12
12
  import { ViewTabContentComponent } from '../view-tab-content/view-tab-content.component';
13
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
- import { DOCUMENT, NgIf } from '@angular/common';
14
+ import { DOCUMENT } from '@angular/common';
15
+ import { WorkbenchView } from '../../view/workbench-view.model';
15
16
  import * as i0 from "@angular/core";
16
- import * as i1 from "../../view/workbench-view.model";
17
- import * as i2 from "../../workbench-config";
18
- import * as i3 from "../../view-dnd/view-drag.service";
19
- import * as i4 from "@angular/cdk/portal";
17
+ import * as i1 from "../../workbench-config";
18
+ import * as i2 from "../../view-dnd/view-drag.service";
19
+ import * as i3 from "@angular/cdk/portal";
20
20
  /**
21
21
  * @see ViewTabComponent
22
22
  */
23
23
  export class ViewTabDragImageComponent {
24
- constructor(view, _workbenchConfig, _viewDragService, _injector) {
25
- this.view = view;
24
+ constructor(_workbenchConfig, _viewDragService, _injector) {
26
25
  this._workbenchConfig = _workbenchConfig;
27
26
  this._viewDragService = _viewDragService;
28
27
  this._injector = _injector;
28
+ this.view = signal(inject(WorkbenchView));
29
29
  this.active = true;
30
30
  this.partActive = true;
31
31
  /**
@@ -37,7 +37,7 @@ export class ViewTabDragImageComponent {
37
37
  */
38
38
  this.isDragOverPeripheralTabbar = false;
39
39
  this.installDragOverTabbarDetector();
40
- this.viewTabContentPortal = this.createViewTabContentPortal();
40
+ this.viewTabContentPortal = signal(this.createViewTabContentPortal());
41
41
  }
42
42
  onClose(..._) {
43
43
  throw Error('[UnsupportedOperationError]');
@@ -52,21 +52,20 @@ export class ViewTabDragImageComponent {
52
52
  .pipe(takeUntilDestroyed())
53
53
  .subscribe(partId => {
54
54
  // Compute if dragging this view tab over a tabbar.
55
- this.isDragOverTabbar = partId !== null;
55
+ this.isDragOverTabbar = !!partId;
56
56
  // Compute if dragging this view tab over a tabbar located in the peripheral area.
57
- this.isDragOverPeripheralTabbar = partId !== null && documentRoot.querySelector(`wb-workbench:has(wb-main-area-layout) wb-part[data-partid="${partId}"]:not(.main-area)`) !== null;
57
+ this.isDragOverPeripheralTabbar = !!partId && documentRoot.querySelector(`wb-workbench:has(wb-main-area-layout) wb-part[data-partid="${partId}"]:not(.main-area)`) !== null;
58
58
  });
59
59
  }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageComponent, deps: [{ token: i1.WorkbenchView }, { token: i2.WorkbenchConfig }, { token: i3.ViewDragService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
61
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewTabDragImageComponent, isStandalone: true, selector: "wb-view-tab-drag-image", host: { properties: { "class.active": "this.active", "class.part-active": "this.partActive", "class.drag-over-tabbar": "this.isDragOverTabbar", "class.drag-over-peripheral-tabbar": "this.isDragOverPeripheralTabbar" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n<div class=\"corner-radius start\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<div class=\"corner-radius end\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n</button>\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n", ":host.drag-over-peripheral-tabbar{background-color:var(--sci-workbench-view-peripheral-background-color)}:host:not(.drag-over-tabbar){border-radius:var(--sci-workbench-tab-border-radius);border:1px solid var(--sci-workbench-tab-drag-border-color)}:host:not(.drag-over-tabbar)>div.corner-radius{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageComponent, deps: [{ token: i1.WorkbenchConfig }, { token: i2.ViewDragService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
61
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ViewTabDragImageComponent, isStandalone: true, selector: "wb-view-tab-drag-image", host: { properties: { "class.active": "this.active", "class.part-active": "this.partActive", "class.drag-over-tabbar": "this.isDragOverTabbar", "class.drag-over-peripheral-tabbar": "this.isDragOverPeripheralTabbar" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n@if (view().active()) {\n <div class=\"corner-radius start\">\n <div class=\"circle\"></div>\n </div>\n}\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().active()) {\n <div class=\"corner-radius end\">\n <div class=\"circle\"></div>\n </div>\n}\n\n@if (view().closable()) {\n <button class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n </button>\n}\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n", ":host.drag-over-peripheral-tabbar{background-color:var(--sci-workbench-view-peripheral-background-color)}:host:not(.drag-over-tabbar){border-radius:var(--sci-workbench-tab-border-radius);border:1px solid var(--sci-workbench-tab-drag-border-color)}:host:not(.drag-over-tabbar)>div.corner-radius{display:none}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
62
62
  }
63
63
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageComponent, decorators: [{
64
64
  type: Component,
65
65
  args: [{ selector: 'wb-view-tab-drag-image', standalone: true, imports: [
66
- NgIf,
67
66
  PortalModule,
68
- ], template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n<div class=\"corner-radius start\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<div class=\"corner-radius end\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n</button>\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n", ":host.drag-over-peripheral-tabbar{background-color:var(--sci-workbench-view-peripheral-background-color)}:host:not(.drag-over-tabbar){border-radius:var(--sci-workbench-tab-border-radius);border:1px solid var(--sci-workbench-tab-drag-border-color)}:host:not(.drag-over-tabbar)>div.corner-radius{display:none}\n"] }]
69
- }], ctorParameters: () => [{ type: i1.WorkbenchView }, { type: i2.WorkbenchConfig }, { type: i3.ViewDragService }, { type: i0.Injector }], propDecorators: { active: [{
67
+ ], template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n@if (view().active()) {\n <div class=\"corner-radius start\">\n <div class=\"circle\"></div>\n </div>\n}\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().active()) {\n <div class=\"corner-radius end\">\n <div class=\"circle\"></div>\n </div>\n}\n\n@if (view().closable()) {\n <button class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n </button>\n}\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n", ":host.drag-over-peripheral-tabbar{background-color:var(--sci-workbench-view-peripheral-background-color)}:host:not(.drag-over-tabbar){border-radius:var(--sci-workbench-tab-border-radius);border:1px solid var(--sci-workbench-tab-drag-border-color)}:host:not(.drag-over-tabbar)>div.corner-radius{display:none}\n"] }]
68
+ }], ctorParameters: () => [{ type: i1.WorkbenchConfig }, { type: i2.ViewDragService }, { type: i0.Injector }], propDecorators: { active: [{
70
69
  type: HostBinding,
71
70
  args: ['class.active']
72
71
  }], partActive: [{
@@ -79,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
79
78
  type: HostBinding,
80
79
  args: ['class.drag-over-peripheral-tabbar']
81
80
  }] } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy10YWItZHJhZy1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiLWRyYWctaW1hZ2Uvdmlldy10YWItZHJhZy1pbWFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiL3ZpZXctdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFbEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBRy9DOztHQUVHO0FBY0gsTUFBTSxPQUFPLHlCQUF5QjtJQXNCcEMsWUFBbUIsSUFBbUIsRUFDbEIsZ0JBQWlDLEVBQ2pDLGdCQUFpQyxFQUNqQyxTQUFtQjtRQUhwQixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBcEJoQyxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBR2QsZUFBVSxHQUFHLElBQUksQ0FBQztRQUV6Qjs7V0FFRztRQUVJLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVoQzs7V0FFRztRQUVJLCtCQUEwQixHQUFHLEtBQUssQ0FBQztRQU14QyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFHLENBQVk7UUFDNUIsTUFBTSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsQ0FBQztRQUN4RixPQUFPLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFXLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTthQUNsQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLEtBQUssSUFBSSxDQUFDO1lBQ3hDLGtGQUFrRjtZQUNsRixJQUFJLENBQUMsMEJBQTBCLEdBQUcsTUFBTSxLQUFLLElBQUksSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLDhEQUE4RCxNQUFNLG9CQUFvQixDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3JMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FqRFUseUJBQXlCO2tHQUF6Qix5QkFBeUIsOFNDbkN0Qyw4aEJBbUJBLDJ4R0RZSSxJQUFJLDRGQUNKLFlBQVk7OzJGQUdILHlCQUF5QjtrQkFickMsU0FBUzsrQkFDRSx3QkFBd0IsY0FNdEIsSUFBSSxXQUNQO3dCQUNQLElBQUk7d0JBQ0osWUFBWTtxQkFDYjtxS0FPTSxNQUFNO3NCQURaLFdBQVc7dUJBQUMsY0FBYztnQkFJcEIsVUFBVTtzQkFEaEIsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBT3pCLGdCQUFnQjtzQkFEdEIsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBTzlCLDBCQUEwQjtzQkFEaEMsV0FBVzt1QkFBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjIgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgaW5qZWN0LCBJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1ZpZXdEcmFnU2VydmljZX0gZnJvbSAnLi4vLi4vdmlldy1kbmQvdmlldy1kcmFnLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wb25lbnRQb3J0YWwsIFBvcnRhbE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1dvcmtiZW5jaENvbmZpZ30gZnJvbSAnLi4vLi4vd29ya2JlbmNoLWNvbmZpZyc7XG5pbXBvcnQge1ZpZXdUYWJDb250ZW50Q29tcG9uZW50fSBmcm9tICcuLi92aWV3LXRhYi1jb250ZW50L3ZpZXctdGFiLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0RPQ1VNRU5ULCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcblxuLyoqXG4gKiBAc2VlIFZpZXdUYWJDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2Itdmlldy10YWItZHJhZy1pbWFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi4vdmlldy10YWIvdmlldy10YWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vdmlldy10YWIvdmlldy10YWIuY29tcG9uZW50LnNjc3MnLFxuICAgICcuL3ZpZXctdGFiLWRyYWctaW1hZ2UucGFydGlhbC5jb21wb25lbnQuc2NzcycsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIFBvcnRhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmlld1RhYkRyYWdJbWFnZUNvbXBvbmVudCB7XG5cbiAgcHVibGljIHZpZXdUYWJDb250ZW50UG9ydGFsITogQ29tcG9uZW50UG9ydGFsPHVua25vd24+O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJylcbiAgcHVibGljIGFjdGl2ZSA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYXJ0LWFjdGl2ZScpXG4gIHB1YmxpYyBwYXJ0QWN0aXZlID0gdHJ1ZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGRyYWdnaW5nIHRoaXMgdmlldyB0YWIgb3ZlciBhIHRhYmJhci5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZHJhZy1vdmVyLXRhYmJhcicpXG4gIHB1YmxpYyBpc0RyYWdPdmVyVGFiYmFyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBkcmFnZ2luZyB0aGlzIHZpZXcgdGFiIG92ZXIgYSB0YWJiYXIgbG9jYXRlZCBpbiB0aGUgcGVyaXBoZXJhbCBhcmVhLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcmFnLW92ZXItcGVyaXBoZXJhbC10YWJiYXInKVxuICBwdWJsaWMgaXNEcmFnT3ZlclBlcmlwaGVyYWxUYWJiYXIgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlldzogV29ya2JlbmNoVmlldyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfd29ya2JlbmNoQ29uZmlnOiBXb3JrYmVuY2hDb25maWcsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdEcmFnU2VydmljZTogVmlld0RyYWdTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmluc3RhbGxEcmFnT3ZlclRhYmJhckRldGVjdG9yKCk7XG4gICAgdGhpcy52aWV3VGFiQ29udGVudFBvcnRhbCA9IHRoaXMuY3JlYXRlVmlld1RhYkNvbnRlbnRQb3J0YWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlKC4uLl86IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRocm93IEVycm9yKCdbVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcl0nKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmlld1RhYkNvbnRlbnRQb3J0YWwoKTogQ29tcG9uZW50UG9ydGFsPHVua25vd24+IHtcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5fd29ya2JlbmNoQ29uZmlnLnZpZXdUYWJDb21wb25lbnQgfHwgVmlld1RhYkNvbnRlbnRDb21wb25lbnQ7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50VHlwZSwgbnVsbCwgdGhpcy5faW5qZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsRHJhZ092ZXJUYWJiYXJEZXRlY3RvcigpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudFJvb3QgPSBpbmplY3Q8RG9jdW1lbnQ+KERPQ1VNRU5UKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdGhpcy5fdmlld0RyYWdTZXJ2aWNlLnRhYmJhckRyYWdPdmVyJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKHBhcnRJZCA9PiB7XG4gICAgICAgIC8vIENvbXB1dGUgaWYgZHJhZ2dpbmcgdGhpcyB2aWV3IHRhYiBvdmVyIGEgdGFiYmFyLlxuICAgICAgICB0aGlzLmlzRHJhZ092ZXJUYWJiYXIgPSBwYXJ0SWQgIT09IG51bGw7XG4gICAgICAgIC8vIENvbXB1dGUgaWYgZHJhZ2dpbmcgdGhpcyB2aWV3IHRhYiBvdmVyIGEgdGFiYmFyIGxvY2F0ZWQgaW4gdGhlIHBlcmlwaGVyYWwgYXJlYS5cbiAgICAgICAgdGhpcy5pc0RyYWdPdmVyUGVyaXBoZXJhbFRhYmJhciA9IHBhcnRJZCAhPT0gbnVsbCAmJiBkb2N1bWVudFJvb3QucXVlcnlTZWxlY3Rvcihgd2Itd29ya2JlbmNoOmhhcyh3Yi1tYWluLWFyZWEtbGF5b3V0KSB3Yi1wYXJ0W2RhdGEtcGFydGlkPVwiJHtwYXJ0SWR9XCJdOm5vdCgubWFpbi1hcmVhKWApICE9PSBudWxsO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjwhLS0gSU1QT1JUQU5UOiBUSElTIEhUTUwgRklMRSBJUyBBTFNPIFVTRUQgQlkgYFZpZXdUYWJEcmFnSW1hZ2VDb21wb25lbnRgIC0tPlxuXG48ZGl2IGNsYXNzPVwiY29ybmVyLXJhZGl1cyBzdGFydFwiICpuZ0lmPVwidmlldy5hY3RpdmVcIj5cbiAgPGRpdiBjbGFzcz1cImNpcmNsZVwiPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gIDxuZy1jb250YWluZXIgKmNka1BvcnRhbE91dGxldD1cInZpZXdUYWJDb250ZW50UG9ydGFsXCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImNvcm5lci1yYWRpdXMgZW5kXCIgKm5nSWY9XCJ2aWV3LmFjdGl2ZVwiPlxuICA8ZGl2IGNsYXNzPVwiY2lyY2xlXCI+PC9kaXY+XG48L2Rpdj5cblxuPGJ1dHRvbiAqbmdJZj1cInZpZXcuY2xvc2FibGVcIlxuICAgICAgICBjbGFzcz1cImNsb3NlIGUyZS1jbG9zZSBzY2lvbi13b3JrYmVuY2gtaWNvbnNcIlxuICAgICAgICAoY2xpY2spPVwib25DbG9zZSgkZXZlbnQpXCI+XG4gIGNsb3NlXG48L2J1dHRvbj5cbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy10YWItZHJhZy1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiLWRyYWctaW1hZ2Uvdmlldy10YWItZHJhZy1pbWFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiL3ZpZXctdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFZLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRWxFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUNBQWlDLENBQUM7Ozs7O0FBRTlEOztHQUVHO0FBYUgsTUFBTSxPQUFPLHlCQUF5QjtJQXVCcEMsWUFBb0IsZ0JBQWlDLEVBQ2pDLGdCQUFpQyxFQUNqQyxTQUFtQjtRQUZuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQXZCdkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUk5QyxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBR2QsZUFBVSxHQUFHLElBQUksQ0FBQztRQUV6Qjs7V0FFRztRQUVJLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVoQzs7V0FFRztRQUVJLCtCQUEwQixHQUFHLEtBQUssQ0FBQztRQUt4QyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFHLENBQVk7UUFDNUIsTUFBTSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsQ0FBQztRQUN4RixPQUFPLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFXLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTthQUNsQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2pDLGtGQUFrRjtZQUNsRixJQUFJLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLDhEQUE4RCxNQUFNLG9CQUFvQixDQUFDLEtBQUssSUFBSSxDQUFDO1FBQzlLLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FqRFUseUJBQXlCO2tHQUF6Qix5QkFBeUIsOFNDbEN0QywraUJBd0JBLDB4R0RPSSxZQUFZOzsyRkFHSCx5QkFBeUI7a0JBWnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBTXRCLElBQUksV0FDUDt3QkFDUCxZQUFZO3FCQUNiO3lJQVFNLE1BQU07c0JBRFosV0FBVzt1QkFBQyxjQUFjO2dCQUlwQixVQUFVO3NCQURoQixXQUFXO3VCQUFDLG1CQUFtQjtnQkFPekIsZ0JBQWdCO3NCQUR0QixXQUFXO3VCQUFDLHdCQUF3QjtnQkFPOUIsMEJBQTBCO3NCQURoQyxXQUFXO3VCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBpbmplY3QsIEluamVjdG9yLCBzaWduYWwsIFNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1ZpZXdEcmFnU2VydmljZX0gZnJvbSAnLi4vLi4vdmlldy1kbmQvdmlldy1kcmFnLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wb25lbnRQb3J0YWwsIFBvcnRhbE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1dvcmtiZW5jaENvbmZpZ30gZnJvbSAnLi4vLi4vd29ya2JlbmNoLWNvbmZpZyc7XG5pbXBvcnQge1ZpZXdUYWJDb250ZW50Q29tcG9uZW50fSBmcm9tICcuLi92aWV3LXRhYi1jb250ZW50L3ZpZXctdGFiLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcblxuLyoqXG4gKiBAc2VlIFZpZXdUYWJDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2Itdmlldy10YWItZHJhZy1pbWFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi4vdmlldy10YWIvdmlldy10YWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vdmlldy10YWIvdmlldy10YWIuY29tcG9uZW50LnNjc3MnLFxuICAgICcuL3ZpZXctdGFiLWRyYWctaW1hZ2UucGFydGlhbC5jb21wb25lbnQuc2NzcycsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBQb3J0YWxNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdUYWJEcmFnSW1hZ2VDb21wb25lbnQge1xuXG4gIHB1YmxpYyByZWFkb25seSB2aWV3ID0gc2lnbmFsKGluamVjdChXb3JrYmVuY2hWaWV3KSk7XG4gIHB1YmxpYyByZWFkb25seSB2aWV3VGFiQ29udGVudFBvcnRhbDogU2lnbmFsPENvbXBvbmVudFBvcnRhbDx1bmtub3duPj47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICBwdWJsaWMgYWN0aXZlID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhcnQtYWN0aXZlJylcbiAgcHVibGljIHBhcnRBY3RpdmUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgZHJhZ2dpbmcgdGhpcyB2aWV3IHRhYiBvdmVyIGEgdGFiYmFyLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcmFnLW92ZXItdGFiYmFyJylcbiAgcHVibGljIGlzRHJhZ092ZXJUYWJiYXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGRyYWdnaW5nIHRoaXMgdmlldyB0YWIgb3ZlciBhIHRhYmJhciBsb2NhdGVkIGluIHRoZSBwZXJpcGhlcmFsIGFyZWEuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRyYWctb3Zlci1wZXJpcGhlcmFsLXRhYmJhcicpXG4gIHB1YmxpYyBpc0RyYWdPdmVyUGVyaXBoZXJhbFRhYmJhciA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3dvcmtiZW5jaENvbmZpZzogV29ya2JlbmNoQ29uZmlnLFxuICAgICAgICAgICAgICBwcml2YXRlIF92aWV3RHJhZ1NlcnZpY2U6IFZpZXdEcmFnU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5pbnN0YWxsRHJhZ092ZXJUYWJiYXJEZXRlY3RvcigpO1xuICAgIHRoaXMudmlld1RhYkNvbnRlbnRQb3J0YWwgPSBzaWduYWwodGhpcy5jcmVhdGVWaWV3VGFiQ29udGVudFBvcnRhbCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlKC4uLl86IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRocm93IEVycm9yKCdbVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcl0nKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmlld1RhYkNvbnRlbnRQb3J0YWwoKTogQ29tcG9uZW50UG9ydGFsPHVua25vd24+IHtcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5fd29ya2JlbmNoQ29uZmlnLnZpZXdUYWJDb21wb25lbnQgfHwgVmlld1RhYkNvbnRlbnRDb21wb25lbnQ7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50VHlwZSwgbnVsbCwgdGhpcy5faW5qZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsRHJhZ092ZXJUYWJiYXJEZXRlY3RvcigpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudFJvb3QgPSBpbmplY3Q8RG9jdW1lbnQ+KERPQ1VNRU5UKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdGhpcy5fdmlld0RyYWdTZXJ2aWNlLnRhYmJhckRyYWdPdmVyJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKHBhcnRJZCA9PiB7XG4gICAgICAgIC8vIENvbXB1dGUgaWYgZHJhZ2dpbmcgdGhpcyB2aWV3IHRhYiBvdmVyIGEgdGFiYmFyLlxuICAgICAgICB0aGlzLmlzRHJhZ092ZXJUYWJiYXIgPSAhIXBhcnRJZDtcbiAgICAgICAgLy8gQ29tcHV0ZSBpZiBkcmFnZ2luZyB0aGlzIHZpZXcgdGFiIG92ZXIgYSB0YWJiYXIgbG9jYXRlZCBpbiB0aGUgcGVyaXBoZXJhbCBhcmVhLlxuICAgICAgICB0aGlzLmlzRHJhZ092ZXJQZXJpcGhlcmFsVGFiYmFyID0gISFwYXJ0SWQgJiYgZG9jdW1lbnRSb290LnF1ZXJ5U2VsZWN0b3IoYHdiLXdvcmtiZW5jaDpoYXMod2ItbWFpbi1hcmVhLWxheW91dCkgd2ItcGFydFtkYXRhLXBhcnRpZD1cIiR7cGFydElkfVwiXTpub3QoLm1haW4tYXJlYSlgKSAhPT0gbnVsbDtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8IS0tIElNUE9SVEFOVDogVEhJUyBIVE1MIEZJTEUgSVMgQUxTTyBVU0VEIEJZIGBWaWV3VGFiRHJhZ0ltYWdlQ29tcG9uZW50YCAtLT5cblxuQGlmICh2aWV3KCkuYWN0aXZlKCkpIHtcbiAgPGRpdiBjbGFzcz1cImNvcm5lci1yYWRpdXMgc3RhcnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlXCI+PC9kaXY+XG4gIDwvZGl2PlxufVxuXG48ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICA8bmctY29udGFpbmVyICpjZGtQb3J0YWxPdXRsZXQ9XCJ2aWV3VGFiQ29udGVudFBvcnRhbCgpXCIvPlxuPC9kaXY+XG5cbkBpZiAodmlldygpLmFjdGl2ZSgpKSB7XG4gIDxkaXYgY2xhc3M9XCJjb3JuZXItcmFkaXVzIGVuZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVcIj48L2Rpdj5cbiAgPC9kaXY+XG59XG5cbkBpZiAodmlldygpLmNsb3NhYmxlKCkpIHtcbiAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlIGUyZS1jbG9zZSBzY2lvbi13b3JrYmVuY2gtaWNvbnNcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlKCRldmVudClcIj5cbiAgICBjbG9zZVxuICA8L2J1dHRvbj5cbn1cbiJdfQ==
@@ -1,47 +1,23 @@
1
- import { Injectable } from '@angular/core';
1
+ /*
2
+ * Copyright (c) 2018-2024 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ import { InjectionToken } from '@angular/core';
2
11
  import { identity } from 'rxjs';
3
12
  import { WorkbenchObjectRegistry } from '../registry/workbench-object-registry';
4
- import * as i0 from "@angular/core";
5
13
  /**
6
14
  * Registry for {@link WorkbenchPartAction} model objects.
7
15
  */
8
- export class WorkbenchPartActionRegistry {
9
- constructor() {
10
- this._registry = new WorkbenchObjectRegistry({
11
- keyFn: identity,
12
- nullObjectErrorFn: (action) => Error(`[NullPartActionError] Part Action '${JSON.stringify(action)}' not found.`),
13
- });
14
- }
15
- /**
16
- * Registers given part action.
17
- *
18
- * @return handle to unregister the part action.
19
- */
20
- register(action) {
21
- this._registry.register(action);
22
- return {
23
- dispose: () => {
24
- this._registry.unregister(action);
25
- },
26
- };
27
- }
28
- /**
29
- * Emits registered part actions.
30
- *
31
- * Upon subscription, the currently registerd actions are emitted, and then emits continuously
32
- * when new actions are registered or unregistered. It never completes.
33
- */
34
- get actions$() {
35
- return this._registry.objects$;
36
- }
37
- ngOnDestroy() {
38
- this._registry.clear();
39
- }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
41
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionRegistry, providedIn: 'root' }); }
42
- }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionRegistry, decorators: [{
44
- type: Injectable,
45
- args: [{ providedIn: 'root' }]
46
- }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXBhcnQtYWN0aW9uLnJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvcGFydC93b3JrYmVuY2gtcGFydC1hY3Rpb24ucmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsUUFBUSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOztBQUU5RTs7R0FFRztBQUVILE1BQU0sT0FBTywyQkFBMkI7SUFEeEM7UUFHVSxjQUFTLEdBQUcsSUFBSSx1QkFBdUIsQ0FBMkM7WUFDeEYsS0FBSyxFQUFFLFFBQVE7WUFDZixpQkFBaUIsRUFBRSxDQUFDLE1BQTJCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1NBQ3RJLENBQUMsQ0FBQztLQThCSjtJQTVCQzs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLE1BQTJCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhDLE9BQU87WUFDTCxPQUFPLEVBQUUsR0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0FsQ1UsMkJBQTJCO2tIQUEzQiwyQkFBMkIsY0FEZixNQUFNOzsyRkFDbEIsMkJBQTJCO2tCQUR2QyxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMyBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtEaXNwb3NhYmxlfSBmcm9tICcuLi9jb21tb24vZGlzcG9zYWJsZSc7XG5pbXBvcnQge1dvcmtiZW5jaFBhcnRBY3Rpb259IGZyb20gJy4uL3dvcmtiZW5jaC5tb2RlbCc7XG5pbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2lkZW50aXR5LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7V29ya2JlbmNoT2JqZWN0UmVnaXN0cnl9IGZyb20gJy4uL3JlZ2lzdHJ5L3dvcmtiZW5jaC1vYmplY3QtcmVnaXN0cnknO1xuXG4vKipcbiAqIFJlZ2lzdHJ5IGZvciB7QGxpbmsgV29ya2JlbmNoUGFydEFjdGlvbn0gbW9kZWwgb2JqZWN0cy5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgV29ya2JlbmNoUGFydEFjdGlvblJlZ2lzdHJ5IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9yZWdpc3RyeSA9IG5ldyBXb3JrYmVuY2hPYmplY3RSZWdpc3RyeTxXb3JrYmVuY2hQYXJ0QWN0aW9uLCBXb3JrYmVuY2hQYXJ0QWN0aW9uPih7XG4gICAga2V5Rm46IGlkZW50aXR5LFxuICAgIG51bGxPYmplY3RFcnJvckZuOiAoYWN0aW9uOiBXb3JrYmVuY2hQYXJ0QWN0aW9uKSA9PiBFcnJvcihgW051bGxQYXJ0QWN0aW9uRXJyb3JdIFBhcnQgQWN0aW9uICcke0pTT04uc3RyaW5naWZ5KGFjdGlvbil9JyBub3QgZm91bmQuYCksXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgZ2l2ZW4gcGFydCBhY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm4gaGFuZGxlIHRvIHVucmVnaXN0ZXIgdGhlIHBhcnQgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyKGFjdGlvbjogV29ya2JlbmNoUGFydEFjdGlvbik6IERpc3Bvc2FibGUge1xuICAgIHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKGFjdGlvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RyeS51bnJlZ2lzdGVyKGFjdGlvbik7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgcmVnaXN0ZXJlZCBwYXJ0IGFjdGlvbnMuXG4gICAqXG4gICAqIFVwb24gc3Vic2NyaXB0aW9uLCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZCBhY3Rpb25zIGFyZSBlbWl0dGVkLCBhbmQgdGhlbiBlbWl0cyBjb250aW51b3VzbHlcbiAgICogd2hlbiBuZXcgYWN0aW9ucyBhcmUgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQuIEl0IG5ldmVyIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWN0aW9ucyQoKTogT2JzZXJ2YWJsZTxyZWFkb25seSBXb3JrYmVuY2hQYXJ0QWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVnaXN0cnkub2JqZWN0cyQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0cnkuY2xlYXIoKTtcbiAgfVxufVxuIl19
16
+ export const WORKBENCH_PART_ACTION_REGISTRY = new InjectionToken('WORKBENCH_PART_ACTION_REGISTRY', {
17
+ providedIn: 'root',
18
+ factory: () => new WorkbenchObjectRegistry({
19
+ keyFn: identity,
20
+ nullObjectErrorFn: (action) => Error(`[NullPartActionError] Part Action '${JSON.stringify(action)}' not found.`),
21
+ }),
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXBhcnQtYWN0aW9uLnJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvcGFydC93b3JrYmVuY2gtcGFydC1hY3Rpb24ucmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFHSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFOUU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLGNBQWMsQ0FBb0UsZ0NBQWdDLEVBQUU7SUFDcEssVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQTJDO1FBQ25GLEtBQUssRUFBRSxRQUFRO1FBQ2YsaUJBQWlCLEVBQUUsQ0FBQyxNQUEyQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUN0SSxDQUFDO0NBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge1dvcmtiZW5jaFBhcnRBY3Rpb259IGZyb20gJy4uL3dvcmtiZW5jaC5tb2RlbCc7XG5pbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtXb3JrYmVuY2hPYmplY3RSZWdpc3RyeX0gZnJvbSAnLi4vcmVnaXN0cnkvd29ya2JlbmNoLW9iamVjdC1yZWdpc3RyeSc7XG5cbi8qKlxuICogUmVnaXN0cnkgZm9yIHtAbGluayBXb3JrYmVuY2hQYXJ0QWN0aW9ufSBtb2RlbCBvYmplY3RzLlxuICovXG5leHBvcnQgY29uc3QgV09SS0JFTkNIX1BBUlRfQUNUSU9OX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPFdvcmtiZW5jaE9iamVjdFJlZ2lzdHJ5PFdvcmtiZW5jaFBhcnRBY3Rpb24sIFdvcmtiZW5jaFBhcnRBY3Rpb24+PignV09SS0JFTkNIX1BBUlRfQUNUSU9OX1JFR0lTVFJZJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IG5ldyBXb3JrYmVuY2hPYmplY3RSZWdpc3RyeTxXb3JrYmVuY2hQYXJ0QWN0aW9uLCBXb3JrYmVuY2hQYXJ0QWN0aW9uPih7XG4gICAga2V5Rm46IGlkZW50aXR5LFxuICAgIG51bGxPYmplY3RFcnJvckZuOiAoYWN0aW9uOiBXb3JrYmVuY2hQYXJ0QWN0aW9uKSA9PiBFcnJvcihgW051bGxQYXJ0QWN0aW9uRXJyb3JdIFBhcnQgQWN0aW9uICcke0pTT04uc3RyaW5naWZ5KGFjdGlvbil9JyBub3QgZm91bmQuYCksXG4gIH0pLFxufSk7XG4iXX0=
@@ -1,3 +1,12 @@
1
+ /*
2
+ * Copyright (c) 2018-2024 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
1
10
  /**
2
11
  * Represents a part of the workbench layout.
3
12
  *
@@ -7,4 +16,4 @@
7
16
  */
8
17
  export class WorkbenchPart {
9
18
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXBhcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3dvcmtiZW5jaC1wYXJ0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0IsYUFBYTtDQXFEbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtXb3JrYmVuY2hQYXJ0QWN0aW9ufSBmcm9tICcuLi93b3JrYmVuY2gubW9kZWwnO1xuaW1wb3J0IHtWaWV3SWR9IGZyb20gJy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwYXJ0IG9mIHRoZSB3b3JrYmVuY2ggbGF5b3V0LlxuICpcbiAqIEEgcGFydCBpcyBhIHN0YWNrIG9mIHZpZXdzIHRoYXQgY2FuIGJlIGFycmFuZ2VkIGluIHRoZSB3b3JrYmVuY2ggbGF5b3V0LlxuICpcbiAqIEBzZWUgV29ya2JlbmNoVmlld1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya2JlbmNoUGFydCB7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGl0eSBvZiB0aGlzIHBhcnQuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBwYXJ0IGlzIGxvY2F0ZWQgaW4gdGhlIG1haW4gYXJlYS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpc0luTWFpbkFyZWE6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgcGFydCBpcyBhY3RpdmUgb3IgaW5hY3RpdmUuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYWN0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB3aGVuIHRoaXMgcGFydCBiZWNvbWVzIGFjdGl2ZSBvciBpbmFjdGl2ZS5cbiAgICpcbiAgICogVXBvbiBzdWJzY3JpcHRpb24sIGVtaXRzIHRoZSBjdXJyZW50IHN0YXRlLCBhbmQgdGhlbiBlYWNoIHRpbWUgdGhlIHN0YXRlIGNoYW5nZXMuIFRoZSBvYnNlcnZhYmxlIG5ldmVyIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSB2aWV3IGluIHRoaXMgcGFydC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhY3RpdmVWaWV3SWQkOiBPYnNlcnZhYmxlPFZpZXdJZCB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSB2aWV3LCBpZiBhbnkuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYWN0aXZlVmlld0lkOiBWaWV3SWQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgdmlld3Mgb3BlbmVkIGluIHRoaXMgcGFydC5cbiAgICpcbiAgICogVXBvbiBzdWJzY3JpcHRpb24sIGVtaXRzIHRoZSBjdXJyZW50IHZpZXdzLCBhbmQgdGhlbiBlYWNoIHRpbWUgdGhlIHZpZXdzIGNoYW5nZS4gVGhlIG9ic2VydmFibGUgbmV2ZXIgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZpZXdJZHMkOiBPYnNlcnZhYmxlPFZpZXdJZFtdPjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBvcGVuZWQgdmlld3MgaW4gdGhpcyBwYXJ0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZpZXdJZHM6IFZpZXdJZFtdO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcnQuXG4gICAqXG4gICAqIFVwb24gc3Vic2NyaXB0aW9uLCB0aGUgY3VycmVudGx5IGFzc29jaWF0ZWQgYWN0aW9ucyBhcmUgZW1pdHRlZCwgYW5kIHRoZW4gZW1pdHMgY29udGludW91c2x5XG4gICAqIHdoZW4gbmV3IGFjdGlvbnMgYXJlIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkLiBJdCBuZXZlciBjb21wbGV0ZXMuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYWN0aW9ucyQ6IE9ic2VydmFibGU8cmVhZG9ubHkgV29ya2JlbmNoUGFydEFjdGlvbltdPjtcbn1cbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXBhcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3dvcmtiZW5jaC1wYXJ0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBTUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFnQixhQUFhO0NBK0JsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtXb3JrYmVuY2hQYXJ0QWN0aW9ufSBmcm9tICcuLi93b3JrYmVuY2gubW9kZWwnO1xuaW1wb3J0IHtWaWV3SWR9IGZyb20gJy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtTaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwYXJ0IG9mIHRoZSB3b3JrYmVuY2ggbGF5b3V0LlxuICpcbiAqIEEgcGFydCBpcyBhIHN0YWNrIG9mIHZpZXdzIHRoYXQgY2FuIGJlIGFycmFuZ2VkIGluIHRoZSB3b3JrYmVuY2ggbGF5b3V0LlxuICpcbiAqIEBzZWUgV29ya2JlbmNoVmlld1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya2JlbmNoUGFydCB7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGl0eSBvZiB0aGlzIHBhcnQuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBwYXJ0IGlzIGxvY2F0ZWQgaW4gdGhlIG1haW4gYXJlYS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpc0luTWFpbkFyZWE6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgcGFydCBpcyBhY3RpdmUgb3IgaW5hY3RpdmUuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYWN0aXZlOiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIGFjdGl2ZSB2aWV3LCBvciBgbnVsbGAgaWYgbm9uZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhY3RpdmVWaWV3SWQ6IFNpZ25hbDxWaWV3SWQgfCBudWxsPjtcblxuICAvKipcbiAgICogSWRlbnRpZmllcyB2aWV3cyBvcGVuZWQgaW4gdGhpcyBwYXJ0LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZpZXdJZHM6IFNpZ25hbDxWaWV3SWRbXT47XG5cbiAgLyoqXG4gICAqIEFjdGlvbnMgbWF0Y2hpbmcgdGhpcyBwYXJ0IGFuZCBpdHMgYWN0aXZlIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYWN0aW9uczogU2lnbmFsPFdvcmtiZW5jaFBhcnRBY3Rpb25bXT47XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2018-2022 Swiss Federal Railways
2
+ * Copyright (c) 2018-2024 Swiss Federal Railways
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -7,51 +7,17 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
- import { Injectable } from '@angular/core';
11
- import { concat } from 'rxjs';
10
+ import { InjectionToken } from '@angular/core';
12
11
  import { WorkbenchObjectRegistry } from '../registry/workbench-object-registry';
13
- import { take } from 'rxjs/operators';
14
- import { bufferLatestUntilLayoutChange } from '../common/operators';
15
- import * as i0 from "@angular/core";
16
12
  /**
17
13
  * Registry for {@link WorkbenchPart} model objects.
18
14
  */
19
- export class WorkbenchPartRegistry {
20
- constructor() {
21
- this._registry = new WorkbenchObjectRegistry({
22
- keyFn: part => part.id,
23
- nullObjectErrorFn: partId => Error(`[NullPartError] Part '${partId}' not found.`),
24
- });
25
- this.parts$ = concat(this._registry.objects$.pipe(take(1)), // immediate emission upon subscription
26
- this._registry.objects$.pipe(bufferLatestUntilLayoutChange()));
27
- }
28
- /**
29
- * Registers given part.
30
- */
31
- register(part) {
32
- this._registry.register(part);
33
- }
34
- /**
35
- * Unregisters specified part and destroys it.
36
- */
37
- unregister(partId) {
38
- this._registry.unregister(partId)?.destroy();
39
- }
40
- get(partId, options) {
41
- return this._registry.get(partId, options);
42
- }
43
- get parts() {
44
- return this._registry.objects;
45
- }
46
- ngOnDestroy() {
47
- this._registry.objects.forEach(part => part.destroy());
48
- this._registry.clear();
49
- }
50
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
51
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartRegistry, providedIn: 'root' }); }
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartRegistry, decorators: [{
54
- type: Injectable,
55
- args: [{ providedIn: 'root' }]
56
- }] });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXBhcnQucmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3dvcmtiZW5jaC1wYXJ0LnJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEVBQUMsTUFBTSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFbEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBRGxDO1FBR1UsY0FBUyxHQUFHLElBQUksdUJBQXVCLENBQXlCO1lBQ3RFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLHlCQUF5QixNQUFNLGNBQWMsQ0FBQztTQUNsRixDQUFDLENBQUM7UUFFSSxXQUFNLEdBQTBDLE1BQU0sQ0FDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLHVDQUF1QztRQUM5RSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUM5RCxDQUFDO0tBaUNIO0lBL0JDOztPQUVHO0lBQ0ksUUFBUSxDQUFDLElBQW9CO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFPTSxHQUFHLENBQUMsTUFBYyxFQUFFLE9BQXdCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0ExQ1UscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FEVCxNQUFNOzsyRkFDbEIscUJBQXFCO2tCQURqQyxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFBhcnR9IGZyb20gJy4vybV3b3JrYmVuY2gtcGFydC5tb2RlbCc7XG5pbXBvcnQge2NvbmNhdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1dvcmtiZW5jaE9iamVjdFJlZ2lzdHJ5fSBmcm9tICcuLi9yZWdpc3RyeS93b3JrYmVuY2gtb2JqZWN0LXJlZ2lzdHJ5JztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtidWZmZXJMYXRlc3RVbnRpbExheW91dENoYW5nZX0gZnJvbSAnLi4vY29tbW9uL29wZXJhdG9ycyc7XG5cbi8qKlxuICogUmVnaXN0cnkgZm9yIHtAbGluayBXb3JrYmVuY2hQYXJ0fSBtb2RlbCBvYmplY3RzLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBXb3JrYmVuY2hQYXJ0UmVnaXN0cnkgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX3JlZ2lzdHJ5ID0gbmV3IFdvcmtiZW5jaE9iamVjdFJlZ2lzdHJ5PHN0cmluZywgybVXb3JrYmVuY2hQYXJ0Pih7XG4gICAga2V5Rm46IHBhcnQgPT4gcGFydC5pZCxcbiAgICBudWxsT2JqZWN0RXJyb3JGbjogcGFydElkID0+IEVycm9yKGBbTnVsbFBhcnRFcnJvcl0gUGFydCAnJHtwYXJ0SWR9JyBub3QgZm91bmQuYCksXG4gIH0pO1xuXG4gIHB1YmxpYyBwYXJ0cyQ6IE9ic2VydmFibGU8cmVhZG9ubHkgybVXb3JrYmVuY2hQYXJ0W10+ID0gY29uY2F0KFxuICAgIHRoaXMuX3JlZ2lzdHJ5Lm9iamVjdHMkLnBpcGUodGFrZSgxKSksIC8vIGltbWVkaWF0ZSBlbWlzc2lvbiB1cG9uIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuX3JlZ2lzdHJ5Lm9iamVjdHMkLnBpcGUoYnVmZmVyTGF0ZXN0VW50aWxMYXlvdXRDaGFuZ2UoKSksXG4gICk7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBnaXZlbiBwYXJ0LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyKHBhcnQ6IMm1V29ya2JlbmNoUGFydCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHBhcnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIHNwZWNpZmllZCBwYXJ0IGFuZCBkZXN0cm95cyBpdC5cbiAgICovXG4gIHB1YmxpYyB1bnJlZ2lzdGVyKHBhcnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0cnkudW5yZWdpc3RlcihwYXJ0SWQpPy5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUge0BsaW5rIMm1V29ya2JlbmNoUGFydH0gb2YgdGhlIGdpdmVuIGlkZW50aXR5LiBJZiBub3QgZm91bmQsIGJ5IGRlZmF1bHQsIHRocm93cyBhbiBlcnJvciB1bmxlc3Mgc2V0dGluZyB0aGUgYG9yRWxzZU51bGxgIG9wdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQocGFydElkOiBzdHJpbmcpOiDJtVdvcmtiZW5jaFBhcnQ7XG4gIHB1YmxpYyBnZXQocGFydElkOiBzdHJpbmcsIG9wdGlvbnM6IHtvckVsc2U6IG51bGx9KTogybVXb3JrYmVuY2hQYXJ0IHwgbnVsbDtcbiAgcHVibGljIGdldChwYXJ0SWQ6IHN0cmluZywgb3B0aW9ucz86IHtvckVsc2U6IG51bGx9KTogybVXb3JrYmVuY2hQYXJ0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmdldChwYXJ0SWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJ0cygpOiByZWFkb25seSDJtVdvcmtiZW5jaFBhcnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm9iamVjdHM7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0cnkub2JqZWN0cy5mb3JFYWNoKHBhcnQgPT4gcGFydC5kZXN0cm95KCkpO1xuICAgIHRoaXMuX3JlZ2lzdHJ5LmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
15
+ export const WORKBENCH_PART_REGISTRY = new InjectionToken('WORKBENCH_PART_REGISTRY', {
16
+ providedIn: 'root',
17
+ factory: () => new WorkbenchObjectRegistry({
18
+ keyFn: part => part.id,
19
+ nullObjectErrorFn: partId => Error(`[NullPartError] Part '${partId}' not found.`),
20
+ onUnregister: part => part.destroy(),
21
+ }),
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLXBhcnQucmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3dvcmtiZW5jaC1wYXJ0LnJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUFrRCx5QkFBeUIsRUFBRTtJQUNwSSxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSx1QkFBdUIsQ0FBeUI7UUFDakUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMseUJBQXlCLE1BQU0sY0FBYyxDQUFDO1FBQ2pGLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7S0FDckMsQ0FBQztDQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge8m1V29ya2JlbmNoUGFydH0gZnJvbSAnLi/JtXdvcmtiZW5jaC1wYXJ0Lm1vZGVsJztcbmltcG9ydCB7V29ya2JlbmNoT2JqZWN0UmVnaXN0cnl9IGZyb20gJy4uL3JlZ2lzdHJ5L3dvcmtiZW5jaC1vYmplY3QtcmVnaXN0cnknO1xuXG4vKipcbiAqIFJlZ2lzdHJ5IGZvciB7QGxpbmsgV29ya2JlbmNoUGFydH0gbW9kZWwgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktCRU5DSF9QQVJUX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPFdvcmtiZW5jaE9iamVjdFJlZ2lzdHJ5PHN0cmluZywgybVXb3JrYmVuY2hQYXJ0Pj4oJ1dPUktCRU5DSF9QQVJUX1JFR0lTVFJZJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IG5ldyBXb3JrYmVuY2hPYmplY3RSZWdpc3RyeTxzdHJpbmcsIMm1V29ya2JlbmNoUGFydD4oe1xuICAgIGtleUZuOiBwYXJ0ID0+IHBhcnQuaWQsXG4gICAgbnVsbE9iamVjdEVycm9yRm46IHBhcnRJZCA9PiBFcnJvcihgW051bGxQYXJ0RXJyb3JdIFBhcnQgJyR7cGFydElkfScgbm90IGZvdW5kLmApLFxuICAgIG9uVW5yZWdpc3RlcjogcGFydCA9PiBwYXJ0LmRlc3Ryb3koKSxcbiAgfSksXG59KTtcbiJdfQ==
@@ -7,33 +7,35 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
- import { BehaviorSubject, Subject, switchMap } from 'rxjs';
11
- import { inject, Injector, runInInjectionContext } from '@angular/core';
10
+ import { assertNotInReactiveContext, computed, effect, EnvironmentInjector, inject, Injector, runInInjectionContext, signal } from '@angular/core';
12
11
  import { Arrays } from '@scion/toolkit/util';
13
12
  import { WorkbenchPart } from './workbench-part.model';
14
- import { WorkbenchRouter } from '../routing/workbench-router.service';
15
- import { WorkbenchViewRegistry } from '../view/workbench-view.registry';
13
+ import { WORKBENCH_VIEW_REGISTRY } from '../view/workbench-view.registry';
16
14
  import { ComponentPortal } from '@angular/cdk/portal';
17
15
  import { ActivationInstantProvider } from '../activation-instant.provider';
18
- import { WorkbenchPartActionRegistry } from './workbench-part-action.registry';
19
- import { filterArray } from '@scion/toolkit/operators';
20
- import { distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';
16
+ import { filter } from 'rxjs/operators';
21
17
  import { WorkbenchLayoutService } from '../layout/workbench-layout.service';
18
+ import { NavigationStart, Router } from '@angular/router';
19
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
20
+ import { ɵWorkbenchRouter } from '../routing/ɵworkbench-router.service';
21
+ import { WORKBENCH_PART_ACTION_REGISTRY } from './workbench-part-action.registry';
22
22
  export class ɵWorkbenchPart {
23
23
  constructor(id, options) {
24
24
  this.id = id;
25
- this._workbenchRouter = inject(WorkbenchRouter);
25
+ this._partEnvironmentInjector = inject(EnvironmentInjector);
26
+ this._workbenchRouter = inject(ɵWorkbenchRouter);
26
27
  this._workbenchLayoutService = inject(WorkbenchLayoutService);
27
- this._viewRegistry = inject(WorkbenchViewRegistry);
28
+ this._viewRegistry = inject(WORKBENCH_VIEW_REGISTRY);
28
29
  this._activationInstantProvider = inject(ActivationInstantProvider);
29
- this._partActionRegistry = inject(WorkbenchPartActionRegistry);
30
- this._destroy$ = new Subject();
31
- this.active$ = new BehaviorSubject(false);
32
- this.viewIds$ = new BehaviorSubject([]);
33
- this.activeViewId$ = new BehaviorSubject(null);
30
+ this._partActionRegistry = inject(WORKBENCH_PART_ACTION_REGISTRY);
31
+ this.active = signal(false);
32
+ this.viewIds = signal([], { equal: (a, b) => Arrays.isEqual(a, b, { exactOrder: true }) });
33
+ this.activeViewId = signal(null);
34
34
  this._partComponent = options.component;
35
- this.actions$ = this.observePartActions$();
35
+ this.actions = this.selectPartActions();
36
36
  this.touchOnActivate();
37
+ this.installModelUpdater();
38
+ this.onLayoutChange(this._workbenchRouter.getCurrentNavigationContext().layout);
37
39
  }
38
40
  /**
39
41
  * Constructs the portal using the given injection context.
@@ -49,32 +51,17 @@ export class ɵWorkbenchPart {
49
51
  return new ComponentPortal(this._partComponent, null, injector, null, null);
50
52
  }
51
53
  /**
52
- * Method invoked to update this workbench model object when the workbench layout changes.
54
+ * Method invoked when the workbench layout has changed.
55
+ *
56
+ * This method is called on every layout change.
53
57
  */
54
58
  onLayoutChange(layout) {
55
59
  this._isInMainArea ??= layout.hasPart(this.id, { grid: 'mainArea' });
56
- const part = layout.part({ partId: this.id });
60
+ const mPart = layout.part({ partId: this.id });
57
61
  const active = layout.activePart({ grid: this._isInMainArea ? 'mainArea' : 'workbench' })?.id === this.id;
58
- const prevViewIds = this.viewIds$.value;
59
- const currViewIds = part.views.map(view => view.id);
60
- // Update active part if changed
61
- if (this.active !== active) {
62
- this.active$.next(active);
63
- }
64
- // Update views if changed
65
- if (!Arrays.isEqual(prevViewIds, currViewIds, { exactOrder: true })) {
66
- this.viewIds$.next(currViewIds);
67
- }
68
- // Update active view if changed
69
- if (this.activeViewId !== part.activeViewId) {
70
- this.activeViewId$.next(part.activeViewId ?? null);
71
- }
72
- }
73
- get viewIds() {
74
- return this.viewIds$.value;
75
- }
76
- get activeViewId() {
77
- return this.activeViewId$.value;
62
+ this.active.set(active);
63
+ this.viewIds.set(mPart.views.map(view => view.id));
64
+ this.activeViewId.set(mPart.activeViewId ?? null);
78
65
  }
79
66
  /**
80
67
  * Activates this part.
@@ -82,16 +69,14 @@ export class ɵWorkbenchPart {
82
69
  * Note: This instruction runs asynchronously via URL routing.
83
70
  */
84
71
  async activate() {
85
- if (this.active) {
72
+ assertNotInReactiveContext(this.activate, 'Call WorkbenchPart.activate() in a non-reactive (non-tracking) context, such as within the untracked() function.');
73
+ if (this.active()) {
86
74
  return true;
87
75
  }
88
- const currentLayout = this._workbenchLayoutService.layout;
76
+ const currentLayout = this._workbenchLayoutService.layout();
89
77
  return this._workbenchRouter.navigate(layout => currentLayout === layout ? layout.activatePart(this.id) : null, // cancel navigation if the layout has become stale
90
78
  { skipLocationChange: true });
91
79
  }
92
- get active() {
93
- return this.active$.value;
94
- }
95
80
  get activationInstant() {
96
81
  return this._activationInstant;
97
82
  }
@@ -99,32 +84,63 @@ export class ɵWorkbenchPart {
99
84
  return this._isInMainArea ?? false;
100
85
  }
101
86
  /**
102
- * Emits actions that have contributed to this part and the currently active view.
87
+ * Reference to the handle's injector. The injector will be destroyed when removing the part.
88
+ */
89
+ get injector() {
90
+ return this._partEnvironmentInjector;
91
+ }
92
+ /**
93
+ * Selects actions matching this part and the currently active view.
103
94
  */
104
- observePartActions$() {
95
+ selectPartActions() {
105
96
  const injector = inject(Injector);
106
- return this._partActionRegistry.actions$
107
- .pipe(switchMap(actions => this.activeViewId$.pipe(map(() => actions))),
108
- // Run in injection context for `canMatch` function to inject dependencies.
109
- filterArray((action) => runInInjectionContext(injector, () => action.canMatch?.(this) ?? true)), distinctUntilChanged());
97
+ return computed(() => {
98
+ // Filter actions by calling `canMatch`, if any.
99
+ return this._partActionRegistry.objects().filter(action => {
100
+ // - Run function in injection context for `canMatch` function to inject dependencies.
101
+ // - Run function in a reactive context to track signals. (e.g., view's active state).
102
+ return runInInjectionContext(injector, () => action.canMatch?.(this) ?? true);
103
+ });
104
+ });
110
105
  }
111
106
  /**
112
107
  * Updates the activation instant when this part is activated.
113
108
  */
114
109
  touchOnActivate() {
115
- this.active$
116
- .pipe(filter(Boolean), takeUntil(this._destroy$))
110
+ effect(() => {
111
+ if (this.active()) {
112
+ this._activationInstant = this._activationInstantProvider.now();
113
+ }
114
+ });
115
+ }
116
+ /**
117
+ * Sets up automatic synchronization of {@link WorkbenchPart} on every layout change.
118
+ *
119
+ * If the operation is cancelled (e.g., due to a navigation failure), it reverts the changes.
120
+ */
121
+ installModelUpdater() {
122
+ inject(Router).events
123
+ .pipe(filter((event) => event instanceof NavigationStart), takeUntilDestroyed())
117
124
  .subscribe(() => {
118
- this._activationInstant = this._activationInstantProvider.now();
125
+ const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
126
+ const { layout, previousLayout, layoutDiff } = navigationContext;
127
+ if (layoutDiff.removedParts.includes(this.id)) {
128
+ return;
129
+ }
130
+ this.onLayoutChange(layout);
131
+ // Revert change in case the navigation fails.
132
+ if (previousLayout?.hasPart(this.id)) {
133
+ navigationContext.registerUndoAction(() => this.onLayoutChange(previousLayout));
134
+ }
119
135
  });
120
136
  }
121
137
  destroy() {
122
- this._destroy$.next();
138
+ this._partEnvironmentInjector.destroy();
123
139
  // IMPORTANT: Only detach the active view, not destroy it, because views are explicitly destroyed when view handles are removed.
124
140
  // Otherwise, moving the last view to another part would fail because the view would already be destroyed.
125
- if (this.activeViewId) {
126
- this._viewRegistry.get(this.activeViewId, { orElse: null })?.portal.detach();
141
+ if (this.activeViewId()) {
142
+ this._viewRegistry.get(this.activeViewId(), { orElse: null })?.portal.detach();
127
143
  }
128
144
  }
129
145
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybV3b3JrYmVuY2gtcGFydC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL3BhcnQvybV3b3JrYmVuY2gtcGFydC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFM0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZUFBZSxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUcxRSxNQUFNLE9BQU8sY0FBYztJQW1CekIsWUFBNEIsRUFBVSxFQUFFLE9BQTRFO1FBQXhGLE9BQUUsR0FBRixFQUFFLENBQVE7UUFmckIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGVB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Q0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNqRSwyRUFBMkU7UUFDM0UsV0FBVyxDQUFDLENBQUMsTUFBMkIsRUFBVyxFQUFFLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUM3SCxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZTtRQUNyQixJQUFJLENBQUMsT0FBTzthQUNULElBQUksQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixnSUFBZ0k7UUFDaEksMEdBQTBHO1FBQzFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0UsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtpbmplY3QsIEluamVjdG9yLCBydW5JbkluamVjdGlvbkNvbnRleHR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcnJheXN9IGZyb20gJ0BzY2lvbi90b29sa2l0L3V0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hQYXJ0QWN0aW9ufSBmcm9tICcuLi93b3JrYmVuY2gubW9kZWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hQYXJ0fSBmcm9tICcuL3dvcmtiZW5jaC1wYXJ0Lm1vZGVsJztcbmltcG9ydCB7V29ya2JlbmNoUm91dGVyfSBmcm9tICcuLi9yb3V0aW5nL3dvcmtiZW5jaC1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXdSZWdpc3RyeX0gZnJvbSAnLi4vdmlldy93b3JrYmVuY2gtdmlldy5yZWdpc3RyeSc7XG5pbXBvcnQge0NvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge0FjdGl2YXRpb25JbnN0YW50UHJvdmlkZXJ9IGZyb20gJy4uL2FjdGl2YXRpb24taW5zdGFudC5wcm92aWRlcic7XG5pbXBvcnQge1dvcmtiZW5jaFBhcnRBY3Rpb25SZWdpc3RyeX0gZnJvbSAnLi93b3JrYmVuY2gtcGFydC1hY3Rpb24ucmVnaXN0cnknO1xuaW1wb3J0IHtmaWx0ZXJBcnJheX0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvb3BlcmF0b3JzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7ybVXb3JrYmVuY2hMYXlvdXR9IGZyb20gJy4uL2xheW91dC/JtXdvcmtiZW5jaC1sYXlvdXQnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7Vmlld0lkfSBmcm9tICcuLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIMm1V29ya2JlbmNoUGFydCBpbXBsZW1lbnRzIFdvcmtiZW5jaFBhcnQge1xuXG4gIHByaXZhdGUgX2FjdGl2YXRpb25JbnN0YW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya2JlbmNoUm91dGVyID0gaW5qZWN0KFdvcmtiZW5jaFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dvcmtiZW5jaExheW91dFNlcnZpY2UgPSBpbmplY3QoV29ya2JlbmNoTGF5b3V0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdSZWdpc3RyeSA9IGluamVjdChXb3JrYmVuY2hWaWV3UmVnaXN0cnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyID0gaW5qZWN0KEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0QWN0aW9uUmVnaXN0cnkgPSBpbmplY3QoV29ya2JlbmNoUGFydEFjdGlvblJlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFydENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxQYXJ0Q29tcG9uZW50IHwgTWFpbkFyZWFMYXlvdXRDb21wb25lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHZpZXdJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWaWV3SWRbXT4oW10pO1xuICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlVmlld0lkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Vmlld0lkIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBhY3Rpb25zJDogT2JzZXJ2YWJsZTxyZWFkb25seSBXb3JrYmVuY2hQYXJ0QWN0aW9uW10+O1xuXG4gIHByaXZhdGUgX2lzSW5NYWluQXJlYTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZywgb3B0aW9uczoge2NvbXBvbmVudDogQ29tcG9uZW50VHlwZTxQYXJ0Q29tcG9uZW50IHwgTWFpbkFyZWFMYXlvdXRDb21wb25lbnQ+fSkge1xuICAgIHRoaXMuX3BhcnRDb21wb25lbnQgPSBvcHRpb25zLmNvbXBvbmVudDtcbiAgICB0aGlzLmFjdGlvbnMkID0gdGhpcy5vYnNlcnZlUGFydEFjdGlvbnMkKCk7XG4gICAgdGhpcy50b3VjaE9uQWN0aXZhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBwb3J0YWwgdXNpbmcgdGhlIGdpdmVuIGluamVjdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZVBvcnRhbEZyb21JbmplY3Rpb25Db250ZXh0KGluamVjdGlvbkNvbnRleHQ6IEluamVjdG9yKTogQ29tcG9uZW50UG9ydGFsPFBhcnRDb21wb25lbnQgfCBNYWluQXJlYUxheW91dENvbXBvbmVudD4ge1xuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHBhcmVudDogaW5qZWN0aW9uQ29udGV4dCxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7cHJvdmlkZTogybVXb3JrYmVuY2hQYXJ0LCB1c2VWYWx1ZTogdGhpc30sXG4gICAgICAgIHtwcm92aWRlOiBXb3JrYmVuY2hQYXJ0LCB1c2VFeGlzdGluZzogybVXb3JrYmVuY2hQYXJ0fSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRQb3J0YWwodGhpcy5fcGFydENvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IsIG51bGwsIG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBpbnZva2VkIHRvIHVwZGF0ZSB0aGlzIHdvcmtiZW5jaCBtb2RlbCBvYmplY3Qgd2hlbiB0aGUgd29ya2JlbmNoIGxheW91dCBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIG9uTGF5b3V0Q2hhbmdlKGxheW91dDogybVXb3JrYmVuY2hMYXlvdXQpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0luTWFpbkFyZWEgPz89IGxheW91dC5oYXNQYXJ0KHRoaXMuaWQsIHtncmlkOiAnbWFpbkFyZWEnfSk7XG4gICAgY29uc3QgcGFydCA9IGxheW91dC5wYXJ0KHtwYXJ0SWQ6IHRoaXMuaWR9KTtcbiAgICBjb25zdCBhY3RpdmUgPSBsYXlvdXQuYWN0aXZlUGFydCh7Z3JpZDogdGhpcy5faXNJbk1haW5BcmVhID8gJ21haW5BcmVhJyA6ICd3b3JrYmVuY2gnfSk/LmlkID09PSB0aGlzLmlkO1xuICAgIGNvbnN0IHByZXZWaWV3SWRzID0gdGhpcy52aWV3SWRzJC52YWx1ZTtcbiAgICBjb25zdCBjdXJyVmlld0lkcyA9IHBhcnQudmlld3MubWFwKHZpZXcgPT4gdmlldy5pZCk7XG5cbiAgICAvLyBVcGRhdGUgYWN0aXZlIHBhcnQgaWYgY2hhbmdlZFxuICAgIGlmICh0aGlzLmFjdGl2ZSAhPT0gYWN0aXZlKSB7XG4gICAgICB0aGlzLmFjdGl2ZSQubmV4dChhY3RpdmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB2aWV3cyBpZiBjaGFuZ2VkXG4gICAgaWYgKCFBcnJheXMuaXNFcXVhbChwcmV2Vmlld0lkcywgY3VyclZpZXdJZHMsIHtleGFjdE9yZGVyOiB0cnVlfSkpIHtcbiAgICAgIHRoaXMudmlld0lkcyQubmV4dChjdXJyVmlld0lkcyk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGFjdGl2ZSB2aWV3IGlmIGNoYW5nZWRcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3SWQgIT09IHBhcnQuYWN0aXZlVmlld0lkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVZpZXdJZCQubmV4dChwYXJ0LmFjdGl2ZVZpZXdJZCA/PyBudWxsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpZXdJZHMoKTogVmlld0lkW10ge1xuICAgIHJldHVybiB0aGlzLnZpZXdJZHMkLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVWaWV3SWQoKTogVmlld0lkIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlld0lkJC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhpcyBwYXJ0LlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIGluc3RydWN0aW9uIHJ1bnMgYXN5bmNocm9ub3VzbHkgdmlhIFVSTCByb3V0aW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFjdGl2YXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudExheW91dCA9IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0O1xuICAgIHJldHVybiB0aGlzLl93b3JrYmVuY2hSb3V0ZXIubmF2aWdhdGUoXG4gICAgICBsYXlvdXQgPT4gY3VycmVudExheW91dCA9PT0gbGF5b3V0ID8gbGF5b3V0LmFjdGl2YXRlUGFydCh0aGlzLmlkKSA6IG51bGwsIC8vIGNhbmNlbCBuYXZpZ2F0aW9uIGlmIHRoZSBsYXlvdXQgaGFzIGJlY29tZSBzdGFsZVxuICAgICAge3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0sIC8vIGRvIG5vdCBhZGQgcGFydCBhY3RpdmF0aW9uIGludG8gYnJvd3NlciBoaXN0b3J5IHN0YWNrXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZSQudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2YXRpb25JbnN0YW50KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRpb25JbnN0YW50O1xuICB9XG5cbiAgcHVibGljIGdldCBpc0luTWFpbkFyZWEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzSW5NYWluQXJlYSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhY3Rpb25zIHRoYXQgaGF2ZSBjb250cmlidXRlZCB0byB0aGlzIHBhcnQgYW5kIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZpZXcuXG4gICAqL1xuICBwcml2YXRlIG9ic2VydmVQYXJ0QWN0aW9ucyQoKTogT2JzZXJ2YWJsZTxXb3JrYmVuY2hQYXJ0QWN0aW9uW10+IHtcbiAgICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnRBY3Rpb25SZWdpc3RyeS5hY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChhY3Rpb25zID0+IHRoaXMuYWN0aXZlVmlld0lkJC5waXBlKG1hcCgoKSA9PiBhY3Rpb25zKSkpLFxuICAgICAgICAvLyBSdW4gaW4gaW5qZWN0aW9uIGNvbnRleHQgZm9yIGBjYW5NYXRjaGAgZnVuY3Rpb24gdG8gaW5qZWN0IGRlcGVuZGVuY2llcy5cbiAgICAgICAgZmlsdGVyQXJyYXkoKGFjdGlvbjogV29ya2JlbmNoUGFydEFjdGlvbik6IGJvb2xlYW4gPT4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiBhY3Rpb24uY2FuTWF0Y2g/Lih0aGlzKSA/PyB0cnVlKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGFjdGl2YXRpb24gaW5zdGFudCB3aGVuIHRoaXMgcGFydCBpcyBhY3RpdmF0ZWQuXG4gICAqL1xuICBwcml2YXRlIHRvdWNoT25BY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGlvbkluc3RhbnQgPSB0aGlzLl9hY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyLm5vdygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgLy8gSU1QT1JUQU5UOiBPbmx5IGRldGFjaCB0aGUgYWN0aXZlIHZpZXcsIG5vdCBkZXN0cm95IGl0LCBiZWNhdXNlIHZpZXdzIGFyZSBleHBsaWNpdGx5IGRlc3Ryb3llZCB3aGVuIHZpZXcgaGFuZGxlcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBPdGhlcndpc2UsIG1vdmluZyB0aGUgbGFzdCB2aWV3IHRvIGFub3RoZXIgcGFydCB3b3VsZCBmYWlsIGJlY2F1c2UgdGhlIHZpZXcgd291bGQgYWxyZWFkeSBiZSBkZXN0cm95ZWQuXG4gICAgaWYgKHRoaXMuYWN0aXZlVmlld0lkKSB7XG4gICAgICB0aGlzLl92aWV3UmVnaXN0cnkuZ2V0KHRoaXMuYWN0aXZlVmlld0lkLCB7b3JFbHNlOiBudWxsfSk/LnBvcnRhbC5kZXRhY2goKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcHNldWRvLXR5cGUgZm9yIHRoZSBhY3R1YWwge0BsaW5rIFBhcnRDb21wb25lbnR9IHdoaWNoIG11c3Qgbm90IGJlIHJlZmVyZW5jZWQgaW4gb3JkZXIgdG8gYXZvaWQgaW1wb3J0IGN5Y2xlcy5cbiAqL1xudHlwZSBQYXJ0Q29tcG9uZW50ID0gYW55O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwc2V1ZG8tdHlwZSBmb3IgdGhlIGFjdHVhbCB7QGxpbmsgTWFpbkFyZWFMYXlvdXRDb21wb25lbnR9IHdoaWNoIG11c3Qgbm90IGJlIHJlZmVyZW5jZWQgaW4gb3JkZXIgdG8gYXZvaWQgaW1wb3J0IGN5Y2xlcy5cbiAqL1xudHlwZSBNYWluQXJlYUxheW91dENvbXBvbmVudCA9IGFueTtcbiJdfQ==
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybV3b3JrYmVuY2gtcGFydC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL3BhcnQvybV3b3JrYmVuY2gtcGFydC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBQywwQkFBMEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pKLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLGVBQWUsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFMUUsT0FBTyxFQUFRLGVBQWUsRUFBRSxNQUFNLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVoRixNQUFNLE9BQU8sY0FBYztJQWtCekIsWUFBNEIsRUFBVSxFQUFFLE9BQTRFO1FBQXhGLE9BQUUsR0FBRixFQUFFLENBQVE7UUFoQnJCLDZCQUF3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QXdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsZ0lBQWdJO1FBQ2hJLDBHQUEwRztRQUMxRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUcsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuaW1wb3J0IHthc3NlcnROb3RJblJlYWN0aXZlQ29udGV4dCwgY29tcHV0ZWQsIGVmZmVjdCwgRW52aXJvbm1lbnRJbmplY3RvciwgaW5qZWN0LCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBTaWduYWwsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FycmF5c30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5pbXBvcnQge1dvcmtiZW5jaFBhcnRBY3Rpb259IGZyb20gJy4uL3dvcmtiZW5jaC5tb2RlbCc7XG5pbXBvcnQge1dvcmtiZW5jaFBhcnR9IGZyb20gJy4vd29ya2JlbmNoLXBhcnQubW9kZWwnO1xuaW1wb3J0IHtXT1JLQkVOQ0hfVklFV19SRUdJU1RSWX0gZnJvbSAnLi4vdmlldy93b3JrYmVuY2gtdmlldy5yZWdpc3RyeSc7XG5pbXBvcnQge0NvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge0FjdGl2YXRpb25JbnN0YW50UHJvdmlkZXJ9IGZyb20gJy4uL2FjdGl2YXRpb24taW5zdGFudC5wcm92aWRlcic7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaExheW91dH0gZnJvbSAnLi4vbGF5b3V0L8m1d29ya2JlbmNoLWxheW91dCc7XG5pbXBvcnQge1dvcmtiZW5jaExheW91dFNlcnZpY2V9IGZyb20gJy4uL2xheW91dC93b3JrYmVuY2gtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHtWaWV3SWR9IGZyb20gJy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtFdmVudCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIsIFJvdXRlckV2ZW50fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7ybVXb3JrYmVuY2hSb3V0ZXJ9IGZyb20gJy4uL3JvdXRpbmcvybV3b3JrYmVuY2gtcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtXT1JLQkVOQ0hfUEFSVF9BQ1RJT05fUkVHSVNUUll9IGZyb20gJy4vd29ya2JlbmNoLXBhcnQtYWN0aW9uLnJlZ2lzdHJ5JztcblxuZXhwb3J0IGNsYXNzIMm1V29ya2JlbmNoUGFydCBpbXBsZW1lbnRzIFdvcmtiZW5jaFBhcnQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcnRFbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrYmVuY2hSb3V0ZXIgPSBpbmplY3QoybVXb3JrYmVuY2hSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlID0gaW5qZWN0KFdvcmtiZW5jaExheW91dFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3UmVnaXN0cnkgPSBpbmplY3QoV09SS0JFTkNIX1ZJRVdfUkVHSVNUUlkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyID0gaW5qZWN0KEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0QWN0aW9uUmVnaXN0cnkgPSBpbmplY3QoV09SS0JFTkNIX1BBUlRfQUNUSU9OX1JFR0lTVFJZKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFydENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxQYXJ0Q29tcG9uZW50IHwgTWFpbkFyZWFMYXlvdXRDb21wb25lbnQ+O1xuXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmUgPSBzaWduYWwoZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld0lkcyA9IHNpZ25hbDxWaWV3SWRbXT4oW10sIHtlcXVhbDogKGEsIGIpID0+IEFycmF5cy5pc0VxdWFsKGEsIGIsIHtleGFjdE9yZGVyOiB0cnVlfSl9KTtcbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVZpZXdJZCA9IHNpZ25hbDxWaWV3SWQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGFjdGlvbnM6IFNpZ25hbDxXb3JrYmVuY2hQYXJ0QWN0aW9uW10+O1xuXG4gIHByaXZhdGUgX2lzSW5NYWluQXJlYTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfYWN0aXZhdGlvbkluc3RhbnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZywgb3B0aW9uczoge2NvbXBvbmVudDogQ29tcG9uZW50VHlwZTxQYXJ0Q29tcG9uZW50IHwgTWFpbkFyZWFMYXlvdXRDb21wb25lbnQ+fSkge1xuICAgIHRoaXMuX3BhcnRDb21wb25lbnQgPSBvcHRpb25zLmNvbXBvbmVudDtcbiAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnNlbGVjdFBhcnRBY3Rpb25zKCk7XG4gICAgdGhpcy50b3VjaE9uQWN0aXZhdGUoKTtcbiAgICB0aGlzLmluc3RhbGxNb2RlbFVwZGF0ZXIoKTtcbiAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlKHRoaXMuX3dvcmtiZW5jaFJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbkNvbnRleHQoKS5sYXlvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIHBvcnRhbCB1c2luZyB0aGUgZ2l2ZW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlUG9ydGFsRnJvbUluamVjdGlvbkNvbnRleHQoaW5qZWN0aW9uQ29udGV4dDogSW5qZWN0b3IpOiBDb21wb25lbnRQb3J0YWw8UGFydENvbXBvbmVudCB8IE1haW5BcmVhTGF5b3V0Q29tcG9uZW50PiB7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiBpbmplY3Rpb25Db250ZXh0LFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtwcm92aWRlOiDJtVdvcmtiZW5jaFBhcnQsIHVzZVZhbHVlOiB0aGlzfSxcbiAgICAgICAge3Byb3ZpZGU6IFdvcmtiZW5jaFBhcnQsIHVzZUV4aXN0aW5nOiDJtVdvcmtiZW5jaFBhcnR9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLl9wYXJ0Q29tcG9uZW50LCBudWxsLCBpbmplY3RvciwgbnVsbCwgbnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGludm9rZWQgd2hlbiB0aGUgd29ya2JlbmNoIGxheW91dCBoYXMgY2hhbmdlZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGV2ZXJ5IGxheW91dCBjaGFuZ2UuXG4gICAqL1xuICBwcml2YXRlIG9uTGF5b3V0Q2hhbmdlKGxheW91dDogybVXb3JrYmVuY2hMYXlvdXQpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0luTWFpbkFyZWEgPz89IGxheW91dC5oYXNQYXJ0KHRoaXMuaWQsIHtncmlkOiAnbWFpbkFyZWEnfSk7XG4gICAgY29uc3QgbVBhcnQgPSBsYXlvdXQucGFydCh7cGFydElkOiB0aGlzLmlkfSk7XG4gICAgY29uc3QgYWN0aXZlID0gbGF5b3V0LmFjdGl2ZVBhcnQoe2dyaWQ6IHRoaXMuX2lzSW5NYWluQXJlYSA/ICdtYWluQXJlYScgOiAnd29ya2JlbmNoJ30pPy5pZCA9PT0gdGhpcy5pZDtcbiAgICB0aGlzLmFjdGl2ZS5zZXQoYWN0aXZlKTtcbiAgICB0aGlzLnZpZXdJZHMuc2V0KG1QYXJ0LnZpZXdzLm1hcCh2aWV3ID0+IHZpZXcuaWQpKTtcbiAgICB0aGlzLmFjdGl2ZVZpZXdJZC5zZXQobVBhcnQuYWN0aXZlVmlld0lkID8/IG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGlzIHBhcnQuXG4gICAqXG4gICAqIE5vdGU6IFRoaXMgaW5zdHJ1Y3Rpb24gcnVucyBhc3luY2hyb25vdXNseSB2aWEgVVJMIHJvdXRpbmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYWN0aXZhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXNzZXJ0Tm90SW5SZWFjdGl2ZUNvbnRleHQodGhpcy5hY3RpdmF0ZSwgJ0NhbGwgV29ya2JlbmNoUGFydC5hY3RpdmF0ZSgpIGluIGEgbm9uLXJlYWN0aXZlIChub24tdHJhY2tpbmcpIGNvbnRleHQsIHN1Y2ggYXMgd2l0aGluIHRoZSB1bnRyYWNrZWQoKSBmdW5jdGlvbi4nKTtcbiAgICBpZiAodGhpcy5hY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudExheW91dCA9IHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UubGF5b3V0KCk7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtiZW5jaFJvdXRlci5uYXZpZ2F0ZShcbiAgICAgIGxheW91dCA9PiBjdXJyZW50TGF5b3V0ID09PSBsYXlvdXQgPyBsYXlvdXQuYWN0aXZhdGVQYXJ0KHRoaXMuaWQpIDogbnVsbCwgLy8gY2FuY2VsIG5hdmlnYXRpb24gaWYgdGhlIGxheW91dCBoYXMgYmVjb21lIHN0YWxlXG4gICAgICB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSwgLy8gZG8gbm90IGFkZCBwYXJ0IGFjdGl2YXRpb24gaW50byBicm93c2VyIGhpc3Rvcnkgc3RhY2tcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmF0aW9uSW5zdGFudCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmF0aW9uSW5zdGFudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNJbk1haW5BcmVhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0luTWFpbkFyZWEgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBoYW5kbGUncyBpbmplY3Rvci4gVGhlIGluamVjdG9yIHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gcmVtb3ZpbmcgdGhlIHBhcnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGluamVjdG9yKCk6IEluamVjdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fcGFydEVudmlyb25tZW50SW5qZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyBhY3Rpb25zIG1hdGNoaW5nIHRoaXMgcGFydCBhbmQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmlldy5cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0UGFydEFjdGlvbnMoKTogU2lnbmFsPFdvcmtiZW5jaFBhcnRBY3Rpb25bXT4ge1xuICAgIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAvLyBGaWx0ZXIgYWN0aW9ucyBieSBjYWxsaW5nIGBjYW5NYXRjaGAsIGlmIGFueS5cbiAgICAgIHJldHVybiB0aGlzLl9wYXJ0QWN0aW9uUmVnaXN0cnkub2JqZWN0cygpLmZpbHRlcihhY3Rpb24gPT4ge1xuICAgICAgICAvLyAtIFJ1biBmdW5jdGlvbiBpbiBpbmplY3Rpb24gY29udGV4dCBmb3IgYGNhbk1hdGNoYCBmdW5jdGlvbiB0byBpbmplY3QgZGVwZW5kZW5jaWVzLlxuICAgICAgICAvLyAtIFJ1biBmdW5jdGlvbiBpbiBhIHJlYWN0aXZlIGNvbnRleHQgdG8gdHJhY2sgc2lnbmFscy4gKGUuZy4sIHZpZXcncyBhY3RpdmUgc3RhdGUpLlxuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiBhY3Rpb24uY2FuTWF0Y2g/Lih0aGlzKSA/PyB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGFjdGl2YXRpb24gaW5zdGFudCB3aGVuIHRoaXMgcGFydCBpcyBhY3RpdmF0ZWQuXG4gICAqL1xuICBwcml2YXRlIHRvdWNoT25BY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlKCkpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGlvbkluc3RhbnQgPSB0aGlzLl9hY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyLm5vdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgYXV0b21hdGljIHN5bmNocm9uaXphdGlvbiBvZiB7QGxpbmsgV29ya2JlbmNoUGFydH0gb24gZXZlcnkgbGF5b3V0IGNoYW5nZS5cbiAgICpcbiAgICogSWYgdGhlIG9wZXJhdGlvbiBpcyBjYW5jZWxsZWQgKGUuZy4sIGR1ZSB0byBhIG5hdmlnYXRpb24gZmFpbHVyZSksIGl0IHJldmVydHMgdGhlIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxNb2RlbFVwZGF0ZXIoKTogdm9pZCB7XG4gICAgaW5qZWN0KFJvdXRlcikuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogRXZlbnQgfCBSb3V0ZXJFdmVudCk6IGV2ZW50IGlzIE5hdmlnYXRpb25TdGFydCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25Db250ZXh0ID0gdGhpcy5fd29ya2JlbmNoUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uQ29udGV4dCgpO1xuICAgICAgICBjb25zdCB7bGF5b3V0LCBwcmV2aW91c0xheW91dCwgbGF5b3V0RGlmZn0gPSBuYXZpZ2F0aW9uQ29udGV4dDtcblxuICAgICAgICBpZiAobGF5b3V0RGlmZi5yZW1vdmVkUGFydHMuaW5jbHVkZXModGhpcy5pZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlKGxheW91dCk7XG5cbiAgICAgICAgLy8gUmV2ZXJ0IGNoYW5nZSBpbiBjYXNlIHRoZSBuYXZpZ2F0aW9uIGZhaWxzLlxuICAgICAgICBpZiAocHJldmlvdXNMYXlvdXQ/Lmhhc1BhcnQodGhpcy5pZCkpIHtcbiAgICAgICAgICBuYXZpZ2F0aW9uQ29udGV4dC5yZWdpc3RlclVuZG9BY3Rpb24oKCkgPT4gdGhpcy5vbkxheW91dENoYW5nZShwcmV2aW91c0xheW91dCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3BhcnRFbnZpcm9ubWVudEluamVjdG9yLmRlc3Ryb3koKTtcbiAgICAvLyBJTVBPUlRBTlQ6IE9ubHkgZGV0YWNoIHRoZSBhY3RpdmUgdmlldywgbm90IGRlc3Ryb3kgaXQsIGJlY2F1c2Ugdmlld3MgYXJlIGV4cGxpY2l0bHkgZGVzdHJveWVkIHdoZW4gdmlldyBoYW5kbGVzIGFyZSByZW1vdmVkLlxuICAgIC8vIE90aGVyd2lzZSwgbW92aW5nIHRoZSBsYXN0IHZpZXcgdG8gYW5vdGhlciBwYXJ0IHdvdWxkIGZhaWwgYmVjYXVzZSB0aGUgdmlldyB3b3VsZCBhbHJlYWR5IGJlIGRlc3Ryb3llZC5cbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3SWQoKSkge1xuICAgICAgdGhpcy5fdmlld1JlZ2lzdHJ5LmdldCh0aGlzLmFjdGl2ZVZpZXdJZCgpISwge29yRWxzZTogbnVsbH0pPy5wb3J0YWwuZGV0YWNoKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHBzZXVkby10eXBlIGZvciB0aGUgYWN0dWFsIHtAbGluayBQYXJ0Q29tcG9uZW50fSB3aGljaCBtdXN0IG5vdCBiZSByZWZlcmVuY2VkIGluIG9yZGVyIHRvIGF2b2lkIGltcG9ydCBjeWNsZXMuXG4gKi9cbnR5cGUgUGFydENvbXBvbmVudCA9IGFueTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcHNldWRvLXR5cGUgZm9yIHRoZSBhY3R1YWwge0BsaW5rIE1haW5BcmVhTGF5b3V0Q29tcG9uZW50fSB3aGljaCBtdXN0IG5vdCBiZSByZWZlcmVuY2VkIGluIG9yZGVyIHRvIGF2b2lkIGltcG9ydCBjeWNsZXMuXG4gKi9cbnR5cGUgTWFpbkFyZWFMYXlvdXRDb21wb25lbnQgPSBhbnk7XG4iXX0=