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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/_index.scss +7 -5
  2. package/design/_workbench-global-styles.scss +18 -0
  3. package/design/_workbench-icon-font.scss +1 -1
  4. package/design/_workbench-popup-global-styles.scss +1 -1
  5. package/design/{_workbench-view-drag-image-global-styles.scss → _workbench-view-global-styles.scss} +1 -2
  6. package/esm2022/lib/common/class-list.mjs +67 -29
  7. package/esm2022/lib/common/math.util.mjs +16 -0
  8. package/esm2022/lib/common/objects.util.mjs +7 -1
  9. package/esm2022/lib/common/operators.mjs +1 -12
  10. package/esm2022/lib/common/uid.util.mjs +22 -0
  11. package/esm2022/lib/content-projection/content-as-overlay.component.mjs +85 -28
  12. package/esm2022/lib/content-projection/workbench-element-references.mjs +32 -0
  13. package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +3 -8
  14. package/esm2022/lib/dialog/movable.directive.mjs +3 -3
  15. package/esm2022/lib/dialog/resizable.directive.mjs +3 -3
  16. package/esm2022/lib/dialog/workbench-dialog.component.mjs +25 -23
  17. package/esm2022/lib/dialog/workbench-dialog.mjs +61 -1
  18. package/esm2022/lib/dialog//311/265workbench-dialog.mjs +98 -60
  19. package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +26 -23
  20. package/esm2022/lib/executor/latest-task-executor.mjs +55 -0
  21. package/esm2022/lib/executor/single-task-executor.mjs +9 -19
  22. package/esm2022/lib/filter-field/filter-field.component.mjs +5 -5
  23. package/esm2022/lib/layout/grid-element/grid-element.component.mjs +8 -18
  24. package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +18 -21
  25. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +11 -0
  26. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v6.model.mjs +11 -0
  27. package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +4 -4
  28. package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +67 -0
  29. package/esm2022/lib/layout/migration/workbench-layout-migration-v6.service.mjs +59 -0
  30. package/esm2022/lib/layout/stringifier.mjs +70 -0
  31. package/esm2022/lib/layout/workbench-layout.component.mjs +18 -22
  32. package/esm2022/lib/layout/workbench-layout.mjs +1 -1
  33. package/esm2022/lib/layout/workbench-layout.model.mjs +1 -1
  34. package/esm2022/lib/layout/workbench-layout.service.mjs +26 -24
  35. package/esm2022/lib/layout/workbench-layouts.util.mjs +1 -9
  36. package/esm2022/lib/layout/workench-layout-serializer.service.mjs +19 -27
  37. package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +3 -2
  38. package/esm2022/lib/layout//311/265workbench-layout.mjs +73 -62
  39. package/esm2022/lib/logging/logging-support.mjs +7 -13
  40. package/esm2022/lib/logging//311/265logger.mjs +10 -10
  41. package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +7 -6
  42. package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +3 -3
  43. package/esm2022/lib/message-box/workbench-message-box.component.mjs +2 -2
  44. package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +3 -2
  45. package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +22 -6
  46. package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +28 -21
  47. package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +3 -3
  48. package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +11 -1
  49. package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +63 -0
  50. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +5 -4
  51. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +6 -10
  52. package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +18 -9
  53. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +7 -6
  54. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +3 -3
  55. package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +15 -13
  56. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +3 -2
  57. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +6 -11
  58. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +39 -0
  59. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +120 -0
  60. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +55 -0
  61. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +19 -0
  62. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +4 -3
  63. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +11 -12
  64. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +12 -28
  65. package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +3 -3
  66. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +11 -27
  67. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +91 -71
  68. package/esm2022/lib/microfrontend-platform/public_api.mjs +2 -1
  69. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +5 -4
  70. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +18 -16
  71. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +30 -8
  72. package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +32 -0
  73. package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +26 -8
  74. package/esm2022/lib/notification/notification-list.component.mjs +4 -8
  75. package/esm2022/lib/notification/notification.component.mjs +4 -5
  76. package/esm2022/lib/notification/notification.service.mjs +5 -4
  77. package/esm2022/lib/page-not-found/page-not-found.component.mjs +5 -7
  78. package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +11 -19
  79. package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +4 -4
  80. package/esm2022/lib/part/part-bar/part-bar.component.mjs +333 -264
  81. package/esm2022/lib/part/part-portal.pipe.mjs +8 -8
  82. package/esm2022/lib/part/part.component.mjs +33 -42
  83. package/esm2022/lib/part/view-context-menu/text.component.mjs +16 -12
  84. package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +4 -6
  85. package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +2 -2
  86. package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +48 -49
  87. package/esm2022/lib/part/view-list/view-list.component.mjs +41 -48
  88. package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +22 -26
  89. package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +15 -17
  90. package/esm2022/lib/part/view-tab/view-tab.component.mjs +99 -110
  91. package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +3 -4
  92. package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +16 -17
  93. package/esm2022/lib/part/workbench-part-action.registry.mjs +18 -42
  94. package/esm2022/lib/part/workbench-part.model.mjs +10 -1
  95. package/esm2022/lib/part/workbench-part.registry.mjs +11 -45
  96. package/esm2022/lib/part//311/265workbench-part.model.mjs +71 -55
  97. package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +3 -3
  98. package/esm2022/lib/perspective/workbench-perspective.model.mjs +1 -1
  99. package/esm2022/lib/perspective/workbench-perspective.registry.mjs +11 -43
  100. package/esm2022/lib/perspective/workbench-perspective.service.mjs +71 -62
  101. package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +2 -2
  102. package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +62 -47
  103. package/esm2022/lib/popup/popup.component.mjs +3 -3
  104. package/esm2022/lib/popup/popup.config.mjs +27 -25
  105. package/esm2022/lib/popup/popup.service.mjs +169 -174
  106. package/esm2022/lib/portal/wb-component-portal.mjs +18 -17
  107. package/esm2022/lib/public_api.mjs +1 -1
  108. package/esm2022/lib/registry/workbench-object-registry.mjs +38 -17
  109. package/esm2022/lib/routing/public_api.mjs +2 -2
  110. package/esm2022/lib/routing/routing.model.mjs +1 -1
  111. package/esm2022/lib/routing/routing.util.mjs +215 -0
  112. package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +110 -0
  113. package/esm2022/lib/routing/workbench-dialog-differ.mjs +3 -3
  114. package/esm2022/lib/routing/workbench-layout-differ.mjs +3 -10
  115. package/esm2022/lib/routing/workbench-message-box-differ.mjs +3 -3
  116. package/esm2022/lib/routing/workbench-navigational-states.mjs +2 -2
  117. package/esm2022/lib/routing/workbench-popup-differ.mjs +3 -3
  118. package/esm2022/lib/routing/workbench-route-guards.mjs +57 -0
  119. package/esm2022/lib/routing/workbench-url-observer.service.mjs +140 -148
  120. package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +58 -0
  121. package/esm2022/lib/routing//311/265workbench-router.service.mjs +119 -74
  122. package/esm2022/lib/startup/splash/splash.component.mjs +3 -3
  123. package/esm2022/lib/startup/workbench-launcher.service.mjs +22 -10
  124. package/esm2022/lib/testing/workbench.provider.mjs +2 -2
  125. package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +15 -19
  126. package/esm2022/lib/view/public_api.mjs +1 -2
  127. package/esm2022/lib/view/view-move-handler.service.mjs +71 -56
  128. package/esm2022/lib/view/view-portal.pipe.mjs +7 -7
  129. package/esm2022/lib/view/view.component.mjs +54 -42
  130. package/esm2022/lib/view/workbench-view.model.mjs +1 -1
  131. package/esm2022/lib/view/workbench-view.registry.mjs +11 -45
  132. package/esm2022/lib/view//311/265workbench-view.model.mjs +183 -153
  133. package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +2 -2
  134. package/esm2022/lib/view-dnd/view-drag.service.mjs +87 -71
  135. package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +6 -6
  136. package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +6 -6
  137. package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +43 -56
  138. package/esm2022/lib/workbench-config.mjs +2 -2
  139. package/esm2022/lib/workbench-id.mjs +3 -3
  140. package/esm2022/lib/workbench.component.mjs +66 -54
  141. package/esm2022/lib/workbench.constants.mjs +1 -5
  142. package/esm2022/lib/workbench.model.mjs +1 -1
  143. package/esm2022/lib/workbench.provider.mjs +3 -9
  144. package/esm2022/lib/workbench.service.mjs +1 -1
  145. package/esm2022/lib//311/265workbench.service.mjs +38 -42
  146. package/fesm2022/scion-workbench.mjs +4054 -3276
  147. package/fesm2022/scion-workbench.mjs.map +1 -1
  148. package/lib/common/class-list.d.ts +35 -22
  149. package/lib/common/math.util.d.ts +7 -0
  150. package/lib/common/objects.util.d.ts +4 -0
  151. package/lib/common/operators.d.ts +1 -6
  152. package/lib/common/uid.util.d.ts +9 -0
  153. package/lib/content-projection/content-as-overlay.component.d.ts +39 -22
  154. package/lib/content-projection/workbench-element-references.d.ts +13 -0
  155. package/lib/dialog/workbench-dialog.component.d.ts +3 -2
  156. package/lib/dialog/workbench-dialog.d.ts +57 -13
  157. package/lib/dialog//311/265workbench-dialog.d.ts +38 -24
  158. package/lib/dialog//311/265workbench-dialog.service.d.ts +10 -11
  159. package/lib/executor/latest-task-executor.d.ts +26 -0
  160. package/lib/executor/single-task-executor.d.ts +5 -8
  161. package/lib/filter-field/filter-field.component.d.ts +1 -1
  162. package/lib/layout/grid-element/grid-element.component.d.ts +1 -8
  163. package/lib/layout/main-area-layout/main-area-layout.component.d.ts +0 -4
  164. package/lib/layout/migration/model/workbench-layout-migration-v5.model.d.ts +36 -0
  165. package/lib/layout/migration/model/workbench-layout-migration-v6.model.d.ts +35 -0
  166. package/lib/layout/migration/workbench-layout-migration-v5.service.d.ts +12 -0
  167. package/lib/layout/migration/workbench-layout-migration-v6.service.d.ts +12 -0
  168. package/lib/layout/stringifier.d.ts +26 -0
  169. package/lib/layout/workbench-layout.component.d.ts +4 -5
  170. package/lib/layout/workbench-layout.d.ts +9 -6
  171. package/lib/layout/workbench-layout.model.d.ts +4 -3
  172. package/lib/layout/workbench-layout.service.d.ts +14 -16
  173. package/lib/layout/workbench-layouts.util.d.ts +0 -6
  174. package/lib/layout/workench-layout-serializer.service.d.ts +13 -16
  175. package/lib/layout//311/265workbench-layout.d.ts +18 -19
  176. package/lib/layout//311/265workbench-layout.factory.d.ts +3 -2
  177. package/lib/logging//311/265logger.d.ts +2 -3
  178. package/lib/microfrontend-platform/common/microfrontend.util.d.ts +5 -1
  179. package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +7 -3
  180. package/lib/microfrontend-platform/manifest-object-cache.service.d.ts +33 -0
  181. package/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.d.ts +3 -6
  182. package/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.d.ts +2 -1
  183. package/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.d.ts +1 -1
  184. package/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.d.ts +2 -1
  185. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.d.ts +10 -0
  186. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.d.ts +24 -0
  187. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.d.ts +20 -0
  188. package/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.d.ts +9 -0
  189. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.d.ts +4 -8
  190. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +0 -4
  191. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.d.ts +5 -12
  192. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +23 -33
  193. package/lib/microfrontend-platform/public_api.d.ts +1 -0
  194. package/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.d.ts +1 -1
  195. package/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.d.ts +3 -7
  196. package/lib/microfrontend-platform/routing/microfrontend-view-routes.d.ts +9 -2
  197. package/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.d.ts +11 -0
  198. package/lib/notification/notification-list.component.d.ts +0 -2
  199. package/lib/page-not-found/page-not-found.component.d.ts +1 -0
  200. package/lib/part/part-action-bar/part-action-bar.component.d.ts +3 -4
  201. package/lib/part/part-action-bar/part-action.directive.d.ts +2 -2
  202. package/lib/part/part-bar/part-bar.component.d.ts +73 -63
  203. package/lib/part/part-portal.pipe.d.ts +3 -5
  204. package/lib/part/part.component.d.ts +9 -12
  205. package/lib/part/view-context-menu/text.component.d.ts +3 -4
  206. package/lib/part/view-context-menu/view-menu.directive.d.ts +1 -1
  207. package/lib/part/view-context-menu/view-menu.service.d.ts +13 -17
  208. package/lib/part/view-list/view-list.component.d.ts +8 -21
  209. package/lib/part/view-list-button/view-list-button.component.d.ts +8 -11
  210. package/lib/part/view-list-item/view-list-item.component.d.ts +3 -7
  211. package/lib/part/view-tab/view-tab.component.d.ts +19 -29
  212. package/lib/part/view-tab-drag-image/view-tab-drag-image.component.d.ts +4 -4
  213. package/lib/part/workbench-part-action.registry.d.ts +3 -23
  214. package/lib/part/workbench-part.model.d.ts +8 -27
  215. package/lib/part/workbench-part.registry.d.ts +3 -26
  216. package/lib/part//311/265workbench-part.model.d.ts +23 -17
  217. package/lib/perspective/workbench-perspective.model.d.ts +18 -25
  218. package/lib/perspective/workbench-perspective.registry.d.ts +3 -26
  219. package/lib/perspective/workbench-perspective.service.d.ts +16 -14
  220. package/lib/perspective/workench-perspective-serializer.service.d.ts +1 -1
  221. package/lib/perspective//311/265workbench-perspective.model.d.ts +30 -21
  222. package/lib/popup/popup.config.d.ts +11 -10
  223. package/lib/popup/popup.service.d.ts +15 -28
  224. package/lib/portal/wb-component-portal.d.ts +21 -5
  225. package/lib/public_api.d.ts +1 -1
  226. package/lib/registry/workbench-object-registry.d.ts +10 -6
  227. package/lib/routing/public_api.d.ts +2 -2
  228. package/lib/routing/routing.model.d.ts +25 -13
  229. package/lib/routing/{router.util.d.ts → routing.util.d.ts} +28 -1
  230. package/lib/routing/{workbench-auxiliary-routes-registrator.service.d.ts → workbench-auxiliary-route-installer.service.d.ts} +10 -3
  231. package/lib/routing/workbench-layout-differ.d.ts +1 -2
  232. package/lib/routing/workbench-navigational-states.d.ts +8 -4
  233. package/lib/{view/workbench-view-route-guards.d.ts → routing/workbench-route-guards.d.ts} +8 -2
  234. package/lib/routing/workbench-url-observer.service.d.ts +31 -55
  235. package/lib/routing/workbench-view-outlet-differ.d.ts +32 -0
  236. package/lib/routing//311/265workbench-router.service.d.ts +22 -18
  237. package/lib/startup/workbench-launcher.service.d.ts +4 -5
  238. package/lib/testing/workbench.provider.d.ts +3 -1
  239. package/lib/theme/workbench-theme-switcher.service.d.ts +4 -6
  240. package/lib/view/public_api.d.ts +0 -1
  241. package/lib/view/view-move-handler.service.d.ts +16 -14
  242. package/lib/view/view-portal.pipe.d.ts +1 -3
  243. package/lib/view/view.component.d.ts +21 -12
  244. package/lib/view/workbench-view.model.d.ts +88 -36
  245. package/lib/view/workbench-view.registry.d.ts +3 -27
  246. package/lib/view//311/265workbench-view.model.d.ts +62 -71
  247. package/lib/view-dnd/view-drag.service.d.ts +79 -49
  248. package/lib/view-dnd/view-drop-placeholder-renderer.service.d.ts +1 -1
  249. package/lib/view-dnd/view-tab-drag-image-renderer.service.d.ts +12 -36
  250. package/lib/workbench-config.d.ts +19 -7
  251. package/lib/workbench.component.d.ts +16 -30
  252. package/lib/workbench.constants.d.ts +0 -5
  253. package/lib/workbench.model.d.ts +31 -3
  254. package/lib/workbench.service.d.ts +58 -56
  255. package/lib//311/265workbench.service.d.ts +18 -31
  256. package/package.json +5 -5
  257. package/esm2022/lib/common/filter-by-predicate.pipe.mjs +0 -27
  258. package/esm2022/lib/common/filter-by-text.pipe.mjs +0 -39
  259. package/esm2022/lib/common/uuid.util.mjs +0 -17
  260. package/esm2022/lib/content-projection/content-projection.directive.mjs +0 -101
  261. package/esm2022/lib/content-projection/view-container.reference.mjs +0 -68
  262. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +0 -41
  263. package/esm2022/lib/page-not-found/format-url.pipe.mjs +0 -26
  264. package/esm2022/lib/part/part-action-bar/part-action-filter.pipe.mjs +0 -26
  265. package/esm2022/lib/routing/router.util.mjs +0 -126
  266. package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +0 -94
  267. package/esm2022/lib/view/workbench-view-route-guards.mjs +0 -47
  268. package/lib/common/filter-by-predicate.pipe.d.ts +0 -10
  269. package/lib/common/filter-by-text.pipe.d.ts +0 -12
  270. package/lib/common/uuid.util.d.ts +0 -8
  271. package/lib/content-projection/content-projection.directive.d.ts +0 -30
  272. package/lib/content-projection/view-container.reference.d.ts +0 -42
  273. package/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.d.ts +0 -10
  274. package/lib/page-not-found/format-url.pipe.d.ts +0 -11
  275. package/lib/part/part-action-bar/part-action-filter.pipe.d.ts +0 -11
