@scion/workbench 18.0.0-beta.9 → 19.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/design/_workbench-view-global-styles.scss +0 -1
  2. package/fesm2022/scion-workbench.mjs +8556 -8622
  3. package/fesm2022/scion-workbench.mjs.map +1 -1
  4. package/lib/common/css-class.util.d.ts +5 -0
  5. package/lib/common/math.util.d.ts +7 -0
  6. package/lib/common/objects.util.d.ts +1 -1
  7. package/lib/dialog/workbench-dialog.component.d.ts +1 -2
  8. package/lib/layout/migration/model/workbench-layout-migration-v6.model.d.ts +35 -0
  9. package/lib/layout/migration/workbench-layout-migration-v6.service.d.ts +12 -0
  10. package/lib/layout/workbench-layout.model.d.ts +0 -1
  11. package/lib/layout/workbench-layout.service.d.ts +10 -12
  12. package/lib/layout/workench-layout-serializer.service.d.ts +1 -2
  13. package/lib/part/part-action-bar/part-action-bar.component.d.ts +2 -6
  14. package/lib/part/part-bar/part-bar.component.d.ts +66 -48
  15. package/lib/part/view-tab/view-tab.component.d.ts +3 -3
  16. package/lib/public_api.d.ts +0 -2
  17. package/lib/routing/routing.util.d.ts +2 -2
  18. package/lib/view/view-move-handler.service.d.ts +16 -14
  19. package/lib/view/view.component.d.ts +1 -2
  20. package/lib/view//311/265workbench-view.model.d.ts +1 -9
  21. package/lib/view-dnd/grid-drop-targets.util.d.ts +1 -1
  22. package/lib/view-dnd/view-drag.service.d.ts +72 -49
  23. package/lib/view-dnd/view-tab-drag-image-renderer.service.d.ts +11 -36
  24. package/package.json +8 -10
  25. package/esm2022/lib/activation-instant.provider.mjs +0 -29
  26. package/esm2022/lib/common/animation-frame.observable.mjs +0 -37
  27. package/esm2022/lib/common/asserts.util.mjs +0 -31
  28. package/esm2022/lib/common/class-list.mjs +0 -99
  29. package/esm2022/lib/common/coerce-observable.pipe.mjs +0 -28
  30. package/esm2022/lib/common/disposable.mjs +0 -11
  31. package/esm2022/lib/common/dom.util.mjs +0 -100
  32. package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +0 -32
  33. package/esm2022/lib/common/instanceof.pipe.mjs +0 -26
  34. package/esm2022/lib/common/map-coerce.pipe.mjs +0 -28
  35. package/esm2022/lib/common/null-if-empty.pipe.mjs +0 -38
  36. package/esm2022/lib/common/objects.util.mjs +0 -40
  37. package/esm2022/lib/common/observables.mjs +0 -72
  38. package/esm2022/lib/common/operators.mjs +0 -27
  39. package/esm2022/lib/common/public_api.mjs +0 -11
  40. package/esm2022/lib/common/stringify-error.util.mjs +0 -19
  41. package/esm2022/lib/common/throw-error.util.mjs +0 -16
  42. package/esm2022/lib/common/typeof.pipe.mjs +0 -26
  43. package/esm2022/lib/common/uid.util.mjs +0 -22
  44. package/esm2022/lib/common//311/265destroy-ref.mjs +0 -36
  45. package/esm2022/lib/communication/workbench-broadcast-channel.mjs +0 -38
  46. package/esm2022/lib/content-projection/content-as-overlay.component.mjs +0 -114
  47. package/esm2022/lib/content-projection/workbench-element-references.mjs +0 -32
  48. package/esm2022/lib/dialog/dialog-footer/dialog-action-filter.pipe.mjs +0 -26
  49. package/esm2022/lib/dialog/dialog-footer/dialog-footer.component.mjs +0 -34
  50. package/esm2022/lib/dialog/dialog-footer/workbench-dialog-action.directive.mjs +0 -51
  51. package/esm2022/lib/dialog/dialog-footer/workbench-dialog-footer.directive.mjs +0 -46
  52. package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +0 -33
  53. package/esm2022/lib/dialog/dialog-header/workbench-dialog-header.directive.mjs +0 -46
  54. package/esm2022/lib/dialog/movable.directive.mjs +0 -126
  55. package/esm2022/lib/dialog/public_api.mjs +0 -15
  56. package/esm2022/lib/dialog/resizable.directive.mjs +0 -392
  57. package/esm2022/lib/dialog/workbench-dialog.component.mjs +0 -250
  58. package/esm2022/lib/dialog/workbench-dialog.mjs +0 -79
  59. package/esm2022/lib/dialog/workbench-dialog.options.mjs +0 -11
  60. package/esm2022/lib/dialog/workbench-dialog.registry.mjs +0 -73
  61. package/esm2022/lib/dialog/workbench-dialog.service.mjs +0 -96
  62. package/esm2022/lib/dialog//311/265workbench-dialog.mjs +0 -310
  63. package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +0 -98
  64. package/esm2022/lib/executor/latest-task-executor.mjs +0 -55
  65. package/esm2022/lib/executor/single-task-executor.mjs +0 -72
  66. package/esm2022/lib/filter-field/filter-field.component.mjs +0 -130
  67. package/esm2022/lib/glass-pane/blockable.mjs +0 -11
  68. package/esm2022/lib/glass-pane/blocking.mjs +0 -11
  69. package/esm2022/lib/glass-pane/glass-pane.directive.mjs +0 -120
  70. package/esm2022/lib/layout/grid-element/grid-element.component.mjs +0 -111
  71. package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +0 -97
  72. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v2.model.mjs +0 -11
  73. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v3.model.mjs +0 -11
  74. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v4.model.mjs +0 -11
  75. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +0 -11
  76. package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +0 -117
  77. package/esm2022/lib/layout/migration/workbench-layout-migration-v4.service.mjs +0 -57
  78. package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +0 -67
  79. package/esm2022/lib/layout/public_api.mjs +0 -12
  80. package/esm2022/lib/layout/stringifier.mjs +0 -70
  81. package/esm2022/lib/layout/workbench-layout.component.mjs +0 -90
  82. package/esm2022/lib/layout/workbench-layout.factory.mjs +0 -24
  83. package/esm2022/lib/layout/workbench-layout.mjs +0 -16
  84. package/esm2022/lib/layout/workbench-layout.model.mjs +0 -62
  85. package/esm2022/lib/layout/workbench-layout.service.mjs +0 -68
  86. package/esm2022/lib/layout/workbench-layouts.util.mjs +0 -58
  87. package/esm2022/lib/layout/workench-layout-serializer.service.mjs +0 -109
  88. package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +0 -54
  89. package/esm2022/lib/layout//311/265workbench-layout.mjs +0 -876
  90. package/esm2022/lib/logging/console-appender.service.mjs +0 -46
  91. package/esm2022/lib/logging/index.mjs +0 -15
  92. package/esm2022/lib/logging/logger-names.mjs +0 -32
  93. package/esm2022/lib/logging/logger.mjs +0 -36
  94. package/esm2022/lib/logging/logging-support.mjs +0 -26
  95. package/esm2022/lib/logging/logging.model.mjs +0 -45
  96. package/esm2022/lib/logging/public_api.mjs +0 -12
  97. package/esm2022/lib/logging//311/265logger.mjs +0 -73
  98. package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +0 -69
  99. package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +0 -28
  100. package/esm2022/lib/message-box/public_api.mjs +0 -11
  101. package/esm2022/lib/message-box/workbench-message-box.component.mjs +0 -102
  102. package/esm2022/lib/message-box/workbench-message-box.options.mjs +0 -2
  103. package/esm2022/lib/message-box/workbench-message-box.service.mjs +0 -39
  104. package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +0 -45
  105. package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +0 -71
  106. package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +0 -126
  107. package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +0 -36
  108. package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +0 -84
  109. package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +0 -63
  110. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +0 -54
  111. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.mjs +0 -85
  112. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +0 -140
  113. package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +0 -133
  114. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +0 -113
  115. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +0 -43
  116. package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +0 -101
  117. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +0 -35
  118. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.mjs +0 -88
  119. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.mjs +0 -32
  120. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +0 -121
  121. package/esm2022/lib/microfrontend-platform/microfrontend-notification/microfrontend-notification-intent-handler.service.mjs +0 -45
  122. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +0 -39
  123. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +0 -120
  124. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +0 -55
  125. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +0 -19
  126. package/esm2022/lib/microfrontend-platform/microfrontend-platform-config-loader.mjs +0 -13
  127. package/esm2022/lib/microfrontend-platform/microfrontend-platform.config.mjs +0 -11
  128. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +0 -31
  129. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +0 -132
  130. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +0 -115
  131. package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +0 -21
  132. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +0 -112
  133. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +0 -313
  134. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-workbench-view.model.mjs +0 -23
  135. package/esm2022/lib/microfrontend-platform/public_api.mjs +0 -13
  136. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +0 -31
  137. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +0 -127
  138. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +0 -125
  139. package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +0 -32
  140. package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +0 -191
  141. package/esm2022/lib/migration/workbench-migration.mjs +0 -11
  142. package/esm2022/lib/migration/workbench-migrator.mjs +0 -38
  143. package/esm2022/lib/notification/notification-css-classes.pipe.mjs +0 -24
  144. package/esm2022/lib/notification/notification-list.component.mjs +0 -51
  145. package/esm2022/lib/notification/notification.component.mjs +0 -109
  146. package/esm2022/lib/notification/notification.config.mjs +0 -11
  147. package/esm2022/lib/notification/notification.mjs +0 -19
  148. package/esm2022/lib/notification/notification.service.mjs +0 -134
  149. package/esm2022/lib/notification/public_api.mjs +0 -12
  150. package/esm2022/lib/notification/text-notification.component.mjs +0 -23
  151. package/esm2022/lib/notification//311/265notification.mjs +0 -42
  152. package/esm2022/lib/page-not-found/page-not-found.component.mjs +0 -26
  153. package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +0 -31
  154. package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +0 -77
  155. package/esm2022/lib/part/part-bar/part-bar.component.mjs +0 -444
  156. package/esm2022/lib/part/part-portal.pipe.mjs +0 -35
  157. package/esm2022/lib/part/part.component.mjs +0 -135
  158. package/esm2022/lib/part/public_api.mjs +0 -13
  159. package/esm2022/lib/part/view-context-menu/accelerator-format.pipe.mjs +0 -31
  160. package/esm2022/lib/part/view-context-menu/text.component.mjs +0 -38
  161. package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +0 -89
  162. package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +0 -76
  163. package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +0 -340
  164. package/esm2022/lib/part/view-list/view-list.component.mjs +0 -117
  165. package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +0 -82
  166. package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +0 -60
  167. package/esm2022/lib/part/view-tab/view-tab.component.mjs +0 -218
  168. package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +0 -29
  169. package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +0 -81
  170. package/esm2022/lib/part/workbench-part-action.registry.mjs +0 -23
  171. package/esm2022/lib/part/workbench-part.model.mjs +0 -19
  172. package/esm2022/lib/part/workbench-part.registry.mjs +0 -23
  173. package/esm2022/lib/part//311/265workbench-part.model.mjs +0 -146
  174. package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v1.model.mjs +0 -11
  175. package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v2.model.mjs +0 -11
  176. package/esm2022/lib/perspective/migration/workbench-perspective-migration-v2.service.mjs +0 -57
  177. package/esm2022/lib/perspective/public_api.mjs +0 -11
  178. package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +0 -39
  179. package/esm2022/lib/perspective/workbench-perspective-storage.service.mjs +0 -72
  180. package/esm2022/lib/perspective/workbench-perspective-view-conflict-resolver.service.mjs +0 -50
  181. package/esm2022/lib/perspective/workbench-perspective.model.mjs +0 -2
  182. package/esm2022/lib/perspective/workbench-perspective.registry.mjs +0 -23
  183. package/esm2022/lib/perspective/workbench-perspective.service.mjs +0 -180
  184. package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +0 -62
  185. package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +0 -210
  186. package/esm2022/lib/popup/popup.component.mjs +0 -124
  187. package/esm2022/lib/popup/popup.config.mjs +0 -100
  188. package/esm2022/lib/popup/popup.origin.mjs +0 -11
  189. package/esm2022/lib/popup/popup.service.mjs +0 -339
  190. package/esm2022/lib/popup/public_api.mjs +0 -12
  191. package/esm2022/lib/portal/wb-component-portal.mjs +0 -130
  192. package/esm2022/lib/portal/workbench-portal-outlet.directive.mjs +0 -68
  193. package/esm2022/lib/public_api.mjs +0 -32
  194. package/esm2022/lib/registry/workbench-object-registry.mjs +0 -104
  195. package/esm2022/lib/routing/empty-outlet/empty-outlet.component.mjs +0 -31
  196. package/esm2022/lib/routing/public_api.mjs +0 -14
  197. package/esm2022/lib/routing/routing.model.mjs +0 -11
  198. package/esm2022/lib/routing/routing.util.mjs +0 -215
  199. package/esm2022/lib/routing/url-segment-matcher.mjs +0 -46
  200. package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +0 -110
  201. package/esm2022/lib/routing/workbench-dialog-differ.mjs +0 -51
  202. package/esm2022/lib/routing/workbench-layout-differ.mjs +0 -61
  203. package/esm2022/lib/routing/workbench-message-box-differ.mjs +0 -51
  204. package/esm2022/lib/routing/workbench-navigational-states.mjs +0 -33
  205. package/esm2022/lib/routing/workbench-popup-differ.mjs +0 -51
  206. package/esm2022/lib/routing/workbench-route-data.mjs +0 -39
  207. package/esm2022/lib/routing/workbench-route-guards.mjs +0 -57
  208. package/esm2022/lib/routing/workbench-router-link.directive.mjs +0 -124
  209. package/esm2022/lib/routing/workbench-router.service.mjs +0 -19
  210. package/esm2022/lib/routing/workbench-url-observer.service.mjs +0 -305
  211. package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +0 -58
  212. package/esm2022/lib/routing//311/265location.mjs +0 -70
  213. package/esm2022/lib/routing//311/265workbench-router.service.mjs +0 -359
  214. package/esm2022/lib/startup/public_api.mjs +0 -12
  215. package/esm2022/lib/startup/splash/splash.component.mjs +0 -24
  216. package/esm2022/lib/startup/workbench-initializer.mjs +0 -96
  217. package/esm2022/lib/startup/workbench-launcher.service.mjs +0 -173
  218. package/esm2022/lib/storage/public_api.mjs +0 -11
  219. package/esm2022/lib/storage/workbench-storage.mjs +0 -37
  220. package/esm2022/lib/testing/public_api.mjs +0 -12
  221. package/esm2022/lib/testing/workbench-testing.module.mjs +0 -49
  222. package/esm2022/lib/testing/workbench.provider.mjs +0 -60
  223. package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +0 -72
  224. package/esm2022/lib/view/public_api.mjs +0 -11
  225. package/esm2022/lib/view/view-context-provider.mjs +0 -31
  226. package/esm2022/lib/view/view-move-handler.service.mjs +0 -145
  227. package/esm2022/lib/view/view-portal.pipe.mjs +0 -33
  228. package/esm2022/lib/view/view.component.mjs +0 -128
  229. package/esm2022/lib/view/workbench-view.model.mjs +0 -12
  230. package/esm2022/lib/view/workbench-view.registry.mjs +0 -23
  231. package/esm2022/lib/view//311/265workbench-view.model.mjs +0 -375
  232. package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +0 -49
  233. package/esm2022/lib/view-dnd/requires-drop-zone.pipe.mjs +0 -58
  234. package/esm2022/lib/view-dnd/view-drag.service.mjs +0 -213
  235. package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +0 -89
  236. package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +0 -183
  237. package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +0 -224
  238. package/esm2022/lib/workbench-config.mjs +0 -15
  239. package/esm2022/lib/workbench-id.mjs +0 -21
  240. package/esm2022/lib/workbench.component.mjs +0 -146
  241. package/esm2022/lib/workbench.constants.mjs +0 -41
  242. package/esm2022/lib/workbench.model.mjs +0 -11
  243. package/esm2022/lib/workbench.module.mjs +0 -101
  244. package/esm2022/lib/workbench.provider.mjs +0 -111
  245. package/esm2022/lib/workbench.service.mjs +0 -29
  246. package/esm2022/lib//311/265workbench.service.mjs +0 -102
  247. package/esm2022/public-api.mjs +0 -14
  248. package/esm2022/scion-workbench.mjs +0 -5
  249. package/lib/common/animation-frame.observable.d.ts +0 -10
  250. package/lib/testing/public_api.d.ts +0 -2
  251. package/lib/testing/workbench-testing.module.d.ts +0 -40
  252. package/lib/testing/workbench.provider.d.ts +0 -31
  253. package/lib/workbench.module.d.ts +0 -65
