@scion/workbench 17.0.0-beta.8 → 18.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/esm2022/lib/activation-instant.provider.mjs +3 -3
  2. package/esm2022/lib/common/asserts.util.mjs +1 -1
  3. package/esm2022/lib/common/coerce-observable.pipe.mjs +3 -3
  4. package/esm2022/lib/common/dom.util.mjs +1 -1
  5. package/esm2022/lib/common/filter-by-predicate.pipe.mjs +3 -3
  6. package/esm2022/lib/common/filter-by-text.pipe.mjs +3 -3
  7. package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +4 -4
  8. package/esm2022/lib/common/instanceof.pipe.mjs +3 -3
  9. package/esm2022/lib/common/map-coerce.pipe.mjs +3 -3
  10. package/esm2022/lib/common/null-if-empty.pipe.mjs +4 -4
  11. package/esm2022/lib/common/observables.mjs +1 -1
  12. package/esm2022/lib/common/stringify-error.util.mjs +1 -1
  13. package/esm2022/lib/common/typeof.pipe.mjs +3 -3
  14. package/esm2022/lib/common//311/265destroy-ref.mjs +1 -1
  15. package/esm2022/lib/content-projection/content-as-overlay.component.mjs +3 -3
  16. package/esm2022/lib/content-projection/content-projection.directive.mjs +4 -4
  17. package/esm2022/lib/content-projection/view-container.reference.mjs +1 -1
  18. package/esm2022/lib/dialog/dialog-footer/dialog-action-filter.pipe.mjs +3 -3
  19. package/esm2022/lib/dialog/dialog-footer/dialog-footer.component.mjs +3 -3
  20. package/esm2022/lib/dialog/dialog-footer/workbench-dialog-action.directive.mjs +9 -6
  21. package/esm2022/lib/dialog/dialog-footer/workbench-dialog-footer.directive.mjs +9 -6
  22. package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +3 -3
  23. package/esm2022/lib/dialog/dialog-header/workbench-dialog-header.directive.mjs +9 -6
  24. package/esm2022/lib/dialog/movable.directive.mjs +4 -4
  25. package/esm2022/lib/dialog/resizable.directive.mjs +4 -4
  26. package/esm2022/lib/dialog/workbench-dialog.component.mjs +53 -24
  27. package/esm2022/lib/dialog/workbench-dialog.registry.mjs +4 -4
  28. package/esm2022/lib/dialog/workbench-dialog.service.mjs +3 -3
  29. package/esm2022/lib/dialog//311/265workbench-dialog.mjs +2 -2
  30. package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +4 -4
  31. package/esm2022/lib/executor/single-task-executor.mjs +26 -7
  32. package/esm2022/lib/filter-field/filter-field.component.mjs +4 -4
  33. package/esm2022/lib/glass-pane/glass-pane.directive.mjs +15 -7
  34. package/esm2022/lib/layout/grid-element/grid-element.component.mjs +4 -4
  35. package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +3 -3
  36. package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +4 -4
  37. package/esm2022/lib/layout/migration/workbench-layout-migration-v4.service.mjs +4 -4
  38. package/esm2022/lib/layout/workbench-layout.component.mjs +3 -3
  39. package/esm2022/lib/layout/workbench-layout.factory.mjs +3 -3
  40. package/esm2022/lib/layout/workbench-layout.service.mjs +3 -3
  41. package/esm2022/lib/layout/workbench-layouts.util.mjs +1 -1
  42. package/esm2022/lib/layout/workench-layout-serializer.service.mjs +4 -6
  43. package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +3 -3
  44. package/esm2022/lib/layout//311/265workbench-layout.mjs +7 -7
  45. package/esm2022/lib/logging/console-appender.service.mjs +4 -4
  46. package/esm2022/lib/logging/logger.mjs +3 -3
  47. package/esm2022/lib/logging/logging.model.mjs +3 -3
  48. package/esm2022/lib/logging//311/265logger.mjs +4 -4
  49. package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +4 -4
  50. package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +3 -3
  51. package/esm2022/lib/message-box/workbench-message-box.component.mjs +15 -6
  52. package/esm2022/lib/message-box/workbench-message-box.service.mjs +3 -3
  53. package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +4 -4
  54. package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +1 -1
  55. package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +26 -13
  56. package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +3 -3
  57. package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +25 -13
  58. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +4 -4
  59. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.mjs +11 -11
  60. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +5 -5
  61. package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +9 -7
  62. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +112 -0
  63. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +43 -0
  64. package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +11 -9
  65. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +34 -0
  66. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.mjs +88 -0
  67. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.mjs +32 -0
  68. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +121 -0
  69. package/esm2022/lib/microfrontend-platform/microfrontend-notification/microfrontend-notification-intent-handler.service.mjs +3 -3
  70. package/esm2022/lib/microfrontend-platform/microfrontend-platform-config-loader.mjs +3 -3
  71. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +4 -4
  72. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +9 -6
  73. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +9 -15
  74. package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +3 -3
  75. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +4 -4
  76. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +16 -9
  77. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +4 -4
  78. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +4 -4
  79. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +4 -4
  80. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +1 -1
  81. package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +43 -14
  82. package/esm2022/lib/migration/workbench-migrator.mjs +1 -1
  83. package/esm2022/lib/notification/notification-css-classes.pipe.mjs +3 -3
  84. package/esm2022/lib/notification/notification-list.component.mjs +3 -3
  85. package/esm2022/lib/notification/notification.component.mjs +4 -4
  86. package/esm2022/lib/notification/notification.service.mjs +4 -4
  87. package/esm2022/lib/notification/text-notification.component.mjs +3 -3
  88. package/esm2022/lib/notification//311/265notification.mjs +1 -1
  89. package/esm2022/lib/page-not-found/format-url.pipe.mjs +3 -3
  90. package/esm2022/lib/page-not-found/page-not-found.component.mjs +3 -3
  91. package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +3 -3
  92. package/esm2022/lib/part/part-action-bar/part-action-filter.pipe.mjs +3 -3
  93. package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +4 -4
  94. package/esm2022/lib/part/part-bar/part-bar.component.mjs +4 -4
  95. package/esm2022/lib/part/part-portal.pipe.mjs +4 -4
  96. package/esm2022/lib/part/part.component.mjs +3 -3
  97. package/esm2022/lib/part/view-context-menu/accelerator-format.pipe.mjs +4 -4
  98. package/esm2022/lib/part/view-context-menu/text.component.mjs +3 -3
  99. package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +4 -4
  100. package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +4 -4
  101. package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +4 -4
  102. package/esm2022/lib/part/view-list/view-list.component.mjs +3 -3
  103. package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +4 -4
  104. package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +3 -3
  105. package/esm2022/lib/part/view-tab/view-tab.component.mjs +4 -4
  106. package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +3 -3
  107. package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +3 -3
  108. package/esm2022/lib/part/workbench-part-action.registry.mjs +3 -3
  109. package/esm2022/lib/part/workbench-part.registry.mjs +3 -3
  110. package/esm2022/lib/part//311/265workbench-part.model.mjs +1 -1
  111. package/esm2022/lib/perspective/migration/workbench-perspective-migration-v2.service.mjs +4 -4
  112. package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +4 -4
  113. package/esm2022/lib/perspective/workbench-perspective-storage.service.mjs +4 -4
  114. package/esm2022/lib/perspective/workbench-perspective-view-conflict-resolver.service.mjs +4 -4
  115. package/esm2022/lib/perspective/workbench-perspective.registry.mjs +3 -3
  116. package/esm2022/lib/perspective/workbench-perspective.service.mjs +4 -4
  117. package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +4 -4
  118. package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +1 -1
  119. package/esm2022/lib/popup/popup.component.mjs +22 -10
  120. package/esm2022/lib/popup/popup.config.mjs +3 -1
  121. package/esm2022/lib/popup/popup.service.mjs +4 -4
  122. package/esm2022/lib/portal/wb-component-portal.mjs +1 -1
  123. package/esm2022/lib/portal/workbench-portal-outlet.directive.mjs +4 -4
  124. package/esm2022/lib/registry/workbench-object-registry.mjs +1 -1
  125. package/esm2022/lib/routing/empty-outlet/empty-outlet.component.mjs +3 -3
  126. package/esm2022/lib/routing/router.util.mjs +8 -2
  127. package/esm2022/lib/routing/routing.model.mjs +1 -1
  128. package/esm2022/lib/routing/url-segment-matcher.mjs +1 -1
  129. package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +4 -4
  130. package/esm2022/lib/routing/workbench-dialog-differ.mjs +5 -5
  131. package/esm2022/lib/routing/workbench-layout-differ.mjs +3 -3
  132. package/esm2022/lib/routing/workbench-message-box-differ.mjs +51 -0
  133. package/esm2022/lib/routing/workbench-popup-differ.mjs +3 -3
  134. package/esm2022/lib/routing/workbench-router-link.directive.mjs +5 -5
  135. package/esm2022/lib/routing/workbench-router.service.mjs +3 -3
  136. package/esm2022/lib/routing/workbench-url-observer.service.mjs +52 -69
  137. package/esm2022/lib/routing//311/265location.mjs +3 -3
  138. package/esm2022/lib/routing//311/265workbench-router.service.mjs +9 -12
  139. package/esm2022/lib/startup/splash/splash.component.mjs +3 -3
  140. package/esm2022/lib/startup/workbench-initializer.mjs +1 -1
  141. package/esm2022/lib/startup/workbench-launcher.service.mjs +7 -7
  142. package/esm2022/lib/storage/workbench-storage.mjs +3 -3
  143. package/esm2022/lib/testing/workbench-testing.module.mjs +4 -4
  144. package/esm2022/lib/testing/workbench.provider.mjs +3 -3
  145. package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +4 -4
  146. package/esm2022/lib/view/view-move-handler.service.mjs +4 -4
  147. package/esm2022/lib/view/view-portal.pipe.mjs +4 -4
  148. package/esm2022/lib/view/view.component.mjs +17 -10
  149. package/esm2022/lib/view/workbench-view-route-guards.mjs +1 -1
  150. package/esm2022/lib/view/workbench-view.registry.mjs +3 -3
  151. package/esm2022/lib/view//311/265workbench-view.model.mjs +1 -1
  152. package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +1 -1
  153. package/esm2022/lib/view-dnd/requires-drop-zone.pipe.mjs +4 -4
  154. package/esm2022/lib/view-dnd/view-drag.service.mjs +4 -4
  155. package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +3 -3
  156. package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +4 -4
  157. package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +5 -5
  158. package/esm2022/lib/workbench.component.mjs +10 -6
  159. package/esm2022/lib/workbench.constants.mjs +5 -1
  160. package/esm2022/lib/workbench.module.mjs +4 -4
  161. package/esm2022/lib/workbench.provider.mjs +1 -1
  162. package/esm2022/lib/workbench.service.mjs +3 -3
  163. package/esm2022/lib//311/265workbench.service.mjs +3 -3
  164. package/fesm2022/scion-workbench.mjs +1179 -714
  165. package/fesm2022/scion-workbench.mjs.map +1 -1
  166. package/lib/common/objects.util.d.ts +2 -2
  167. package/lib/dialog/workbench-dialog.component.d.ts +16 -7
  168. package/lib/executor/single-task-executor.d.ts +6 -1
  169. package/lib/glass-pane/glass-pane.directive.d.ts +21 -0
  170. package/lib/message-box/workbench-message-box.component.d.ts +3 -0
  171. package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +7 -1
  172. package/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.d.ts +1 -0
  173. package/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.d.ts +39 -0
  174. package/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.d.ts +25 -0
  175. package/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.d.ts +3 -2
  176. package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.d.ts +10 -0
  177. package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.d.ts +28 -0
  178. package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.d.ts +11 -0
  179. package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.d.ts +48 -0
  180. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +3 -7
  181. package/lib/microfrontend-platform/workbench-microfrontend-support.d.ts +1 -1
  182. package/lib/popup/popup.component.d.ts +1 -0
  183. package/lib/routing/router.util.d.ts +4 -0
  184. package/lib/routing/workbench-message-box-differ.d.ts +25 -0
  185. package/lib/routing/workbench-url-observer.service.d.ts +7 -25
  186. package/lib/routing//311/265workbench-router.service.d.ts +3 -4
  187. package/lib/workbench.constants.d.ts +4 -0
  188. package/package.json +10 -10
  189. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v1.model.mjs +0 -11
  190. package/esm2022/lib/layout/migration/workbench-layout-migration-v2.service.mjs +0 -59
  191. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.service.mjs +0 -46
  192. package/lib/layout/migration/model/workbench-layout-migration-v1.model.d.ts +0 -16
  193. package/lib/layout/migration/workbench-layout-migration-v2.service.d.ts +0 -13
  194. package/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.service.d.ts +0 -17
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Component, ChangeDetectionStrategy, Injectable, Inject, Optional, makeEnvironmentProviders, Pipe, NgZone, inject, runInInjectionContext, HostBinding, Input, EventEmitter, Directive, Output, Injector, HostListener, ElementRef, isDevMode, EnvironmentInjector, ApplicationInitStatus, APP_INITIALIZER, ViewContainerRef, ViewChild, createComponent, forwardRef, ViewChildren, booleanAttribute, DestroyRef, CUSTOM_ELEMENTS_SCHEMA, ApplicationRef, ENVIRONMENT_INITIALIZER, NgModule } from '@angular/core';
3
- import { BehaviorSubject, Subject, merge, fromEvent, Observable, EMPTY, zip, of, skip, audit, concat, AsyncSubject, lastValueFrom, firstValueFrom, asapScheduler, timer, combineLatest, noop, mergeWith, identity, share, ReplaySubject, switchMap as switchMap$1, race, map as map$1, concatWith, delay, animationFrameScheduler, combineLatestWith, pairwise, withLatestFrom, interval, from, mergeMap as mergeMap$1 } from 'rxjs';
2
+ import { InjectionToken, Component, ChangeDetectionStrategy, Injectable, Inject, Optional, makeEnvironmentProviders, Pipe, NgZone, inject, DestroyRef, runInInjectionContext, HostBinding, Input, EventEmitter, Directive, Output, Injector, HostListener, ElementRef, isDevMode, EnvironmentInjector, ApplicationInitStatus, APP_INITIALIZER, ViewContainerRef, ViewChild, createComponent, forwardRef, ViewChildren, booleanAttribute, CUSTOM_ELEMENTS_SCHEMA, ApplicationRef, ENVIRONMENT_INITIALIZER, NgModule } from '@angular/core';
3
+ import { BehaviorSubject, Subject, merge, fromEvent, Observable, EMPTY, zip, of, skip, audit, concat, noop, asapScheduler, AsyncSubject, lastValueFrom, firstValueFrom, timer, combineLatest, mergeWith, identity, share, ReplaySubject, switchMap as switchMap$1, race, map as map$1, concatWith, delay, animationFrameScheduler, combineLatestWith, pairwise, withLatestFrom, interval, from, mergeMap as mergeMap$1 } from 'rxjs';
4
4
  import { SciThrobberComponent } from '@scion/components/throbber';
5
5
  import * as i2 from '@angular/router';
6
6
  import { NavigationStart, Router, PRIMARY_OUTLET, RouterOutlet, NavigationEnd, UrlSegment, ChildrenOutletContexts, ActivationStart, RouterEvent, NavigationCancel, NavigationError, GuardsCheckEnd, ROUTES } from '@angular/router';
7
- import { startWith, filter, map, take, mergeMap, catchError, takeUntil, switchMap, distinctUntilChanged, first, observeOn, shareReplay, expand, debounceTime } from 'rxjs/operators';
7
+ import { startWith, filter, map, take, mergeMap, observeOn, catchError, takeUntil, switchMap, distinctUntilChanged, first, shareReplay, expand, debounceTime } from 'rxjs/operators';
8
8
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
9
  import * as i3$1 from '@angular/common';
10
10
  import { NgIf, NgFor, AsyncPipe, DOCUMENT, NgClass, NgComponentOutlet, NgTemplateOutlet, KeyValuePipe, Location, LocationStrategy } from '@angular/common';
@@ -29,7 +29,8 @@ import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/fo
29
29
  import * as i2$3 from '@scion/microfrontend-platform';
30
30
  import { MessageHeaders, MessageClient, ResponseStatusCodes, MicrofrontendPlatformConfig, APP_IDENTITY, mapToBody, HostManifestInterceptor, ObservableDecorator, IntentInterceptor, CapabilityInterceptor, MicrofrontendPlatformHost, MicrofrontendPlatform, IntentClient, OutletRouter, ManifestService, PlatformPropertyService } from '@scion/microfrontend-platform';
31
31
  import { Beans } from '@scion/toolkit/bean-manager';
32
- import { WorkbenchCapabilities, ɵMicrofrontendRouteParams as _MicrofrontendRouteParams, ɵTHEME_CONTEXT_KEY as _THEME_CONTEXT_KEY, ɵWorkbenchCommands as _WorkbenchCommands, ɵWorkbenchPopupMessageHeaders as _WorkbenchPopupMessageHeaders, ɵPOPUP_CONTEXT as _POPUP_CONTEXT, WorkbenchPopup, ɵDIALOG_CONTEXT as _DIALOG_CONTEXT, ɵWorkbenchDialogMessageHeaders as _WorkbenchDialogMessageHeaders, WorkbenchDialog as WorkbenchDialog$1, WorkbenchRouter as WorkbenchRouter$1, WorkbenchPopupService, WorkbenchMessageBoxService as WorkbenchMessageBoxService$1, WorkbenchNotificationService, ɵVIEW_ID_CONTEXT_KEY as _VIEW_ID_CONTEXT_KEY, WorkbenchDialogService as WorkbenchDialogService$1 } from '@scion/workbench-client';
32
+ import * as i1$1 from '@scion/workbench-client';
33
+ import { eMESSAGE_BOX_MESSAGE_PARAM, WorkbenchCapabilities, ɵMicrofrontendRouteParams as _MicrofrontendRouteParams, ɵTHEME_CONTEXT_KEY as _THEME_CONTEXT_KEY, ɵWorkbenchCommands as _WorkbenchCommands, ɵWorkbenchPopupMessageHeaders as _WorkbenchPopupMessageHeaders, ɵPOPUP_CONTEXT as _POPUP_CONTEXT, WorkbenchPopup, ɵDIALOG_CONTEXT as _DIALOG_CONTEXT, ɵWorkbenchDialogMessageHeaders as _WorkbenchDialogMessageHeaders, WorkbenchDialog as WorkbenchDialog$1, WorkbenchMessageBox, ɵMESSAGE_BOX_CONTEXT as _MESSAGE_BOX_CONTEXT, WorkbenchRouter as WorkbenchRouter$1, WorkbenchPopupService, WorkbenchMessageBoxService as WorkbenchMessageBoxService$1, ɵWorkbenchMessageBoxService as _WorkbenchMessageBoxService, WorkbenchDialogService as WorkbenchDialogService$1, ɵWorkbenchDialogService as _WorkbenchDialogService, WorkbenchNotificationService, ɵVIEW_ID_CONTEXT_KEY as _VIEW_ID_CONTEXT_KEY } from '@scion/workbench-client';
33
34
  import { Crypto } from '@scion/toolkit/crypto';
34
35
  import { provideNoopAnimations } from '@angular/platform-browser/animations';
35
36
  import { ComponentFixtureAutoDetect } from '@angular/core/testing';
@@ -128,10 +129,10 @@ const WORKBENCH_ELEMENT_REF = new InjectionToken('WORKBENCH_ELEMENT_REF', {
128
129
  * Default splash displayed while starting the workbench.
129
130
  */
130
131
  class SplashComponent {
131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: SplashComponent, isStandalone: true, selector: "wb-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"></sci-throbber>\n", styles: [":host{display:grid;justify-content:center;margin-top:3em}:host>sci-throbber{--sci-throbber-size: 80px}\n"], dependencies: [{ kind: "component", type: SciThrobberComponent, selector: "sci-throbber", inputs: ["type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
133
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: SplashComponent, isStandalone: true, selector: "wb-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"></sci-throbber>\n", styles: [":host{display:grid;justify-content:center;margin-top:3em}:host>sci-throbber{--sci-throbber-size: 80px}\n"], dependencies: [{ kind: "component", type: SciThrobberComponent, selector: "sci-throbber", inputs: ["type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
133
134
  }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SplashComponent, decorators: [{
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SplashComponent, decorators: [{
135
136
  type: Component,
136
137
  args: [{ selector: 'wb-splash', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SciThrobberComponent], template: "<sci-throbber type=\"ellipsis\"></sci-throbber>\n", styles: [":host{display:grid;justify-content:center;margin-top:3em}:host>sci-throbber{--sci-throbber-size: 80px}\n"] }]
137
138
  }] });
@@ -159,10 +160,10 @@ var LogLevel;
159
160
  * Delivers log events to a destination, e.g., writing logs to the console.
160
161
  */
161
162
  class LogAppender {
162
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: LogAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
163
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: LogAppender }); }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: LogAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
164
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: LogAppender }); }
164
165
  }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: LogAppender, decorators: [{
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: LogAppender, decorators: [{
166
167
  type: Injectable
167
168
  }] });
168
169
  /**
@@ -215,10 +216,10 @@ class ConsoleAppender {
215
216
  hasConsole(severity) {
216
217
  return console && typeof console[severity] === 'function';
217
218
  }
218
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ConsoleAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
219
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ConsoleAppender }); }
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ConsoleAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
220
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ConsoleAppender }); }
220
221
  }
221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ConsoleAppender, decorators: [{
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ConsoleAppender, decorators: [{
222
223
  type: Injectable
223
224
  }] });
224
225
 
@@ -265,10 +266,10 @@ class ɵLogger {
265
266
  return router.events
266
267
  .pipe(startWith(router.url), filter((event) => event instanceof NavigationStart), map(routerEvent => router.parseUrl(routerEvent.url).queryParamMap), map(queryParamMap => queryParamMap.get('loglevel')?.toUpperCase()), map(logLevelString => logLevelString ? LogLevel[logLevelString] : undefined));
267
268
  }
268
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLogger, deps: [{ token: LogAppender, optional: true }, { token: i2.Router }, { token: LogLevel }], target: i0.ɵɵFactoryTarget.Injectable }); }
269
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLogger }); }
269
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵLogger, deps: [{ token: LogAppender, optional: true }, { token: i2.Router }, { token: LogLevel }], target: i0.ɵɵFactoryTarget.Injectable }); }
270
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵLogger }); }
270
271
  }
271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLogger, decorators: [{
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵLogger, decorators: [{
272
273
  type: Injectable
273
274
  }], ctorParameters: () => [{ type: undefined, decorators: [{
274
275
  type: Inject,
@@ -312,10 +313,10 @@ function coerceLogEvent(level, message, args) {
312
313
  * @see {@link LogAppender}
313
314
  */
314
315
  class Logger {
315
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: Logger, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
316
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: Logger, providedIn: 'root', useClass: ɵLogger }); }
316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: Logger, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
317
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: Logger, providedIn: 'root', useClass: ɵLogger }); }
317
318
  }
318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: Logger, decorators: [{
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: Logger, decorators: [{
319
320
  type: Injectable,
320
321
  args: [{ providedIn: 'root', useClass: ɵLogger }]
321
322
  }] });
@@ -496,10 +497,10 @@ class InstanceofPipe {
496
497
  transform(object, type) {
497
498
  return object instanceof type ? object : null;
498
499
  }
499
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: InstanceofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
500
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: InstanceofPipe, isStandalone: true, name: "wbInstanceof" }); }
500
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: InstanceofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
501
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: InstanceofPipe, isStandalone: true, name: "wbInstanceof" }); }
501
502
  }
502
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: InstanceofPipe, decorators: [{
503
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: InstanceofPipe, decorators: [{
503
504
  type: Pipe,
504
505
  args: [{ name: 'wbInstanceof', standalone: true }]
505
506
  }] });
@@ -814,10 +815,10 @@ class ViewDragService {
814
815
  this._viewDragStartBroadcastChannel.destroy();
815
816
  this._viewDragEndBroadcastChannel.destroy();
816
817
  }
817
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDragService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
818
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDragService, providedIn: 'root' }); }
818
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDragService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
819
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDragService, providedIn: 'root' }); }
819
820
  }
820
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDragService, decorators: [{
821
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDragService, decorators: [{
821
822
  type: Injectable,
822
823
  args: [{ providedIn: 'root' }]
823
824
  }], ctorParameters: () => [{ type: i0.NgZone }] });
@@ -877,10 +878,10 @@ class WorkbenchLayoutService {
877
878
  get layout() {
878
879
  return this._layout$.value;
879
880
  }
880
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutService, deps: [{ token: ViewDragService }], target: i0.ɵɵFactoryTarget.Injectable }); }
881
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutService, providedIn: 'root' }); }
881
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutService, deps: [{ token: ViewDragService }], target: i0.ɵɵFactoryTarget.Injectable }); }
882
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutService, providedIn: 'root' }); }
882
883
  }
883
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutService, decorators: [{
884
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutService, decorators: [{
884
885
  type: Injectable,
885
886
  args: [{ providedIn: 'root' }]
886
887
  }], ctorParameters: () => [{ type: ViewDragService }] });
@@ -962,10 +963,10 @@ class WorkbenchPartRegistry {
962
963
  this._registry.objects.forEach(part => part.destroy());
963
964
  this._registry.clear();
964
965
  }
965
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
966
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartRegistry, providedIn: 'root' }); }
966
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
967
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartRegistry, providedIn: 'root' }); }
967
968
  }
968
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartRegistry, decorators: [{
969
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartRegistry, decorators: [{
969
970
  type: Injectable,
970
971
  args: [{ providedIn: 'root' }]
971
972
  }] });
@@ -994,10 +995,10 @@ class PartPortalPipe {
994
995
  }
995
996
  return this._partRegistry.get(partId).createPortalFromInjectionContext(this._injector);
996
997
  }
997
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartPortalPipe, deps: [{ token: WorkbenchPartRegistry }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Pipe }); }
998
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: PartPortalPipe, isStandalone: true, name: "wbPartPortal" }); }
998
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartPortalPipe, deps: [{ token: WorkbenchPartRegistry }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Pipe }); }
999
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: PartPortalPipe, isStandalone: true, name: "wbPartPortal" }); }
999
1000
  }
1000
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartPortalPipe, decorators: [{
1001
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartPortalPipe, decorators: [{
1001
1002
  type: Pipe,
1002
1003
  args: [{ name: 'wbPartPortal', standalone: true }]
1003
1004
  }], ctorParameters: () => [{ type: WorkbenchPartRegistry }, { type: i0.Injector }] });
@@ -1041,6 +1042,10 @@ const POPUP_ID_PREFIX = 'popup.';
1041
1042
  * Represents the id prefix of dialogs.
1042
1043
  */
1043
1044
  const DIALOG_ID_PREFIX = 'dialog.';
1045
+ /**
1046
+ * Represents the id prefix of message boxes.
1047
+ */
1048
+ const MESSAGE_BOX_ID_PREFIX = 'messagebox.';
1044
1049
  /**
1045
1050
  * Name of the query parameter that contains the layout of the main area.
1046
1051
  */
@@ -1122,7 +1127,42 @@ const WorkbenchLayouts = {
1122
1127
  };
1123
1128
 
1124
1129
  /*
1125
- * Copyright (c) 2018-2022 Swiss Federal Railways
1130
+ * Copyright (c) 2018-2023 Swiss Federal Railways
1131
+ *
1132
+ * This program and the accompanying materials are made
1133
+ * available under the terms of the Eclipse Public License 2.0
1134
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
1135
+ *
1136
+ * SPDX-License-Identifier: EPL-2.0
1137
+ */
1138
+ /**
1139
+ * Implementation of {@link DestroyRef} that can be used in non-Angular managed workbench objects such as handles.
1140
+ */
1141
+ class ɵDestroyRef {
1142
+ constructor() {
1143
+ this._callbacks = new Set();
1144
+ this._destroyed = false;
1145
+ }
1146
+ onDestroy(callback) {
1147
+ if (this._destroyed) {
1148
+ callback();
1149
+ return noop;
1150
+ }
1151
+ this._callbacks.add(callback);
1152
+ return () => this._callbacks.delete(callback);
1153
+ }
1154
+ destroy() {
1155
+ this._callbacks.forEach(callback => callback());
1156
+ this._callbacks.clear();
1157
+ this._destroyed = true;
1158
+ }
1159
+ get destroyed() {
1160
+ return this._destroyed;
1161
+ }
1162
+ }
1163
+
1164
+ /*
1165
+ * Copyright (c) 2018-2024 Swiss Federal Railways
1126
1166
  *
1127
1167
  * This program and the accompanying materials are made
1128
1168
  * available under the terms of the Eclipse Public License 2.0
@@ -1130,6 +1170,17 @@ const WorkbenchLayouts = {
1130
1170
  *
1131
1171
  * SPDX-License-Identifier: EPL-2.0
1132
1172
  */
1173
+ /**
1174
+ * Serializes navigation requests to the Angular Router to prevent cancelling of parallel navigations or race conditions when modifying the currently active workbench layout.
1175
+ */
1176
+ const SINGLE_NAVIGATION_EXECUTOR = new InjectionToken('SINGLE_NAVIGATION_EXECUTOR', {
1177
+ providedIn: 'root',
1178
+ factory: () => {
1179
+ const executor = new SingleTaskExecutor();
1180
+ inject(DestroyRef).onDestroy(() => executor.destroy());
1181
+ return executor;
1182
+ },
1183
+ });
1133
1184
  /**
1134
1185
  * Allows the serial execution of tasks.
1135
1186
  *
@@ -1139,9 +1190,14 @@ const WorkbenchLayouts = {
1139
1190
  class SingleTaskExecutor {
1140
1191
  constructor() {
1141
1192
  this._task$ = new Subject();
1142
- this._destroy$ = new Subject();
1193
+ this._destroyRef = new ɵDestroyRef();
1143
1194
  this._task$
1144
- .pipe(serializeExecution(task => task.execute()), catchError((error, caught) => caught), takeUntil(this._destroy$))
1195
+ .pipe(
1196
+ // Schedule the task asynchronously so that it is not executed if the executor is destroyed in the same "call stack",
1197
+ // happening, for example, when destroying the Testbed in unit tests. Angular destroys contexts from the bottom up,
1198
+ // i.e., child contexts are destroyed before parent contexts. If a task is scheduled in a destroy lifecycle hook of
1199
+ // a child context, the task would still be executed because the executor is not destroyed yet.
1200
+ observeOn(asapScheduler), serializeExecution(task => task.execute()), catchError((error, caught) => caught), takeUntilDestroyed(this._destroyRef))
1145
1201
  .subscribe();
1146
1202
  }
1147
1203
  /**
@@ -1158,7 +1214,7 @@ class SingleTaskExecutor {
1158
1214
  * Destroys this executor.
1159
1215
  */
1160
1216
  destroy() {
1161
- this._destroy$.next();
1217
+ this._destroyRef.destroy();
1162
1218
  }
1163
1219
  }
1164
1220
  class Task {
@@ -1308,6 +1364,12 @@ const RouterUtils = {
1308
1364
  isDialogOutlet: (outlet) => {
1309
1365
  return outlet?.startsWith(DIALOG_ID_PREFIX) ?? false;
1310
1366
  },
1367
+ /**
1368
+ * Tests if the given outlet matches the format of a message box outlet.
1369
+ */
1370
+ isMessageBoxOutlet: (outlet) => {
1371
+ return outlet?.startsWith(MESSAGE_BOX_ID_PREFIX) ?? false;
1372
+ },
1311
1373
  /**
1312
1374
  * Reads view outlets from given URL.
1313
1375
  *
@@ -1451,10 +1513,10 @@ class WorkbenchViewRegistry {
1451
1513
  this._registry.objects.forEach(view => view.destroy());
1452
1514
  this._registry.clear();
1453
1515
  }
1454
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchViewRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1455
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchViewRegistry, providedIn: 'root' }); }
1516
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchViewRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1517
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchViewRegistry, providedIn: 'root' }); }
1456
1518
  }
1457
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchViewRegistry, decorators: [{
1519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchViewRegistry, decorators: [{
1458
1520
  type: Injectable,
1459
1521
  args: [{ providedIn: 'root' }]
1460
1522
  }] });
@@ -1468,7 +1530,7 @@ class ɵWorkbenchRouter {
1468
1530
  this._injector = _injector;
1469
1531
  this._logger = _logger;
1470
1532
  this._zone = _zone;
1471
- this._singleTaskExecutor = new SingleTaskExecutor();
1533
+ this._singleNavigationExecutor = inject(SINGLE_NAVIGATION_EXECUTOR);
1472
1534
  /**
1473
1535
  * Holds the current navigational context during a workbench navigation, or `null` if no navigation is in progress.
1474
1536
  */
@@ -1488,7 +1550,7 @@ class ɵWorkbenchRouter {
1488
1550
  }
1489
1551
  const navigateFn = typeof commandsOrNavigateFn === 'function' ? commandsOrNavigateFn : createNavigationFromCommands(commandsOrNavigateFn, extras ?? {});
1490
1552
  // Serialize navigation requests to prevent race conditions when modifying the currently active workbench layout.
1491
- return this._singleTaskExecutor.submit(async () => {
1553
+ return this._singleNavigationExecutor.submit(async () => {
1492
1554
  // Wait until the initial layout is available, i.e., after completion of Angular's initial navigation.
1493
1555
  // Otherwise, this navigation would override the initial layout as given in the URL.
1494
1556
  if (!this._workbenchLayoutService.layout) {
@@ -1543,7 +1605,7 @@ class ɵWorkbenchRouter {
1543
1605
  if (!NgZone.isInAngularZone()) {
1544
1606
  return this._zone.run(() => this.createUrlTree(onNavigate, extras));
1545
1607
  }
1546
- return this._singleTaskExecutor.submit(async () => {
1608
+ return this._singleNavigationExecutor.submit(async () => {
1547
1609
  // Wait until the initial layout is available, i.e., after completion of Angular's initial navigation.
1548
1610
  // Otherwise, would override the initial layout as given in the URL.
1549
1611
  if (!this._workbenchLayoutService.layout) {
@@ -1611,13 +1673,10 @@ class ɵWorkbenchRouter {
1611
1673
  async waitForInitialLayout() {
1612
1674
  await firstValueFrom(this._workbenchLayoutService.layout$);
1613
1675
  }
1614
- ngOnDestroy() {
1615
- this._singleTaskExecutor.destroy();
1616
- }
1617
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchRouter, deps: [{ token: i2.Router }, { token: WorkbenchLayoutService }, { token: WorkbenchViewRegistry }, { token: i0.Injector }, { token: Logger }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
1618
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchRouter, providedIn: 'root' }); }
1676
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchRouter, deps: [{ token: i2.Router }, { token: WorkbenchLayoutService }, { token: WorkbenchViewRegistry }, { token: i0.Injector }, { token: Logger }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
1677
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchRouter, providedIn: 'root' }); }
1619
1678
  }
1620
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchRouter, decorators: [{
1679
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchRouter, decorators: [{
1621
1680
  type: Injectable,
1622
1681
  args: [{ providedIn: 'root' }]
1623
1682
  }], ctorParameters: () => [{ type: i2.Router }, { type: WorkbenchLayoutService }, { type: WorkbenchViewRegistry }, { type: i0.Injector }, { type: Logger }, { type: i0.NgZone }] });
@@ -1830,10 +1889,10 @@ class GridElementComponent {
1830
1889
  }
1831
1890
  return [];
1832
1891
  }
1833
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: GridElementComponent, deps: [{ token: ɵWorkbenchRouter }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
1834
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: GridElementComponent, isStandalone: true, selector: "wb-grid-element", inputs: { element: "element" }, host: { properties: { "attr.data-parentnodeid": "this.parentNodeId", "attr.data-nodeid": "this.nodeId", "attr.data-partid": "this.partId" } }, usesOnChanges: true, ngImport: i0, template: "<!-- MPart (leaf) -->\n<ng-container *ngIf=\"element | wbInstanceof:MPart as part\" [cdkPortalOutlet]=\"part.id | wbPartPortal\"></ng-container>\n\n<!-- MTreeNode -->\n<ng-container *ngIf=\"element | wbInstanceof:MTreeNode as treeNode\">\n <!-- Node with a single visible child. -->\n <wb-grid-element *ngIf=\"children.length === 1\" [element]=\"children[0].element\"></wb-grid-element>\n\n <!-- Node with multiple visible children. -->\n <sci-sashbox *ngIf=\"children.length > 1\"\n [direction]=\"treeNode.direction\"\n [attr.data-nodeid]=\"treeNode.nodeId\"\n (sashStart)=\"onSashStart()\"\n (sashEnd)=\"onSashEnd(treeNode, $event)\">\n <ng-template *ngFor=\"let child of children; index as i; trackBy: indexTrackByFn\" sciSash [size]=\"child.size\">\n <wb-grid-element [element]=\"child.element\" [class]=\"'sash-' + (i + 1)\"></wb-grid-element>\n </ng-template>\n </sci-sashbox>\n</ng-container>\n", styles: [":host{display:grid}:host>sci-sashbox{z-index:auto;--sci-sashbox-gap: 0;--sci-sashbox-splitter-background-color: var(--sci-workbench-part-divider-color);--sci-sashbox-splitter-background-color-hover: var(--sci-workbench-part-divider-color-hover);--sci-sashbox-splitter-size: var(--sci-workbench-part-divider-size);--sci-sashbox-splitter-size-hover: var(--sci-workbench-part-divider-size-hover);--sci-sashbox-splitter-touch-target-size: var(--sci-workbench-part-divider-touch-target-size);--sci-sashbox-splitter-border-radius: 0;--sci-sashbox-splitter-opacity-active: var(--sci-workbench-part-divider-opacity-active);--sci-sashbox-splitter-opacity-hover: var(--sci-workbench-part-divider-opacity-hover)}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: InstanceofPipe, name: "wbInstanceof" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: PartPortalPipe, name: "wbPartPortal" }, { kind: "component", type: SciSashboxComponent, selector: "sci-sashbox", inputs: ["direction"], outputs: ["sashStart", "sashEnd"] }, { kind: "directive", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: ["size", "minSize"], exportAs: ["sciSash"] }] }); }
1892
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: GridElementComponent, deps: [{ token: ɵWorkbenchRouter }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
1893
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: GridElementComponent, isStandalone: true, selector: "wb-grid-element", inputs: { element: "element" }, host: { properties: { "attr.data-parentnodeid": "this.parentNodeId", "attr.data-nodeid": "this.nodeId", "attr.data-partid": "this.partId" } }, usesOnChanges: true, ngImport: i0, template: "<!-- MPart (leaf) -->\n<ng-container *ngIf=\"element | wbInstanceof:MPart as part\" [cdkPortalOutlet]=\"part.id | wbPartPortal\"></ng-container>\n\n<!-- MTreeNode -->\n<ng-container *ngIf=\"element | wbInstanceof:MTreeNode as treeNode\">\n <!-- Node with a single visible child. -->\n <wb-grid-element *ngIf=\"children.length === 1\" [element]=\"children[0].element\"></wb-grid-element>\n\n <!-- Node with multiple visible children. -->\n <sci-sashbox *ngIf=\"children.length > 1\"\n [direction]=\"treeNode.direction\"\n [attr.data-nodeid]=\"treeNode.nodeId\"\n (sashStart)=\"onSashStart()\"\n (sashEnd)=\"onSashEnd(treeNode, $event)\">\n <ng-template *ngFor=\"let child of children; index as i; trackBy: indexTrackByFn\" sciSash [size]=\"child.size\">\n <wb-grid-element [element]=\"child.element\" [class]=\"'sash-' + (i + 1)\"></wb-grid-element>\n </ng-template>\n </sci-sashbox>\n</ng-container>\n", styles: [":host{display:grid}:host>sci-sashbox{z-index:auto;--sci-sashbox-gap: 0;--sci-sashbox-splitter-background-color: var(--sci-workbench-part-divider-color);--sci-sashbox-splitter-background-color-hover: var(--sci-workbench-part-divider-color-hover);--sci-sashbox-splitter-size: var(--sci-workbench-part-divider-size);--sci-sashbox-splitter-size-hover: var(--sci-workbench-part-divider-size-hover);--sci-sashbox-splitter-touch-target-size: var(--sci-workbench-part-divider-touch-target-size);--sci-sashbox-splitter-border-radius: 0;--sci-sashbox-splitter-opacity-active: var(--sci-workbench-part-divider-opacity-active);--sci-sashbox-splitter-opacity-hover: var(--sci-workbench-part-divider-opacity-hover)}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: InstanceofPipe, name: "wbInstanceof" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: PartPortalPipe, name: "wbPartPortal" }, { kind: "component", type: SciSashboxComponent, selector: "sci-sashbox", inputs: ["direction"], outputs: ["sashStart", "sashEnd"] }, { kind: "directive", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: ["size", "minSize"], exportAs: ["sciSash"] }] }); }
1835
1894
  }
1836
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: GridElementComponent, decorators: [{
1895
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: GridElementComponent, decorators: [{
1837
1896
  type: Component,
1838
1897
  args: [{ selector: 'wb-grid-element', standalone: true, imports: [
1839
1898
  NgIf,
@@ -1889,10 +1948,10 @@ class RequiresDropZonePipe {
1889
1948
  transform(element, region) {
1890
1949
  return requiresDropZone(element, region);
1891
1950
  }
1892
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RequiresDropZonePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1893
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: RequiresDropZonePipe, isStandalone: true, name: "wbRequiresDropZone" }); }
1951
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: RequiresDropZonePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1952
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: RequiresDropZonePipe, isStandalone: true, name: "wbRequiresDropZone" }); }
1894
1953
  }
1895
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RequiresDropZonePipe, decorators: [{
1954
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: RequiresDropZonePipe, decorators: [{
1896
1955
  type: Pipe,
1897
1956
  args: [{ name: 'wbRequiresDropZone', standalone: true }]
1898
1957
  }] });
@@ -2094,10 +2153,10 @@ class ViewDropPlaceholderRenderer {
2094
2153
  this._dropPlaceholder = null;
2095
2154
  });
2096
2155
  }
2097
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDropPlaceholderRenderer, deps: [{ token: ViewDragService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
2098
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDropPlaceholderRenderer, providedIn: 'root' }); }
2156
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDropPlaceholderRenderer, deps: [{ token: ViewDragService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
2157
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDropPlaceholderRenderer, providedIn: 'root' }); }
2099
2158
  }
2100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDropPlaceholderRenderer, decorators: [{
2159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDropPlaceholderRenderer, decorators: [{
2101
2160
  type: Injectable,
2102
2161
  args: [{ providedIn: 'root' }]
2103
2162
  }], ctorParameters: () => [{ type: ViewDragService }, { type: i0.NgZone }] });
@@ -2244,10 +2303,10 @@ class ViewDropZoneDirective {
2244
2303
  setStyle(this._host, { 'position': 'relative' });
2245
2304
  }
2246
2305
  }
2247
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDropZoneDirective, deps: [{ token: i0.ElementRef }, { token: ViewDragService }, { token: ViewDropPlaceholderRenderer }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
2248
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: ViewDropZoneDirective, isStandalone: true, selector: "[wbViewDropZone]", inputs: { regions: ["wbViewDropZoneRegions", "regions"], cssClass: ["wbViewDropZoneCssClass", "cssClass"], dropZoneSize: ["wbViewDropZoneSize", "dropZoneSize"], dropPlaceholderSize: ["wbViewDropZonePlaceholderSize", "dropPlaceholderSize"] }, outputs: { viewDrop: "wbViewDropZoneDrop" }, ngImport: i0 }); }
2306
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDropZoneDirective, deps: [{ token: i0.ElementRef }, { token: ViewDragService }, { token: ViewDropPlaceholderRenderer }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
2307
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: ViewDropZoneDirective, isStandalone: true, selector: "[wbViewDropZone]", inputs: { regions: ["wbViewDropZoneRegions", "regions"], cssClass: ["wbViewDropZoneCssClass", "cssClass"], dropZoneSize: ["wbViewDropZoneSize", "dropZoneSize"], dropPlaceholderSize: ["wbViewDropZonePlaceholderSize", "dropPlaceholderSize"] }, outputs: { viewDrop: "wbViewDropZoneDrop" }, ngImport: i0 }); }
2249
2308
  }
2250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewDropZoneDirective, decorators: [{
2309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewDropZoneDirective, decorators: [{
2251
2310
  type: Directive,
2252
2311
  args: [{ selector: '[wbViewDropZone]', standalone: true }]
2253
2312
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: ViewDragService }, { type: ViewDropPlaceholderRenderer }, { type: i0.NgZone }], propDecorators: { regions: [{
@@ -2296,10 +2355,10 @@ class GridElementIfVisiblePipe {
2296
2355
  }
2297
2356
  return null;
2298
2357
  }
2299
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: GridElementIfVisiblePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2300
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: GridElementIfVisiblePipe, isStandalone: true, name: "wbGridElementIfVisible" }); }
2358
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: GridElementIfVisiblePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2359
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: GridElementIfVisiblePipe, isStandalone: true, name: "wbGridElementIfVisible" }); }
2301
2360
  }
2302
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: GridElementIfVisiblePipe, decorators: [{
2361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: GridElementIfVisiblePipe, decorators: [{
2303
2362
  type: Pipe,
2304
2363
  args: [{ name: 'wbGridElementIfVisible', standalone: true }]
2305
2364
  }] });
@@ -2448,10 +2507,10 @@ class WorkbenchLayoutComponent {
2448
2507
  }),
2449
2508
  });
2450
2509
  }
2451
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutComponent, deps: [{ token: WORKBENCH_ID }, { token: ViewDragService }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
2452
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: WorkbenchLayoutComponent, isStandalone: true, selector: "wb-workbench-layout", ngImport: i0, template: "@if (grid?.root | wbGridElementIfVisible; as root) {\n <wb-grid-element [element]=\"root\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"50\"\n [wbViewDropZonePlaceholderSize]=\"50\"\n [wbViewDropZoneRegions]=\"{\n north: false,\n south: root | wbRequiresDropZone:'south',\n west: root | wbRequiresDropZone:'west',\n east: root | wbRequiresDropZone:'east',\n center: false,\n }\"\n [wbViewDropZoneCssClass]=\"'e2e-workbench-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n </wb-grid-element>\n}\n@else {\n <sci-viewport class=\"start-page\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"1\"\n [wbViewDropZoneRegions]=\"{center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneCssClass]=\"'e2e-workbench-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n <router-outlet/>\n </sci-viewport>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>wb-grid-element,:host>sci-viewport.start-page{flex:1 1 0}:host>sci-viewport.start-page>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "pipe", type: GridElementIfVisiblePipe, name: "wbGridElementIfVisible" }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneCssClass", "wbViewDropZoneSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "pipe", type: RequiresDropZonePipe, name: "wbRequiresDropZone" }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] }); }
2510
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutComponent, deps: [{ token: WORKBENCH_ID }, { token: ViewDragService }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
2511
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: WorkbenchLayoutComponent, isStandalone: true, selector: "wb-workbench-layout", ngImport: i0, template: "@if (grid?.root | wbGridElementIfVisible; as root) {\n <wb-grid-element [element]=\"root\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"50\"\n [wbViewDropZonePlaceholderSize]=\"50\"\n [wbViewDropZoneRegions]=\"{\n north: false,\n south: root | wbRequiresDropZone:'south',\n west: root | wbRequiresDropZone:'west',\n east: root | wbRequiresDropZone:'east',\n center: false,\n }\"\n [wbViewDropZoneCssClass]=\"'e2e-workbench-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n </wb-grid-element>\n}\n@else {\n <sci-viewport class=\"start-page\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"1\"\n [wbViewDropZoneRegions]=\"{center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneCssClass]=\"'e2e-workbench-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n <router-outlet/>\n </sci-viewport>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>wb-grid-element,:host>sci-viewport.start-page{flex:1 1 0}:host>sci-viewport.start-page>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "pipe", type: GridElementIfVisiblePipe, name: "wbGridElementIfVisible" }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneCssClass", "wbViewDropZoneSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "pipe", type: RequiresDropZonePipe, name: "wbRequiresDropZone" }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] }); }
2453
2512
  }
2454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutComponent, decorators: [{
2513
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutComponent, decorators: [{
2455
2514
  type: Component,
2456
2515
  args: [{ selector: 'wb-workbench-layout', standalone: true, imports: [
2457
2516
  NgIf,
@@ -2503,10 +2562,10 @@ class CoerceObservablePipe {
2503
2562
  transform(value) {
2504
2563
  return Observables.coerce(value);
2505
2564
  }
2506
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: CoerceObservablePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2507
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: CoerceObservablePipe, isStandalone: true, name: "wbCoerceObservable$" }); }
2565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: CoerceObservablePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2566
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: CoerceObservablePipe, isStandalone: true, name: "wbCoerceObservable$" }); }
2508
2567
  }
2509
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: CoerceObservablePipe, decorators: [{
2568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: CoerceObservablePipe, decorators: [{
2510
2569
  type: Pipe,
2511
2570
  args: [{ name: 'wbCoerceObservable$', standalone: true }]
2512
2571
  }] });
@@ -2586,10 +2645,10 @@ class NotificationComponent {
2586
2645
  this.closeNotification.emit();
2587
2646
  });
2588
2647
  }
2589
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationComponent, deps: [{ token: i0.Injector }, { token: i0.DestroyRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2590
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: NotificationComponent, isStandalone: true, selector: "wb-notification", inputs: { notification: "notification" }, outputs: { closeNotification: "closeNotification" }, host: { listeners: { "mousedown": "onMousedown($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"outline\">\n <header *ngIf=\"notification.title$ | async | wbCoerceObservable$ | async as title\" class=\"e2e-title\">{{title}}</header>\n <ng-container *cdkPortalOutlet=\"portal\"></ng-container>\n</div>\n<button class=\"close scion-workbench-icons e2e-close\" (click)=\"onClose()\">close</button>\n", styles: [":host{display:grid;background-color:var(--sci-color-background-elevation);color:var(--sci-color-text);font-size:1rem;border-radius:var(--sci-corner);box-shadow:var(--sci-elevation) var(--sci-static-color-black);width:var(--sci-workbench-notification-width);border-left:var(--sci-workbench-notification-severity-indicator-size) solid transparent;position:relative}:host.info{border-left-color:var(--sci-color-accent)}:host.warn{border-left-color:var(--sci-color-notice)}:host.error{border-left-color:var(--sci-color-negative)}:host>div.outline{border:1px solid var(--sci-color-border);border-left:none;padding:1em 1.5em;border-top-right-radius:var(--sci-corner);border-bottom-right-radius:var(--sci-corner);font-size:.9em;white-space:pre-line;overflow-wrap:break-word;overflow:hidden}:host>div.outline>header{font-weight:700;margin-bottom:.75em}:host>button.close{all:unset;position:absolute;align-self:start;justify-self:end;cursor:pointer;padding:.5em .5em 0 0;font-size:1.1em}:host>button.close:hover{font-weight:700}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: CoerceObservablePipe, name: "wbCoerceObservable$" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2648
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationComponent, deps: [{ token: i0.Injector }, { token: i0.DestroyRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2649
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NotificationComponent, isStandalone: true, selector: "wb-notification", inputs: { notification: "notification" }, outputs: { closeNotification: "closeNotification" }, host: { listeners: { "mousedown": "onMousedown($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"outline\">\n <header *ngIf=\"notification.title$ | async | wbCoerceObservable$ | async as title\" class=\"e2e-title\">{{title}}</header>\n <ng-container *cdkPortalOutlet=\"portal\"></ng-container>\n</div>\n<button class=\"close scion-workbench-icons e2e-close\" (click)=\"onClose()\">close</button>\n", styles: [":host{display:grid;background-color:var(--sci-color-background-elevation);color:var(--sci-color-text);font-size:1rem;border-radius:var(--sci-corner);box-shadow:var(--sci-elevation) var(--sci-static-color-black);width:var(--sci-workbench-notification-width);border-left:var(--sci-workbench-notification-severity-indicator-size) solid transparent;position:relative}:host.info{border-left-color:var(--sci-color-accent)}:host.warn{border-left-color:var(--sci-color-notice)}:host.error{border-left-color:var(--sci-color-negative)}:host>div.outline{border:1px solid var(--sci-color-border);border-left:none;padding:1em 1.5em;border-top-right-radius:var(--sci-corner);border-bottom-right-radius:var(--sci-corner);font-size:.9em;white-space:pre-line;overflow-wrap:break-word;overflow:hidden}:host>div.outline>header{font-weight:700;margin-bottom:.75em}:host>button.close{all:unset;position:absolute;align-self:start;justify-self:end;cursor:pointer;padding:.5em .5em 0 0;font-size:1.1em}:host>button.close:hover{font-weight:700}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: CoerceObservablePipe, name: "wbCoerceObservable$" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2591
2650
  }
2592
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationComponent, decorators: [{
2651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationComponent, decorators: [{
2593
2652
  type: Component,
2594
2653
  args: [{ selector: 'wb-notification', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
2595
2654
  NgIf,
@@ -2623,10 +2682,10 @@ class NotificationCssClassesPipe {
2623
2682
  .concat(severity)
2624
2683
  .concat(`e2e-severity-${severity}`)));
2625
2684
  }
2626
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationCssClassesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2627
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: NotificationCssClassesPipe, isStandalone: true, name: "wbNotificationCssClasses$" }); }
2685
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationCssClassesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2686
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: NotificationCssClassesPipe, isStandalone: true, name: "wbNotificationCssClasses$" }); }
2628
2687
  }
2629
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationCssClassesPipe, decorators: [{
2688
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationCssClassesPipe, decorators: [{
2630
2689
  type: Pipe,
2631
2690
  args: [{ name: 'wbNotificationCssClasses$', standalone: true }]
2632
2691
  }] });
@@ -2638,10 +2697,10 @@ class TextNotificationComponent {
2638
2697
  constructor(notification) {
2639
2698
  this.text = notification.input;
2640
2699
  }
2641
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TextNotificationComponent, deps: [{ token: Notification }], target: i0.ɵɵFactoryTarget.Component }); }
2642
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: TextNotificationComponent, isStandalone: true, selector: "wb-text-notification", ngImport: i0, template: `{{text ?? ''}}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2700
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TextNotificationComponent, deps: [{ token: Notification }], target: i0.ɵɵFactoryTarget.Component }); }
2701
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: TextNotificationComponent, isStandalone: true, selector: "wb-text-notification", ngImport: i0, template: `{{text ?? ''}}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2643
2702
  }
2644
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TextNotificationComponent, decorators: [{
2703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TextNotificationComponent, decorators: [{
2645
2704
  type: Component,
2646
2705
  args: [{
2647
2706
  selector: 'wb-text-notification',
@@ -2803,10 +2862,10 @@ class NotificationService {
2803
2862
  this.closeNotification(lastNotification);
2804
2863
  });
2805
2864
  }
2806
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationService, deps: [{ token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
2807
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
2865
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationService, deps: [{ token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
2866
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
2808
2867
  }
2809
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationService, decorators: [{
2868
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationService, decorators: [{
2810
2869
  type: Injectable,
2811
2870
  args: [{ providedIn: 'root' }]
2812
2871
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: Document, decorators: [{
@@ -2848,10 +2907,10 @@ class NotificationListComponent {
2848
2907
  ]),
2849
2908
  ];
2850
2909
  }
2851
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationListComponent, deps: [{ token: NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
2852
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: NotificationListComponent, isStandalone: true, selector: "wb-notification-list", ngImport: i0, template: "<wb-notification *ngFor=\"let notification of notifications$ | async; trackBy: trackByFn\"\n [notification]=\"notification\"\n [ngClass]=\"notification | wbNotificationCssClasses$ | async\"\n (closeNotification)=\"onNotificationClose(notification)\"\n @notification-enter-or-leave>\n</wb-notification>\n", styles: [":host{display:flex;flex-flow:column wrap-reverse;gap:.5em;max-height:100%;align-items:flex-start;align-content:flex-start;pointer-events:none;padding:.5em}:host>wb-notification{position:relative;pointer-events:auto;max-width:calc(100% - 1em)}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NotificationComponent, selector: "wb-notification", inputs: ["notification"], outputs: ["closeNotification"] }, { kind: "pipe", type: NotificationCssClassesPipe, name: "wbNotificationCssClasses$" }], animations: [trigger('notification-enter-or-leave', NotificationListComponent.provideAnimation())], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2910
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationListComponent, deps: [{ token: NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
2911
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NotificationListComponent, isStandalone: true, selector: "wb-notification-list", ngImport: i0, template: "<wb-notification *ngFor=\"let notification of notifications$ | async; trackBy: trackByFn\"\n [notification]=\"notification\"\n [ngClass]=\"notification | wbNotificationCssClasses$ | async\"\n (closeNotification)=\"onNotificationClose(notification)\"\n @notification-enter-or-leave>\n</wb-notification>\n", styles: [":host{display:flex;flex-flow:column wrap-reverse;gap:.5em;max-height:100%;align-items:flex-start;align-content:flex-start;pointer-events:none;padding:.5em}:host>wb-notification{position:relative;pointer-events:auto;max-width:calc(100% - 1em)}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NotificationComponent, selector: "wb-notification", inputs: ["notification"], outputs: ["closeNotification"] }, { kind: "pipe", type: NotificationCssClassesPipe, name: "wbNotificationCssClasses$" }], animations: [trigger('notification-enter-or-leave', NotificationListComponent.provideAnimation())], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2853
2912
  }
2854
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NotificationListComponent, decorators: [{
2913
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NotificationListComponent, decorators: [{
2855
2914
  type: Component,
2856
2915
  args: [{ selector: 'wb-notification-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
2857
2916
  NgFor,
@@ -2862,41 +2921,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
2862
2921
  ], animations: [trigger('notification-enter-or-leave', NotificationListComponent.provideAnimation())], template: "<wb-notification *ngFor=\"let notification of notifications$ | async; trackBy: trackByFn\"\n [notification]=\"notification\"\n [ngClass]=\"notification | wbNotificationCssClasses$ | async\"\n (closeNotification)=\"onNotificationClose(notification)\"\n @notification-enter-or-leave>\n</wb-notification>\n", styles: [":host{display:flex;flex-flow:column wrap-reverse;gap:.5em;max-height:100%;align-items:flex-start;align-content:flex-start;pointer-events:none;padding:.5em}:host>wb-notification{position:relative;pointer-events:auto;max-width:calc(100% - 1em)}\n"] }]
2863
2922
  }], ctorParameters: () => [{ type: NotificationService }] });
2864
2923
 
2865
- /*
2866
- * Copyright (c) 2018-2023 Swiss Federal Railways
2867
- *
2868
- * This program and the accompanying materials are made
2869
- * available under the terms of the Eclipse Public License 2.0
2870
- * which is available at https://www.eclipse.org/legal/epl-2.0/
2871
- *
2872
- * SPDX-License-Identifier: EPL-2.0
2873
- */
2874
- /**
2875
- * Implementation of {@link DestroyRef} that can be used in non-Angular managed workbench objects such as handles.
2876
- */
2877
- class ɵDestroyRef {
2878
- constructor() {
2879
- this._callbacks = new Set();
2880
- this._destroyed = false;
2881
- }
2882
- onDestroy(callback) {
2883
- if (this._destroyed) {
2884
- callback();
2885
- return noop;
2886
- }
2887
- this._callbacks.add(callback);
2888
- return () => this._callbacks.delete(callback);
2889
- }
2890
- destroy() {
2891
- this._callbacks.forEach(callback => callback());
2892
- this._callbacks.clear();
2893
- this._destroyed = true;
2894
- }
2895
- get destroyed() {
2896
- return this._destroyed;
2897
- }
2898
- }
2899
-
2900
2924
  /*
2901
2925
  * Copyright (c) 2018-2024 Swiss Federal Railways
2902
2926
  *
@@ -2912,11 +2936,13 @@ class ɵDestroyRef {
2912
2936
  * Configure this direktive via the following DI tokens. These tokens must be provided at the component level.
2913
2937
  * - {@link GLASS_PANE_BLOCKABLE}: Represents the object to be blocked.
2914
2938
  * - {@link GLASS_PANE_TARGET_ELEMENT}: Controls the HTML element to block. Defaults to the directive's host element if not set.
2939
+ * - {@link GLASS_PANE_OPTIONS}: Configures the glass pane.
2915
2940
  */
2916
2941
  class GlassPaneDirective {
2917
2942
  constructor(_injector) {
2918
2943
  this._injector = _injector;
2919
2944
  this._glassPane = null;
2945
+ this._options = inject(GLASS_PANE_OPTIONS, { optional: true, host: true }) ?? undefined;
2920
2946
  this._targetElement = coerceElement(inject(GLASS_PANE_TARGET_ELEMENT, { optional: true, host: true }) ?? inject(ElementRef));
2921
2947
  this.ensureHostElementPositioned();
2922
2948
  }
@@ -2931,7 +2957,7 @@ class GlassPaneDirective {
2931
2957
  .pipe(takeUntilDestroyed())
2932
2958
  .subscribe((blockedBy) => {
2933
2959
  this._glassPane?.dispose();
2934
- this._glassPane = blockedBy ? new GlassPane(this._targetElement, blockedBy) : null;
2960
+ this._glassPane = blockedBy ? new GlassPane(this._targetElement, blockedBy, this._options) : null;
2935
2961
  });
2936
2962
  }
2937
2963
  ensureHostElementPositioned() {
@@ -2942,10 +2968,10 @@ class GlassPaneDirective {
2942
2968
  ngOnDestroy() {
2943
2969
  this._glassPane?.dispose();
2944
2970
  }
2945
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: GlassPaneDirective, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
2946
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: GlassPaneDirective, isStandalone: true, selector: "[wbGlassPane]", ngImport: i0 }); }
2971
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: GlassPaneDirective, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
2972
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: GlassPaneDirective, isStandalone: true, selector: "[wbGlassPane]", ngImport: i0 }); }
2947
2973
  }
2948
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: GlassPaneDirective, decorators: [{
2974
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: GlassPaneDirective, decorators: [{
2949
2975
  type: Directive,
2950
2976
  args: [{ selector: '[wbGlassPane]', standalone: true }]
2951
2977
  }], ctorParameters: () => [{ type: i0.Injector }] });
@@ -2953,13 +2979,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
2953
2979
  * Represents the glass pane added to the target element.
2954
2980
  */
2955
2981
  class GlassPane {
2956
- constructor(targetElement, blockedBy) {
2982
+ constructor(targetElement, blockedBy, options) {
2957
2983
  this._destroyRef = new ɵDestroyRef();
2958
2984
  const glassPaneElement = createElement('div', {
2959
2985
  parent: targetElement,
2960
- cssClass: ['glasspane', 'e2e-glasspane'],
2986
+ cssClass: ['glasspane', 'e2e-glasspane', ...Arrays.coerce(options?.cssClass)],
2961
2987
  attributes: {
2962
2988
  'data-owner': blockedBy.id,
2989
+ ...options?.attributes,
2963
2990
  },
2964
2991
  style: {
2965
2992
  position: 'absolute',
@@ -3001,6 +3028,10 @@ const GLASS_PANE_BLOCKABLE = new InjectionToken('GLASS_PANE_BLOCKABLE');
3001
3028
  * Defaults to the host element of the {@link GlassPaneDirective} if not specified.
3002
3029
  */
3003
3030
  const GLASS_PANE_TARGET_ELEMENT = new InjectionToken('GLASS_PANE_TARGET_ELEMENT');
3031
+ /**
3032
+ * DI token to configure the {@link GlassPaneDirective}.
3033
+ */
3034
+ const GLASS_PANE_OPTIONS = new InjectionToken('GLASS_PANE_OPTIONS');
3004
3035
 
3005
3036
  /*
3006
3037
  * Copyright (c) 2018-2023 Swiss Federal Railways
@@ -3063,10 +3094,10 @@ class WorkbenchDialogRegistry {
3063
3094
  this._dialogs$.value.forEach(dialog => dialog.destroy());
3064
3095
  this._dialogs$.next([]);
3065
3096
  }
3066
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3067
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogRegistry, providedIn: 'root' }); }
3097
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3098
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogRegistry, providedIn: 'root' }); }
3068
3099
  }
3069
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogRegistry, decorators: [{
3100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogRegistry, decorators: [{
3070
3101
  type: Injectable,
3071
3102
  args: [{ providedIn: 'root' }]
3072
3103
  }] });
@@ -3099,10 +3130,10 @@ class FormatUrlPipe {
3099
3130
  transform(url) {
3100
3131
  return url.map(segment => segment.path).join('/');
3101
3132
  }
3102
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FormatUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3103
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: FormatUrlPipe, isStandalone: true, name: "appFormatUrl" }); }
3133
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FormatUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3134
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: FormatUrlPipe, isStandalone: true, name: "appFormatUrl" }); }
3104
3135
  }
3105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FormatUrlPipe, decorators: [{
3136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FormatUrlPipe, decorators: [{
3106
3137
  type: Pipe,
3107
3138
  args: [{ name: 'appFormatUrl', standalone: true }]
3108
3139
  }] });
@@ -3121,10 +3152,10 @@ class PageNotFoundComponent {
3121
3152
  this.isDevMode = isDevMode();
3122
3153
  this.view = inject(WorkbenchView);
3123
3154
  }
3124
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PageNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3125
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: PageNotFoundComponent, isStandalone: true, selector: "wb-page-not-found", ngImport: i0, template: "<header>Page Not Found</header>\n\n<section class=\"message\">\n The requested page <span class=\"url\">{{view.urlSegments | appFormatUrl}}</span> was not found.\n <br>\n The URL may have changed. Try to open the view again.\n</section>\n\n<button (click)=\"view.close()\">Close</button>\n\n@if (isDevMode) {\n <section class=\"developer-hint\">\n You can create a custom \"Page Not Found\" component and register it in the workbench configuration to personalize this page.\n </section>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:2em;padding:1em;align-items:center}:host>header{font-weight:700;font-size:1.3rem}:host>section.message{text-align:center;line-height:1.75}:host>section.message>span.url{font-weight:700}:host>section.developer-hint{border:1px solid var(--sci-color-accent);border-radius:var(--sci-corner);padding:1em;max-width:550px;color:var(--sci-color-accent);font-family:monospace;text-align:center}:host>button{all:unset;cursor:pointer;padding:.5em 1.5em;color:var(--sci-color-accent-inverse);background-color:var(--sci-color-accent);background-clip:padding-box;border:1px solid var(--sci-color-accent);border-radius:var(--sci-corner);text-align:center}:host>button:focus,:host>button:active{border-color:transparent;outline:1px solid var(--sci-color-accent);color:var(--sci-color-accent-inverse)}\n"], dependencies: [{ kind: "pipe", type: FormatUrlPipe, name: "appFormatUrl" }] }); }
3155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PageNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3156
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: PageNotFoundComponent, isStandalone: true, selector: "wb-page-not-found", ngImport: i0, template: "<header>Page Not Found</header>\n\n<section class=\"message\">\n The requested page <span class=\"url\">{{view.urlSegments | appFormatUrl}}</span> was not found.\n <br>\n The URL may have changed. Try to open the view again.\n</section>\n\n<button (click)=\"view.close()\">Close</button>\n\n@if (isDevMode) {\n <section class=\"developer-hint\">\n You can create a custom \"Page Not Found\" component and register it in the workbench configuration to personalize this page.\n </section>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:2em;padding:1em;align-items:center}:host>header{font-weight:700;font-size:1.3rem}:host>section.message{text-align:center;line-height:1.75}:host>section.message>span.url{font-weight:700}:host>section.developer-hint{border:1px solid var(--sci-color-accent);border-radius:var(--sci-corner);padding:1em;max-width:550px;color:var(--sci-color-accent);font-family:monospace;text-align:center}:host>button{all:unset;cursor:pointer;padding:.5em 1.5em;color:var(--sci-color-accent-inverse);background-color:var(--sci-color-accent);background-clip:padding-box;border:1px solid var(--sci-color-accent);border-radius:var(--sci-corner);text-align:center}:host>button:focus,:host>button:active{border-color:transparent;outline:1px solid var(--sci-color-accent);color:var(--sci-color-accent-inverse)}\n"], dependencies: [{ kind: "pipe", type: FormatUrlPipe, name: "appFormatUrl" }] }); }
3126
3157
  }
3127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PageNotFoundComponent, decorators: [{
3158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PageNotFoundComponent, decorators: [{
3128
3159
  type: Component,
3129
3160
  args: [{ selector: 'wb-page-not-found', standalone: true, imports: [
3130
3161
  FormatUrlPipe,
@@ -3190,10 +3221,10 @@ const WorkbenchRouteData = {
3190
3221
  * For more information, see the `standardizeConfig` function in Angular.
3191
3222
  */
3192
3223
  class ɵEmptyOutletComponent {
3193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3194
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ɵEmptyOutletComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<router-outlet/>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
3224
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ɵEmptyOutletComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<router-outlet/>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
3195
3226
  }
3196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
3227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
3197
3228
  type: Component,
3198
3229
  args: [{ standalone: true, imports: [RouterOutlet], template: "<router-outlet/>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"] }]
3199
3230
  }] });
@@ -3270,10 +3301,10 @@ class WorkbenchAuxiliaryRoutesRegistrator {
3270
3301
  const newRoutes = [...config];
3271
3302
  this._router.config.splice(0, this._router.config.length, ...newRoutes);
3272
3303
  }
3273
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchAuxiliaryRoutesRegistrator, deps: [{ token: WorkbenchConfig }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
3274
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchAuxiliaryRoutesRegistrator, providedIn: 'root' }); }
3304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchAuxiliaryRoutesRegistrator, deps: [{ token: WorkbenchConfig }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
3305
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchAuxiliaryRoutesRegistrator, providedIn: 'root' }); }
3275
3306
  }
3276
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchAuxiliaryRoutesRegistrator, decorators: [{
3307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchAuxiliaryRoutesRegistrator, decorators: [{
3277
3308
  type: Injectable,
3278
3309
  args: [{ providedIn: 'root' }]
3279
3310
  }], ctorParameters: () => [{ type: WorkbenchConfig }, { type: i2.Router }] });
@@ -3478,10 +3509,10 @@ class WorkbenchLauncher {
3478
3509
  }
3479
3510
  }
3480
3511
  }
3481
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLauncher, deps: [{ token: WorkbenchStartup }, { token: Logger }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
3482
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLauncher, providedIn: 'root' }); }
3512
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLauncher, deps: [{ token: WorkbenchStartup }, { token: Logger }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
3513
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLauncher, providedIn: 'root' }); }
3483
3514
  }
3484
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLauncher, decorators: [{
3515
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLauncher, decorators: [{
3485
3516
  type: Injectable,
3486
3517
  args: [{ providedIn: 'root' }]
3487
3518
  }], ctorParameters: () => [{ type: WorkbenchStartup }, { type: Logger }, { type: i0.NgZone }, { type: i0.Injector }] });
@@ -3511,10 +3542,10 @@ class WorkbenchStartup {
3511
3542
  isStarted() {
3512
3543
  return this._started;
3513
3544
  }
3514
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchStartup, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3515
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchStartup, providedIn: 'root' }); }
3545
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchStartup, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3546
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchStartup, providedIn: 'root' }); }
3516
3547
  }
3517
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchStartup, decorators: [{
3548
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchStartup, decorators: [{
3518
3549
  type: Injectable,
3519
3550
  args: [{ providedIn: 'root' }]
3520
3551
  }] });
@@ -3600,12 +3631,12 @@ class WorkbenchComponent {
3600
3631
  ngOnDestroy() {
3601
3632
  this.unsetViewContainerReferences();
3602
3633
  }
3603
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchComponent, deps: [{ token: WorkbenchConfig }, { token: WorkbenchLauncher }, { token: Logger }, { token: WorkbenchStartup }], target: i0.ɵɵFactoryTarget.Component }); }
3604
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: WorkbenchComponent, isStandalone: true, selector: "wb-workbench", viewQueries: [{ propertyName: "injectIframeHost", first: true, predicate: ["iframe_host"], descendants: true, read: ViewContainerRef }, { propertyName: "injectViewDropPlaceholderHost", first: true, predicate: ["view_drop_placeholder_host"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "@if (workbenchStartup.whenStarted | async) {\n <div class=\"stacking-context-barrier\" wbGlassPane>\n @if (whenViewContainersInjected | async) {\n <wb-workbench-layout/>\n }\n <!-- Achor to attach iframes of embedded microfrontends -->\n <ng-container #iframe_host/>\n </div>\n\n <!-- Anchor to attach the visual placeholder when dragging a view over a valid drop zone -->\n <div #view_drop_placeholder_host class=\"view-drop-placeholder-host\"></div>\n\n <!-- Notifications -->\n <wb-notification-list/>\n}\n@else {\n <ng-container *ngComponentOutlet=\"splash\"/>\n}\n", styles: [":host{display:grid;position:relative;overflow:hidden;color:var(--sci-color-text);background-color:var(--sci-color-background-primary)}:host>div.stacking-context-barrier{display:flex;isolation:isolate}:host>div.stacking-context-barrier>wb-workbench-layout{flex:auto}:host>div.view-drop-placeholder-host{position:absolute}:host>wb-notification-list{position:absolute;inset:0}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: WorkbenchLayoutComponent, selector: "wb-workbench-layout" }, { kind: "component", type: NotificationListComponent, selector: "wb-notification-list" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
3634
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchComponent, deps: [{ token: WorkbenchConfig }, { token: WorkbenchLauncher }, { token: Logger }, { token: WorkbenchStartup }], target: i0.ɵɵFactoryTarget.Component }); }
3635
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: WorkbenchComponent, isStandalone: true, selector: "wb-workbench", viewQueries: [{ propertyName: "injectIframeHost", first: true, predicate: ["iframe_host"], descendants: true, read: ViewContainerRef }, { propertyName: "injectViewDropPlaceholderHost", first: true, predicate: ["view_drop_placeholder_host"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "@if (workbenchStartup.whenStarted | async) {\n <div class=\"stacking-context-barrier\" wbGlassPane>\n @if (whenViewContainersInjected | async) {\n <wb-workbench-layout/>\n }\n <!-- Achor to attach iframes of embedded microfrontends -->\n <ng-container #iframe_host/>\n </div>\n\n <!-- Anchor to attach the visual placeholder when dragging a view over a valid drop zone -->\n <div #view_drop_placeholder_host class=\"view-drop-placeholder-host\"></div>\n\n <!-- Notifications -->\n <wb-notification-list/>\n} @else {\n <ng-container *ngComponentOutlet=\"splash\"/>\n}\n", styles: [":host{display:grid;position:relative;overflow:hidden;color:var(--sci-color-text);background-color:var(--sci-color-background-primary)}:host>div.stacking-context-barrier{display:flex;isolation:isolate}:host>div.stacking-context-barrier>wb-workbench-layout{flex:auto}:host>div.view-drop-placeholder-host{position:absolute}:host>wb-notification-list{position:absolute;inset:0}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: WorkbenchLayoutComponent, selector: "wb-workbench-layout" }, { kind: "component", type: NotificationListComponent, selector: "wb-notification-list" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
3605
3636
  configureWorkbenchGlassPane(),
3606
3637
  ] }); }
3607
3638
  }
3608
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchComponent, decorators: [{
3639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchComponent, decorators: [{
3609
3640
  type: Component,
3610
3641
  args: [{ selector: 'wb-workbench', standalone: true, imports: [
3611
3642
  AsyncPipe,
@@ -3615,7 +3646,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
3615
3646
  GlassPaneDirective,
3616
3647
  ], viewProviders: [
3617
3648
  configureWorkbenchGlassPane(),
3618
- ], template: "@if (workbenchStartup.whenStarted | async) {\n <div class=\"stacking-context-barrier\" wbGlassPane>\n @if (whenViewContainersInjected | async) {\n <wb-workbench-layout/>\n }\n <!-- Achor to attach iframes of embedded microfrontends -->\n <ng-container #iframe_host/>\n </div>\n\n <!-- Anchor to attach the visual placeholder when dragging a view over a valid drop zone -->\n <div #view_drop_placeholder_host class=\"view-drop-placeholder-host\"></div>\n\n <!-- Notifications -->\n <wb-notification-list/>\n}\n@else {\n <ng-container *ngComponentOutlet=\"splash\"/>\n}\n", styles: [":host{display:grid;position:relative;overflow:hidden;color:var(--sci-color-text);background-color:var(--sci-color-background-primary)}:host>div.stacking-context-barrier{display:flex;isolation:isolate}:host>div.stacking-context-barrier>wb-workbench-layout{flex:auto}:host>div.view-drop-placeholder-host{position:absolute}:host>wb-notification-list{position:absolute;inset:0}\n"] }]
3649
+ ], template: "@if (workbenchStartup.whenStarted | async) {\n <div class=\"stacking-context-barrier\" wbGlassPane>\n @if (whenViewContainersInjected | async) {\n <wb-workbench-layout/>\n }\n <!-- Achor to attach iframes of embedded microfrontends -->\n <ng-container #iframe_host/>\n </div>\n\n <!-- Anchor to attach the visual placeholder when dragging a view over a valid drop zone -->\n <div #view_drop_placeholder_host class=\"view-drop-placeholder-host\"></div>\n\n <!-- Notifications -->\n <wb-notification-list/>\n} @else {\n <ng-container *ngComponentOutlet=\"splash\"/>\n}\n", styles: [":host{display:grid;position:relative;overflow:hidden;color:var(--sci-color-text);background-color:var(--sci-color-background-primary)}:host>div.stacking-context-barrier{display:flex;isolation:isolate}:host>div.stacking-context-barrier>wb-workbench-layout{flex:auto}:host>div.view-drop-placeholder-host{position:absolute}:host>wb-notification-list{position:absolute;inset:0}\n"] }]
3619
3650
  }], ctorParameters: () => [{ type: WorkbenchConfig }, { type: WorkbenchLauncher }, { type: Logger }, { type: WorkbenchStartup }], propDecorators: { injectIframeHost: [{
3620
3651
  type: ViewChild,
3621
3652
  args: ['iframe_host', { read: ViewContainerRef }]
@@ -3645,6 +3676,10 @@ function configureWorkbenchGlassPane() {
3645
3676
  }
3646
3677
  },
3647
3678
  },
3679
+ {
3680
+ provide: GLASS_PANE_OPTIONS,
3681
+ useValue: { cssClass: 'e2e-workbench' },
3682
+ },
3648
3683
  ];
3649
3684
  }
3650
3685
 
@@ -3656,10 +3691,10 @@ function configureWorkbenchGlassPane() {
3656
3691
  * A view can inject `ActivatedRoute` to obtain parameters passed to the navigation and/or read data associated with the route.
3657
3692
  */
3658
3693
  class WorkbenchRouter {
3659
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchRouter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3660
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchRouter, providedIn: 'root', useExisting: ɵWorkbenchRouter }); }
3694
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchRouter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3695
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchRouter, providedIn: 'root', useExisting: ɵWorkbenchRouter }); }
3661
3696
  }
3662
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchRouter, decorators: [{
3697
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchRouter, decorators: [{
3663
3698
  type: Injectable,
3664
3699
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchRouter }]
3665
3700
  }] });
@@ -3734,7 +3769,7 @@ class WorkbenchRouterLinkDirective {
3734
3769
  const controlPressed = ctrlKey || metaKey;
3735
3770
  return {
3736
3771
  ...this._extras,
3737
- relativeTo: Defined.orElse(this._extras.relativeTo, this._route),
3772
+ relativeTo: Defined.orElse(this._extras.relativeTo, this._route), // `null` is a valid `relativeTo` for absolute navigation
3738
3773
  target: controlPressed ? 'blank' : this._extras.target ?? this._view?.id,
3739
3774
  activate: this._extras.activate ?? !controlPressed, // by default, the view is not activated if CTRL or META modifier key is pressed (same behavior as for browser links)
3740
3775
  };
@@ -3757,10 +3792,10 @@ class WorkbenchRouterLinkDirective {
3757
3792
  ngOnDestroy() {
3758
3793
  this._ngOnDestroy$.next();
3759
3794
  }
3760
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchRouterLinkDirective, deps: [{ token: WorkbenchRouter }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3$1.LocationStrategy }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: WorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3761
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: WorkbenchRouterLinkDirective, isStandalone: true, selector: "[wbRouterLink]", inputs: { wbRouterLink: "wbRouterLink", extras: ["wbRouterLinkExtras", "extras"] }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.metaKey)" }, properties: { "attr.href": "this.href" } }, usesOnChanges: true, ngImport: i0 }); }
3795
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchRouterLinkDirective, deps: [{ token: WorkbenchRouter }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3$1.LocationStrategy }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: WorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3796
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: WorkbenchRouterLinkDirective, isStandalone: true, selector: "[wbRouterLink]", inputs: { wbRouterLink: "wbRouterLink", extras: ["wbRouterLinkExtras", "extras"] }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.metaKey)" }, properties: { "attr.href": "this.href" } }, usesOnChanges: true, ngImport: i0 }); }
3762
3797
  }
3763
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchRouterLinkDirective, decorators: [{
3798
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchRouterLinkDirective, decorators: [{
3764
3799
  type: Directive,
3765
3800
  args: [{ selector: '[wbRouterLink]', standalone: true }]
3766
3801
  }], ctorParameters: () => [{ type: WorkbenchRouter }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3$1.LocationStrategy }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: WorkbenchView, decorators: [{
@@ -3838,10 +3873,10 @@ class WorkbenchPerspectiveRegistry {
3838
3873
  this._registry.objects.forEach(perspective => perspective.destroy());
3839
3874
  this._registry.clear();
3840
3875
  }
3841
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3842
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveRegistry, providedIn: 'root' }); }
3876
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3877
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveRegistry, providedIn: 'root' }); }
3843
3878
  }
3844
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveRegistry, decorators: [{
3879
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveRegistry, decorators: [{
3845
3880
  type: Injectable,
3846
3881
  args: [{ providedIn: 'root' }]
3847
3882
  }] });
@@ -3881,67 +3916,10 @@ class WorkbenchPartActionRegistry {
3881
3916
  ngOnDestroy() {
3882
3917
  this._registry.clear();
3883
3918
  }
3884
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartActionRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3885
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartActionRegistry, providedIn: 'root' }); }
3886
- }
3887
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartActionRegistry, decorators: [{
3888
- type: Injectable,
3889
- args: [{ providedIn: 'root' }]
3890
- }] });
3891
-
3892
- /*
3893
- * Copyright (c) 2018-2023 Swiss Federal Railways
3894
- *
3895
- * This program and the accompanying materials are made
3896
- * available under the terms of the Eclipse Public License 2.0
3897
- * which is available at https://www.eclipse.org/legal/epl-2.0/
3898
- *
3899
- * SPDX-License-Identifier: EPL-2.0
3900
- */
3901
- /**
3902
- * Migrates the workbench layout from version 1 to version 2.
3903
- *
3904
- * TODO [Angular 20] Remove migrator.
3905
- */
3906
- class WorkbenchLayoutMigrationV2 {
3907
- migrate(json) {
3908
- const partsLayoutV1 = JSON.parse(json);
3909
- const partsGridV2 = {
3910
- root: this.migrateGridElement(partsLayoutV1.root),
3911
- activePartId: partsLayoutV1.activePartId,
3912
- };
3913
- return JSON.stringify(partsGridV2);
3914
- }
3915
- migrateGridElement(elementV1) {
3916
- if (elementV1.hasOwnProperty('partId')) { // eslint-disable-line no-prototype-builtins
3917
- const partV1 = elementV1;
3918
- return {
3919
- type: 'MPart',
3920
- id: partV1.partId,
3921
- views: partV1.viewIds.map(viewId => ({ id: viewId })),
3922
- activeViewId: partV1.activeViewId,
3923
- structural: false,
3924
- };
3925
- }
3926
- else if (elementV1.hasOwnProperty('nodeId')) { // eslint-disable-line no-prototype-builtins
3927
- const treeNodeV1 = elementV1;
3928
- return {
3929
- type: 'MTreeNode',
3930
- nodeId: treeNodeV1.nodeId,
3931
- child1: this.migrateGridElement(treeNodeV1.child1),
3932
- child2: this.migrateGridElement(treeNodeV1.child2),
3933
- ratio: treeNodeV1.ratio,
3934
- direction: treeNodeV1.direction,
3935
- };
3936
- }
3937
- else {
3938
- throw Error(`[WorkbenchLayoutError] Unable to migrate to the latest version. Expected element to be of type 'MPart' or 'MTreeNode'. [version=1, element=${JSON.stringify(elementV1)}]`);
3939
- }
3940
- }
3941
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV2, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3942
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV2, providedIn: 'root' }); }
3919
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3920
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionRegistry, providedIn: 'root' }); }
3943
3921
  }
3944
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV2, decorators: [{
3922
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionRegistry, decorators: [{
3945
3923
  type: Injectable,
3946
3924
  args: [{ providedIn: 'root' }]
3947
3925
  }] });
@@ -4039,10 +4017,10 @@ class WorkbenchLayoutMigrationV3 {
4039
4017
  getCurrentUrl() {
4040
4018
  return this._router.getCurrentNavigation()?.initialUrl ?? this._router.parseUrl(this._router.url);
4041
4019
  }
4042
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV3, deps: [{ token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
4043
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV3, providedIn: 'root' }); }
4020
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV3, deps: [{ token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
4021
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV3, providedIn: 'root' }); }
4044
4022
  }
4045
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV3, decorators: [{
4023
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV3, decorators: [{
4046
4024
  type: Injectable,
4047
4025
  args: [{ providedIn: 'root' }]
4048
4026
  }], ctorParameters: () => [{ type: i2.Router }] });
@@ -4154,10 +4132,10 @@ class WorkbenchLayoutMigrationV4 {
4154
4132
  return { ...viewV3, uid: undefined }; // `uid` is transient, i.e., set when deserializing the grid.
4155
4133
  }
4156
4134
  }
4157
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV4, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4158
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV4, providedIn: 'root' }); }
4135
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV4, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4136
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV4, providedIn: 'root' }); }
4159
4137
  }
4160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutMigrationV4, decorators: [{
4138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV4, decorators: [{
4161
4139
  type: Injectable,
4162
4140
  args: [{ providedIn: 'root' }]
4163
4141
  }] });
@@ -4177,7 +4155,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
4177
4155
  class WorkbenchLayoutSerializer {
4178
4156
  constructor() {
4179
4157
  this._workbenchLayoutMigrator = new WorkbenchMigrator()
4180
- .registerMigration(1, inject(WorkbenchLayoutMigrationV2))
4181
4158
  .registerMigration(2, inject(WorkbenchLayoutMigrationV3))
4182
4159
  .registerMigration(3, inject(WorkbenchLayoutMigrationV4));
4183
4160
  }
@@ -4247,10 +4224,10 @@ class WorkbenchLayoutSerializer {
4247
4224
  return [viewId, segments.map(segment => new UrlSegment(segment.path, segment.parameters))];
4248
4225
  }));
4249
4226
  }
4250
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4251
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutSerializer, providedIn: 'root' }); }
4227
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4228
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutSerializer, providedIn: 'root' }); }
4252
4229
  }
4253
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutSerializer, decorators: [{
4230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutSerializer, decorators: [{
4254
4231
  type: Injectable,
4255
4232
  args: [{ providedIn: 'root' }]
4256
4233
  }] });
@@ -5074,10 +5051,10 @@ class PartActivationInstantProvider {
5074
5051
  getActivationInstant(partId) {
5075
5052
  return this._partRegistry.get(partId, { orElse: null })?.activationInstant ?? 0;
5076
5053
  }
5077
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartActivationInstantProvider, deps: [{ token: WorkbenchPartRegistry }], target: i0.ɵɵFactoryTarget.Injectable }); }
5078
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartActivationInstantProvider, providedIn: 'root' }); }
5054
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartActivationInstantProvider, deps: [{ token: WorkbenchPartRegistry }], target: i0.ɵɵFactoryTarget.Injectable }); }
5055
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartActivationInstantProvider, providedIn: 'root' }); }
5079
5056
  }
5080
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartActivationInstantProvider, decorators: [{
5057
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartActivationInstantProvider, decorators: [{
5081
5058
  type: Injectable,
5082
5059
  args: [{ providedIn: 'root' }]
5083
5060
  }], ctorParameters: () => [{ type: WorkbenchPartRegistry }] });
@@ -5099,10 +5076,10 @@ class ViewActivationInstantProvider {
5099
5076
  getActivationInstant(viewId) {
5100
5077
  return this._viewRegistry.get(viewId, { orElse: null })?.activationInstant ?? 0;
5101
5078
  }
5102
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewActivationInstantProvider, deps: [{ token: WorkbenchViewRegistry }], target: i0.ɵɵFactoryTarget.Injectable }); }
5103
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewActivationInstantProvider, providedIn: 'root' }); }
5079
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewActivationInstantProvider, deps: [{ token: WorkbenchViewRegistry }], target: i0.ɵɵFactoryTarget.Injectable }); }
5080
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewActivationInstantProvider, providedIn: 'root' }); }
5104
5081
  }
5105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewActivationInstantProvider, decorators: [{
5082
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewActivationInstantProvider, decorators: [{
5106
5083
  type: Injectable,
5107
5084
  args: [{ providedIn: 'root' }]
5108
5085
  }], ctorParameters: () => [{ type: WorkbenchViewRegistry }] });
@@ -5165,10 +5142,10 @@ class ɵWorkbenchLayoutFactory {
5165
5142
  viewStates: options?.viewStates,
5166
5143
  }));
5167
5144
  }
5168
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchLayoutFactory, deps: [{ token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
5169
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchLayoutFactory, providedIn: 'root' }); }
5145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchLayoutFactory, deps: [{ token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
5146
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchLayoutFactory, providedIn: 'root' }); }
5170
5147
  }
5171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchLayoutFactory, decorators: [{
5148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchLayoutFactory, decorators: [{
5172
5149
  type: Injectable,
5173
5150
  args: [{ providedIn: 'root' }]
5174
5151
  }], ctorParameters: () => [{ type: i0.EnvironmentInjector }] });
@@ -5202,10 +5179,10 @@ class WorkbenchGridMerger {
5202
5179
  }
5203
5180
  return grids.local;
5204
5181
  }
5205
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchGridMerger, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5206
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchGridMerger, providedIn: 'root' }); }
5182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchGridMerger, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5183
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchGridMerger, providedIn: 'root' }); }
5207
5184
  }
5208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchGridMerger, decorators: [{
5185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchGridMerger, decorators: [{
5209
5186
  type: Injectable,
5210
5187
  args: [{ providedIn: 'root' }]
5211
5188
  }] });
@@ -5238,10 +5215,10 @@ class DefaultWorkbenchStorage {
5238
5215
  store(key, value) {
5239
5216
  localStorage.setItem(key, value);
5240
5217
  }
5241
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DefaultWorkbenchStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5242
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DefaultWorkbenchStorage }); }
5218
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DefaultWorkbenchStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5219
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DefaultWorkbenchStorage }); }
5243
5220
  }
5244
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DefaultWorkbenchStorage, decorators: [{
5221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DefaultWorkbenchStorage, decorators: [{
5245
5222
  type: Injectable
5246
5223
  }] });
5247
5224
 
@@ -5280,10 +5257,10 @@ class WorkbenchPerspectiveMigrationV2 {
5280
5257
  return [viewId, commandsToSegments(commands)];
5281
5258
  })));
5282
5259
  }
5283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveMigrationV2, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5284
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveMigrationV2, providedIn: 'root' }); }
5260
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveMigrationV2, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5261
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveMigrationV2, providedIn: 'root' }); }
5285
5262
  }
5286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveMigrationV2, decorators: [{
5263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveMigrationV2, decorators: [{
5287
5264
  type: Injectable,
5288
5265
  args: [{ providedIn: 'root' }]
5289
5266
  }] });
@@ -5336,10 +5313,10 @@ class WorkbenchPerspectiveSerializer {
5336
5313
  const migrated = this._workbenchPerspectiveMigrator.migrate(json, { from: serializedVersion, to: WORKBENCH_PERSPECTIVE_LAYOUT_VERSION });
5337
5314
  return JSON.parse(migrated);
5338
5315
  }
5339
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5340
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveSerializer, providedIn: 'root' }); }
5316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5317
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveSerializer, providedIn: 'root' }); }
5341
5318
  }
5342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveSerializer, decorators: [{
5319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveSerializer, decorators: [{
5343
5320
  type: Injectable,
5344
5321
  args: [{ providedIn: 'root' }]
5345
5322
  }] });
@@ -5410,10 +5387,10 @@ class WorkbenchPerspectiveStorageService {
5410
5387
  async storeActivePerspectiveId(perspectiveId) {
5411
5388
  return this._storage.store(storageKeys.activePerspectiveId, perspectiveId);
5412
5389
  }
5413
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveStorageService, deps: [{ token: WorkbenchStorage }, { token: WorkbenchPerspectiveSerializer }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
5414
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveStorageService, providedIn: 'root' }); }
5390
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveStorageService, deps: [{ token: WorkbenchStorage }, { token: WorkbenchPerspectiveSerializer }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
5391
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveStorageService, providedIn: 'root' }); }
5415
5392
  }
5416
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveStorageService, decorators: [{
5393
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveStorageService, decorators: [{
5417
5394
  type: Injectable,
5418
5395
  args: [{ providedIn: 'root' }]
5419
5396
  }], ctorParameters: () => [{ type: WorkbenchStorage }, { type: WorkbenchPerspectiveSerializer }, { type: Logger }] });
@@ -5463,10 +5440,10 @@ class WorkbenchPerspectiveViewConflictResolver {
5463
5440
  });
5464
5441
  return perspectiveLayout;
5465
5442
  }
5466
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveViewConflictResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5467
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveViewConflictResolver, providedIn: 'root' }); }
5443
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveViewConflictResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5444
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveViewConflictResolver, providedIn: 'root' }); }
5468
5445
  }
5469
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveViewConflictResolver, decorators: [{
5446
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveViewConflictResolver, decorators: [{
5470
5447
  type: Injectable,
5471
5448
  args: [{ providedIn: 'root' }]
5472
5449
  }] });
@@ -5786,10 +5763,10 @@ class WorkbenchPerspectiveService {
5786
5763
  get activePerspective() {
5787
5764
  return this._perspectiveRegistry.perspectives.find(perspective => perspective.active) ?? null;
5788
5765
  }
5789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveService, deps: [{ token: WORKBENCH_LAYOUT_CONFIG }, { token: WorkbenchPerspectiveRegistry }, { token: i0.EnvironmentInjector }, { token: WorkbenchPerspectiveStorageService }, { token: WorkbenchStartup }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
5790
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveService, providedIn: 'root' }); }
5766
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveService, deps: [{ token: WORKBENCH_LAYOUT_CONFIG }, { token: WorkbenchPerspectiveRegistry }, { token: i0.EnvironmentInjector }, { token: WorkbenchPerspectiveStorageService }, { token: WorkbenchStartup }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
5767
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveService, providedIn: 'root' }); }
5791
5768
  }
5792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPerspectiveService, decorators: [{
5769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPerspectiveService, decorators: [{
5793
5770
  type: Injectable,
5794
5771
  args: [{ providedIn: 'root' }]
5795
5772
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -5875,10 +5852,10 @@ class WorkbenchThemeSwitcher {
5875
5852
  await this.switchTheme(theme);
5876
5853
  }
5877
5854
  }
5878
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchThemeSwitcher, deps: [{ token: WorkbenchStorage }], target: i0.ɵɵFactoryTarget.Injectable }); }
5879
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchThemeSwitcher, providedIn: 'root' }); }
5855
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchThemeSwitcher, deps: [{ token: WorkbenchStorage }], target: i0.ɵɵFactoryTarget.Injectable }); }
5856
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchThemeSwitcher, providedIn: 'root' }); }
5880
5857
  }
5881
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchThemeSwitcher, decorators: [{
5858
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchThemeSwitcher, decorators: [{
5882
5859
  type: Injectable,
5883
5860
  args: [{ providedIn: 'root' }]
5884
5861
  }], ctorParameters: () => [{ type: WorkbenchStorage }] });
@@ -5969,10 +5946,10 @@ class ɵWorkbenchService {
5969
5946
  switchTheme(theme) {
5970
5947
  return this._workbenchThemeSwitcher.switchTheme(theme);
5971
5948
  }
5972
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchService, deps: [{ token: WorkbenchRouter }, { token: WorkbenchPerspectiveRegistry }, { token: WorkbenchPartRegistry }, { token: WorkbenchPartActionRegistry }, { token: WorkbenchViewRegistry }, { token: WorkbenchPerspectiveService }, { token: WorkbenchLayoutService }, { token: WorkbenchThemeSwitcher }], target: i0.ɵɵFactoryTarget.Injectable }); }
5973
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchService, providedIn: 'root' }); }
5949
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchService, deps: [{ token: WorkbenchRouter }, { token: WorkbenchPerspectiveRegistry }, { token: WorkbenchPartRegistry }, { token: WorkbenchPartActionRegistry }, { token: WorkbenchViewRegistry }, { token: WorkbenchPerspectiveService }, { token: WorkbenchLayoutService }, { token: WorkbenchThemeSwitcher }], target: i0.ɵɵFactoryTarget.Injectable }); }
5950
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchService, providedIn: 'root' }); }
5974
5951
  }
5975
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchService, decorators: [{
5952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchService, decorators: [{
5976
5953
  type: Injectable,
5977
5954
  args: [{ providedIn: 'root' }]
5978
5955
  }], ctorParameters: () => [{ type: WorkbenchRouter }, { type: WorkbenchPerspectiveRegistry }, { type: WorkbenchPartRegistry }, { type: WorkbenchPartActionRegistry }, { type: WorkbenchViewRegistry }, { type: WorkbenchPerspectiveService }, { type: WorkbenchLayoutService }, { type: WorkbenchThemeSwitcher }] });
@@ -5995,10 +5972,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
5995
5972
  * Perspectives share the same main area, if any.
5996
5973
  */
5997
5974
  class WorkbenchService {
5998
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5999
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchService, providedIn: 'root', useExisting: ɵWorkbenchService }); }
5975
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5976
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchService, providedIn: 'root', useExisting: ɵWorkbenchService }); }
6000
5977
  }
6001
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchService, decorators: [{
5978
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchService, decorators: [{
6002
5979
  type: Injectable,
6003
5980
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchService }]
6004
5981
  }] });
@@ -6059,10 +6036,10 @@ class WorkbenchPartActionDirective {
6059
6036
  ngOnDestroy() {
6060
6037
  this._action?.dispose();
6061
6038
  }
6062
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartActionDirective, deps: [{ token: i0.TemplateRef }, { token: WorkbenchService }, { token: WorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
6063
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: WorkbenchPartActionDirective, isStandalone: true, selector: "ng-template[wbPartAction]", inputs: { align: "align", canMatch: "canMatch", cssClass: "cssClass" }, ngImport: i0 }); }
6039
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionDirective, deps: [{ token: i0.TemplateRef }, { token: WorkbenchService }, { token: WorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
6040
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: WorkbenchPartActionDirective, isStandalone: true, selector: "ng-template[wbPartAction]", inputs: { align: "align", canMatch: "canMatch", cssClass: "cssClass" }, ngImport: i0 }); }
6064
6041
  }
6065
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPartActionDirective, decorators: [{
6042
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPartActionDirective, decorators: [{
6066
6043
  type: Directive,
6067
6044
  args: [{ selector: 'ng-template[wbPartAction]', standalone: true }]
6068
6045
  }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: WorkbenchService }, { type: WorkbenchView, decorators: [{
@@ -6126,10 +6103,10 @@ class WorkbenchViewMenuItemDirective {
6126
6103
  ngOnDestroy() {
6127
6104
  this._menuItemHandle.dispose();
6128
6105
  }
6129
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchViewMenuItemDirective, deps: [{ token: i0.TemplateRef }, { token: WorkbenchService }, { token: WorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
6130
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: WorkbenchViewMenuItemDirective, isStandalone: true, selector: "ng-template[wbViewMenuItem]", inputs: { accelerator: "accelerator", group: "group", disabled: "disabled", cssClass: "cssClass" }, outputs: { action: "action" }, ngImport: i0 }); }
6106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchViewMenuItemDirective, deps: [{ token: i0.TemplateRef }, { token: WorkbenchService }, { token: WorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
6107
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: WorkbenchViewMenuItemDirective, isStandalone: true, selector: "ng-template[wbViewMenuItem]", inputs: { accelerator: "accelerator", group: "group", disabled: "disabled", cssClass: "cssClass" }, outputs: { action: "action" }, ngImport: i0 }); }
6131
6108
  }
6132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchViewMenuItemDirective, decorators: [{
6109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchViewMenuItemDirective, decorators: [{
6133
6110
  type: Directive,
6134
6111
  args: [{ selector: 'ng-template[wbViewMenuItem]', standalone: true }]
6135
6112
  }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: WorkbenchService }, { type: WorkbenchView, decorators: [{
@@ -6175,10 +6152,10 @@ class ActivationInstantProvider {
6175
6152
  now() {
6176
6153
  return Date.now();
6177
6154
  }
6178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ActivationInstantProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6179
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ActivationInstantProvider, providedIn: 'root' }); }
6155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ActivationInstantProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6156
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ActivationInstantProvider, providedIn: 'root' }); }
6180
6157
  }
6181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ActivationInstantProvider, decorators: [{
6158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ActivationInstantProvider, decorators: [{
6182
6159
  type: Injectable,
6183
6160
  args: [{ providedIn: 'root' }]
6184
6161
  }] });
@@ -6610,10 +6587,10 @@ class MovableDirective {
6610
6587
  }
6611
6588
  });
6612
6589
  }
6613
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MovableDirective, deps: [{ token: i0.ElementRef }, { token: i0.DestroyRef }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Directive }); }
6614
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: MovableDirective, isStandalone: true, selector: "[wbMovable]", inputs: { wbHandleElement: ["wbHandle", "wbHandleElement"] }, outputs: { wbMove: "wbMovableMove" }, ngImport: i0 }); }
6590
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MovableDirective, deps: [{ token: i0.ElementRef }, { token: i0.DestroyRef }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Directive }); }
6591
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: MovableDirective, isStandalone: true, selector: "[wbMovable]", inputs: { wbHandleElement: ["wbHandle", "wbHandleElement"] }, outputs: { wbMove: "wbMovableMove" }, ngImport: i0 }); }
6615
6592
  }
6616
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MovableDirective, decorators: [{
6593
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MovableDirective, decorators: [{
6617
6594
  type: Directive,
6618
6595
  args: [{ selector: '[wbMovable]', standalone: true }]
6619
6596
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.DestroyRef }, { type: WorkbenchLayoutService }], propDecorators: { wbHandleElement: [{
@@ -6922,10 +6899,10 @@ class ResizableDirective {
6922
6899
  this.uninstallHandles();
6923
6900
  }
6924
6901
  }
6925
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ResizableDirective, deps: [{ token: i0.ElementRef }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Directive }); }
6926
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: ResizableDirective, isStandalone: true, selector: "[wbResizable]", inputs: { enabled: ["wbResizableEnabled", "enabled"] }, outputs: { wbResize: "wbResizableResize" }, usesOnChanges: true, ngImport: i0 }); }
6902
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ResizableDirective, deps: [{ token: i0.ElementRef }, { token: WorkbenchLayoutService }], target: i0.ɵɵFactoryTarget.Directive }); }
6903
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: ResizableDirective, isStandalone: true, selector: "[wbResizable]", inputs: { enabled: ["wbResizableEnabled", "enabled"] }, outputs: { wbResize: "wbResizableResize" }, usesOnChanges: true, ngImport: i0 }); }
6927
6904
  }
6928
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ResizableDirective, decorators: [{
6905
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ResizableDirective, decorators: [{
6929
6906
  type: Directive,
6930
6907
  args: [{ selector: '[wbResizable]', standalone: true }]
6931
6908
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: WorkbenchLayoutService }], propDecorators: { enabled: [{
@@ -7041,10 +7018,10 @@ class DialogHeaderComponent {
7041
7018
  onCloseMouseDown(event) {
7042
7019
  event.stopPropagation(); // Prevent dragging the dialog with the close button.
7043
7020
  }
7044
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DialogHeaderComponent, deps: [{ token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Component }); }
7045
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", 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$" }] }); }
7021
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogHeaderComponent, deps: [{ token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Component }); }
7022
+ 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$" }] }); }
7046
7023
  }
7047
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DialogHeaderComponent, decorators: [{
7024
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogHeaderComponent, decorators: [{
7048
7025
  type: Component,
7049
7026
  args: [{ selector: 'wb-dialog-header', standalone: true, imports: [
7050
7027
  AsyncPipe,
@@ -7080,10 +7057,10 @@ class NullIfEmptyPipe {
7080
7057
  }
7081
7058
  return value;
7082
7059
  }
7083
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NullIfEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7084
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: NullIfEmptyPipe, isStandalone: true, name: "wbNullIfEmpty" }); }
7060
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NullIfEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7061
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: NullIfEmptyPipe, isStandalone: true, name: "wbNullIfEmpty" }); }
7085
7062
  }
7086
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NullIfEmptyPipe, decorators: [{
7063
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NullIfEmptyPipe, decorators: [{
7087
7064
  type: Pipe,
7088
7065
  args: [{ name: 'wbNullIfEmpty', standalone: true }]
7089
7066
  }] });
@@ -7104,10 +7081,10 @@ class DialogActionFilterPipe {
7104
7081
  transform(actions, align) {
7105
7082
  return actions?.filter(action => action.align === align) ?? [];
7106
7083
  }
7107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DialogActionFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7108
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: DialogActionFilterPipe, isStandalone: true, name: "wbDialogActionFilter" }); }
7084
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogActionFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7085
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: DialogActionFilterPipe, isStandalone: true, name: "wbDialogActionFilter" }); }
7109
7086
  }
7110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DialogActionFilterPipe, decorators: [{
7087
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogActionFilterPipe, decorators: [{
7111
7088
  type: Pipe,
7112
7089
  args: [{ name: 'wbDialogActionFilter', standalone: true }]
7113
7090
  }] });
@@ -7128,10 +7105,10 @@ class DialogFooterComponent {
7128
7105
  constructor(dialog) {
7129
7106
  this.dialog = dialog;
7130
7107
  }
7131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DialogFooterComponent, deps: [{ token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Component }); }
7132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: DialogFooterComponent, isStandalone: true, selector: "wb-dialog-footer", ngImport: i0, template: "<!-- Start Actions -->\n@if (dialog.actions | wbDialogActionFilter:'start' | wbNullIfEmpty; as actions) {\n <div class=\"actions start\">\n @for (action of actions; track action) {\n <ng-container *ngTemplateOutlet=\"action.template\"/>\n }\n </div>\n}\n\n<!-- End Actions -->\n@if (dialog.actions | wbDialogActionFilter:'end' | wbNullIfEmpty; as actions) {\n <div class=\"actions end\">\n @for (action of actions; track action) {\n <ng-container *ngTemplateOutlet=\"action.template\"/>\n }\n </div>\n}\n", styles: [":host{display:flex;padding:calc(.75 * var(--sci-workbench-dialog-padding)) var(--sci-workbench-dialog-padding);gap:calc(2 * var(--sci-workbench-dialog-padding))}:host>div.actions{flex:auto;display:flex;align-items:center;gap:calc(.5 * var(--sci-workbench-dialog-padding))}:host>div.actions.start{place-content:flex-start}:host>div.actions.end{place-content:flex-end}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: NullIfEmptyPipe, name: "wbNullIfEmpty" }, { kind: "pipe", type: DialogActionFilterPipe, name: "wbDialogActionFilter" }] }); }
7108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogFooterComponent, deps: [{ token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Component }); }
7109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: DialogFooterComponent, isStandalone: true, selector: "wb-dialog-footer", ngImport: i0, template: "<!-- Start Actions -->\n@if (dialog.actions | wbDialogActionFilter:'start' | wbNullIfEmpty; as actions) {\n <div class=\"actions start\">\n @for (action of actions; track action) {\n <ng-container *ngTemplateOutlet=\"action.template\"/>\n }\n </div>\n}\n\n<!-- End Actions -->\n@if (dialog.actions | wbDialogActionFilter:'end' | wbNullIfEmpty; as actions) {\n <div class=\"actions end\">\n @for (action of actions; track action) {\n <ng-container *ngTemplateOutlet=\"action.template\"/>\n }\n </div>\n}\n", styles: [":host{display:flex;padding:calc(.75 * var(--sci-workbench-dialog-padding)) var(--sci-workbench-dialog-padding);gap:calc(2 * var(--sci-workbench-dialog-padding))}:host>div.actions{flex:auto;display:flex;align-items:center;gap:calc(.5 * var(--sci-workbench-dialog-padding))}:host>div.actions.start{place-content:flex-start}:host>div.actions.end{place-content:flex-end}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: NullIfEmptyPipe, name: "wbNullIfEmpty" }, { kind: "pipe", type: DialogActionFilterPipe, name: "wbDialogActionFilter" }] }); }
7133
7110
  }
7134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: DialogFooterComponent, decorators: [{
7111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DialogFooterComponent, decorators: [{
7135
7112
  type: Component,
7136
7113
  args: [{ selector: 'wb-dialog-footer', standalone: true, imports: [
7137
7114
  NgTemplateOutlet,
@@ -7187,41 +7164,62 @@ class WorkbenchDialogComponent {
7187
7164
  this.dialog = dialog;
7188
7165
  this._zone = _zone;
7189
7166
  this._destroyRef = _destroyRef;
7190
- this._document = inject(DOCUMENT);
7167
+ /**
7168
+ * Element of the dialog that has or last had focus.
7169
+ */
7170
+ this._activeElement$ = new BehaviorSubject(undefined);
7191
7171
  this.transformTranslateX = 0;
7192
7172
  this.transformTranslateY = 0;
7193
7173
  this.setDialogOffset();
7194
7174
  }
7195
7175
  ngOnInit() {
7196
7176
  this.trackFocus();
7177
+ this.autoFocus();
7197
7178
  }
7198
- ngAfterViewInit() {
7199
- this.focus();
7179
+ setDialogOffset() {
7180
+ const stackPosition = this.dialog.getPositionInDialogStack();
7181
+ this.transformTranslateX = stackPosition * 10;
7182
+ this.transformTranslateY = stackPosition * 10;
7200
7183
  }
7201
7184
  /**
7202
- * Focuses the last focused element, if any, or the first focusable element otherwise.
7185
+ * Focuses this dialog, restoring the focus to the last element that had the focus,
7186
+ * or otherwise focuses the first focusable element.
7203
7187
  */
7204
7188
  focus() {
7205
- if (this._activeElement) {
7206
- this._activeElement.focus();
7189
+ const activeElement = this._activeElement$.getValue();
7190
+ if (activeElement) {
7191
+ activeElement.focus();
7207
7192
  }
7208
7193
  else if (!this._cdkTrapFocus.focusTrap.focusFirstTabbableElement()) {
7194
+ // Focus dialog element so that it can be closed via Escape keystroke.
7209
7195
  this._dialogElement.nativeElement.focus();
7210
7196
  }
7211
7197
  }
7212
- setDialogOffset() {
7213
- const stackPosition = this.dialog.getPositionInDialogStack();
7214
- this.transformTranslateX = stackPosition * 10;
7215
- this.transformTranslateY = stackPosition * 10;
7216
- }
7217
7198
  /**
7218
7199
  * Tracks the focus of the dialog.
7219
7200
  */
7220
7201
  trackFocus() {
7221
7202
  fromEvent(this._dialogElement.nativeElement, 'focusin')
7222
- .pipe(subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)), takeUntilDestroyed(this._destroyRef))
7203
+ .pipe(map(event => event.target instanceof HTMLElement ? event.target : undefined),
7204
+ // The dialog is focused if it has no focusable element, so the dialog can be closed via Escape.
7205
+ // However, in order not to cancel the autofocus, the dialog element must not be memoized as the
7206
+ // active element. Otherwise, delayed content would not be focused.
7207
+ filter(element => element !== this._dialogElement.nativeElement), subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)), takeUntilDestroyed(this._destroyRef))
7208
+ .subscribe(activeElement => {
7209
+ this._activeElement$.next(activeElement);
7210
+ });
7211
+ }
7212
+ /**
7213
+ * Focuses the first focusable element in the dialog. Has no effect if an element in the dialog already has the focus.
7214
+ *
7215
+ * If no focusable element can be found, the focusing will be repeated on the next DOM change until an element has the
7216
+ * focus, allowing delayed content to get focus.
7217
+ */
7218
+ autoFocus() {
7219
+ fromMutation$(this._dialogElement.nativeElement, { subtree: true, childList: true })
7220
+ .pipe(startWith(undefined), takeUntil(this._activeElement$.pipe(filter(Boolean))), takeUntilDestroyed(this._destroyRef))
7223
7221
  .subscribe(() => {
7224
- this._activeElement = this._document.activeElement instanceof HTMLElement ? this._document.activeElement : undefined;
7222
+ this.focus();
7225
7223
  });
7226
7224
  }
7227
7225
  onEscape(event) {
@@ -7251,14 +7249,14 @@ class WorkbenchDialogComponent {
7251
7249
  onHeaderDimensionChange(dimension) {
7252
7250
  this._headerHeight = `${dimension.offsetHeight}px`;
7253
7251
  }
7254
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogComponent, deps: [{ token: ɵWorkbenchDialog }, { token: i0.NgZone }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
7255
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: WorkbenchDialogComponent, isStandalone: true, selector: "wb-dialog", host: { listeners: { "keydown.escape": "onEscape($event)" }, properties: { "style.--\u0275dialog-transform-translate-x": "this.transformTranslateX", "style.--\u0275dialog-transform-translate-y": "this.transformTranslateY", "style.--\u0275dialog-min-height": "this.minHeight", "style.--\u0275dialog-height": "this.height", "style.--\u0275dialog-max-height": "this.maxHeight", "style.--\u0275dialog-min-width": "this.minWidth", "style.--\u0275dialog-width": "this.width", "style.--\u0275dialog-max-width": "this.maxWidth", "class.justified": "this.justified", "attr.class": "this.cssClasses", "attr.data-dialogid": "this.id" } }, viewQueries: [{ propertyName: "_cdkTrapFocus", first: true, predicate: CdkTrapFocus, descendants: true, static: true }, { propertyName: "_dialogElement", first: true, predicate: ["dialog_element"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"dialog e2e-dialog\"\n [class.blinking]=\"dialog.blinking$ | async\"\n [tabindex]=\"-1\"\n wbMovable [wbHandle]=\"header\" (wbMovableMove)=\"onMove($event)\"\n wbResizable [wbResizableEnabled]=\"dialog.resizable\" (wbResizableResize)=\"onResize($event)\"\n @enter\n [@.disabled]=\"!dialog.animate\"\n wbGlassPane\n #dialog_element>\n <div class=\"dialog-box e2e-dialog-box\" cdkTrapFocus>\n <header #header\n class=\"e2e-dialog-header\"\n [class.divider]=\"dialog.header?.divider ?? true\"\n sciDimension (sciDimensionChange)=\"onHeaderDimensionChange($event)\">\n <ng-container *ngTemplateOutlet=\"dialog.header?.template ?? default_dialog_header\"/>\n </header>\n\n <sci-viewport class=\"content e2e-dialog-content\">\n <ng-container *ngComponentOutlet=\"dialog.component; inputs: dialog.inputs\"/>\n </sci-viewport>\n\n @if (dialog.footer || dialog.actions.length) {\n <footer class=\"e2e-dialog-footer\" [class.divider]=\"dialog.footer?.divider ?? true\">\n <ng-container *ngTemplateOutlet=\"dialog.footer?.template ?? default_dialog_footer\"/>\n </footer>\n }\n </div>\n</div>\n\n<ng-template #default_dialog_header>\n <wb-dialog-header/>\n</ng-template>\n\n<ng-template #default_dialog_footer>\n <wb-dialog-footer/>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{--\\275 dialog-transform-translate-x: 0;--\\275 dialog-transform-translate-y: 0;--\\275 dialog-min-height: initial;--\\275 dialog-height: initial;--\\275 dialog-max-height: initial;--\\275 dialog-min-width: initial;--\\275 dialog-width: initial;--\\275 dialog-max-width: initial;--\\275 dialog-padding: var(--sci-workbench-dialog-padding);display:flex;flex-direction:column;align-items:center;position:relative}:host.justified{--\\275 dialog-padding: 0}:host>div.dialog{display:flex;flex-direction:column;position:absolute;top:3%;color:var(--sci-color-text);transform:translate(calc(1px * var(--\\275 dialog-transform-translate-x))) translateY(calc(1px * var(--\\275 dialog-transform-translate-y)));min-height:var(--\\275 dialog-min-height);height:var(--\\275 dialog-height);max-height:var(--\\275 dialog-max-height);min-width:var(--\\275 dialog-min-width);width:var(--\\275 dialog-width);max-width:var(--\\275 dialog-max-width);outline:none;pointer-events:auto}:host>div.dialog>div.dialog-box{flex:auto;display:flex;flex-direction:column;gap:calc(1.25 * var(--\\275 dialog-padding));border:1px solid var(--sci-color-border);border-radius:var(--sci-corner);background-color:var(--sci-color-background-elevation);box-shadow:var(--sci-elevation) var(--sci-static-color-black);overflow:hidden}:host>div.dialog>div.dialog-box>header{flex:none}:host>div.dialog>div.dialog-box>header.divider{border-bottom:1px solid var(--sci-color-border)}:host>div.dialog>div.dialog-box>sci-viewport{flex:auto}:host>div.dialog>div.dialog-box>sci-viewport::part(content){padding-inline:var(--\\275 dialog-padding)}:host>div.dialog>div.dialog-box>footer{flex:none}:host>div.dialog>div.dialog-box>footer.divider{border-top:1px solid var(--sci-color-border)}:host>div.dialog.blinking{animation-duration:50ms;animation-iteration-count:infinite;animation-name:blink-animation}@keyframes blink-animation{0%{transform:translate(calc(1px * var(--\\275 dialog-transform-translate-x) - 2px)) translateY(calc(1px * var(--\\275 dialog-transform-translate-y) - 1px))}to{transform:translate(calc(1px * var(--\\275 dialog-transform-translate-x) + 2px)) translateY(calc(1px * var(--\\275 dialog-transform-translate-y) + 1px))}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: MovableDirective, selector: "[wbMovable]", inputs: ["wbHandle"], outputs: ["wbMovableMove"] }, { kind: "directive", type: ResizableDirective, selector: "[wbResizable]", inputs: ["wbResizableEnabled"], outputs: ["wbResizableResize"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "directive", type: SciDimensionDirective, selector: "[sciDimension]", inputs: ["emitOutsideAngular"], outputs: ["sciDimensionChange"], exportAs: ["sciDimension"] }, { kind: "component", type: DialogHeaderComponent, selector: "wb-dialog-header" }, { kind: "component", type: DialogFooterComponent, selector: "wb-dialog-footer" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
7252
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogComponent, deps: [{ token: ɵWorkbenchDialog }, { token: i0.NgZone }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
7253
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: WorkbenchDialogComponent, isStandalone: true, selector: "wb-dialog", host: { listeners: { "keydown.escape": "onEscape($event)" }, properties: { "style.--\u0275dialog-transform-translate-x": "this.transformTranslateX", "style.--\u0275dialog-transform-translate-y": "this.transformTranslateY", "style.--\u0275dialog-min-height": "this.minHeight", "style.--\u0275dialog-height": "this.height", "style.--\u0275dialog-max-height": "this.maxHeight", "style.--\u0275dialog-min-width": "this.minWidth", "style.--\u0275dialog-width": "this.width", "style.--\u0275dialog-max-width": "this.maxWidth", "class.justified": "this.justified", "attr.class": "this.cssClasses", "attr.data-dialogid": "this.id" } }, viewQueries: [{ propertyName: "_cdkTrapFocus", first: true, predicate: CdkTrapFocus, descendants: true, static: true }, { propertyName: "_dialogElement", first: true, predicate: ["dialog_element"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"dialog e2e-dialog\"\n [class.blinking]=\"dialog.blinking$ | async\"\n [tabindex]=\"-1\"\n wbMovable [wbHandle]=\"header\" (wbMovableMove)=\"onMove($event)\"\n wbResizable [wbResizableEnabled]=\"dialog.resizable\" (wbResizableResize)=\"onResize($event)\"\n @enter\n [@.disabled]=\"!dialog.animate\"\n wbGlassPane\n #dialog_element>\n <div class=\"dialog-box e2e-dialog-box\" cdkTrapFocus>\n <header #header\n class=\"e2e-dialog-header\"\n [class.divider]=\"dialog.header?.divider ?? true\"\n sciDimension (sciDimensionChange)=\"onHeaderDimensionChange($event)\">\n <ng-container *ngTemplateOutlet=\"dialog.header?.template ?? default_dialog_header\"/>\n </header>\n\n <sci-viewport class=\"content e2e-dialog-content\">\n <ng-container *ngComponentOutlet=\"dialog.component; inputs: dialog.inputs\"/>\n </sci-viewport>\n\n @if (dialog.footer || dialog.actions.length) {\n <footer class=\"e2e-dialog-footer\" [class.divider]=\"dialog.footer?.divider ?? true\">\n <ng-container *ngTemplateOutlet=\"dialog.footer?.template ?? default_dialog_footer\"/>\n </footer>\n }\n </div>\n</div>\n\n<ng-template #default_dialog_header>\n <wb-dialog-header/>\n</ng-template>\n\n<ng-template #default_dialog_footer>\n <wb-dialog-footer/>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{--\\275 dialog-transform-translate-x: 0;--\\275 dialog-transform-translate-y: 0;--\\275 dialog-min-height: initial;--\\275 dialog-height: initial;--\\275 dialog-max-height: initial;--\\275 dialog-min-width: initial;--\\275 dialog-width: initial;--\\275 dialog-max-width: initial;--\\275 dialog-padding: var(--sci-workbench-dialog-padding);display:flex;flex-direction:column;align-items:center;position:relative}:host.justified{--\\275 dialog-padding: 0}:host>div.dialog{display:flex;flex-direction:column;position:absolute;top:3%;color:var(--sci-color-text);transform:translate(calc(1px * var(--\\275 dialog-transform-translate-x))) translateY(calc(1px * var(--\\275 dialog-transform-translate-y)));min-height:var(--\\275 dialog-min-height);height:var(--\\275 dialog-height);max-height:var(--\\275 dialog-max-height);min-width:var(--\\275 dialog-min-width);width:var(--\\275 dialog-width);max-width:var(--\\275 dialog-max-width);outline:none;pointer-events:auto}:host>div.dialog>div.dialog-box{flex:auto;display:flex;flex-direction:column;gap:calc(1.25 * var(--\\275 dialog-padding));border:1px solid var(--sci-color-border);border-radius:var(--sci-corner);background-color:var(--sci-color-background-elevation);box-shadow:var(--sci-elevation) var(--sci-static-color-black);overflow:hidden}:host>div.dialog>div.dialog-box>header{flex:none}:host>div.dialog>div.dialog-box>header.divider{border-bottom:1px solid var(--sci-color-border)}:host>div.dialog>div.dialog-box>sci-viewport{flex:auto}:host>div.dialog>div.dialog-box>sci-viewport::part(content){padding-inline:var(--\\275 dialog-padding)}:host>div.dialog>div.dialog-box>footer{flex:none}:host>div.dialog>div.dialog-box>footer.divider{border-top:1px solid var(--sci-color-border)}:host>div.dialog.blinking{animation-duration:50ms;animation-iteration-count:infinite;animation-name:blink-animation}@keyframes blink-animation{0%{transform:translate(calc(1px * var(--\\275 dialog-transform-translate-x) - 2px)) translateY(calc(1px * var(--\\275 dialog-transform-translate-y) - 1px))}to{transform:translate(calc(1px * var(--\\275 dialog-transform-translate-x) + 2px)) translateY(calc(1px * var(--\\275 dialog-transform-translate-y) + 1px))}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: MovableDirective, selector: "[wbMovable]", inputs: ["wbHandle"], outputs: ["wbMovableMove"] }, { kind: "directive", type: ResizableDirective, selector: "[wbResizable]", inputs: ["wbResizableEnabled"], outputs: ["wbResizableResize"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "directive", type: SciDimensionDirective, selector: "[sciDimension]", inputs: ["emitOutsideAngular"], outputs: ["sciDimensionChange"], exportAs: ["sciDimension"] }, { kind: "component", type: DialogHeaderComponent, selector: "wb-dialog-header" }, { kind: "component", type: DialogFooterComponent, selector: "wb-dialog-footer" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
7256
7254
  configureDialogGlassPane(),
7257
7255
  ], animations: [
7258
7256
  trigger('enter', provideEnterAnimation()),
7259
7257
  ] }); }
7260
7258
  }
7261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogComponent, decorators: [{
7259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogComponent, decorators: [{
7262
7260
  type: Component,
7263
7261
  args: [{ selector: 'wb-dialog', standalone: true, imports: [
7264
7262
  NgComponentOutlet,
@@ -7335,10 +7333,16 @@ function provideEnterAnimation() {
7335
7333
  * Blocks this dialog when other dialog(s) overlay it.
7336
7334
  */
7337
7335
  function configureDialogGlassPane() {
7338
- return {
7339
- provide: GLASS_PANE_BLOCKABLE,
7340
- useExisting: forwardRef(() => ɵWorkbenchDialog), // resolve {@link ɵWorkbenchDialog} via forwardRef because not defined yet, i.e., {@link ɵWorkbenchDialog} constructs {@link WorkbenchDialogComponent} in its constructor.
7341
- };
7336
+ return [
7337
+ {
7338
+ provide: GLASS_PANE_BLOCKABLE,
7339
+ useExisting: forwardRef(() => ɵWorkbenchDialog), // resolve {@link ɵWorkbenchDialog} via forwardRef because not defined yet, i.e., {@link ɵWorkbenchDialog} constructs {@link WorkbenchDialogComponent} in its constructor.
7340
+ },
7341
+ {
7342
+ provide: GLASS_PANE_OPTIONS,
7343
+ useFactory: () => ({ attributes: { 'data-dialogid': inject(ɵWorkbenchDialog).id } }),
7344
+ },
7345
+ ];
7342
7346
  }
7343
7347
 
7344
7348
  /*
@@ -7495,7 +7499,7 @@ class ɵWorkbenchDialog {
7495
7499
  createOverlay() {
7496
7500
  const overlay = inject(Overlay);
7497
7501
  return overlay.create({
7498
- disposeOnNavigation: true,
7502
+ disposeOnNavigation: true, // dispose dialog on browser back/forward navigation
7499
7503
  panelClass: ['wb-dialog-modality-context'],
7500
7504
  positionStrategy: overlay.position().global(),
7501
7505
  scrollStrategy: overlay.scrollStrategies.noop(),
@@ -7669,10 +7673,10 @@ class ɵWorkbenchDialogService {
7669
7673
  async waitUntilApplicationModalDialogsClosed() {
7670
7674
  await firstValueFrom(this._dialogRegistry.top$().pipe(filter(top => !top)));
7671
7675
  }
7672
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchDialogService, deps: [{ token: WorkbenchViewRegistry }, { token: WorkbenchDialogRegistry }, { token: i0.NgZone }, { token: i0.Injector }, { token: ɵWorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
7673
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchDialogService, providedIn: 'root' }); }
7676
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchDialogService, deps: [{ token: WorkbenchViewRegistry }, { token: WorkbenchDialogRegistry }, { token: i0.NgZone }, { token: i0.Injector }, { token: ɵWorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
7677
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchDialogService, providedIn: 'root' }); }
7674
7678
  }
7675
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchDialogService, decorators: [{
7679
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchDialogService, decorators: [{
7676
7680
  type: Injectable,
7677
7681
  args: [{ providedIn: 'root' }]
7678
7682
  }], ctorParameters: () => [{ type: WorkbenchViewRegistry }, { type: WorkbenchDialogRegistry }, { type: i0.NgZone }, { type: i0.Injector }, { type: ɵWorkbenchView, decorators: [{
@@ -7715,10 +7719,10 @@ class MessageBoxFooterComponent {
7715
7719
  host.classList.remove('calculating-min-width');
7716
7720
  }
7717
7721
  }
7718
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MessageBoxFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7719
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: MessageBoxFooterComponent, isStandalone: true, selector: "wb-message-box-footer", inputs: { actions: "actions", severity: "severity" }, outputs: { action: "action", preferredSizeChange: "preferredSizeChange" }, host: { properties: { "attr.data-severity": "this.severity" } }, viewQueries: [{ propertyName: "_actionButtons", predicate: ["action_button"], descendants: true }], ngImport: i0, template: "@for (action of actions | keyvalue:insertionSortOrderFn; track action.key) {\n <button #action_button\n (click)=\"onAction(action.key)\"\n (keydown.arrowLeft)=\"onArrowKey($index, 'left')\"\n (keydown.arrowRight)=\"onArrowKey($index, 'right')\"\n [attr.data-action]=\"action.key\"\n class=\"action e2e-action\">\n {{ action.value }}\n </button>\n\n @if (!$last) {\n <span class=\"divider\"></span>\n }\n}\n", styles: ["@charset \"UTF-8\";:host{--\\275message-box-severity-color: initial;display:flex;height:3em;background-color:var(--sci-color-background-secondary);color:var(--sci-color-text)}:host[data-severity=info]{--\\275message-box-severity-color: var(--sci-color-accent)}:host[data-severity=warn]{--\\275message-box-severity-color: var(--sci-color-notice)}:host[data-severity=error]{--\\275message-box-severity-color: var(--sci-color-negative)}:host.calculating-min-width{position:absolute}:host>button.action{all:unset;flex:1;margin:2px;border:1px solid transparent;border-radius:var(--sci-corner-small);transition:border-color ease-in-out .15s;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:center;min-width:7.5em;padding-inline:.5em;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button.action:focus,:host>button.action:active{outline:none;color:var(--\\275message-box-severity-color);border-color:var(--\\275message-box-severity-color)}:host>span.divider{width:1px;background-color:var(--sci-color-border)}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] }); }
7722
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MessageBoxFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7723
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: MessageBoxFooterComponent, isStandalone: true, selector: "wb-message-box-footer", inputs: { actions: "actions", severity: "severity" }, outputs: { action: "action", preferredSizeChange: "preferredSizeChange" }, host: { properties: { "attr.data-severity": "this.severity" } }, viewQueries: [{ propertyName: "_actionButtons", predicate: ["action_button"], descendants: true }], ngImport: i0, template: "@for (action of actions | keyvalue:insertionSortOrderFn; track action.key) {\n <button #action_button\n (click)=\"onAction(action.key)\"\n (keydown.arrowLeft)=\"onArrowKey($index, 'left')\"\n (keydown.arrowRight)=\"onArrowKey($index, 'right')\"\n [attr.data-action]=\"action.key\"\n class=\"action e2e-action\">\n {{ action.value }}\n </button>\n\n @if (!$last) {\n <span class=\"divider\"></span>\n }\n}\n", styles: ["@charset \"UTF-8\";:host{--\\275message-box-severity-color: initial;display:flex;height:3em;background-color:var(--sci-color-background-secondary);color:var(--sci-color-text)}:host[data-severity=info]{--\\275message-box-severity-color: var(--sci-color-accent)}:host[data-severity=warn]{--\\275message-box-severity-color: var(--sci-color-notice)}:host[data-severity=error]{--\\275message-box-severity-color: var(--sci-color-negative)}:host.calculating-min-width{position:absolute}:host>button.action{all:unset;flex:1;margin:2px;border:1px solid transparent;border-radius:var(--sci-corner-small);transition:border-color ease-in-out .15s;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:center;min-width:7.5em;padding-inline:.5em;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button.action:focus,:host>button.action:active{outline:none;color:var(--\\275message-box-severity-color);border-color:var(--\\275message-box-severity-color)}:host>span.divider{width:1px;background-color:var(--sci-color-border)}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] }); }
7720
7724
  }
7721
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MessageBoxFooterComponent, decorators: [{
7725
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MessageBoxFooterComponent, decorators: [{
7722
7726
  type: Component,
7723
7727
  args: [{ selector: 'wb-message-box-footer', standalone: true, imports: [
7724
7728
  KeyValuePipe,
@@ -7765,15 +7769,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
7765
7769
  class WorkbenchDialogFooterDirective {
7766
7770
  constructor(template, dialog) {
7767
7771
  this.template = template;
7768
- this._footer = dialog.registerFooter(this);
7772
+ // Defer registering footer to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
7773
+ asapScheduler.schedule(() => this._footer = dialog.registerFooter(this));
7769
7774
  }
7770
7775
  ngOnDestroy() {
7771
- this._footer.dispose();
7776
+ // Defer disposing footer to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
7777
+ asapScheduler.schedule(() => this._footer?.dispose());
7772
7778
  }
7773
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogFooterDirective, deps: [{ token: i0.TemplateRef }, { token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Directive }); }
7774
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.0.6", type: WorkbenchDialogFooterDirective, isStandalone: true, selector: "ng-template[wbDialogFooter]", inputs: { divider: ["divider", "divider", booleanAttribute] }, ngImport: i0 }); }
7779
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogFooterDirective, deps: [{ token: i0.TemplateRef }, { token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Directive }); }
7780
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.0.2", type: WorkbenchDialogFooterDirective, isStandalone: true, selector: "ng-template[wbDialogFooter]", inputs: { divider: ["divider", "divider", booleanAttribute] }, ngImport: i0 }); }
7775
7781
  }
7776
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogFooterDirective, decorators: [{
7782
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogFooterDirective, decorators: [{
7777
7783
  type: Directive,
7778
7784
  args: [{ selector: 'ng-template[wbDialogFooter]', standalone: true }]
7779
7785
  }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: ɵWorkbenchDialog }], propDecorators: { divider: [{
@@ -7805,15 +7811,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
7805
7811
  class WorkbenchDialogHeaderDirective {
7806
7812
  constructor(template, dialog) {
7807
7813
  this.template = template;
7808
- this._header = dialog.registerHeader(this);
7814
+ // Defer registering header to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
7815
+ asapScheduler.schedule(() => this._header = dialog.registerHeader(this));
7809
7816
  }
7810
7817
  ngOnDestroy() {
7811
- this._header.dispose();
7818
+ // Defer disposing header to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
7819
+ asapScheduler.schedule(() => this._header?.dispose());
7812
7820
  }
7813
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogHeaderDirective, deps: [{ token: i0.TemplateRef }, { token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Directive }); }
7814
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.0.6", type: WorkbenchDialogHeaderDirective, isStandalone: true, selector: "ng-template[wbDialogHeader]", inputs: { divider: ["divider", "divider", booleanAttribute] }, ngImport: i0 }); }
7821
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogHeaderDirective, deps: [{ token: i0.TemplateRef }, { token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Directive }); }
7822
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.0.2", type: WorkbenchDialogHeaderDirective, isStandalone: true, selector: "ng-template[wbDialogHeader]", inputs: { divider: ["divider", "divider", booleanAttribute] }, ngImport: i0 }); }
7815
7823
  }
7816
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogHeaderDirective, decorators: [{
7824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogHeaderDirective, decorators: [{
7817
7825
  type: Directive,
7818
7826
  args: [{ selector: 'ng-template[wbDialogHeader]', standalone: true }]
7819
7827
  }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: ɵWorkbenchDialog }], propDecorators: { divider: [{
@@ -7831,10 +7839,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
7831
7839
  * SPDX-License-Identifier: EPL-2.0
7832
7840
  */
7833
7841
  class MessageBoxHeaderComponent {
7834
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MessageBoxHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7835
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: MessageBoxHeaderComponent, isStandalone: true, selector: "wb-message-box-header", inputs: { title: "title", severity: "severity" }, host: { properties: { "attr.data-severity": "this.severity" } }, ngImport: i0, template: "@if (title) {\n <span class=\"title e2e-title\">{{ title }}</span>\n}\n", styles: ["@charset \"UTF-8\";:host{--\\275message-box-severity-color: initial;display:grid;border-top:var(--sci-workbench-messagebox-severity-indicator-size) solid var(--\\275message-box-severity-color);padding-inline:var(--sci-workbench-messagebox-padding);padding-top:var(--sci-workbench-messagebox-padding);-webkit-user-select:none;user-select:none}:host[data-severity=info]{--\\275message-box-severity-color: var(--sci-color-accent)}:host[data-severity=warn]{--\\275message-box-severity-color: var(--sci-color-notice)}:host[data-severity=error]{--\\275message-box-severity-color: var(--sci-color-negative)}:host>span.title{overflow-wrap:break-word;white-space:pre-line;font-family:var(--sci-workbench-messagebox-title-font-family);font-size:var(--sci-workbench-messagebox-title-font-size);font-weight:var(--sci-workbench-messagebox-title-font-weight);text-align:var(--sci-workbench-messagebox-title-align)}\n"] }); }
7842
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MessageBoxHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7843
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: MessageBoxHeaderComponent, isStandalone: true, selector: "wb-message-box-header", inputs: { title: "title", severity: "severity" }, host: { properties: { "attr.data-severity": "this.severity" } }, ngImport: i0, template: "@if (title) {\n <span class=\"title e2e-title\">{{ title }}</span>\n}\n", styles: ["@charset \"UTF-8\";:host{--\\275message-box-severity-color: initial;display:grid;border-top:var(--sci-workbench-messagebox-severity-indicator-size) solid var(--\\275message-box-severity-color);padding-inline:var(--sci-workbench-messagebox-padding);padding-top:var(--sci-workbench-messagebox-padding);-webkit-user-select:none;user-select:none}:host[data-severity=info]{--\\275message-box-severity-color: var(--sci-color-accent)}:host[data-severity=warn]{--\\275message-box-severity-color: var(--sci-color-notice)}:host[data-severity=error]{--\\275message-box-severity-color: var(--sci-color-negative)}:host>span.title{overflow-wrap:break-word;white-space:pre-line;font-family:var(--sci-workbench-messagebox-title-font-family);font-size:var(--sci-workbench-messagebox-title-font-size);font-weight:var(--sci-workbench-messagebox-title-font-weight);text-align:var(--sci-workbench-messagebox-title-align)}\n"] }); }
7836
7844
  }
7837
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MessageBoxHeaderComponent, decorators: [{
7845
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MessageBoxHeaderComponent, decorators: [{
7838
7846
  type: Component,
7839
7847
  args: [{ selector: 'wb-message-box-header', standalone: true, template: "@if (title) {\n <span class=\"title e2e-title\">{{ title }}</span>\n}\n", styles: ["@charset \"UTF-8\";:host{--\\275message-box-severity-color: initial;display:grid;border-top:var(--sci-workbench-messagebox-severity-indicator-size) solid var(--\\275message-box-severity-color);padding-inline:var(--sci-workbench-messagebox-padding);padding-top:var(--sci-workbench-messagebox-padding);-webkit-user-select:none;user-select:none}:host[data-severity=info]{--\\275message-box-severity-color: var(--sci-color-accent)}:host[data-severity=warn]{--\\275message-box-severity-color: var(--sci-color-notice)}:host[data-severity=error]{--\\275message-box-severity-color: var(--sci-color-negative)}:host>span.title{overflow-wrap:break-word;white-space:pre-line;font-family:var(--sci-workbench-messagebox-title-font-family);font-size:var(--sci-workbench-messagebox-title-font-size);font-weight:var(--sci-workbench-messagebox-title-font-weight);text-align:var(--sci-workbench-messagebox-title-align)}\n"] }]
7840
7848
  }], propDecorators: { title: [{
@@ -7863,10 +7871,10 @@ class TypeofPipe {
7863
7871
  transform(object, type) {
7864
7872
  return typeof object === type;
7865
7873
  }
7866
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TypeofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7867
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: TypeofPipe, isStandalone: true, name: "wbTypeof" }); }
7874
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TypeofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7875
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: TypeofPipe, isStandalone: true, name: "wbTypeof" }); }
7868
7876
  }
7869
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TypeofPipe, decorators: [{
7877
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TypeofPipe, decorators: [{
7870
7878
  type: Pipe,
7871
7879
  args: [{ name: 'wbTypeof', standalone: true }]
7872
7880
  }] });
@@ -7896,6 +7904,7 @@ class WorkbenchMessageBoxComponent {
7896
7904
  this._dialog = _dialog;
7897
7905
  // Ensure host element to be focusable in order to close the message box on Escape keystroke.
7898
7906
  this.tabindex = -1;
7907
+ this.empty = false;
7899
7908
  this._dialog.closable = false;
7900
7909
  this._dialog.resizable = false;
7901
7910
  this._dialog.padding = false;
@@ -7912,16 +7921,20 @@ class WorkbenchMessageBoxComponent {
7912
7921
  onFooterPreferredSizeChange(preferredSize) {
7913
7922
  this._dialog.size.minWidth = `${preferredSize}px`;
7914
7923
  }
7915
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchMessageBoxComponent, deps: [{ token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Component }); }
7916
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: WorkbenchMessageBoxComponent, isStandalone: true, selector: "wb-message-box", inputs: { message: ["message", "message", nullIfEmptyMessage], options: "options" }, host: { listeners: { "keydown.escape": "onEscape()" }, properties: { "attr.tabindex": "this.tabindex", "class.content-selectable": "this.contentSelectable", "class.has-title": "this.hasTitle" } }, providers: [
7924
+ onContentDimensionChange(dimension) {
7925
+ this.empty = !dimension.offsetHeight;
7926
+ }
7927
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxComponent, deps: [{ token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Component }); }
7928
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: WorkbenchMessageBoxComponent, isStandalone: true, selector: "wb-message-box", inputs: { message: ["message", "message", nullIfEmptyMessage], options: "options" }, host: { listeners: { "keydown.escape": "onEscape()" }, properties: { "attr.tabindex": "this.tabindex", "class.empty": "this.empty", "class.content-selectable": "this.contentSelectable", "class.has-title": "this.hasTitle" } }, providers: [
7917
7929
  // Prevent injecting the dialog handle in message box context.
7918
7930
  { provide: WorkbenchDialog, useFactory: () => throwError(`[NullInjectorError] No provider for 'WorkbenchDialog'`) }
7919
- ], ngImport: i0, template: "<ng-template wbDialogHeader [divider]=\"false\">\n <wb-message-box-header [title]=\"options?.title\" [severity]=\"options?.severity ?? 'info'\"/>\n</ng-template>\n\n@if (message | wbTypeof:'string') {\n <div class=\"message e2e-message\">{{ message }}</div>\n}\n@else {\n <ng-container *ngComponentOutlet=\"message; inputs: options?.inputs\"/>\n}\n\n<ng-template wbDialogFooter>\n <wb-message-box-footer [actions]=\"options?.actions ?? {ok: 'OK'}\"\n [severity]=\"options?.severity ?? 'info'\"\n (action)=\"onAction($event)\"\n (keydown.escape)=\"onEscape()\"\n (preferredSizeChange)=\"onFooterPreferredSizeChange($event)\"/>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden;outline:none;padding-inline:var(--sci-workbench-messagebox-padding);padding-bottom:var(--sci-workbench-messagebox-padding)}:host.has-title:not(:empty){padding-top:var(--sci-workbench-messagebox-padding)}:host:not(.content-selectable){-webkit-user-select:none;user-select:none}:host>div.message{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: WorkbenchDialogHeaderDirective, selector: "ng-template[wbDialogHeader]", inputs: ["divider"] }, { kind: "directive", type: WorkbenchDialogFooterDirective, selector: "ng-template[wbDialogFooter]", inputs: ["divider"] }, { kind: "component", type: MessageBoxHeaderComponent, selector: "wb-message-box-header", inputs: ["title", "severity"] }, { kind: "component", type: MessageBoxFooterComponent, selector: "wb-message-box-footer", inputs: ["actions", "severity"], outputs: ["action", "preferredSizeChange"] }, { kind: "pipe", type: TypeofPipe, name: "wbTypeof" }] }); }
7931
+ ], ngImport: i0, template: "<ng-template wbDialogHeader [divider]=\"false\">\n <wb-message-box-header [title]=\"options?.title\" [severity]=\"options?.severity ?? 'info'\"/>\n</ng-template>\n\n<div class=\"message e2e-message\" [class.text]=\"message | wbTypeof:'string'\" sciDimension (sciDimensionChange)=\"onContentDimensionChange($event)\">\n @if (message | wbTypeof:'string') {\n {{message}}\n } @else {\n <ng-container *ngComponentOutlet=\"message; inputs: options?.inputs\"/>\n }\n</div>\n\n<ng-template wbDialogFooter>\n <wb-message-box-footer [actions]=\"options?.actions ?? {ok: 'OK'}\"\n [severity]=\"options?.severity ?? 'info'\"\n (action)=\"onAction($event)\"\n (keydown.escape)=\"onEscape()\"\n (preferredSizeChange)=\"onFooterPreferredSizeChange($event)\"/>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden;outline:none;padding-inline:var(--sci-workbench-messagebox-padding);padding-bottom:var(--sci-workbench-messagebox-padding)}:host.has-title:not(.empty){padding-top:var(--sci-workbench-messagebox-padding)}:host:not(.content-selectable){-webkit-user-select:none;user-select:none}:host>div.message.text{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: SciDimensionDirective, selector: "[sciDimension]", inputs: ["emitOutsideAngular"], outputs: ["sciDimensionChange"], exportAs: ["sciDimension"] }, { kind: "directive", type: WorkbenchDialogHeaderDirective, selector: "ng-template[wbDialogHeader]", inputs: ["divider"] }, { kind: "directive", type: WorkbenchDialogFooterDirective, selector: "ng-template[wbDialogFooter]", inputs: ["divider"] }, { kind: "component", type: MessageBoxHeaderComponent, selector: "wb-message-box-header", inputs: ["title", "severity"] }, { kind: "component", type: MessageBoxFooterComponent, selector: "wb-message-box-footer", inputs: ["actions", "severity"], outputs: ["action", "preferredSizeChange"] }, { kind: "pipe", type: TypeofPipe, name: "wbTypeof" }] }); }
7920
7932
  }
7921
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchMessageBoxComponent, decorators: [{
7933
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxComponent, decorators: [{
7922
7934
  type: Component,
7923
7935
  args: [{ selector: 'wb-message-box', standalone: true, imports: [
7924
7936
  NgComponentOutlet,
7937
+ SciDimensionDirective,
7925
7938
  WorkbenchDialogHeaderDirective,
7926
7939
  WorkbenchDialogFooterDirective,
7927
7940
  MessageBoxHeaderComponent,
@@ -7930,10 +7943,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
7930
7943
  ], providers: [
7931
7944
  // Prevent injecting the dialog handle in message box context.
7932
7945
  { provide: WorkbenchDialog, useFactory: () => throwError(`[NullInjectorError] No provider for 'WorkbenchDialog'`) }
7933
- ], template: "<ng-template wbDialogHeader [divider]=\"false\">\n <wb-message-box-header [title]=\"options?.title\" [severity]=\"options?.severity ?? 'info'\"/>\n</ng-template>\n\n@if (message | wbTypeof:'string') {\n <div class=\"message e2e-message\">{{ message }}</div>\n}\n@else {\n <ng-container *ngComponentOutlet=\"message; inputs: options?.inputs\"/>\n}\n\n<ng-template wbDialogFooter>\n <wb-message-box-footer [actions]=\"options?.actions ?? {ok: 'OK'}\"\n [severity]=\"options?.severity ?? 'info'\"\n (action)=\"onAction($event)\"\n (keydown.escape)=\"onEscape()\"\n (preferredSizeChange)=\"onFooterPreferredSizeChange($event)\"/>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden;outline:none;padding-inline:var(--sci-workbench-messagebox-padding);padding-bottom:var(--sci-workbench-messagebox-padding)}:host.has-title:not(:empty){padding-top:var(--sci-workbench-messagebox-padding)}:host:not(.content-selectable){-webkit-user-select:none;user-select:none}:host>div.message{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"] }]
7946
+ ], template: "<ng-template wbDialogHeader [divider]=\"false\">\n <wb-message-box-header [title]=\"options?.title\" [severity]=\"options?.severity ?? 'info'\"/>\n</ng-template>\n\n<div class=\"message e2e-message\" [class.text]=\"message | wbTypeof:'string'\" sciDimension (sciDimensionChange)=\"onContentDimensionChange($event)\">\n @if (message | wbTypeof:'string') {\n {{message}}\n } @else {\n <ng-container *ngComponentOutlet=\"message; inputs: options?.inputs\"/>\n }\n</div>\n\n<ng-template wbDialogFooter>\n <wb-message-box-footer [actions]=\"options?.actions ?? {ok: 'OK'}\"\n [severity]=\"options?.severity ?? 'info'\"\n (action)=\"onAction($event)\"\n (keydown.escape)=\"onEscape()\"\n (preferredSizeChange)=\"onFooterPreferredSizeChange($event)\"/>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden;outline:none;padding-inline:var(--sci-workbench-messagebox-padding);padding-bottom:var(--sci-workbench-messagebox-padding)}:host.has-title:not(.empty){padding-top:var(--sci-workbench-messagebox-padding)}:host:not(.content-selectable){-webkit-user-select:none;user-select:none}:host>div.message.text{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"] }]
7934
7947
  }], ctorParameters: () => [{ type: ɵWorkbenchDialog }], propDecorators: { tabindex: [{
7935
7948
  type: HostBinding,
7936
7949
  args: ['attr.tabindex']
7950
+ }], empty: [{
7951
+ type: HostBinding,
7952
+ args: ['class.empty']
7937
7953
  }], message: [{
7938
7954
  type: Input,
7939
7955
  args: [{ required: true, transform: nullIfEmptyMessage }]
@@ -8038,10 +8054,10 @@ function nullIfEmptyMessage(message) {
8038
8054
  * - `--sci-workbench-dialog-title-align`
8039
8055
  */
8040
8056
  class WorkbenchDialogService {
8041
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8042
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogService, providedIn: 'root', useExisting: ɵWorkbenchDialogService }); }
8057
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8058
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogService, providedIn: 'root', useExisting: ɵWorkbenchDialogService }); }
8043
8059
  }
8044
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogService, decorators: [{
8060
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogService, decorators: [{
8045
8061
  type: Injectable,
8046
8062
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchDialogService }]
8047
8063
  }] });
@@ -8078,10 +8094,10 @@ class ɵWorkbenchMessageBoxService {
8078
8094
  animate: true,
8079
8095
  }));
8080
8096
  }
8081
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchMessageBoxService, deps: [{ token: WorkbenchDialogService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
8082
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchMessageBoxService, providedIn: 'root' }); }
8097
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchMessageBoxService, deps: [{ token: WorkbenchDialogService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
8098
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchMessageBoxService, providedIn: 'root' }); }
8083
8099
  }
8084
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵWorkbenchMessageBoxService, decorators: [{
8100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵWorkbenchMessageBoxService, decorators: [{
8085
8101
  type: Injectable,
8086
8102
  args: [{ providedIn: 'root' }]
8087
8103
  }], ctorParameters: () => [{ type: WorkbenchDialogService }, { type: i0.NgZone }] });
@@ -8122,6 +8138,7 @@ class ɵPopup {
8122
8138
  * Indicates whether this popup is blocked by dialog(s) that overlay it.
8123
8139
  */
8124
8140
  this.blockedBy$ = new BehaviorSubject(null);
8141
+ this.id = this._config.id ?? randomUUID();
8125
8142
  this.cssClasses = Arrays.coerce(this._config.cssClass);
8126
8143
  this.blockWhenDialogOpened();
8127
8144
  }
@@ -8212,6 +8229,9 @@ class PopupComponent {
8212
8229
  get cssClasses() {
8213
8230
  return this._popup.cssClasses.join(' ');
8214
8231
  }
8232
+ get id() {
8233
+ return this._popup.id;
8234
+ }
8215
8235
  constructor(_popup, injector) {
8216
8236
  this._popup = _popup;
8217
8237
  this.portal = new ComponentPortal(this._popup.component, this._popup.viewContainerRef, injector);
@@ -8224,12 +8244,12 @@ class PopupComponent {
8224
8244
  // the popup loses focus by clicking on an element in a microfrontend.
8225
8245
  this._cdkTrapFocus.focusTrap.focusInitialElementWhenReady().then(noop);
8226
8246
  }
8227
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PopupComponent, deps: [{ token: ɵPopup }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
8228
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: PopupComponent, isStandalone: true, selector: "wb-popup", host: { properties: { "style.width": "this.popupWidth", "style.min-width": "this.popupMinWidth", "style.max-width": "this.popupMaxWidth", "style.height": "this.popupHeight", "style.min-height": "this.popupMinHeight", "style.max-height": "this.popupMaxHeight", "attr.class": "this.cssClasses" } }, providers: [
8247
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PopupComponent, deps: [{ token: ɵPopup }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
8248
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: PopupComponent, isStandalone: true, selector: "wb-popup", host: { properties: { "style.width": "this.popupWidth", "style.min-width": "this.popupMinWidth", "style.max-width": "this.popupMaxWidth", "style.height": "this.popupHeight", "style.min-height": "this.popupMinHeight", "style.max-height": "this.popupMaxHeight", "attr.class": "this.cssClasses", "attr.data-popupid": "this.id" } }, providers: [
8229
8249
  configurePopupGlassPane(),
8230
8250
  ], viewQueries: [{ propertyName: "_cdkTrapFocus", first: true, predicate: ["focus_trap"], descendants: true, read: CdkTrapFocus, static: true }], hostDirectives: [{ directive: GlassPaneDirective }], ngImport: i0, template: "<sci-viewport cdkTrapFocus class=\"e2e-popup-viewport\" #focus_trap>\n <ng-container *cdkPortalOutlet=\"portal\"></ng-container>\n</sci-viewport>\n", styles: [":host{display:grid;grid-template-columns:100%;grid-template-rows:100%;outline:none;border-radius:var(--sci-corner);overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] }); }
8231
8251
  }
8232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PopupComponent, decorators: [{
8252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PopupComponent, decorators: [{
8233
8253
  type: Component,
8234
8254
  args: [{ selector: 'wb-popup', standalone: true, imports: [
8235
8255
  A11yModule,
@@ -8264,15 +8284,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
8264
8284
  }], cssClasses: [{
8265
8285
  type: HostBinding,
8266
8286
  args: ['attr.class']
8287
+ }], id: [{
8288
+ type: HostBinding,
8289
+ args: ['attr.data-popupid']
8267
8290
  }] } });
8268
8291
  /**
8269
8292
  * Blocks this popup when dialog(s) overlay it.
8270
8293
  */
8271
8294
  function configurePopupGlassPane() {
8272
- return {
8273
- provide: GLASS_PANE_BLOCKABLE,
8274
- useExisting: ɵPopup,
8275
- };
8295
+ return [
8296
+ {
8297
+ provide: GLASS_PANE_BLOCKABLE,
8298
+ useExisting: ɵPopup,
8299
+ },
8300
+ {
8301
+ provide: GLASS_PANE_OPTIONS,
8302
+ useFactory: () => ({ attributes: { 'data-popupid': inject(ɵPopup).id } }),
8303
+ },
8304
+ ];
8276
8305
  }
8277
8306
 
8278
8307
  /*
@@ -8579,10 +8608,10 @@ class PopupService {
8579
8608
  }
8580
8609
  throw Error('[PopupOriginError] Illegal popup origin; must be "Point", "TopLeftPoint", "TopRightPoint", "BottomLeftPoint" or "BottomRightPoint".');
8581
8610
  }
8582
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PopupService, deps: [{ token: i0.Injector }, { token: i1.Overlay }, { token: i2$1.FocusMonitor }, { token: WorkbenchViewRegistry }, { token: i0.NgZone }, { token: DOCUMENT }, { token: ɵWorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
8583
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PopupService, providedIn: 'root' }); }
8611
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PopupService, deps: [{ token: i0.Injector }, { token: i1.Overlay }, { token: i2$1.FocusMonitor }, { token: WorkbenchViewRegistry }, { token: i0.NgZone }, { token: DOCUMENT }, { token: ɵWorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
8612
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PopupService, providedIn: 'root' }); }
8584
8613
  }
8585
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PopupService, decorators: [{
8614
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PopupService, decorators: [{
8586
8615
  type: Injectable,
8587
8616
  args: [{ providedIn: 'root' }]
8588
8617
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.Overlay }, { type: i2$1.FocusMonitor }, { type: WorkbenchViewRegistry }, { type: i0.NgZone }, { type: Document, decorators: [{
@@ -8626,10 +8655,10 @@ function startWithNullBoundsIf(condition) {
8626
8655
  * - `--sci-workbench-messagebox-title-font-size`
8627
8656
  */
8628
8657
  class WorkbenchMessageBoxService {
8629
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchMessageBoxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8630
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchMessageBoxService, providedIn: 'root', useExisting: ɵWorkbenchMessageBoxService }); }
8658
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8659
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxService, providedIn: 'root', useExisting: ɵWorkbenchMessageBoxService }); }
8631
8660
  }
8632
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchMessageBoxService, decorators: [{
8661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxService, decorators: [{
8633
8662
  type: Injectable,
8634
8663
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchMessageBoxService }]
8635
8664
  }] });
@@ -9057,10 +9086,10 @@ class WbFormatAcceleratorPipe {
9057
9086
  .map(key => key[0].toUpperCase() + key.substring(1).toLowerCase())
9058
9087
  .join('+');
9059
9088
  }
9060
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WbFormatAcceleratorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9061
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: WbFormatAcceleratorPipe, isStandalone: true, name: "wbFormatAccelerator" }); }
9089
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WbFormatAcceleratorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9090
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: WbFormatAcceleratorPipe, isStandalone: true, name: "wbFormatAccelerator" }); }
9062
9091
  }
9063
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WbFormatAcceleratorPipe, decorators: [{
9092
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WbFormatAcceleratorPipe, decorators: [{
9064
9093
  type: Pipe,
9065
9094
  args: [{ name: 'wbFormatAccelerator', standalone: true }]
9066
9095
  }] });
@@ -9082,10 +9111,10 @@ class MapCoercePipe {
9082
9111
  transform(mapLike) {
9083
9112
  return Maps.coerce(mapLike);
9084
9113
  }
9085
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MapCoercePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9086
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: MapCoercePipe, isStandalone: true, name: "wbCoerceMap" }); }
9114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MapCoercePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9115
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: MapCoercePipe, isStandalone: true, name: "wbCoerceMap" }); }
9087
9116
  }
9088
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MapCoercePipe, decorators: [{
9117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MapCoercePipe, decorators: [{
9089
9118
  type: Pipe,
9090
9119
  args: [{ name: 'wbCoerceMap', standalone: true }]
9091
9120
  }] });
@@ -9128,10 +9157,10 @@ class ViewMenuComponent {
9128
9157
  onDocumentCloseEvent() {
9129
9158
  this._overlayRef.dispose();
9130
9159
  }
9131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMenuComponent, deps: [{ token: i1.OverlayRef }, { token: ɵWorkbenchView }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
9132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewMenuComponent, isStandalone: true, selector: "wb-view-menu", host: { listeners: { "document:keydown.escape": "onEscape()", "mousedown": "onHostCloseEvent($event)", "sci-microfrontend-focusin": "onHostCloseEvent($event)", "document:mousedown": "onDocumentCloseEvent()", "document:sci-microfrontend-focusin": "onDocumentCloseEvent()" }, properties: { "attr.data-viewid": "this.viewId" } }, ngImport: i0, template: "<ng-container *ngFor=\"let menuItemGroup of menuItemGroups$ | async | wbCoerceMap | keyvalue; last as isLast\">\n <button *ngFor=\"let menuItem of menuItemGroup.value\"\n class=\"menu-item\"\n [ngClass]=\"menuItem.cssClass\"\n [disabled]=\"menuItem.isDisabled?.()\"\n (click)=\"onMenuItemClick(menuItem)\">\n <div class=\"text\">\n <ng-container *cdkPortalOutlet=\"menuItem.portal\"></ng-container>\n </div>\n <div class=\"accelerator\">{{menuItem.accelerator | wbFormatAccelerator}}</div>\n </button>\n <hr *ngIf=\"!isLast\">\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:1px;width:var(--sci-workbench-contextmenu-width);border:1px solid var(--sci-color-border);color:var(--sci-color-text);background-color:var(--sci-color-background-elevation);border-radius:var(--sci-corner);overflow:hidden}:host>button.menu-item{all:unset;display:flex;flex-flow:row nowrap;padding:.6em 1.5em;font-size:smaller;position:relative;-webkit-user-select:none;user-select:none}:host>button.menu-item>div.text{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button.menu-item>div.accelerator{flex:none;margin-left:1em}:host>button.menu-item:hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>button.menu-item:disabled{opacity:.5;pointer-events:none}:host>button.menu-item:has(+hr):after{position:absolute;left:0;right:0;bottom:-1px;height:1px;background-color:var(--sci-color-border);content:\"\"}:host>hr{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: WbFormatAcceleratorPipe, name: "wbFormatAccelerator" }, { kind: "pipe", type: MapCoercePipe, name: "wbCoerceMap" }] }); }
9160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuComponent, deps: [{ token: i1.OverlayRef }, { token: ɵWorkbenchView }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
9161
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewMenuComponent, isStandalone: true, selector: "wb-view-menu", host: { listeners: { "document:keydown.escape": "onEscape()", "mousedown": "onHostCloseEvent($event)", "sci-microfrontend-focusin": "onHostCloseEvent($event)", "document:mousedown": "onDocumentCloseEvent()", "document:sci-microfrontend-focusin": "onDocumentCloseEvent()" }, properties: { "attr.data-viewid": "this.viewId" } }, ngImport: i0, template: "<ng-container *ngFor=\"let menuItemGroup of menuItemGroups$ | async | wbCoerceMap | keyvalue; last as isLast\">\n <button *ngFor=\"let menuItem of menuItemGroup.value\"\n class=\"menu-item\"\n [ngClass]=\"menuItem.cssClass\"\n [disabled]=\"menuItem.isDisabled?.()\"\n (click)=\"onMenuItemClick(menuItem)\">\n <div class=\"text\">\n <ng-container *cdkPortalOutlet=\"menuItem.portal\"></ng-container>\n </div>\n <div class=\"accelerator\">{{menuItem.accelerator | wbFormatAccelerator}}</div>\n </button>\n <hr *ngIf=\"!isLast\">\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:1px;width:var(--sci-workbench-contextmenu-width);border:1px solid var(--sci-color-border);color:var(--sci-color-text);background-color:var(--sci-color-background-elevation);border-radius:var(--sci-corner);overflow:hidden}:host>button.menu-item{all:unset;display:flex;flex-flow:row nowrap;padding:.6em 1.5em;font-size:smaller;position:relative;-webkit-user-select:none;user-select:none}:host>button.menu-item>div.text{flex:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>button.menu-item>div.accelerator{flex:none;margin-left:1em}:host>button.menu-item:hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>button.menu-item:disabled{opacity:.5;pointer-events:none}:host>button.menu-item:has(+hr):after{position:absolute;left:0;right:0;bottom:-1px;height:1px;background-color:var(--sci-color-border);content:\"\"}:host>hr{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: WbFormatAcceleratorPipe, name: "wbFormatAccelerator" }, { kind: "pipe", type: MapCoercePipe, name: "wbCoerceMap" }] }); }
9133
9162
  }
9134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMenuComponent, decorators: [{
9163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuComponent, decorators: [{
9135
9164
  type: Component,
9136
9165
  args: [{ selector: 'wb-view-menu', standalone: true, imports: [
9137
9166
  NgIf,
@@ -9188,10 +9217,10 @@ class TextComponent {
9188
9217
  constructor(text) {
9189
9218
  this.text = text;
9190
9219
  }
9191
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TextComponent, deps: [{ token: TEXT }], target: i0.ɵɵFactoryTarget.Component }); }
9192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: TextComponent, isStandalone: true, selector: "wb-text", ngImport: i0, template: '{{text}}', isInline: true }); }
9220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TextComponent, deps: [{ token: TEXT }], target: i0.ɵɵFactoryTarget.Component }); }
9221
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: TextComponent, isStandalone: true, selector: "wb-text", ngImport: i0, template: '{{text}}', isInline: true }); }
9193
9222
  }
9194
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TextComponent, decorators: [{
9223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TextComponent, decorators: [{
9195
9224
  type: Component,
9196
9225
  args: [{
9197
9226
  selector: 'wb-text',
@@ -9501,10 +9530,10 @@ class ViewMenuService {
9501
9530
  };
9502
9531
  });
9503
9532
  }
9504
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMenuService, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: i0.NgZone }, { token: WorkbenchViewRegistry }, { token: WorkbenchService }, { token: WorkbenchConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
9505
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMenuService, providedIn: 'root' }); }
9533
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuService, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: i0.NgZone }, { token: WorkbenchViewRegistry }, { token: WorkbenchService }, { token: WorkbenchConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
9534
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuService, providedIn: 'root' }); }
9506
9535
  }
9507
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMenuService, decorators: [{
9536
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuService, decorators: [{
9508
9537
  type: Injectable,
9509
9538
  args: [{ providedIn: 'root' }]
9510
9539
  }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }, { type: i0.NgZone }, { type: WorkbenchViewRegistry }, { type: WorkbenchService }, { type: WorkbenchConfig }] });
@@ -9582,12 +9611,12 @@ class ViewComponent {
9582
9611
  ngOnDestroy() {
9583
9612
  this._logger.debug(() => `Destroying ViewComponent [viewId=${this.viewId}]'`, LoggerNames.LIFECYCLE);
9584
9613
  }
9585
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewComponent, deps: [{ token: ɵWorkbenchView }, { token: Logger }, { token: i0.ElementRef }, { token: ViewDragService }, { token: ViewMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
9586
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewComponent, isStandalone: true, selector: "wb-view", host: { properties: { "attr.data-viewid": "this.viewId", "attr.class": "this.cssClasses", "class.view-drag": "this.isViewDragActive" } }, providers: [
9614
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewComponent, deps: [{ token: ɵWorkbenchView }, { token: Logger }, { token: i0.ElementRef }, { token: ViewDragService }, { token: ViewMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
9615
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewComponent, isStandalone: true, selector: "wb-view", host: { properties: { "attr.data-viewid": "this.viewId", "attr.class": "this.cssClasses", "class.view-drag": "this.isViewDragActive" } }, providers: [
9587
9616
  configureViewGlassPane(),
9588
9617
  ], viewQueries: [{ propertyName: "setViewport", first: true, predicate: SciViewportComponent, descendants: true }], hostDirectives: [{ directive: GlassPaneDirective }], ngImport: i0, template: "<sci-viewport cdkTrapFocus>\n <router-outlet [name]=\"viewId\"/>\n</sci-viewport>\n", styles: [":host{display:flex;flex-direction:column;background-color:var(--sci-workbench-view-background-color);color:var(--sci-color-text)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.view-drag{pointer-events:none}:host>sci-viewport{flex:1 1 0}:host>sci-viewport>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] }); }
9589
9618
  }
9590
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewComponent, decorators: [{
9619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewComponent, decorators: [{
9591
9620
  type: Component,
9592
9621
  args: [{ selector: 'wb-view', standalone: true, imports: [
9593
9622
  RouterOutlet,
@@ -9615,10 +9644,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
9615
9644
  * Blocks this view when dialog(s) overlay it.
9616
9645
  */
9617
9646
  function configureViewGlassPane() {
9618
- return {
9619
- provide: GLASS_PANE_BLOCKABLE,
9620
- useExisting: ɵWorkbenchView,
9621
- };
9647
+ return [
9648
+ {
9649
+ provide: GLASS_PANE_BLOCKABLE,
9650
+ useExisting: ɵWorkbenchView,
9651
+ },
9652
+ {
9653
+ provide: GLASS_PANE_OPTIONS,
9654
+ useFactory: () => ({ attributes: { 'data-viewid': inject(WorkbenchView).id } }),
9655
+ },
9656
+ ];
9622
9657
  }
9623
9658
 
9624
9659
  /*
@@ -9686,10 +9721,10 @@ class MainAreaLayoutComponent {
9686
9721
  }),
9687
9722
  });
9688
9723
  }
9689
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MainAreaLayoutComponent, deps: [{ token: WORKBENCH_ID }, { token: ɵWorkbenchPart }, { token: WorkbenchLayoutService }, { token: ViewDragService }], target: i0.ɵɵFactoryTarget.Component }); }
9690
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: MainAreaLayoutComponent, isStandalone: true, selector: "wb-main-area-layout", host: { properties: { "attr.data-partid": "this.partId" } }, ngImport: i0, template: "@if (mainAreaGrid.root | wbGridElementIfVisible; as root) {\n <wb-grid-element [element]=\"root\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"100\"\n [wbViewDropZonePlaceholderSize]=\"100\"\n [wbViewDropZoneRegions]=\"{\n north: false,\n south: root | wbRequiresDropZone:'south',\n west: root | wbRequiresDropZone:'west',\n east: root | wbRequiresDropZone:'east',\n center: false,\n }\"\n [wbViewDropZoneCssClass]=\"'e2e-main-area-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n </wb-grid-element>\n}\n@else {\n <sci-viewport class=\"start-page\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"1\"\n [wbViewDropZoneRegions]=\"{center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneCssClass]=\"'e2e-main-area-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n <router-outlet/>\n </sci-viewport>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>wb-grid-element,:host>sci-viewport.start-page{flex:1 1 0}:host>sci-viewport.start-page>router-outlet{position:absolute}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneCssClass", "wbViewDropZoneSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "pipe", type: RequiresDropZonePipe, name: "wbRequiresDropZone" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "pipe", type: GridElementIfVisiblePipe, name: "wbGridElementIfVisible" }] }); }
9724
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MainAreaLayoutComponent, deps: [{ token: WORKBENCH_ID }, { token: ɵWorkbenchPart }, { token: WorkbenchLayoutService }, { token: ViewDragService }], target: i0.ɵɵFactoryTarget.Component }); }
9725
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: MainAreaLayoutComponent, isStandalone: true, selector: "wb-main-area-layout", host: { properties: { "attr.data-partid": "this.partId" } }, ngImport: i0, template: "@if (mainAreaGrid.root | wbGridElementIfVisible; as root) {\n <wb-grid-element [element]=\"root\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"100\"\n [wbViewDropZonePlaceholderSize]=\"100\"\n [wbViewDropZoneRegions]=\"{\n north: false,\n south: root | wbRequiresDropZone:'south',\n west: root | wbRequiresDropZone:'west',\n east: root | wbRequiresDropZone:'east',\n center: false,\n }\"\n [wbViewDropZoneCssClass]=\"'e2e-main-area-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n </wb-grid-element>\n}\n@else {\n <sci-viewport class=\"start-page\"\n wbViewDropZone\n [wbViewDropZoneSize]=\"1\"\n [wbViewDropZoneRegions]=\"{center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneCssClass]=\"'e2e-main-area-grid'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\">\n <router-outlet/>\n </sci-viewport>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>wb-grid-element,:host>sci-viewport.start-page{flex:1 1 0}:host>sci-viewport.start-page>router-outlet{position:absolute}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneCssClass", "wbViewDropZoneSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "pipe", type: RequiresDropZonePipe, name: "wbRequiresDropZone" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "pipe", type: GridElementIfVisiblePipe, name: "wbGridElementIfVisible" }] }); }
9691
9726
  }
9692
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MainAreaLayoutComponent, decorators: [{
9727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MainAreaLayoutComponent, decorators: [{
9693
9728
  type: Component,
9694
9729
  args: [{ selector: 'wb-main-area-layout', standalone: true, imports: [
9695
9730
  NgIf,
@@ -9722,10 +9757,10 @@ class ViewTabContentComponent {
9722
9757
  this.view = view;
9723
9758
  this.context = inject(VIEW_TAB_RENDERING_CONTEXT);
9724
9759
  }
9725
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabContentComponent, deps: [{ token: WorkbenchView }], target: i0.ɵɵFactoryTarget.Component }); }
9726
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewTabContentComponent, isStandalone: true, selector: "wb-view-tab-content", host: { properties: { "attr.context": "this.context" } }, ngImport: i0, template: "<span class=\"title e2e-title\">\n <span *ngIf=\"view.dirty\" class=\"scion-workbench-icons dirty e2e-dirty\">dirty</span>\n {{view.title}}\n</span>\n\n<span class=\"heading e2e-heading\" *ngIf=\"view.heading\">\n {{view.heading}}\n</span>\n", styles: [":host{display:flex;flex-direction:column;gap:.25em;overflow:hidden}:host>span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-weight:400;font-size:1em}:host>span.title>span.dirty{padding-right:.2em}:host>span.heading{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:.9em;font-weight:300}:host[context=tab] span.title,:host[context=drag-image] span.title{margin-right:1em}@container viewtab (height < 3.5rem){:host>span.heading{display:none}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
9760
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabContentComponent, deps: [{ token: WorkbenchView }], target: i0.ɵɵFactoryTarget.Component }); }
9761
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewTabContentComponent, isStandalone: true, selector: "wb-view-tab-content", host: { properties: { "attr.context": "this.context" } }, ngImport: i0, template: "<span class=\"title e2e-title\">\n <span *ngIf=\"view.dirty\" class=\"scion-workbench-icons dirty e2e-dirty\">dirty</span>\n {{view.title}}\n</span>\n\n<span class=\"heading e2e-heading\" *ngIf=\"view.heading\">\n {{view.heading}}\n</span>\n", styles: [":host{display:flex;flex-direction:column;gap:.25em;overflow:hidden}:host>span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-weight:400;font-size:1em}:host>span.title>span.dirty{padding-right:.2em}:host>span.heading{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:.9em;font-weight:300}:host[context=tab] span.title,:host[context=drag-image] span.title{margin-right:1em}@container viewtab (height < 3.5rem){:host>span.heading{display:none}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
9727
9762
  }
9728
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabContentComponent, decorators: [{
9763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabContentComponent, decorators: [{
9729
9764
  type: Component,
9730
9765
  args: [{ selector: 'wb-view-tab-content', standalone: true, imports: [NgIf], template: "<span class=\"title e2e-title\">\n <span *ngIf=\"view.dirty\" class=\"scion-workbench-icons dirty e2e-dirty\">dirty</span>\n {{view.title}}\n</span>\n\n<span class=\"heading e2e-heading\" *ngIf=\"view.heading\">\n {{view.heading}}\n</span>\n", styles: [":host{display:flex;flex-direction:column;gap:.25em;overflow:hidden}:host>span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-weight:400;font-size:1em}:host>span.title>span.dirty{padding-right:.2em}:host>span.heading{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:.9em;font-weight:300}:host[context=tab] span.title,:host[context=drag-image] span.title{margin-right:1em}@container viewtab (height < 3.5rem){:host>span.heading{display:none}}\n"] }]
9731
9766
  }], ctorParameters: () => [{ type: WorkbenchView }], propDecorators: { context: [{
@@ -9886,10 +9921,10 @@ class ViewTabComponent {
9886
9921
  ],
9887
9922
  }));
9888
9923
  }
9889
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabComponent, deps: [{ token: i0.ElementRef }, { token: WORKBENCH_ID }, { token: WorkbenchConfig }, { token: WorkbenchViewRegistry }, { token: ɵWorkbenchRouter }, { token: ViewDragService }, { token: i0.IterableDiffers }, { token: ViewMenuService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
9890
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewTabComponent, isStandalone: true, selector: "wb-view-tab", inputs: { viewId: "viewId" }, host: { listeners: { "click": "onClick()", "mousedown": "onMousedown($event)", "contextmenu": "onContextmenu($event)", "dragstart": "onDragStart($event)", "dragend": "onDragEnd($event)" }, properties: { "attr.data-viewid": "this.viewId", "attr.draggable": "this.draggable", "attr.tabindex": "this.tabindex", "class.drag-over-tabbar": "this.isDragOverTabbar", "class.active": "this.active", "class.part-active": "this.partActive", "class.e2e-dirty": "this.dirty" } }, usesOnChanges: true, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n<div class=\"corner-radius start\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<div class=\"corner-radius end\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n</button>\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
9924
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabComponent, deps: [{ token: i0.ElementRef }, { token: WORKBENCH_ID }, { token: WorkbenchConfig }, { token: WorkbenchViewRegistry }, { token: ɵWorkbenchRouter }, { token: ViewDragService }, { token: i0.IterableDiffers }, { token: ViewMenuService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
9925
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewTabComponent, isStandalone: true, selector: "wb-view-tab", inputs: { viewId: "viewId" }, host: { listeners: { "click": "onClick()", "mousedown": "onMousedown($event)", "contextmenu": "onContextmenu($event)", "dragstart": "onDragStart($event)", "dragend": "onDragEnd($event)" }, properties: { "attr.data-viewid": "this.viewId", "attr.draggable": "this.draggable", "attr.tabindex": "this.tabindex", "class.drag-over-tabbar": "this.isDragOverTabbar", "class.active": "this.active", "class.part-active": "this.partActive", "class.e2e-dirty": "this.dirty" } }, usesOnChanges: true, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n<div class=\"corner-radius start\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<div class=\"corner-radius end\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n</button>\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
9891
9926
  }
9892
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabComponent, decorators: [{
9927
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabComponent, decorators: [{
9893
9928
  type: Component,
9894
9929
  args: [{ selector: 'wb-view-tab', standalone: true, imports: [
9895
9930
  NgIf,
@@ -9992,10 +10027,10 @@ class ViewTabDragImageComponent {
9992
10027
  this.isDragOverPeripheralTabbar = partId !== null && documentRoot.querySelector(`wb-workbench:has(wb-main-area-layout) wb-part[data-partid="${partId}"]:not(.main-area)`) !== null;
9993
10028
  });
9994
10029
  }
9995
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabDragImageComponent, deps: [{ token: WorkbenchView }, { token: WorkbenchConfig }, { token: ViewDragService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
9996
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewTabDragImageComponent, isStandalone: true, selector: "wb-view-tab-drag-image", host: { properties: { "class.active": "this.active", "class.part-active": "this.partActive", "class.drag-over-tabbar": "this.isDragOverTabbar", "class.drag-over-peripheral-tabbar": "this.isDragOverPeripheralTabbar" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n<div class=\"corner-radius start\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<div class=\"corner-radius end\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n</button>\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n", ":host.drag-over-peripheral-tabbar{background-color:var(--sci-workbench-view-peripheral-background-color)}:host:not(.drag-over-tabbar){border-radius:var(--sci-workbench-tab-border-radius);border:1px solid var(--sci-workbench-tab-drag-border-color)}:host:not(.drag-over-tabbar)>div.corner-radius{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
10030
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageComponent, deps: [{ token: WorkbenchView }, { token: WorkbenchConfig }, { token: ViewDragService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
10031
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewTabDragImageComponent, isStandalone: true, selector: "wb-view-tab-drag-image", host: { properties: { "class.active": "this.active", "class.part-active": "this.partActive", "class.drag-over-tabbar": "this.isDragOverTabbar", "class.drag-over-peripheral-tabbar": "this.isDragOverPeripheralTabbar" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n<div class=\"corner-radius start\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<div class=\"corner-radius end\" *ngIf=\"view.active\">\n <div class=\"circle\"></div>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose($event)\">\n close\n</button>\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;box-sizing:border-box;outline:none;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host.active{cursor:default;color:var(--sci-workbench-tab-active-text-color);border-left-color:var(--sci-workbench-tab-border-color);border-right-color:var(--sci-workbench-tab-border-color);border-top-color:var(--sci-workbench-tab-border-color);background-color:var(--sci-workbench-view-background-color)}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host.active{background-color:var(--sci-workbench-view-peripheral-background-color)}:host.active.part-active>div.content{color:var(--sci-workbench-part-active-tab-active-text-color)}:host>div.content{min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate}:host>button.close{all:unset;position:absolute;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);right:.2em}:host>button.close:not(:hover){opacity:.75}:host.active>button.close,:host:hover:not(.drag-over-tabbar)>button.close{visibility:visible}:host.active>button.close:hover{background-color:var(--sci-workbench-tab-hover-background-color)}:host:hover:not(.active):not(.drag-over-tabbar):before{content:\"\";background-color:var(--sci-workbench-tab-hover-background-color);position:absolute;inset:0 0 .125em .125em;border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host>div.corner-radius{height:var(--sci-workbench-tab-border-radius);width:var(--sci-workbench-tab-border-radius);overflow:hidden;position:absolute;bottom:0}:host>div.corner-radius>div.circle{position:absolute;top:calc(-2 * var(--sci-workbench-tab-border-radius));width:calc(2 * var(--sci-workbench-tab-border-radius));height:calc(2 * var(--sci-workbench-tab-border-radius));border:var(--sci-workbench-tab-border-radius) solid var(--sci-workbench-view-background-color);border-radius:50%;box-shadow:inset 0 0 0 1px var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host>div.corner-radius>div.circle{border-color:var(--sci-workbench-view-peripheral-background-color)}:host>div.corner-radius.start{left:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.start>div.circle{left:calc(-2 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end{right:calc(-1 * var(--sci-workbench-tab-border-radius))}:host>div.corner-radius.end>div.circle{right:calc(-2 * var(--sci-workbench-tab-border-radius))}@container viewtab (height >= 3.5rem){:host>button.close{align-self:start;top:.125em;right:.125em}}\n", ":host.drag-over-peripheral-tabbar{background-color:var(--sci-workbench-view-peripheral-background-color)}:host:not(.drag-over-tabbar){border-radius:var(--sci-workbench-tab-border-radius);border:1px solid var(--sci-workbench-tab-drag-border-color)}:host:not(.drag-over-tabbar)>div.corner-radius{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }] }); }
9997
10032
  }
9998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabDragImageComponent, decorators: [{
10033
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageComponent, decorators: [{
9999
10034
  type: Component,
10000
10035
  args: [{ selector: 'wb-view-tab-drag-image', standalone: true, imports: [
10001
10036
  NgIf,
@@ -10032,7 +10067,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
10032
10067
  */
10033
10068
  class ViewTabDragImageRenderer {
10034
10069
  constructor(_viewDragService,
10035
- // TODO [Angular 18][https://github.com/angular/components/issues/24334] Alternative constructor (ComponentFactoryResolver is deprecated)
10070
+ // TODO [Angular 19][https://github.com/angular/components/issues/24334] Alternative constructor (ComponentFactoryResolver is deprecated)
10036
10071
  _componentFactoryResolver, _applicationRef, _injector, _zone) {
10037
10072
  this._viewDragService = _viewDragService;
10038
10073
  this._componentFactoryResolver = _componentFactoryResolver;
@@ -10167,10 +10202,10 @@ class ViewTabDragImageRenderer {
10167
10202
  }
10168
10203
  });
10169
10204
  }
10170
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabDragImageRenderer, deps: [{ token: ViewDragService }, { token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
10171
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabDragImageRenderer, providedIn: 'root' }); }
10205
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageRenderer, deps: [{ token: ViewDragService }, { token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
10206
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageRenderer, providedIn: 'root' }); }
10172
10207
  }
10173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewTabDragImageRenderer, decorators: [{
10208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewTabDragImageRenderer, decorators: [{
10174
10209
  type: Injectable,
10175
10210
  args: [{ providedIn: 'root' }]
10176
10211
  }], ctorParameters: () => [{ type: ViewDragService }, { type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.NgZone }] });
@@ -10242,10 +10277,10 @@ class PartActionFilterPipe {
10242
10277
  transform(actions, align) {
10243
10278
  return actions?.filter(action => (action.align ?? 'start') === align) ?? [];
10244
10279
  }
10245
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartActionFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
10246
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: PartActionFilterPipe, isStandalone: true, name: "wbPartActionFilter" }); }
10280
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartActionFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
10281
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: PartActionFilterPipe, isStandalone: true, name: "wbPartActionFilter" }); }
10247
10282
  }
10248
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartActionFilterPipe, decorators: [{
10283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartActionFilterPipe, decorators: [{
10249
10284
  type: Pipe,
10250
10285
  args: [{ name: 'wbPartActionFilter', standalone: true }]
10251
10286
  }] });
@@ -10263,10 +10298,10 @@ class PartActionBarComponent {
10263
10298
  constructor(part) {
10264
10299
  this.part = part;
10265
10300
  }
10266
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartActionBarComponent, deps: [{ token: WorkbenchPart }], target: i0.ɵɵFactoryTarget.Component }); }
10267
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: PartActionBarComponent, isStandalone: true, selector: "wb-part-action-bar", ngImport: i0, template: "<ul class=\"start\" *ngIf=\"part.actions$ | async | wbPartActionFilter:'start' | wbNullIfEmpty as startActions\">\n <li *ngFor=\"let startAction of startActions\" class=\"e2e-part-action\" [ngClass]=\"startAction.cssClass\">\n <ng-container *cdkPortalOutlet=\"startAction.portal\"></ng-container>\n </li>\n</ul>\n\n<ul class=\"end\" *ngIf=\"part.actions$ | async | wbPartActionFilter:'end' | wbNullIfEmpty as endActions\">\n <li *ngFor=\"let endAction of endActions\" class=\"e2e-part-action\" [ngClass]=\"endAction.cssClass\">\n <ng-container *cdkPortalOutlet=\"endAction.portal\"></ng-container>\n </li>\n</ul>\n", styles: [":host{display:flex;gap:.5em}:host>ul{all:unset;list-style:none;flex:auto;display:flex;gap:.5em;align-items:center}:host>ul.start{padding-left:var(--sci-workbench-part-bar-actions-padding-inline);place-content:flex-start}:host>ul.end{padding-right:var(--sci-workbench-part-bar-actions-padding-inline);place-content:flex-end}:host>ul>li{all:unset;flex:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: PartActionFilterPipe, name: "wbPartActionFilter" }, { kind: "pipe", type: NullIfEmptyPipe, name: "wbNullIfEmpty" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10301
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartActionBarComponent, deps: [{ token: WorkbenchPart }], target: i0.ɵɵFactoryTarget.Component }); }
10302
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: PartActionBarComponent, isStandalone: true, selector: "wb-part-action-bar", ngImport: i0, template: "<ul class=\"start\" *ngIf=\"part.actions$ | async | wbPartActionFilter:'start' | wbNullIfEmpty as startActions\">\n <li *ngFor=\"let startAction of startActions\" class=\"e2e-part-action\" [ngClass]=\"startAction.cssClass\">\n <ng-container *cdkPortalOutlet=\"startAction.portal\"></ng-container>\n </li>\n</ul>\n\n<ul class=\"end\" *ngIf=\"part.actions$ | async | wbPartActionFilter:'end' | wbNullIfEmpty as endActions\">\n <li *ngFor=\"let endAction of endActions\" class=\"e2e-part-action\" [ngClass]=\"endAction.cssClass\">\n <ng-container *cdkPortalOutlet=\"endAction.portal\"></ng-container>\n </li>\n</ul>\n", styles: [":host{display:flex;gap:.5em}:host>ul{all:unset;list-style:none;flex:auto;display:flex;gap:.5em;align-items:center}:host>ul.start{padding-left:var(--sci-workbench-part-bar-actions-padding-inline);place-content:flex-start}:host>ul.end{padding-right:var(--sci-workbench-part-bar-actions-padding-inline);place-content:flex-end}:host>ul>li{all:unset;flex:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: PartActionFilterPipe, name: "wbPartActionFilter" }, { kind: "pipe", type: NullIfEmptyPipe, name: "wbNullIfEmpty" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10268
10303
  }
10269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartActionBarComponent, decorators: [{
10304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartActionBarComponent, decorators: [{
10270
10305
  type: Component,
10271
10306
  args: [{ selector: 'wb-part-action-bar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
10272
10307
  NgIf,
@@ -10368,12 +10403,12 @@ class FilterFieldComponent {
10368
10403
  ngOnDestroy() {
10369
10404
  this._focusManager.stopMonitoring(this._host.nativeElement);
10370
10405
  }
10371
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FilterFieldComponent, deps: [{ token: i0.ElementRef }, { token: i2$1.FocusMonitor }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
10372
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: FilterFieldComponent, isStandalone: true, selector: "wb-filter-field", inputs: { tabindex: "tabindex", placeholder: "placeholder", disabled: "disabled" }, outputs: { filter: "filter" }, host: { listeners: { "focus": "focus()" }, properties: { "attr.tabindex": "this.componentTabindex", "class.empty": "this.empty" } }, providers: [
10406
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FilterFieldComponent, deps: [{ token: i0.ElementRef }, { token: i2$1.FocusMonitor }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
10407
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: FilterFieldComponent, isStandalone: true, selector: "wb-filter-field", inputs: { tabindex: "tabindex", placeholder: "placeholder", disabled: "disabled" }, outputs: { filter: "filter" }, host: { listeners: { "focus": "focus()" }, properties: { "attr.tabindex": "this.componentTabindex", "class.empty": "this.empty" } }, providers: [
10373
10408
  { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => FilterFieldComponent) },
10374
10409
  ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<label [for]=\"id\" class=\"filter-icon scion-workbench-icons\">search</label>\n<input #input\n [attr.id]=\"id\"\n autocomplete=\"off\"\n [formControl]=\"formControl\"\n [tabindex]=\"tabindex ?? 0\"\n [placeholder]=\"placeholder ?? ''\">\n<button class=\"clear scion-workbench-icons\" tabindex=\"-1\" (click)=\"onClear()\">\n clear\n</button>\n", styles: [":host{display:inline-flex;flex-direction:row;gap:.5em;padding:.25em .5em}:host>label.filter-icon{flex:none;align-self:center;-webkit-user-select:none;user-select:none;font-size:1.5em}:host>input{all:unset;flex:auto;min-width:0}:host>button.clear{all:unset;flex:none;align-self:center;opacity:.75;cursor:pointer}:host>button.clear:hover{opacity:1}:host:not(:focus-within):not(:hover)>button.clear,:host:has(>input:disabled)>button.clear,:host.empty>button.clear{visibility:hidden}:host:has(>input:disabled)>label.filter-icon{color:var(--sci-color-text-subtlest)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10375
10410
  }
10376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FilterFieldComponent, decorators: [{
10411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FilterFieldComponent, decorators: [{
10377
10412
  type: Component,
10378
10413
  args: [{ selector: 'wb-filter-field', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ReactiveFormsModule], providers: [
10379
10414
  { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => FilterFieldComponent) },
@@ -10416,10 +10451,10 @@ class FilterByPredicatePipe {
10416
10451
  transform(items, predicate) {
10417
10452
  return Arrays.coerce(items).filter(predicate);
10418
10453
  }
10419
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FilterByPredicatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
10420
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: FilterByPredicatePipe, isStandalone: true, name: "wbFilterByPredicate" }); }
10454
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FilterByPredicatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
10455
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: FilterByPredicatePipe, isStandalone: true, name: "wbFilterByPredicate" }); }
10421
10456
  }
10422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FilterByPredicatePipe, decorators: [{
10457
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FilterByPredicatePipe, decorators: [{
10423
10458
  type: Pipe,
10424
10459
  args: [{ name: 'wbFilterByPredicate', standalone: true }]
10425
10460
  }] });
@@ -10441,10 +10476,10 @@ class FilterByTextPipe {
10441
10476
  return of(Arrays.coerce(items))
10442
10477
  .pipe(expand(it => filterControl.valueChanges.pipe(take(1), map(() => it))), filterArray(it => !filterControl.value || !!itemTextFn(it)?.match(toFilterRegExp(filterControl.value))));
10443
10478
  }
10444
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FilterByTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
10445
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: FilterByTextPipe, isStandalone: true, name: "wbFilterByText$" }); }
10479
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FilterByTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
10480
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: FilterByTextPipe, isStandalone: true, name: "wbFilterByText$" }); }
10446
10481
  }
10447
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: FilterByTextPipe, decorators: [{
10482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FilterByTextPipe, decorators: [{
10448
10483
  type: Pipe,
10449
10484
  args: [{ name: 'wbFilterByText$', standalone: true }]
10450
10485
  }] });
@@ -10492,10 +10527,10 @@ class ViewListItemComponent {
10492
10527
  ],
10493
10528
  }));
10494
10529
  }
10495
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewListItemComponent, deps: [{ token: WorkbenchViewRegistry }, { token: WorkbenchConfig }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
10496
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewListItemComponent, isStandalone: true, selector: "wb-view-list-item", inputs: { viewId: "viewId" }, host: { properties: { "class.active": "this.active" } }, ngImport: i0, template: "<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose()\">\n close\n</button>\n", styles: [":host{display:flex;align-items:center;padding:.6em 1em;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;gap:1em}:host.active{color:var(--sci-color-accent)}:host.active:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background-color:var(--sci-color-accent)}:host>div.content{flex:auto;display:grid;position:relative}:host>button.close{all:unset;flex:none;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);opacity:.75}:host>button.close:hover{opacity:1;background-color:var(--sci-color-background-elevation-hover)}:host:hover>button.close{visibility:visible}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10530
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListItemComponent, deps: [{ token: WorkbenchViewRegistry }, { token: WorkbenchConfig }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
10531
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewListItemComponent, isStandalone: true, selector: "wb-view-list-item", inputs: { viewId: "viewId" }, host: { properties: { "class.active": "this.active" } }, ngImport: i0, template: "<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal\"></ng-container>\n</div>\n\n<button *ngIf=\"view.closable\"\n class=\"close e2e-close scion-workbench-icons\"\n (click)=\"onClose()\">\n close\n</button>\n", styles: [":host{display:flex;align-items:center;padding:.6em 1em;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;gap:1em}:host.active{color:var(--sci-color-accent)}:host.active:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background-color:var(--sci-color-accent)}:host>div.content{flex:auto;display:grid;position:relative}:host>button.close{all:unset;flex:none;cursor:pointer;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);opacity:.75}:host>button.close:hover{opacity:1;background-color:var(--sci-color-background-elevation-hover)}:host:hover>button.close{visibility:visible}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10497
10532
  }
10498
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewListItemComponent, decorators: [{
10533
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListItemComponent, decorators: [{
10499
10534
  type: Component,
10500
10535
  args: [{ selector: 'wb-view-list-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
10501
10536
  PortalModule,
@@ -10572,10 +10607,10 @@ class ViewListComponent {
10572
10607
  onDocumentCloseEvent() {
10573
10608
  this._overlayRef.dispose();
10574
10609
  }
10575
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewListComponent, deps: [{ token: WorkbenchPart }, { token: WorkbenchViewRegistry }, { token: i1.OverlayRef }], target: i0.ɵɵFactoryTarget.Component }); }
10576
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewListComponent, isStandalone: true, selector: "wb-view-list", inputs: { position: "position" }, host: { listeners: { "document:keydown.escape": "onEscape()", "mousedown": "onHostCloseEvent($event)", "sci-microfrontend-focusin": "onHostCloseEvent($event)", "document:mousedown": "onDocumentCloseEvent()", "document:sci-microfrontend-focusin": "onDocumentCloseEvent()" }, properties: { "class.south": "this.isSouthPosition", "attr.data-partid": "this.partId" } }, viewQueries: [{ propertyName: "_filterFieldComponent", first: true, predicate: FilterFieldComponent, descendants: true, static: true }], ngImport: i0, template: "<wb-filter-field [formControl]=\"filterFormControl\"/>\n<ng-container *ngIf=\"{\n scrolledOutOfView: views$ | async |\n wbFilterByPredicate:scrolledOutOfViewFilterFn |\n wbFilterByText$:filterFormControl:viewTextFn | async,\n scrolledIntoView: views$ | async |\n wbFilterByPredicate:scrolledIntoViewFilterFn |\n wbFilterByText$:filterFormControl:viewTextFn | async\n } as views\">\n <sci-viewport *ngIf=\"views.scrolledOutOfView?.length || views.scrolledIntoView?.length\">\n <wb-view-list-item *ngFor=\"let view of views.scrolledOutOfView\"\n [viewId]=\"view.id\"\n (click)=\"onActivateView(view)\">\n </wb-view-list-item>\n <hr *ngIf=\"views.scrolledOutOfView?.length && views.scrolledIntoView?.length\">\n <wb-view-list-item *ngFor=\"let view of views.scrolledIntoView\"\n [viewId]=\"view.id\"\n (click)=\"onActivateView(view)\">\n </wb-view-list-item>\n </sci-viewport>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:.75em;width:var(--sci-workbench-contextmenu-width);border:1px solid var(--sci-color-border);color:var(--sci-color-text);background-color:var(--sci-color-background-elevation);border-radius:var(--sci-corner);overflow:hidden}:host.south{border-top:none}:host>wb-filter-field{flex:none;margin:.5em .25em}:host>sci-viewport{flex:auto;max-height:350px}:host>sci-viewport::part(content){display:flex;flex-direction:column;gap:1px;padding-top:1px}:host>sci-viewport>wb-view-list-item{position:relative}:host>sci-viewport>wb-view-list-item:hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>sci-viewport>wb-view-list-item:has(+hr):after{position:absolute;left:0;right:0;bottom:-1px;height:1px;background-color:var(--sci-color-border);content:\"\"}:host>sci-viewport>hr{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FilterFieldComponent, selector: "wb-filter-field", inputs: ["tabindex", "placeholder", "disabled"], outputs: ["filter"] }, { kind: "pipe", type: FilterByPredicatePipe, name: "wbFilterByPredicate" }, { kind: "pipe", type: FilterByTextPipe, name: "wbFilterByText$" }, { kind: "component", type: ViewListItemComponent, selector: "wb-view-list-item", inputs: ["viewId"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10610
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListComponent, deps: [{ token: WorkbenchPart }, { token: WorkbenchViewRegistry }, { token: i1.OverlayRef }], target: i0.ɵɵFactoryTarget.Component }); }
10611
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewListComponent, isStandalone: true, selector: "wb-view-list", inputs: { position: "position" }, host: { listeners: { "document:keydown.escape": "onEscape()", "mousedown": "onHostCloseEvent($event)", "sci-microfrontend-focusin": "onHostCloseEvent($event)", "document:mousedown": "onDocumentCloseEvent()", "document:sci-microfrontend-focusin": "onDocumentCloseEvent()" }, properties: { "class.south": "this.isSouthPosition", "attr.data-partid": "this.partId" } }, viewQueries: [{ propertyName: "_filterFieldComponent", first: true, predicate: FilterFieldComponent, descendants: true, static: true }], ngImport: i0, template: "<wb-filter-field [formControl]=\"filterFormControl\"/>\n<ng-container *ngIf=\"{\n scrolledOutOfView: views$ | async |\n wbFilterByPredicate:scrolledOutOfViewFilterFn |\n wbFilterByText$:filterFormControl:viewTextFn | async,\n scrolledIntoView: views$ | async |\n wbFilterByPredicate:scrolledIntoViewFilterFn |\n wbFilterByText$:filterFormControl:viewTextFn | async\n } as views\">\n <sci-viewport *ngIf=\"views.scrolledOutOfView?.length || views.scrolledIntoView?.length\">\n <wb-view-list-item *ngFor=\"let view of views.scrolledOutOfView\"\n [viewId]=\"view.id\"\n (click)=\"onActivateView(view)\">\n </wb-view-list-item>\n <hr *ngIf=\"views.scrolledOutOfView?.length && views.scrolledIntoView?.length\">\n <wb-view-list-item *ngFor=\"let view of views.scrolledIntoView\"\n [viewId]=\"view.id\"\n (click)=\"onActivateView(view)\">\n </wb-view-list-item>\n </sci-viewport>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:.75em;width:var(--sci-workbench-contextmenu-width);border:1px solid var(--sci-color-border);color:var(--sci-color-text);background-color:var(--sci-color-background-elevation);border-radius:var(--sci-corner);overflow:hidden}:host.south{border-top:none}:host>wb-filter-field{flex:none;margin:.5em .25em}:host>sci-viewport{flex:auto;max-height:350px}:host>sci-viewport::part(content){display:flex;flex-direction:column;gap:1px;padding-top:1px}:host>sci-viewport>wb-view-list-item{position:relative}:host>sci-viewport>wb-view-list-item:hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>sci-viewport>wb-view-list-item:has(+hr):after{position:absolute;left:0;right:0;bottom:-1px;height:1px;background-color:var(--sci-color-border);content:\"\"}:host>sci-viewport>hr{display:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FilterFieldComponent, selector: "wb-filter-field", inputs: ["tabindex", "placeholder", "disabled"], outputs: ["filter"] }, { kind: "pipe", type: FilterByPredicatePipe, name: "wbFilterByPredicate" }, { kind: "pipe", type: FilterByTextPipe, name: "wbFilterByText$" }, { kind: "component", type: ViewListItemComponent, selector: "wb-view-list-item", inputs: ["viewId"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10577
10612
  }
10578
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewListComponent, decorators: [{
10613
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListComponent, decorators: [{
10579
10614
  type: Component,
10580
10615
  args: [{ selector: 'wb-view-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
10581
10616
  NgIf,
@@ -10676,10 +10711,10 @@ class ViewListButtonComponent {
10676
10711
  ngOnDestroy() {
10677
10712
  this._overlayRef?.dispose();
10678
10713
  }
10679
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewListButtonComponent, deps: [{ token: i0.ElementRef }, { token: i1.Overlay }, { token: i0.Injector }, { token: i0.NgZone }, { token: WorkbenchPart }, { token: WorkbenchViewRegistry }], target: i0.ɵɵFactoryTarget.Component }); }
10680
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ViewListButtonComponent, isStandalone: true, selector: "wb-view-list-button", host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: "<span class=\"chevron scion-workbench-icons\">\n chevron_down\n</span>\n<span class=\"count\" *ngIf=\"scrolledOutOfViewTabCount$ | async as count\">{{count}}</span>\n", styles: [":host{display:flex;flex-direction:column;cursor:pointer;padding:.5em;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}:host>span.chevron{flex:none}:host>span.count{flex:none;font-size:var(--sci-workbench-part-hidden-tab-count-size)}@container style(--sci-workbench-part-hidden-tab-count-size: 0){:host>span.count{display:none}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
10714
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListButtonComponent, deps: [{ token: i0.ElementRef }, { token: i1.Overlay }, { token: i0.Injector }, { token: i0.NgZone }, { token: WorkbenchPart }, { token: WorkbenchViewRegistry }], target: i0.ɵɵFactoryTarget.Component }); }
10715
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ViewListButtonComponent, isStandalone: true, selector: "wb-view-list-button", host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: "<span class=\"chevron scion-workbench-icons\">\n chevron_down\n</span>\n<span class=\"count\" *ngIf=\"scrolledOutOfViewTabCount$ | async as count\">{{count}}</span>\n", styles: [":host{display:flex;flex-direction:column;cursor:pointer;padding:.5em;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}:host>span.chevron{flex:none}:host>span.count{flex:none;font-size:var(--sci-workbench-part-hidden-tab-count-size)}@container style(--sci-workbench-part-hidden-tab-count-size: 0){:host>span.count{display:none}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
10681
10716
  }
10682
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewListButtonComponent, decorators: [{
10717
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListButtonComponent, decorators: [{
10683
10718
  type: Component,
10684
10719
  args: [{ selector: 'wb-view-list-button', standalone: true, imports: [
10685
10720
  NgIf,
@@ -11083,10 +11118,10 @@ class PartBarComponent {
11083
11118
  setCssVariable(this._host, { '--ɵpart-bar-indent-right': `${this._tabbarIndent.right}px` });
11084
11119
  });
11085
11120
  }
11086
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartBarComponent, deps: [{ token: i0.ElementRef }, { token: WORKBENCH_ID }, { token: WorkbenchLayoutService }, { token: ɵWorkbenchRouter }, { token: ViewTabDragImageRenderer }, { token: ɵWorkbenchPart }, { token: ViewDragService }, { token: i0.DestroyRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
11087
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: PartBarComponent, isStandalone: true, selector: "wb-part-bar", host: { listeners: { "dblclick": "onDoubleClick($event)", "dragstart": "onViewDragStart($event)", "dragend": "onViewDragEnd()" } }, viewQueries: [{ propertyName: "_viewportElement", first: true, predicate: SciViewportComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "_viewportComponent", first: true, predicate: SciViewportComponent, descendants: true, static: true }, { propertyName: "_tabCornerRadiusElement", first: true, predicate: ["tab_corner_radius"], descendants: true, static: true }, { propertyName: "_paddingInlineElement", first: true, predicate: ["padding_inline"], descendants: true, static: true }, { propertyName: "injectViewTabs", predicate: ViewTabComponent, descendants: true }], ngImport: i0, template: "<sci-viewport class=\"tabbar\" scrollbarStyle=\"hidden\"\n [class.dragover]=\"dragover$ | async\"\n sciDimension (sciDimensionChange)=\"onTabbarViewportDimensionChange()\"\n (scroll)=\"onScroll()\">\n <ng-container *ngFor=\"let viewId of viewIds$ | async;\">\n <div class=\"divider\" *ngIf=\"viewtab === dropTargetViewTab\"></div>\n <wb-view-tab #viewtab\n [viewId]=\"viewId\"\n [class.drag-source]=\"viewtab === dragSourceViewTab\"\n [class.drop-target]=\"viewtab === dropTargetViewTab\">\n </wb-view-tab>\n <div class=\"divider\"></div>\n </ng-container>\n\n <!-- Placeholder element to grow the viewport to fit the drag image. -->\n <div class=\"drag-image-placeholder\"></div>\n</sci-viewport>\n<wb-part-action-bar/>\n<wb-view-list-button/>\n\n<!-- Element for injecting the corner radius into the component. -->\n<div class=\"tab-corner-radius\" #tab_corner_radius></div>\n<!-- Element for injecting the tabbar padding into the component. -->\n<div class=\"padding-inline\" #padding_inline></div>\n", styles: ["@charset \"UTF-8\";:host{--\\275part-bar-indent-left: 0;--\\275part-bar-indent-right: 0;--\\275part-bar-drag-source-width: 0;--\\275part-bar-drag-image-placeholder-width: 0;display:flex;color:var(--sci-workbench-tab-text-color);background-color:var(--sci-workbench-part-bar-background-color);border-top:var(--sci-workbench-part-bar-padding-top) solid transparent;background-clip:border-box;height:var(--sci-workbench-tab-height);box-sizing:content-box;position:relative;container-name:viewtab;container-type:size}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host{background-color:var(--sci-workbench-part-peripheral-bar-background-color)}:host>sci-viewport.tabbar{flex:initial}:host>sci-viewport.tabbar::part(content){display:flex;padding-left:var(--\\275part-bar-indent-left);padding-right:var(--\\275part-bar-indent-right)}:host>sci-viewport.tabbar:not(.dragover):not(:has(wb-view-tab:not(.drag-source)))::part(content){padding-right:0}:host>sci-viewport.tabbar>wb-view-tab{flex:none}:host>sci-viewport.tabbar>wb-view-tab.drag-source{display:none}:host>sci-viewport.tabbar>div.divider{flex:none;display:flex;position:relative;width:0}:host>sci-viewport.tabbar>div.divider:after{flex:none;align-self:center;content:\"\";position:absolute;width:1px;left:-1px;height:65%;background-color:var(--sci-workbench-part-bar-divider-color)}:host>sci-viewport.tabbar>div.drag-image-placeholder{flex:none;width:var(--\\275part-bar-drag-image-placeholder-width)}:host>sci-viewport.tabbar>wb-view-tab.drop-target,:host>sci-viewport.tabbar wb-view-tab.drop-target~:is(wb-view-tab,div.divider),:host>sci-viewport.tabbar>div.divider:has(+wb-view-tab.drop-target){transform:translate(var(--\\275part-bar-drag-source-width))}:host>sci-viewport.tabbar>wb-view-tab:is(.active,.drag-source)+div.divider{display:none}:host>sci-viewport.tabbar>div.divider:has(+wb-view-tab.active:not(.drag-source)){display:none}:host>sci-viewport.tabbar>div.divider:has(+wb-view-tab.drag-source:not(.active)){display:none}:host>wb-part-action-bar{flex:auto}:host>wb-view-list-button{flex:none}:host:before{content:\"\";position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--sci-workbench-tab-border-color)}:host>div.tab-corner-radius{position:absolute;visibility:hidden;width:var(--sci-workbench-tab-border-radius)}:host>div.padding-inline{position:absolute;visibility:hidden;width:var(--sci-workbench-part-bar-padding-inline)}:host:not(.calculating-max-viewport-width).drag-enter wb-view-tab,:host:not(.calculating-max-viewport-width).drag-enter div.divider,:host:not(.calculating-max-viewport-width).drag-over wb-view-tab,:host:not(.calculating-max-viewport-width).drag-over div.divider,:host:not(.calculating-max-viewport-width).drag-leave wb-view-tab,:host:not(.calculating-max-viewport-width).drag-leave div.divider{transition:transform 175ms cubic-bezier(0,0,.2,1)}:host:not(.calculating-max-viewport-width).drag-enter div.drag-image-placeholder,:host:not(.calculating-max-viewport-width).drag-leave div.drag-image-placeholder{transition:width 175ms cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "ngmodule", type: SciDimensionModule }, { kind: "directive", type: i6.SciDimensionDirective, selector: "[sciDimension]", inputs: ["emitOutsideAngular"], outputs: ["sciDimensionChange"], exportAs: ["sciDimension"] }, { kind: "component", type: ViewTabComponent, selector: "wb-view-tab", inputs: ["viewId"] }, { kind: "component", type: PartActionBarComponent, selector: "wb-part-action-bar" }, { kind: "component", type: ViewListButtonComponent, selector: "wb-view-list-button" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
11121
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartBarComponent, deps: [{ token: i0.ElementRef }, { token: WORKBENCH_ID }, { token: WorkbenchLayoutService }, { token: ɵWorkbenchRouter }, { token: ViewTabDragImageRenderer }, { token: ɵWorkbenchPart }, { token: ViewDragService }, { token: i0.DestroyRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
11122
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: PartBarComponent, isStandalone: true, selector: "wb-part-bar", host: { listeners: { "dblclick": "onDoubleClick($event)", "dragstart": "onViewDragStart($event)", "dragend": "onViewDragEnd()" } }, viewQueries: [{ propertyName: "_viewportElement", first: true, predicate: SciViewportComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "_viewportComponent", first: true, predicate: SciViewportComponent, descendants: true, static: true }, { propertyName: "_tabCornerRadiusElement", first: true, predicate: ["tab_corner_radius"], descendants: true, static: true }, { propertyName: "_paddingInlineElement", first: true, predicate: ["padding_inline"], descendants: true, static: true }, { propertyName: "injectViewTabs", predicate: ViewTabComponent, descendants: true }], ngImport: i0, template: "<sci-viewport class=\"tabbar\" scrollbarStyle=\"hidden\"\n [class.dragover]=\"dragover$ | async\"\n sciDimension (sciDimensionChange)=\"onTabbarViewportDimensionChange()\"\n (scroll)=\"onScroll()\">\n <ng-container *ngFor=\"let viewId of viewIds$ | async;\">\n <div class=\"divider\" *ngIf=\"viewtab === dropTargetViewTab\"></div>\n <wb-view-tab #viewtab\n [viewId]=\"viewId\"\n [class.drag-source]=\"viewtab === dragSourceViewTab\"\n [class.drop-target]=\"viewtab === dropTargetViewTab\">\n </wb-view-tab>\n <div class=\"divider\"></div>\n </ng-container>\n\n <!-- Placeholder element to grow the viewport to fit the drag image. -->\n <div class=\"drag-image-placeholder\"></div>\n</sci-viewport>\n<wb-part-action-bar/>\n<wb-view-list-button/>\n\n<!-- Element for injecting the corner radius into the component. -->\n<div class=\"tab-corner-radius\" #tab_corner_radius></div>\n<!-- Element for injecting the tabbar padding into the component. -->\n<div class=\"padding-inline\" #padding_inline></div>\n", styles: ["@charset \"UTF-8\";:host{--\\275part-bar-indent-left: 0;--\\275part-bar-indent-right: 0;--\\275part-bar-drag-source-width: 0;--\\275part-bar-drag-image-placeholder-width: 0;display:flex;color:var(--sci-workbench-tab-text-color);background-color:var(--sci-workbench-part-bar-background-color);border-top:var(--sci-workbench-part-bar-padding-top) solid transparent;background-clip:border-box;height:var(--sci-workbench-tab-height);box-sizing:content-box;position:relative;container-name:viewtab;container-type:size}wb-workbench:has(wb-main-area-layout) wb-part:not(.main-area) :host{background-color:var(--sci-workbench-part-peripheral-bar-background-color)}:host>sci-viewport.tabbar{flex:initial}:host>sci-viewport.tabbar::part(content){display:flex;padding-left:var(--\\275part-bar-indent-left);padding-right:var(--\\275part-bar-indent-right)}:host>sci-viewport.tabbar:not(.dragover):not(:has(wb-view-tab:not(.drag-source)))::part(content){padding-right:0}:host>sci-viewport.tabbar>wb-view-tab{flex:none}:host>sci-viewport.tabbar>wb-view-tab.drag-source{display:none}:host>sci-viewport.tabbar>div.divider{flex:none;display:flex;position:relative;width:0}:host>sci-viewport.tabbar>div.divider:after{flex:none;align-self:center;content:\"\";position:absolute;width:1px;left:-1px;height:65%;background-color:var(--sci-workbench-part-bar-divider-color)}:host>sci-viewport.tabbar>div.drag-image-placeholder{flex:none;width:var(--\\275part-bar-drag-image-placeholder-width)}:host>sci-viewport.tabbar>wb-view-tab.drop-target,:host>sci-viewport.tabbar wb-view-tab.drop-target~:is(wb-view-tab,div.divider),:host>sci-viewport.tabbar>div.divider:has(+wb-view-tab.drop-target){transform:translate(var(--\\275part-bar-drag-source-width))}:host>sci-viewport.tabbar>wb-view-tab:is(.active,.drag-source)+div.divider{display:none}:host>sci-viewport.tabbar>div.divider:has(+wb-view-tab.active:not(.drag-source)){display:none}:host>sci-viewport.tabbar>div.divider:has(+wb-view-tab.drag-source:not(.active)){display:none}:host>wb-part-action-bar{flex:auto}:host>wb-view-list-button{flex:none}:host:before{content:\"\";position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--sci-workbench-tab-border-color)}:host>div.tab-corner-radius{position:absolute;visibility:hidden;width:var(--sci-workbench-tab-border-radius)}:host>div.padding-inline{position:absolute;visibility:hidden;width:var(--sci-workbench-part-bar-padding-inline)}:host:not(.calculating-max-viewport-width).drag-enter wb-view-tab,:host:not(.calculating-max-viewport-width).drag-enter div.divider,:host:not(.calculating-max-viewport-width).drag-over wb-view-tab,:host:not(.calculating-max-viewport-width).drag-over div.divider,:host:not(.calculating-max-viewport-width).drag-leave wb-view-tab,:host:not(.calculating-max-viewport-width).drag-leave div.divider{transition:transform 175ms cubic-bezier(0,0,.2,1)}:host:not(.calculating-max-viewport-width).drag-enter div.drag-image-placeholder,:host:not(.calculating-max-viewport-width).drag-leave div.drag-image-placeholder{transition:width 175ms cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "ngmodule", type: SciDimensionModule }, { kind: "directive", type: i6.SciDimensionDirective, selector: "[sciDimension]", inputs: ["emitOutsideAngular"], outputs: ["sciDimensionChange"], exportAs: ["sciDimension"] }, { kind: "component", type: ViewTabComponent, selector: "wb-view-tab", inputs: ["viewId"] }, { kind: "component", type: PartActionBarComponent, selector: "wb-part-action-bar" }, { kind: "component", type: ViewListButtonComponent, selector: "wb-view-list-button" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
11088
11123
  }
11089
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartBarComponent, decorators: [{
11124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartBarComponent, decorators: [{
11090
11125
  type: Component,
11091
11126
  args: [{ selector: 'wb-part-bar', standalone: true, imports: [
11092
11127
  NgFor,
@@ -11182,10 +11217,10 @@ class WorkbenchPortalOutletDirective {
11182
11217
  ngOnDestroy() {
11183
11218
  this.detach();
11184
11219
  }
11185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPortalOutletDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
11186
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: WorkbenchPortalOutletDirective, isStandalone: true, selector: "ng-template[wbPortalOutlet]", inputs: { portal: ["wbPortalOutlet", "portal"] }, ngImport: i0 }); }
11220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPortalOutletDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
11221
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: WorkbenchPortalOutletDirective, isStandalone: true, selector: "ng-template[wbPortalOutlet]", inputs: { portal: ["wbPortalOutlet", "portal"] }, ngImport: i0 }); }
11187
11222
  }
11188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPortalOutletDirective, decorators: [{
11223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPortalOutletDirective, decorators: [{
11189
11224
  type: Directive,
11190
11225
  args: [{ selector: 'ng-template[wbPortalOutlet]', standalone: true }]
11191
11226
  }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }], propDecorators: { portal: [{
@@ -11215,10 +11250,10 @@ class ViewPortalPipe {
11215
11250
  }
11216
11251
  return this._viewRegistry.get(viewId).portal;
11217
11252
  }
11218
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewPortalPipe, deps: [{ token: WorkbenchViewRegistry }], target: i0.ɵɵFactoryTarget.Pipe }); }
11219
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: ViewPortalPipe, isStandalone: true, name: "wbViewPortal" }); }
11253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewPortalPipe, deps: [{ token: WorkbenchViewRegistry }], target: i0.ɵɵFactoryTarget.Pipe }); }
11254
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: ViewPortalPipe, isStandalone: true, name: "wbViewPortal" }); }
11220
11255
  }
11221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewPortalPipe, decorators: [{
11256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewPortalPipe, decorators: [{
11222
11257
  type: Pipe,
11223
11258
  args: [{ name: 'wbViewPortal', standalone: true }]
11224
11259
  }], ctorParameters: () => [{ type: WorkbenchViewRegistry }] });
@@ -11317,10 +11352,10 @@ class PartComponent {
11317
11352
  ngOnDestroy() {
11318
11353
  this._logger.debug(() => `Destroying PartComponent [partId=${this.partId}]'`, LoggerNames.LIFECYCLE);
11319
11354
  }
11320
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartComponent, deps: [{ token: WORKBENCH_ID }, { token: WorkbenchViewRegistry }, { token: ViewDragService }, { token: i0.Injector }, { token: Logger }, { token: i0.ChangeDetectorRef }, { token: ɵWorkbenchPart }], target: i0.ɵɵFactoryTarget.Component }); }
11321
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: PartComponent, isStandalone: true, selector: "wb-part", host: { properties: { "attr.tabindex": "this.tabIndex", "attr.data-partid": "this.partId", "class.e2e-main-area": "this.isInMainArea", "class.main-area": "this.isMainArea", "class.active": "this.isActive" } }, ngImport: i0, template: "<wb-part-bar></wb-part-bar>\n\n<div wbViewDropZone\n [wbViewDropZoneSize]=\".3\"\n [wbViewDropZonePlaceholderSize]=\".5\"\n [wbViewDropZoneCssClass]=\"'e2e-part'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"\n class=\"active-view e2e-active-view\">\n <ng-container *wbPortalOutlet=\"part.activeViewId$ | async | wbViewPortal\"></ng-container>\n</div>\n", styles: [":host{display:flex;flex-direction:column;outline:none}:host>wb-part-bar{flex:none}:host>div.active-view{flex:auto;display:grid;position:relative}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: PartBarComponent, selector: "wb-part-bar" }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneCssClass", "wbViewDropZoneSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet"] }, { kind: "pipe", type: ViewPortalPipe, name: "wbViewPortal" }] }); }
11355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartComponent, deps: [{ token: WORKBENCH_ID }, { token: WorkbenchViewRegistry }, { token: ViewDragService }, { token: i0.Injector }, { token: Logger }, { token: i0.ChangeDetectorRef }, { token: ɵWorkbenchPart }], target: i0.ɵɵFactoryTarget.Component }); }
11356
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: PartComponent, isStandalone: true, selector: "wb-part", host: { properties: { "attr.tabindex": "this.tabIndex", "attr.data-partid": "this.partId", "class.e2e-main-area": "this.isInMainArea", "class.main-area": "this.isMainArea", "class.active": "this.isActive" } }, ngImport: i0, template: "<wb-part-bar></wb-part-bar>\n\n<div wbViewDropZone\n [wbViewDropZoneSize]=\".3\"\n [wbViewDropZonePlaceholderSize]=\".5\"\n [wbViewDropZoneCssClass]=\"'e2e-part'\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"\n class=\"active-view e2e-active-view\">\n <ng-container *wbPortalOutlet=\"part.activeViewId$ | async | wbViewPortal\"></ng-container>\n</div>\n", styles: [":host{display:flex;flex-direction:column;outline:none}:host>wb-part-bar{flex:none}:host>div.active-view{flex:auto;display:grid;position:relative}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: PartBarComponent, selector: "wb-part-bar" }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneCssClass", "wbViewDropZoneSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet"] }, { kind: "pipe", type: ViewPortalPipe, name: "wbViewPortal" }] }); }
11322
11357
  }
11323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PartComponent, decorators: [{
11358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: PartComponent, decorators: [{
11324
11359
  type: Component,
11325
11360
  args: [{ selector: 'wb-part', standalone: true, imports: [
11326
11361
  AsyncPipe,
@@ -11427,10 +11462,10 @@ class WorkbenchLayoutDiffer {
11427
11462
  views: this._viewsDiffer.diff(views),
11428
11463
  });
11429
11464
  }
11430
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutDiffer, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Injectable }); }
11431
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutDiffer, providedIn: 'root' }); }
11465
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutDiffer, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Injectable }); }
11466
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutDiffer, providedIn: 'root' }); }
11432
11467
  }
11433
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutDiffer, decorators: [{
11468
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutDiffer, decorators: [{
11434
11469
  type: Injectable,
11435
11470
  args: [{ providedIn: 'root' }]
11436
11471
  }], ctorParameters: () => [{ type: i0.IterableDiffers }] });
@@ -11481,10 +11516,10 @@ class WorkbenchPopupDiffer {
11481
11516
  const popupOutlets = Object.keys(urlTree.root.children).filter(RouterUtils.isPopupOutlet);
11482
11517
  return new WorkbenchPopupDiff(this._popupsDiffer.diff(popupOutlets));
11483
11518
  }
11484
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPopupDiffer, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Injectable }); }
11485
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPopupDiffer, providedIn: 'root' }); }
11519
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPopupDiffer, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Injectable }); }
11520
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPopupDiffer, providedIn: 'root' }); }
11486
11521
  }
11487
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchPopupDiffer, decorators: [{
11522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchPopupDiffer, decorators: [{
11488
11523
  type: Injectable,
11489
11524
  args: [{ providedIn: 'root' }]
11490
11525
  }], ctorParameters: () => [{ type: i0.IterableDiffers }] });
@@ -11526,13 +11561,13 @@ class WorkbenchDialogDiffer {
11526
11561
  * Computes differences in the URL since last time {@link WorkbenchDialogDiffer#diff} was invoked.
11527
11562
  */
11528
11563
  diff(urlTree) {
11529
- const dialogOutlets = Object.keys(urlTree.root.children).filter(outlet => RouterUtils.isDialogOutlet(outlet));
11564
+ const dialogOutlets = Object.keys(urlTree.root.children).filter(RouterUtils.isDialogOutlet);
11530
11565
  return new WorkbenchDialogDiff(this._dialogDiffer.diff(dialogOutlets));
11531
11566
  }
11532
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogDiffer, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Injectable }); }
11533
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogDiffer, providedIn: 'root' }); }
11567
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogDiffer, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Injectable }); }
11568
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogDiffer, providedIn: 'root' }); }
11534
11569
  }
11535
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogDiffer, decorators: [{
11570
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogDiffer, decorators: [{
11536
11571
  type: Injectable,
11537
11572
  args: [{ providedIn: 'root' }]
11538
11573
  }], ctorParameters: () => [{ type: i0.IterableDiffers }] });
@@ -11554,6 +11589,54 @@ class WorkbenchDialogDiff {
11554
11589
  }
11555
11590
  }
11556
11591
 
11592
+ /*
11593
+ * Copyright (c) 2018-2024 Swiss Federal Railways
11594
+ *
11595
+ * This program and the accompanying materials are made
11596
+ * available under the terms of the Eclipse Public License 2.0
11597
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
11598
+ *
11599
+ * SPDX-License-Identifier: EPL-2.0
11600
+ */
11601
+ /**
11602
+ * Stateful differ for finding added/removed message boxes.
11603
+ */
11604
+ class WorkbenchMessageBoxDiffer {
11605
+ constructor(differs) {
11606
+ this._messageBoxDiffer = differs.find([]).create();
11607
+ }
11608
+ /**
11609
+ * Computes differences in the URL since last time {@link WorkbenchMessageBoxDiffer#diff} was invoked.
11610
+ */
11611
+ diff(urlTree) {
11612
+ const messageBoxOutlets = Object.keys(urlTree.root.children).filter(RouterUtils.isMessageBoxOutlet);
11613
+ return new WorkbenchMessageBoxDiff(this._messageBoxDiffer.diff(messageBoxOutlets));
11614
+ }
11615
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxDiffer, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Injectable }); }
11616
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxDiffer, providedIn: 'root' }); }
11617
+ }
11618
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchMessageBoxDiffer, decorators: [{
11619
+ type: Injectable,
11620
+ args: [{ providedIn: 'root' }]
11621
+ }], ctorParameters: () => [{ type: i0.IterableDiffers }] });
11622
+ /**
11623
+ * Lists the message boxes added/removed in the current navigation.
11624
+ */
11625
+ class WorkbenchMessageBoxDiff {
11626
+ constructor(changes) {
11627
+ this.addedMessageBoxOutlets = new Array();
11628
+ this.removedMessageBoxOutlets = new Array();
11629
+ changes?.forEachAddedItem(({ item }) => this.addedMessageBoxOutlets.push(item));
11630
+ changes?.forEachRemovedItem(({ item }) => this.removedMessageBoxOutlets.push(item));
11631
+ }
11632
+ toString() {
11633
+ return `${new Array()
11634
+ .concat(this.addedMessageBoxOutlets.length ? `addedMessageBoxOutlets=[${this.addedMessageBoxOutlets}]` : [])
11635
+ .concat(this.removedMessageBoxOutlets.length ? `removedMessageBoxOutlets=[${this.removedMessageBoxOutlets}]` : [])
11636
+ .join(', ')}`;
11637
+ }
11638
+ }
11639
+
11557
11640
  /*
11558
11641
  * Copyright (c) 2018-2024 Swiss Federal Railways
11559
11642
  *
@@ -11573,7 +11656,7 @@ class WorkbenchDialogDiff {
11573
11656
  * - Parses the serialized layout and injects it into {@link WorkbenchLayoutService}.
11574
11657
  */
11575
11658
  class WorkbenchUrlObserver {
11576
- constructor(_router, _auxiliaryRoutesRegistrator, _viewRegistry, _partRegistry, _workbenchLayoutService, _environmentInjector, _workbenchRouter, _workbenchLayoutFactory, _workbenchLayoutDiffer, _workbenchPopupDiffer, _workbenchDialogDiffer, _logger) {
11659
+ constructor(_router, _auxiliaryRoutesRegistrator, _viewRegistry, _partRegistry, _workbenchLayoutService, _environmentInjector, _workbenchRouter, _workbenchLayoutFactory, _workbenchLayoutDiffer, _workbenchPopupDiffer, _workbenchDialogDiffer, _workbenchMessageBoxDiffer, _logger) {
11577
11660
  this._router = _router;
11578
11661
  this._auxiliaryRoutesRegistrator = _auxiliaryRoutesRegistrator;
11579
11662
  this._viewRegistry = _viewRegistry;
@@ -11585,17 +11668,16 @@ class WorkbenchUrlObserver {
11585
11668
  this._workbenchLayoutDiffer = _workbenchLayoutDiffer;
11586
11669
  this._workbenchPopupDiffer = _workbenchPopupDiffer;
11587
11670
  this._workbenchDialogDiffer = _workbenchDialogDiffer;
11671
+ this._workbenchMessageBoxDiffer = _workbenchMessageBoxDiffer;
11588
11672
  this._logger = _logger;
11589
11673
  this.installRouterEventListeners();
11590
11674
  }
11591
11675
  /** Invoked at the beginning of each navigation */
11592
11676
  onNavigationStart(event) {
11593
11677
  const context = this.createWorkbenchNavigationContext(event.url);
11594
- this._logger.debug(() => 'onNavigationStart', LoggerNames.ROUTING, event, `NavigationContext [parts=${context.layout.parts().map(part => part.id)}, layoutDiff=${context.layoutDiff.toString()}, popupDiff=${context.popupDiff.toString()}, dialogDiff=${context.dialogDiff.toString()}]`);
11678
+ this._logger.debug(() => 'onNavigationStart', LoggerNames.ROUTING, event, `NavigationContext [parts=${context.layout.parts().map(part => part.id)}, layoutDiff=${context.layoutDiff.toString()}, popupDiff=${context.popupDiff.toString()}, dialogDiff=${context.dialogDiff.toString()}, messageBoxDiff=${context.messageBoxDiff.toString()}]`);
11595
11679
  this._workbenchRouter.setCurrentNavigationContext(context);
11596
- this.registerAddedViewAuxiliaryRoutes();
11597
- this.registerAddedPopupAuxiliaryRoutes();
11598
- this.registerAddedDialogAuxiliaryRoutes();
11680
+ this.registerAddedOutletAuxiliaryRoutes();
11599
11681
  }
11600
11682
  /** Invoked upon successful navigation */
11601
11683
  onNavigationEnd(event) {
@@ -11610,18 +11692,14 @@ class WorkbenchUrlObserver {
11610
11692
  onNavigationCancel(event) {
11611
11693
  this._logger.debug(() => 'onNavigationCancel', LoggerNames.ROUTING, event);
11612
11694
  this.undoAuxiliaryRoutesRegistration();
11613
- this.undoWorkbenchLayoutDiffer();
11614
- this.undoWorkbenchPopupDiffer();
11615
- this.undoWorkbenchDialogDiffer();
11695
+ this.undoWorkbenchDiffers();
11616
11696
  this._workbenchRouter.setCurrentNavigationContext(null);
11617
11697
  }
11618
11698
  /** Invoked when the navigation failed */
11619
11699
  onNavigationError(event) {
11620
11700
  this._logger.debug(() => 'onNavigationError', LoggerNames.ROUTING, event);
11621
11701
  this.undoAuxiliaryRoutesRegistration();
11622
- this.undoWorkbenchLayoutDiffer();
11623
- this.undoWorkbenchPopupDiffer();
11624
- this.undoWorkbenchDialogDiffer();
11702
+ this.undoWorkbenchDiffers();
11625
11703
  this._workbenchRouter.setCurrentNavigationContext(null);
11626
11704
  }
11627
11705
  /** Invoked after checked guards for activation */
@@ -11637,7 +11715,7 @@ class WorkbenchUrlObserver {
11637
11715
  const layout = this._workbenchLayoutFactory.create({
11638
11716
  mainAreaGrid: (() => {
11639
11717
  // Read the main area grid from the query parameter.
11640
- const mainAreaGrid = urlTree.queryParamMap.get(MAIN_AREA_LAYOUT_QUERY_PARAM) ?? urlTree.queryParamMap.get('parts'); // TODO [Angular 18] Remove fallback to 'parts' query parameter
11718
+ const mainAreaGrid = urlTree.queryParamMap.get(MAIN_AREA_LAYOUT_QUERY_PARAM);
11641
11719
  if (mainAreaGrid) {
11642
11720
  return mainAreaGrid;
11643
11721
  }
@@ -11664,70 +11742,51 @@ class WorkbenchUrlObserver {
11664
11742
  layoutDiff: this._workbenchLayoutDiffer.diff(layout, urlTree),
11665
11743
  popupDiff: this._workbenchPopupDiffer.diff(urlTree),
11666
11744
  dialogDiff: this._workbenchDialogDiffer.diff(urlTree),
11745
+ messageBoxDiff: this._workbenchMessageBoxDiffer.diff(urlTree),
11667
11746
  };
11668
11747
  }
11669
11748
  /**
11670
- * For each added view, registers auxiliary routes of all top-level routes.
11749
+ * For each added workbench outlet, registers auxiliary routes of all top-level routes.
11671
11750
  */
11672
- registerAddedViewAuxiliaryRoutes() {
11751
+ registerAddedOutletAuxiliaryRoutes() {
11673
11752
  const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
11753
+ // Register view auxiliary routes.
11674
11754
  const addedViews = navigationContext.layoutDiff.addedViews;
11675
- const registeredRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedViews, {
11676
- canMatchNotFoundPage: [canMatchNotFoundPage],
11677
- });
11678
- if (registeredRoutes.length) {
11679
- this._logger.debug(() => `Registered auxiliary routes for views: ${addedViews}`, LoggerNames.ROUTING, registeredRoutes);
11755
+ if (addedViews.length) {
11756
+ const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedViews, { canMatchNotFoundPage: [canMatchNotFoundPage] });
11757
+ this._logger.debug(() => `Registered auxiliary routes for views: ${addedViews}`, LoggerNames.ROUTING, auxiliaryRoutes);
11680
11758
  }
11681
- }
11682
- /**
11683
- * For each added popup, registers auxiliary routes of all top-level routes.
11684
- */
11685
- registerAddedPopupAuxiliaryRoutes() {
11686
- const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
11759
+ // Register popup auxiliary routes.
11687
11760
  const addedPopupOutlets = navigationContext.popupDiff.addedPopupOutlets;
11688
- const registeredRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedPopupOutlets);
11689
- if (registeredRoutes.length) {
11690
- this._logger.debug(() => `Registered auxiliary routes for popups: ${addedPopupOutlets}`, LoggerNames.ROUTING, registeredRoutes);
11761
+ if (addedPopupOutlets.length) {
11762
+ const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedPopupOutlets);
11763
+ this._logger.debug(() => `Registered auxiliary routes for popups: ${addedPopupOutlets}`, LoggerNames.ROUTING, auxiliaryRoutes);
11691
11764
  }
11692
- }
11693
- /**
11694
- * For each added dialog, registers auxiliary routes of all top-level routes.
11695
- */
11696
- registerAddedDialogAuxiliaryRoutes() {
11697
- const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
11765
+ // Register dialog auxiliary routes.
11698
11766
  const addedDialogOutlets = navigationContext.dialogDiff.addedDialogOutlets;
11699
- const newAuxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedDialogOutlets);
11700
- if (newAuxiliaryRoutes.length) {
11701
- this._logger.debug(() => `Registered auxiliary routes for dialogs: ${addedDialogOutlets}`, LoggerNames.ROUTING, newAuxiliaryRoutes);
11767
+ if (addedDialogOutlets.length) {
11768
+ const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedDialogOutlets);
11769
+ this._logger.debug(() => `Registered auxiliary routes for dialogs: ${addedDialogOutlets}`, LoggerNames.ROUTING, auxiliaryRoutes);
11770
+ }
11771
+ // Register message box auxiliary routes.
11772
+ const addedMessageBoxOutlets = navigationContext.messageBoxDiff.addedMessageBoxOutlets;
11773
+ if (addedMessageBoxOutlets.length) {
11774
+ const auxiliaryRoutes = this._auxiliaryRoutesRegistrator.registerAuxiliaryRoutes(addedMessageBoxOutlets);
11775
+ this._logger.debug(() => `Registered auxiliary routes for message boxes: ${addedMessageBoxOutlets}`, LoggerNames.ROUTING, auxiliaryRoutes);
11702
11776
  }
11703
11777
  }
11704
11778
  /**
11705
- * Reverts the workbench layout differ to the state before the navigation.
11779
+ * Reverts the workbench differs to the state before the navigation.
11706
11780
  *
11707
11781
  * Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
11708
11782
  */
11709
- undoWorkbenchLayoutDiffer() {
11783
+ undoWorkbenchDiffers() {
11710
11784
  const prevNavigateLayout = this._workbenchLayoutService.layout; // Layout in `WorkbenchLayoutService` is only updated after successful navigation
11711
11785
  const prevNavigateUrl = this._router.parseUrl(this._router.url); // Browser URL is only updated after successful navigation
11712
11786
  this._workbenchLayoutDiffer.diff(prevNavigateLayout, prevNavigateUrl);
11713
- }
11714
- /**
11715
- * Reverts the popup outlet differ to the state before the navigation.
11716
- *
11717
- * Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
11718
- */
11719
- undoWorkbenchPopupDiffer() {
11720
- const prevNavigateUrl = this._router.parseUrl(this._router.url); // Browser URL is only updated after successful navigation
11721
11787
  this._workbenchPopupDiffer.diff(prevNavigateUrl);
11722
- }
11723
- /**
11724
- * Reverts the dialog outlet differ to the state before the navigation.
11725
- *
11726
- * Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
11727
- */
11728
- undoWorkbenchDialogDiffer() {
11729
- const prevNavigateUrl = this._router.parseUrl(this._router.url); // Browser URL is only updated after successful navigation
11730
11788
  this._workbenchDialogDiffer.diff(prevNavigateUrl);
11789
+ this._workbenchMessageBoxDiffer.diff(prevNavigateUrl);
11731
11790
  }
11732
11791
  /**
11733
11792
  * Undoes the registration of auxiliary routes.
@@ -11735,10 +11794,13 @@ class WorkbenchUrlObserver {
11735
11794
  * Invoke this method after navigation failure or cancellation. The navigation is cancelled when guards perform a redirect or reject navigation.
11736
11795
  */
11737
11796
  undoAuxiliaryRoutesRegistration() {
11738
- const layoutDiff = this._workbenchRouter.getCurrentNavigationContext().layoutDiff;
11739
- const popupDiff = this._workbenchRouter.getCurrentNavigationContext().popupDiff;
11740
- const dialogDiff = this._workbenchRouter.getCurrentNavigationContext().dialogDiff;
11741
- const addedOutlets = [...layoutDiff.addedViews, ...popupDiff.addedPopupOutlets, ...dialogDiff.addedDialogOutlets];
11797
+ const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
11798
+ const addedOutlets = [
11799
+ ...navigationContext.layoutDiff.addedViews,
11800
+ ...navigationContext.popupDiff.addedPopupOutlets,
11801
+ ...navigationContext.dialogDiff.addedDialogOutlets,
11802
+ ...navigationContext.messageBoxDiff.addedMessageBoxOutlets,
11803
+ ];
11742
11804
  if (addedOutlets.length) {
11743
11805
  this._auxiliaryRoutesRegistrator.unregisterAuxiliaryRoutes(addedOutlets);
11744
11806
  this._logger.debug(() => `Undo auxiliary routes registration for outlet(s): ${addedOutlets}`, LoggerNames.ROUTING);
@@ -11781,10 +11843,13 @@ class WorkbenchUrlObserver {
11781
11843
  * Unregisters auxiliary routes of removed workbench outlets.
11782
11844
  */
11783
11845
  unregisterRemovedOutletAuxiliaryRoutes() {
11784
- const layoutDiff = this._workbenchRouter.getCurrentNavigationContext().layoutDiff;
11785
- const popupDiff = this._workbenchRouter.getCurrentNavigationContext().popupDiff;
11786
- const dialogDiff = this._workbenchRouter.getCurrentNavigationContext().dialogDiff;
11787
- const removedOutlets = [...layoutDiff.removedViews, ...popupDiff.removedPopupOutlets, ...dialogDiff.removedDialogOutlets];
11846
+ const navigationContext = this._workbenchRouter.getCurrentNavigationContext();
11847
+ const removedOutlets = [
11848
+ ...navigationContext.layoutDiff.removedViews,
11849
+ ...navigationContext.popupDiff.removedPopupOutlets,
11850
+ ...navigationContext.dialogDiff.removedDialogOutlets,
11851
+ ...navigationContext.messageBoxDiff.removedMessageBoxOutlets,
11852
+ ];
11788
11853
  if (removedOutlets.length) {
11789
11854
  this._logger.debug(() => 'Unregistering outlet auxiliary routes: ', LoggerNames.ROUTING, removedOutlets);
11790
11855
  this._auxiliaryRoutesRegistrator.unregisterAuxiliaryRoutes(removedOutlets);
@@ -11849,13 +11914,13 @@ class WorkbenchUrlObserver {
11849
11914
  }
11850
11915
  });
11851
11916
  }
11852
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchUrlObserver, deps: [{ token: i2.Router }, { token: WorkbenchAuxiliaryRoutesRegistrator }, { token: WorkbenchViewRegistry }, { token: WorkbenchPartRegistry }, { token: WorkbenchLayoutService }, { token: i0.EnvironmentInjector }, { token: ɵWorkbenchRouter }, { token: ɵWorkbenchLayoutFactory }, { token: WorkbenchLayoutDiffer }, { token: WorkbenchPopupDiffer }, { token: WorkbenchDialogDiffer }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
11853
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchUrlObserver, providedIn: 'root' }); }
11917
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchUrlObserver, deps: [{ token: i2.Router }, { token: WorkbenchAuxiliaryRoutesRegistrator }, { token: WorkbenchViewRegistry }, { token: WorkbenchPartRegistry }, { token: WorkbenchLayoutService }, { token: i0.EnvironmentInjector }, { token: ɵWorkbenchRouter }, { token: ɵWorkbenchLayoutFactory }, { token: WorkbenchLayoutDiffer }, { token: WorkbenchPopupDiffer }, { token: WorkbenchDialogDiffer }, { token: WorkbenchMessageBoxDiffer }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
11918
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchUrlObserver, providedIn: 'root' }); }
11854
11919
  }
11855
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchUrlObserver, decorators: [{
11920
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchUrlObserver, decorators: [{
11856
11921
  type: Injectable,
11857
11922
  args: [{ providedIn: 'root' }]
11858
- }], ctorParameters: () => [{ type: i2.Router }, { type: WorkbenchAuxiliaryRoutesRegistrator }, { type: WorkbenchViewRegistry }, { type: WorkbenchPartRegistry }, { type: WorkbenchLayoutService }, { type: i0.EnvironmentInjector }, { type: ɵWorkbenchRouter }, { type: ɵWorkbenchLayoutFactory }, { type: WorkbenchLayoutDiffer }, { type: WorkbenchPopupDiffer }, { type: WorkbenchDialogDiffer }, { type: Logger }] });
11923
+ }], ctorParameters: () => [{ type: i2.Router }, { type: WorkbenchAuxiliaryRoutesRegistrator }, { type: WorkbenchViewRegistry }, { type: WorkbenchPartRegistry }, { type: WorkbenchLayoutService }, { type: i0.EnvironmentInjector }, { type: ɵWorkbenchRouter }, { type: ɵWorkbenchLayoutFactory }, { type: WorkbenchLayoutDiffer }, { type: WorkbenchPopupDiffer }, { type: WorkbenchDialogDiffer }, { type: WorkbenchMessageBoxDiffer }, { type: Logger }] });
11859
11924
 
11860
11925
  /**
11861
11926
  * Updates the workbench layout when the user moves a view.
@@ -11964,10 +12029,10 @@ class ViewMoveHandler {
11964
12029
  }));
11965
12030
  }
11966
12031
  }
11967
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMoveHandler, deps: [{ token: WORKBENCH_ID }, { token: ɵWorkbenchRouter }, { token: ɵWorkbenchLayoutFactory }, { token: ViewDragService }, { token: i2.Router }, { token: i3$1.LocationStrategy }], target: i0.ɵɵFactoryTarget.Injectable }); }
11968
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMoveHandler }); }
12032
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMoveHandler, deps: [{ token: WORKBENCH_ID }, { token: ɵWorkbenchRouter }, { token: ɵWorkbenchLayoutFactory }, { token: ViewDragService }, { token: i2.Router }, { token: i3$1.LocationStrategy }], target: i0.ɵɵFactoryTarget.Injectable }); }
12033
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMoveHandler }); }
11969
12034
  }
11970
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ViewMoveHandler, decorators: [{
12035
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMoveHandler, decorators: [{
11971
12036
  type: Injectable
11972
12037
  }], ctorParameters: () => [{ type: undefined, decorators: [{
11973
12038
  type: Inject,
@@ -11988,38 +12053,94 @@ function coerceAlignProperty(region) {
11988
12053
  }
11989
12054
  }
11990
12055
 
12056
+ /*
12057
+ * Copyright (c) 2018-2023 Swiss Federal Railways
12058
+ *
12059
+ * This program and the accompanying materials are made
12060
+ * available under the terms of the Eclipse Public License 2.0
12061
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
12062
+ *
12063
+ * SPDX-License-Identifier: EPL-2.0
12064
+ */
12065
+
11991
12066
  /**
11992
12067
  * Allows loading the configuration for the SCION Microfrontend Platform asynchronously, e.g., over the network or from a JSON file.
11993
12068
  */
11994
12069
  class MicrofrontendPlatformConfigLoader {
11995
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPlatformConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
11996
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPlatformConfigLoader }); }
12070
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPlatformConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
12071
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPlatformConfigLoader }); }
11997
12072
  }
11998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPlatformConfigLoader, decorators: [{
12073
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPlatformConfigLoader, decorators: [{
11999
12074
  type: Injectable
12000
12075
  }] });
12001
12076
 
12002
- /**
12003
- * Intercepts the host manifest, registering workbench-specific intentions and capabilities.
12077
+ /*
12078
+ * Copyright (c) 2018-2024 Swiss Federal Railways
12004
12079
  *
12005
- * @internal
12006
- */
12007
- class WorkbenchHostManifestInterceptor {
12008
- intercept(hostManifest) {
12080
+ * This program and the accompanying materials are made
12081
+ * available under the terms of the Eclipse Public License 2.0
12082
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
12083
+ *
12084
+ * SPDX-License-Identifier: EPL-2.0
12085
+ */
12086
+ /**
12087
+ * Displays the text message for the built-in message box capability.
12088
+ *
12089
+ * This component is designed to be displayed in {@link MicrofrontendHostMessageBoxComponent}.
12090
+ */
12091
+ class TextMessageComponent {
12092
+ constructor(messageBox) {
12093
+ this.message = messageBox.params.get(eMESSAGE_BOX_MESSAGE_PARAM);
12094
+ }
12095
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TextMessageComponent, deps: [{ token: i1$1.WorkbenchMessageBox }], target: i0.ɵɵFactoryTarget.Component }); }
12096
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: TextMessageComponent, isStandalone: true, selector: "wb-text-message", ngImport: i0, template: "@if (message) {\n {{message}}\n}", styles: [":host{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"] }); }
12097
+ }
12098
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TextMessageComponent, decorators: [{
12099
+ type: Component,
12100
+ args: [{ selector: 'wb-text-message', standalone: true, template: "@if (message) {\n {{message}}\n}", styles: [":host{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"] }]
12101
+ }], ctorParameters: () => [{ type: i1$1.WorkbenchMessageBox }] });
12102
+ /**
12103
+ * Route for the built-in text message box capability provided by the workbench host application.
12104
+ */
12105
+ const TEXT_MESSAGE_BOX_CAPABILITY_ROUTE = '~/messagebox';
12106
+ /**
12107
+ * Property to identify the built-in text message box capability.
12108
+ */
12109
+ const TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY_PROPERTY = 'ɵidentity';
12110
+ /**
12111
+ * Value to identify the built-in text message box capability.
12112
+ */
12113
+ const TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY = randomUUID();
12114
+
12115
+ var textMessage_component = /*#__PURE__*/Object.freeze({
12116
+ __proto__: null,
12117
+ TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY: TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY,
12118
+ TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY_PROPERTY: TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY_PROPERTY,
12119
+ TEXT_MESSAGE_BOX_CAPABILITY_ROUTE: TEXT_MESSAGE_BOX_CAPABILITY_ROUTE,
12120
+ default: TextMessageComponent
12121
+ });
12122
+
12123
+ /**
12124
+ * Intercepts the host manifest, registering workbench-specific intentions and capabilities.
12125
+ *
12126
+ * @internal
12127
+ */
12128
+ class WorkbenchHostManifestInterceptor {
12129
+ intercept(hostManifest) {
12009
12130
  hostManifest.intentions = [
12010
12131
  ...hostManifest.intentions || [],
12011
12132
  provideViewIntention(),
12012
12133
  ];
12013
12134
  hostManifest.capabilities = [
12014
12135
  ...hostManifest.capabilities || [],
12015
- provideBuiltInMessageBoxCapability(),
12016
- provideBuiltInNotificationCapability(),
12136
+ provideBuiltInTextMessageBoxCapability(),
12137
+ provideBuiltInTextNotificationCapability(),
12017
12138
  ];
12018
12139
  }
12019
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchHostManifestInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
12020
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchHostManifestInterceptor }); }
12140
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchHostManifestInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
12141
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchHostManifestInterceptor }); }
12021
12142
  }
12022
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchHostManifestInterceptor, decorators: [{
12143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchHostManifestInterceptor, decorators: [{
12023
12144
  type: Injectable
12024
12145
  }] });
12025
12146
  /**
@@ -12032,29 +12153,40 @@ function provideViewIntention() {
12032
12153
  };
12033
12154
  }
12034
12155
  /**
12035
- * Provides the built-in notification capability.
12156
+ * Provides the built-in notification capability to display text.
12036
12157
  *
12037
12158
  * @see MicrofrontendNotificationIntentHandler
12038
12159
  */
12039
- function provideBuiltInNotificationCapability() {
12160
+ function provideBuiltInTextNotificationCapability() {
12040
12161
  return {
12041
12162
  type: WorkbenchCapabilities.Notification,
12042
12163
  qualifier: {},
12043
12164
  private: false,
12044
- description: 'Allows displaying a simple notification to the user.',
12165
+ description: 'Displays a text notification to the user.',
12045
12166
  };
12046
12167
  }
12047
12168
  /**
12048
- * Provides the built-in message box capability.
12169
+ * Provides the built-in {@link WorkbenchMessageBoxCapability} to display text.
12049
12170
  *
12050
12171
  * @see MicrofrontendMessageBoxIntentHandler
12051
12172
  */
12052
- function provideBuiltInMessageBoxCapability() {
12173
+ function provideBuiltInTextMessageBoxCapability() {
12053
12174
  return {
12054
12175
  type: WorkbenchCapabilities.MessageBox,
12055
12176
  qualifier: {},
12177
+ params: [
12178
+ {
12179
+ name: eMESSAGE_BOX_MESSAGE_PARAM,
12180
+ required: false,
12181
+ description: 'Text to display to the user.',
12182
+ }
12183
+ ],
12184
+ properties: {
12185
+ path: TEXT_MESSAGE_BOX_CAPABILITY_ROUTE,
12186
+ [TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY_PROPERTY]: TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY,
12187
+ },
12056
12188
  private: false,
12057
- description: 'Allows displaying a simple message to the user.',
12189
+ description: 'Displays a text message to the user.',
12058
12190
  };
12059
12191
  }
12060
12192
 
@@ -12083,10 +12215,10 @@ class NgZoneObservableDecorator {
12083
12215
  return () => subscription.unsubscribe();
12084
12216
  });
12085
12217
  }
12086
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NgZoneObservableDecorator, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
12087
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NgZoneObservableDecorator }); }
12218
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgZoneObservableDecorator, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
12219
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgZoneObservableDecorator }); }
12088
12220
  }
12089
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: NgZoneObservableDecorator, decorators: [{
12221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgZoneObservableDecorator, decorators: [{
12090
12222
  type: Injectable
12091
12223
  }], ctorParameters: () => [{ type: i0.NgZone }] });
12092
12224
 
@@ -12315,10 +12447,10 @@ class MicrofrontendViewIntentHandler {
12315
12447
  .map(view => view.id);
12316
12448
  return viewIds.length ? viewIds : null;
12317
12449
  }
12318
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewIntentHandler, deps: [{ token: WorkbenchRouter }, { token: WorkbenchViewRegistry }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
12319
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewIntentHandler }); }
12450
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewIntentHandler, deps: [{ token: WorkbenchRouter }, { token: WorkbenchViewRegistry }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
12451
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewIntentHandler }); }
12320
12452
  }
12321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewIntentHandler, decorators: [{
12453
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewIntentHandler, decorators: [{
12322
12454
  type: Injectable
12323
12455
  }], ctorParameters: () => [{ type: WorkbenchRouter }, { type: WorkbenchViewRegistry }, { type: Logger }] });
12324
12456
 
@@ -12332,10 +12464,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
12332
12464
  * SPDX-License-Identifier: EPL-2.0
12333
12465
  */
12334
12466
  class MicrofrontendSplashComponent {
12335
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendSplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12336
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MicrofrontendSplashComponent, isStandalone: true, selector: "wb-microfrontend-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"></sci-throbber>\n", styles: [":host{display:grid;place-items:center;grid-template-rows:minmax(3em,150px);overflow:hidden}:host>sci-throbber{--sci-throbber-size: 64px}\n"], dependencies: [{ kind: "component", type: SciThrobberComponent, selector: "sci-throbber", inputs: ["type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12467
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendSplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12468
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendSplashComponent, isStandalone: true, selector: "wb-microfrontend-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"></sci-throbber>\n", styles: [":host{display:grid;place-items:center;grid-template-rows:minmax(3em,150px);overflow:hidden}:host>sci-throbber{--sci-throbber-size: 64px}\n"], dependencies: [{ kind: "component", type: SciThrobberComponent, selector: "sci-throbber", inputs: ["type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12337
12469
  }
12338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendSplashComponent, decorators: [{
12470
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendSplashComponent, decorators: [{
12339
12471
  type: Component,
12340
12472
  args: [{ selector: 'wb-microfrontend-splash', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SciThrobberComponent], template: "<sci-throbber type=\"ellipsis\"></sci-throbber>\n", styles: [":host{display:grid;place-items:center;grid-template-rows:minmax(3em,150px);overflow:hidden}:host>sci-throbber{--sci-throbber-size: 64px}\n"] }]
12341
12473
  }] });
@@ -12434,7 +12566,7 @@ class MicrofrontendPopupComponent {
12434
12566
  return;
12435
12567
  }
12436
12568
  // Listen to popup close requests.
12437
- this._messageClient.observe$(_WorkbenchCommands.popupCloseTopic(this.popupId))
12569
+ this._messageClient.observe$(_WorkbenchCommands.popupCloseTopic(this.popup.id))
12438
12570
  .pipe(takeUntilDestroyed(this._destroyRef))
12439
12571
  .subscribe(closeRequest => {
12440
12572
  if (closeRequest.headers.get(_WorkbenchPopupMessageHeaders.CLOSE_WITH_ERROR) === true) {
@@ -12451,7 +12583,7 @@ class MicrofrontendPopupComponent {
12451
12583
  // Navigate to the microfrontend.
12452
12584
  this._logger.debug(() => `Loading microfrontend into workbench popup [app=${this.popupCapability.metadata.appSymbolicName}, baseUrl=${application.baseUrl}, path=${(this.popupCapability.properties.path)}].`, LoggerNames.MICROFRONTEND, this._popupContext.params, this.popupCapability);
12453
12585
  this._outletRouter.navigate(this.popupCapability.properties.path, {
12454
- outlet: this.popupId,
12586
+ outlet: this.popup.id,
12455
12587
  relativeTo: application.baseUrl,
12456
12588
  params: this._popupContext.params,
12457
12589
  pushStateToSessionHistoryStack: false,
@@ -12474,12 +12606,6 @@ class MicrofrontendPopupComponent {
12474
12606
  lookupApplication(symbolicName) {
12475
12607
  return this._manifestService.applications.find(app => app.symbolicName === symbolicName);
12476
12608
  }
12477
- /**
12478
- * Unique identity of this popup.
12479
- */
12480
- get popupId() {
12481
- return this._popupContext.popupId;
12482
- }
12483
12609
  /**
12484
12610
  * Sets the {@link isWorkbenchDrag} property when a workbench drag operation is detected,
12485
12611
  * such as when dragging a view or moving a sash.
@@ -12495,15 +12621,15 @@ class MicrofrontendPopupComponent {
12495
12621
  runInInjectionContext(this._injector, () => Microfrontends.propagateTheme(this.routerOutletElement.nativeElement));
12496
12622
  }
12497
12623
  ngOnDestroy() {
12498
- this._outletRouter.navigate(null, { outlet: this.popupId }).then();
12624
+ this._outletRouter.navigate(null, { outlet: this.popup.id }).then();
12499
12625
  }
12500
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupComponent, deps: [{ token: Popup }, { token: i0.ElementRef }, { token: i2$3.OutletRouter }, { token: i2$3.ManifestService }, { token: i2$3.MessageClient }, { token: i0.DestroyRef }, { token: WorkbenchLayoutService }, { token: i0.Injector }, { token: Logger }], target: i0.ɵɵFactoryTarget.Component }); }
12501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MicrofrontendPopupComponent, isStandalone: true, selector: "wb-microfrontend-popup", host: { properties: { "class.workbench-drag": "this.isWorkbenchDrag" } }, viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<sci-router-outlet #router_outlet\n [name]=\"popupId\"\n [attr.data-capabilityid]=\"popupCapability.metadata!.id\"\n [attr.data-app]=\"popupCapability.metadata!.appSymbolicName\"\n [ngClass]=\"popup.cssClasses\" class=\"e2e-popup\"\n keystrokes=\"keydown.escape\"\n (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
12626
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupComponent, deps: [{ token: ɵPopup }, { token: i0.ElementRef }, { token: i2$3.OutletRouter }, { token: i2$3.ManifestService }, { token: i2$3.MessageClient }, { token: i0.DestroyRef }, { token: WorkbenchLayoutService }, { token: i0.Injector }, { token: Logger }], target: i0.ɵɵFactoryTarget.Component }); }
12627
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendPopupComponent, isStandalone: true, selector: "wb-microfrontend-popup", host: { properties: { "class.workbench-drag": "this.isWorkbenchDrag" } }, viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<sci-router-outlet #router_outlet\n [name]=\"popup.id\"\n [attr.data-capabilityid]=\"popupCapability.metadata!.id\"\n [attr.data-app]=\"popupCapability.metadata!.appSymbolicName\"\n [ngClass]=\"popup.cssClasses\" class=\"e2e-popup\"\n keystrokes=\"keydown.escape\"\n (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
12502
12628
  }
12503
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupComponent, decorators: [{
12629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupComponent, decorators: [{
12504
12630
  type: Component,
12505
- args: [{ selector: 'wb-microfrontend-popup', standalone: true, imports: [NgClass, NgComponentOutlet], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<sci-router-outlet #router_outlet\n [name]=\"popupId\"\n [attr.data-capabilityid]=\"popupCapability.metadata!.id\"\n [attr.data-app]=\"popupCapability.metadata!.appSymbolicName\"\n [ngClass]=\"popup.cssClasses\" class=\"e2e-popup\"\n keystrokes=\"keydown.escape\"\n (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"] }]
12506
- }], ctorParameters: () => [{ type: Popup }, { type: i0.ElementRef }, { type: i2$3.OutletRouter }, { type: i2$3.ManifestService }, { type: i2$3.MessageClient }, { type: i0.DestroyRef }, { type: WorkbenchLayoutService }, { type: i0.Injector }, { type: Logger }], propDecorators: { isWorkbenchDrag: [{
12631
+ args: [{ selector: 'wb-microfrontend-popup', standalone: true, imports: [NgClass, NgComponentOutlet], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<sci-router-outlet #router_outlet\n [name]=\"popup.id\"\n [attr.data-capabilityid]=\"popupCapability.metadata!.id\"\n [attr.data-app]=\"popupCapability.metadata!.appSymbolicName\"\n [ngClass]=\"popup.cssClasses\" class=\"e2e-popup\"\n keystrokes=\"keydown.escape\"\n (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"] }]
12632
+ }], ctorParameters: () => [{ type: ɵPopup }, { type: i0.ElementRef }, { type: i2$3.OutletRouter }, { type: i2$3.ManifestService }, { type: i2$3.MessageClient }, { type: i0.DestroyRef }, { type: WorkbenchLayoutService }, { type: i0.Injector }, { type: Logger }], propDecorators: { isWorkbenchDrag: [{
12507
12633
  type: HostBinding,
12508
12634
  args: ['class.workbench-drag']
12509
12635
  }], routerOutletElement: [{
@@ -12531,7 +12657,7 @@ function stringifyError(error) {
12531
12657
  }
12532
12658
 
12533
12659
  /*
12534
- * Copyright (c) 2018-2022 Swiss Federal Railways
12660
+ * Copyright (c) 2018-2024 Swiss Federal Railways
12535
12661
  *
12536
12662
  * This program and the accompanying materials are made
12537
12663
  * available under the terms of the Eclipse Public License 2.0
@@ -12549,11 +12675,12 @@ class MicrofrontendHostPopupComponent {
12549
12675
  constructor(popup, _injector, _router) {
12550
12676
  this._injector = _injector;
12551
12677
  this._router = _router;
12678
+ this._singleNavigationExecutor = inject(SINGLE_NAVIGATION_EXECUTOR);
12552
12679
  const popupContext = popup.input;
12553
12680
  const capability = popupContext.capability;
12554
12681
  const path = Defined.orElseThrow(capability.properties.path, () => Error(`[PopupProviderError] Missing required path for popup capability: ${JSON.stringify(capability)}`));
12555
12682
  const params = popupContext.params;
12556
- this.outletName = POPUP_ID_PREFIX.concat(popupContext.popupId);
12683
+ this.outletName = POPUP_ID_PREFIX.concat(popup.id);
12557
12684
  this.outletInjector = Injector.create({
12558
12685
  parent: this._injector,
12559
12686
  providers: [provideWorkbenchPopupHandle(popupContext)],
@@ -12561,7 +12688,7 @@ class MicrofrontendHostPopupComponent {
12561
12688
  // Perform navigation in the named router outlet.
12562
12689
  this.navigate(path, { outletName: this.outletName, params }).then(success => {
12563
12690
  if (!success) {
12564
- popup.closeWithError(Error('[PopupNavigateError] Navigation canceled, most likely by a route guard.'));
12691
+ popup.closeWithError(Error('[PopupNavigateError] Navigation canceled, most likely by a route guard or a parallel navigation.'));
12565
12692
  }
12566
12693
  });
12567
12694
  }
@@ -12572,21 +12699,21 @@ class MicrofrontendHostPopupComponent {
12572
12699
  path = Microfrontends.substituteNamedParameters(path, extras.params);
12573
12700
  const outletCommands = (path !== null ? runInInjectionContext(this._injector, () => RouterUtils.pathToCommands(path)) : null);
12574
12701
  const commands = [{ outlets: { [extras.outletName]: outletCommands } }];
12575
- return this._router.navigate(commands, { skipLocationChange: true, queryParamsHandling: 'preserve' });
12702
+ return this._singleNavigationExecutor.submit(() => this._router.navigate(commands, { skipLocationChange: true, queryParamsHandling: 'preserve' }));
12576
12703
  }
12577
12704
  ngOnDestroy() {
12578
12705
  this.navigate(null, { outletName: this.outletName }).then(); // Remove the outlet from the URL
12579
12706
  }
12580
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendHostPopupComponent, deps: [{ token: Popup }, { token: i0.Injector }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
12581
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MicrofrontendHostPopupComponent, isStandalone: true, selector: "wb-microfrontend-host-popup", ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"></ng-container>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"></router-outlet>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
12707
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendHostPopupComponent, deps: [{ token: ɵPopup }, { token: i0.Injector }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
12708
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendHostPopupComponent, isStandalone: true, selector: "wb-microfrontend-host-popup", ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"></ng-container>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"></router-outlet>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
12582
12709
  }
12583
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendHostPopupComponent, decorators: [{
12710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendHostPopupComponent, decorators: [{
12584
12711
  type: Component,
12585
12712
  args: [{ selector: 'wb-microfrontend-host-popup', standalone: true, imports: [
12586
12713
  RouterOutlet,
12587
12714
  NgTemplateOutlet,
12588
12715
  ], template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"></ng-container>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"></router-outlet>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"] }]
12589
- }], ctorParameters: () => [{ type: Popup }, { type: i0.Injector }, { type: i2.Router }] });
12716
+ }], ctorParameters: () => [{ type: ɵPopup }, { type: i0.Injector }, { type: i2.Router }] });
12590
12717
  /**
12591
12718
  * Provides the {WorkbenchPopup} handle to the routed component.
12592
12719
  */
@@ -12664,10 +12791,12 @@ class MicrofrontendPopupIntentHandler {
12664
12791
  this._openedPopups.add(popupId);
12665
12792
  try {
12666
12793
  const result = await this.openPopup(message);
12667
- await Beans.get(MessageClient).publish(replyTo, result, { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.TERMINAL) });
12794
+ // Use 'Beans.opt' to not error if the platform is destroyed, e.g., in tests if not closing popups.
12795
+ await Beans.opt(MessageClient)?.publish(replyTo, result, { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.TERMINAL) });
12668
12796
  }
12669
12797
  catch (error) {
12670
- await Beans.get(MessageClient).publish(replyTo, stringifyError(error), { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.ERROR) });
12798
+ // Use 'Beans.opt' to not error if the platform is destroyed, e.g., in tests if not closing popups.
12799
+ await Beans.opt(MessageClient)?.publish(replyTo, stringifyError(error), { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.ERROR) });
12671
12800
  }
12672
12801
  finally {
12673
12802
  this._openedPopups.delete(popupId);
@@ -12692,6 +12821,7 @@ class MicrofrontendPopupIntentHandler {
12692
12821
  referrer: this.getReferrer(command),
12693
12822
  };
12694
12823
  return this._popupService.open({
12824
+ id: command.popupId,
12695
12825
  component: isHostProvider ? MicrofrontendHostPopupComponent : MicrofrontendPopupComponent,
12696
12826
  input: popupContext,
12697
12827
  anchor: this.observePopupOrigin$(command),
@@ -12724,10 +12854,10 @@ class MicrofrontendPopupIntentHandler {
12724
12854
  viewCapabilityId: view.adapt(MicrofrontendWorkbenchView)?.capability.metadata.id,
12725
12855
  };
12726
12856
  }
12727
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupIntentHandler, deps: [{ token: PopupService }, { token: WorkbenchViewRegistry }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
12728
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupIntentHandler }); }
12857
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupIntentHandler, deps: [{ token: PopupService }, { token: WorkbenchViewRegistry }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
12858
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupIntentHandler }); }
12729
12859
  }
12730
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupIntentHandler, decorators: [{
12860
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupIntentHandler, decorators: [{
12731
12861
  type: Injectable
12732
12862
  }], ctorParameters: () => [{ type: PopupService }, { type: WorkbenchViewRegistry }, { type: Logger }] });
12733
12863
 
@@ -12835,15 +12965,15 @@ class MicrofrontendDialogComponent {
12835
12965
  ngOnDestroy() {
12836
12966
  this._outletRouter.navigate(null, { outlet: this.dialog.id }).then(); // Clear the outlet.
12837
12967
  }
12838
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogComponent, deps: [{ token: ɵWorkbenchDialog }, { token: i2$3.OutletRouter }, { token: i2$3.ManifestService }, { token: i2$3.MessageClient }, { token: WorkbenchLayoutService }, { token: i0.Injector }, { token: Logger }], target: i0.ɵɵFactoryTarget.Component }); }
12839
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MicrofrontendDialogComponent, isStandalone: true, selector: "wb-microfrontend-dialog", inputs: { capability: "capability", params: "params" }, host: { properties: { "class.workbench-drag": "this.isWorkbenchDrag" } }, viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<sci-router-outlet #router_outlet\n [name]=\"dialog.id\"\n [attr.data-capabilityid]=\"capability.metadata!.id\"\n [attr.data-app]=\"capability.metadata!.appSymbolicName\"\n [ngClass]=\"dialog.cssClass\" class=\"e2e-dialog\"\n keystrokes=\"keydown.escape\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
12968
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogComponent, deps: [{ token: ɵWorkbenchDialog }, { token: i2$3.OutletRouter }, { token: i2$3.ManifestService }, { token: i2$3.MessageClient }, { token: WorkbenchLayoutService }, { token: i0.Injector }, { token: Logger }], target: i0.ɵɵFactoryTarget.Component }); }
12969
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendDialogComponent, isStandalone: true, selector: "wb-microfrontend-dialog", inputs: { capability: "capability", params: "params" }, host: { properties: { "class.workbench-drag": "this.isWorkbenchDrag" } }, viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<sci-router-outlet #router_outlet\n [name]=\"dialog.id\"\n [attr.data-capabilityid]=\"capability.metadata!.id\"\n [attr.data-app]=\"capability.metadata!.appSymbolicName\"\n keystrokes=\"keydown.escape\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
12840
12970
  }
12841
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogComponent, decorators: [{
12971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogComponent, decorators: [{
12842
12972
  type: Component,
12843
12973
  args: [{ selector: 'wb-microfrontend-dialog', standalone: true, imports: [
12844
12974
  NgClass,
12845
12975
  NgComponentOutlet,
12846
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<sci-router-outlet #router_outlet\n [name]=\"dialog.id\"\n [attr.data-capabilityid]=\"capability.metadata!.id\"\n [attr.data-app]=\"capability.metadata!.appSymbolicName\"\n [ngClass]=\"dialog.cssClass\" class=\"e2e-dialog\"\n keystrokes=\"keydown.escape\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"] }]
12976
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<sci-router-outlet #router_outlet\n [name]=\"dialog.id\"\n [attr.data-capabilityid]=\"capability.metadata!.id\"\n [attr.data-app]=\"capability.metadata!.appSymbolicName\"\n keystrokes=\"keydown.escape\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"] }]
12847
12977
  }], ctorParameters: () => [{ type: ɵWorkbenchDialog }, { type: i2$3.OutletRouter }, { type: i2$3.ManifestService }, { type: i2$3.MessageClient }, { type: WorkbenchLayoutService }, { type: i0.Injector }, { type: Logger }], propDecorators: { capability: [{
12848
12978
  type: Input,
12849
12979
  args: [{ required: true }]
@@ -12880,6 +13010,7 @@ class MicrofrontendHostDialogComponent {
12880
13010
  this._dialog = _dialog;
12881
13011
  this._injector = _injector;
12882
13012
  this._router = _router;
13013
+ this._singleNavigationExecutor = inject(SINGLE_NAVIGATION_EXECUTOR);
12883
13014
  this.outletName = DIALOG_ID_PREFIX.concat(this._dialog.id);
12884
13015
  }
12885
13016
  ngOnInit() {
@@ -12887,7 +13018,7 @@ class MicrofrontendHostDialogComponent {
12887
13018
  this.createOutletInjector();
12888
13019
  this.navigate(this.capability.properties.path, { params: this.params }).then(success => {
12889
13020
  if (!success) {
12890
- this._dialog.close(Error('[DialogNavigateError] Navigation canceled, most likely by a route guard.'));
13021
+ this._dialog.close(Error('[DialogNavigateError] Navigation canceled, most likely by a route guard or a parallel navigation.'));
12891
13022
  }
12892
13023
  });
12893
13024
  }
@@ -12898,7 +13029,7 @@ class MicrofrontendHostDialogComponent {
12898
13029
  path = Microfrontends.substituteNamedParameters(path, extras?.params);
12899
13030
  const outletCommands = (path !== null ? runInInjectionContext(this._injector, () => RouterUtils.pathToCommands(path)) : null);
12900
13031
  const commands = [{ outlets: { [this.outletName]: outletCommands } }];
12901
- return this._router.navigate(commands, { skipLocationChange: true, queryParamsHandling: 'preserve' });
13032
+ return this._singleNavigationExecutor.submit(() => this._router.navigate(commands, { skipLocationChange: true, queryParamsHandling: 'preserve' }));
12902
13033
  }
12903
13034
  createOutletInjector() {
12904
13035
  this.outletInjector = Injector.create({
@@ -12924,15 +13055,15 @@ class MicrofrontendHostDialogComponent {
12924
13055
  ngOnDestroy() {
12925
13056
  this.navigate(null).then(); // Remove the outlet from the URL
12926
13057
  }
12927
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendHostDialogComponent, deps: [{ token: ɵWorkbenchDialog }, { token: i0.Injector }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
12928
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MicrofrontendHostDialogComponent, isStandalone: true, selector: "wb-microfrontend-host-dialog", inputs: { capability: "capability", params: "params" }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"></ng-container>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"></router-outlet>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
13058
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendHostDialogComponent, deps: [{ token: ɵWorkbenchDialog }, { token: i0.Injector }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
13059
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendHostDialogComponent, isStandalone: true, selector: "wb-microfrontend-host-dialog", inputs: { capability: "capability", params: "params" }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
12929
13060
  }
12930
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendHostDialogComponent, decorators: [{
13061
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendHostDialogComponent, decorators: [{
12931
13062
  type: Component,
12932
13063
  args: [{ selector: 'wb-microfrontend-host-dialog', standalone: true, imports: [
12933
13064
  RouterOutlet,
12934
13065
  NgTemplateOutlet,
12935
- ], template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"></ng-container>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"></router-outlet>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"] }]
13066
+ ], template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"] }]
12936
13067
  }], ctorParameters: () => [{ type: ɵWorkbenchDialog }, { type: i0.Injector }, { type: i2.Router }], propDecorators: { capability: [{
12937
13068
  type: Input,
12938
13069
  args: [{ required: true }]
@@ -13008,38 +13139,349 @@ class MicrofrontendDialogIntentHandler {
13008
13139
  const replyTo = message.headers.get(MessageHeaders.ReplyTo);
13009
13140
  try {
13010
13141
  const result = await this.openDialog(message);
13011
- await Beans.get(MessageClient).publish(replyTo, result, { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.TERMINAL) });
13142
+ // Use 'Beans.opt' to not error if the platform is destroyed, e.g., in tests if not closing dialogs.
13143
+ await Beans.opt(MessageClient)?.publish(replyTo, result, { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.TERMINAL) });
13012
13144
  }
13013
13145
  catch (error) {
13014
- await Beans.get(MessageClient).publish(replyTo, stringifyError(error), { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.ERROR) });
13146
+ // Use 'Beans.opt' to not error if the platform is destroyed, e.g., in tests if not closing dialogs.
13147
+ await Beans.opt(MessageClient)?.publish(replyTo, stringifyError(error), { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.ERROR) });
13015
13148
  }
13016
13149
  }
13017
13150
  /**
13018
13151
  * Opens the microfrontend declared by the resolved capability in a dialog.
13019
13152
  */
13020
13153
  async openDialog(message) {
13021
- const options = message.body;
13154
+ const options = message.body ?? {};
13022
13155
  const capability = message.capability;
13156
+ const params = message.intent.params ?? new Map();
13023
13157
  const isHostProvider = capability.metadata.appSymbolicName === Beans.get(APP_IDENTITY);
13024
13158
  this._logger.debug(() => 'Handling microfrontend dialog intent', LoggerNames.MICROFRONTEND, options);
13025
13159
  return this._dialogService.open(isHostProvider ? MicrofrontendHostDialogComponent : MicrofrontendDialogComponent, {
13026
- inputs: {
13027
- capability,
13028
- params: message.intent.params ?? new Map(),
13029
- },
13160
+ inputs: { capability, params },
13030
13161
  modality: options.modality,
13031
13162
  context: options.context,
13032
13163
  animate: options.animate,
13033
13164
  cssClass: Arrays.coerce(capability.properties?.cssClass).concat(Arrays.coerce(options.cssClass)),
13034
13165
  });
13035
13166
  }
13036
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogIntentHandler, deps: [{ token: WorkbenchDialogService }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13037
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogIntentHandler }); }
13167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogIntentHandler, deps: [{ token: WorkbenchDialogService }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13168
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogIntentHandler }); }
13038
13169
  }
13039
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogIntentHandler, decorators: [{
13170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogIntentHandler, decorators: [{
13040
13171
  type: Injectable
13041
13172
  }], ctorParameters: () => [{ type: WorkbenchDialogService }, { type: Logger }] });
13042
13173
 
13174
+ /*
13175
+ * Copyright (c) 2018-2024 Swiss Federal Railways
13176
+ *
13177
+ * This program and the accompanying materials are made
13178
+ * available under the terms of the Eclipse Public License 2.0
13179
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
13180
+ *
13181
+ * SPDX-License-Identifier: EPL-2.0
13182
+ */
13183
+ /**
13184
+ * Navigates to the microfrontend of a given {@link WorkbenchMessageBoxCapability} via {@link Router}.
13185
+ *
13186
+ * Unlike {@link MicrofrontendMessageBoxComponent}, this component uses a `<router-outlet>` instead of a `<sci-router-outlet>`
13187
+ * to allow direct integration of the content provided by the workbench host application via the Angular router.
13188
+ *
13189
+ * This component is designed to be displayed in a workbench message box.
13190
+ */
13191
+ class MicrofrontendHostMessageBoxComponent {
13192
+ constructor(_host, _dialog, _injector, _router) {
13193
+ this._host = _host;
13194
+ this._dialog = _dialog;
13195
+ this._injector = _injector;
13196
+ this._router = _router;
13197
+ this._singleNavigationExecutor = inject(SINGLE_NAVIGATION_EXECUTOR);
13198
+ this.outletName = MESSAGE_BOX_ID_PREFIX.concat(UUID.randomUUID());
13199
+ }
13200
+ ngOnInit() {
13201
+ this.setSizeProperties();
13202
+ this.createOutletInjector();
13203
+ this.navigate(this.capability.properties.path, { params: this.params }).then(success => {
13204
+ if (!success) {
13205
+ this._dialog.close(Error('[MessageBoxNavigateError] Navigation canceled, most likely by a route guard or a parallel navigation.'));
13206
+ }
13207
+ });
13208
+ }
13209
+ /**
13210
+ * Performs navigation in the named outlet, substituting path params if any. To clear navigation, pass `null` as the path.
13211
+ */
13212
+ navigate(path, extras) {
13213
+ path = Microfrontends.substituteNamedParameters(path, extras?.params);
13214
+ const outletCommands = (path !== null ? runInInjectionContext(this._injector, () => RouterUtils.pathToCommands(path)) : null);
13215
+ const commands = [{ outlets: { [this.outletName]: outletCommands } }];
13216
+ return this._singleNavigationExecutor.submit(() => this._router.navigate(commands, { skipLocationChange: true, queryParamsHandling: 'preserve' }));
13217
+ }
13218
+ createOutletInjector() {
13219
+ this.outletInjector = Injector.create({
13220
+ parent: this._injector,
13221
+ providers: [provideWorkbenchClientMessageBoxHandle(this.capability, this.params)],
13222
+ });
13223
+ }
13224
+ setSizeProperties() {
13225
+ setStyle(this._host, {
13226
+ 'width': this.capability.properties.size?.width ?? null,
13227
+ 'min-width': this.capability.properties.size?.minWidth ?? null,
13228
+ 'max-width': this.capability.properties.size?.maxWidth ?? null,
13229
+ 'height': this.capability.properties.size?.height ?? null,
13230
+ 'min-height': this.capability.properties.size?.minHeight ?? null,
13231
+ 'max-height': this.capability.properties.size?.maxHeight ?? null,
13232
+ });
13233
+ }
13234
+ ngOnDestroy() {
13235
+ this.navigate(null).then(); // Remove the outlet from the URL
13236
+ }
13237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendHostMessageBoxComponent, deps: [{ token: i0.ElementRef }, { token: ɵWorkbenchDialog }, { token: i0.Injector }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
13238
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendHostMessageBoxComponent, isStandalone: true, selector: "wb-microfrontend-host-message-box", inputs: { capability: "capability", params: "params" }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
13239
+ }
13240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendHostMessageBoxComponent, decorators: [{
13241
+ type: Component,
13242
+ args: [{ selector: 'wb-microfrontend-host-message-box', standalone: true, imports: [
13243
+ RouterOutlet,
13244
+ NgTemplateOutlet,
13245
+ ], template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"outletName\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"] }]
13246
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: ɵWorkbenchDialog }, { type: i0.Injector }, { type: i2.Router }], propDecorators: { capability: [{
13247
+ type: Input,
13248
+ args: [{ required: true }]
13249
+ }], params: [{
13250
+ type: Input,
13251
+ args: [{ required: true }]
13252
+ }] } });
13253
+ /**
13254
+ * Provides the {WorkbenchMessageBox} handle to the routed component.
13255
+ */
13256
+ function provideWorkbenchClientMessageBoxHandle(capability, params) {
13257
+ return {
13258
+ provide: WorkbenchMessageBox,
13259
+ useFactory: () => {
13260
+ return new class {
13261
+ constructor() {
13262
+ this.capability = capability;
13263
+ this.params = params;
13264
+ }
13265
+ signalReady() {
13266
+ // nothing to do since not an iframe-based microfrontend
13267
+ }
13268
+ };
13269
+ },
13270
+ };
13271
+ }
13272
+
13273
+ /*
13274
+ * Copyright (c) 2018-2024 Swiss Federal Railways
13275
+ *
13276
+ * This program and the accompanying materials are made
13277
+ * available under the terms of the Eclipse Public License 2.0
13278
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
13279
+ *
13280
+ * SPDX-License-Identifier: EPL-2.0
13281
+ */
13282
+ /**
13283
+ * Displays the microfrontend of a given {@link WorkbenchMessageBoxCapability}.
13284
+ *
13285
+ * This component is designed to be displayed in a workbench message box.
13286
+ */
13287
+ class MicrofrontendMessageBoxComponent {
13288
+ constructor(_outletRouter, _manifestService, _workbenchLayoutService, _injector, _logger) {
13289
+ this._outletRouter = _outletRouter;
13290
+ this._manifestService = _manifestService;
13291
+ this._workbenchLayoutService = _workbenchLayoutService;
13292
+ this._injector = _injector;
13293
+ this._logger = _logger;
13294
+ this.outletName = UUID.randomUUID();
13295
+ /**
13296
+ * Indicates if a workbench drag operation is in progress, such as when dragging a view or moving a sash.
13297
+ */
13298
+ this.isWorkbenchDrag = false;
13299
+ this._logger.debug(() => 'Constructing MicrofrontendMessageBoxComponent.', LoggerNames.MICROFRONTEND);
13300
+ this.splash = inject(MicrofrontendPlatformConfig).splash ?? MicrofrontendSplashComponent;
13301
+ this.installWorkbenchDragDetector();
13302
+ }
13303
+ ngOnInit() {
13304
+ this.setSizeProperties();
13305
+ this.propagateMessageBoxContext();
13306
+ this.propagateWorkbenchTheme();
13307
+ this.navigate();
13308
+ }
13309
+ navigate() {
13310
+ const application = this._manifestService.applications.find(app => app.symbolicName === this.capability.metadata.appSymbolicName);
13311
+ this._logger.debug(() => `Loading microfrontend into workbench message box [app=${this.capability.metadata.appSymbolicName}, baseUrl=${application.baseUrl}, path=${this.capability.properties.path}].`, LoggerNames.MICROFRONTEND, this.params, this.capability);
13312
+ this._outletRouter.navigate(this.capability.properties.path, {
13313
+ outlet: this.outletName,
13314
+ relativeTo: application.baseUrl,
13315
+ params: this.params,
13316
+ pushStateToSessionHistoryStack: false,
13317
+ showSplash: this.capability.properties.showSplash,
13318
+ }).then();
13319
+ }
13320
+ /**
13321
+ * Make the message box context available to embedded content.
13322
+ */
13323
+ propagateMessageBoxContext() {
13324
+ const context = {
13325
+ capability: this.capability,
13326
+ params: this.params,
13327
+ };
13328
+ this.routerOutletElement.nativeElement.setContextValue(_MESSAGE_BOX_CONTEXT, context);
13329
+ }
13330
+ setSizeProperties() {
13331
+ setStyle(this.routerOutletElement, {
13332
+ 'width': this.capability.properties.size?.width ?? '0', // allow content size to go bellow the default iframe size when reporting preferred size
13333
+ 'min-width': this.capability.properties.size?.minWidth ?? null,
13334
+ 'max-width': this.capability.properties.size?.maxWidth ?? null,
13335
+ 'height': this.capability.properties.size?.height ?? '0', // allow content size to go bellow the default iframe size when reporting preferred size
13336
+ 'min-height': this.capability.properties.size?.minHeight ?? null,
13337
+ 'max-height': this.capability.properties.size?.maxHeight ?? null,
13338
+ });
13339
+ }
13340
+ propagateWorkbenchTheme() {
13341
+ runInInjectionContext(this._injector, () => Microfrontends.propagateTheme(this.routerOutletElement.nativeElement));
13342
+ }
13343
+ /**
13344
+ * Sets the {@link isWorkbenchDrag} property when a workbench drag operation is detected,
13345
+ * such as when dragging a view or moving a sash.
13346
+ */
13347
+ installWorkbenchDragDetector() {
13348
+ this._workbenchLayoutService.dragging$
13349
+ .pipe(takeUntilDestroyed())
13350
+ .subscribe(event => {
13351
+ this.isWorkbenchDrag = (event === 'start');
13352
+ });
13353
+ }
13354
+ ngOnDestroy() {
13355
+ this._outletRouter.navigate(null, { outlet: this.outletName }).then(); // Clear the outlet.
13356
+ }
13357
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxComponent, deps: [{ token: i2$3.OutletRouter }, { token: i2$3.ManifestService }, { token: WorkbenchLayoutService }, { token: i0.Injector }, { token: Logger }], target: i0.ɵɵFactoryTarget.Component }); }
13358
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendMessageBoxComponent, isStandalone: true, selector: "wb-microfrontend-message-box", inputs: { capability: "capability", params: "params" }, host: { properties: { "class.workbench-drag": "this.isWorkbenchDrag" } }, viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<sci-router-outlet #router_outlet\n [name]=\"outletName\"\n [attr.data-capabilityid]=\"capability.metadata!.id\"\n [attr.data-app]=\"capability.metadata!.appSymbolicName\"\n keystrokes=\"keydown.escape\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
13359
+ }
13360
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxComponent, decorators: [{
13361
+ type: Component,
13362
+ args: [{ selector: 'wb-microfrontend-message-box', standalone: true, imports: [
13363
+ NgClass,
13364
+ NgComponentOutlet,
13365
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<sci-router-outlet #router_outlet\n [name]=\"outletName\"\n [attr.data-capabilityid]=\"capability.metadata!.id\"\n [attr.data-app]=\"capability.metadata!.appSymbolicName\"\n keystrokes=\"keydown.escape\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n</sci-router-outlet>\n", styles: [":host{display:grid}:host.workbench-drag>sci-router-outlet{pointer-events:none}:host>sci-router-outlet::part(splash){display:grid}\n"] }]
13366
+ }], ctorParameters: () => [{ type: i2$3.OutletRouter }, { type: i2$3.ManifestService }, { type: WorkbenchLayoutService }, { type: i0.Injector }, { type: Logger }], propDecorators: { capability: [{
13367
+ type: Input,
13368
+ args: [{ required: true }]
13369
+ }], params: [{
13370
+ type: Input,
13371
+ args: [{ required: true }]
13372
+ }], isWorkbenchDrag: [{
13373
+ type: HostBinding,
13374
+ args: ['class.workbench-drag']
13375
+ }], routerOutletElement: [{
13376
+ type: ViewChild,
13377
+ args: ['router_outlet', { static: true }]
13378
+ }] } });
13379
+
13380
+ /*
13381
+ * Copyright (c) 2018-2024 Swiss Federal Railways
13382
+ *
13383
+ * This program and the accompanying materials are made
13384
+ * available under the terms of the Eclipse Public License 2.0
13385
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
13386
+ *
13387
+ * SPDX-License-Identifier: EPL-2.0
13388
+ */
13389
+ /**
13390
+ * Handles messagebox intents, instructing the workbench to open a message box with the microfrontend declared on the resolved capability.
13391
+ *
13392
+ * Microfrontends of the host are displayed in {@link MicrofrontendHostMessageBoxComponent}, microfrontends of other applications in {@link MicrofrontendMessageBoxComponent}.
13393
+ *
13394
+ * Message box intents are handled in this interceptor and are not transported to the providing application, enabling support for applications
13395
+ * that are not connected to the SCION Workbench.
13396
+ */
13397
+ class MicrofrontendMessageBoxIntentHandler {
13398
+ constructor(_messageBoxService, _logger) {
13399
+ this._messageBoxService = _messageBoxService;
13400
+ this._logger = _logger;
13401
+ }
13402
+ /**
13403
+ * Message box intents are handled in this interceptor and then swallowed.
13404
+ */
13405
+ intercept(intentMessage, next) {
13406
+ if (intentMessage.intent.type === WorkbenchCapabilities.MessageBox) {
13407
+ // Do not block the call until the message box is closed.
13408
+ // Otherwise, the caller may receive a timeout error if not closing the message box before delivery confirmation expires.
13409
+ this.consumeMessageBoxIntent(intentMessage).catch(error => this._logger.error('[MessageBoxOpenError] Failed to open message box.', LoggerNames.MICROFRONTEND, intentMessage, error));
13410
+ // Swallow the intent and do not pass it to other interceptors or handlers down the chain.
13411
+ return Promise.resolve();
13412
+ }
13413
+ else {
13414
+ return next.handle(intentMessage);
13415
+ }
13416
+ }
13417
+ async consumeMessageBoxIntent(message) {
13418
+ const replyTo = message.headers.get(MessageHeaders.ReplyTo);
13419
+ try {
13420
+ const result = await this.openMessageBox(message);
13421
+ // Use 'Beans.opt' to not error if the platform is destroyed, e.g., in tests if not closing message boxes.
13422
+ await Beans.opt(MessageClient)?.publish(replyTo, result, { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.TERMINAL) });
13423
+ }
13424
+ catch (error) {
13425
+ // Use 'Beans.opt' to not error if the platform is destroyed, e.g., in tests if not closing message boxes.
13426
+ await Beans.opt(MessageClient)?.publish(replyTo, stringifyError(error), { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.ERROR) });
13427
+ }
13428
+ }
13429
+ /**
13430
+ * Opens the microfrontend declared by the resolved capability in a message box.
13431
+ */
13432
+ async openMessageBox(message) {
13433
+ const options = message.body ?? {};
13434
+ const capability = message.capability;
13435
+ const params = message.intent.params ?? new Map();
13436
+ const isHostProvider = capability.metadata.appSymbolicName === Beans.get(APP_IDENTITY);
13437
+ this._logger.debug(() => 'Handling microfrontend messagebox intent', LoggerNames.MICROFRONTEND, options);
13438
+ return this._messageBoxService.open(isHostProvider ? MicrofrontendHostMessageBoxComponent : MicrofrontendMessageBoxComponent, {
13439
+ inputs: { capability, params },
13440
+ title: options.title,
13441
+ actions: options.actions,
13442
+ severity: options.severity,
13443
+ modality: options.modality,
13444
+ contentSelectable: options.contentSelectable,
13445
+ cssClass: Arrays.coerce(capability.properties?.cssClass).concat(Arrays.coerce(options.cssClass)),
13446
+ context: options.context,
13447
+ });
13448
+ }
13449
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, deps: [{ token: WorkbenchMessageBoxService }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13450
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler }); }
13451
+ }
13452
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, decorators: [{
13453
+ type: Injectable
13454
+ }], ctorParameters: () => [{ type: WorkbenchMessageBoxService }, { type: Logger }] });
13455
+
13456
+ /**
13457
+ * @deprecated since workbench version 17.0.0-beta.9; provides backward compatibility for {@link WorkbenchMessageBoxLegacyOptions}; interceptor will be removed in a future release.
13458
+ */
13459
+ class MicrofrontendMessageBoxLegacyIntentTranslator {
13460
+ intercept(intentMessage, next) {
13461
+ if (intentMessage.intent.type === WorkbenchCapabilities.MessageBox && !Object.keys(intentMessage.capability.qualifier ?? {}).length && hasLegacyContent(intentMessage)) {
13462
+ const params = (intentMessage.intent.params ?? new Map());
13463
+ // Move legacy 'content' to the new 'message' param.
13464
+ intentMessage.intent.params = params.set(eMESSAGE_BOX_MESSAGE_PARAM, intentMessage.body.content);
13465
+ return next.handle(intentMessage);
13466
+ }
13467
+ else {
13468
+ return next.handle(intentMessage);
13469
+ }
13470
+ }
13471
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxLegacyIntentTranslator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13472
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxLegacyIntentTranslator }); }
13473
+ }
13474
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxLegacyIntentTranslator, decorators: [{
13475
+ type: Injectable
13476
+ }] });
13477
+ /**
13478
+ * Tests if the intent contains `content` in the body instead of the `message` param,
13479
+ * sent by workbench clients older than version v1.0.0-beta.23.
13480
+ */
13481
+ function hasLegacyContent(intentMessage) {
13482
+ return !intentMessage.intent.params?.get(eMESSAGE_BOX_MESSAGE_PARAM) && intentMessage.body?.content;
13483
+ }
13484
+
13043
13485
  /**
13044
13486
  * Asserts view capabilities to have required properties and assigns each view capability a stable identifer required for persistent navigation.
13045
13487
  */
@@ -13060,10 +13502,10 @@ class MicrofrontendViewCapabilityValidator {
13060
13502
  }
13061
13503
  return capability;
13062
13504
  }
13063
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13064
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCapabilityValidator }); }
13505
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13506
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator }); }
13065
13507
  }
13066
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCapabilityValidator, decorators: [{
13508
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, decorators: [{
13067
13509
  type: Injectable
13068
13510
  }] });
13069
13511
 
@@ -13081,10 +13523,10 @@ class MicrofrontendViewCapabilityIdAssigner {
13081
13523
  metadata: { ...capability.metadata, id: stableIdentifier },
13082
13524
  };
13083
13525
  }
13084
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCapabilityIdAssigner, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13085
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCapabilityIdAssigner }); }
13526
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityIdAssigner, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13527
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityIdAssigner }); }
13086
13528
  }
13087
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCapabilityIdAssigner, decorators: [{
13529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityIdAssigner, decorators: [{
13088
13530
  type: Injectable
13089
13531
  }] });
13090
13532
  /**
@@ -13124,10 +13566,10 @@ class MicrofrontendPopupCapabilityValidator {
13124
13566
  }
13125
13567
  return popupCapability;
13126
13568
  }
13127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13128
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupCapabilityValidator }); }
13569
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13570
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupCapabilityValidator }); }
13129
13571
  }
13130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, decorators: [{
13572
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, decorators: [{
13131
13573
  type: Injectable
13132
13574
  }] });
13133
13575
 
@@ -13172,13 +13614,43 @@ class MicrofrontendDialogCapabilityValidator {
13172
13614
  throw Error(`[NullSizeError] Dialog capability requires width and height in its size properties [capability=${JSON.stringify(capability)}]`);
13173
13615
  }
13174
13616
  }
13175
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13176
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogCapabilityValidator }); }
13617
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13618
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogCapabilityValidator }); }
13177
13619
  }
13178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, decorators: [{
13620
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, decorators: [{
13179
13621
  type: Injectable
13180
13622
  }] });
13181
13623
 
13624
+ /**
13625
+ * Asserts message box capabilities to have required properties.
13626
+ */
13627
+ class MicrofrontendMessageBoxCapabilityValidator {
13628
+ async intercept(capability) {
13629
+ if (capability.type !== WorkbenchCapabilities.MessageBox) {
13630
+ return capability;
13631
+ }
13632
+ const messageBoxCapability = capability;
13633
+ // Assert capability to have a path.
13634
+ const path = messageBoxCapability.properties?.path;
13635
+ if (path === undefined || path === null) {
13636
+ throw Error(`[NullPathError] MessageBox capability requires a path to the microfrontend in its properties [capability=${JSON.stringify(messageBoxCapability)}]`);
13637
+ }
13638
+ // Assert capability other than the built-in text messsage box capability to have a qualifier.
13639
+ if (!isBuiltInTextMessageBoxCapability(messageBoxCapability) && !Object.keys(messageBoxCapability.qualifier ?? {}).length) {
13640
+ throw Error(`[NullQualifierError] MessageBox capability requires a qualifier [capability=${JSON.stringify(messageBoxCapability)}]`);
13641
+ }
13642
+ return messageBoxCapability;
13643
+ }
13644
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13645
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator }); }
13646
+ }
13647
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator, decorators: [{
13648
+ type: Injectable
13649
+ }] });
13650
+ function isBuiltInTextMessageBoxCapability(capability) {
13651
+ return capability.properties[TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY_PROPERTY] === TEXT_MESSAGE_BOX_CAPABILITY_IDENTITY;
13652
+ }
13653
+
13182
13654
  /*
13183
13655
  * Copyright (c) 2018-2024 Swiss Federal Railways
13184
13656
  *
@@ -13192,17 +13664,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
13192
13664
  * Initializes and starts the SCION Microfrontend Platform in host mode.
13193
13665
  */
13194
13666
  class MicrofrontendPlatformInitializer {
13195
- constructor(_microfrontendPlatformConfigLoader, _hostManifestInterceptor, _ngZoneObservableDecorator, _viewIntentHandler, _popupIntentHandler, _dialogIntentHandler, _viewCapabilityValidator, _viewCapabilityIdAssigner, _popupCapabilityValidator, _dialogCapabilityValidator, _injector, _zone, _logger) {
13667
+ constructor(_microfrontendPlatformConfigLoader, _hostManifestInterceptor, _ngZoneObservableDecorator, _viewIntentHandler, _popupIntentHandler, _dialogIntentHandler, _messageBoxIntentHandler, _messageBoxLegacyIntentTranslator, _viewCapabilityValidator, _viewCapabilityIdAssigner, _popupCapabilityValidator, _dialogCapabilityValidator, _messageBoxCapabilityValidator, _injector, _zone, _logger) {
13196
13668
  this._microfrontendPlatformConfigLoader = _microfrontendPlatformConfigLoader;
13197
13669
  this._hostManifestInterceptor = _hostManifestInterceptor;
13198
13670
  this._ngZoneObservableDecorator = _ngZoneObservableDecorator;
13199
13671
  this._viewIntentHandler = _viewIntentHandler;
13200
13672
  this._popupIntentHandler = _popupIntentHandler;
13201
13673
  this._dialogIntentHandler = _dialogIntentHandler;
13674
+ this._messageBoxIntentHandler = _messageBoxIntentHandler;
13675
+ this._messageBoxLegacyIntentTranslator = _messageBoxLegacyIntentTranslator;
13202
13676
  this._viewCapabilityValidator = _viewCapabilityValidator;
13203
13677
  this._viewCapabilityIdAssigner = _viewCapabilityIdAssigner;
13204
13678
  this._popupCapabilityValidator = _popupCapabilityValidator;
13205
13679
  this._dialogCapabilityValidator = _dialogCapabilityValidator;
13680
+ this._messageBoxCapabilityValidator = _messageBoxCapabilityValidator;
13206
13681
  this._injector = _injector;
13207
13682
  this._zone = _zone;
13208
13683
  this._logger = _logger;
@@ -13224,7 +13699,8 @@ class MicrofrontendPlatformInitializer {
13224
13699
  // Register beans of @scion/workbench-client.
13225
13700
  Beans.register(WorkbenchRouter$1);
13226
13701
  Beans.register(WorkbenchPopupService);
13227
- Beans.register(WorkbenchMessageBoxService$1);
13702
+ Beans.register(WorkbenchMessageBoxService$1, { useClass: _WorkbenchMessageBoxService });
13703
+ Beans.register(WorkbenchDialogService$1, { useClass: _WorkbenchDialogService });
13228
13704
  Beans.register(WorkbenchNotificationService);
13229
13705
  // Register host manifest interceptor for the workbench to register workbench-specific intentions and capabilities.
13230
13706
  Beans.register(HostManifestInterceptor, { useValue: this._hostManifestInterceptor, multi: true });
@@ -13236,6 +13712,10 @@ class MicrofrontendPlatformInitializer {
13236
13712
  Beans.register(IntentInterceptor, { useValue: this._popupIntentHandler, multi: true });
13237
13713
  // Register dialog intent interceptor to open the corresponding dialog.
13238
13714
  Beans.register(IntentInterceptor, { useValue: this._dialogIntentHandler, multi: true });
13715
+ // Register message box intent interceptor to provide backward compatibility for workbench clients older than version v1.0.0-beta.23.
13716
+ Beans.register(IntentInterceptor, { useValue: this._messageBoxLegacyIntentTranslator, multi: true });
13717
+ // Register message box intent interceptor to open the corresponding message box.
13718
+ Beans.register(IntentInterceptor, { useValue: this._messageBoxIntentHandler, multi: true });
13239
13719
  // Register view capability interceptor to assert required view capability properties.
13240
13720
  Beans.register(CapabilityInterceptor, { useValue: this._viewCapabilityValidator, multi: true });
13241
13721
  // Register view capability interceptor to assign view capabilities a stable identifier required for persistent navigation.
@@ -13244,6 +13724,8 @@ class MicrofrontendPlatformInitializer {
13244
13724
  Beans.register(CapabilityInterceptor, { useValue: this._popupCapabilityValidator, multi: true });
13245
13725
  // Register dialog capability interceptor to assert required dialog capability properties.
13246
13726
  Beans.register(CapabilityInterceptor, { useValue: this._dialogCapabilityValidator, multi: true });
13727
+ // Register message box capability interceptor to assert required capability properties.
13728
+ Beans.register(CapabilityInterceptor, { useValue: this._messageBoxCapabilityValidator, multi: true });
13247
13729
  // Inject services registered under {MICROFRONTEND_PLATFORM_POST_STARTUP} DI token;
13248
13730
  // must be done in runlevel 2, i.e., before activator microfrontends are installed.
13249
13731
  Beans.registerInitializer({
@@ -13259,13 +13741,13 @@ class MicrofrontendPlatformInitializer {
13259
13741
  ngOnDestroy() {
13260
13742
  MicrofrontendPlatform.destroy().then();
13261
13743
  }
13262
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPlatformInitializer, deps: [{ token: MicrofrontendPlatformConfigLoader }, { token: WorkbenchHostManifestInterceptor }, { token: NgZoneObservableDecorator }, { token: MicrofrontendViewIntentHandler }, { token: MicrofrontendPopupIntentHandler }, { token: MicrofrontendDialogIntentHandler }, { token: MicrofrontendViewCapabilityValidator }, { token: MicrofrontendViewCapabilityIdAssigner }, { token: MicrofrontendPopupCapabilityValidator }, { token: MicrofrontendDialogCapabilityValidator }, { token: i0.Injector }, { token: i0.NgZone }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13263
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPlatformInitializer, providedIn: 'root' }); }
13744
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPlatformInitializer, deps: [{ token: MicrofrontendPlatformConfigLoader }, { token: WorkbenchHostManifestInterceptor }, { token: NgZoneObservableDecorator }, { token: MicrofrontendViewIntentHandler }, { token: MicrofrontendPopupIntentHandler }, { token: MicrofrontendDialogIntentHandler }, { token: MicrofrontendMessageBoxIntentHandler }, { token: MicrofrontendMessageBoxLegacyIntentTranslator }, { token: MicrofrontendViewCapabilityValidator }, { token: MicrofrontendViewCapabilityIdAssigner }, { token: MicrofrontendPopupCapabilityValidator }, { token: MicrofrontendDialogCapabilityValidator }, { token: MicrofrontendMessageBoxCapabilityValidator }, { token: i0.Injector }, { token: i0.NgZone }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13745
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPlatformInitializer, providedIn: 'root' }); }
13264
13746
  }
13265
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendPlatformInitializer, decorators: [{
13747
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendPlatformInitializer, decorators: [{
13266
13748
  type: Injectable,
13267
13749
  args: [{ providedIn: 'root' }]
13268
- }], ctorParameters: () => [{ type: MicrofrontendPlatformConfigLoader }, { type: WorkbenchHostManifestInterceptor }, { type: NgZoneObservableDecorator }, { type: MicrofrontendViewIntentHandler }, { type: MicrofrontendPopupIntentHandler }, { type: MicrofrontendDialogIntentHandler }, { type: MicrofrontendViewCapabilityValidator }, { type: MicrofrontendViewCapabilityIdAssigner }, { type: MicrofrontendPopupCapabilityValidator }, { type: MicrofrontendDialogCapabilityValidator }, { type: i0.Injector }, { type: i0.NgZone }, { type: Logger }] });
13750
+ }], ctorParameters: () => [{ type: MicrofrontendPlatformConfigLoader }, { type: WorkbenchHostManifestInterceptor }, { type: NgZoneObservableDecorator }, { type: MicrofrontendViewIntentHandler }, { type: MicrofrontendPopupIntentHandler }, { type: MicrofrontendDialogIntentHandler }, { type: MicrofrontendMessageBoxIntentHandler }, { type: MicrofrontendMessageBoxLegacyIntentTranslator }, { type: MicrofrontendViewCapabilityValidator }, { type: MicrofrontendViewCapabilityIdAssigner }, { type: MicrofrontendPopupCapabilityValidator }, { type: MicrofrontendDialogCapabilityValidator }, { type: MicrofrontendMessageBoxCapabilityValidator }, { type: i0.Injector }, { type: i0.NgZone }, { type: Logger }] });
13269
13751
 
13270
13752
  /*
13271
13753
  * Copyright (c) 2018-2022 Swiss Federal Railways
@@ -13377,52 +13859,13 @@ class MicrofrontendViewCommandHandler {
13377
13859
  ngOnDestroy() {
13378
13860
  this._subscriptions.forEach(subscription => subscription.unsubscribe());
13379
13861
  }
13380
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCommandHandler, deps: [{ token: i2$3.MessageClient }, { token: WorkbenchViewRegistry }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13381
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCommandHandler }); }
13862
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCommandHandler, deps: [{ token: i2$3.MessageClient }, { token: WorkbenchViewRegistry }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13863
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCommandHandler }); }
13382
13864
  }
13383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewCommandHandler, decorators: [{
13865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCommandHandler, decorators: [{
13384
13866
  type: Injectable
13385
13867
  }], ctorParameters: () => [{ type: i2$3.MessageClient }, { type: WorkbenchViewRegistry }, { type: Logger }] });
13386
13868
 
13387
- /*
13388
- * Copyright (c) 2018-2022 Swiss Federal Railways
13389
- *
13390
- * This program and the accompanying materials are made
13391
- * available under the terms of the Eclipse Public License 2.0
13392
- * which is available at https://www.eclipse.org/legal/epl-2.0/
13393
- *
13394
- * SPDX-License-Identifier: EPL-2.0
13395
- */
13396
- /**
13397
- * Handles intents that refer to the built-in message box capability, allowing microfrontends to display simple message boxes.
13398
- *
13399
- * This class is constructed after connected to the SCION Microfrontend Platform via {@link MICROFRONTEND_PLATFORM_POST_STARTUP} DI token.
13400
- *
13401
- * @see WorkbenchHostManifestInterceptor
13402
- * @see MICROFRONTEND_PLATFORM_POST_STARTUP
13403
- */
13404
- class MicrofrontendMessageBoxIntentHandler {
13405
- constructor(intentClient, messageBoxService, logger) {
13406
- intentClient.onIntent({ type: WorkbenchCapabilities.MessageBox, qualifier: {} }, ({ body: config }) => {
13407
- logger.debug(() => 'Opening message box', LoggerNames.MICROFRONTEND, config);
13408
- return messageBoxService.open(config?.content, {
13409
- title: config?.title,
13410
- actions: config?.actions,
13411
- severity: config?.severity,
13412
- modality: config?.modality,
13413
- contentSelectable: config?.contentSelectable,
13414
- cssClass: config?.cssClass,
13415
- context: config?.context,
13416
- });
13417
- });
13418
- }
13419
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, deps: [{ token: i2$3.IntentClient }, { token: WorkbenchMessageBoxService }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13420
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler }); }
13421
- }
13422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, decorators: [{
13423
- type: Injectable
13424
- }], ctorParameters: () => [{ type: i2$3.IntentClient }, { type: WorkbenchMessageBoxService }, { type: Logger }] });
13425
-
13426
13869
  /*
13427
13870
  * Copyright (c) 2018-2022 Swiss Federal Railways
13428
13871
  *
@@ -13454,10 +13897,10 @@ class MicrofrontendNotificationIntentHandler {
13454
13897
  });
13455
13898
  });
13456
13899
  }
13457
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendNotificationIntentHandler, deps: [{ token: i2$3.IntentClient }, { token: NotificationService }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13458
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendNotificationIntentHandler }); }
13900
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendNotificationIntentHandler, deps: [{ token: i2$3.IntentClient }, { token: NotificationService }, { token: Logger }], target: i0.ɵɵFactoryTarget.Injectable }); }
13901
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendNotificationIntentHandler }); }
13459
13902
  }
13460
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendNotificationIntentHandler, decorators: [{
13903
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendNotificationIntentHandler, decorators: [{
13461
13904
  type: Injectable
13462
13905
  }], ctorParameters: () => [{ type: i2$3.IntentClient }, { type: NotificationService }, { type: Logger }] });
13463
13906
 
@@ -13536,10 +13979,10 @@ class ContentProjectionDirective {
13536
13979
  ngOnDestroy() {
13537
13980
  this._contentViewRef?.destroy();
13538
13981
  }
13539
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ContentProjectionDirective, deps: [{ token: i0.ElementRef }, { token: ɵWorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
13540
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: ContentProjectionDirective, isStandalone: true, selector: "[wbContentProjection]", inputs: { overlayHost: ["wbContentProjectionOverlayHost", "overlayHost"], contentTemplateRef: ["wbContentProjectionContent", "contentTemplateRef"] }, usesOnChanges: true, ngImport: i0 }); }
13982
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ContentProjectionDirective, deps: [{ token: i0.ElementRef }, { token: ɵWorkbenchView, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
13983
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: ContentProjectionDirective, isStandalone: true, selector: "[wbContentProjection]", inputs: { overlayHost: ["wbContentProjectionOverlayHost", "overlayHost"], contentTemplateRef: ["wbContentProjectionContent", "contentTemplateRef"] }, usesOnChanges: true, ngImport: i0 }); }
13541
13984
  }
13542
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ContentProjectionDirective, decorators: [{
13985
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ContentProjectionDirective, decorators: [{
13543
13986
  type: Directive,
13544
13987
  args: [{ selector: '[wbContentProjection]', standalone: true }]
13545
13988
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: ɵWorkbenchView, decorators: [{
@@ -13598,10 +14041,10 @@ function isNullDimension(dimension) {
13598
14041
  * ```
13599
14042
  */
13600
14043
  class ContentAsOverlayComponent {
13601
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ContentAsOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13602
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", 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"] }] }); }
14044
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ContentAsOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14045
+ 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"] }] }); }
13603
14046
  }
13604
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ContentAsOverlayComponent, decorators: [{
14047
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ContentAsOverlayComponent, decorators: [{
13605
14048
  type: Component,
13606
14049
  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"] }]
13607
14050
  }], propDecorators: { overlayHost: [{
@@ -13828,12 +14271,12 @@ class MicrofrontendViewComponent {
13828
14271
  this._outletRouter.navigate(null, { outlet: this.view.id }).then();
13829
14272
  this.view.unregisterAdapter(MicrofrontendWorkbenchView);
13830
14273
  }
13831
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewComponent, deps: [{ token: i0.ElementRef }, { token: i2.ActivatedRoute }, { token: i2$3.OutletRouter }, { token: i2$3.ManifestService }, { token: i2$3.MessageClient }, { token: i0.DestroyRef }, { token: Logger }, { token: ViewMenuService }, { token: WorkbenchLayoutService }, { token: WorkbenchRouter }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: ɵWorkbenchView }, { token: IFRAME_HOST }], target: i0.ɵɵFactoryTarget.Component }); }
13832
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<wb-content-as-overlay [overlayHost]=\"iframeHostRef.ref$ | async\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"isWorkbenchDrag\"\n [attr.data-viewid]=\"view.id\"\n wbGlassPane>\n <sci-router-outlet #router_outlet\n [name]=\"view.id\"\n [attr.data-capabilityid]=\"capability?.metadata!.id\"\n [attr.data-app]=\"capability?.metadata!.appSymbolicName\"\n [ngClass]=\"view.classList.value\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n </sci-router-outlet>\n </div>\n</wb-content-as-overlay>\n", styles: [":host{display:grid}div.microfrontend-view{display:grid}div.microfrontend-view.workbench-drag{pointer-events:none}div.microfrontend-view>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ContentAsOverlayComponent, selector: "wb-content-as-overlay", inputs: ["overlayHost"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
14274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, deps: [{ token: i0.ElementRef }, { token: i2.ActivatedRoute }, { token: i2$3.OutletRouter }, { token: i2$3.ManifestService }, { token: i2$3.MessageClient }, { token: i0.DestroyRef }, { token: Logger }, { token: ViewMenuService }, { token: WorkbenchLayoutService }, { token: WorkbenchRouter }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: ɵWorkbenchView }, { token: IFRAME_HOST }], target: i0.ɵɵFactoryTarget.Component }); }
14275
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<wb-content-as-overlay [overlayHost]=\"iframeHostRef.ref$ | async\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"isWorkbenchDrag\"\n [attr.data-viewid]=\"view.id\"\n wbGlassPane>\n <sci-router-outlet #router_outlet\n [name]=\"view.id\"\n [attr.data-capabilityid]=\"capability?.metadata!.id\"\n [attr.data-app]=\"capability?.metadata!.appSymbolicName\"\n [ngClass]=\"view.classList.value\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\n </sci-router-outlet>\n </div>\n</wb-content-as-overlay>\n", styles: [":host{display:grid}div.microfrontend-view{display:grid}div.microfrontend-view.workbench-drag{pointer-events:none}div.microfrontend-view>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ContentAsOverlayComponent, selector: "wb-content-as-overlay", inputs: ["overlayHost"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
13833
14276
  configureMicrofrontendGlassPane(),
13834
14277
  ] }); }
13835
14278
  }
13836
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewComponent, decorators: [{
14279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, decorators: [{
13837
14280
  type: Component,
13838
14281
  args: [{ selector: 'wb-microfrontend-view', standalone: true, imports: [
13839
14282
  NgClass,
@@ -13855,22 +14298,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
13855
14298
  * Blocks the microfrontend outlet when dialog(s) overlay this view.
13856
14299
  */
13857
14300
  function configureMicrofrontendGlassPane() {
13858
- return {
13859
- provide: GLASS_PANE_BLOCKABLE,
13860
- useExisting: ɵWorkbenchView,
13861
- };
14301
+ return [
14302
+ {
14303
+ provide: GLASS_PANE_BLOCKABLE,
14304
+ useExisting: ɵWorkbenchView,
14305
+ },
14306
+ {
14307
+ provide: GLASS_PANE_OPTIONS,
14308
+ useFactory: () => ({ attributes: { 'data-viewid': inject(WorkbenchView).id } }),
14309
+ },
14310
+ ];
13862
14311
  }
13863
14312
 
13864
- /*
13865
- * Copyright (c) 2018-2023 Swiss Federal Railways
13866
- *
13867
- * This program and the accompanying materials are made
13868
- * available under the terms of the Eclipse Public License 2.0
13869
- * which is available at https://www.eclipse.org/legal/epl-2.0/
13870
- *
13871
- * SPDX-License-Identifier: EPL-2.0
13872
- */
13873
-
13874
14313
  /*
13875
14314
  * Copyright (c) 2018-2024 Swiss Federal Railways
13876
14315
  *
@@ -13902,11 +14341,6 @@ function provideWorkbenchMicrofrontendSupport(workbenchConfig) {
13902
14341
  useClass: MicrofrontendViewCommandHandler,
13903
14342
  multi: true,
13904
14343
  },
13905
- {
13906
- provide: MICROFRONTEND_PLATFORM_POST_STARTUP,
13907
- useClass: MicrofrontendMessageBoxIntentHandler,
13908
- multi: true,
13909
- },
13910
14344
  {
13911
14345
  provide: MICROFRONTEND_PLATFORM_POST_STARTUP,
13912
14346
  useClass: MicrofrontendNotificationIntentHandler,
@@ -13919,13 +14353,17 @@ function provideWorkbenchMicrofrontendSupport(workbenchConfig) {
13919
14353
  MicrofrontendViewIntentHandler,
13920
14354
  MicrofrontendPopupIntentHandler,
13921
14355
  MicrofrontendDialogIntentHandler,
14356
+ MicrofrontendMessageBoxLegacyIntentTranslator,
14357
+ MicrofrontendMessageBoxIntentHandler,
13922
14358
  MicrofrontendViewCapabilityValidator,
13923
14359
  MicrofrontendViewCapabilityIdAssigner,
13924
14360
  MicrofrontendPopupCapabilityValidator,
13925
14361
  MicrofrontendDialogCapabilityValidator,
14362
+ MicrofrontendMessageBoxCapabilityValidator,
13926
14363
  NgZoneObservableDecorator,
13927
14364
  WorkbenchHostManifestInterceptor,
13928
- provideMicrofrontendRoute(),
14365
+ provideBuiltInTextMessageBoxCapabilityRoute(),
14366
+ provideMicrofrontendViewRoute(),
13929
14367
  provideMicrofrontendPlatformBeans(),
13930
14368
  provideWorkbenchClientBeans(),
13931
14369
  ]);
@@ -13940,10 +14378,10 @@ class StaticMicrofrontendPlatformConfigLoader {
13940
14378
  async load() {
13941
14379
  return this._workbenchConfig.microfrontendPlatform;
13942
14380
  }
13943
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, deps: [{ token: WorkbenchConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
13944
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader }); }
14381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, deps: [{ token: WorkbenchConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
14382
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader }); }
13945
14383
  }
13946
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, decorators: [{
14384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, decorators: [{
13947
14385
  type: Injectable
13948
14386
  }], ctorParameters: () => [{ type: WorkbenchConfig }] });
13949
14387
  /**
@@ -13972,9 +14410,9 @@ function provideWorkbenchClientBeans() {
13972
14410
  ]);
13973
14411
  }
13974
14412
  /**
13975
- * Provides the route for integrating microfrontends.
14413
+ * Provides the route for integrating microfrontend views.
13976
14414
  */
13977
- function provideMicrofrontendRoute() {
14415
+ function provideMicrofrontendViewRoute() {
13978
14416
  return makeEnvironmentProviders([
13979
14417
  {
13980
14418
  provide: ROUTES,
@@ -13987,6 +14425,31 @@ function provideMicrofrontendRoute() {
13987
14425
  },
13988
14426
  ]);
13989
14427
  }
14428
+ /**
14429
+ * Provides route for built-in {@link WorkbenchMessageBoxCapability}.
14430
+ */
14431
+ function provideBuiltInTextMessageBoxCapabilityRoute() {
14432
+ return makeEnvironmentProviders([
14433
+ {
14434
+ provide: ROUTES,
14435
+ multi: true,
14436
+ useValue: {
14437
+ path: TEXT_MESSAGE_BOX_CAPABILITY_ROUTE,
14438
+ loadComponent: () => Promise.resolve().then(function () { return textMessage_component; }),
14439
+ canMatch: [canMatchWorkbenchMessageBox()],
14440
+ },
14441
+ },
14442
+ ]);
14443
+ }
14444
+ /**
14445
+ * Matches the route if target of a workbench message box.
14446
+ */
14447
+ function canMatchWorkbenchMessageBox() {
14448
+ return () => {
14449
+ const outlet = inject(WORKBENCH_AUXILIARY_ROUTE_OUTLET, { optional: true });
14450
+ return RouterUtils.isMessageBoxOutlet(outlet);
14451
+ };
14452
+ }
13990
14453
 
13991
14454
  /*
13992
14455
  * Copyright (c) 2018-2023 Swiss Federal Railways
@@ -14046,10 +14509,10 @@ class ɵLocation extends Location {
14046
14509
  // the router only if the platform is still running.
14047
14510
  return (this._router ??= !this._appRef.destroyed ? this._appRef.injector.get(Router) : undefined);
14048
14511
  }
14049
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14050
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLocation }); }
14512
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14513
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵLocation }); }
14051
14514
  }
14052
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ɵLocation, decorators: [{
14515
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ɵLocation, decorators: [{
14053
14516
  type: Injectable
14054
14517
  }], ctorParameters: () => [] });
14055
14518
 
@@ -14220,17 +14683,17 @@ class WorkbenchModule {
14220
14683
  providers: [], // do not register any providers in 'forChild' but in 'forRoot' instead
14221
14684
  };
14222
14685
  }
14223
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14224
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchModule, imports: [WorkbenchComponent,
14686
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14687
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchModule, imports: [WorkbenchComponent,
14225
14688
  WorkbenchRouterLinkDirective,
14226
14689
  WorkbenchPartActionDirective,
14227
14690
  WorkbenchViewMenuItemDirective], exports: [WorkbenchComponent,
14228
14691
  WorkbenchRouterLinkDirective,
14229
14692
  WorkbenchPartActionDirective,
14230
14693
  WorkbenchViewMenuItemDirective] }); }
14231
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchModule, imports: [WorkbenchComponent] }); }
14694
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchModule, imports: [WorkbenchComponent] }); }
14232
14695
  }
14233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchModule, decorators: [{
14696
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchModule, decorators: [{
14234
14697
  type: NgModule,
14235
14698
  args: [{
14236
14699
  imports: [
@@ -14261,10 +14724,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
14261
14724
  * Factory for creating a {@link WorkbenchLayout}.
14262
14725
  */
14263
14726
  class WorkbenchLayoutFactory {
14264
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14265
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutFactory, providedIn: 'root', useExisting: ɵWorkbenchLayoutFactory }); }
14727
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14728
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutFactory, providedIn: 'root', useExisting: ɵWorkbenchLayoutFactory }); }
14266
14729
  }
14267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchLayoutFactory, decorators: [{
14730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchLayoutFactory, decorators: [{
14268
14731
  type: Injectable,
14269
14732
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchLayoutFactory }]
14270
14733
  }] });
@@ -14359,15 +14822,17 @@ class WorkbenchDialogActionDirective {
14359
14822
  * Specifies where to place this action in the dialog footer. Default is `end`.
14360
14823
  */
14361
14824
  this.align = 'end';
14362
- this._action = dialog.registerAction(this);
14825
+ // Defer registering action to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
14826
+ asapScheduler.schedule(() => this._action = dialog.registerAction(this));
14363
14827
  }
14364
14828
  ngOnDestroy() {
14365
- this._action.dispose();
14829
+ // Defer disposing action to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
14830
+ asapScheduler.schedule(() => this._action?.dispose());
14366
14831
  }
14367
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogActionDirective, deps: [{ token: i0.TemplateRef }, { token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Directive }); }
14368
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: WorkbenchDialogActionDirective, isStandalone: true, selector: "ng-template[wbDialogAction]", inputs: { align: "align" }, ngImport: i0 }); }
14832
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogActionDirective, deps: [{ token: i0.TemplateRef }, { token: ɵWorkbenchDialog }], target: i0.ɵɵFactoryTarget.Directive }); }
14833
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: WorkbenchDialogActionDirective, isStandalone: true, selector: "ng-template[wbDialogAction]", inputs: { align: "align" }, ngImport: i0 }); }
14369
14834
  }
14370
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchDialogActionDirective, decorators: [{
14835
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchDialogActionDirective, decorators: [{
14371
14836
  type: Directive,
14372
14837
  args: [{ selector: 'ng-template[wbDialogAction]', standalone: true }]
14373
14838
  }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: ɵWorkbenchDialog }], propDecorators: { align: [{
@@ -14499,10 +14964,10 @@ class SequenceInstantProvider {
14499
14964
  now() {
14500
14965
  return this._sequence++;
14501
14966
  }
14502
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SequenceInstantProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14503
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SequenceInstantProvider }); }
14967
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SequenceInstantProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14968
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SequenceInstantProvider }); }
14504
14969
  }
14505
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SequenceInstantProvider, decorators: [{
14970
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SequenceInstantProvider, decorators: [{
14506
14971
  type: Injectable
14507
14972
  }] });
14508
14973
 
@@ -14544,11 +15009,11 @@ class WorkbenchTestingModule {
14544
15009
  providers: [provideWorkbenchForTest(config)],
14545
15010
  };
14546
15011
  }
14547
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14548
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchTestingModule }); }
14549
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchTestingModule }); }
15012
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15013
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchTestingModule }); }
15014
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchTestingModule }); }
14550
15015
  }
14551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: WorkbenchTestingModule, decorators: [{
15016
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: WorkbenchTestingModule, decorators: [{
14552
15017
  type: NgModule
14553
15018
  }] });
14554
15019