package/_index.scss CHANGED
@@ -99,7 +99,7 @@
99
99
  * ```scss
100
100
  * @use '@scion/workbench' with (
101
101
  * $icon-font: (
102
- * directory: '/path/to/font', // defaults to '/assets/fonts' if omitted
102
+ * directory: '/path/to/font', // defaults to '/fonts' if omitted
103
103
  * filename: 'scion-workbench-icons' // defaults to 'scion-workbench-icons' if omitted
104
104
  * version: '1.0.0' // appended to the HTTP request to load the icon font, enabling browser cache invalidation when icons change
105
105
  * );
@@ -116,7 +116,7 @@
116
116
  * ```scss
117
117
  * @use '@scion/workbench' with (
118
118
  * $icon-font: (
119
- * directory: 'path/to/font' // no leading slash, typically `assets/fonts`
119
+ * directory: 'path/to/font' // no leading slash, typically `fonts`
120
120
  * )
121
121
  * );
122
122
  * ```
@@ -134,7 +134,7 @@
134
134
  * ```scss
135
135
  * @use '@scion/workbench' with (
136
136
  * $icon-font: (
137
- * directory: '^path/to/font' // no leading slash but with a caret (^), typically `^assets/fonts`
137
+ * directory: '^path/to/font' // no leading slash but with a caret (^), typically `^fonts`
138
138
  * )
139
139
  * );