@@ -1,82 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2023 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 { Component, computed, DestroyRef, ElementRef, HostListener, inject, Injector, NgZone } from '@angular/core';
11
- import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
12
- import { ComponentPortal } from '@angular/cdk/portal';
13
- import { ViewListComponent, ViewListComponentInputs } from '../view-list/view-list.component';
14
- import { WorkbenchPart } from '../workbench-part.model';
15
- import { observeIn } from '@scion/toolkit/operators';
16
- import { WORKBENCH_VIEW_REGISTRY } from '../../view/workbench-view.registry';
17
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
18
- import * as i0 from "@angular/core";
19
- export class ViewListButtonComponent {
20
- static { this.SOUTH = { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' }; }
21
- static { this.NORTH = { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' }; }
22
- constructor() {
23
- this._host = inject(ElementRef);
24
- this._overlay = inject(Overlay);
25
- this._injector = inject(Injector);
26
- this._zone = inject(NgZone);
27
- const part = inject(WorkbenchPart);
28
- const viewRegistry = inject(WORKBENCH_VIEW_REGISTRY);
29
- this.scrolledOutOfViewTabCount = computed(() => part.viewIds()
30
- .map(viewId => viewRegistry.get(viewId))
31
- .reduce((count, view) => view.scrolledIntoView() ? count : count + 1, 0));
32
- }
33
- onClick() {
34
- const positionStrategy = this._overlay.position()
35
- .flexibleConnectedTo(this._host)
36
- .withFlexibleDimensions(false)
37
- .withPositions([ViewListButtonComponent.SOUTH, ViewListButtonComponent.NORTH]);
38
- this._overlayRef = this._overlay.create(new OverlayConfig({
39
- scrollStrategy: this._overlay.scrollStrategies.noop(),
40
- disposeOnNavigation: true,
41
- positionStrategy,
42
- }));
43
- const componentRef = this._overlayRef.attach(new ComponentPortal(ViewListComponent, null, Injector.create({
44
- parent: this._injector,
45
- providers: [{ provide: OverlayRef, useValue: this._overlayRef }],
46
- })));
47
- this.updatePositionInputOnPositionChange(componentRef, positionStrategy);
48
- }
49
- /**
50
- * Updates 'position' input of {@link ViewListComponent} when the overlay position changes.
51
- */
52
- updatePositionInputOnPositionChange(componentRef, positionStrategy) {
53
- positionStrategy.positionChanges
54
- .pipe(
55
- // Ensure running inside Angular as Angular CDK emits position changes outside the Angular zone.
56
- // Otherwise, Angular would not invoke the `ngOnChanges` lifecycle hook when updating component input.
57
- observeIn(fn => this._zone.run(fn)), takeUntilDestroyed(componentRef.injector.get(DestroyRef)))
58
- .subscribe(positionChange => {
59
- switch (positionChange.connectionPair) {
60
- case ViewListButtonComponent.NORTH:
61
- componentRef.setInput(ViewListComponentInputs.POSITION, 'north');
62
- break;
63
- case ViewListButtonComponent.SOUTH:
64
- componentRef.setInput(ViewListComponentInputs.POSITION, 'south');
65
- break;
66
- }
67
- });
68
- }
69
- ngOnDestroy() {
70
- this._overlayRef?.dispose();
71
- }
72
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ViewListButtonComponent, isStandalone: true, selector: "wb-view-list-button", host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: "<span class=\"chevron scion-workbench-icons\">\n chevron_down\n</span>\n@if (scrolledOutOfViewTabCount(); as count) {\n <span class=\"count\">{{count}}</span>\n}\n", styles: [":host{display:flex;flex-direction:column;cursor:pointer;padding:.5em;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}:host>span.chevron{flex:none}:host>span.count{flex:none;font-size:var(--sci-workbench-part-hidden-tab-count-size)}@container style(--sci-workbench-part-hidden-tab-count-size: 0){:host>span.count{display:none}}\n"] }); }
74
- }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListButtonComponent, decorators: [{
76
- type: Component,
77
- args: [{ selector: 'wb-view-list-button', standalone: true, template: "<span class=\"chevron scion-workbench-icons\">\n chevron_down\n</span>\n@if (scrolledOutOfViewTabCount(); as count) {\n <span class=\"count\">{{count}}</span>\n}\n", styles: [":host{display:flex;flex-direction:column;cursor:pointer;padding:.5em;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}:host>span.chevron{flex:none}:host>span.count{flex:none;font-size:var(--sci-workbench-part-hidden-tab-count-size)}@container style(--sci-workbench-part-hidden-tab-count-size: 0){:host>span.count{display:none}}\n"] }]
78
- }], ctorParameters: () => [], propDecorators: { onClick: [{
79
- type: HostListener,
80
- args: ['click']
81
- }] } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1saXN0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctbGlzdC1idXR0b24vdmlldy1saXN0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctbGlzdC1idXR0b24vdmlldy1saXN0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQWdCLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbkosT0FBTyxFQUF1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDOztBQVE5RCxNQUFNLE9BQU8sdUJBQXVCO2FBRVYsVUFBSyxHQUFzQixFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEs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LEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2pFLE1BQU07Z0JBQ1IsS0FBSyx1QkFBdUIsQ0FBQyxLQUFLO29CQUNoQyxZQUFZLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakUsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs4R0FwRVUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsOEhDekJwQyx1S0FNQTs7MkZEbUJhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsSUFBSTt3REF5QlQsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5qZWN0b3IsIE5nWm9uZSwgT25EZXN0cm95LCBTaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb25uZWN0ZWRQb3NpdGlvbiwgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LCBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge0NvbXBvbmVudFBvcnRhbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1ZpZXdMaXN0Q29tcG9uZW50LCBWaWV3TGlzdENvbXBvbmVudElucHV0c30gZnJvbSAnLi4vdmlldy1saXN0L3ZpZXctbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtXb3JrYmVuY2hQYXJ0fSBmcm9tICcuLi93b3JrYmVuY2gtcGFydC5tb2RlbCc7XG5pbXBvcnQge29ic2VydmVJbn0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvb3BlcmF0b3JzJztcbmltcG9ydCB7V09SS0JFTkNIX1ZJRVdfUkVHSVNUUll9IGZyb20gJy4uLy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcucmVnaXN0cnknO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2Itdmlldy1saXN0LWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3LWxpc3QtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmlldy1saXN0LWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3TGlzdEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU09VVEg6IENvbm5lY3RlZFBvc2l0aW9uID0ge29yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ3RvcCd9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOT1JUSDogQ29ubmVjdGVkUG9zaXRpb24gPSB7b3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnYm90dG9tJ307XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaG9zdCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IHVuZGVmaW5lZDtcbiAgLyoqIE51bWJlciBvZiB2aWV3cyB0aGF0IGFyZSBzY3JvbGxlZCBvdXQgb2YgdGhlIHRhYiBiYXIuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxlZE91dE9mVmlld1RhYkNvdW50OiBTaWduYWw8bnVtYmVyPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0ID0gaW5qZWN0KFdvcmtiZW5jaFBhcnQpO1xuICAgIGNvbnN0IHZpZXdSZWdpc3RyeSA9IGluamVjdChXT1JLQkVOQ0hfVklFV19SRUdJU1RSWSk7XG4gICAgdGhpcy5zY3JvbGxlZE91dE9mVmlld1RhYkNvdW50ID0gY29tcHV0ZWQoKCkgPT4gcGFydC52aWV3SWRzKClcbiAgICAgIC5tYXAodmlld0lkID0+IHZpZXdSZWdpc3RyeS5nZXQodmlld0lkKSlcbiAgICAgIC5yZWR1Y2UoKGNvdW50LCB2aWV3KSA9PiB2aWV3LnNjcm9sbGVkSW50b1ZpZXcoKSA/IGNvdW50IDogY291bnQgKyAxLCAwKSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHB1YmxpYyBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2hvc3QpXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgIC53aXRoUG9zaXRpb25zKFtWaWV3TGlzdEJ1dHRvbkNvbXBvbmVudC5TT1VUSCwgVmlld0xpc3RCdXR0b25Db21wb25lbnQuTk9SVEhdKTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZShuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoVmlld0xpc3RDb21wb25lbnQsIG51bGwsIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE92ZXJsYXlSZWYsIHVzZVZhbHVlOiB0aGlzLl9vdmVybGF5UmVmfV0sXG4gICAgfSkpKTtcblxuICAgIHRoaXMudXBkYXRlUG9zaXRpb25JbnB1dE9uUG9zaXRpb25DaGFuZ2UoY29tcG9uZW50UmVmLCBwb3NpdGlvblN0cmF0ZWd5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzICdwb3NpdGlvbicgaW5wdXQgb2Yge0BsaW5rIFZpZXdMaXN0Q29tcG9uZW50fSB3aGVuIHRoZSBvdmVybGF5IHBvc2l0aW9uIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uSW5wdXRPblBvc2l0aW9uQ2hhbmdlKGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFZpZXdMaXN0Q29tcG9uZW50PiwgcG9zaXRpb25TdHJhdGVneTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5KTogdm9pZCB7XG4gICAgcG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBFbnN1cmUgcnVubmluZyBpbnNpZGUgQW5ndWxhciBhcyBBbmd1bGFyIENESyBlbWl0cyBwb3NpdGlvbiBjaGFuZ2VzIG91dHNpZGUgdGhlIEFuZ3VsYXIgem9uZS5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBBbmd1bGFyIHdvdWxkIG5vdCBpbnZva2UgdGhlIGBuZ09uQ2hhbmdlc2AgbGlmZWN5Y2xlIGhvb2sgd2hlbiB1cGRhdGluZyBjb21wb25lbnQgaW5wdXQuXG4gICAgICAgIG9ic2VydmVJbihmbiA9PiB0aGlzLl96b25lLnJ1bihmbikpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoY29tcG9uZW50UmVmLmluamVjdG9yLmdldChEZXN0cm95UmVmKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHBvc2l0aW9uQ2hhbmdlID0+IHtcbiAgICAgICAgc3dpdGNoIChwb3NpdGlvbkNoYW5nZS5jb25uZWN0aW9uUGFpcikge1xuICAgICAgICAgIGNhc2UgVmlld0xpc3RCdXR0b25Db21wb25lbnQuTk9SVEg6XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoVmlld0xpc3RDb21wb25lbnRJbnB1dHMuUE9TSVRJT04sICdub3J0aCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBWaWV3TGlzdEJ1dHRvbkNvbXBvbmVudC5TT1VUSDpcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dChWaWV3TGlzdENvbXBvbmVudElucHV0cy5QT1NJVElPTiwgJ3NvdXRoJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICB9XG59XG4iLCI8c3BhbiBjbGFzcz1cImNoZXZyb24gc2Npb24td29ya2JlbmNoLWljb25zXCI+XG4gIGNoZXZyb25fZG93blxuPC9zcGFuPlxuQGlmIChzY3JvbGxlZE91dE9mVmlld1RhYkNvdW50KCk7IGFzIGNvdW50KSB7XG4gIDxzcGFuIGNsYXNzPVwiY291bnRcIj57e2NvdW50fX08L3NwYW4+XG59XG4iXX0=
@@ -1,60 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2023 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 { ChangeDetectionStrategy, Component, HostBinding, inject, Injector, Input } from '@angular/core';
11
- import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
12
- import { WORKBENCH_VIEW_REGISTRY } from '../../view/workbench-view.registry';
13
- import { ViewTabContentComponent } from '../view-tab-content/view-tab-content.component';
14
- import { WorkbenchConfig } from '../../workbench-config';
15
- import { WorkbenchView } from '../../view/workbench-view.model';
16
- import { VIEW_TAB_RENDERING_CONTEXT } from '../../workbench.constants';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "@angular/cdk/portal";
19
- export class ViewListItemComponent {
20
- constructor() {
21
- this._viewRegistry = inject(WORKBENCH_VIEW_REGISTRY);
22
- this._workbenchConfig = inject(WorkbenchConfig);
23
- this._injector = inject(Injector);
24
- }
25
- set viewId(viewId) {
26
- this.view = this._viewRegistry.get(viewId);
27
- this.viewTabContentPortal = this.createViewTabContentPortal();
28
- }
29
- get active() {
30
- return this.view.active();
31
- }
32
- onClose() {
33
- this.view.close().then();
34
- }
35
- createViewTabContentPortal() {
36
- const componentType = this._workbenchConfig.viewTabComponent || ViewTabContentComponent;
37
- return new ComponentPortal(componentType, null, Injector.create({
38
- parent: this._injector,
39
- providers: [
40
- { provide: WorkbenchView, useValue: this.view },
41
- { provide: VIEW_TAB_RENDERING_CONTEXT, useValue: 'list-item' },
42
- ],
43
- }));
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ViewListItemComponent, isStandalone: true, selector: "wb-view-list-item", inputs: { viewId: "viewId" }, host: { properties: { "class.active": "this.active" } }, ngImport: i0, template: "<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"/>\n</div>\n\n@if (view.closable()) {\n <button class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose()\">\n close\n </button>\n}\n", styles: [":host{display:flex;align-items:center;padding:.6em 1em;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;gap:1em}:host.active{color:var(--sci-color-accent)}:host.active:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background-color:var(--sci-color-accent)}:host>div.content{flex:auto;display:grid;position:relative}:host>button.close{all:unset;flex:none;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);opacity:.75}:host>button.close:hover{opacity:1;background-color:var(--sci-color-background-elevation-hover)}:host:hover>button.close{visibility:visible}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
47
- }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListItemComponent, decorators: [{
49
- type: Component,
50
- args: [{ selector: 'wb-view-list-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
51
- PortalModule,
52
- ], template: "<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"/>\n</div>\n\n@if (view.closable()) {\n <button class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose()\">\n close\n </button>\n}\n", styles: [":host{display:flex;align-items:center;padding:.6em 1em;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;gap:1em}:host.active{color:var(--sci-color-accent)}:host.active:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background-color:var(--sci-color-accent)}:host>div.content{flex:auto;display:grid;position:relative}:host>button.close{all:unset;flex:none;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);opacity:.75}:host>button.close:hover{opacity:1;background-color:var(--sci-color-background-elevation-hover)}:host:hover>button.close{visibility:visible}\n"] }]
53
- }], propDecorators: { viewId: [{
54
- type: Input,
55
- args: [{ required: true }]
56
- }], active: [{
57
- type: HostBinding,
58
- args: ['class.active']
59
- }] } });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvcGFydC92aWV3LWxpc3QtaXRlbS92aWV3LWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctbGlzdC1pdGVtL3ZpZXctbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN2RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFTLGFBQWEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQywwQkFBMEIsRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBWTlGLE1BQU0sT0FBTyxxQkFBcUI7SUFWbEM7UUFZbUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsY0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQThCL0M7SUF6QkMsSUFDVyxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFDVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsQ0FBQztRQUN4RixPQUFPLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM5RCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDdEIsU0FBUyxFQUFFO2dCQUNULEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQztnQkFDN0MsRUFBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLFdBQTZDLEVBQUM7YUFDL0Y7U0FDRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7OEdBakNVLHFCQUFxQjtrR0FBckIscUJBQXFCLG9LQzdCbEMsbVBBVUEsNHJCRGdCSSxZQUFZOzsyRkFHSCxxQkFBcUI7a0JBVmpDLFNBQVM7K0JBQ0UsbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7cUJBQ2I7OEJBWVUsTUFBTTtzQkFEaEIsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBT1osTUFBTTtzQkFEaEIsV0FBVzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIzIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBpbmplY3QsIEluamVjdG9yLCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbXBvbmVudFBvcnRhbCwgUG9ydGFsTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7ybVXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L8m1d29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtXT1JLQkVOQ0hfVklFV19SRUdJU1RSWX0gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5yZWdpc3RyeSc7XG5pbXBvcnQge1ZpZXdUYWJDb250ZW50Q29tcG9uZW50fSBmcm9tICcuLi92aWV3LXRhYi1jb250ZW50L3ZpZXctdGFiLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7V29ya2JlbmNoQ29uZmlnfSBmcm9tICcuLi8uLi93b3JrYmVuY2gtY29uZmlnJztcbmltcG9ydCB7Vmlld0lkLCBXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7VklFV19UQUJfUkVOREVSSU5HX0NPTlRFWFQsIFZpZXdUYWJSZW5kZXJpbmdDb250ZXh0fSBmcm9tICcuLi8uLi93b3JrYmVuY2guY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2Itdmlldy1saXN0LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92aWV3LWxpc3QtaXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFBvcnRhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmlld0xpc3RJdGVtQ29tcG9uZW50IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3UmVnaXN0cnkgPSBpbmplY3QoV09SS0JFTkNIX1ZJRVdfUkVHSVNUUlkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrYmVuY2hDb25maWcgPSBpbmplY3QoV29ya2JlbmNoQ29uZmlnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHB1YmxpYyB2aWV3ITogybVXb3JrYmVuY2hWaWV3O1xuICBwdWJsaWMgdmlld1RhYkNvbnRlbnRQb3J0YWwhOiBDb21wb25lbnRQb3J0YWw8dW5rbm93bj47XG5cbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pXG4gIHB1YmxpYyBzZXQgdmlld0lkKHZpZXdJZDogVmlld0lkKSB7XG4gICAgdGhpcy52aWV3ID0gdGhpcy5fdmlld1JlZ2lzdHJ5LmdldCh2aWV3SWQpO1xuICAgIHRoaXMudmlld1RhYkNvbnRlbnRQb3J0YWwgPSB0aGlzLmNyZWF0ZVZpZXdUYWJDb250ZW50UG9ydGFsKCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZScpXG4gIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXcuYWN0aXZlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcuY2xvc2UoKS50aGVuKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVZpZXdUYWJDb250ZW50UG9ydGFsKCk6IENvbXBvbmVudFBvcnRhbDx1bmtub3duPiB7XG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMuX3dvcmtiZW5jaENvbmZpZy52aWV3VGFiQ29tcG9uZW50IHx8IFZpZXdUYWJDb250ZW50Q29tcG9uZW50O1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudFR5cGUsIG51bGwsIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtwcm92aWRlOiBXb3JrYmVuY2hWaWV3LCB1c2VWYWx1ZTogdGhpcy52aWV3fSxcbiAgICAgICAge3Byb3ZpZGU6IFZJRVdfVEFCX1JFTkRFUklOR19DT05URVhULCB1c2VWYWx1ZTogJ2xpc3QtaXRlbScgc2F0aXNmaWVzIFZpZXdUYWJSZW5kZXJpbmdDb250ZXh0fSxcbiAgICAgIF0sXG4gICAgfSkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICA8bmctY29udGFpbmVyICpjZGtQb3J0YWxPdXRsZXQ9XCJ2aWV3VGFiQ29udGVudFBvcnRhbFwiLz5cbjwvZGl2PlxuXG5AaWYgKHZpZXcuY2xvc2FibGUoKSkge1xuICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UgZTJlLWNsb3NlIHNjaW9uLXdvcmtiZW5jaC1pY29uc1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuICAgIGNsb3NlXG4gIDwvYnV0dG9uPlxufVxuIl19
@@ -1,218 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2022 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 { Component, computed, effect, ElementRef, HostBinding, HostListener, inject, Injector, input, NgZone } from '@angular/core';
11
- import { fromEvent, merge, withLatestFrom } from 'rxjs';
12
- import { WORKBENCH_VIEW_REGISTRY } from '../../view/workbench-view.registry';
13
- import { map, switchMap } from 'rxjs/operators';
14
- import { VIEW_DRAG_TRANSFER_TYPE, ViewDragService } from '../../view-dnd/view-drag.service';
15
- import { createElement } from '../../common/dom.util';
16
- import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
17
- import { VIEW_TAB_RENDERING_CONTEXT } from '../../workbench.constants';
18
- import { WorkbenchConfig } from '../../workbench-config';
19
- import { ViewTabContentComponent } from '../view-tab-content/view-tab-content.component';
20
- import { ViewMenuService } from '../view-context-menu/view-menu.service';
21
- import { WorkbenchView } from '../../view/workbench-view.model';
22
- import { ɵWorkbenchRouter } from '../../routing/ɵworkbench-router.service';
23
- import { subscribeIn } from '@scion/toolkit/operators';
24
- import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
25
- import { WORKBENCH_ID } from '../../workbench-id';
26
- import { NgClass } from '@angular/common';
27
- import * as i0 from "@angular/core";
28
- import * as i1 from "@angular/common";
29
- import * as i2 from "@angular/cdk/portal";
30
- /**
31
- * IMPORTANT: HTML and CSS also used by {@link ViewTabDragImageComponent}.
32
- *
33
- * @see ViewTabDragImageComponent
34
- */
35
- export class ViewTabComponent {
36
- /**
37
- * Indicates if dragging a view tab over this view tab's tabbar.
38
- */
39
- get isDragOverTabbar() {
40
- return this._viewDragService.isDragOverTabbar === this.view().part().id;
41
- }
42
- get viewId() {
43
- return this.view().id;
44
- }
45
- constructor() {
46
- this._workbenchId = inject(WORKBENCH_ID);
47
- this._workbenchConfig = inject(WorkbenchConfig);
48
- this._viewRegistry = inject(WORKBENCH_VIEW_REGISTRY);
49
- this._router = inject(ɵWorkbenchRouter);
50
- this._viewDragService = inject(ViewDragService);
51
- this._viewContextMenuService = inject(ViewMenuService);
52
- this._injector = inject(Injector);
53
- this.host = inject((ElementRef)).nativeElement;
54
- this.view = input.required({ alias: 'viewId', transform: ((viewId) => this._viewRegistry.get(viewId)) });
55
- this.draggable = true;
56
- this.tabindex = -1; // make the view focusable to install view menu accelerators
57
- this.installMaximizeListener();
58
- this.addHostCssClasses();
59
- this.installViewMenuItemAccelerators();
60
- this.viewTabContentPortal = this.createViewTabContentPortal();
61
- }
62
- get active() {
63
- return this.view().active();
64
- }
65
- get partActive() {
66
- return this.view().part().active();
67
- }
68
- get dirty() {
69
- return this.view().dirty();
70
- }
71
- onClick() {
72
- this.view().activate().then();
73
- }
74
- onClose(event) {
75
- event.stopPropagation(); // prevent the view from being activated
76
- this.view().close().then();
77
- }
78
- onMousedown(event) {
79
- if (event.buttons === AUXILARY_MOUSE_BUTTON) {
80
- this.view().close().then();
81
- event.stopPropagation();
82
- event.preventDefault();
83
- }
84
- }
85
- onContextmenu(event) {
86
- this._viewContextMenuService.showMenu({ x: event.clientX, y: event.clientY }, this.view().id).then();
87
- event.stopPropagation();
88
- event.preventDefault();
89
- }
90
- onDragStart(event) {
91
- const view = this.view();
92
- view.activate().then(() => {
93
- if (!event.dataTransfer) {
94
- return;
95
- }
96
- event.dataTransfer.effectAllowed = 'move';
97
- event.dataTransfer.setData(VIEW_DRAG_TRANSFER_TYPE, view.id);
98
- // Use an invisible <div> as the native drag image because the effective drag image is rendered by {ViewTabDragImageRenderer}.
99
- event.dataTransfer.setDragImage(createElement('div', { style: { display: 'none' } }), 0, 0);
100
- this._viewDragService.setViewDragData({
101
- viewId: view.id,
102
- viewTitle: view.title(),
103
- viewHeading: view.heading(),
104
- viewDirty: view.dirty(),
105
- viewClosable: view.closable(),
106
- viewUrlSegments: view.urlSegments(),
107
- alternativeViewId: view.alternativeId,
108
- navigationHint: view.navigationHint(),
109
- navigationData: view.navigationData(),
110
- partId: view.part().id,
111
- viewTabPointerOffsetX: event.offsetX,
112
- viewTabPointerOffsetY: event.offsetY,
113
- viewTabWidth: this.host.getBoundingClientRect().width,
114
- viewTabHeight: this.host.getBoundingClientRect().height,
115
- workbenchId: this._workbenchId,
116
- classList: view.classList.asMap(),
117
- });
118
- });
119
- }
120
- onDragEnd(event) {
121
- // Ensure this view stays activated if the user cancels the drag operation. But, do not push the navigation into browsing history stack.
122
- if (event.dataTransfer?.dropEffect === 'none') {
123
- this.view().activate({ skipLocationChange: true }).then();
124
- }
125
- this._viewDragService.unsetViewDragData();
126
- }
127
- /**
128
- * Listens for 'dblclick' events to maximize or minimize the main area.
129
- *
130
- * Note that the listener is not activated until the mouse is moved. Otherwise, closing successive
131
- * views (if they have different tab widths) could result in unintended maximization or minimization.
132
- */
133
- installMaximizeListener() {
134
- const zone = inject(NgZone);
135
- const enabled$ = merge(fromEvent(this.host, 'mouseenter'), fromEvent(this.host, 'mousemove'), fromEvent(this.host, 'mouseleave'))
136
- .pipe(subscribeIn(fn => zone.runOutsideAngular(fn)), map(event => event.type === 'mousemove'));
137
- fromEvent(this.host, 'dblclick')
138
- .pipe(withLatestFrom(enabled$), takeUntilDestroyed())
139
- .subscribe(([event, enabled]) => {
140
- event.stopPropagation(); // prevent `PartBarComponent` handling the dblclick event which would undo maximization/minimization
141
- if (enabled && this.view().part().isInMainArea) {
142
- this._router.navigate(layout => layout.toggleMaximized()).then();
143
- }
144
- });
145
- }
146
- addHostCssClasses() {
147
- const ngClass = inject(NgClass);
148
- effect(() => ngClass.ngClass = this.view().classList.asList());
149
- }
150
- installViewMenuItemAccelerators() {
151
- toObservable(this.view)
152
- .pipe(switchMap(view => this._viewContextMenuService.installMenuItemAccelerators$(this.host, view)), takeUntilDestroyed())
153
- .subscribe();
154
- }
155
- createViewTabContentPortal() {
156
- return computed(() => {
157
- const componentType = this._workbenchConfig.viewTabComponent || ViewTabContentComponent;
158
- return new ComponentPortal(componentType, null, Injector.create({
159
- parent: this._injector,
160
- providers: [
161
- { provide: WorkbenchView, useValue: this.view() },
162
- { provide: VIEW_TAB_RENDERING_CONTEXT, useValue: 'tab' },
163
- ],
164
- }));
165
- });
166
- }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ViewTabComponent, isStandalone: true, selector: "wb-view-tab", inputs: { view: { classPropertyName: "view", publicName: "viewId", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()", "mousedown": "onMousedown($event)", "contextmenu": "onContextmenu($event)", "dragstart": "onDragStart($event)", "dragend": "onDragEnd($event)" }, properties: { "attr.draggable": "this.draggable", "attr.tabindex": "this.tabindex", "class.drag-over-tabbar": "this.isDragOverTabbar", "attr.data-viewid": "this.viewId", "class.active": "this.active", "class.part-active": "this.partActive", "class.e2e-dirty": "this.dirty" } }, hostDirectives: [{ directive: i1.NgClass }], 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"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
169
- }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabComponent, decorators: [{
171
- type: Component,
172
- args: [{ selector: 'wb-view-tab', standalone: true, imports: [
173
- PortalModule,
174
- ], hostDirectives: [
175
- NgClass,
176
- ], 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"] }]
177
- }], ctorParameters: () => [], propDecorators: { draggable: [{
178
- type: HostBinding,
179
- args: ['attr.draggable']
180
- }], tabindex: [{
181
- type: HostBinding,
182
- args: ['attr.tabindex']
183
- }], isDragOverTabbar: [{
184
- type: HostBinding,
185
- args: ['class.drag-over-tabbar']
186
- }], viewId: [{
187
- type: HostBinding,
188
- args: ['attr.data-viewid']
189
- }], active: [{
190
- type: HostBinding,
191
- args: ['class.active']
192
- }], partActive: [{
193
- type: HostBinding,
194
- args: ['class.part-active']
195
- }], dirty: [{
196
- type: HostBinding,
197
- args: ['class.e2e-dirty']
198
- }], onClick: [{
199
- type: HostListener,
200
- args: ['click']
201
- }], onMousedown: [{
202
- type: HostListener,
203
- args: ['mousedown', ['$event']]
204
- }], onContextmenu: [{
205
- type: HostListener,
206
- args: ['contextmenu', ['$event']]
207
- }], onDragStart: [{
208
- type: HostListener,
209
- args: ['dragstart', ['$event']]
210
- }], onDragEnd: [{
211
- type: HostListener,
212
- args: ['dragend', ['$event']]
213
- }] } });
214
- /**
215
- * Indicates that the auxilary mouse button is pressed (usually the mouse wheel button or middle button).
216
- */
217
- const AUXILARY_MOUSE_BUTTON = 4;
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy10YWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvcGFydC92aWV3LXRhYi92aWV3LXRhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiL3ZpZXctdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsZUFBZSxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDMUYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFDLDBCQUEwQixFQUEwQixNQUFNLDJCQUEyQixDQUFDO0FBQzlGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN2RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1B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TztxQkFDUjt3REFpQk0sU0FBUztzQkFEZixXQUFXO3VCQUFDLGdCQUFnQjtnQkFJdEIsUUFBUTtzQkFEZCxXQUFXO3VCQUFDLGVBQWU7Z0JBT2pCLGdCQUFnQjtzQkFEMUIsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBTTFCLE1BQU07c0JBRGhCLFdBQVc7dUJBQUMsa0JBQWtCO2dCQWFwQixNQUFNO3NCQURoQixXQUFXO3VCQUFDLGNBQWM7Z0JBTWhCLFVBQVU7c0JBRHBCLFdBQVc7dUJBQUMsbUJBQW1CO2dCQU1yQixLQUFLO3NCQURmLFdBQVc7dUJBQUMsaUJBQWlCO2dCQU12QixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTztnQkFXZCxXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVOUIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWhDLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9DOUIsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFnRXJDOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjIgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBpbmplY3QsIEluamVjdG9yLCBpbnB1dCwgTmdab25lLCBTaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtmcm9tRXZlbnQsIG1lcmdlLCB3aXRoTGF0ZXN0RnJvbX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1dPUktCRU5DSF9WSUVXX1JFR0lTVFJZfSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3LnJlZ2lzdHJ5JztcbmltcG9ydCB7bWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VklFV19EUkFHX1RSQU5TRkVSX1RZUEUsIFZpZXdEcmFnU2VydmljZX0gZnJvbSAnLi4vLi4vdmlldy1kbmQvdmlldy1kcmFnLnNlcnZpY2UnO1xuaW1wb3J0IHtjcmVhdGVFbGVtZW50fSBmcm9tICcuLi8uLi9jb21tb24vZG9tLnV0aWwnO1xuaW1wb3J0IHtDb21wb25lbnRQb3J0YWwsIFBvcnRhbE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1ZJRVdfVEFCX1JFTkRFUklOR19DT05URVhULCBWaWV3VGFiUmVuZGVyaW5nQ29udGV4dH0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLmNvbnN0YW50cyc7XG5pbXBvcnQge1dvcmtiZW5jaENvbmZpZ30gZnJvbSAnLi4vLi4vd29ya2JlbmNoLWNvbmZpZyc7XG5pbXBvcnQge1ZpZXdUYWJDb250ZW50Q29tcG9uZW50fSBmcm9tICcuLi92aWV3LXRhYi1jb250ZW50L3ZpZXctdGFiLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7Vmlld01lbnVTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRleHQtbWVudS92aWV3LW1lbnUuc2VydmljZSc7XG5pbXBvcnQge1ZpZXdJZCwgV29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge8m1V29ya2JlbmNoUm91dGVyfSBmcm9tICcuLi8uLi9yb3V0aW5nL8m1d29ya2JlbmNoLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7c3Vic2NyaWJlSW59IGZyb20gJ0BzY2lvbi90b29sa2l0L29wZXJhdG9ycyc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1dPUktCRU5DSF9JRH0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLWlkJztcbmltcG9ydCB7TmdDbGFzc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBJTVBPUlRBTlQ6IEhUTUwgYW5kIENTUyBhbHNvIHVzZWQgYnkge0BsaW5rIFZpZXdUYWJEcmFnSW1hZ2VDb21wb25lbnR9LlxuICpcbiAqIEBzZWUgVmlld1RhYkRyYWdJbWFnZUNvbXBvbmVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3Yi12aWV3LXRhYicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3LXRhYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXctdGFiLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBQb3J0YWxNb2R1bGUsXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgTmdDbGFzcyxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmlld1RhYkNvbXBvbmVudCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya2JlbmNoSWQgPSBpbmplY3QoV09SS0JFTkNIX0lEKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya2JlbmNoQ29uZmlnID0gaW5qZWN0KFdvcmtiZW5jaENvbmZpZyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdSZWdpc3RyeSA9IGluamVjdChXT1JLQkVOQ0hfVklFV19SRUdJU1RSWSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlciA9IGluamVjdCjJtVdvcmtiZW5jaFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdEcmFnU2VydmljZSA9IGluamVjdChWaWV3RHJhZ1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGV4dE1lbnVTZXJ2aWNlID0gaW5qZWN0KFZpZXdNZW51U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaG9zdCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50PikubmF0aXZlRWxlbWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHZpZXcgPSBpbnB1dC5yZXF1aXJlZCh7YWxpYXM6ICd2aWV3SWQnLCB0cmFuc2Zvcm06ICgodmlld0lkOiBWaWV3SWQpID0+IHRoaXMuX3ZpZXdSZWdpc3RyeS5nZXQodmlld0lkKSl9KTtcbiAgcHVibGljIHJlYWRvbmx5IHZpZXdUYWJDb250ZW50UG9ydGFsOiBTaWduYWw8Q29tcG9uZW50UG9ydGFsPHVua25vd24+PjtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZHJhZ2dhYmxlJylcbiAgcHVibGljIGRyYWdnYWJsZSA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgcHVibGljIHRhYmluZGV4ID0gLTE7IC8vIG1ha2UgdGhlIHZpZXcgZm9jdXNhYmxlIHRvIGluc3RhbGwgdmlldyBtZW51IGFjY2VsZXJhdG9yc1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgZHJhZ2dpbmcgYSB2aWV3IHRhYiBvdmVyIHRoaXMgdmlldyB0YWIncyB0YWJiYXIuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRyYWctb3Zlci10YWJiYXInKVxuICBwdWJsaWMgZ2V0IGlzRHJhZ092ZXJUYWJiYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdEcmFnU2VydmljZS5pc0RyYWdPdmVyVGFiYmFyID09PSB0aGlzLnZpZXcoKS5wYXJ0KCkuaWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS12aWV3aWQnKVxuICBwdWJsaWMgZ2V0IHZpZXdJZCgpOiBWaWV3SWQge1xuICAgIHJldHVybiB0aGlzLnZpZXcoKS5pZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5zdGFsbE1heGltaXplTGlzdGVuZXIoKTtcbiAgICB0aGlzLmFkZEhvc3RDc3NDbGFzc2VzKCk7XG4gICAgdGhpcy5pbnN0YWxsVmlld01lbnVJdGVtQWNjZWxlcmF0b3JzKCk7XG4gICAgdGhpcy52aWV3VGFiQ29udGVudFBvcnRhbCA9IHRoaXMuY3JlYXRlVmlld1RhYkNvbnRlbnRQb3J0YWwoKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJylcbiAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlldygpLmFjdGl2ZSgpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYXJ0LWFjdGl2ZScpXG4gIHB1YmxpYyBnZXQgcGFydEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aWV3KCkucGFydCgpLmFjdGl2ZSgpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5lMmUtZGlydHknKVxuICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXcoKS5kaXJ0eSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcoKS5hY3RpdmF0ZSgpLnRoZW4oKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBwcmV2ZW50IHRoZSB2aWV3IGZyb20gYmVpbmcgYWN0aXZhdGVkXG4gICAgdGhpcy52aWV3KCkuY2xvc2UoKS50aGVuKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25Nb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYnV0dG9ucyA9PT0gQVVYSUxBUllfTU9VU0VfQlVUVE9OKSB7XG4gICAgICB0aGlzLnZpZXcoKS5jbG9zZSgpLnRoZW4oKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkNvbnRleHRtZW51KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fdmlld0NvbnRleHRNZW51U2VydmljZS5zaG93TWVudSh7eDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WX0sIHRoaXMudmlldygpLmlkKS50aGVuKCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdzdGFydCcsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkRyYWdTdGFydChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmlldyA9IHRoaXMudmlldygpO1xuXG4gICAgdmlldy5hY3RpdmF0ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKFZJRVdfRFJBR19UUkFOU0ZFUl9UWVBFLCB2aWV3LmlkKTtcbiAgICAgIC8vIFVzZSBhbiBpbnZpc2libGUgPGRpdj4gYXMgdGhlIG5hdGl2ZSBkcmFnIGltYWdlIGJlY2F1c2UgdGhlIGVmZmVjdGl2ZSBkcmFnIGltYWdlIGlzIHJlbmRlcmVkIGJ5IHtWaWV3VGFiRHJhZ0ltYWdlUmVuZGVyZXJ9LlxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShjcmVhdGVFbGVtZW50KCdkaXYnLCB7c3R5bGU6IHtkaXNwbGF5OiAnbm9uZSd9fSksIDAsIDApO1xuXG4gICAgICB0aGlzLl92aWV3RHJhZ1NlcnZpY2Uuc2V0Vmlld0RyYWdEYXRhKHtcbiAgICAgICAgdmlld0lkOiB2aWV3LmlkLFxuICAgICAgICB2aWV3VGl0bGU6IHZpZXcudGl0bGUoKSxcbiAgICAgICAgdmlld0hlYWRpbmc6IHZpZXcuaGVhZGluZygpLFxuICAgICAgICB2aWV3RGlydHk6IHZpZXcuZGlydHkoKSxcbiAgICAgICAgdmlld0Nsb3NhYmxlOiB2aWV3LmNsb3NhYmxlKCksXG4gICAgICAgIHZpZXdVcmxTZWdtZW50czogdmlldy51cmxTZWdtZW50cygpLFxuICAgICAgICBhbHRlcm5hdGl2ZVZpZXdJZDogdmlldy5hbHRlcm5hdGl2ZUlkLFxuICAgICAgICBuYXZpZ2F0aW9uSGludDogdmlldy5uYXZpZ2F0aW9uSGludCgpLFxuICAgICAgICBuYXZpZ2F0aW9uRGF0YTogdmlldy5uYXZpZ2F0aW9uRGF0YSgpLFxuICAgICAgICBwYXJ0SWQ6IHZpZXcucGFydCgpLmlkLFxuICAgICAgICB2aWV3VGFiUG9pbnRlck9mZnNldFg6IGV2ZW50Lm9mZnNldFgsXG4gICAgICAgIHZpZXdUYWJQb2ludGVyT2Zmc2V0WTogZXZlbnQub2Zmc2V0WSxcbiAgICAgICAgdmlld1RhYldpZHRoOiB0aGlzLmhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsXG4gICAgICAgIHZpZXdUYWJIZWlnaHQ6IHRoaXMuaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsXG4gICAgICAgIHdvcmtiZW5jaElkOiB0aGlzLl93b3JrYmVuY2hJZCxcbiAgICAgICAgY2xhc3NMaXN0OiB2aWV3LmNsYXNzTGlzdC5hc01hcCgpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcmFnZW5kJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uRHJhZ0VuZChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIHRoaXMgdmlldyBzdGF5cyBhY3RpdmF0ZWQgaWYgdGhlIHVzZXIgY2FuY2VscyB0aGUgZHJhZyBvcGVyYXRpb24uIEJ1dCwgZG8gbm90IHB1c2ggdGhlIG5hdmlnYXRpb24gaW50byBicm93c2luZyBoaXN0b3J5IHN0YWNrLlxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXI/LmRyb3BFZmZlY3QgPT09ICdub25lJykge1xuICAgICAgdGhpcy52aWV3KCkuYWN0aXZhdGUoe3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0pLnRoZW4oKTtcbiAgICB9XG4gICAgdGhpcy5fdmlld0RyYWdTZXJ2aWNlLnVuc2V0Vmlld0RyYWdEYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyBmb3IgJ2RibGNsaWNrJyBldmVudHMgdG8gbWF4aW1pemUgb3IgbWluaW1pemUgdGhlIG1haW4gYXJlYS5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBsaXN0ZW5lciBpcyBub3QgYWN0aXZhdGVkIHVudGlsIHRoZSBtb3VzZSBpcyBtb3ZlZC4gT3RoZXJ3aXNlLCBjbG9zaW5nIHN1Y2Nlc3NpdmVcbiAgICogdmlld3MgKGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgdGFiIHdpZHRocykgY291bGQgcmVzdWx0IGluIHVuaW50ZW5kZWQgbWF4aW1pemF0aW9uIG9yIG1pbmltaXphdGlvbi5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbE1heGltaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIGNvbnN0IGVuYWJsZWQkID0gbWVyZ2UoZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZWVudGVyJyksIGZyb21FdmVudDxFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJyksIGZyb21FdmVudDxFdmVudD4odGhpcy5ob3N0LCAnbW91c2VsZWF2ZScpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN1YnNjcmliZUluKGZuID0+IHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZm4pKSxcbiAgICAgICAgbWFwKGV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnKSwgLy8gdGhlICdtb3VzZW1vdmUnIGV2ZW50IGFybXMgdGhlIGxpc3RlbmVyXG4gICAgICApO1xuXG4gICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmhvc3QsICdkYmxjbGljaycpXG4gICAgICAucGlwZShcbiAgICAgICAgd2l0aExhdGVzdEZyb20oZW5hYmxlZCQpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtldmVudCwgZW5hYmxlZF0pID0+IHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHByZXZlbnQgYFBhcnRCYXJDb21wb25lbnRgIGhhbmRsaW5nIHRoZSBkYmxjbGljayBldmVudCB3aGljaCB3b3VsZCB1bmRvIG1heGltaXphdGlvbi9taW5pbWl6YXRpb25cbiAgICAgICAgaWYgKGVuYWJsZWQgJiYgdGhpcy52aWV3KCkucGFydCgpLmlzSW5NYWluQXJlYSkge1xuICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShsYXlvdXQgPT4gbGF5b3V0LnRvZ2dsZU1heGltaXplZCgpKS50aGVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRIb3N0Q3NzQ2xhc3NlcygpOiB2b2lkIHtcbiAgICBjb25zdCBuZ0NsYXNzID0gaW5qZWN0KE5nQ2xhc3MpO1xuICAgIGVmZmVjdCgoKSA9PiBuZ0NsYXNzLm5nQ2xhc3MgPSB0aGlzLnZpZXcoKS5jbGFzc0xpc3QuYXNMaXN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsVmlld01lbnVJdGVtQWNjZWxlcmF0b3JzKCk6IHZvaWQge1xuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLnZpZXcpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHZpZXcgPT4gdGhpcy5fdmlld0NvbnRleHRNZW51U2VydmljZS5pbnN0YWxsTWVudUl0ZW1BY2NlbGVyYXRvcnMkKHRoaXMuaG9zdCwgdmlldykpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmlld1RhYkNvbnRlbnRQb3J0YWwoKTogU2lnbmFsPENvbXBvbmVudFBvcnRhbDx1bmtub3duPj4ge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5fd29ya2JlbmNoQ29uZmlnLnZpZXdUYWJDb21wb25lbnQgfHwgVmlld1RhYkNvbnRlbnRDb21wb25lbnQ7XG4gICAgICByZXR1cm4gbmV3IENvbXBvbmVudFBvcnRhbChjb21wb25lbnRUeXBlLCBudWxsLCBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yLFxuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICB7cHJvdmlkZTogV29ya2JlbmNoVmlldywgdXNlVmFsdWU6IHRoaXMudmlldygpfSxcbiAgICAgICAgICB7cHJvdmlkZTogVklFV19UQUJfUkVOREVSSU5HX0NPTlRFWFQsIHVzZVZhbHVlOiAndGFiJyBzYXRpc2ZpZXMgVmlld1RhYlJlbmRlcmluZ0NvbnRleHR9LFxuICAgICAgICBdLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIGF1eGlsYXJ5IG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkICh1c3VhbGx5IHRoZSBtb3VzZSB3aGVlbCBidXR0b24gb3IgbWlkZGxlIGJ1dHRvbikuXG4gKi9cbmNvbnN0IEFVWElMQVJZX01PVVNFX0JVVFRPTiA9IDQ7XG4iLCI8IS0tIElNUE9SVEFOVDogVEhJUyBIVE1MIEZJTEUgSVMgQUxTTyBVU0VEIEJZIGBWaWV3VGFiRHJhZ0ltYWdlQ29tcG9uZW50YCAtLT5cblxuQGlmICh2aWV3KCkuYWN0aXZlKCkpIHtcbiAgPGRpdiBjbGFzcz1cImNvcm5lci1yYWRpdXMgc3RhcnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlXCI+PC9kaXY+XG4gIDwvZGl2PlxufVxuXG48ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICA8bmctY29udGFpbmVyICpjZGtQb3J0YWxPdXRsZXQ9XCJ2aWV3VGFiQ29udGVudFBvcnRhbCgpXCIvPlxuPC9kaXY+XG5cbkBpZiAodmlldygpLmFjdGl2ZSgpKSB7XG4gIDxkaXYgY2xhc3M9XCJjb3JuZXItcmFkaXVzIGVuZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVcIj48L2Rpdj5cbiAgPC9kaXY+XG59XG5cbkBpZiAodmlldygpLmNsb3NhYmxlKCkpIHtcbiAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlIGUyZS1jbG9zZSBzY2lvbi13b3JrYmVuY2gtaWNvbnNcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlKCRldmVudClcIj5cbiAgICBjbG9zZVxuICA8L2J1dHRvbj5cbn1cbiJdfQ==
@@ -1,29 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2022 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 { Component, HostBinding, inject } from '@angular/core';
11
- import { VIEW_TAB_RENDERING_CONTEXT } from '../../workbench.constants';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "../../view/workbench-view.model";
14
- export class ViewTabContentComponent {
15
- constructor(view) {
16
- this.view = view;
17
- this.context = inject(VIEW_TAB_RENDERING_CONTEXT);
18
- }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabContentComponent, deps: [{ token: i1.WorkbenchView }], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ViewTabContentComponent, isStandalone: true, selector: "wb-view-tab-content", host: { properties: { "attr.context": "this.context" } }, ngImport: i0, template: "<span class=\"title e2e-title\">\n @if (view.dirty()) {\n <span class=\"scion-workbench-icons dirty e2e-dirty\">dirty</span>\n }\n {{view.title()}}\n</span>\n\n@if (view.heading()) {\n <span class=\"heading e2e-heading\">\n {{view.heading()}}\n </span>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:.25em;overflow:hidden}:host>span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-weight:400;font-size:1em}:host>span.title>span.dirty{padding-right:.2em}:host>span.heading{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:.9em;font-weight:300}:host[context=tab] span.title,:host[context=drag-image] span.title{margin-right:1em}@container viewtab (height < 3.5rem){:host>span.heading{display:none}}\n"] }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabContentComponent, decorators: [{
23
- type: Component,
24
- args: [{ selector: 'wb-view-tab-content', standalone: true, template: "<span class=\"title e2e-title\">\n @if (view.dirty()) {\n <span class=\"scion-workbench-icons dirty e2e-dirty\">dirty</span>\n }\n {{view.title()}}\n</span>\n\n@if (view.heading()) {\n <span class=\"heading e2e-heading\">\n {{view.heading()}}\n </span>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:.25em;overflow:hidden}:host>span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-weight:400;font-size:1em}:host>span.title>span.dirty{padding-right:.2em}:host>span.heading{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:.9em;font-weight:300}:host[context=tab] span.title,:host[context=drag-image] span.title{margin-right:1em}@container viewtab (height < 3.5rem){:host>span.heading{display:none}}\n"] }]
25
- }], ctorParameters: () => [{ type: i1.WorkbenchView }], propDecorators: { context: [{
26
- type: HostBinding,
27
- args: ['attr.context']
28
- }] } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy10YWItY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiLWNvbnRlbnQvdmlldy10YWItY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiLWNvbnRlbnQvdmlldy10YWItY29udGVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUMsMEJBQTBCLEVBQTBCLE1BQU0sMkJBQTJCLENBQUM7OztBQVE5RixNQUFNLE9BQU8sdUJBQXVCO0lBS2xDLFlBQW1CLElBQW1CO1FBQW5CLFNBQUksR0FBSixJQUFJLENBQWU7UUFGdEIsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsMEJBQTBCLENBQUMsQ0FBQztJQUd0RixDQUFDOzhHQU5VLHVCQUF1QjtrR0FBdkIsdUJBQXVCLHlJQ3BCcEMsOFFBWUE7OzJGRFFhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsSUFBSTtrRkFLQSxPQUFPO3NCQUR0QixXQUFXO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjIgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge1ZJRVdfVEFCX1JFTkRFUklOR19DT05URVhULCBWaWV3VGFiUmVuZGVyaW5nQ29udGV4dH0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLmNvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3diLXZpZXctdGFiLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy10YWItY29udGVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXctdGFiLWNvbnRlbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVmlld1RhYkNvbnRlbnRDb21wb25lbnQge1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZXh0JylcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3Q8Vmlld1RhYlJlbmRlcmluZ0NvbnRleHQ+KFZJRVdfVEFCX1JFTkRFUklOR19DT05URVhUKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlldzogV29ya2JlbmNoVmlldykge1xuICB9XG59XG4iLCI8c3BhbiBjbGFzcz1cInRpdGxlIGUyZS10aXRsZVwiPlxuICBAaWYgKHZpZXcuZGlydHkoKSkge1xuICAgIDxzcGFuIGNsYXNzPVwic2Npb24td29ya2JlbmNoLWljb25zIGRpcnR5IGUyZS1kaXJ0eVwiPmRpcnR5PC9zcGFuPlxuICB9XG4gIHt7dmlldy50aXRsZSgpfX1cbjwvc3Bhbj5cblxuQGlmICh2aWV3LmhlYWRpbmcoKSkge1xuICA8c3BhbiBjbGFzcz1cImhlYWRpbmcgZTJlLWhlYWRpbmdcIj5cbiAgICB7e3ZpZXcuaGVhZGluZygpfX1cbiAgPC9zcGFuPlxufVxuIl19
@@ -1,81 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2022 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 { Component, HostBinding, inject, signal } from '@angular/core';
11
- import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
12
- import { ViewTabContentComponent } from '../view-tab-content/view-tab-content.component';
13
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
- import { DOCUMENT } from '@angular/common';
15
- import { WorkbenchView } from '../../view/workbench-view.model';
16
- import * as i0 from "@angular/core";
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
- /**
21
- * @see ViewTabComponent
22
- */
23
- export class ViewTabDragImageComponent {
24
- constructor(_workbenchConfig, _viewDragService, _injector) {
25
- this._workbenchConfig = _workbenchConfig;
26
- this._viewDragService = _viewDragService;
27
- this._injector = _injector;
28
- this.view = signal(inject(WorkbenchView));
29
- this.active = true;
30
- this.partActive = true;
31
- /**
32
- * Indicates if dragging this view tab over a tabbar.
33
- */
34
- this.isDragOverTabbar = false;
35
- /**
36
- * Indicates if dragging this view tab over a tabbar located in the peripheral area.
37
- */
38
- this.isDragOverPeripheralTabbar = false;
39
- this.installDragOverTabbarDetector();
40
- this.viewTabContentPortal = signal(this.createViewTabContentPortal());
41
- }
42
- onClose(..._) {
43
- throw Error('[UnsupportedOperationError]');
44
- }
45
- createViewTabContentPortal() {
46
- const componentType = this._workbenchConfig.viewTabComponent || ViewTabContentComponent;
47
- return new ComponentPortal(componentType, null, this._injector);
48
- }
49
- installDragOverTabbarDetector() {
50
- const documentRoot = inject(DOCUMENT).documentElement;
51
- this._viewDragService.tabbarDragOver$
52
- .pipe(takeUntilDestroyed())
53
- .subscribe(partId => {
54
- // Compute if dragging this view tab over a tabbar.
55
- this.isDragOverTabbar = partId !== null;
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;
58
- });
59
- }
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
- }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageComponent, decorators: [{
64
- type: Component,
65
- args: [{ selector: 'wb-view-tab-drag-image', standalone: true, imports: [
66
- PortalModule,
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: [{
69
- type: HostBinding,
70
- args: ['class.active']
71
- }], partActive: [{
72
- type: HostBinding,
73
- args: ['class.part-active']
74
- }], isDragOverTabbar: [{
75
- type: HostBinding,
76
- args: ['class.drag-over-tabbar']
77
- }], isDragOverPeripheralTabbar: [{
78
- type: HostBinding,
79
- args: ['class.drag-over-peripheral-tabbar']
80
- }] } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy10YWItZHJhZy1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiLWRyYWctaW1hZ2Uvdmlldy10YWItZHJhZy1pbWFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctdGFiL3ZpZXctdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFZLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRWxFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUNBQWlDLENBQUM7Ozs7O0FBRTlEOztHQUVHO0FBYUgsTUFBTSxPQUFPLHlCQUF5QjtJQXVCcEMsWUFBb0IsZ0JBQWlDLEVBQ2pDLGdCQUFpQyxFQUNqQyxTQUFtQjtRQUZuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQXZCdkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUk5QyxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBR2QsZUFBVSxHQUFHLElBQUksQ0FBQztRQUV6Qjs7V0FFRztRQUVJLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUVoQzs7V0FFRztRQUVJLCtCQUEwQixHQUFHLEtBQUssQ0FBQztRQUt4QyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFHLENBQVk7UUFDNUIsTUFBTSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSx1QkFBdUIsQ0FBQztRQUN4RixPQUFPLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFXLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTthQUNsQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLEtBQUssSUFBSSxDQUFDO1lBQ3hDLGtGQUFrRjtZQUNsRixJQUFJLENBQUMsMEJBQTBCLEdBQUcsTUFBTSxLQUFLLElBQUksSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLDhEQUE4RCxNQUFNLG9CQUFvQixDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3JMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FqRFUseUJBQXlCO2tHQUF6Qix5QkFBeUIsOFNDbEN0QywraUJBd0JBLDB4R0RPSSxZQUFZOzsyRkFHSCx5QkFBeUI7a0JBWnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBTXRCLElBQUksV0FDUDt3QkFDUCxZQUFZO3FCQUNiO3lJQVFNLE1BQU07c0JBRFosV0FBVzt1QkFBQyxjQUFjO2dCQUlwQixVQUFVO3NCQURoQixXQUFXO3VCQUFDLG1CQUFtQjtnQkFPekIsZ0JBQWdCO3NCQUR0QixXQUFXO3VCQUFDLHdCQUF3QjtnQkFPOUIsMEJBQTBCO3NCQURoQyxXQUFXO3VCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBpbmplY3QsIEluamVjdG9yLCBzaWduYWwsIFNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1ZpZXdEcmFnU2VydmljZX0gZnJvbSAnLi4vLi4vdmlldy1kbmQvdmlldy1kcmFnLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wb25lbnRQb3J0YWwsIFBvcnRhbE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1dvcmtiZW5jaENvbmZpZ30gZnJvbSAnLi4vLi4vd29ya2JlbmNoLWNvbmZpZyc7XG5pbXBvcnQge1ZpZXdUYWJDb250ZW50Q29tcG9uZW50fSBmcm9tICcuLi92aWV3LXRhYi1jb250ZW50L3ZpZXctdGFiLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcblxuLyoqXG4gKiBAc2VlIFZpZXdUYWJDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2Itdmlldy10YWItZHJhZy1pbWFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi4vdmlldy10YWIvdmlldy10YWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vdmlldy10YWIvdmlldy10YWIuY29tcG9uZW50LnNjc3MnLFxuICAgICcuL3ZpZXctdGFiLWRyYWctaW1hZ2UucGFydGlhbC5jb21wb25lbnQuc2NzcycsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBQb3J0YWxNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdUYWJEcmFnSW1hZ2VDb21wb25lbnQge1xuXG4gIHB1YmxpYyByZWFkb25seSB2aWV3ID0gc2lnbmFsKGluamVjdChXb3JrYmVuY2hWaWV3KSk7XG4gIHB1YmxpYyByZWFkb25seSB2aWV3VGFiQ29udGVudFBvcnRhbDogU2lnbmFsPENvbXBvbmVudFBvcnRhbDx1bmtub3duPj47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICBwdWJsaWMgYWN0aXZlID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhcnQtYWN0aXZlJylcbiAgcHVibGljIHBhcnRBY3RpdmUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgZHJhZ2dpbmcgdGhpcyB2aWV3IHRhYiBvdmVyIGEgdGFiYmFyLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcmFnLW92ZXItdGFiYmFyJylcbiAgcHVibGljIGlzRHJhZ092ZXJUYWJiYXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGRyYWdnaW5nIHRoaXMgdmlldyB0YWIgb3ZlciBhIHRhYmJhciBsb2NhdGVkIGluIHRoZSBwZXJpcGhlcmFsIGFyZWEuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRyYWctb3Zlci1wZXJpcGhlcmFsLXRhYmJhcicpXG4gIHB1YmxpYyBpc0RyYWdPdmVyUGVyaXBoZXJhbFRhYmJhciA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3dvcmtiZW5jaENvbmZpZzogV29ya2JlbmNoQ29uZmlnLFxuICAgICAgICAgICAgICBwcml2YXRlIF92aWV3RHJhZ1NlcnZpY2U6IFZpZXdEcmFnU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5pbnN0YWxsRHJhZ092ZXJUYWJiYXJEZXRlY3RvcigpO1xuICAgIHRoaXMudmlld1RhYkNvbnRlbnRQb3J0YWwgPSBzaWduYWwodGhpcy5jcmVhdGVWaWV3VGFiQ29udGVudFBvcnRhbCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlKC4uLl86IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRocm93IEVycm9yKCdbVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcl0nKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmlld1RhYkNvbnRlbnRQb3J0YWwoKTogQ29tcG9uZW50UG9ydGFsPHVua25vd24+IHtcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5fd29ya2JlbmNoQ29uZmlnLnZpZXdUYWJDb21wb25lbnQgfHwgVmlld1RhYkNvbnRlbnRDb21wb25lbnQ7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRQb3J0YWwoY29tcG9uZW50VHlwZSwgbnVsbCwgdGhpcy5faW5qZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsRHJhZ092ZXJUYWJiYXJEZXRlY3RvcigpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudFJvb3QgPSBpbmplY3Q8RG9jdW1lbnQ+KERPQ1VNRU5UKS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdGhpcy5fdmlld0RyYWdTZXJ2aWNlLnRhYmJhckRyYWdPdmVyJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKHBhcnRJZCA9PiB7XG4gICAgICAgIC8vIENvbXB1dGUgaWYgZHJhZ2dpbmcgdGhpcyB2aWV3IHRhYiBvdmVyIGEgdGFiYmFyLlxuICAgICAgICB0aGlzLmlzRHJhZ092ZXJUYWJiYXIgPSBwYXJ0SWQgIT09IG51bGw7XG4gICAgICAgIC8vIENvbXB1dGUgaWYgZHJhZ2dpbmcgdGhpcyB2aWV3IHRhYiBvdmVyIGEgdGFiYmFyIGxvY2F0ZWQgaW4gdGhlIHBlcmlwaGVyYWwgYXJlYS5cbiAgICAgICAgdGhpcy5pc0RyYWdPdmVyUGVyaXBoZXJhbFRhYmJhciA9IHBhcnRJZCAhPT0gbnVsbCAmJiBkb2N1bWVudFJvb3QucXVlcnlTZWxlY3Rvcihgd2Itd29ya2JlbmNoOmhhcyh3Yi1tYWluLWFyZWEtbGF5b3V0KSB3Yi1wYXJ0W2RhdGEtcGFydGlkPVwiJHtwYXJ0SWR9XCJdOm5vdCgubWFpbi1hcmVhKWApICE9PSBudWxsO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjwhLS0gSU1QT1JUQU5UOiBUSElTIEhUTUwgRklMRSBJUyBBTFNPIFVTRUQgQlkgYFZpZXdUYWJEcmFnSW1hZ2VDb21wb25lbnRgIC0tPlxuXG5AaWYgKHZpZXcoKS5hY3RpdmUoKSkge1xuICA8ZGl2IGNsYXNzPVwiY29ybmVyLXJhZGl1cyBzdGFydFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVcIj48L2Rpdj5cbiAgPC9kaXY+XG59XG5cbjxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gIDxuZy1jb250YWluZXIgKmNka1BvcnRhbE91dGxldD1cInZpZXdUYWJDb250ZW50UG9ydGFsKClcIi8+XG48L2Rpdj5cblxuQGlmICh2aWV3KCkuYWN0aXZlKCkpIHtcbiAgPGRpdiBjbGFzcz1cImNvcm5lci1yYWRpdXMgZW5kXCI+XG4gICAgPGRpdiBjbGFzcz1cImNpcmNsZVwiPjwvZGl2PlxuICA8L2Rpdj5cbn1cblxuQGlmICh2aWV3KCkuY2xvc2FibGUoKSkge1xuICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UgZTJlLWNsb3NlIHNjaW9uLXdvcmtiZW5jaC1pY29uc1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoJGV2ZW50KVwiPlxuICAgIGNsb3NlXG4gIDwvYnV0dG9uPlxufVxuIl19