140
140
  * ```
@@ -144,9 +144,10 @@
144
144
  @use '@angular/cdk';
145
145
  @use './design/workbench-light-theme-design-tokens';
146
146
  @use './design/workbench-dark-theme-design-tokens';
147
+ @use './design/workbench-global-styles' as workbench;
147
148
  @use './design/workbench-icon-font' as workbench-icons;
149
+ @use './design/workbench-view-global-styles' as workbench-view;
148
150
  @use './design/workbench-popup-global-styles' as workbench-popup;
149
- @use './design/workbench-view-drag-image-global-styles' as workbench-view-drag-image;
150
151
  @use './design/workbench-dialog-global-styles' as workbench-dialog;
151
152
 
152
153
  // Install workbench theme
@@ -163,8 +164,9 @@ $icon-font: null !default;
163
164
  @include workbench-icons.install-icon-font($icon-font);
164
165
 
165
166
  // Install global workbench styles
167
+ @include workbench.install-global-styles();
168
+ @include workbench-view.install-global-styles();
166
169
  @include workbench-popup.install-global-styles();
167
- @include workbench-view-drag-image.install-global-styles();
168
170
  @include workbench-dialog.install-global-styles();
169
171
 
170
172
  // Install Angular CDK styles
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Adds styles required by the workbench to the document root (`<html>`) element.
3
+ */
4
+ @mixin install-global-styles() {
5
+ // Ensure the CSS layer of @scion/workbench to have higher precedence than the CSS layer of @scion/toolkit.
6
+ @layer sci-toolkit, sci-workbench;
7
+
8
+ // Declare styles for the document root element (`<html>`) in a CSS layer.
9
+ // CSS layers have lower priority than "regular" CSS declarations, and the layer name indicates the styles are from @scion/workbench.
10
+ @layer sci-workbench {
11
+ :root {
12
+ // Ensure the document root element is positioned to support `@scion/toolkit/observable/fromBoundingClientRect$` for observing element bounding boxes.
13
+ position: absolute;
14
+ // Align the document root with the page viewport so the top-level positioning context fills the page viewport (as expected by applications).
15
+ inset: 0;
16
+ }
17
+ }
18
+ }
@@ -21,7 +21,7 @@ $-default-icon-font-config: (
21
21
  // To keep the workbench configuration minimal for Angular projects deployed in the context root, we reference font files by
22
22
  // their root relative path. Consequently, applications deployed in a subdirectory require additional configuration depending
23
23
  // on whether the application is built with esbuild or webpack.
24
- directory: '/assets/fonts',
24
+ directory: '/fonts',
25
25
  filename: 'scion-workbench-icons',
26
26
  version: $-version,
27
27
  );
@@ -5,7 +5,7 @@
5
5
  $diamond-height: 8;
6
6
 
7
7
  /**
8
- * Provides SCION workbench popup styles.
8
+ * Provides styles for the workbench popup.
9
9
  */
10
10
  @mixin install-global-styles() {
11
11
  .cdk-overlay-pane.wb-popup {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provides styles for view drag and drop.
2
+ * Provides styles for the workbench view.
3
3
  */
4
4
  @mixin install-global-styles() {
5
5
  .wb-view-tab-drag-image {
@@ -11,4 +11,3 @@
11
11
  container-name: viewtab;
12
12
  }
13
13
  }
14
-
@@ -7,55 +7,93 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
- import { Subject } from 'rxjs';
11
- import { map, startWith } from 'rxjs/operators';
12
10
  import { Arrays } from '@scion/toolkit/util';
11
+ import { computed, signal } from '@angular/core';
13
12
  /**
14
13
  * Container for managing CSS classes set in different scopes.
15
14
  */
16
15
  export class ClassList {
17
16
  constructor() {
18
- this._cssClasses = new Map();
19
- this._change$ = new Subject();
20
- this.value = new Array();
21
- this.value$ = this._change$
22
- .pipe(startWith(undefined), map(() => [...this.value]));
17
+ this._layout = signal([], { equal: isEqualArray });
18
+ this._navigation = signal([], { equal: isEqualArray });
19
+ this._route = signal([], { equal: isEqualArray });
20
+ this._application = signal([], { equal: isEqualArray });
21
+ this.asList = computed(() => Arrays.distinct(new Array()
22
+ .concat(this._layout())
23
+ .concat(this._navigation())
24
+ .concat(this._route())
25
+ .concat(this._application())));
26
+ this.asMap = computed(() => removeEmptyEntries(new Map()
27
+ .set('layout', this._layout())
28
+ .set('navigation', this._navigation())
29
+ .set('route', this._route())
30
+ .set('application', this._application())));
23
31
  }
24
32
  /**
25
- * Sets CSS classes for a specific scope.
33
+ * Specifies CSS classes defined by the layout.
26
34
  */
27
- set(cssClasses, options) {
28
- this._cssClasses.set(options.scope, Arrays.coerce(cssClasses));
29
- this.computeValue();
35
+ set layout(cssClasses) {
36
+ this._layout.set(Arrays.coerce(cssClasses));
30
37
  }
31
38
  /**
32
- * Retuns CSS classes of a specific scope.
39
+ * Returns CSS classes defined in the scope 'layout'.
33
40
  */
34
- get(options) {
35
- return this._cssClasses.get(options.scope) ?? [];
41
+ get layout() {
42
+ return this._layout;
36
43
  }
37
44
  /**
38
- * Removes CSS classes of a specific scope.
45
+ * Specifies CSS classes associated with the navigation.
39
46
  */
40
- remove(options) {
41
- this._cssClasses.delete(options.scope);
42
- this.computeValue();
47
+ set navigation(cssClasses) {
48
+ this._navigation.set(Arrays.coerce(cssClasses));
43
49
  }
44
50
  /**
45
- * Returns the CSS classes as readonly {@link Map} grouped by scope,
46
- * useful to transfer the class list to a different browsing context.
51
+ * Returns CSS classes defined in the scope 'navigation'.
47
52
  */
48
- toMap() {
49
- return new Map(this._cssClasses.entries());
53
+ get navigation() {
54
+ return this._navigation;
50
55
  }
51
56
  /**
52
- * Computes the aggregated list of CSS classes.
57
+ * Specifies CSS classes defined by the route.
53
58
  */
54
- computeValue() {
55
- this.value.length = 0;
56
- const classes = new Set(Array.from(this._cssClasses.values()).flat());
57
- classes.forEach(clazz => this.value.push(clazz));
58
- this._change$.next();
59
+ set route(cssClasses) {
60
+ this._route.set(Arrays.coerce(cssClasses));
59
61
  }
62
+ /**
63
+ * Returns CSS classes defined in the scope 'route'.
64
+ */
65
+ get route() {
66
+ return this._route;
67
+ }
68
+ /**
69
+ * Specifies CSS classes set by the application.
70
+ */
71
+ set application(cssClasses) {
72
+ this._application.set(Arrays.coerce(cssClasses));
73
+ }
74
+ /**
75
+ * Returns classes defined in the scope 'application'.
76
+ */
77
+ get application() {
78
+ return this._application;
79
+ }
80
+ }
81
+ /**
82
+ * Creates a copy with empty map entries removed.
83
+ */
84
+ function removeEmptyEntries(map) {
85
+ const copy = new Map(map);
86
+ for (const key of copy.keys()) {
87
+ if (!copy.get(key)?.length) {
88
+ copy.delete(key);
89
+ }
90
+ }
91
+ return copy;
92
+ }
93
+ /**
94
+ * Compares two arrays of strings for equality, ignoring element order.
95
+ */
96
+ function isEqualArray(a, b) {
97
+ return Arrays.isEqual(a, b, { exactOrder: false });
60
98
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2NvbW1vbi9jbGFzcy1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBUXBCO1FBTmlCLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7UUFDbkQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFaEMsVUFBSyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFJMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUTthQUN4QixJQUFJLENBQ0gsU0FBUyxDQUFDLFNBQWlCLENBQUMsRUFDNUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDM0IsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBQyxVQUFnRCxFQUFFLE9BQWlDO1FBQzVGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxHQUFHLENBQUMsT0FBaUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxPQUFpQztRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QXJyYXlzfSBmcm9tICdAc2Npb24vdG9vbGtpdC91dGlsJztcblxuLyoqXG4gKiBDb250YWluZXIgZm9yIG1hbmFnaW5nIENTUyBjbGFzc2VzIHNldCBpbiBkaWZmZXJlbnQgc2NvcGVzLlxuICovXG5leHBvcnQgY2xhc3MgQ2xhc3NMaXN0IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jc3NDbGFzc2VzID0gbmV3IE1hcDxDbGFzc0xpc3RTY29wZXMsIHN0cmluZ1tdPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2UkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWUgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWUkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnZhbHVlJCA9IHRoaXMuX2NoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkIGFzIHZvaWQpLFxuICAgICAgICBtYXAoKCkgPT4gWy4uLnRoaXMudmFsdWVdKSxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBDU1MgY2xhc3NlcyBmb3IgYSBzcGVjaWZpYyBzY29wZS5cbiAgICovXG4gIHB1YmxpYyBzZXQoY3NzQ2xhc3Nlczogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkLCBvcHRpb25zOiB7c2NvcGU6IENsYXNzTGlzdFNjb3Blc30pOiB2b2lkIHtcbiAgICB0aGlzLl9jc3NDbGFzc2VzLnNldChvcHRpb25zLnNjb3BlLCBBcnJheXMuY29lcmNlKGNzc0NsYXNzZXMpKTtcbiAgICB0aGlzLmNvbXB1dGVWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVucyBDU1MgY2xhc3NlcyBvZiBhIHNwZWNpZmljIHNjb3BlLlxuICAgKi9cbiAgcHVibGljIGdldChvcHRpb25zOiB7c2NvcGU6IENsYXNzTGlzdFNjb3Blc30pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nzc0NsYXNzZXMuZ2V0KG9wdGlvbnMuc2NvcGUpID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgQ1NTIGNsYXNzZXMgb2YgYSBzcGVjaWZpYyBzY29wZS5cbiAgICovXG4gIHB1YmxpYyByZW1vdmUob3B0aW9uczoge3Njb3BlOiBDbGFzc0xpc3RTY29wZXN9KTogdm9pZCB7XG4gICAgdGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUob3B0aW9ucy5zY29wZSk7XG4gICAgdGhpcy5jb21wdXRlVmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBDU1MgY2xhc3NlcyBhcyByZWFkb25seSB7QGxpbmsgTWFwfSBncm91cGVkIGJ5IHNjb3BlLFxuICAgKiB1c2VmdWwgdG8gdHJhbnNmZXIgdGhlIGNsYXNzIGxpc3QgdG8gYSBkaWZmZXJlbnQgYnJvd3NpbmcgY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyB0b01hcCgpOiBSZWFkb25seU1hcDxDbGFzc0xpc3RTY29wZXMsIHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5fY3NzQ2xhc3Nlcy5lbnRyaWVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBhZ2dyZWdhdGVkIGxpc3Qgb2YgQ1NTIGNsYXNzZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLmxlbmd0aCA9IDA7XG4gICAgY29uc3QgY2xhc3NlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbSh0aGlzLl9jc3NDbGFzc2VzLnZhbHVlcygpKS5mbGF0KCkpO1xuICAgIGNsYXNzZXMuZm9yRWFjaChjbGF6eiA9PiB0aGlzLnZhbHVlLnB1c2goY2xhenopKTtcbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgc2NvcGVzIHVzZWQgaW4ge0BsaW5rIENsYXNzTGlzdH0uXG4gKlxuICogYGxheW91dGA6IFVzZSBmb3IgQ1NTIGNsYXNzZXMgZGVmaW5lZCBvbiB0aGUgbGF5b3V0LlxuICogYG5hdmlnYXRpb25gOiBVc2UgZm9yIENTUyBjbGFzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmF2aWdhdGlvbi5cbiAqIGByb3V0ZWA6IFVzZSBmb3IgQ1NTIGNsYXNzZXMgZGVmaW5lZCBvbiB0aGUgcm91dGUuXG4gKiBgYXBwbGljYXRpb25gOiBVc2UgZm9yIENTUyBjbGFzc2VzIHNldCBieSB0aGUgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENsYXNzTGlzdFNjb3BlcyA9ICdsYXlvdXQnIHwgJ25hdmlnYXRpb24nIHwgJ3JvdXRlJyB8ICdhcHBsaWNhdGlvbic7XG5cbi8qKlxuICogQ1NTIGNsYXNzZXMgZ3JvdXBlZCBieSBzY29wZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NMaXN0TWFwID0gUmVhZG9ubHlNYXA8Q2xhc3NMaXN0U2NvcGVzLCBzdHJpbmdbXT47XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2NvbW1vbi9jbGFzcy1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxRQUFRLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFpQnBCO1FBZmlCLFlBQU8sR0FBRyxNQUFNLENBQVcsRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7UUFDdEQsZ0JBQVcsR0FBRyxNQUFNLENBQVcsRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7UUFDMUQsV0FBTSxHQUFHLE1BQU0sQ0FBVyxFQUFFLEVBQUUsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztRQUNyRCxpQkFBWSxHQUFHLE1BQU0sQ0FBVyxFQUFFLEVBQUUsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztRQWExRSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFVO2FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLEVBQTZCO2FBQ2hGLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3JDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzNCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsTUFBTSxDQUFDLFVBQWdEO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVLENBQUMsVUFBZ0Q7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLLENBQUMsVUFBZ0Q7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVcsQ0FBQyxVQUFnRDtRQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFpQkQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFPLEdBQWdCO0lBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsQ0FBVyxFQUFFLENBQVc7SUFDNUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0FycmF5c30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5pbXBvcnQge2NvbXB1dGVkLCBTaWduYWwsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBtYW5hZ2luZyBDU1MgY2xhc3NlcyBzZXQgaW4gZGlmZmVyZW50IHNjb3Blcy5cbiAqL1xuZXhwb3J0IGNsYXNzIENsYXNzTGlzdCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGF5b3V0ID0gc2lnbmFsPHN0cmluZ1tdPihbXSwge2VxdWFsOiBpc0VxdWFsQXJyYXl9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmF2aWdhdGlvbiA9IHNpZ25hbDxzdHJpbmdbXT4oW10sIHtlcXVhbDogaXNFcXVhbEFycmF5fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlID0gc2lnbmFsPHN0cmluZ1tdPihbXSwge2VxdWFsOiBpc0VxdWFsQXJyYXl9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb24gPSBzaWduYWw8c3RyaW5nW10+KFtdLCB7ZXF1YWw6IGlzRXF1YWxBcnJheX0pO1xuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3NlcyBhcyBsaXN0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzTGlzdDogU2lnbmFsPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogQ1NTIGNsYXNzZXMgYXMge0BsaW5rIE1hcH0gZ3JvdXBlZCBieSBzY29wZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhc01hcDogU2lnbmFsPENsYXNzTGlzdE1hcD47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hc0xpc3QgPSBjb21wdXRlZCgoKSA9PiBBcnJheXMuZGlzdGluY3QobmV3IEFycmF5PHN0cmluZz4oKVxuICAgICAgLmNvbmNhdCh0aGlzLl9sYXlvdXQoKSlcbiAgICAgIC5jb25jYXQodGhpcy5fbmF2aWdhdGlvbigpKVxuICAgICAgLmNvbmNhdCh0aGlzLl9yb3V0ZSgpKVxuICAgICAgLmNvbmNhdCh0aGlzLl9hcHBsaWNhdGlvbigpKSkpO1xuXG4gICAgdGhpcy5hc01hcCA9IGNvbXB1dGVkKCgpID0+IHJlbW92ZUVtcHR5RW50cmllcyhuZXcgTWFwPENsYXNzTGlzdFNjb3Blcywgc3RyaW5nW10+KClcbiAgICAgIC5zZXQoJ2xheW91dCcsIHRoaXMuX2xheW91dCgpKVxuICAgICAgLnNldCgnbmF2aWdhdGlvbicsIHRoaXMuX25hdmlnYXRpb24oKSlcbiAgICAgIC5zZXQoJ3JvdXRlJywgdGhpcy5fcm91dGUoKSlcbiAgICAgIC5zZXQoJ2FwcGxpY2F0aW9uJywgdGhpcy5fYXBwbGljYXRpb24oKSkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgQ1NTIGNsYXNzZXMgZGVmaW5lZCBieSB0aGUgbGF5b3V0LlxuICAgKi9cbiAgcHVibGljIHNldCBsYXlvdXQoY3NzQ2xhc3Nlczogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGF5b3V0LnNldChBcnJheXMuY29lcmNlKGNzc0NsYXNzZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIENTUyBjbGFzc2VzIGRlZmluZWQgaW4gdGhlIHNjb3BlICdsYXlvdXQnLlxuICAgKi9cbiAgcHVibGljIGdldCBsYXlvdXQoKTogU2lnbmFsPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xheW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgQ1NTIGNsYXNzZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldCBuYXZpZ2F0aW9uKGNzc0NsYXNzZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25hdmlnYXRpb24uc2V0KEFycmF5cy5jb2VyY2UoY3NzQ2xhc3NlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgQ1NTIGNsYXNzZXMgZGVmaW5lZCBpbiB0aGUgc2NvcGUgJ25hdmlnYXRpb24nLlxuICAgKi9cbiAgcHVibGljIGdldCBuYXZpZ2F0aW9uKCk6IFNpZ25hbDxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBDU1MgY2xhc3NlcyBkZWZpbmVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyBzZXQgcm91dGUoY3NzQ2xhc3Nlczogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcm91dGUuc2V0KEFycmF5cy5jb2VyY2UoY3NzQ2xhc3NlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgQ1NTIGNsYXNzZXMgZGVmaW5lZCBpbiB0aGUgc2NvcGUgJ3JvdXRlJy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm91dGUoKTogU2lnbmFsPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBDU1MgY2xhc3NlcyBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldCBhcHBsaWNhdGlvbihjc3NDbGFzc2VzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbi5zZXQoQXJyYXlzLmNvZXJjZShjc3NDbGFzc2VzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjbGFzc2VzIGRlZmluZWQgaW4gdGhlIHNjb3BlICdhcHBsaWNhdGlvbicuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFwcGxpY2F0aW9uKCk6IFNpZ25hbDxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgc2NvcGVzIHVzZWQgaW4ge0BsaW5rIENsYXNzTGlzdH0uXG4gKlxuICogYGxheW91dGA6IFVzZSBmb3IgQ1NTIGNsYXNzZXMgZGVmaW5lZCBvbiB0aGUgbGF5b3V0LlxuICogYG5hdmlnYXRpb25gOiBVc2UgZm9yIENTUyBjbGFzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmF2aWdhdGlvbi5cbiAqIGByb3V0ZWA6IFVzZSBmb3IgQ1NTIGNsYXNzZXMgZGVmaW5lZCBvbiB0aGUgcm91dGUuXG4gKiBgYXBwbGljYXRpb25gOiBVc2UgZm9yIENTUyBjbGFzc2VzIHNldCBieSB0aGUgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENsYXNzTGlzdFNjb3BlcyA9ICdsYXlvdXQnIHwgJ25hdmlnYXRpb24nIHwgJ3JvdXRlJyB8ICdhcHBsaWNhdGlvbic7XG5cbi8qKlxuICogQ1NTIGNsYXNzZXMgZ3JvdXBlZCBieSBzY29wZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NMaXN0TWFwID0gUmVhZG9ubHlNYXA8Q2xhc3NMaXN0U2NvcGVzLCBzdHJpbmdbXT47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvcHkgd2l0aCBlbXB0eSBtYXAgZW50cmllcyByZW1vdmVkLlxuICovXG5mdW5jdGlvbiByZW1vdmVFbXB0eUVudHJpZXM8SywgVj4obWFwOiBNYXA8SywgVltdPik6IE1hcDxLLCBWW10+IHtcbiAgY29uc3QgY29weSA9IG5ldyBNYXA8SywgVltdPihtYXApO1xuICBmb3IgKGNvbnN0IGtleSBvZiBjb3B5LmtleXMoKSkge1xuICAgIGlmICghY29weS5nZXQoa2V5KT8ubGVuZ3RoKSB7XG4gICAgICBjb3B5LmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29weTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYXJyYXlzIG9mIHN0cmluZ3MgZm9yIGVxdWFsaXR5LCBpZ25vcmluZyBlbGVtZW50IG9yZGVyLlxuICovXG5mdW5jdGlvbiBpc0VxdWFsQXJyYXkoYTogc3RyaW5nW10sIGI6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheXMuaXNFcXVhbChhLCBiLCB7ZXhhY3RPcmRlcjogZmFsc2V9KTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) 2018-2024 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ /**
11
+ * Returns the value clamped to the inclusive range of min and max.
12
+ */
13
+ export function clamp(value, minmax) {
14
+ return Math.max(minmax.min, Math.min(value, minmax.max));
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvY29tbW9uL21hdGgudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVIOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxLQUFhLEVBQUUsTUFBa0M7SUFDckUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBjbGFtcGVkIHRvIHRoZSBpbmNsdXNpdmUgcmFuZ2Ugb2YgbWluIGFuZCBtYXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW5tYXg6IHttaW46IG51bWJlcjsgbWF4OiBudW1iZXJ9KTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbm1heC5taW4sIE1hdGgubWluKHZhbHVlLCBtaW5tYXgubWF4KSk7XG59XG4iXX0=
@@ -30,5 +30,11 @@ export const Objects = {
30
30
  withoutUndefinedEntries: (object) => {
31
31
  return Dictionaries.withoutUndefinedEntries(object);
32
32
  },
33
+ /**
34
+ * Stringifies given object to matrix notation: a=b;c=d;e=f
35
+ */
36
+ toMatrixNotation: (object) => {
37
+ return Object.entries(object ?? {}).map(([key, value]) => `${key}=${value}`).join(';');
38
+ },
33
39
  };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvY29tbW9uL29iamVjdHMudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUVyQjs7T0FFRztJQUNILElBQUksRUFBRSxDQUFJLE1BQVMsRUFBa0IsRUFBRTtRQUNyQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBa0MsQ0FBbUIsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLEVBQUUsQ0FBZ0IsTUFBd0MsRUFBaUIsRUFBRTtRQUNsRixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFrQixDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixFQUFFLENBQUksTUFBbUMsRUFBSyxFQUFFO1FBQ3JFLE9BQU8sWUFBWSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBTSxDQUFDO0lBQzNELENBQUM7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0RpY3Rpb25hcmllc30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBPYmplY3RzID0ge1xuXG4gIC8qKlxuICAgKiBMaWtlIHtAbGluayBPYmplY3Qua2V5c30sIGJ1dCBwcmVzZXJ2aW5nIHRoZSBkYXRhIHR5cGUgb2Yga2V5cy5cbiAgICovXG4gIGtleXM6IDxUPihvYmplY3Q6IFQpOiBBcnJheTxrZXlvZiBUPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCBhcyBSZWNvcmQ8a2V5b2YgVCwgdW5rbm93bj4pIGFzIEFycmF5PGtleW9mIFQ+O1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaWtlIHtAbGluayBPYmplY3QuZW50cmllc30sIGJ1dCBwcmVzZXJ2aW5nIHRoZSBkYXRhIHR5cGUgb2Yga2V5cy5cbiAgICovXG4gIGVudHJpZXM6IDxWLCBLID0gc3RyaW5nPihvYmplY3Q6IFJlY29yZDxzdHJpbmcsIFY+IHwgQXJyYXlMaWtlPFY+KTogQXJyYXk8W0ssIFZdPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iamVjdCkgYXMgQXJyYXk8W0ssIFZdPjtcbiAgfSxcblxuICAvKipcbiAgICogTGlrZSB7QGxpbmsgRGljdGlvbmFyaWVzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzfSwgYnV0IHByZXNlcnZpbmcgdGhlIG9iamVjdCBkYXRhIHR5cGUuXG4gICAqL1xuICB3aXRob3V0VW5kZWZpbmVkRW50cmllczogPFQ+KG9iamVjdDogVCAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogVCA9PiB7XG4gICAgcmV0dXJuIERpY3Rpb25hcmllcy53aXRob3V0VW5kZWZpbmVkRW50cmllcyhvYmplY3QpIGFzIFQ7XG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvY29tbW9uL29iamVjdHMudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUVyQjs7T0FFRztJQUNILElBQUksRUFBRSxDQUFJLE1BQVMsRUFBa0IsRUFBRTtRQUNyQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBa0MsQ0FBbUIsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLEVBQUUsQ0FBZ0IsTUFBd0MsRUFBaUIsRUFBRTtRQUNsRixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFrQixDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixFQUFFLENBQUksTUFBbUMsRUFBSyxFQUFFO1FBQ3JFLE9BQU8sWUFBWSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBTSxDQUFDO0lBQzNELENBQUM7SUFDRDs7T0FFRztJQUNILGdCQUFnQixFQUFFLENBQUMsTUFBa0QsRUFBVSxFQUFFO1FBQy9FLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0RpY3Rpb25hcmllc30gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBPYmplY3RzID0ge1xuXG4gIC8qKlxuICAgKiBMaWtlIHtAbGluayBPYmplY3Qua2V5c30sIGJ1dCBwcmVzZXJ2aW5nIHRoZSBkYXRhIHR5cGUgb2Yga2V5cy5cbiAgICovXG4gIGtleXM6IDxUPihvYmplY3Q6IFQpOiBBcnJheTxrZXlvZiBUPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCBhcyBSZWNvcmQ8a2V5b2YgVCwgdW5rbm93bj4pIGFzIEFycmF5PGtleW9mIFQ+O1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaWtlIHtAbGluayBPYmplY3QuZW50cmllc30sIGJ1dCBwcmVzZXJ2aW5nIHRoZSBkYXRhIHR5cGUgb2Yga2V5cy5cbiAgICovXG4gIGVudHJpZXM6IDxWLCBLID0gc3RyaW5nPihvYmplY3Q6IFJlY29yZDxzdHJpbmcsIFY+IHwgQXJyYXlMaWtlPFY+KTogQXJyYXk8W0ssIFZdPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iamVjdCkgYXMgQXJyYXk8W0ssIFZdPjtcbiAgfSxcblxuICAvKipcbiAgICogTGlrZSB7QGxpbmsgRGljdGlvbmFyaWVzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzfSwgYnV0IHByZXNlcnZpbmcgdGhlIG9iamVjdCBkYXRhIHR5cGUuXG4gICAqL1xuICB3aXRob3V0VW5kZWZpbmVkRW50cmllczogPFQ+KG9iamVjdDogVCAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogVCA9PiB7XG4gICAgcmV0dXJuIERpY3Rpb25hcmllcy53aXRob3V0VW5kZWZpbmVkRW50cmllcyhvYmplY3QpIGFzIFQ7XG4gIH0sXG4gIC8qKlxuICAgKiBTdHJpbmdpZmllcyBnaXZlbiBvYmplY3QgdG8gbWF0cml4IG5vdGF0aW9uOiBhPWI7Yz1kO2U9ZlxuICAgKi9cbiAgdG9NYXRyaXhOb3RhdGlvbjogKG9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqZWN0ID8/IHt9KS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApLmpvaW4oJzsnKTtcbiAgfSxcbn0gYXMgY29uc3Q7XG4iXX0=
@@ -7,10 +7,7 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
- import { audit } from 'rxjs';
11
10
  import { filter, mergeMap } from 'rxjs/operators';
12
- import { inject } from '@angular/core';
13
- import { WorkbenchLayoutService } from '../layout/workbench-layout.service';
14
11
  /**
15
12
  * Serializes the execution of elements emitted by the source Observable.
16
13
  *
@@ -27,12 +24,4 @@ export function serializeExecution(fn) {
27
24
  export function filterNull() {
28
25
  return filter((item) => item !== null);
29
26
  }
30
- /**
31
- * Buffers the most recent value from the source Observable until the next layout change.
32
- * Use this operator to avoid emitting a partially updated layout.
33
- */
34
- export function bufferLatestUntilLayoutChange() {
35
- const onLayoutChange$ = inject(WorkbenchLayoutService).onLayoutChange$;
36
- return audit(() => onLayoutChange$);
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvY29tbW9uL29wZXJhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQXlELE1BQU0sTUFBTSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUUxRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQVUsRUFBaUQ7SUFDM0YsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsT0FBTyxNQUFNLENBQUMsQ0FBQyxJQUFjLEVBQWEsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QjtJQUMzQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDdkUsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHthdWRpdCwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dC5zZXJ2aWNlJztcblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBleGVjdXRpb24gb2YgZWxlbWVudHMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogRm9yIGVhY2ggZWxlbWVudCBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLlxuICogVGhlIG5leHQgZWxlbWVudCB3aWxsIG9ubHkgYmUgcHJvY2Vzc2VkIG9uY2UgdGhlIFByb21pc2Ugb3IgT2JzZXJ2YWJsZSByZXR1cm5lZCBieVxuICogdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHJlc29sdmVzIG9yIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUV4ZWN1dGlvbjxJTiwgT1VUPihmbjogKHZhbHVlOiBJTikgPT4gT2JzZXJ2YWJsZTxPVVQ+IHwgUHJvbWlzZTxPVVQ+KTogT3BlcmF0b3JGdW5jdGlvbjxJTiwgT1VUPiB7XG4gIHJldHVybiBtZXJnZU1hcChlbGVtZW50ID0+IGZuKGVsZW1lbnQpLCAxKTtcbn1cblxuLyoqXG4gKiBNaXJyb3JzIHRoZSBzb3VyY2UgZXhjZXB0IGZvciBgbnVsbGAgZW1pc3Npb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTnVsbDxUPigpOiBPcGVyYXRvckZ1bmN0aW9uPFQgfCBudWxsLCBUPiB7XG4gIHJldHVybiBmaWx0ZXIoKGl0ZW06IFQgfCBudWxsKTogaXRlbSBpcyBUID0+IGl0ZW0gIT09IG51bGwpO1xufVxuXG4vKipcbiAqIEJ1ZmZlcnMgdGhlIG1vc3QgcmVjZW50IHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHVudGlsIHRoZSBuZXh0IGxheW91dCBjaGFuZ2UuXG4gKiBVc2UgdGhpcyBvcGVyYXRvciB0byBhdm9pZCBlbWl0dGluZyBhIHBhcnRpYWxseSB1cGRhdGVkIGxheW91dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlckxhdGVzdFVudGlsTGF5b3V0Q2hhbmdlPFQ+KCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIGNvbnN0IG9uTGF5b3V0Q2hhbmdlJCA9IGluamVjdChXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlKS5vbkxheW91dENoYW5nZSQ7XG4gIHJldHVybiBhdWRpdCgoKSA9PiBvbkxheW91dENoYW5nZSQpO1xufVxuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvY29tbW9uL29wZXJhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFVLEVBQWlEO0lBQzNGLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxVQUFVO0lBQ3hCLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBYyxFQUFhLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGV4ZWN1dGlvbiBvZiBlbGVtZW50cyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqXG4gKiBGb3IgZWFjaCBlbGVtZW50IGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gKiBUaGUgbmV4dCBlbGVtZW50IHdpbGwgb25seSBiZSBwcm9jZXNzZWQgb25jZSB0aGUgUHJvbWlzZSBvciBPYnNlcnZhYmxlIHJldHVybmVkIGJ5XG4gKiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmVzb2x2ZXMgb3IgY29tcGxldGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRXhlY3V0aW9uPElOLCBPVVQ+KGZuOiAodmFsdWU6IElOKSA9PiBPYnNlcnZhYmxlPE9VVD4gfCBQcm9taXNlPE9VVD4pOiBPcGVyYXRvckZ1bmN0aW9uPElOLCBPVVQ+IHtcbiAgcmV0dXJuIG1lcmdlTWFwKGVsZW1lbnQgPT4gZm4oZWxlbWVudCksIDEpO1xufVxuXG4vKipcbiAqIE1pcnJvcnMgdGhlIHNvdXJjZSBleGNlcHQgZm9yIGBudWxsYCBlbWlzc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOdWxsPFQ+KCk6IE9wZXJhdG9yRnVuY3Rpb248VCB8IG51bGwsIFQ+IHtcbiAgcmV0dXJuIGZpbHRlcigoaXRlbTogVCB8IG51bGwpOiBpdGVtIGlzIFQgPT4gaXRlbSAhPT0gbnVsbCk7XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ /*
2
+ * Copyright (c) 2018-2024 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ import { UUID } from '@scion/toolkit/uuid';
11
+ /**
12
+ * Generates a UID (unique identifier).
13
+ */
14
+ export const UID = {
15
+ /**
16
+ * Generates a UID (unique identifier) with length 8.
17
+ */
18
+ randomUID: () => {
19
+ return UUID.randomUUID().substring(0, 8);
20
+ },
21
+ };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlkLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9jb21tb24vdWlkLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFekM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUc7SUFDakI7O09BRUc7SUFDSCxTQUFTLEVBQUUsR0FBVyxFQUFFO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjQgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7VVVJRH0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXVpZCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgVUlEICh1bmlxdWUgaWRlbnRpZmllcikuXG4gKi9cbmV4cG9ydCBjb25zdCBVSUQgPSB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBVSUQgKHVuaXF1ZSBpZGVudGlmaWVyKSB3aXRoIGxlbmd0aCA4LlxuICAgKi9cbiAgcmFuZG9tVUlEOiAoKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gVVVJRC5yYW5kb21VVUlEKCkuc3Vic3RyaW5nKDAsIDgpO1xuICB9LFxufTtcblxuXG4iXX0=
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2018-2022 Swiss Federal Railways
2
+ * Copyright (c) 2018-2024 Swiss Federal Railways
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -7,51 +7,108 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
- import { Component, Input } from '@angular/core';
11
- import { ContentProjectionDirective } from './content-projection.directive';
10
+ import { Component, computed, effect, ElementRef, inject, input, signal, TemplateRef, untracked, viewChild } from '@angular/core';
11
+ import { setStyle } from '../common/dom.util';
12
+ import { boundingClientRect } from '@scion/components/dimension';
12
13
  import * as i0 from "@angular/core";
13
14
  /**
14
- * Structural component which adds its `ng-content` to a top-level workbench DOM element and projects it into this component's bounding box.
15
+ * Projects `ng-content` to a top-level DOM element and aligns it with this component's bounding box.
15
16
  *
16
- * This component ensures that its content children are not reparented in the DOM when the workbench layout is changed.
17
- * For instance, an iframe would reload when it is reparented in the DOM.
17
+ * When this component is moved in the DOM, projected content is not moved in the DOM; only its position and size are changed.
18
+ * For example, an iframe would reload when moved in the DOM.
18
19
  *
19
- * Use this component to wrap the entire content of your component, so `<wb-content-as-overlay>` is the only root view child of your component.
20
- *
21
- * The <ng-content> is added to a CSS grid container with a single column, thus, content fills remaining space vertically and horizontally.
22
- * To style elements of `ng-content`, do not combine CSS selectors with the `:host` CSS pseudo-class because, in the DOM, they are not children
23
- * of the host component.
24
- *
25
- * #### Example HTML template:
20
+ * Style `ng-content` outside the `:host` CSS pseudo-class as not a direct child of this component.
26
21
  *
22
+ * ---
23
+ * Usage:
27
24
  * ```html
28
- * <wb-content-as-overlay overlayHost="...">
25
+ * <wb-content-as-overlay [config]="...">
29
26
  * <iframe [src]="..."></iframe>
30
27
  * </wb-content-as-overlay>
31
28
  * ```
32
29
  *
33
- *
34
- * #### Example SCSS styles:
35
- *
36
30
  * ```scss
37
- * :host {
38
- * display: grid; // fills remaining space vertically and horizontall
39
- * }
40
- *
41
31
  * iframe {
42
32
  * background-color: gray;
43
33
  * }
44
34
  * ```
45
35
  */
46
36
  export class ContentAsOverlayComponent {
37
+ constructor() {
38
+ /**
39
+ * Configures content projection of `ng-content`.
40
+ *
41
+ * A config input is used instead of separate input properties to support updating the config if detached from the Angular change detector.
42
+ */
43
+ this.config = input.required();
44
+ this._template = viewChild.required(TemplateRef);
45
+ this._visible = computed(() => this.config().visible());
46
+ this._location = computed(() => this.config().location());
47
+ this._overlay = signal(undefined);
48
+ this.createOverlay();
49
+ this.alignOverlayToHostBounds();
50
+ }
51
+ /**
52
+ * Creates the overlay for rendering projected content.
53
+ */
54
+ createOverlay() {
55
+ effect(onCleanup => {
56
+ const location = this._location();
57
+ if (!location) {
58
+ return;
59
+ }
60
+ const template = this._template();
61
+ untracked(() => {
62
+ // Create an embedded view from the content template.
63
+ const overlayViewRef = location.createEmbeddedView(template, null);
64
+ overlayViewRef.detectChanges();
65
+ if (overlayViewRef.rootNodes.length !== 1) {
66
+ throw Error(`[ContentAsOverlayError] Expected single root node for content projection, but received ${overlayViewRef.rootNodes.length} root nodes.`);
67
+ }
68
+ const [overlayElement] = overlayViewRef.rootNodes;
69
+ // Position projected content out of the document flow relative to the page viewport.
70
+ setStyle(overlayElement, { position: 'fixed' });
71
+ this._overlay.set(overlayElement);
72
+ // Destroy overlay when the location or template changes.
73
+ onCleanup(() => untracked(() => {
74
+ overlayViewRef.destroy();
75
+ this._overlay.set(undefined);
76
+ }));
77
+ });
78
+ });
79
+ }
80
+ /**
81
+ * Aligns the overlay to the bounding box of this component.
82
+ */
83
+ alignOverlayToHostBounds() {
84
+ const hostBounds = boundingClientRect(inject((ElementRef)));
85
+ effect(() => {
86
+ const overlay = this._overlay();
87
+ if (!overlay) {
88
+ return;
89
+ }
90
+ // Maintain position and size when hidden to prevent flickering when visible again and to support for virtual scrolling in projected content.
91
+ const visible = this._visible();
92
+ if (!visible) {
93
+ setStyle(overlay, { visibility: 'hidden' }); // Hide via `visibility` instead of `display` property to retain the size.
94
+ return;
95
+ }
96
+ // IMPORTANT: Track host bounds only if visible to prevent flickering.
97
+ const { top, left, width, height } = hostBounds();
98
+ setStyle(overlay, {
99
+ top: `${top}px`,
100
+ left: `${left}px`,
101
+ width: `${width}px`,
102
+ height: `${height}px`,
103
+ visibility: null,
104
+ });
105
+ });
106
+ }
47
107
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ContentAsOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ContentAsOverlayComponent, isStandalone: true, selector: "wb-content-as-overlay", inputs: { overlayHost: "overlayHost" }, ngImport: i0, template: "<!-- define the area where to project `ng-content` into -->\n<div wbContentProjection\n [wbContentProjectionContent]=\"ng_content_template\"\n [wbContentProjectionOverlayHost]=\"overlayHost\">\n</div>\n\n<!-- make `ng-content` available in the form of a template -->\n<ng-template #ng_content_template>\n <ng-content></ng-content>\n</ng-template>\n", styles: [":host{display:grid}\n"], dependencies: [{ kind: "directive", type: ContentProjectionDirective, selector: "[wbContentProjection]", inputs: ["wbContentProjectionOverlayHost", "wbContentProjectionContent"] }] }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.2", type: ContentAsOverlayComponent, isStandalone: true, selector: "wb-content-as-overlay", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template>\n <ng-content/>\n</ng-template>\n" }); }
49
109
  }
50
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ContentAsOverlayComponent, decorators: [{
51
111
  type: Component,
52
- args: [{ selector: 'wb-content-as-overlay', standalone: true, imports: [ContentProjectionDirective], template: "<!-- define the area where to project `ng-content` into -->\n<div wbContentProjection\n [wbContentProjectionContent]=\"ng_content_template\"\n [wbContentProjectionOverlayHost]=\"overlayHost\">\n</div>\n\n<!-- make `ng-content` available in the form of a template -->\n<ng-template #ng_content_template>\n <ng-content></ng-content>\n</ng-template>\n", styles: [":host{display:grid}\n"] }]
53
- }], propDecorators: { overlayHost: [{
54
- type: Input,
55
- args: [{ required: true }]
56
- }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1hcy1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2NvbnRlbnQtcHJvamVjdGlvbi9jb250ZW50LWFzLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvY29udGVudC1wcm9qZWN0aW9uL2NvbnRlbnQtYXMtb3ZlcmxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFFMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBUUgsTUFBTSxPQUFPLHlCQUF5Qjs4R0FBekIseUJBQXlCO2tHQUF6Qix5QkFBeUIseUhDckR0Qyx1V0FVQSwrRUR5Q1ksMEJBQTBCOzsyRkFFekIseUJBQXlCO2tCQVByQyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1AsQ0FBQywwQkFBMEIsQ0FBQzs4QkFROUIsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjIgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRlbnRQcm9qZWN0aW9uRGlyZWN0aXZlfSBmcm9tICcuL2NvbnRlbnQtcHJvamVjdGlvbi5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIFN0cnVjdHVyYWwgY29tcG9uZW50IHdoaWNoIGFkZHMgaXRzIGBuZy1jb250ZW50YCB0byBhIHRvcC1sZXZlbCB3b3JrYmVuY2ggRE9NIGVsZW1lbnQgYW5kIHByb2plY3RzIGl0IGludG8gdGhpcyBjb21wb25lbnQncyBib3VuZGluZyBib3guXG4gKlxuICogVGhpcyBjb21wb25lbnQgZW5zdXJlcyB0aGF0IGl0cyBjb250ZW50IGNoaWxkcmVuIGFyZSBub3QgcmVwYXJlbnRlZCBpbiB0aGUgRE9NIHdoZW4gdGhlIHdvcmtiZW5jaCBsYXlvdXQgaXMgY2hhbmdlZC5cbiAqIEZvciBpbnN0YW5jZSwgYW4gaWZyYW1lIHdvdWxkIHJlbG9hZCB3aGVuIGl0IGlzIHJlcGFyZW50ZWQgaW4gdGhlIERPTS5cbiAqXG4gKiBVc2UgdGhpcyBjb21wb25lbnQgdG8gd3JhcCB0aGUgZW50aXJlIGNvbnRlbnQgb2YgeW91ciBjb21wb25lbnQsIHNvIGA8d2ItY29udGVudC1hcy1vdmVybGF5PmAgaXMgdGhlIG9ubHkgcm9vdCB2aWV3IGNoaWxkIG9mIHlvdXIgY29tcG9uZW50LlxuICpcbiAqIFRoZSA8bmctY29udGVudD4gaXMgYWRkZWQgdG8gYSBDU1MgZ3JpZCBjb250YWluZXIgd2l0aCBhIHNpbmdsZSBjb2x1bW4sIHRodXMsIGNvbnRlbnQgZmlsbHMgcmVtYWluaW5nIHNwYWNlIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS5cbiAqIFRvIHN0eWxlIGVsZW1lbnRzIG9mIGBuZy1jb250ZW50YCwgZG8gbm90IGNvbWJpbmUgQ1NTIHNlbGVjdG9ycyB3aXRoIHRoZSBgOmhvc3RgIENTUyBwc2V1ZG8tY2xhc3MgYmVjYXVzZSwgaW4gdGhlIERPTSwgdGhleSBhcmUgbm90IGNoaWxkcmVuXG4gKiBvZiB0aGUgaG9zdCBjb21wb25lbnQuXG4gKlxuICogIyMjIyBFeGFtcGxlIEhUTUwgdGVtcGxhdGU6XG4gKlxuICogYGBgaHRtbFxuICogPHdiLWNvbnRlbnQtYXMtb3ZlcmxheSBvdmVybGF5SG9zdD1cIi4uLlwiPlxuICogICA8aWZyYW1lIFtzcmNdPVwiLi4uXCI+PC9pZnJhbWU+XG4gKiA8L3diLWNvbnRlbnQtYXMtb3ZlcmxheT5cbiAqIGBgYFxuICpcbiAqXG4gKiAjIyMjIEV4YW1wbGUgU0NTUyBzdHlsZXM6XG4gKlxuICogYGBgc2Nzc1xuICogOmhvc3Qge1xuICogICBkaXNwbGF5OiBncmlkOyAvLyBmaWxscyByZW1haW5pbmcgc3BhY2UgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGxcbiAqIH1cbiAqXG4gKiBpZnJhbWUge1xuICogICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5O1xuICogfVxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3diLWNvbnRlbnQtYXMtb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LWFzLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250ZW50LWFzLW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbnRlbnRQcm9qZWN0aW9uRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudEFzT3ZlcmxheUNvbXBvbmVudCB7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgdmlldyBjb250YWluZXIgd2hlcmUgdG8gaW5zZXJ0IHRoZSBvdmVybGF5LlxuICAgKi9cbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pXG4gIHB1YmxpYyBvdmVybGF5SG9zdDogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZCB8IG51bGw7XG59XG4iLCI8IS0tIGRlZmluZSB0aGUgYXJlYSB3aGVyZSB0byBwcm9qZWN0IGBuZy1jb250ZW50YCBpbnRvIC0tPlxuPGRpdiB3YkNvbnRlbnRQcm9qZWN0aW9uXG4gICAgIFt3YkNvbnRlbnRQcm9qZWN0aW9uQ29udGVudF09XCJuZ19jb250ZW50X3RlbXBsYXRlXCJcbiAgICAgW3diQ29udGVudFByb2plY3Rpb25PdmVybGF5SG9zdF09XCJvdmVybGF5SG9zdFwiPlxuPC9kaXY+XG5cbjwhLS0gbWFrZSBgbmctY29udGVudGAgYXZhaWxhYmxlIGluIHRoZSBmb3JtIG9mIGEgdGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI25nX2NvbnRlbnRfdGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
112
+ args: [{ selector: 'wb-content-as-overlay', standalone: true, template: "<ng-template>\n <ng-content/>\n</ng-template>\n" }]
113
+ }], ctorParameters: () => [] });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1hcy1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2NvbnRlbnQtcHJvamVjdGlvbi9jb250ZW50LWFzLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvY29udGVudC1wcm9qZWN0aW9uL2NvbnRlbnQtYXMtb3ZlcmxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzFKLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQU1ILE1BQU0sT0FBTyx5QkFBeUI7SUFjcEM7UUFaQTs7OztXQUlHO1FBQ0ksV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTBCLENBQUM7UUFFeEMsY0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRCxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELGFBQVEsR0FBRyxNQUFNLENBQTBCLFNBQVMsQ0FBQyxDQUFDO1FBR3JFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRWxDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IscURBQXFEO2dCQUNyRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuRSxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzFDLE1BQU0sS0FBSyxDQUFDLDBGQUEwRixjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sY0FBYyxDQUFDLENBQUM7Z0JBQ3ZKLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUM7Z0JBRWxELHFGQUFxRjtnQkFDckYsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFFbEMseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDN0IsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDOUIsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUEsVUFBdUIsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUV2RSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPO1lBQ1QsQ0FBQztZQUVELDZJQUE2STtZQUM3SSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDLDBFQUEwRTtnQkFDckgsT0FBTztZQUNULENBQUM7WUFFRCxzRUFBc0U7WUFDdEUsTUFBTSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQ2hELFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSTtnQkFDZixJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSTtnQkFDbkIsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJO2dCQUNyQixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBbkZVLHlCQUF5QjtrR0FBekIseUJBQXlCLGtRQVNZLFdBQVcsZ0VDbEQ3RCxrREFHQTs7MkZEc0NhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUIsY0FFckIsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIHNpZ25hbCwgU2lnbmFsLCBUZW1wbGF0ZVJlZiwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtzZXRTdHlsZX0gZnJvbSAnLi4vY29tbW9uL2RvbS51dGlsJztcbmltcG9ydCB7Ym91bmRpbmdDbGllbnRSZWN0fSBmcm9tICdAc2Npb24vY29tcG9uZW50cy9kaW1lbnNpb24nO1xuXG4vKipcbiAqIFByb2plY3RzIGBuZy1jb250ZW50YCB0byBhIHRvcC1sZXZlbCBET00gZWxlbWVudCBhbmQgYWxpZ25zIGl0IHdpdGggdGhpcyBjb21wb25lbnQncyBib3VuZGluZyBib3guXG4gKlxuICogV2hlbiB0aGlzIGNvbXBvbmVudCBpcyBtb3ZlZCBpbiB0aGUgRE9NLCBwcm9qZWN0ZWQgY29udGVudCBpcyBub3QgbW92ZWQgaW4gdGhlIERPTTsgb25seSBpdHMgcG9zaXRpb24gYW5kIHNpemUgYXJlIGNoYW5nZWQuXG4gKiBGb3IgZXhhbXBsZSwgYW4gaWZyYW1lIHdvdWxkIHJlbG9hZCB3aGVuIG1vdmVkIGluIHRoZSBET00uXG4gKlxuICogU3R5bGUgYG5nLWNvbnRlbnRgIG91dHNpZGUgdGhlIGA6aG9zdGAgQ1NTIHBzZXVkby1jbGFzcyBhcyBub3QgYSBkaXJlY3QgY2hpbGQgb2YgdGhpcyBjb21wb25lbnQuXG4gKlxuICogLS0tXG4gKiBVc2FnZTpcbiAqIGBgYGh0bWxcbiAqIDx3Yi1jb250ZW50LWFzLW92ZXJsYXkgW2NvbmZpZ109XCIuLi5cIj5cbiAqICAgPGlmcmFtZSBbc3JjXT1cIi4uLlwiPjwvaWZyYW1lPlxuICogPC93Yi1jb250ZW50LWFzLW92ZXJsYXk+XG4gKiBgYGBcbiAqXG4gKiBgYGBzY3NzXG4gKiBpZnJhbWUge1xuICogICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5O1xuICogfVxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3diLWNvbnRlbnQtYXMtb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LWFzLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50QXNPdmVybGF5Q29tcG9uZW50IHtcblxuICAvKipcbiAgICogQ29uZmlndXJlcyBjb250ZW50IHByb2plY3Rpb24gb2YgYG5nLWNvbnRlbnRgLlxuICAgKlxuICAgKiBBIGNvbmZpZyBpbnB1dCBpcyB1c2VkIGluc3RlYWQgb2Ygc2VwYXJhdGUgaW5wdXQgcHJvcGVydGllcyB0byBzdXBwb3J0IHVwZGF0aW5nIHRoZSBjb25maWcgaWYgZGV0YWNoZWQgZnJvbSB0aGUgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0b3IuXG4gICAqL1xuICBwdWJsaWMgY29uZmlnID0gaW5wdXQucmVxdWlyZWQ8Q29udGVudEFzT3ZlcmxheUNvbmZpZz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90ZW1wbGF0ZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChUZW1wbGF0ZVJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Zpc2libGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnZpc2libGUoKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvY2F0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5sb2NhdGlvbigpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheSA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcbiAgICB0aGlzLmFsaWduT3ZlcmxheVRvSG9zdEJvdW5kcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG92ZXJsYXkgZm9yIHJlbmRlcmluZyBwcm9qZWN0ZWQgY29udGVudC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICBlZmZlY3Qob25DbGVhbnVwID0+IHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5fbG9jYXRpb24oKTtcbiAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuX3RlbXBsYXRlKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIC8vIENyZWF0ZSBhbiBlbWJlZGRlZCB2aWV3IGZyb20gdGhlIGNvbnRlbnQgdGVtcGxhdGUuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlWaWV3UmVmID0gbG9jYXRpb24uY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlLCBudWxsKTtcbiAgICAgICAgb3ZlcmxheVZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAob3ZlcmxheVZpZXdSZWYucm9vdE5vZGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBbQ29udGVudEFzT3ZlcmxheUVycm9yXSBFeHBlY3RlZCBzaW5nbGUgcm9vdCBub2RlIGZvciBjb250ZW50IHByb2plY3Rpb24sIGJ1dCByZWNlaXZlZCAke292ZXJsYXlWaWV3UmVmLnJvb3ROb2Rlcy5sZW5ndGh9IHJvb3Qgbm9kZXMuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW292ZXJsYXlFbGVtZW50XSA9IG92ZXJsYXlWaWV3UmVmLnJvb3ROb2RlcztcblxuICAgICAgICAvLyBQb3NpdGlvbiBwcm9qZWN0ZWQgY29udGVudCBvdXQgb2YgdGhlIGRvY3VtZW50IGZsb3cgcmVsYXRpdmUgdG8gdGhlIHBhZ2Ugdmlld3BvcnQuXG4gICAgICAgIHNldFN0eWxlKG92ZXJsYXlFbGVtZW50LCB7cG9zaXRpb246ICdmaXhlZCd9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5LnNldChvdmVybGF5RWxlbWVudCk7XG5cbiAgICAgICAgLy8gRGVzdHJveSBvdmVybGF5IHdoZW4gdGhlIGxvY2F0aW9uIG9yIHRlbXBsYXRlIGNoYW5nZXMuXG4gICAgICAgIG9uQ2xlYW51cCgoKSA9PiB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIG92ZXJsYXlWaWV3UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICB0aGlzLl9vdmVybGF5LnNldCh1bmRlZmluZWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGlnbnMgdGhlIG92ZXJsYXkgdG8gdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHByaXZhdGUgYWxpZ25PdmVybGF5VG9Ib3N0Qm91bmRzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhvc3RCb3VuZHMgPSBib3VuZGluZ0NsaWVudFJlY3QoaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuX292ZXJsYXkoKTtcbiAgICAgIGlmICghb3ZlcmxheSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE1haW50YWluIHBvc2l0aW9uIGFuZCBzaXplIHdoZW4gaGlkZGVuIHRvIHByZXZlbnQgZmxpY2tlcmluZyB3aGVuIHZpc2libGUgYWdhaW4gYW5kIHRvIHN1cHBvcnQgZm9yIHZpcnR1YWwgc2Nyb2xsaW5nIGluIHByb2plY3RlZCBjb250ZW50LlxuICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuX3Zpc2libGUoKTtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICBzZXRTdHlsZShvdmVybGF5LCB7dmlzaWJpbGl0eTogJ2hpZGRlbid9KTsgLy8gSGlkZSB2aWEgYHZpc2liaWxpdHlgIGluc3RlYWQgb2YgYGRpc3BsYXlgIHByb3BlcnR5IHRvIHJldGFpbiB0aGUgc2l6ZS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJTVBPUlRBTlQ6IFRyYWNrIGhvc3QgYm91bmRzIG9ubHkgaWYgdmlzaWJsZSB0byBwcmV2ZW50IGZsaWNrZXJpbmcuXG4gICAgICBjb25zdCB7dG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0fSA9IGhvc3RCb3VuZHMoKTtcbiAgICAgIHNldFN0eWxlKG92ZXJsYXksIHtcbiAgICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtsZWZ0fXB4YCxcbiAgICAgICAgd2lkdGg6IGAke3dpZHRofXB4YCxcbiAgICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgLFxuICAgICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIGNvbnRlbnQgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50QXNPdmVybGF5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbG9jYXRpb24gd2hlcmUgdG8gYXR0YWNoIHByb2plY3RlZCBjb250ZW50IGluIHRoZSBET00uXG4gICAqL1xuICBsb2NhdGlvbjogU2lnbmFsPFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHByb2plY3RlZCBjb250ZW50LlxuICAgKi9cbiAgdmlzaWJsZTogU2lnbmFsPGJvb2xlYW4+O1xufVxuIiwiPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudC8+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,32 @@
1
+ /*
2
+ * Copyright (c) 2018-2024 Swiss Federal Railways
3
+ *
4
+ * This program and the accompanying materials are made
5
+ * available under the terms of the Eclipse Public License 2.0
6
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ */
10
+ import { InjectionToken, signal } from '@angular/core';
11
+ /**
12
+ * DI token to inject the DOM location where to attach iframes.
13
+ */
14
+ export const IFRAME_OVERLAY_HOST = new InjectionToken('IFRAME_OVERLAY_HOST', {
15
+ providedIn: 'root',
16
+ factory: () => signal(undefined),
17
+ });
18
+ /**
19
+ * DI token to inject the DOM location where to attach the visual placeholder when dragging a view over a drop zone.
20
+ */
21
+ export const VIEW_DROP_ZONE_OVERLAY_HOST = new InjectionToken('VIEW_DROP_ZONE_OVERLAY_HOST', {
22
+ providedIn: 'root',
23
+ factory: () => signal(undefined),
24
+ });
25
+ /**
26
+ * DI token to inject the DOM location of the {@link WorkbenchComponent} HTML element.
27
+ */
28
+ export const WORKBENCH_ELEMENT_REF = new InjectionToken('WORKBENCH_ELEMENT_REF', {
29
+ providedIn: 'root',
30
+ factory: () => signal(undefined),
31
+ });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLWVsZW1lbnQtcmVmZXJlbmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2NvbnRlbnQtcHJvamVjdGlvbi93b3JrYmVuY2gtZWxlbWVudC1yZWZlcmVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLGNBQWMsRUFBRSxNQUFNLEVBQW1DLE1BQU0sZUFBZSxDQUFDO0FBRXZGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQStDLHFCQUFxQixFQUFFO0lBQ3pILFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0NBQ2pDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQStDLDZCQUE2QixFQUFFO0lBQ3pJLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0NBQ2pDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQStDLHVCQUF1QixFQUFFO0lBQzdILFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0NBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyNCBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgc2lnbmFsLCBWaWV3Q29udGFpbmVyUmVmLCBXcml0YWJsZVNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogREkgdG9rZW4gdG8gaW5qZWN0IHRoZSBET00gbG9jYXRpb24gd2hlcmUgdG8gYXR0YWNoIGlmcmFtZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBJRlJBTUVfT1ZFUkxBWV9IT1NUID0gbmV3IEluamVjdGlvblRva2VuPFdyaXRhYmxlU2lnbmFsPFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ+PignSUZSQU1FX09WRVJMQVlfSE9TVCcsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBzaWduYWwodW5kZWZpbmVkKSxcbn0pO1xuXG4vKipcbiAqIERJIHRva2VuIHRvIGluamVjdCB0aGUgRE9NIGxvY2F0aW9uIHdoZXJlIHRvIGF0dGFjaCB0aGUgdmlzdWFsIHBsYWNlaG9sZGVyIHdoZW4gZHJhZ2dpbmcgYSB2aWV3IG92ZXIgYSBkcm9wIHpvbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBWSUVXX0RST1BfWk9ORV9PVkVSTEFZX0hPU1QgPSBuZXcgSW5qZWN0aW9uVG9rZW48V3JpdGFibGVTaWduYWw8Vmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZD4+KCdWSUVXX0RST1BfWk9ORV9PVkVSTEFZX0hPU1QnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gc2lnbmFsKHVuZGVmaW5lZCksXG59KTtcblxuLyoqXG4gKiBESSB0b2tlbiB0byBpbmplY3QgdGhlIERPTSBsb2NhdGlvbiBvZiB0aGUge0BsaW5rIFdvcmtiZW5jaENvbXBvbmVudH0gSFRNTCBlbGVtZW50LlxuICovXG5leHBvcnQgY29uc3QgV09SS0JFTkNIX0VMRU1FTlRfUkVGID0gbmV3IEluamVjdGlvblRva2VuPFdyaXRhYmxlU2lnbmFsPFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ+PignV09SS0JFTkNIX0VMRU1FTlRfUkVGJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHNpZ25hbCh1bmRlZmluZWQpLFxufSk7XG4iXX0=
@@ -8,8 +8,6 @@
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
10
  import { Component } from '@angular/core';
11
- import { AsyncPipe } from '@angular/common';
12
- import { CoerceObservablePipe } from '../../common/coerce-observable.pipe';
13
11
  import * as i0 from "@angular/core";
14
12
  import * as i1 from "../\u0275workbench-dialog";
15
13
  /**
@@ -26,13 +24,10 @@ export class DialogHeaderComponent {
26
24
  event.stopPropagation(); // Prevent dragging the dialog with the close button.
27
25
  }
28
26
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogHeaderComponent, deps: [{ token: i1.ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: DialogHeaderComponent, isStandalone: true, selector: "wb-dialog-header", ngImport: i0, template: "@if (dialog.title | wbCoerceObservable$ | async; as title) {\n <div class=\"title e2e-title\">\n <span>{{ title }}</span>\n </div>\n}\n\n@if (dialog.closable) {\n <button tabindex=\"-1\" class=\"close scion-workbench-icons e2e-close\"\n (mousedown)=\"onCloseMouseDown($event)\"\n (click)=\"onCloseClick()\">\n close\n </button>\n}\n", styles: [":host{display:flex;gap:var(--sci-workbench-dialog-padding);place-content:flex-end;padding-inline:var(--sci-workbench-dialog-padding);background-color:var(--sci-workbench-dialog-header-background-color);-webkit-user-select:none;user-select:none;height:var(--sci-workbench-dialog-header-height)}:host>div.title{flex:auto;display:flex;align-items:center;position:relative}:host>div.title>span{position:absolute;left:0;right:0;line-height:1.5;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-family:var(--sci-workbench-dialog-title-font-family);font-size:var(--sci-workbench-dialog-title-font-size);font-weight:var(--sci-workbench-dialog-title-font-weight);text-align:var(--sci-workbench-dialog-title-align)}:host>button.close{all:unset;flex:none;cursor:pointer;align-self:center}:host>button.close:not(:hover){opacity:.75}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: CoerceObservablePipe, name: "wbCoerceObservable$" }] }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: DialogHeaderComponent, isStandalone: true, selector: "wb-dialog-header", ngImport: i0, template: "@if (dialog.title(); as title) {\n <div class=\"title e2e-title\">\n <span>{{title}}</span>\n </div>\n}\n\n@if (dialog.closable()) {\n <button tabindex=\"-1\" class=\"close scion-workbench-icons e2e-close\"\n (mousedown)=\"onCloseMouseDown($event)\"\n (click)=\"onCloseClick()\">\n close\n </button>\n}\n", styles: [":host{display:flex;gap:var(--sci-workbench-dialog-padding);place-content:flex-end;padding-inline:var(--sci-workbench-dialog-padding);background-color:var(--sci-workbench-dialog-header-background-color);-webkit-user-select:none;user-select:none;height:var(--sci-workbench-dialog-header-height)}:host>div.title{flex:auto;display:flex;align-items:center;position:relative}:host>div.title>span{position:absolute;left:0;right:0;line-height:1.5;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-family:var(--sci-workbench-dialog-title-font-family);font-size:var(--sci-workbench-dialog-title-font-size);font-weight:var(--sci-workbench-dialog-title-font-weight);text-align:var(--sci-workbench-dialog-title-align)}:host>button.close{all:unset;flex:none;cursor:pointer;align-self:center}:host>button.close:not(:hover){opacity:.75}\n"] }); }
30
28
  }
31
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogHeaderComponent, decorators: [{
32
30
  type: Component,
33
- args: [{ selector: 'wb-dialog-header', standalone: true, imports: [
34
- AsyncPipe,
35
- CoerceObservablePipe,
36
- ], template: "@if (dialog.title | wbCoerceObservable$ | async; as title) {\n <div class=\"title e2e-title\">\n <span>{{ title }}</span>\n </div>\n}\n\n@if (dialog.closable) {\n <button tabindex=\"-1\" class=\"close scion-workbench-icons e2e-close\"\n (mousedown)=\"onCloseMouseDown($event)\"\n (click)=\"onCloseClick()\">\n close\n </button>\n}\n", styles: [":host{display:flex;gap:var(--sci-workbench-dialog-padding);place-content:flex-end;padding-inline:var(--sci-workbench-dialog-padding);background-color:var(--sci-workbench-dialog-header-background-color);-webkit-user-select:none;user-select:none;height:var(--sci-workbench-dialog-header-height)}:host>div.title{flex:auto;display:flex;align-items:center;position:relative}:host>div.title>span{position:absolute;left:0;right:0;line-height:1.5;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-family:var(--sci-workbench-dialog-title-font-family);font-size:var(--sci-workbench-dialog-title-font-size);font-weight:var(--sci-workbench-dialog-title-font-weight);text-align:var(--sci-workbench-dialog-title-align)}:host>button.close{all:unset;flex:none;cursor:pointer;align-self:center}:host>button.close:not(:hover){opacity:.75}\n"] }]
31
+ args: [{ selector: 'wb-dialog-header', standalone: true, template: "@if (dialog.title(); as title) {\n <div class=\"title e2e-title\">\n <span>{{title}}</span>\n </div>\n}\n\n@if (dialog.closable()) {\n <button tabindex=\"-1\" class=\"close scion-workbench-icons e2e-close\"\n (mousedown)=\"onCloseMouseDown($event)\"\n (click)=\"onCloseClick()\">\n close\n </button>\n}\n", styles: [":host{display:flex;gap:var(--sci-workbench-dialog-padding);place-content:flex-end;padding-inline:var(--sci-workbench-dialog-padding);background-color:var(--sci-workbench-dialog-header-background-color);-webkit-user-select:none;user-select:none;height:var(--sci-workbench-dialog-header-height)}:host>div.title{flex:auto;display:flex;align-items:center;position:relative}:host>div.title>span{position:absolute;left:0;right:0;line-height:1.5;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-family:var(--sci-workbench-dialog-title-font-family);font-size:var(--sci-workbench-dialog-title-font-size);font-weight:var(--sci-workbench-dialog-title-font-weight);text-align:var(--sci-workbench-dialog-title-align)}:host>button.close{all:unset;flex:none;cursor:pointer;align-self:center}:host>button.close:not(:hover){opacity:.75}\n"] }]
37
32
  }], ctorParameters: () => [{ type: i1.ɵWorkbenchDialog }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLWhlYWRlci9kaWFsb2ctaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2RpYWxvZy9kaWFsb2ctaGVhZGVyL2RpYWxvZy1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3pFOztHQUVHO0FBV0gsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUFzQixNQUF3QjtRQUF4QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtJQUM5QyxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxLQUFZO1FBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLHFEQUFxRDtJQUNoRixDQUFDOzhHQVhVLHFCQUFxQjtrR0FBckIscUJBQXFCLDRFQzVCbEMsMFdBYUEsdzNCRFdJLFNBQVMseUNBQ1Qsb0JBQW9COzsyRkFHWCxxQkFBcUI7a0JBVmpDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBR2hCLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULG9CQUFvQjtxQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDb2VyY2VPYnNlcnZhYmxlUGlwZX0gZnJvbSAnLi4vLi4vY29tbW9uL2NvZXJjZS1vYnNlcnZhYmxlLnBpcGUnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaERpYWxvZ30gZnJvbSAnLi4vybV3b3JrYmVuY2gtZGlhbG9nJztcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBkaWFsb2cgaGVhZGVyIHdpdGggYSBjbG9zZSBidXR0b24gYW5kIG9wdGlvbmFsIHRpdGxlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3Yi1kaWFsb2ctaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2ctaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgQ29lcmNlT2JzZXJ2YWJsZVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0hlYWRlckNvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGRpYWxvZzogybVXb3JrYmVuY2hEaWFsb2cpIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNsb3NlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2cuY2xvc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNsb3NlTW91c2VEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBQcmV2ZW50IGRyYWdnaW5nIHRoZSBkaWFsb2cgd2l0aCB0aGUgY2xvc2UgYnV0dG9uLlxuICB9XG59XG4iLCJAaWYgKGRpYWxvZy50aXRsZSB8IHdiQ29lcmNlT2JzZXJ2YWJsZSQgfCBhc3luYzsgYXMgdGl0bGUpIHtcbiAgPGRpdiBjbGFzcz1cInRpdGxlIGUyZS10aXRsZVwiPlxuICAgIDxzcGFuPnt7IHRpdGxlIH19PC9zcGFuPlxuICA8L2Rpdj5cbn1cblxuQGlmIChkaWFsb2cuY2xvc2FibGUpIHtcbiAgPGJ1dHRvbiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJjbG9zZSBzY2lvbi13b3JrYmVuY2gtaWNvbnMgZTJlLWNsb3NlXCJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIm9uQ2xvc2VNb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCI+XG4gICAgY2xvc2VcbiAgPC9idXR0b24+XG59XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLWhlYWRlci9kaWFsb2ctaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2RpYWxvZy9kaWFsb2ctaGVhZGVyL2RpYWxvZy1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7QUFHeEM7O0dBRUc7QUFPSCxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQXNCLE1BQXdCO1FBQXhCLFdBQU0sR0FBTixNQUFNLENBQWtCO0lBQzlDLENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVTLGdCQUFnQixDQUFDLEtBQVk7UUFDckMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMscURBQXFEO0lBQ2hGLENBQUM7OEdBWFUscUJBQXFCO2tHQUFyQixxQkFBcUIsNEVDdEJsQyw4VUFhQTs7MkZEU2EscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLGtCQUFrQixjQUdoQixJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIzIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge8m1V29ya2JlbmNoRGlhbG9nfSBmcm9tICcuLi/JtXdvcmtiZW5jaC1kaWFsb2cnO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRpYWxvZyBoZWFkZXIgd2l0aCBhIGNsb3NlIGJ1dHRvbiBhbmQgb3B0aW9uYWwgdGl0bGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3diLWRpYWxvZy1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RpYWxvZy1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nSGVhZGVyQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZGlhbG9nOiDJtVdvcmtiZW5jaERpYWxvZykge1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZy5jbG9zZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2xvc2VNb3VzZURvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIFByZXZlbnQgZHJhZ2dpbmcgdGhlIGRpYWxvZyB3aXRoIHRoZSBjbG9zZSBidXR0b24uXG4gIH1cbn1cbiIsIkBpZiAoZGlhbG9nLnRpdGxlKCk7IGFzIHRpdGxlKSB7XG4gIDxkaXYgY2xhc3M9XCJ0aXRsZSBlMmUtdGl0bGVcIj5cbiAgICA8c3Bhbj57e3RpdGxlfX08L3NwYW4+XG4gIDwvZGl2PlxufVxuXG5AaWYgKGRpYWxvZy5jbG9zYWJsZSgpKSB7XG4gIDxidXR0b24gdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwiY2xvc2Ugc2Npb24td29ya2JlbmNoLWljb25zIGUyZS1jbG9zZVwiXG4gICAgICAgICAgKG1vdXNlZG93bik9XCJvbkNsb3NlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlQ2xpY2soKVwiPlxuICAgIGNsb3NlXG4gIDwvYnV0dG9uPlxufVxuIl19