@scion/workbench 20.0.0-beta.5 → 20.0.0-beta.6

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.
@@ -6,7 +6,7 @@ import { toObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-i
6
6
  import { skipUntil, mergeMap, filter, observeOn, catchError, startWith, take, map, switchMap as switchMap$1, skip, subscribeOn, finalize, distinctUntilChanged, tap, takeUntil, first, combineLatestWith } from 'rxjs/operators';
7
7
  import { coerceElement } from '@angular/cdk/coercion';
8
8
  import { UUID } from '@scion/toolkit/uuid';
9
- import { Observable, Subject, asapScheduler, AsyncSubject, lastValueFrom, iif, switchMap, race, pairwise, EMPTY, of, firstValueFrom, from, animationFrameScheduler, merge, fromEvent, BehaviorSubject, delay, identity, audit, share, noop, map as map$1, concatWith, withLatestFrom, mergeMap as mergeMap$1, mergeWith, timer, combineLatest } from 'rxjs';
9
+ import { Observable, Subject, asapScheduler, AsyncSubject, lastValueFrom, iif, switchMap, race, pairwise, EMPTY, of, firstValueFrom, from, animationFrameScheduler, merge, fromEvent, BehaviorSubject, delay, identity, audit, share, noop, map as map$1, concatWith, withLatestFrom, mergeMap as mergeMap$1, mergeWith, combineLatest, asyncScheduler, timer } from 'rxjs';
10
10
  import { fromMutation$, fromResize$ } from '@scion/toolkit/observable';
11
11
  import { subscribeIn, observeIn, filterArray, tapFirst } from '@scion/toolkit/operators';
12
12
  import { SciViewportComponent } from '@scion/components/viewport';
@@ -21,7 +21,7 @@ import { FocusMonitor, CdkTrapFocus } from '@angular/cdk/a11y';
21
21
  import { trigger, transition, style, animate } from '@angular/animations';
22
22
  import { ManifestService, MicrofrontendPlatform, PlatformState, MessageHeaders, MessageClient, ResponseStatusCodes, OutletRouter, MicrofrontendPlatformConfig, APP_IDENTITY, mapToBody, HostManifestInterceptor, ObservableDecorator, IntentInterceptor, CapabilityInterceptor, MicrofrontendPlatformHost, IntentClient, PlatformPropertyService } from '@scion/microfrontend-platform';
23
23
  import { Beans } from '@scion/toolkit/bean-manager';
24
- import { ɵMicrofrontendRouteParams as _MicrofrontendRouteParams, WorkbenchCapabilities, WorkbenchMessageBox, eMESSAGE_BOX_MESSAGE_PARAM, ɵTHEME_CONTEXT_KEY as _THEME_CONTEXT_KEY, ɵWorkbenchCommands as _WorkbenchCommands, ɵPOPUP_CONTEXT as _POPUP_CONTEXT, ɵWorkbenchPopupMessageHeaders as _WorkbenchPopupMessageHeaders, WorkbenchPopup, ɵMESSAGE_BOX_CONTEXT as _MESSAGE_BOX_CONTEXT, ɵDIALOG_CONTEXT as _DIALOG_CONTEXT, ɵWorkbenchDialogMessageHeaders as _WorkbenchDialogMessageHeaders, WorkbenchDialog as WorkbenchDialog$1, 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';
24
+ import { ɵMicrofrontendRouteParams as _MicrofrontendRouteParams, WorkbenchCapabilities, WorkbenchTextService, WorkbenchMessageBox, eMESSAGE_BOX_MESSAGE_PARAM, ɵTHEME_CONTEXT_KEY as _THEME_CONTEXT_KEY, ɵWorkbenchCommands as _WorkbenchCommands, ɵPOPUP_CONTEXT as _POPUP_CONTEXT, ɵWorkbenchPopupMessageHeaders as _WorkbenchPopupMessageHeaders, WorkbenchPopup, ɵMESSAGE_BOX_CONTEXT as _MESSAGE_BOX_CONTEXT, ɵDIALOG_CONTEXT as _DIALOG_CONTEXT, ɵWorkbenchDialogMessageHeaders as _WorkbenchDialogMessageHeaders, WorkbenchDialog as WorkbenchDialog$1, WorkbenchRouter as WorkbenchRouter$1, WorkbenchPopupService, WorkbenchMessageBoxService as WorkbenchMessageBoxService$1, ɵWorkbenchMessageBoxService as _WorkbenchMessageBoxService, WorkbenchDialogService as WorkbenchDialogService$1, ɵWorkbenchDialogService as _WorkbenchDialogService, WorkbenchNotificationService, ɵWorkbenchTextService as _WorkbenchTextService, ɵVIEW_ID_CONTEXT_KEY as _VIEW_ID_CONTEXT_KEY, WorkbenchClient } from '@scion/workbench-client';
25
25
  import { SciThrobberComponent } from '@scion/components/throbber';
26
26
  import { Crypto } from '@scion/toolkit/crypto';
27
27
 
@@ -77,7 +77,7 @@ function resolveWhen(condition, options) {
77
77
  untracked(() => resolve());
78
78
  effectRef.destroy();
79
79
  }
80
- }, { injector: options?.injector });
80
+ }, ...(ngDevMode ? [{ debugName: "effectRef", injector: options?.injector }] : [{ injector: options?.injector }]));
81
81
  });
82
82
  }
83
83
 
@@ -109,10 +109,10 @@ class DefaultWorkbenchStorage {
109
109
  store(key, value) {
110
110
  localStorage.setItem(key, value);
111
111
  }
112
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DefaultWorkbenchStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
113
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DefaultWorkbenchStorage });
112
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DefaultWorkbenchStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
113
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DefaultWorkbenchStorage });
114
114
  }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DefaultWorkbenchStorage, decorators: [{
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DefaultWorkbenchStorage, decorators: [{
116
116
  type: Injectable
117
117
  }] });
118
118
 
@@ -131,7 +131,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
131
131
  function renderingFlag(storageKey, defaultValue, options) {
132
132
  const injector = options?.injector ?? inject(Injector);
133
133
  const workbenchStorage = injector.get(WorkbenchStorage);
134
- const flag = signal(defaultValue);
134
+ const flag = signal(defaultValue, ...(ngDevMode ? [{ debugName: "flag" }] : []));
135
135
  // Read flag from storage.
136
136
  const whenReadFromStorage = readFromStorage(storageKey).then(storedValue => {
137
137
  if (storedValue === null) {
@@ -371,18 +371,18 @@ function nextAnimationFrame$() {
371
371
  * Provides access to the workbench layout.
372
372
  */
373
373
  class WorkbenchLayoutService {
374
- _layout = signal(null);
375
- _dragging = signal(false);
376
- _moving = signal(false);
377
- _resizing = signal(false);
374
+ _layout = signal(null, ...(ngDevMode ? [{ debugName: "_layout" }] : []));
375
+ _dragging = signal(false, ...(ngDevMode ? [{ debugName: "_dragging" }] : []));
376
+ _moving = signal(false, ...(ngDevMode ? [{ debugName: "_moving" }] : []));
377
+ _resizing = signal(false, ...(ngDevMode ? [{ debugName: "_resizing" }] : []));
378
378
  /**
379
379
  * Provides the layout of the workbench, throwing an error if the initial layout is not yet available.
380
380
  */
381
- layout = computed(() => this._layout() ?? throwError('[NullLayoutError] Workbench layout not available yet.'));
381
+ layout = computed(() => this._layout() ?? throwError('[NullLayoutError] Workbench layout not available yet.'), ...(ngDevMode ? [{ debugName: "layout" }] : []));
382
382
  /**
383
383
  * Indicates whether the layout is available, i.e., after Angular has performed the initial navigation.
384
384
  */
385
- hasLayout = computed(() => this._layout() !== null);
385
+ hasLayout = computed(() => this._layout() !== null, ...(ngDevMode ? [{ debugName: "hasLayout" }] : []));
386
386
  /**
387
387
  * Resolves when the layout is available, i.e., after Angular has performed the initial navigation.
388
388
  */
@@ -390,7 +390,7 @@ class WorkbenchLayoutService {
390
390
  /**
391
391
  * Indicates if a drag operation is active, such as moving a view or dialog, or resizing a part.
392
392
  */
393
- dragging = computed(() => this._dragging() || this._moving() || this._resizing());
393
+ dragging = computed(() => this._dragging() || this._moving() || this._resizing(), ...(ngDevMode ? [{ debugName: "dragging" }] : []));
394
394
  /**
395
395
  * Controls the alignment of the bottom activity panel.
396
396
  *
@@ -427,10 +427,10 @@ class WorkbenchLayoutService {
427
427
  setLayout(layout) {
428
428
  this._layout.set(layout);
429
429
  }
430
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
431
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutService, providedIn: 'root' });
430
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
431
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutService, providedIn: 'root' });
432
432
  }
433
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutService, decorators: [{
433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutService, decorators: [{
434
434
  type: Injectable,
435
435
  args: [{ providedIn: 'root' }]
436
436
  }] });
@@ -1032,7 +1032,7 @@ const Objects = {
1032
1032
  * Provides a registry for workbench model objects.
1033
1033
  */
1034
1034
  class WorkbenchObjectRegistry {
1035
- _objects = signal([]);
1035
+ _objects = signal([], ...(ngDevMode ? [{ debugName: "_objects" }] : []));
1036
1036
  _objectsById = new Map();
1037
1037
  _nullObjectErrorFn;
1038
1038
  _onUnregister;
@@ -1528,10 +1528,10 @@ class ɵWorkbenchRouter {
1528
1528
  setCurrentNavigationContext(context) {
1529
1529
  this._currentNavigationContext = context;
1530
1530
  }
1531
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchRouter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1532
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchRouter, providedIn: 'root' });
1531
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchRouter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1532
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchRouter, providedIn: 'root' });
1533
1533
  }
1534
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchRouter, decorators: [{
1534
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchRouter, decorators: [{
1535
1535
  type: Injectable,
1536
1536
  args: [{ providedIn: 'root' }]
1537
1537
  }], ctorParameters: () => [] });
@@ -1700,10 +1700,10 @@ function computeNavigationCommands(currentOutlets, newOutlets) {
1700
1700
  * A view can inject `ActivatedRoute` to get parameters passed to the navigation and read data associated with the route.
1701
1701
  */
1702
1702
  class WorkbenchRouter {
1703
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchRouter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1704
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchRouter, providedIn: 'root', useExisting: ɵWorkbenchRouter });
1703
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchRouter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1704
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchRouter, providedIn: 'root', useExisting: ɵWorkbenchRouter });
1705
1705
  }
1706
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchRouter, decorators: [{
1706
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchRouter, decorators: [{
1707
1707
  type: Injectable,
1708
1708
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchRouter }]
1709
1709
  }] });
@@ -1833,10 +1833,10 @@ class WorkbenchGridMigrationV3 {
1833
1833
  getCurrentUrl() {
1834
1834
  return this._router.getCurrentNavigation()?.initialUrl ?? this._router.parseUrl(this._router.url);
1835
1835
  }
1836
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV3, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1837
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV3, providedIn: 'root' });
1836
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV3, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1837
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV3, providedIn: 'root' });
1838
1838
  }
1839
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV3, decorators: [{
1839
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV3, decorators: [{
1840
1840
  type: Injectable,
1841
1841
  args: [{ providedIn: 'root' }]
1842
1842
  }] });
@@ -1908,10 +1908,10 @@ class WorkbenchGridMigrationV4 {
1908
1908
  return { ...viewV3, uid: undefined }; // `uid` is transient, i.e., set when deserializing the grid.
1909
1909
  }
1910
1910
  }
1911
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV4, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1912
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV4, providedIn: 'root' });
1911
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV4, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1912
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV4, providedIn: 'root' });
1913
1913
  }
1914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV4, decorators: [{
1914
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV4, decorators: [{
1915
1915
  type: Injectable,
1916
1916
  args: [{ providedIn: 'root' }]
1917
1917
  }] });
@@ -1970,10 +1970,10 @@ class WorkbenchGridMigrationV5 {
1970
1970
  return viewV5;
1971
1971
  }
1972
1972
  }
1973
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV5, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1974
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV5, providedIn: 'root' });
1973
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV5, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1974
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV5, providedIn: 'root' });
1975
1975
  }
1976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV5, decorators: [{
1976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV5, decorators: [{
1977
1977
  type: Injectable,
1978
1978
  args: [{ providedIn: 'root' }]
1979
1979
  }] });
@@ -2025,10 +2025,10 @@ class WorkbenchGridMigrationV6 {
2025
2025
  return viewV6;
2026
2026
  }
2027
2027
  }
2028
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV6, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2029
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV6, providedIn: 'root' });
2028
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV6, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2029
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV6, providedIn: 'root' });
2030
2030
  }
2031
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV6, decorators: [{
2031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV6, decorators: [{
2032
2032
  type: Injectable,
2033
2033
  args: [{ providedIn: 'root' }]
2034
2034
  }] });
@@ -2174,10 +2174,10 @@ class WorkbenchGridMigrationV7 {
2174
2174
  };
2175
2175
  }
2176
2176
  }
2177
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV7, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2178
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV7, providedIn: 'root' });
2177
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV7, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2178
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV7, providedIn: 'root' });
2179
2179
  }
2180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchGridMigrationV7, decorators: [{
2180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchGridMigrationV7, decorators: [{
2181
2181
  type: Injectable,
2182
2182
  args: [{ providedIn: 'root' }]
2183
2183
  }] });
@@ -2218,10 +2218,10 @@ class WorkbenchLayoutMigrationV2 {
2218
2218
  return [viewId, commandsToSegments(commands)];
2219
2219
  })));
2220
2220
  }
2221
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV2, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2222
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV2, providedIn: 'root' });
2221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV2, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2222
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV2, providedIn: 'root' });
2223
2223
  }
2224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV2, decorators: [{
2224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV2, decorators: [{
2225
2225
  type: Injectable,
2226
2226
  args: [{ providedIn: 'root' }]
2227
2227
  }] });
@@ -2265,10 +2265,10 @@ class WorkbenchLayoutMigrationV3 {
2265
2265
  };
2266
2266
  return JSON.stringify(perspectiveLayoutV3);
2267
2267
  }
2268
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV3, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2269
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV3, providedIn: 'root' });
2268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV3, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2269
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV3, providedIn: 'root' });
2270
2270
  }
2271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV3, decorators: [{
2271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV3, decorators: [{
2272
2272
  type: Injectable,
2273
2273
  args: [{ providedIn: 'root' }]
2274
2274
  }] });
@@ -2306,10 +2306,10 @@ class WorkbenchLayoutMigrationV4 {
2306
2306
  };
2307
2307
  return JSON.stringify(workbenchLayoutV4);
2308
2308
  }
2309
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV4, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2310
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV4, providedIn: 'root' });
2309
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV4, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2310
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV4, providedIn: 'root' });
2311
2311
  }
2312
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV4, decorators: [{
2312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV4, decorators: [{
2313
2313
  type: Injectable,
2314
2314
  args: [{ providedIn: 'root' }]
2315
2315
  }] });
@@ -2375,10 +2375,10 @@ class WorkbenchLayoutMigrationV5 {
2375
2375
  };
2376
2376
  return JSON.stringify(workbenchLayoutV5);
2377
2377
  }
2378
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV5, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2379
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV5, providedIn: 'root' });
2378
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV5, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2379
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV5, providedIn: 'root' });
2380
2380
  }
2381
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV5, decorators: [{
2381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV5, decorators: [{
2382
2382
  type: Injectable,
2383
2383
  args: [{ providedIn: 'root' }]
2384
2384
  }] });
@@ -2436,10 +2436,10 @@ class WorkbenchLayoutMigrationV6 {
2436
2436
  grid.referencePartId = referencePartId;
2437
2437
  return inject(WorkbenchLayoutSerializer).serializeGrid(grid);
2438
2438
  }
2439
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV6, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2440
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV6, providedIn: 'root' });
2439
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV6, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2440
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV6, providedIn: 'root' });
2441
2441
  }
2442
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMigrationV6, decorators: [{
2442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMigrationV6, decorators: [{
2443
2443
  type: Injectable,
2444
2444
  args: [{ providedIn: 'root' }]
2445
2445
  }] });
@@ -2616,10 +2616,10 @@ class WorkbenchLayoutSerializer {
2616
2616
  return [outlet, segments.map(segment => new UrlSegment(segment.path, segment.parameters))];
2617
2617
  }));
2618
2618
  }
2619
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2620
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutSerializer, providedIn: 'root' });
2619
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2620
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutSerializer, providedIn: 'root' });
2621
2621
  }
2622
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutSerializer, decorators: [{
2622
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutSerializer, decorators: [{
2623
2623
  type: Injectable,
2624
2624
  args: [{ providedIn: 'root' }]
2625
2625
  }] });
@@ -2677,10 +2677,10 @@ var LogLevel;
2677
2677
  * Delivers log events to a destination, e.g., writing logs to the console.
2678
2678
  */
2679
2679
  class LogAppender {
2680
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LogAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2681
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LogAppender });
2680
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: LogAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2681
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: LogAppender });
2682
2682
  }
2683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LogAppender, decorators: [{
2683
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: LogAppender, decorators: [{
2684
2684
  type: Injectable
2685
2685
  }] });
2686
2686
  /**
@@ -2731,10 +2731,10 @@ class ConsoleAppender {
2731
2731
  }
2732
2732
  }
2733
2733
  }
2734
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ConsoleAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2735
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ConsoleAppender });
2734
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ConsoleAppender, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2735
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ConsoleAppender });
2736
2736
  }
2737
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ConsoleAppender, decorators: [{
2737
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ConsoleAppender, decorators: [{
2738
2738
  type: Injectable
2739
2739
  }] });
2740
2740
 
@@ -2754,7 +2754,7 @@ class ɵLogger {
2754
2754
  constructor() {
2755
2755
  const defaultLogLevel = inject(WorkbenchConfig, { optional: true })?.logging?.logLevel ?? LogLevel.INFO;
2756
2756
  const logLevel = queryParam('loglevel');
2757
- this._logLevel = computed(() => parseLogLevel(logLevel()) ?? defaultLogLevel);
2757
+ this._logLevel = computed(() => parseLogLevel(logLevel()) ?? defaultLogLevel, ...(ngDevMode ? [{ debugName: "_logLevel" }] : []));
2758
2758
  }
2759
2759
  /** @inheritDoc */
2760
2760
  get logLevel() {
@@ -2785,10 +2785,10 @@ class ɵLogger {
2785
2785
  }
2786
2786
  this._logAppenders.forEach(logAppender => logAppender.onLogMessage(event));
2787
2787
  }
2788
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵLogger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2789
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵLogger });
2788
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵLogger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2789
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵLogger });
2790
2790
  }
2791
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵLogger, decorators: [{
2791
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵLogger, decorators: [{
2792
2792
  type: Injectable
2793
2793
  }], ctorParameters: () => [] });
2794
2794
  /**
@@ -2842,10 +2842,10 @@ function coerceLogEvent(level, message, args) {
2842
2842
  * @see {@link LogAppender}
2843
2843
  */
2844
2844
  class Logger {
2845
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: Logger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2846
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: Logger, providedIn: 'root', useClass: ɵLogger });
2845
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: Logger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2846
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: Logger, providedIn: 'root', useClass: ɵLogger });
2847
2847
  }
2848
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: Logger, decorators: [{
2848
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: Logger, decorators: [{
2849
2849
  type: Injectable,
2850
2850
  args: [{ providedIn: 'root', useClass: ɵLogger }]
2851
2851
  }] });
@@ -2962,10 +2962,10 @@ class ActivationInstantProvider {
2962
2962
  next() {
2963
2963
  return ++this._origin;
2964
2964
  }
2965
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivationInstantProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2966
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivationInstantProvider, providedIn: 'root' });
2965
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivationInstantProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2966
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivationInstantProvider, providedIn: 'root' });
2967
2967
  }
2968
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivationInstantProvider, decorators: [{
2968
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivationInstantProvider, decorators: [{
2969
2969
  type: Injectable,
2970
2970
  args: [{ providedIn: 'root' }]
2971
2971
  }] });
@@ -4341,10 +4341,10 @@ class ɵWorkbenchLayoutFactory {
4341
4341
  create(config) {
4342
4342
  return runInInjectionContext(this._injector, () => new ɵWorkbenchLayout(config));
4343
4343
  }
4344
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchLayoutFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4345
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchLayoutFactory, providedIn: 'root' });
4344
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchLayoutFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4345
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchLayoutFactory, providedIn: 'root' });
4346
4346
  }
4347
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchLayoutFactory, decorators: [{
4347
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchLayoutFactory, decorators: [{
4348
4348
  type: Injectable,
4349
4349
  args: [{ providedIn: 'root' }]
4350
4350
  }] });
@@ -4373,10 +4373,10 @@ class WorkbenchLayoutMerger {
4373
4373
  }
4374
4374
  return layouts.local;
4375
4375
  }
4376
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMerger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4377
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMerger, providedIn: 'root' });
4376
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMerger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4377
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMerger, providedIn: 'root' });
4378
4378
  }
4379
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutMerger, decorators: [{
4379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutMerger, decorators: [{
4380
4380
  type: Injectable,
4381
4381
  args: [{ providedIn: 'root' }]
4382
4382
  }] });
@@ -4445,10 +4445,10 @@ class WorkbenchLayoutStorageService {
4445
4445
  async storeActivePerspectiveId(perspectiveId) {
4446
4446
  return this._storage.store(storageKeys.activePerspectiveId, perspectiveId);
4447
4447
  }
4448
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4449
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutStorageService, providedIn: 'root' });
4448
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4449
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutStorageService, providedIn: 'root' });
4450
4450
  }
4451
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutStorageService, decorators: [{
4451
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutStorageService, decorators: [{
4452
4452
  type: Injectable,
4453
4453
  args: [{ providedIn: 'root' }]
4454
4454
  }] });
@@ -4659,7 +4659,7 @@ class ɵWorkbenchLauncher {
4659
4659
  _zone;
4660
4660
  _injector;
4661
4661
  _whenStarted = resolveWhen(computed(() => this.state() === LaunchState.Started));
4662
- state = signal(LaunchState.Stopped);
4662
+ state = signal(LaunchState.Stopped, ...(ngDevMode ? [{ debugName: "state" }] : []));
4663
4663
  constructor() {
4664
4664
  const workbenchConfig = inject(WorkbenchConfig, { optional: true });
4665
4665
  if (!workbenchConfig) {
@@ -4695,10 +4695,10 @@ class ɵWorkbenchLauncher {
4695
4695
  }
4696
4696
  }
4697
4697
  }
4698
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchLauncher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4699
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchLauncher, providedIn: 'root' });
4698
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchLauncher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4699
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchLauncher, providedIn: 'root' });
4700
4700
  }
4701
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchLauncher, decorators: [{
4701
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchLauncher, decorators: [{
4702
4702
  type: Injectable,
4703
4703
  args: [{ providedIn: 'root' }]
4704
4704
  }], ctorParameters: () => [] });
@@ -4722,17 +4722,17 @@ class ɵWorkbenchStartup {
4722
4722
  _launcher = inject(ɵWorkbenchLauncher);
4723
4723
  _workbenchLayoutService = inject(WorkbenchLayoutService);
4724
4724
  /** @inheritDoc */
4725
- done = computed(() => this._launcher.state() === LaunchState.Started && this._workbenchLayoutService.hasLayout());
4725
+ done = computed(() => this._launcher.state() === LaunchState.Started && this._workbenchLayoutService.hasLayout(), ...(ngDevMode ? [{ debugName: "done" }] : []));
4726
4726
  /** @inheritDoc */
4727
4727
  whenDone = resolveWhen(this.done);
4728
4728
  /** @inheritDoc */
4729
4729
  isStarted = this.done;
4730
4730
  /** @inheritDoc */
4731
4731
  whenStarted = this.whenDone.then(() => true);
4732
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchStartup, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4733
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchStartup });
4732
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchStartup, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4733
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchStartup });
4734
4734
  }
4735
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchStartup, decorators: [{
4735
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchStartup, decorators: [{
4736
4736
  type: Injectable
4737
4737
  }] });
4738
4738
 
@@ -4749,10 +4749,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
4749
4749
  * Provides the status of the SCION Workbench startup.
4750
4750
  */
4751
4751
  class WorkbenchStartup {
4752
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchStartup, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4753
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchStartup, providedIn: 'root', useClass: ɵWorkbenchStartup });
4752
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchStartup, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4753
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchStartup, providedIn: 'root', useClass: ɵWorkbenchStartup });
4754
4754
  }
4755
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchStartup, decorators: [{
4755
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchStartup, decorators: [{
4756
4756
  type: Injectable,
4757
4757
  args: [{ providedIn: 'root', useClass: ɵWorkbenchStartup }]
4758
4758
  }] });
@@ -4789,7 +4789,7 @@ class ɵWorkbenchPerspective {
4789
4789
  this.transient = definition.transient ?? false;
4790
4790
  this.data = definition.data ?? {};
4791
4791
  const activePerspective = inject(ACTIVE_PERSPECTIVE);
4792
- this.active = computed(() => activePerspective()?.id === this.id);
4792
+ this.active = computed(() => activePerspective()?.id === this.id, ...(ngDevMode ? [{ debugName: "active" }] : []));
4793
4793
  this._initialLayoutFn = definition.layout;
4794
4794
  this.installLayoutPersister();
4795
4795
  }
@@ -4992,8 +4992,8 @@ class WorkbenchPerspectiveService {
4992
4992
  _environmentInjector = inject(EnvironmentInjector);
4993
4993
  _applicationInitStatus = inject(ApplicationInitStatus);
4994
4994
  _layoutStorageService = inject(WorkbenchLayoutStorageService);
4995
- _switchingPerspective = signal(false);
4996
- _resettingPerspective = signal(false);
4995
+ _switchingPerspective = signal(false, ...(ngDevMode ? [{ debugName: "_switchingPerspective" }] : []));
4996
+ _resettingPerspective = signal(false, ...(ngDevMode ? [{ debugName: "_resettingPerspective" }] : []));
4997
4997
  activePerspective = inject(ACTIVE_PERSPECTIVE);
4998
4998
  async init() {
4999
4999
  await this.registerPerspectivesFromConfig();
@@ -5146,10 +5146,10 @@ class WorkbenchPerspectiveService {
5146
5146
  }
5147
5147
  return undefined;
5148
5148
  }
5149
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchPerspectiveService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5150
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchPerspectiveService, providedIn: 'root' });
5149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchPerspectiveService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5150
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchPerspectiveService, providedIn: 'root' });
5151
5151
  }
5152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchPerspectiveService, decorators: [{
5152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchPerspectiveService, decorators: [{
5153
5153
  type: Injectable,
5154
5154
  args: [{ providedIn: 'root' }]
5155
5155
  }] });
@@ -5263,10 +5263,10 @@ class WorkbenchThemeSwitcher {
5263
5263
  this.theme.set(theme);
5264
5264
  });
5265
5265
  }
5266
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchThemeSwitcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5267
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchThemeSwitcher, providedIn: 'root' });
5266
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchThemeSwitcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5267
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchThemeSwitcher, providedIn: 'root' });
5268
5268
  }
5269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchThemeSwitcher, decorators: [{
5269
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchThemeSwitcher, decorators: [{
5270
5270
  type: Injectable,
5271
5271
  args: [{ providedIn: 'root' }]
5272
5272
  }], ctorParameters: () => [] });
@@ -5301,10 +5301,10 @@ const WORKBENCH_VIEW_MENU_ITEM_REGISTRY = new InjectionToken('WORKBENCH_VIEW_MEN
5301
5301
  * Provides the workbench element that contains the focused DOM element, which is currently receiving keyboard events.
5302
5302
  */
5303
5303
  class WorkbenchFocusMonitor {
5304
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchFocusMonitor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5305
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchFocusMonitor, providedIn: 'root', useExisting: i0.forwardRef(() => ɵWorkbenchFocusMonitor) });
5304
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchFocusMonitor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5305
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchFocusMonitor, providedIn: 'root', useExisting: i0.forwardRef(() => ɵWorkbenchFocusMonitor) });
5306
5306
  }
5307
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchFocusMonitor, decorators: [{
5307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchFocusMonitor, decorators: [{
5308
5308
  type: Injectable,
5309
5309
  args: [{ providedIn: 'root', useExisting: forwardRef(() => ɵWorkbenchFocusMonitor) }]
5310
5310
  }] });
@@ -5330,7 +5330,7 @@ function trackFocus(target, workbenchElement) {
5330
5330
  };
5331
5331
  }
5332
5332
  class ɵWorkbenchFocusMonitor {
5333
- activeElement = signal(null);
5333
+ activeElement = signal(null, ...(ngDevMode ? [{ debugName: "activeElement" }] : []));
5334
5334
  setActiveElement(element) {
5335
5335
  this.activeElement.set(element);
5336
5336
  }
@@ -5339,10 +5339,10 @@ class ɵWorkbenchFocusMonitor {
5339
5339
  this.activeElement.set(null);
5340
5340
  }
5341
5341
  }
5342
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchFocusMonitor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5343
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchFocusMonitor, providedIn: 'root' });
5342
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchFocusMonitor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5343
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchFocusMonitor, providedIn: 'root' });
5344
5344
  }
5345
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchFocusMonitor, decorators: [{
5345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchFocusMonitor, decorators: [{
5346
5346
  type: Injectable,
5347
5347
  args: [{ providedIn: 'root' }]
5348
5348
  }] });
@@ -5444,10 +5444,10 @@ class ɵWorkbenchService {
5444
5444
  });
5445
5445
  });
5446
5446
  }
5447
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5448
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchService, providedIn: 'root' });
5447
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5448
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchService, providedIn: 'root' });
5449
5449
  }
5450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchService, decorators: [{
5450
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchService, decorators: [{
5451
5451
  type: Injectable,
5452
5452
  args: [{ providedIn: 'root' }]
5453
5453
  }] });
@@ -5474,10 +5474,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
5474
5474
  * multiple perspectives is optional.
5475
5475
  */
5476
5476
  class WorkbenchService {
5477
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5478
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchService, providedIn: 'root', useExisting: ɵWorkbenchService });
5477
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5478
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchService, providedIn: 'root', useExisting: ɵWorkbenchService });
5479
5479
  }
5480
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchService, decorators: [{
5480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchService, decorators: [{
5481
5481
  type: Injectable,
5482
5482
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchService }]
5483
5483
  }] });
@@ -5525,7 +5525,7 @@ function text(translatable, options) {
5525
5525
  // Call text provider.
5526
5526
  return runInInjectionContext(provideTextInjector, () => provideText(keyOrText));
5527
5527
  });
5528
- });
5528
+ }, ...(ngDevMode ? [{ debugName: "translation" }] : []));
5529
5529
  // Track translation in separate reactive context to not call the text provider function on translation change.
5530
5530
  return computed(() => translation()());
5531
5531
  }
@@ -5552,9 +5552,9 @@ function provideText(translatable) {
5552
5552
  * Parses a translation key into its key and parameters, if any.
5553
5553
  *
5554
5554
  * Examples:
5555
- * - %key // translation key
5556
- * - %key;param=value // translation key with a single param
5557
- * - %key;param1=value1;param2=value2 // translation key with multiple parameters
5555
+ * - `%key`: translation key
5556
+ * - `%key;param=value`: translation key with a single interpolation parameter
5557
+ * - `%key;param1=value1;param2=value2`: translation key with multiple interpolation parameters
5558
5558
  */
5559
5559
  function parseTranslatable(translationKey) {
5560
5560
  const { key, params } = /^%(?<key>[^;]+)(;(?<params>.*))?$/.exec(translationKey).groups;
@@ -5602,18 +5602,18 @@ function parseMatrixParams(matrixParams) {
5602
5602
  * Enables the translation of a given {@link Translatable}.
5603
5603
  *
5604
5604
  * A {@link Translatable} is a string that, if starting with the percent symbol (`%`), is passed to the text provider for translation, with the percent symbol omitted.
5605
- * Otherwise, the text is returned as is. A translation key can include parameters in matrix notation.
5605
+ * Otherwise, the text is returned as is. A translation key may include parameters in matrix notation for text interpolation.
5606
5606
  *
5607
5607
  * Examples:
5608
- * - `text`: no translatable text
5609
5608
  * - `%key`: translation key
5610
- * - `%key;param=value`: translation key with a single param
5611
- * - `%key;param1=value1;param2=value2`: translation key with multiple parameters
5609
+ * - `%key;param=value`: translation key with a single interpolation parameter
5610
+ * - `%key;param1=value1;param2=value2`: translation key with multiple interpolation parameters
5611
+ * - `text`: no translation key, text is returned as is
5612
5612
  *
5613
5613
  * @experimental since 20.0.0-beta.3; API and behavior may change in any version without notice.
5614
5614
  */
5615
5615
  class TextPipe {
5616
- _translatable = signal(undefined);
5616
+ _translatable = signal(undefined, ...(ngDevMode ? [{ debugName: "_translatable" }] : []));
5617
5617
  _text = text(this._translatable);
5618
5618
  transform(translatable) {
5619
5619
  // DO NOT call text() on key change to avoid stale RxJS subscriptions of previous texts,
@@ -5621,10 +5621,10 @@ class TextPipe {
5621
5621
  untracked(() => this._translatable.set(translatable));
5622
5622
  return this._text;
5623
5623
  }
5624
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
5625
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: TextPipe, isStandalone: true, name: "wbText" });
5624
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
5625
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: TextPipe, isStandalone: true, name: "wbText" });
5626
5626
  }
5627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextPipe, decorators: [{
5627
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextPipe, decorators: [{
5628
5628
  type: Pipe,
5629
5629
  args: [{ name: 'wbText' }]
5630
5630
  }] });
@@ -5690,12 +5690,12 @@ class WorkbenchDialog {
5690
5690
  }
5691
5691
  /** @inheritDoc */
5692
5692
  class ɵWorkbenchDialogSize {
5693
- _minHeight = signal(undefined);
5694
- _height = signal(undefined);
5695
- _maxHeight = signal(undefined);
5696
- _minWidth = signal(undefined);
5697
- _width = signal(undefined);
5698
- _maxWidth = signal(undefined);
5693
+ _minHeight = signal(undefined, ...(ngDevMode ? [{ debugName: "_minHeight" }] : []));
5694
+ _height = signal(undefined, ...(ngDevMode ? [{ debugName: "_height" }] : []));
5695
+ _maxHeight = signal(undefined, ...(ngDevMode ? [{ debugName: "_maxHeight" }] : []));
5696
+ _minWidth = signal(undefined, ...(ngDevMode ? [{ debugName: "_minWidth" }] : []));
5697
+ _width = signal(undefined, ...(ngDevMode ? [{ debugName: "_width" }] : []));
5698
+ _maxWidth = signal(undefined, ...(ngDevMode ? [{ debugName: "_maxWidth" }] : []));
5699
5699
  /** @inheritDoc */
5700
5700
  get minHeight() {
5701
5701
  return this._minHeight;
@@ -5805,10 +5805,10 @@ class WorkbenchDialogRegistry {
5805
5805
  this._dialogs$.value.forEach(dialog => dialog.destroy());
5806
5806
  this._dialogs$.next([]);
5807
5807
  }
5808
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5809
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogRegistry, providedIn: 'root' });
5808
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5809
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogRegistry, providedIn: 'root' });
5810
5810
  }
5811
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogRegistry, decorators: [{
5811
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogRegistry, decorators: [{
5812
5812
  type: Injectable,
5813
5813
  args: [{ providedIn: 'root' }]
5814
5814
  }] });
@@ -5870,10 +5870,10 @@ class WorkbenchBroadcastChannel {
5870
5870
  * Container for managing CSS classes set in different scopes.
5871
5871
  */
5872
5872
  class ClassList {
5873
- _layout = signal([], { equal: isEqualArray });
5874
- _navigation = signal([], { equal: isEqualArray });
5875
- _route = signal([], { equal: isEqualArray });
5876
- _application = signal([], { equal: isEqualArray });
5873
+ _layout = signal([], ...(ngDevMode ? [{ debugName: "_layout", equal: isEqualArray }] : [{ equal: isEqualArray }]));
5874
+ _navigation = signal([], ...(ngDevMode ? [{ debugName: "_navigation", equal: isEqualArray }] : [{ equal: isEqualArray }]));
5875
+ _route = signal([], ...(ngDevMode ? [{ debugName: "_route", equal: isEqualArray }] : [{ equal: isEqualArray }]));
5876
+ _application = signal([], ...(ngDevMode ? [{ debugName: "_application", equal: isEqualArray }] : [{ equal: isEqualArray }]));
5877
5877
  /**
5878
5878
  * CSS classes as list.
5879
5879
  */
@@ -5887,12 +5887,12 @@ class ClassList {
5887
5887
  .concat(this._layout())
5888
5888
  .concat(this._navigation())
5889
5889
  .concat(this._route())
5890
- .concat(this._application())));
5890
+ .concat(this._application())), ...(ngDevMode ? [{ debugName: "asList" }] : []));
5891
5891
  this.asMap = computed(() => removeEmptyEntries(new Map()
5892
5892
  .set('layout', this._layout())
5893
5893
  .set('navigation', this._navigation())
5894
5894
  .set('route', this._route())
5895
- .set('application', this._application())));
5895
+ .set('application', this._application())), ...(ngDevMode ? [{ debugName: "asMap" }] : []));
5896
5896
  }
5897
5897
  /**
5898
5898
  * Specifies CSS classes defined by the layout.
@@ -6024,9 +6024,9 @@ const WorkbenchRouteData = {
6024
6024
  class WbComponentPortal {
6025
6025
  _componentType;
6026
6026
  _options;
6027
- _viewContainerRef = signal(null);
6028
- _componentRef = signal(undefined);
6029
- _attached = signal(false);
6027
+ _viewContainerRef = signal(null, ...(ngDevMode ? [{ debugName: "_viewContainerRef" }] : []));
6028
+ _componentRef = signal(undefined, ...(ngDevMode ? [{ debugName: "_componentRef" }] : []));
6029
+ _attached = signal(false, ...(ngDevMode ? [{ debugName: "_attached" }] : []));
6030
6030
  _logger = inject(Logger);
6031
6031
  /**
6032
6032
  * Gets the {@link ComponentRef} of the portal, or `undefined` if not constructed.
@@ -6035,11 +6035,11 @@ class WbComponentPortal {
6035
6035
  /**
6036
6036
  * Gets the {@link HTMLElement} of the portal, or `undefined` if not constructed.
6037
6037
  */
6038
- element = computed(() => this.componentRef()?.location.nativeElement);
6038
+ element = computed(() => this.componentRef()?.location.nativeElement, ...(ngDevMode ? [{ debugName: "element" }] : []));
6039
6039
  /**
6040
6040
  * Indicates if the portal has been constructed.
6041
6041
  */
6042
- constructed = computed(() => !!this._componentRef());
6042
+ constructed = computed(() => !!this._componentRef(), ...(ngDevMode ? [{ debugName: "constructed" }] : []));
6043
6043
  /**
6044
6044
  * Indicates if the portal is attached to the DOM.
6045
6045
  */
@@ -6047,7 +6047,7 @@ class WbComponentPortal {
6047
6047
  /**
6048
6048
  * Indicates if the portal has been destroyed.
6049
6049
  */
6050
- destroyed = computed(() => this._componentRef() === null);
6050
+ destroyed = computed(() => this._componentRef() === null, ...(ngDevMode ? [{ debugName: "destroyed" }] : []));
6051
6051
  constructor(_componentType, _options) {
6052
6052
  // IMPORTANT: In order for the component to have the "correct" injection context, construct it the time attaching it to the Angular component tree,
6053
6053
  // or by calling {@link construct}. The "correct" injection context is crucial, for example, if the portal is displayed in a router outlet, so that
@@ -6156,12 +6156,12 @@ function createPortalComponent(componentType, options) {
6156
6156
  * Use this directive on nested router outlets to be the target of top-level routes, i.e., routes registered by the workbench for each part and view.
6157
6157
  */
6158
6158
  class RouterOutletRootContextDirective {
6159
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: RouterOutletRootContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6160
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.2", type: RouterOutletRootContextDirective, isStandalone: true, selector: "router-outlet[wbRouterOutletRootContext]", providers: [
6159
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: RouterOutletRootContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6160
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.3", type: RouterOutletRootContextDirective, isStandalone: true, selector: "router-outlet[wbRouterOutletRootContext]", providers: [
6161
6161
  { provide: ChildrenOutletContexts, useFactory: () => inject(ApplicationRef).injector.get(ChildrenOutletContexts) },
6162
6162
  ], ngImport: i0 });
6163
6163
  }
6164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: RouterOutletRootContextDirective, decorators: [{
6164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: RouterOutletRootContextDirective, decorators: [{
6165
6165
  type: Directive,
6166
6166
  args: [{
6167
6167
  selector: 'router-outlet[wbRouterOutletRootContext]',
@@ -6237,10 +6237,10 @@ class PartSlotComponent {
6237
6237
  }
6238
6238
  });
6239
6239
  }
6240
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6241
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: PartSlotComponent, isStandalone: true, selector: "wb-part-slot", viewQueries: [{ propertyName: "_viewport", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<sci-viewport>\r\n <router-outlet [name]=\"part.id\" wbRouterOutletRootContext/>\r\n</sci-viewport>\r\n", styles: [":host{display:flex;flex-direction:column}: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", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterOutletRootContextDirective, selector: "router-outlet[wbRouterOutletRootContext]" }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] });
6240
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6241
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: PartSlotComponent, isStandalone: true, selector: "wb-part-slot", viewQueries: [{ propertyName: "_viewport", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<sci-viewport>\r\n <router-outlet [name]=\"part.id\" wbRouterOutletRootContext/>\r\n</sci-viewport>\r\n", styles: [":host{display:flex;flex-direction:column}: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", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterOutletRootContextDirective, selector: "router-outlet[wbRouterOutletRootContext]" }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] });
6242
6242
  }
6243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartSlotComponent, decorators: [{
6243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartSlotComponent, decorators: [{
6244
6244
  type: Component,
6245
6245
  args: [{ selector: 'wb-part-slot', imports: [
6246
6246
  RouterOutlet,
@@ -6346,10 +6346,10 @@ class ViewDropPlaceholderRenderer {
6346
6346
  },
6347
6347
  });
6348
6348
  }
6349
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDropPlaceholderRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6350
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDropPlaceholderRenderer, providedIn: 'root' });
6349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDropPlaceholderRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6350
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDropPlaceholderRenderer, providedIn: 'root' });
6351
6351
  }
6352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDropPlaceholderRenderer, decorators: [{
6352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDropPlaceholderRenderer, decorators: [{
6353
6353
  type: Injectable,
6354
6354
  args: [{ providedIn: 'root' }]
6355
6355
  }] });
@@ -6375,20 +6375,20 @@ class ViewDropZoneDirective {
6375
6375
  /**
6376
6376
  * Specifies the regions where views can be dropped. Defaults to every region.
6377
6377
  */
6378
- regions = input(undefined, { alias: 'wbViewDropZoneRegions' });
6378
+ regions = input(undefined, ...(ngDevMode ? [{ debugName: "regions", alias: 'wbViewDropZoneRegions' }] : [{ alias: 'wbViewDropZoneRegions' }]));
6379
6379
  /**
6380
6380
  * Specifies attribute(s) to add to the drop zone.
6381
6381
  */
6382
- attributes = input(undefined, { alias: 'wbViewDropZoneAttributes' });
6382
+ attributes = input(undefined, ...(ngDevMode ? [{ debugName: "attributes", alias: 'wbViewDropZoneAttributes' }] : [{ alias: 'wbViewDropZoneAttributes' }]));
6383
6383
  /**
6384
6384
  * Specifies the size of a drop zone region, either as percentage value [0,1] or absolute pixel value.
6385
6385
  */
6386
- dropRegionSize = input(.5, { alias: 'wbViewDropZoneRegionSize', transform: (value) => value ?? .5 });
6386
+ dropRegionSize = input(.5, ...(ngDevMode ? [{ debugName: "dropRegionSize", alias: 'wbViewDropZoneRegionSize', transform: (value) => value ?? .5 }] : [{ alias: 'wbViewDropZoneRegionSize', transform: (value) => value ?? .5 }]));
6387
6387
  /**
6388
6388
  * Specifies the size of the visual placeholder when dragging a view over a drop region.
6389
6389
  * Can be a percentage value [0,1] or absolute pixel value. Defaults to {@link dropRegionSize}.
6390
6390
  */
6391
- dropPlaceholderSize = input(undefined, { alias: 'wbViewDropZonePlaceholderSize' });
6391
+ dropPlaceholderSize = input(undefined, ...(ngDevMode ? [{ debugName: "dropPlaceholderSize", alias: 'wbViewDropZonePlaceholderSize' }] : [{ alias: 'wbViewDropZonePlaceholderSize' }]));
6392
6392
  /**
6393
6393
  * Notifies when dropping a view.
6394
6394
  */
@@ -6403,7 +6403,7 @@ class ViewDropZoneDirective {
6403
6403
  _dropRegionSize = computed(() => ({
6404
6404
  maxHeight: coercePixelValue(this.dropRegionSize(), { containerSize: this._boundingClientRect().height }),
6405
6405
  maxWidth: coercePixelValue(this.dropRegionSize(), { containerSize: this._boundingClientRect().width }),
6406
- }));
6406
+ }), ...(ngDevMode ? [{ debugName: "_dropRegionSize" }] : []));
6407
6407
  constructor() {
6408
6408
  this.installDropZone();
6409
6409
  this.installDropPlaceholderRenderer();
@@ -6598,10 +6598,10 @@ class ViewDropZoneDirective {
6598
6598
  const { x, y, width, height } = this._boundingClientRect();
6599
6599
  return new DOMRect(x + (region === 'east' ? width - coercePixelValue(size, { containerSize: width }) : 0), y + (region === 'south' ? height - coercePixelValue(size, { containerSize: height }) : 0), region === 'west' || region === 'east' ? coercePixelValue(size, { containerSize: width }) : width, region === 'north' || region === 'south' ? coercePixelValue(size, { containerSize: height }) : height);
6600
6600
  }
6601
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDropZoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6602
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: ViewDropZoneDirective, isStandalone: true, selector: "[wbViewDropZone]", inputs: { regions: { classPropertyName: "regions", publicName: "wbViewDropZoneRegions", isSignal: true, isRequired: false, transformFunction: null }, attributes: { classPropertyName: "attributes", publicName: "wbViewDropZoneAttributes", isSignal: true, isRequired: false, transformFunction: null }, dropRegionSize: { classPropertyName: "dropRegionSize", publicName: "wbViewDropZoneRegionSize", isSignal: true, isRequired: false, transformFunction: null }, dropPlaceholderSize: { classPropertyName: "dropPlaceholderSize", publicName: "wbViewDropZonePlaceholderSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { viewDrop: "wbViewDropZoneDrop" }, ngImport: i0 });
6601
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDropZoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6602
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: ViewDropZoneDirective, isStandalone: true, selector: "[wbViewDropZone]", inputs: { regions: { classPropertyName: "regions", publicName: "wbViewDropZoneRegions", isSignal: true, isRequired: false, transformFunction: null }, attributes: { classPropertyName: "attributes", publicName: "wbViewDropZoneAttributes", isSignal: true, isRequired: false, transformFunction: null }, dropRegionSize: { classPropertyName: "dropRegionSize", publicName: "wbViewDropZoneRegionSize", isSignal: true, isRequired: false, transformFunction: null }, dropPlaceholderSize: { classPropertyName: "dropPlaceholderSize", publicName: "wbViewDropZonePlaceholderSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { viewDrop: "wbViewDropZoneDrop" }, ngImport: i0 });
6603
6603
  }
6604
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDropZoneDirective, decorators: [{
6604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDropZoneDirective, decorators: [{
6605
6605
  type: Directive,
6606
6606
  args: [{ selector: '[wbViewDropZone]' }]
6607
6607
  }], ctorParameters: () => [] });
@@ -6704,11 +6704,11 @@ class WorkbenchPortalOutletDirective {
6704
6704
  /**
6705
6705
  * Specifies the portal.
6706
6706
  */
6707
- portal = input.required({ alias: 'wbPortalOutlet' });
6707
+ portal = input.required(...(ngDevMode ? [{ debugName: "portal", alias: 'wbPortalOutlet' }] : [{ alias: 'wbPortalOutlet' }]));
6708
6708
  /**
6709
6709
  * Controls if to detach the portal's component instead of destroying it when this directive is destroyed, such as during a page re-layout
6710
6710
  */
6711
- destroyOnDetach = input.required({ alias: 'wbPortalOutletDestroyOnDetach' });
6711
+ destroyOnDetach = input.required(...(ngDevMode ? [{ debugName: "destroyOnDetach", alias: 'wbPortalOutletDestroyOnDetach' }] : [{ alias: 'wbPortalOutletDestroyOnDetach' }]));
6712
6712
  _viewContainerRef = inject(ViewContainerRef);
6713
6713
  constructor() {
6714
6714
  const nullTemplate = inject(TemplateRef);
@@ -6742,10 +6742,10 @@ class WorkbenchPortalOutletDirective {
6742
6742
  portal.detach();
6743
6743
  }
6744
6744
  }
6745
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchPortalOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6746
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchPortalOutletDirective, isStandalone: true, selector: "ng-template[wbPortalOutlet]", inputs: { portal: { classPropertyName: "portal", publicName: "wbPortalOutlet", isSignal: true, isRequired: true, transformFunction: null }, destroyOnDetach: { classPropertyName: "destroyOnDetach", publicName: "wbPortalOutletDestroyOnDetach", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
6745
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchPortalOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6746
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchPortalOutletDirective, isStandalone: true, selector: "ng-template[wbPortalOutlet]", inputs: { portal: { classPropertyName: "portal", publicName: "wbPortalOutlet", isSignal: true, isRequired: true, transformFunction: null }, destroyOnDetach: { classPropertyName: "destroyOnDetach", publicName: "wbPortalOutletDestroyOnDetach", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
6747
6747
  }
6748
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchPortalOutletDirective, decorators: [{
6748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchPortalOutletDirective, decorators: [{
6749
6749
  type: Directive,
6750
6750
  args: [{ selector: 'ng-template[wbPortalOutlet]' }]
6751
6751
  }], ctorParameters: () => [] });
@@ -6770,10 +6770,10 @@ class PartPortalPipe {
6770
6770
  }
6771
6771
  return this._partRegistry.get(partId).portal;
6772
6772
  }
6773
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartPortalPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6774
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: PartPortalPipe, isStandalone: true, name: "wbPartPortal" });
6773
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartPortalPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6774
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: PartPortalPipe, isStandalone: true, name: "wbPartPortal" });
6775
6775
  }
6776
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartPortalPipe, decorators: [{
6776
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartPortalPipe, decorators: [{
6777
6777
  type: Pipe,
6778
6778
  args: [{ name: 'wbPartPortal' }]
6779
6779
  }] });
@@ -6801,10 +6801,10 @@ class TreeNodeSashSizesPipe {
6801
6801
  }
6802
6802
  return [`${1 / (1 - ratio)}`, `${1 / ratio}`];
6803
6803
  }
6804
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TreeNodeSashSizesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6805
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: TreeNodeSashSizesPipe, isStandalone: true, name: "wbTreeNodeSashSizes" });
6804
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TreeNodeSashSizesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6805
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: TreeNodeSashSizesPipe, isStandalone: true, name: "wbTreeNodeSashSizes" });
6806
6806
  }
6807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TreeNodeSashSizesPipe, decorators: [{
6807
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TreeNodeSashSizesPipe, decorators: [{
6808
6808
  type: Pipe,
6809
6809
  args: [{ name: 'wbTreeNodeSashSizes' }]
6810
6810
  }] });
@@ -6828,11 +6828,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
6828
6828
  * Nodes are rendered as {@link SciSashboxComponent} and parts as {@link PartComponent} or {@link MainAreaPartComponent}.
6829
6829
  */
6830
6830
  class GridElementComponent {
6831
- element = input.required();
6831
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
6832
6832
  _workbenchRouter = inject(ɵWorkbenchRouter);
6833
6833
  _workbenchLayoutService = inject(WorkbenchLayoutService);
6834
- nodeId = computed(() => this.element() instanceof MTreeNode ? this.element().id : undefined);
6835
- partId = computed(() => this.element() instanceof MPart ? this.element().id : undefined);
6834
+ nodeId = computed(() => this.element() instanceof MTreeNode ? this.element().id : undefined, ...(ngDevMode ? [{ debugName: "nodeId" }] : []));
6835
+ partId = computed(() => this.element() instanceof MPart ? this.element().id : undefined, ...(ngDevMode ? [{ debugName: "partId" }] : []));
6836
6836
  onSashStart() {
6837
6837
  this._workbenchLayoutService.signalResizing(true);
6838
6838
  }
@@ -6841,10 +6841,10 @@ class GridElementComponent {
6841
6841
  this._workbenchLayoutService.signalResizing(false);
6842
6842
  void this._workbenchRouter.navigate(layout => layout.setTreeNodeSplitRatio(treeNode.id, ratio));
6843
6843
  }
6844
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: GridElementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6845
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: GridElementComponent, isStandalone: true, selector: "wb-grid-element", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-parentnodeid": "element().parent?.id", "attr.data-nodeid": "nodeId()", "attr.data-partid": "partId()" } }, ngImport: i0, template: "@let element = this.element();\n\n@if (element.type === 'MPart') {\n <ng-container *wbPortalOutlet=\"element.id | wbPartPortal; destroyOnDetach: true\"/>\n} @else if (element.child1.visible && element.child2.visible) {\n @let sashSizes = element.ratio | wbTreeNodeSashSizes;\n <sci-sashbox [direction]=\"element.direction\"\n [attr.data-nodeid]=\"element.id\"\n (sashStart)=\"onSashStart()\"\n (sashEnd)=\"onSashEnd(element, $event)\">\n <!-- Child 1 -->\n <ng-template sciSash [size]=\"sashSizes[0]\" key=\"sash1\">\n <wb-grid-element [element]=\"element.child1\" class=\"sash-1\"/>\n </ng-template>\n <!-- Child 2 -->\n <ng-template sciSash [size]=\"sashSizes[1]\" key=\"sash2\">\n <wb-grid-element [element]=\"element.child2\" class=\"sash-2\"/>\n </ng-template>\n </sci-sashbox>\n} @else if (element.child1.visible) {\n <wb-grid-element [element]=\"element.child1\"/>\n} @else if (element.child2.visible) {\n <wb-grid-element [element]=\"element.child2\"/>\n}\n", styles: [":host{display:grid;overflow:hidden}:host>sci-sashbox{z-index:auto}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }, { 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", "key", "animate"], exportAs: ["sciSash"] }, { kind: "pipe", type: TreeNodeSashSizesPipe, name: "wbTreeNodeSashSizes" }] });
6844
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GridElementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6845
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: GridElementComponent, isStandalone: true, selector: "wb-grid-element", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-parentnodeid": "element().parent?.id", "attr.data-nodeid": "nodeId()", "attr.data-partid": "partId()" } }, ngImport: i0, template: "@let element = this.element();\n\n@if (element.type === 'MPart') {\n <ng-container *wbPortalOutlet=\"element.id | wbPartPortal; destroyOnDetach: true\"/>\n} @else if (element.child1.visible && element.child2.visible) {\n @let sashSizes = element.ratio | wbTreeNodeSashSizes;\n <sci-sashbox [direction]=\"element.direction\"\n [attr.data-nodeid]=\"element.id\"\n (sashStart)=\"onSashStart()\"\n (sashEnd)=\"onSashEnd(element, $event)\">\n <!-- Child 1 -->\n <ng-template sciSash [size]=\"sashSizes[0]\" key=\"sash1\">\n <wb-grid-element [element]=\"element.child1\" class=\"sash-1\"/>\n </ng-template>\n <!-- Child 2 -->\n <ng-template sciSash [size]=\"sashSizes[1]\" key=\"sash2\">\n <wb-grid-element [element]=\"element.child2\" class=\"sash-2\"/>\n </ng-template>\n </sci-sashbox>\n} @else if (element.child1.visible) {\n <wb-grid-element [element]=\"element.child1\"/>\n} @else if (element.child2.visible) {\n <wb-grid-element [element]=\"element.child2\"/>\n}\n", styles: [":host{display:grid;overflow:hidden}:host>sci-sashbox{z-index:auto}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }, { kind: "component", type: SciSashboxComponent, selector: "sci-sashbox", inputs: ["direction"], outputs: ["sashStart", "sashEnd"] }, { kind: "directive", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: ["size", "minSize", "key", "animate"], exportAs: ["sciSash"] }, { kind: "pipe", type: PartPortalPipe, name: "wbPartPortal" }, { kind: "pipe", type: TreeNodeSashSizesPipe, name: "wbTreeNodeSashSizes" }] });
6846
6846
  }
6847
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: GridElementComponent, decorators: [{
6847
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GridElementComponent, decorators: [{
6848
6848
  type: Component,
6849
6849
  args: [{ selector: 'wb-grid-element', imports: [
6850
6850
  WorkbenchPortalOutletDirective,
@@ -6877,10 +6877,10 @@ class RequiresDropZonePipe {
6877
6877
  transform(element, region) {
6878
6878
  return requiresDropZone(element, region);
6879
6879
  }
6880
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: RequiresDropZonePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6881
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: RequiresDropZonePipe, isStandalone: true, name: "wbRequiresDropZone" });
6880
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: RequiresDropZonePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6881
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: RequiresDropZonePipe, isStandalone: true, name: "wbRequiresDropZone" });
6882
6882
  }
6883
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: RequiresDropZonePipe, decorators: [{
6883
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: RequiresDropZonePipe, decorators: [{
6884
6884
  type: Pipe,
6885
6885
  args: [{ name: 'wbRequiresDropZone' }]
6886
6886
  }] });
@@ -6946,11 +6946,11 @@ class GridComponent {
6946
6946
  /**
6947
6947
  * Specifies the grid to render.
6948
6948
  */
6949
- grid = input.required();
6949
+ grid = input.required(...(ngDevMode ? [{ debugName: "grid" }] : []));
6950
6950
  /**
6951
6951
  * Controls dropping at the grid boundaries.
6952
6952
  */
6953
- gridDropZone = input(false);
6953
+ gridDropZone = input(false, ...(ngDevMode ? [{ debugName: "gridDropZone" }] : []));
6954
6954
  _workbenchId = inject(WORKBENCH_ID);
6955
6955
  _viewDragService = inject(ViewDragService);
6956
6956
  canDrop = inject(ViewDragService).canDrop(this.grid);
@@ -6972,10 +6972,10 @@ class GridComponent {
6972
6972
  dragData: event.dragData,
6973
6973
  });
6974
6974
  }
6975
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: GridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6976
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: GridComponent, isStandalone: true, selector: "wb-grid", inputs: { grid: { classPropertyName: "grid", publicName: "grid", isSignal: true, isRequired: true, transformFunction: null }, gridDropZone: { classPropertyName: "gridDropZone", publicName: "gridDropZone", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let dropZone = gridDropZone();\n@if (dropZone) {\n <wb-grid-element [element]=\"grid().root\"\n wbViewDropZone\n [wbViewDropZoneRegionSize]=\"dropZone.dropRegionSize\"\n [wbViewDropZonePlaceholderSize]=\"dropZone.dropPlaceholderSize\"\n [wbViewDropZoneRegions]=\"canDrop() && {\n north: false,\n south: grid().root | wbRequiresDropZone:'south',\n west: grid().root | wbRequiresDropZone:'west',\n east: grid().root | wbRequiresDropZone:'east',\n center: false,\n }\"\n [wbViewDropZoneAttributes]=\"dropZone.dropZoneAttributes\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"/>\n} @else {\n <wb-grid-element [element]=\"grid().root\"/>\n}\n", styles: [":host{display:grid}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "pipe", type: RequiresDropZonePipe, name: "wbRequiresDropZone" }] });
6975
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6976
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: GridComponent, isStandalone: true, selector: "wb-grid", inputs: { grid: { classPropertyName: "grid", publicName: "grid", isSignal: true, isRequired: true, transformFunction: null }, gridDropZone: { classPropertyName: "gridDropZone", publicName: "gridDropZone", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let dropZone = gridDropZone();\n@if (dropZone) {\n <wb-grid-element [element]=\"grid().root\"\n wbViewDropZone\n [wbViewDropZoneRegionSize]=\"dropZone.dropRegionSize\"\n [wbViewDropZonePlaceholderSize]=\"dropZone.dropPlaceholderSize\"\n [wbViewDropZoneRegions]=\"canDrop() && {\n north: false,\n south: grid().root | wbRequiresDropZone:'south',\n west: grid().root | wbRequiresDropZone:'west',\n east: grid().root | wbRequiresDropZone:'east',\n center: false,\n }\"\n [wbViewDropZoneAttributes]=\"dropZone.dropZoneAttributes\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"/>\n} @else {\n <wb-grid-element [element]=\"grid().root\"/>\n}\n", styles: [":host{display:grid}\n"], dependencies: [{ kind: "component", type: GridElementComponent, selector: "wb-grid-element", inputs: ["element"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "pipe", type: RequiresDropZonePipe, name: "wbRequiresDropZone" }] });
6977
6977
  }
6978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: GridComponent, decorators: [{
6978
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GridComponent, decorators: [{
6979
6979
  type: Component,
6980
6980
  args: [{ selector: 'wb-grid', imports: [
6981
6981
  GridElementComponent,
@@ -7078,10 +7078,10 @@ class DesktopSlotComponent {
7078
7078
  </wb-workbench>
7079
7079
  `);
7080
7080
  }
7081
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DesktopSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7082
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: DesktopSlotComponent, isStandalone: true, selector: "wb-desktop-slot", viewQueries: [{ propertyName: "_viewport", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<sci-viewport>\r\n @let template = desktop.template();\r\n @if (template) {\r\n <ng-container *ngTemplateOutlet=\"template\"/>\r\n } @else {\r\n <router-outlet (activate)=\"onLegacyDesktopActivate()\"/>\r\n }\r\n</sci-viewport>\r\n", styles: [":host{display:flex;flex-direction:column}: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", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
7081
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DesktopSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7082
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: DesktopSlotComponent, isStandalone: true, selector: "wb-desktop-slot", viewQueries: [{ propertyName: "_viewport", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<sci-viewport>\r\n @let template = desktop.template();\r\n @if (template) {\r\n <ng-container *ngTemplateOutlet=\"template\"/>\r\n } @else {\r\n <router-outlet (activate)=\"onLegacyDesktopActivate()\"/>\r\n }\r\n</sci-viewport>\r\n", styles: [":host{display:flex;flex-direction:column}: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", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
7083
7083
  }
7084
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DesktopSlotComponent, decorators: [{
7084
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DesktopSlotComponent, decorators: [{
7085
7085
  type: Component,
7086
7086
  args: [{ selector: 'wb-desktop-slot', imports: [
7087
7087
  RouterOutlet,
@@ -7103,7 +7103,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
7103
7103
  * A desktop is a visual workbench element for displaying content when the layout is empty (no view and no navigated part).
7104
7104
  */
7105
7105
  class WorkbenchDesktop {
7106
- template = signal(undefined);
7106
+ template = signal(undefined, ...(ngDevMode ? [{ debugName: "template" }] : []));
7107
7107
  slot;
7108
7108
  constructor() {
7109
7109
  this.slot = { portal: this.createPortal() };
@@ -7115,10 +7115,10 @@ class WorkbenchDesktop {
7115
7115
  ],
7116
7116
  });
7117
7117
  }
7118
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDesktop, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7119
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDesktop, providedIn: 'root' });
7118
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDesktop, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7119
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDesktop, providedIn: 'root' });
7120
7120
  }
7121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDesktop, decorators: [{
7121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDesktop, decorators: [{
7122
7122
  type: Injectable,
7123
7123
  args: [{ providedIn: 'root' }]
7124
7124
  }], ctorParameters: () => [] });
@@ -7158,7 +7158,7 @@ class MainAreaPartComponent {
7158
7158
  _layout = inject(WorkbenchLayoutService).layout;
7159
7159
  _viewDragService = inject(ViewDragService);
7160
7160
  part = inject(ɵWorkbenchPart);
7161
- mainAreaGrid = computed(() => this._layout().grids.mainArea);
7161
+ mainAreaGrid = computed(() => this._layout().grids.mainArea, ...(ngDevMode ? [{ debugName: "mainAreaGrid" }] : []));
7162
7162
  desktop = inject(WorkbenchDesktop);
7163
7163
  dasherize = dasherize;
7164
7164
  canDrop = inject(ViewDragService).canDrop(computed(() => this._layout().grids.mainArea));
@@ -7180,10 +7180,10 @@ class MainAreaPartComponent {
7180
7180
  dragData: event.dragData,
7181
7181
  });
7182
7182
  }
7183
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MainAreaPartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7184
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: MainAreaPartComponent, isStandalone: true, selector: "wb-part[data-partid=\"part.main-area\"]", host: { properties: { "attr.data-grid": "dasherize(part.gridName())", "attr.data-active": "part.active() ? '' : null" } }, ngImport: i0, template: "@if (mainAreaGrid().root.visible) {\n <wb-grid [grid]=\"mainAreaGrid()\"\n [gridDropZone]=\"{\n dropRegionSize: 100,\n dropPlaceholderSize: 100,\n dropZoneAttributes: {\n 'data-grid': 'main-area',\n 'data-partid': part.id,\n }\n }\"\n [attr.data-grid]=\"'main-area'\"\n class=\"e2e-content\"/>\n} @else {\n <div wbViewDropZone\n [wbViewDropZoneRegions]=\"canDrop() && {center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneAttributes]=\"{\n 'data-desktop': '',\n 'data-partid': part.id,\n }\"\n (wbViewDropZoneDrop)=\"onDesktopViewDrop($event)\"\n class=\"desktop e2e-part-content e2e-content\">\n @if (part.navigation()) {\n <ng-container *wbPortalOutlet=\"part.slot.portal; destroyOnDetach: false\"/>\n } @else {\n <ng-container *wbPortalOutlet=\"desktop.slot.portal; destroyOnDetach: false\"/>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>wb-grid{flex:auto}:host>div.desktop{flex:auto;display:grid;position:relative}\n"], dependencies: [{ kind: "component", type: GridComponent, selector: "wb-grid", inputs: ["grid", "gridDropZone"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }] });
7183
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MainAreaPartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7184
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: MainAreaPartComponent, isStandalone: true, selector: "wb-part[data-partid=\"part.main-area\"]", host: { properties: { "attr.data-grid": "dasherize(part.gridName())", "attr.data-active": "part.active() ? '' : null" } }, ngImport: i0, template: "@if (mainAreaGrid().root.visible) {\n <wb-grid [grid]=\"mainAreaGrid()\"\n [gridDropZone]=\"{\n dropRegionSize: 100,\n dropPlaceholderSize: 100,\n dropZoneAttributes: {\n 'data-grid': 'main-area',\n 'data-partid': part.id,\n }\n }\"\n [attr.data-grid]=\"'main-area'\"\n class=\"e2e-content\"/>\n} @else {\n <div wbViewDropZone\n [wbViewDropZoneRegions]=\"canDrop() && {center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneAttributes]=\"{\n 'data-desktop': '',\n 'data-partid': part.id,\n }\"\n (wbViewDropZoneDrop)=\"onDesktopViewDrop($event)\"\n class=\"desktop e2e-part-content e2e-content\">\n @if (part.navigation()) {\n <ng-container *wbPortalOutlet=\"part.slot.portal; destroyOnDetach: false\"/>\n } @else {\n <ng-container *wbPortalOutlet=\"desktop.slot.portal; destroyOnDetach: false\"/>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>wb-grid{flex:auto}:host>div.desktop{flex:auto;display:grid;position:relative}\n"], dependencies: [{ kind: "component", type: GridComponent, selector: "wb-grid", inputs: ["grid", "gridDropZone"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }] });
7185
7185
  }
7186
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MainAreaPartComponent, decorators: [{
7186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MainAreaPartComponent, decorators: [{
7187
7187
  type: Component,
7188
7188
  args: [{ selector: `wb-part[data-partid="${MAIN_AREA}"]`, imports: [
7189
7189
  GridComponent,
@@ -7211,10 +7211,10 @@ class InstanceofPipe {
7211
7211
  transform(object, type) {
7212
7212
  return object instanceof type ? object : null;
7213
7213
  }
7214
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: InstanceofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
7215
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: InstanceofPipe, isStandalone: true, name: "wbInstanceof" });
7214
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: InstanceofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
7215
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: InstanceofPipe, isStandalone: true, name: "wbInstanceof" });
7216
7216
  }
7217
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: InstanceofPipe, decorators: [{
7217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: InstanceofPipe, decorators: [{
7218
7218
  type: Pipe,
7219
7219
  args: [{ name: 'wbInstanceof' }]
7220
7220
  }] });
@@ -7229,14 +7229,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
7229
7229
  * SPDX-License-Identifier: EPL-2.0
7230
7230
  */
7231
7231
  class PartActionComponent {
7232
- action = input.required({ transform: (action) => runInInjectionContext(this._injector, () => transform$1(action)) });
7232
+ action = input.required(...(ngDevMode ? [{ debugName: "action", transform: (action) => runInInjectionContext(this._injector, () => transform$1(action)) }] : [{ transform: (action) => runInInjectionContext(this._injector, () => transform$1(action)) }]));
7233
7233
  _injector = inject(Injector);
7234
7234
  TemplatePartAction = TemplatePartAction;
7235
7235
  ComponentPartAction = ComponentPartAction;
7236
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7237
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: PartActionComponent, isStandalone: true, selector: "wb-part-action", inputs: { action: { classPropertyName: "action", publicName: "action", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (action() | wbInstanceof:TemplatePartAction; as action) {\r\n <ng-container *ngTemplateOutlet=\"action.template; context: action.context; injector: action.injector\"/>\r\n}\r\n@if (action() | wbInstanceof:ComponentPartAction; as action) {\r\n <ng-container *ngComponentOutlet=\"action.component; inputs: action.inputs; injector: action.injector\"/>\r\n}\r\n", styles: [":host{display:inline-grid}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: InstanceofPipe, name: "wbInstanceof" }] });
7236
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7237
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: PartActionComponent, isStandalone: true, selector: "wb-part-action", inputs: { action: { classPropertyName: "action", publicName: "action", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (action() | wbInstanceof:TemplatePartAction; as action) {\r\n <ng-container *ngTemplateOutlet=\"action.template; context: action.context; injector: action.injector\"/>\r\n}\r\n@if (action() | wbInstanceof:ComponentPartAction; as action) {\r\n <ng-container *ngComponentOutlet=\"action.component; inputs: action.inputs; injector: action.injector\"/>\r\n}\r\n", styles: [":host{display:inline-grid}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: InstanceofPipe, name: "wbInstanceof" }] });
7238
7238
  }
7239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartActionComponent, decorators: [{
7239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartActionComponent, decorators: [{
7240
7240
  type: Component,
7241
7241
  args: [{ selector: 'wb-part-action', imports: [
7242
7242
  NgTemplateOutlet,
@@ -7330,7 +7330,7 @@ class IconComponent {
7330
7330
  *
7331
7331
  * Refer to the installed icon providers for a list of supported icons.
7332
7332
  */
7333
- icon = input.required();
7333
+ icon = input.required(...(ngDevMode ? [{ debugName: "icon" }] : []));
7334
7334
  _injector = inject(Injector);
7335
7335
  _host = inject(ElementRef).nativeElement;
7336
7336
  _renderer = inject(Renderer2);
@@ -7370,10 +7370,10 @@ class IconComponent {
7370
7370
  });
7371
7371
  }, { injector: this._injector });
7372
7372
  }
7373
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7374
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.2", type: IconComponent, isStandalone: true, selector: "wb-icon", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '', isInline: true, styles: [":host{display:inline-grid;place-content:center;font-size:1em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7373
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7374
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.3", type: IconComponent, isStandalone: true, selector: "wb-icon", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '', isInline: true, styles: [":host{display:inline-grid;place-content:center;font-size:1em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7375
7375
  }
7376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: IconComponent, decorators: [{
7376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: IconComponent, decorators: [{
7377
7377
  type: Component,
7378
7378
  args: [{ selector: 'wb-icon', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-grid;place-content:center;font-size:1em}\n"] }]
7379
7379
  }], ctorParameters: () => [] });
@@ -7405,10 +7405,10 @@ function computeIconDescriptor(icon) {
7405
7405
  * Acts as placeholder if no icon could be found.
7406
7406
  */
7407
7407
  class NullIconComponent {
7408
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NullIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7409
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.2", type: NullIconComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: '', isInline: true });
7408
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NullIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7409
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: NullIconComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: '', isInline: true });
7410
7410
  }
7411
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NullIconComponent, decorators: [{
7411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NullIconComponent, decorators: [{
7412
7412
  type: Component,
7413
7413
  args: [{ template: '' }]
7414
7414
  }] });
@@ -7430,12 +7430,12 @@ class FilterFieldComponent {
7430
7430
  * Sets focus order in sequential keyboard navigation.
7431
7431
  * If not specified, the focus order is according to the position in the document (tabindex=0).
7432
7432
  */
7433
- tabindex = input();
7433
+ tabindex = input(...(ngDevMode ? [undefined, { debugName: "tabindex" }] : []));
7434
7434
  /**
7435
7435
  * Specifies the hint displayed when this field is empty.
7436
7436
  */
7437
- placeholder = input();
7438
- disabled = input(false, { transform: booleanAttribute });
7437
+ placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
7438
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
7439
7439
  /**
7440
7440
  * Emits on filter change.
7441
7441
  */
@@ -7510,12 +7510,12 @@ class FilterFieldComponent {
7510
7510
  this.formControl.setValue(value ?? '', { emitEvent: false });
7511
7511
  this._cd.markForCheck();
7512
7512
  }
7513
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: FilterFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7514
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: FilterFieldComponent, isStandalone: true, selector: "wb-filter-field", inputs: { tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "filter" }, host: { listeners: { "focus": "focus()" }, properties: { "attr.tabindex": "this.componentTabindex", "class.empty": "this.empty" } }, providers: [
7513
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: FilterFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7514
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: FilterFieldComponent, isStandalone: true, selector: "wb-filter-field", inputs: { tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "filter" }, host: { listeners: { "focus": "focus()" }, properties: { "attr.tabindex": "this.componentTabindex", "class.empty": "this.empty" } }, providers: [
7515
7515
  { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => FilterFieldComponent) },
7516
- ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<label [for]=\"id\" class=\"filter-icon\">\n <wb-icon icon=\"workbench.search\"/>\n</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\" tabindex=\"-1\" (click)=\"onClear()\" [title]=\"('%workbench.clear.tooltip' | wbText)()\">\n <wb-icon icon=\"workbench.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.25em}:host>input{all:unset;flex:auto;min-width:0}:host>input::placeholder{color:var(--sci-color-gray-400)}:host>button.clear:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;align-self:center}:host>button.clear:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.clear:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.clear:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.clear:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.clear:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host:not(:focus-within):not(:hover)>button.clear:is(button,#sci-reset),:host:has(>input:disabled)>button.clear:is(button,#sci-reset),:host.empty>button.clear:is(button,#sci-reset){visibility:hidden}:host:has(>input:disabled)>label.filter-icon{color:var(--sci-color-text-subtlest)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7516
+ ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<label [for]=\"id\" class=\"filter-icon\">\n <wb-icon icon=\"workbench.search\"/>\n</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\" tabindex=\"-1\" (click)=\"onClear()\" [title]=\"('%workbench.clear.tooltip' | wbText)()\">\n <wb-icon icon=\"workbench.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.25em}:host>input{all:unset;flex:auto;min-width:0}:host>input::placeholder{color:var(--sci-color-gray-400)}:host>button.clear:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;align-self:center}:host>button.clear:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.clear:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.clear:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.clear:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.clear:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host:not(:focus-within):not(:hover)>button.clear:is(button,#sci-reset),:host:has(>input:disabled)>button.clear:is(button,#sci-reset),:host.empty>button.clear:is(button,#sci-reset){visibility:hidden}:host:has(>input:disabled)>label.filter-icon{color:var(--sci-color-text-subtlest)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: TextPipe, name: "wbText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7517
7517
  }
7518
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: FilterFieldComponent, decorators: [{
7518
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: FilterFieldComponent, decorators: [{
7519
7519
  type: Component,
7520
7520
  args: [{ selector: 'wb-filter-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
7521
7521
  ReactiveFormsModule,
@@ -7546,10 +7546,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
7546
7546
  */
7547
7547
  class ViewTabContentComponent {
7548
7548
  view = inject(WorkbenchView);
7549
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7550
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ViewTabContentComponent, isStandalone: true, selector: "wb-view-tab-content", ngImport: i0, template: "@if (view.dirty()) {\n <wb-icon icon=\"workbench.dirty\" class=\"dirty e2e-dirty\"/>\n}\n\n<span class=\"title e2e-title\">\n {{(view.title() | wbText)()}}\n</span>\n\n@if (view.heading()) {\n <span class=\"heading e2e-heading\">\n {{(view.heading() | wbText)()}}\n </span>\n}\n", styles: [":host{display:inline-grid;grid-template-columns:1fr;grid-template-rows:1em;gap:.25em}:host:has(wb-icon.dirty){grid-template-columns:auto 1fr}:host>wb-icon.dirty{align-self:center;color:var(--sci-workbench-tab-text-color)}:host>span.title{align-self:center;margin-right:var(--sci-workbench-tab-title-offset-right);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>span.heading{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;grid-column:1/-1;font-family:var(--sci-workbench-tab-heading-font-family),sans-serif;font-size:var(--sci-workbench-tab-heading-font-size);font-weight:var(--sci-workbench-tab-heading-font-weight)}@container viewtab (height < 3.5rem){:host>span.heading{display:none}}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
7549
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7550
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ViewTabContentComponent, isStandalone: true, selector: "wb-view-tab-content", ngImport: i0, template: "@if (view.dirty()) {\n <wb-icon icon=\"workbench.dirty\" class=\"dirty e2e-dirty\"/>\n}\n\n<span class=\"title e2e-title\">\n {{(view.title() | wbText)()}}\n</span>\n\n@if (view.heading()) {\n <span class=\"heading e2e-heading\">\n {{(view.heading() | wbText)()}}\n </span>\n}\n", styles: [":host{display:inline-grid;grid-template-columns:1fr;grid-template-rows:1em;gap:.25em}:host:has(wb-icon.dirty){grid-template-columns:auto 1fr}:host>wb-icon.dirty{align-self:center;color:var(--sci-workbench-tab-text-color)}:host>span.title{align-self:center;margin-right:var(--sci-workbench-tab-title-offset-right);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>span.heading{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;grid-column:1/-1;font-family:var(--sci-workbench-tab-heading-font-family),sans-serif;font-size:var(--sci-workbench-tab-heading-font-size);font-weight:var(--sci-workbench-tab-heading-font-weight)}@container viewtab (height < 3.5rem){:host>span.heading{display:none}}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
7551
7551
  }
7552
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabContentComponent, decorators: [{
7552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabContentComponent, decorators: [{
7553
7553
  type: Component,
7554
7554
  args: [{ selector: 'wb-view-tab-content', imports: [
7555
7555
  TextPipe,
@@ -7567,9 +7567,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
7567
7567
  * SPDX-License-Identifier: EPL-2.0
7568
7568
  */
7569
7569
  class ViewListItemComponent {
7570
- viewId = input.required();
7570
+ viewId = input.required(...(ngDevMode ? [{ debugName: "viewId" }] : []));
7571
7571
  _viewRegistry = inject(WORKBENCH_VIEW_REGISTRY);
7572
- view = computed(() => this._viewRegistry.get(this.viewId()));
7572
+ view = computed(() => this._viewRegistry.get(this.viewId()), ...(ngDevMode ? [{ debugName: "view" }] : []));
7573
7573
  viewTabContentPortal = this.computeViewTabContentPortal();
7574
7574
  onClose() {
7575
7575
  void this.view().close();
@@ -7588,10 +7588,10 @@ class ViewListItemComponent {
7588
7588
  }));
7589
7589
  });
7590
7590
  }
7591
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7592
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ViewListItemComponent, isStandalone: true, selector: "wb-view-list-item", inputs: { viewId: { classPropertyName: "viewId", publicName: "viewId", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.active": "view().active()", "attr.data-viewid": "view().id" } }, ngImport: i0, template: "<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().closable()) {\n <button (click)=\"onClose()\"\n [title]=\"('%workbench.close.tooltip' | wbText)()\"\n [disabled]=\"!view().isClosable()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n </button>\n}\n", styles: [":host{display:flex;align-items:center;padding:.6em 1em;position:relative;-webkit-user-select:none;user-select:none;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:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);color:var(--sci-color-text)}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host:hover>button.close:is(button,#sci-reset){visibility:visible}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7591
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7592
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ViewListItemComponent, isStandalone: true, selector: "wb-view-list-item", inputs: { viewId: { classPropertyName: "viewId", publicName: "viewId", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.active": "view().active()", "attr.data-viewid": "view().id" } }, ngImport: i0, template: "<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().closable()) {\n <button (click)=\"onClose()\"\n [title]=\"('%workbench.close.tooltip' | wbText)()\"\n [disabled]=\"!view().isClosable()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n </button>\n}\n", styles: [":host{display:flex;align-items:center;padding:.6em 1em;position:relative;-webkit-user-select:none;user-select:none;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:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);color:var(--sci-color-text)}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host:hover>button.close:is(button,#sci-reset){visibility:visible}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: TextPipe, name: "wbText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7593
7593
  }
7594
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewListItemComponent, decorators: [{
7594
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewListItemComponent, decorators: [{
7595
7595
  type: Component,
7596
7596
  args: [{ selector: 'wb-view-list-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
7597
7597
  CdkPortalOutlet,
@@ -7630,15 +7630,15 @@ class ViewListComponent {
7630
7630
  this.viewsInsideTabbar = computed(() => views
7631
7631
  .filter(({ view }) => view.scrolledIntoView())
7632
7632
  .filter(view => view.matches(filterText()))
7633
- .map(({ view }) => view));
7633
+ .map(({ view }) => view), ...(ngDevMode ? [{ debugName: "viewsInsideTabbar" }] : []));
7634
7634
  this.viewsOutsideTabbar = computed(() => views
7635
7635
  .filter(({ view }) => !view.scrolledIntoView())
7636
7636
  .filter(view => view.matches(filterText()))
7637
- .map(({ view }) => view));
7637
+ .map(({ view }) => view), ...(ngDevMode ? [{ debugName: "viewsOutsideTabbar" }] : []));
7638
7638
  const effectRef = effect(() => {
7639
7639
  this._filterFieldComponent().focus();
7640
7640
  effectRef.destroy();
7641
- });
7641
+ }, ...(ngDevMode ? [{ debugName: "effectRef" }] : []));
7642
7642
  }
7643
7643
  onActivateView(view) {
7644
7644
  void view.activate();
@@ -7653,10 +7653,10 @@ class ViewListComponent {
7653
7653
  onDocumentCloseEvent() {
7654
7654
  this._overlayRef.dispose();
7655
7655
  }
7656
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7657
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ViewListComponent, isStandalone: true, selector: "wb-view-list", 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-partid": "this.partId" } }, viewQueries: [{ propertyName: "_filterFieldComponent", first: true, predicate: FilterFieldComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<wb-filter-field [formControl]=\"filterFormControl\" class=\"e2e-view-filter\"/>\n\n@if (viewsOutsideTabbar().length || viewsInsideTabbar().length) {\n <sci-viewport>\n @for (view of viewsOutsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n @if (viewsOutsideTabbar().length && viewsInsideTabbar().length) {\n <hr>\n }\n @for (view of viewsInsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n </sci-viewport>\n}\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}.cdk-overlay-pane.wb-view-list-menu.wb-south :host{margin-top:1px}.cdk-overlay-pane.wb-view-list-menu.wb-north :host{margin-bottom:1px}: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;cursor:var(--sci-workbench-button-cursor)}: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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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: "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 });
7656
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7657
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ViewListComponent, isStandalone: true, selector: "wb-view-list", 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-partid": "this.partId" } }, viewQueries: [{ propertyName: "_filterFieldComponent", first: true, predicate: FilterFieldComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<wb-filter-field [formControl]=\"filterFormControl\" class=\"e2e-view-filter\"/>\n\n@if (viewsOutsideTabbar().length || viewsInsideTabbar().length) {\n <sci-viewport>\n @for (view of viewsOutsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n @if (viewsOutsideTabbar().length && viewsInsideTabbar().length) {\n <hr>\n }\n @for (view of viewsInsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n </sci-viewport>\n}\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}.cdk-overlay-pane.wb-view-list-menu.wb-south :host{margin-top:1px}.cdk-overlay-pane.wb-view-list-menu.wb-north :host{margin-bottom:1px}: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;cursor:var(--sci-workbench-button-cursor)}: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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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: "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 });
7658
7658
  }
7659
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewListComponent, decorators: [{
7659
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewListComponent, decorators: [{
7660
7660
  type: Component,
7661
7661
  args: [{ selector: 'wb-view-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
7662
7662
  ReactiveFormsModule,
@@ -7730,10 +7730,10 @@ class ViewListButtonComponent {
7730
7730
  _destroyRef = inject(DestroyRef);
7731
7731
  /** Number of views that are scrolled out of the tab bar. */
7732
7732
  scrolledOutOfViewTabCount;
7733
- menuState = signal('closed');
7733
+ menuState = signal('closed', ...(ngDevMode ? [{ debugName: "menuState" }] : []));
7734
7734
  constructor() {
7735
7735
  const part = inject(WorkbenchPart);
7736
- this.scrolledOutOfViewTabCount = computed(() => part.views().reduce((count, view) => view.scrolledIntoView() ? count : count + 1, 0));
7736
+ this.scrolledOutOfViewTabCount = computed(() => part.views().reduce((count, view) => view.scrolledIntoView() ? count : count + 1, 0), ...(ngDevMode ? [{ debugName: "scrolledOutOfViewTabCount" }] : []));
7737
7737
  }
7738
7738
  onClick() {
7739
7739
  this.menuState.set('open');
@@ -7757,10 +7757,10 @@ class ViewListButtonComponent {
7757
7757
  this._destroyRef.onDestroy(() => overlayRef.dispose());
7758
7758
  return new Promise(resolve => componentRef.onDestroy(resolve));
7759
7759
  }
7760
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewListButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7761
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ViewListButtonComponent, isStandalone: true, selector: "wb-view-list-button", host: { listeners: { "click": "onClick()", "keydown.enter": "onClick()", "keydown.space": "onClick()" }, properties: { "class.menu-open": "menuState() === 'open'", "attr.tabindex": "0" } }, ngImport: i0, template: "<wb-icon icon=\"workbench.menu_down\" class=\"menu-down\"/>\n@if (scrolledOutOfViewTabCount(); as count) {\n <span class=\"count e2e-hidden-tab-count\">{{count}}</span>\n}\n", styles: [":host{all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);display:flex;flex-direction:column}:host:hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host:active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host:focus:not(:focus-visible){outline:none}:host:focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host:disabled{color:var(--sci-color-gray-500)}:host.menu-open{background-color:var(--sci-workbench-button-background-color-hover)}:host>wb-icon.menu-down{flex:none}:host>span.count{flex:none;font-size:var(--sci-workbench-part-hidden-tab-count-size);line-height:.75}@container style(--sci-workbench-part-hidden-tab-count-size: 0){:host>span.count{display:none}}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
7760
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewListButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7761
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ViewListButtonComponent, isStandalone: true, selector: "wb-view-list-button", host: { listeners: { "click": "onClick()", "keydown.enter": "onClick()", "keydown.space": "onClick()" }, properties: { "class.menu-open": "menuState() === 'open'", "attr.tabindex": "0" } }, ngImport: i0, template: "<wb-icon icon=\"workbench.menu_down\" class=\"menu-down\"/>\n@if (scrolledOutOfViewTabCount(); as count) {\n <span class=\"count e2e-hidden-tab-count\">{{count}}</span>\n}\n", styles: [":host{all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);display:flex;flex-direction:column}:host:hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host:active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host:focus:not(:focus-visible){outline:none}:host:focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host:disabled{color:var(--sci-color-gray-500)}:host.menu-open{background-color:var(--sci-workbench-button-background-color-hover)}:host>wb-icon.menu-down{flex:none}:host>span.count{flex:none;font-size:var(--sci-workbench-part-hidden-tab-count-size);line-height:.75}@container style(--sci-workbench-part-hidden-tab-count-size: 0){:host>span.count{display:none}}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
7762
7762
  }
7763
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewListButtonComponent, decorators: [{
7763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewListButtonComponent, decorators: [{
7764
7764
  type: Component,
7765
7765
  args: [{ selector: 'wb-view-list-button', host: {
7766
7766
  '[class.menu-open]': `menuState() === 'open'`,
@@ -7800,10 +7800,10 @@ class WbFormatAcceleratorPipe {
7800
7800
  .map(key => key[0].toUpperCase() + key.substring(1).toLowerCase())
7801
7801
  .join('+');
7802
7802
  }
7803
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WbFormatAcceleratorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
7804
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: WbFormatAcceleratorPipe, isStandalone: true, name: "wbFormatAccelerator" });
7803
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WbFormatAcceleratorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
7804
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: WbFormatAcceleratorPipe, isStandalone: true, name: "wbFormatAccelerator" });
7805
7805
  }
7806
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WbFormatAcceleratorPipe, decorators: [{
7806
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WbFormatAcceleratorPipe, decorators: [{
7807
7807
  type: Pipe,
7808
7808
  args: [{ name: 'wbFormatAccelerator' }]
7809
7809
  }] });
@@ -7924,7 +7924,7 @@ function fromMoveHandle$(handle) {
7924
7924
  * respective DOM properties.
7925
7925
  */
7926
7926
  class MovableDirective {
7927
- wbHandleElement = input.required({ alias: 'wbHandle' });
7927
+ wbHandleElement = input.required(...(ngDevMode ? [{ debugName: "wbHandleElement", alias: 'wbHandle' }] : [{ alias: 'wbHandle' }]));
7928
7928
  wbMove = output({ alias: 'wbMovableMove' });
7929
7929
  _workbenchLayoutService = inject(WorkbenchLayoutService);
7930
7930
  _host = inject(ElementRef).nativeElement;
@@ -8006,10 +8006,10 @@ class MovableDirective {
8006
8006
  dispose: () => subscription.unsubscribe(),
8007
8007
  };
8008
8008
  }
8009
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MovableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8010
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: MovableDirective, isStandalone: true, selector: "[wbMovable]", inputs: { wbHandleElement: { classPropertyName: "wbHandleElement", publicName: "wbHandle", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { wbMove: "wbMovableMove" }, ngImport: i0 });
8009
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MovableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8010
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: MovableDirective, isStandalone: true, selector: "[wbMovable]", inputs: { wbHandleElement: { classPropertyName: "wbHandleElement", publicName: "wbHandle", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { wbMove: "wbMovableMove" }, ngImport: i0 });
8011
8011
  }
8012
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MovableDirective, decorators: [{
8012
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MovableDirective, decorators: [{
8013
8013
  type: Directive,
8014
8014
  args: [{ selector: '[wbMovable]' }]
8015
8015
  }], ctorParameters: () => [] });
@@ -8046,7 +8046,7 @@ const HANDLE_SIZE = 6;
8046
8046
  * - must be horizontally centered in its layout
8047
8047
  */
8048
8048
  class ResizableDirective {
8049
- enabled = input(true, { alias: 'wbResizableEnabled' });
8049
+ enabled = input(true, ...(ngDevMode ? [{ debugName: "enabled", alias: 'wbResizableEnabled' }] : [{ alias: 'wbResizableEnabled' }]));
8050
8050
  wbResize = output({ alias: 'wbResizableResize' });
8051
8051
  _workbenchLayoutService = inject(WorkbenchLayoutService);
8052
8052
  _host = inject(ElementRef).nativeElement;
@@ -8305,10 +8305,10 @@ class ResizableDirective {
8305
8305
  translateX: getComputedTranslateX(this._host) + delta / 2, // Move only by half the delta as centered horizontally.
8306
8306
  });
8307
8307
  }
8308
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8309
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: ResizableDirective, isStandalone: true, selector: "[wbResizable]", inputs: { enabled: { classPropertyName: "enabled", publicName: "wbResizableEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { wbResize: "wbResizableResize" }, ngImport: i0 });
8308
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8309
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: ResizableDirective, isStandalone: true, selector: "[wbResizable]", inputs: { enabled: { classPropertyName: "enabled", publicName: "wbResizableEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { wbResize: "wbResizableResize" }, ngImport: i0 });
8310
8310
  }
8311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ResizableDirective, decorators: [{
8311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ResizableDirective, decorators: [{
8312
8312
  type: Directive,
8313
8313
  args: [{ selector: '[wbResizable]' }]
8314
8314
  }], ctorParameters: () => [] });
@@ -8419,10 +8419,10 @@ class DialogHeaderComponent {
8419
8419
  onCloseMouseDown(event) {
8420
8420
  event.stopPropagation(); // Prevent dragging the dialog with the close button.
8421
8421
  }
8422
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DialogHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8423
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: DialogHeaderComponent, isStandalone: true, selector: "wb-dialog-header", ngImport: i0, template: "@if (dialog.title(); as title) {\n <div class=\"title e2e-title\">\n <span>{{(title | wbText)()}}</span>\n </div>\n}\n\n@if (dialog.closable()) {\n <button tabindex=\"-1\" class=\"close e2e-close\"\n [title]=\"('%workbench.close.tooltip' | wbText)()\"\n (mousedown)=\"onCloseMouseDown($event)\"\n (click)=\"onCloseClick()\">\n <wb-icon icon=\"workbench.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),sans-serif;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:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;align-self:center;border-radius:var(--sci-corner-small);padding:.125em}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
8422
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DialogHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8423
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: DialogHeaderComponent, isStandalone: true, selector: "wb-dialog-header", ngImport: i0, template: "@if (dialog.title(); as title) {\n <div class=\"title e2e-title\">\n <span>{{(title | wbText)()}}</span>\n </div>\n}\n\n@if (dialog.closable()) {\n <button tabindex=\"-1\" class=\"close e2e-close\"\n [title]=\"('%workbench.close.tooltip' | wbText)()\"\n (mousedown)=\"onCloseMouseDown($event)\"\n (click)=\"onCloseClick()\">\n <wb-icon icon=\"workbench.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),sans-serif;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:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;align-self:center;border-radius:var(--sci-corner-small);padding:.125em}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
8424
8424
  }
8425
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DialogHeaderComponent, decorators: [{
8425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DialogHeaderComponent, decorators: [{
8426
8426
  type: Component,
8427
8427
  args: [{ selector: 'wb-dialog-header', imports: [
8428
8428
  TextPipe,
@@ -8458,10 +8458,10 @@ class NullIfEmptyPipe {
8458
8458
  }
8459
8459
  return value;
8460
8460
  }
8461
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NullIfEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
8462
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: NullIfEmptyPipe, isStandalone: true, name: "wbNullIfEmpty" });
8461
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NullIfEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
8462
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: NullIfEmptyPipe, isStandalone: true, name: "wbNullIfEmpty" });
8463
8463
  }
8464
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NullIfEmptyPipe, decorators: [{
8464
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NullIfEmptyPipe, decorators: [{
8465
8465
  type: Pipe,
8466
8466
  args: [{ name: 'wbNullIfEmpty' }]
8467
8467
  }] });
@@ -8482,10 +8482,10 @@ class DialogActionFilterPipe {
8482
8482
  transform(actions, align) {
8483
8483
  return actions?.filter(action => action.align() === align) ?? [];
8484
8484
  }
8485
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DialogActionFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
8486
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: DialogActionFilterPipe, isStandalone: true, name: "wbDialogActionFilter" });
8485
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DialogActionFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
8486
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: DialogActionFilterPipe, isStandalone: true, name: "wbDialogActionFilter" });
8487
8487
  }
8488
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DialogActionFilterPipe, decorators: [{
8488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DialogActionFilterPipe, decorators: [{
8489
8489
  type: Pipe,
8490
8490
  args: [{ name: 'wbDialogActionFilter' }]
8491
8491
  }] });
@@ -8504,10 +8504,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
8504
8504
  */
8505
8505
  class DialogFooterComponent {
8506
8506
  dialog = inject(ɵWorkbenchDialog);
8507
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DialogFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8508
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.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" }] });
8507
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DialogFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8508
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", 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" }] });
8509
8509
  }
8510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: DialogFooterComponent, decorators: [{
8510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DialogFooterComponent, decorators: [{
8511
8511
  type: Component,
8512
8512
  args: [{ selector: 'wb-dialog-footer', imports: [
8513
8513
  NgTemplateOutlet,
@@ -8558,10 +8558,10 @@ class GlassPaneDirective {
8558
8558
  ngOnDestroy() {
8559
8559
  this._glassPane?.dispose();
8560
8560
  }
8561
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: GlassPaneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8562
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.2", type: GlassPaneDirective, isStandalone: true, selector: "[wbGlassPane]", ngImport: i0 });
8561
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GlassPaneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8562
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.3", type: GlassPaneDirective, isStandalone: true, selector: "[wbGlassPane]", ngImport: i0 });
8563
8563
  }
8564
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: GlassPaneDirective, decorators: [{
8564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GlassPaneDirective, decorators: [{
8565
8565
  type: Directive,
8566
8566
  args: [{ selector: '[wbGlassPane]' }]
8567
8567
  }], ctorParameters: () => [] });
@@ -8670,9 +8670,9 @@ class WorkbenchDialogComponent {
8670
8670
  /** Element of the dialog that has or last had focus */
8671
8671
  _activeElement$ = new BehaviorSubject(undefined);
8672
8672
  dialog = inject(ɵWorkbenchDialog);
8673
- headerHeight = signal(undefined);
8674
- transformTranslateX = signal(0);
8675
- transformTranslateY = signal(0);
8673
+ headerHeight = signal(undefined, ...(ngDevMode ? [{ debugName: "headerHeight" }] : []));
8674
+ transformTranslateX = signal(0, ...(ngDevMode ? [{ debugName: "transformTranslateX" }] : []));
8675
+ transformTranslateY = signal(0, ...(ngDevMode ? [{ debugName: "transformTranslateY" }] : []));
8676
8676
  constructor() {
8677
8677
  this.setDialogOffset();
8678
8678
  this.addHostCssClasses();
@@ -8769,14 +8769,14 @@ class WorkbenchDialogComponent {
8769
8769
  onHeaderDimensionChange(dimension) {
8770
8770
  this.headerHeight.set(`${dimension.offsetHeight}px`);
8771
8771
  }
8772
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8773
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: WorkbenchDialogComponent, isStandalone: true, selector: "wb-dialog", host: { listeners: { "keydown.escape": "onEscape($event)" }, properties: { "attr.data-dialogid": "dialog.id", "class.justified": "!dialog.padding()", "style.--\u0275dialog-transform-translate-x": "transformTranslateX()", "style.--\u0275dialog-transform-translate-y": "transformTranslateY()", "style.--\u0275dialog-min-height": "dialog.size.minHeight() ?? headerHeight()", "style.--\u0275dialog-height": "dialog.size.height()", "style.--\u0275dialog-max-height": "dialog.size.maxHeight()", "style.--\u0275dialog-min-width": "dialog.size.minWidth() ?? '100px'", "style.--\u0275dialog-width": "dialog.size.width()", "style.--\u0275dialog-max-width": "dialog.size.maxWidth()" } }, viewQueries: [{ propertyName: "_cdkTrapFocus", first: true, predicate: CdkTrapFocus, descendants: true, isSignal: true }, { propertyName: "_dialogElement", first: true, predicate: ["dialog_element"], descendants: true, isSignal: 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"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: 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"] }, { kind: "component", type: DialogHeaderComponent, selector: "wb-dialog-header" }, { kind: "component", type: DialogFooterComponent, selector: "wb-dialog-footer" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
8772
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8773
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: WorkbenchDialogComponent, isStandalone: true, selector: "wb-dialog", host: { listeners: { "keydown.escape": "onEscape($event)" }, properties: { "attr.data-dialogid": "dialog.id", "class.justified": "!dialog.padding()", "style.--\u0275dialog-transform-translate-x": "transformTranslateX()", "style.--\u0275dialog-transform-translate-y": "transformTranslateY()", "style.--\u0275dialog-min-height": "dialog.size.minHeight() ?? headerHeight()", "style.--\u0275dialog-height": "dialog.size.height()", "style.--\u0275dialog-max-height": "dialog.size.maxHeight()", "style.--\u0275dialog-min-width": "dialog.size.minWidth() ?? '100px'", "style.--\u0275dialog-width": "dialog.size.width()", "style.--\u0275dialog-max-width": "dialog.size.maxWidth()" } }, viewQueries: [{ propertyName: "_cdkTrapFocus", first: true, predicate: CdkTrapFocus, descendants: true, isSignal: true }, { propertyName: "_dialogElement", first: true, predicate: ["dialog_element"], descendants: true, isSignal: 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", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { 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"] }, { kind: "component", type: DialogHeaderComponent, selector: "wb-dialog-header" }, { kind: "component", type: DialogFooterComponent, selector: "wb-dialog-footer" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }, { kind: "pipe", type: AsyncPipe, name: "async" }], viewProviders: [
8774
8774
  configureDialogGlassPane(),
8775
8775
  ], animations: [
8776
8776
  trigger('enter', provideEnterAnimation()),
8777
8777
  ] });
8778
8778
  }
8779
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogComponent, decorators: [{
8779
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogComponent, decorators: [{
8780
8780
  type: Component,
8781
8781
  args: [{ selector: 'wb-dialog', imports: [
8782
8782
  NgComponentOutlet,
@@ -8860,11 +8860,11 @@ class ɵWorkbenchDialog {
8860
8860
  _blink$ = new Subject();
8861
8861
  _focusMonitor = inject(WorkbenchFocusMonitor);
8862
8862
  _attached;
8863
- _title = signal(undefined);
8864
- _closable = signal(true);
8865
- _resizable = signal(true);
8866
- _padding = signal(true);
8867
- _cssClass = signal([]);
8863
+ _title = signal(undefined, ...(ngDevMode ? [{ debugName: "_title" }] : []));
8864
+ _closable = signal(true, ...(ngDevMode ? [{ debugName: "_closable" }] : []));
8865
+ _resizable = signal(true, ...(ngDevMode ? [{ debugName: "_resizable" }] : []));
8866
+ _padding = signal(true, ...(ngDevMode ? [{ debugName: "_padding" }] : []));
8867
+ _cssClass = signal([], ...(ngDevMode ? [{ debugName: "_cssClass" }] : []));
8868
8868
  /**
8869
8869
  * Result (or error) to be passed to the dialog opener.
8870
8870
  */
@@ -8875,7 +8875,7 @@ class ɵWorkbenchDialog {
8875
8875
  */
8876
8876
  blockedBy$ = new BehaviorSubject(null);
8877
8877
  size = new ɵWorkbenchDialogSize();
8878
- focused = computed(() => this._focusMonitor.activeElement()?.id === this.id);
8878
+ focused = computed(() => this._focusMonitor.activeElement()?.id === this.id, ...(ngDevMode ? [{ debugName: "focused" }] : []));
8879
8879
  blinking$ = new BehaviorSubject(false);
8880
8880
  context = {
8881
8881
  view: inject(ɵWorkbenchView, { optional: true }),
@@ -9096,7 +9096,7 @@ class ɵWorkbenchDialog {
9096
9096
  }
9097
9097
  else {
9098
9098
  const workbenchElementRef = inject(WORKBENCH_ELEMENT_REF);
9099
- const hostElement = computed(() => (this.context.view ? this.context.view.slot.portal.element() : workbenchElementRef()?.element.nativeElement));
9099
+ const hostElement = computed(() => (this.context.view ? this.context.view.slot.portal.element() : workbenchElementRef()?.element.nativeElement), ...(ngDevMode ? [{ debugName: "hostElement" }] : []));
9100
9100
  const hostBounds = boundingClientRect(hostElement);
9101
9101
  const viewDragService = inject(ViewDragService);
9102
9102
  effect(() => {
@@ -9220,10 +9220,10 @@ class ɵWorkbenchDialogService {
9220
9220
  async waitUntilApplicationModalDialogsClosed() {
9221
9221
  await firstValueFrom(this._dialogRegistry.top$().pipe(filter(top => !top)));
9222
9222
  }
9223
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9224
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchDialogService, providedIn: 'root' });
9223
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9224
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchDialogService, providedIn: 'root' });
9225
9225
  }
9226
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchDialogService, decorators: [{
9226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchDialogService, decorators: [{
9227
9227
  type: Injectable,
9228
9228
  args: [{ providedIn: 'root' }]
9229
9229
  }] });
@@ -9313,10 +9313,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
9313
9313
  * - `--sci-workbench-dialog-title-align`
9314
9314
  */
9315
9315
  class WorkbenchDialogService {
9316
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9317
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogService, providedIn: 'root', useExisting: ɵWorkbenchDialogService });
9316
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9317
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogService, providedIn: 'root', useExisting: ɵWorkbenchDialogService });
9318
9318
  }
9319
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogService, decorators: [{
9319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogService, decorators: [{
9320
9320
  type: Injectable,
9321
9321
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchDialogService }]
9322
9322
  }] });
@@ -9331,11 +9331,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
9331
9331
  * SPDX-License-Identifier: EPL-2.0
9332
9332
  */
9333
9333
  class MessageBoxFooterComponent {
9334
- actions = input.required();
9335
- severity = input.required();
9334
+ actions = input.required(...(ngDevMode ? [{ debugName: "actions" }] : []));
9335
+ severity = input.required(...(ngDevMode ? [{ debugName: "severity" }] : []));
9336
9336
  action = output();
9337
9337
  preferredSizeChange = output();
9338
- _actionButtons = viewChildren('action_button');
9338
+ _actionButtons = viewChildren('action_button', ...(ngDevMode ? [{ debugName: "_actionButtons" }] : []));
9339
9339
  constructor() {
9340
9340
  void this.emitPreferredSize();
9341
9341
  }
@@ -9360,10 +9360,10 @@ class MessageBoxFooterComponent {
9360
9360
  host.classList.remove('calculating-min-width');
9361
9361
  }
9362
9362
  }
9363
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MessageBoxFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9364
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: MessageBoxFooterComponent, isStandalone: true, selector: "wb-message-box-footer", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: true, transformFunction: null }, severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { action: "action", preferredSizeChange: "preferredSizeChange" }, host: { properties: { "attr.data-severity": "severity()" } }, viewQueries: [{ propertyName: "_actionButtons", predicate: ["action_button"], descendants: true, isSignal: 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 | wbText)()}}\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:is(button,#sci-reset){all:unset;flex:1;margin:2px;border:1px solid transparent;border-radius:var(--sci-corner-small);transition:border-color ease-in-out .15s;cursor:var(--sci-workbench-messagebox-action-cursor);-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:is(button,#sci-reset):focus,:host>button.action:is(button,#sci-reset):active{outline:none;color:var(--\\275message-box-severity-color);border-color:var(--\\275message-box-severity-color)}:host>button.action:is(button,#sci-reset):hover{background-color:var(--sci-workbench-messagebox-action-background-color-hover)}:host>span.divider{width:1px;background-color:var(--sci-color-border)}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
9363
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MessageBoxFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9364
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: MessageBoxFooterComponent, isStandalone: true, selector: "wb-message-box-footer", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: true, transformFunction: null }, severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { action: "action", preferredSizeChange: "preferredSizeChange" }, host: { properties: { "attr.data-severity": "severity()" } }, viewQueries: [{ propertyName: "_actionButtons", predicate: ["action_button"], descendants: true, isSignal: 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 | wbText)()}}\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:is(button,#sci-reset){all:unset;flex:1;margin:2px;border:1px solid transparent;border-radius:var(--sci-corner-small);transition:border-color ease-in-out .15s;cursor:var(--sci-workbench-messagebox-action-cursor);-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:is(button,#sci-reset):focus,:host>button.action:is(button,#sci-reset):active{outline:none;color:var(--\\275message-box-severity-color);border-color:var(--\\275message-box-severity-color)}:host>button.action:is(button,#sci-reset):hover{background-color:var(--sci-workbench-messagebox-action-background-color-hover)}:host>span.divider{width:1px;background-color:var(--sci-color-border)}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
9365
9365
  }
9366
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MessageBoxFooterComponent, decorators: [{
9366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MessageBoxFooterComponent, decorators: [{
9367
9367
  type: Component,
9368
9368
  args: [{ selector: 'wb-message-box-footer', imports: [
9369
9369
  KeyValuePipe,
@@ -9399,7 +9399,7 @@ class WorkbenchDialogFooterDirective {
9399
9399
  * Specifies if to display a visual separator between the dialog content and this footer.
9400
9400
  * Defaults to `true`.
9401
9401
  */
9402
- divider = input(undefined, { transform: booleanAttribute });
9402
+ divider = input(undefined, ...(ngDevMode ? [{ debugName: "divider", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
9403
9403
  template = inject(TemplateRef);
9404
9404
  _footer;
9405
9405
  constructor() {
@@ -9409,10 +9409,10 @@ class WorkbenchDialogFooterDirective {
9409
9409
  // Defer disposing footer to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
9410
9410
  inject(DestroyRef).onDestroy(() => asapScheduler.schedule(() => this._footer?.dispose()));
9411
9411
  }
9412
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9413
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchDialogFooterDirective, isStandalone: true, selector: "ng-template[wbDialogFooter]", inputs: { divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
9412
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9413
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchDialogFooterDirective, isStandalone: true, selector: "ng-template[wbDialogFooter]", inputs: { divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
9414
9414
  }
9415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogFooterDirective, decorators: [{
9415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogFooterDirective, decorators: [{
9416
9416
  type: Directive,
9417
9417
  args: [{ selector: 'ng-template[wbDialogFooter]' }]
9418
9418
  }], ctorParameters: () => [] });
@@ -9443,7 +9443,7 @@ class WorkbenchDialogHeaderDirective {
9443
9443
  * Specifies if to display a visual separator between this header and the dialog content.
9444
9444
  * Defaults to `true`.
9445
9445
  */
9446
- divider = input(undefined, { transform: booleanAttribute });
9446
+ divider = input(undefined, ...(ngDevMode ? [{ debugName: "divider", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
9447
9447
  template = inject(TemplateRef);
9448
9448
  _header;
9449
9449
  constructor() {
@@ -9453,10 +9453,10 @@ class WorkbenchDialogHeaderDirective {
9453
9453
  // Defer disposing header to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
9454
9454
  inject(DestroyRef).onDestroy(() => asapScheduler.schedule(() => this._header?.dispose()));
9455
9455
  }
9456
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogHeaderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9457
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchDialogHeaderDirective, isStandalone: true, selector: "ng-template[wbDialogHeader]", inputs: { divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
9456
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogHeaderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9457
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchDialogHeaderDirective, isStandalone: true, selector: "ng-template[wbDialogHeader]", inputs: { divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
9458
9458
  }
9459
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogHeaderDirective, decorators: [{
9459
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogHeaderDirective, decorators: [{
9460
9460
  type: Directive,
9461
9461
  args: [{ selector: 'ng-template[wbDialogHeader]' }]
9462
9462
  }], ctorParameters: () => [] });
@@ -9471,12 +9471,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
9471
9471
  * SPDX-License-Identifier: EPL-2.0
9472
9472
  */
9473
9473
  class MessageBoxHeaderComponent {
9474
- title = input();
9475
- severity = input.required();
9476
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MessageBoxHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9477
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: MessageBoxHeaderComponent, isStandalone: true, selector: "wb-message-box-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-severity": "severity()" } }, ngImport: i0, template: "@if (title()) {\n <span class=\"title e2e-title\">{{(title() | wbText)()}}</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),sans-serif;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"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }] });
9474
+ title = input(...(ngDevMode ? [undefined, { debugName: "title" }] : []));
9475
+ severity = input.required(...(ngDevMode ? [{ debugName: "severity" }] : []));
9476
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MessageBoxHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9477
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: MessageBoxHeaderComponent, isStandalone: true, selector: "wb-message-box-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-severity": "severity()" } }, ngImport: i0, template: "@if (title()) {\n <span class=\"title e2e-title\">{{(title() | wbText)()}}</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),sans-serif;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"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }] });
9478
9478
  }
9479
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MessageBoxHeaderComponent, decorators: [{
9479
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MessageBoxHeaderComponent, decorators: [{
9480
9480
  type: Component,
9481
9481
  args: [{ selector: 'wb-message-box-header', imports: [
9482
9482
  TextPipe,
@@ -9501,10 +9501,10 @@ class TypeofPipe {
9501
9501
  transform(object, type) {
9502
9502
  return typeof object === type;
9503
9503
  }
9504
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TypeofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9505
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: TypeofPipe, isStandalone: true, name: "wbTypeof" });
9504
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TypeofPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9505
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: TypeofPipe, isStandalone: true, name: "wbTypeof" });
9506
9506
  }
9507
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TypeofPipe, decorators: [{
9507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TypeofPipe, decorators: [{
9508
9508
  type: Pipe,
9509
9509
  args: [{ name: 'wbTypeof' }]
9510
9510
  }] });
@@ -9524,8 +9524,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
9524
9524
  * This component is designed to be opened in a workbench dialog.
9525
9525
  */
9526
9526
  class WorkbenchMessageBoxComponent {
9527
- message = input.required({ transform: nullIfEmptyMessage });
9528
- options = input();
9527
+ message = input.required(...(ngDevMode ? [{ debugName: "message", transform: nullIfEmptyMessage }] : [{ transform: nullIfEmptyMessage }]));
9528
+ options = input(...(ngDevMode ? [undefined, { debugName: "options" }] : []));
9529
9529
  _dialog = inject(ɵWorkbenchDialog);
9530
9530
  // Ensure host element to be focusable in order to close the message box on Escape keystroke.
9531
9531
  tabindex = -1;
@@ -9556,10 +9556,10 @@ class WorkbenchMessageBoxComponent {
9556
9556
  onContentDimensionChange(dimension) {
9557
9557
  this.empty = !dimension.offsetHeight;
9558
9558
  }
9559
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchMessageBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9560
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: WorkbenchMessageBoxComponent, isStandalone: true, selector: "wb-message-box", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown.escape": "onEscape()" }, properties: { "attr.tabindex": "this.tabindex", "class.empty": "this.empty", "class.content-selectable": "this.contentSelectable", "class.has-title": "this.hasTitle" } }, ngImport: i0, template: "@let options = this.options() ?? {};\n<ng-template wbDialogHeader [divider]=\"false\">\n <wb-message-box-header [title]=\"options.title\" [severity]=\"options.severity ?? 'info'\"/>\n</ng-template>\n\n@let message = this.message();\n<div class=\"message e2e-message\" [class.text]=\"message | wbTypeof:'string'\" sciDimension (sciDimensionChange)=\"onContentDimensionChange($event)\">\n @if (message | wbTypeof:'string') {\n {{($any(message) | wbText)()}}\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: '%workbench.ok.action'}\"\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"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: SciDimensionDirective, selector: "[sciDimension]", inputs: ["emitOutsideAngular"], outputs: ["sciDimensionChange"] }, { 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" }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
9559
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchMessageBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9560
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: WorkbenchMessageBoxComponent, isStandalone: true, selector: "wb-message-box", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown.escape": "onEscape()" }, properties: { "attr.tabindex": "this.tabindex", "class.empty": "this.empty", "class.content-selectable": "this.contentSelectable", "class.has-title": "this.hasTitle" } }, ngImport: i0, template: "@let options = this.options() ?? {};\n<ng-template wbDialogHeader [divider]=\"false\">\n <wb-message-box-header [title]=\"options.title\" [severity]=\"options.severity ?? 'info'\"/>\n</ng-template>\n\n@let message = this.message();\n<div class=\"message e2e-message\" [class.text]=\"message | wbTypeof:'string'\" sciDimension (sciDimensionChange)=\"onContentDimensionChange($event)\">\n @if (message | wbTypeof:'string') {\n {{($any(message) | wbText)()}}\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: '%workbench.ok.action'}\"\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", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: SciDimensionDirective, selector: "[sciDimension]", inputs: ["emitOutsideAngular"], outputs: ["sciDimensionChange"] }, { 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" }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
9561
9561
  }
9562
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchMessageBoxComponent, decorators: [{
9562
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchMessageBoxComponent, decorators: [{
9563
9563
  type: Component,
9564
9564
  args: [{ selector: 'wb-message-box', imports: [
9565
9565
  NgComponentOutlet,
@@ -9588,7 +9588,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
9588
9588
  args: ['keydown.escape']
9589
9589
  }] } });
9590
9590
  function nullIfEmptyMessage(message) {
9591
- return message || null;
9591
+ return message !== '' ? message : null;
9592
9592
  }
9593
9593
 
9594
9594
  /*
@@ -9622,10 +9622,10 @@ class ɵWorkbenchMessageBoxService {
9622
9622
  animate: true,
9623
9623
  }));
9624
9624
  }
9625
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchMessageBoxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9626
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchMessageBoxService, providedIn: 'root' });
9625
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchMessageBoxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9626
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchMessageBoxService, providedIn: 'root' });
9627
9627
  }
9628
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵWorkbenchMessageBoxService, decorators: [{
9628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵWorkbenchMessageBoxService, decorators: [{
9629
9629
  type: Injectable,
9630
9630
  args: [{ providedIn: 'root' }]
9631
9631
  }] });
@@ -9663,14 +9663,14 @@ class PopupComponent {
9663
9663
  // the popup loses focus by clicking on an element in a microfrontend.
9664
9664
  void this._cdkTrapFocus().focusTrap.focusInitialElementWhenReady();
9665
9665
  effectRef.destroy();
9666
- });
9666
+ }, ...(ngDevMode ? [{ debugName: "effectRef" }] : []));
9667
9667
  }
9668
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9669
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: PopupComponent, isStandalone: true, selector: "wb-popup", host: { properties: { "attr.data-popupid": "popup.id", "style.width": "popup.size?.width", "style.min-width": "popup.size?.minWidth", "style.max-width": "popup.size?.maxWidth", "style.height": "popup.size?.height", "style.min-height": "popup.size?.minHeight", "style.max-height": "popup.size?.maxHeight", "attr.class": "popup.cssClasses.join(' ')" } }, providers: [
9668
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9669
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: PopupComponent, isStandalone: true, selector: "wb-popup", host: { properties: { "attr.data-popupid": "popup.id", "style.width": "popup.size?.width", "style.min-width": "popup.size?.minWidth", "style.max-width": "popup.size?.maxWidth", "style.height": "popup.size?.height", "style.min-height": "popup.size?.minHeight", "style.max-height": "popup.size?.maxHeight", "attr.class": "popup.cssClasses.join(' ')" } }, providers: [
9670
9670
  configurePopupGlassPane(),
9671
9671
  ], viewQueries: [{ propertyName: "_cdkTrapFocus", first: true, predicate: ["focus_trap"], descendants: true, read: CdkTrapFocus, isSignal: true }], hostDirectives: [{ directive: GlassPaneDirective }], ngImport: i0, template: "<sci-viewport cdkTrapFocus class=\"e2e-popup-viewport\" #focus_trap>\n <ng-container *cdkPortalOutlet=\"portal\"/>\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: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] });
9672
9672
  }
9673
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PopupComponent, decorators: [{
9673
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PopupComponent, decorators: [{
9674
9674
  type: Component,
9675
9675
  args: [{ selector: 'wb-popup', imports: [
9676
9676
  CdkTrapFocus,
@@ -9988,10 +9988,10 @@ class PopupService {
9988
9988
  }
9989
9989
  return null;
9990
9990
  }
9991
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PopupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9992
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PopupService, providedIn: 'root' });
9991
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PopupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9992
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PopupService, providedIn: 'root' });
9993
9993
  }
9994
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PopupService, decorators: [{
9994
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PopupService, decorators: [{
9995
9995
  type: Injectable,
9996
9996
  args: [{ providedIn: 'root' }]
9997
9997
  }] });
@@ -10080,10 +10080,10 @@ function isEqualDomRect(a, b) {
10080
10080
  * - `--sci-workbench-messagebox-title-font-size`
10081
10081
  */
10082
10082
  class WorkbenchMessageBoxService {
10083
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchMessageBoxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10084
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchMessageBoxService, providedIn: 'root', useExisting: ɵWorkbenchMessageBoxService });
10083
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchMessageBoxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10084
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchMessageBoxService, providedIn: 'root', useExisting: ɵWorkbenchMessageBoxService });
10085
10085
  }
10086
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchMessageBoxService, decorators: [{
10086
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchMessageBoxService, decorators: [{
10087
10087
  type: Injectable,
10088
10088
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchMessageBoxService }]
10089
10089
  }] });
@@ -10122,14 +10122,14 @@ function provideViewContext(view) {
10122
10122
  * SPDX-License-Identifier: EPL-2.0
10123
10123
  */
10124
10124
  class MenuItemComponent {
10125
- menuItem = input.required({ transform: (menuItem) => runInInjectionContext(this._injector, () => transform(menuItem)) });
10125
+ menuItem = input.required(...(ngDevMode ? [{ debugName: "menuItem", transform: (menuItem) => runInInjectionContext(this._injector, () => transform(menuItem)) }] : [{ transform: (menuItem) => runInInjectionContext(this._injector, () => transform(menuItem)) }]));
10126
10126
  _injector = inject(Injector);
10127
10127
  TemplateMenuItem = TemplateMenuItem;
10128
10128
  ComponentMenuItem = ComponentMenuItem;
10129
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10130
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: MenuItemComponent, isStandalone: true, selector: "wb-menu-item", inputs: { menuItem: { classPropertyName: "menuItem", publicName: "menuItem", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (menuItem() | wbInstanceof:TemplateMenuItem; as menuItem) {\r\n <ng-container *ngTemplateOutlet=\"menuItem.template; context: menuItem.context; injector: menuItem.injector\"/>\r\n}\r\n@if (menuItem() | wbInstanceof:ComponentMenuItem; as menuItem) {\r\n <ng-container *ngComponentOutlet=\"menuItem.component; inputs: menuItem.inputs; injector: menuItem.injector\"/>\r\n}\r\n", styles: [":host{display:inline-grid}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: InstanceofPipe, name: "wbInstanceof" }] });
10129
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10130
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: MenuItemComponent, isStandalone: true, selector: "wb-menu-item", inputs: { menuItem: { classPropertyName: "menuItem", publicName: "menuItem", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (menuItem() | wbInstanceof:TemplateMenuItem; as menuItem) {\r\n <ng-container *ngTemplateOutlet=\"menuItem.template; context: menuItem.context; injector: menuItem.injector\"/>\r\n}\r\n@if (menuItem() | wbInstanceof:ComponentMenuItem; as menuItem) {\r\n <ng-container *ngComponentOutlet=\"menuItem.component; inputs: menuItem.inputs; injector: menuItem.injector\"/>\r\n}\r\n", styles: [":host{display:inline-grid}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: InstanceofPipe, name: "wbInstanceof" }] });
10131
10131
  }
10132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MenuItemComponent, decorators: [{
10132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MenuItemComponent, decorators: [{
10133
10133
  type: Component,
10134
10134
  args: [{ selector: 'wb-menu-item', imports: [
10135
10135
  NgTemplateOutlet,
@@ -10228,10 +10228,10 @@ class ViewMenuComponent {
10228
10228
  return Maps.addListValue(groups, menuItem.group ?? 'default', menuItem);
10229
10229
  }, new Map()));
10230
10230
  }
10231
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10232
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.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: "@for (menuItemGroup of menuItemGroups() | keyvalue; track menuItemGroup; let isLast = $last) {\n @for (menuItem of menuItemGroup.value; track menuItem) {\n <button class=\"menu-item\"\n [ngClass]=\"menuItem.cssClass\"\n [disabled]=\"menuItem.disabled\"\n (click)=\"onMenuItemClick(menuItem)\">\n <wb-menu-item [menuItem]=\"menuItem\"/>\n <div class=\"accelerator\">{{menuItem.accelerator | wbFormatAccelerator}}</div>\n </button>\n }\n @if (!isLast) {\n <hr>\n }\n}\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:is(button,#sci-reset){all:unset;display:flex;flex-flow:row nowrap;padding:.6em 1.5em;font-size:smaller;position:relative;-webkit-user-select:none;user-select:none;cursor:var(--sci-workbench-button-cursor)}:host>button.menu-item:is(button,#sci-reset)>wb-menu-item{flex:auto}:host>button.menu-item:is(button,#sci-reset)>div.accelerator{flex:none;margin-left:1em}:host>button.menu-item:is(button,#sci-reset):hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>button.menu-item:is(button,#sci-reset):disabled{opacity:.5;pointer-events:none}:host>button.menu-item:is(button,#sci-reset):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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: WbFormatAcceleratorPipe, name: "wbFormatAccelerator" }, { kind: "component", type: MenuItemComponent, selector: "wb-menu-item", inputs: ["menuItem"] }] });
10231
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10232
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", 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: "@for (menuItemGroup of menuItemGroups() | keyvalue; track menuItemGroup; let isLast = $last) {\n @for (menuItem of menuItemGroup.value; track menuItem) {\n <button class=\"menu-item\"\n [ngClass]=\"menuItem.cssClass\"\n [disabled]=\"menuItem.disabled\"\n (click)=\"onMenuItemClick(menuItem)\">\n <wb-menu-item [menuItem]=\"menuItem\"/>\n <div class=\"accelerator\">{{menuItem.accelerator | wbFormatAccelerator}}</div>\n </button>\n }\n @if (!isLast) {\n <hr>\n }\n}\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:is(button,#sci-reset){all:unset;display:flex;flex-flow:row nowrap;padding:.6em 1.5em;font-size:smaller;position:relative;-webkit-user-select:none;user-select:none;cursor:var(--sci-workbench-button-cursor)}:host>button.menu-item:is(button,#sci-reset)>wb-menu-item{flex:auto}:host>button.menu-item:is(button,#sci-reset)>div.accelerator{flex:none;margin-left:1em}:host>button.menu-item:is(button,#sci-reset):hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>button.menu-item:is(button,#sci-reset):disabled{opacity:.5;pointer-events:none}:host>button.menu-item:is(button,#sci-reset):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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MenuItemComponent, selector: "wb-menu-item", inputs: ["menuItem"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: WbFormatAcceleratorPipe, name: "wbFormatAccelerator" }] });
10233
10233
  }
10234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMenuComponent, decorators: [{
10234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMenuComponent, decorators: [{
10235
10235
  type: Component,
10236
10236
  args: [{ selector: 'wb-view-menu', imports: [
10237
10237
  NgClass,
@@ -10260,11 +10260,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
10260
10260
  }] } });
10261
10261
 
10262
10262
  class TextComponent {
10263
- text = input.required();
10264
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10265
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.2", type: TextComponent, isStandalone: true, selector: "wb-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '{{(text() | wbText)()}}', isInline: true, styles: [":host{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }] });
10263
+ text = input.required(...(ngDevMode ? [{ debugName: "text" }] : []));
10264
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10265
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.3", type: TextComponent, isStandalone: true, selector: "wb-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '{{(text() | wbText)()}}', isInline: true, styles: [":host{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }] });
10266
10266
  }
10267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextComponent, decorators: [{
10267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextComponent, decorators: [{
10268
10268
  type: Component,
10269
10269
  args: [{ selector: 'wb-text', template: '{{(text() | wbText)()}}', imports: [
10270
10270
  TextPipe,
@@ -10300,17 +10300,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
10300
10300
  function rootEffect(effectFn, options) {
10301
10301
  const injector = options?.injector ?? inject(Injector);
10302
10302
  const rootInjector = injector.get(ApplicationRef).injector;
10303
- const effectRef = effect(effectFn, {
10304
- ...options,
10305
- injector: rootInjector,
10306
- manualCleanup: true,
10307
- });
10303
+ const effectRef = effect(effectFn, ...(ngDevMode ? [{ debugName: "effectRef", ...options,
10304
+ injector: rootInjector,
10305
+ manualCleanup: true }] : [{
10306
+ ...options,
10307
+ injector: rootInjector,
10308
+ manualCleanup: true,
10309
+ }]));
10308
10310
  const manualCleanup = options?.manualCleanup ?? false;
10309
10311
  if (!manualCleanup) {
10310
10312
  injector.get(DestroyRef).onDestroy(() => effectRef.destroy());
10311
10313
  }
10312
10314
  return effectRef;
10313
10315
  }
10316
+ /**
10317
+ * Like {@link toObservable}, but uses a root effect to continue emitting even if the "contextual" component is detached from the change detector tree.
10318
+ *
10319
+ * @see rootEffect
10320
+ */
10321
+ function toRootObservable(source, options) {
10322
+ const injector = options?.injector ?? inject(Injector);
10323
+ const rootInjector = injector.get(ApplicationRef).injector;
10324
+ const observableInjector = createEnvironmentInjector([], rootInjector);
10325
+ injector.get(DestroyRef).onDestroy(() => observableInjector.destroy());
10326
+ return toObservable(source, { injector: observableInjector });
10327
+ }
10314
10328
 
10315
10329
  /*
10316
10330
  * Copyright (c) 2018-2022 Swiss Federal Railways
@@ -10569,10 +10583,10 @@ class ViewMenuService {
10569
10583
  });
10570
10584
  }
10571
10585
  }
10572
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10573
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMenuService, providedIn: 'root' });
10586
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10587
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMenuService, providedIn: 'root' });
10574
10588
  }
10575
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMenuService, decorators: [{
10589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMenuService, decorators: [{
10576
10590
  type: Injectable,
10577
10591
  args: [{ providedIn: 'root' }]
10578
10592
  }], ctorParameters: () => [] });
@@ -10624,11 +10638,11 @@ class ViewTabComponent {
10624
10638
  _layout = inject(WorkbenchLayoutService).layout;
10625
10639
  _injector = inject(Injector);
10626
10640
  host = inject(ElementRef).nativeElement;
10627
- view = input.required({ alias: 'viewId', transform: (viewId) => this._viewRegistry.get(viewId) });
10641
+ view = input.required(...(ngDevMode ? [{ debugName: "view", alias: 'viewId', transform: (viewId) => this._viewRegistry.get(viewId) }] : [{ alias: 'viewId', transform: (viewId) => this._viewRegistry.get(viewId) }]));
10628
10642
  boundingClientRect = boundingClientRect(inject(ElementRef));
10629
10643
  viewTabContentPortal;
10630
10644
  viewDragService = inject(ViewDragService);
10631
- viewTitleOffsetRight = computed(() => this.view().closable() ? '1.5rem' : undefined); // offset for the title to not overlap the close button
10645
+ viewTitleOffsetRight = computed(() => this.view().closable() ? '1.5rem' : undefined, ...(ngDevMode ? [{ debugName: "viewTitleOffsetRight" }] : [])); // offset for the title to not overlap the close button
10632
10646
  constructor() {
10633
10647
  this.addHostCssClasses();
10634
10648
  this.installMenuAccelerators();
@@ -10714,10 +10728,10 @@ class ViewTabComponent {
10714
10728
  }));
10715
10729
  });
10716
10730
  }
10717
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10718
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ViewTabComponent, isStandalone: true, selector: "wb-view-tab", inputs: { view: { classPropertyName: "view", publicName: "viewId", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()", "mousedown": "onMousedown($event)", "contextmenu": "onContextmenu($event)", "dragstart": "onDragStart($event)", "dragend": "onDragEnd()" }, properties: { "attr.data-viewid": "view().id", "attr.data-active": "view().active() ? '' : null", "attr.data-dirty": "view().dirty() ? '' : null", "attr.data-focus-within-view": "view().focused() ? '' : null", "attr.draggable": "true", "attr.tabindex": "-1", "class.view-drag": "viewDragService.dragging()", "style.--sci-workbench-tab-title-offset-right": "viewTitleOffsetRight()" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n@if (view().active()) {\n <div class=\"corner-radius start\">\n <div class=\"circle\"></div>\n </div>\n}\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().active()) {\n <div class=\"corner-radius end\">\n <div class=\"circle\"></div>\n </div>\n}\n\n@if (view().closable()) {\n <button (click)=\"onClose($event)\"\n [title]=\"('%workbench.close_tab.tooltip;close_others_modifier=Alt' | wbText)()\"\n [disabled]=\"!view().isClosable()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n </button>\n}\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:var(--sci-workbench-tab-cursor);box-sizing:border-box;outline:none;border-top:var(--sci-workbench-tab-border-top-width) solid transparent;border-left:var(--sci-workbench-tab-border-width) solid transparent;border-right:var(--sci-workbench-tab-border-width) solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host[data-active]{cursor:default;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-part[data-peripheral] :host[data-active]{background-color:var(--sci-workbench-view-peripheral-background-color)}:host[data-active]>div.content{color:var(--sci-workbench-tab-text-color-active)}:host[data-active][data-focus-within-view]>div.content{color:var(--sci-workbench-part-active-tab-text-color-active)}:host>div.content{display:inline-grid;font-family:var(--sci-workbench-tab-font-family),sans-serif;font-size:var(--sci-workbench-tab-font-size);font-weight:var(--sci-workbench-tab-font-weight);min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate;transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);position:absolute;right:calc(var(--sci-workbench-tab-padding-inline) - .125em);visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host[data-active]>button.close:is(button,#sci-reset),:host:hover:not(.view-drag)>button.close:is(button,#sci-reset){visibility:visible}@container style(--sci-workbench-tab-background-color-hover){:host:hover:not([data-active]):not(.view-drag):before{content:\"\";position:absolute;place-self:start center;box-sizing:border-box;height:calc(100% - var(--sci-workbench-tab-padding-block-hover) - var(--sci-workbench-part-bar-border-bottom-width));width:calc(100% - var(--sci-workbench-tab-padding-inline-hover) + 2 * var(--sci-workbench-tab-border-width));background-color:var(--sci-workbench-tab-background-color-hover);border:var(--sci-workbench-tab-border-width) solid var(--sci-workbench-tab-background-color-hover);border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host:hover:not([data-active]):not(.view-drag)>button.close:is(button,#sci-reset):not(:disabled):hover{background-color:color-mix(in srgb,var(--sci-workbench-tab-background-color-hover) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}}: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 var(--sci-workbench-tab-border-width) var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-part[data-peripheral] :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:is(button,#sci-reset){top:5px;right:5px}}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
10731
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10732
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ViewTabComponent, isStandalone: true, selector: "wb-view-tab", inputs: { view: { classPropertyName: "view", publicName: "viewId", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()", "mousedown": "onMousedown($event)", "contextmenu": "onContextmenu($event)", "dragstart": "onDragStart($event)", "dragend": "onDragEnd()" }, properties: { "attr.data-viewid": "view().id", "attr.data-active": "view().active() ? '' : null", "attr.data-dirty": "view().dirty() ? '' : null", "attr.data-focus-within-view": "view().focused() ? '' : null", "attr.draggable": "true", "attr.tabindex": "-1", "class.view-drag": "viewDragService.dragging()", "style.--sci-workbench-tab-title-offset-right": "viewTitleOffsetRight()" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n@if (view().active()) {\n <div class=\"corner-radius start\">\n <div class=\"circle\"></div>\n </div>\n}\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().active()) {\n <div class=\"corner-radius end\">\n <div class=\"circle\"></div>\n </div>\n}\n\n@if (view().closable()) {\n <button (click)=\"onClose($event)\"\n [title]=\"('%workbench.close_tab.tooltip;close_others_modifier=Alt' | wbText)()\"\n [disabled]=\"!view().isClosable()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n </button>\n}\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:var(--sci-workbench-tab-cursor);box-sizing:border-box;outline:none;border-top:var(--sci-workbench-tab-border-top-width) solid transparent;border-left:var(--sci-workbench-tab-border-width) solid transparent;border-right:var(--sci-workbench-tab-border-width) solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host[data-active]{cursor:default;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-part[data-peripheral] :host[data-active]{background-color:var(--sci-workbench-view-peripheral-background-color)}:host[data-active]>div.content{color:var(--sci-workbench-tab-text-color-active)}:host[data-active][data-focus-within-view]>div.content{color:var(--sci-workbench-part-active-tab-text-color-active)}:host>div.content{display:inline-grid;font-family:var(--sci-workbench-tab-font-family),sans-serif;font-size:var(--sci-workbench-tab-font-size);font-weight:var(--sci-workbench-tab-font-weight);min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate;transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);position:absolute;right:calc(var(--sci-workbench-tab-padding-inline) - .125em);visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host[data-active]>button.close:is(button,#sci-reset),:host:hover:not(.view-drag)>button.close:is(button,#sci-reset){visibility:visible}@container style(--sci-workbench-tab-background-color-hover){:host:hover:not([data-active]):not(.view-drag):before{content:\"\";position:absolute;place-self:start center;box-sizing:border-box;height:calc(100% - var(--sci-workbench-tab-padding-block-hover) - var(--sci-workbench-part-bar-border-bottom-width));width:calc(100% - var(--sci-workbench-tab-padding-inline-hover) + 2 * var(--sci-workbench-tab-border-width));background-color:var(--sci-workbench-tab-background-color-hover);border:var(--sci-workbench-tab-border-width) solid var(--sci-workbench-tab-background-color-hover);border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host:hover:not([data-active]):not(.view-drag)>button.close:is(button,#sci-reset):not(:disabled):hover{background-color:color-mix(in srgb,var(--sci-workbench-tab-background-color-hover) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}}: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 var(--sci-workbench-tab-border-width) var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-part[data-peripheral] :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:is(button,#sci-reset){top:5px;right:5px}}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
10719
10733
  }
10720
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabComponent, decorators: [{
10734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabComponent, decorators: [{
10721
10735
  type: Component,
10722
10736
  args: [{ selector: 'wb-view-tab', imports: [
10723
10737
  CdkPortalOutlet,
@@ -10810,10 +10824,10 @@ class ViewTabDragImageComponent {
10810
10824
  .pipe(subscribeIn(fn => zone.runOutsideAngular(fn)), map(event => event.defaultPrevented), distinctUntilChanged());
10811
10825
  return toSignal(canDrop$, { initialValue: false });
10812
10826
  }
10813
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabDragImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10814
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ViewTabDragImageComponent, isStandalone: true, selector: "wb-view-tab-drag-image", host: { properties: { "attr.data-viewid": "view().id", "attr.data-active": "view().active() ? '' : null", "class.view-drag": "true", "class.can-drop": "canDrop()", "class.drag-over-tabbar": "isDragOverTabbar()", "class.drag-over-peripheral-tabbar": "isDragOverPeripheralTabbar()" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n@if (view().active()) {\n <div class=\"corner-radius start\">\n <div class=\"circle\"></div>\n </div>\n}\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().active()) {\n <div class=\"corner-radius end\">\n <div class=\"circle\"></div>\n </div>\n}\n\n@if (view().closable()) {\n <button (click)=\"onClose($event)\"\n [title]=\"('%workbench.close_tab.tooltip;close_others_modifier=Alt' | wbText)()\"\n [disabled]=\"!view().isClosable()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n </button>\n}\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:var(--sci-workbench-tab-cursor);box-sizing:border-box;outline:none;border-top:var(--sci-workbench-tab-border-top-width) solid transparent;border-left:var(--sci-workbench-tab-border-width) solid transparent;border-right:var(--sci-workbench-tab-border-width) solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host[data-active]{cursor:default;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-part[data-peripheral] :host[data-active]{background-color:var(--sci-workbench-view-peripheral-background-color)}:host[data-active]>div.content{color:var(--sci-workbench-tab-text-color-active)}:host[data-active][data-focus-within-view]>div.content{color:var(--sci-workbench-part-active-tab-text-color-active)}:host>div.content{display:inline-grid;font-family:var(--sci-workbench-tab-font-family),sans-serif;font-size:var(--sci-workbench-tab-font-size);font-weight:var(--sci-workbench-tab-font-weight);min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate;transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);position:absolute;right:calc(var(--sci-workbench-tab-padding-inline) - .125em);visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host[data-active]>button.close:is(button,#sci-reset),:host:hover:not(.view-drag)>button.close:is(button,#sci-reset){visibility:visible}@container style(--sci-workbench-tab-background-color-hover){:host:hover:not([data-active]):not(.view-drag):before{content:\"\";position:absolute;place-self:start center;box-sizing:border-box;height:calc(100% - var(--sci-workbench-tab-padding-block-hover) - var(--sci-workbench-part-bar-border-bottom-width));width:calc(100% - var(--sci-workbench-tab-padding-inline-hover) + 2 * var(--sci-workbench-tab-border-width));background-color:var(--sci-workbench-tab-background-color-hover);border:var(--sci-workbench-tab-border-width) solid var(--sci-workbench-tab-background-color-hover);border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host:hover:not([data-active]):not(.view-drag)>button.close:is(button,#sci-reset):not(:disabled):hover{background-color:color-mix(in srgb,var(--sci-workbench-tab-background-color-hover) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}}: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 var(--sci-workbench-tab-border-width) var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-part[data-peripheral] :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:is(button,#sci-reset){top:5px;right:5px}}\n", ":host{--sci-workbench-tab-text-color-active: var(--sci-workbench-tab-drag-text-color)}:host.drag-over-peripheral-tabbar{--sci-workbench-view-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}:host:not(.drag-over-tabbar)>div.content{transform:unset}:host:not(.drag-over-tabbar)>button.close:is(button,#sci-reset){transform:unset}:host:not(.can-drop){--sci-workbench-tab-text-color-active: var(--sci-workbench-tab-drag-text-color-disabled);--sci-workbench-tab-drag-border-color: var(--sci-workbench-tab-drag-border-color-disabled)}:host:not(.can-drop) button.close:is(button,#sci-reset){color:var(--sci-workbench-tab-drag-text-color-disabled)}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
10827
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabDragImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10828
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ViewTabDragImageComponent, isStandalone: true, selector: "wb-view-tab-drag-image", host: { properties: { "attr.data-viewid": "view().id", "attr.data-active": "view().active() ? '' : null", "class.view-drag": "true", "class.can-drop": "canDrop()", "class.drag-over-tabbar": "isDragOverTabbar()", "class.drag-over-peripheral-tabbar": "isDragOverPeripheralTabbar()" } }, ngImport: i0, template: "<!-- IMPORTANT: THIS HTML FILE IS ALSO USED BY `ViewTabDragImageComponent` -->\n\n@if (view().active()) {\n <div class=\"corner-radius start\">\n <div class=\"circle\"></div>\n </div>\n}\n\n<div class=\"content\">\n <ng-container *cdkPortalOutlet=\"viewTabContentPortal()\"/>\n</div>\n\n@if (view().active()) {\n <div class=\"corner-radius end\">\n <div class=\"circle\"></div>\n </div>\n}\n\n@if (view().closable()) {\n <button (click)=\"onClose($event)\"\n [title]=\"('%workbench.close_tab.tooltip;close_others_modifier=Alt' | wbText)()\"\n [disabled]=\"!view().isClosable()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n </button>\n}\n", styles: [":host{display:grid;align-items:center;padding-left:var(--sci-workbench-tab-padding-inline);padding-right:var(--sci-workbench-tab-padding-inline);position:relative;-webkit-user-select:none;user-select:none;cursor:var(--sci-workbench-tab-cursor);box-sizing:border-box;outline:none;border-top:var(--sci-workbench-tab-border-top-width) solid transparent;border-left:var(--sci-workbench-tab-border-width) solid transparent;border-right:var(--sci-workbench-tab-border-width) solid transparent;border-top-left-radius:var(--sci-workbench-tab-border-radius);border-top-right-radius:var(--sci-workbench-tab-border-radius)}:host[data-active]{cursor:default;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-part[data-peripheral] :host[data-active]{background-color:var(--sci-workbench-view-peripheral-background-color)}:host[data-active]>div.content{color:var(--sci-workbench-tab-text-color-active)}:host[data-active][data-focus-within-view]>div.content{color:var(--sci-workbench-part-active-tab-text-color-active)}:host>div.content{display:inline-grid;font-family:var(--sci-workbench-tab-font-family),sans-serif;font-size:var(--sci-workbench-tab-font-size);font-weight:var(--sci-workbench-tab-font-weight);min-width:var(--sci-workbench-tab-min-width);max-width:var(--sci-workbench-tab-max-width);isolation:isolate;transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);position:absolute;right:calc(var(--sci-workbench-tab-padding-inline) - .125em);visibility:hidden;padding:.125em;border-radius:var(--sci-corner-small);transform:translateY(calc(-1 * var(--sci-workbench-tab-border-top-width)))}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host[data-active]>button.close:is(button,#sci-reset),:host:hover:not(.view-drag)>button.close:is(button,#sci-reset){visibility:visible}@container style(--sci-workbench-tab-background-color-hover){:host:hover:not([data-active]):not(.view-drag):before{content:\"\";position:absolute;place-self:start center;box-sizing:border-box;height:calc(100% - var(--sci-workbench-tab-padding-block-hover) - var(--sci-workbench-part-bar-border-bottom-width));width:calc(100% - var(--sci-workbench-tab-padding-inline-hover) + 2 * var(--sci-workbench-tab-border-width));background-color:var(--sci-workbench-tab-background-color-hover);border:var(--sci-workbench-tab-border-width) solid var(--sci-workbench-tab-background-color-hover);border-radius:var(--sci-workbench-tab-border-radius);pointer-events:none}:host:hover:not([data-active]):not(.view-drag)>button.close:is(button,#sci-reset):not(:disabled):hover{background-color:color-mix(in srgb,var(--sci-workbench-tab-background-color-hover) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}}: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 var(--sci-workbench-tab-border-width) var(--sci-workbench-tab-border-color);box-sizing:content-box}wb-part[data-peripheral] :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:is(button,#sci-reset){top:5px;right:5px}}\n", ":host{--sci-workbench-tab-text-color-active: var(--sci-workbench-tab-drag-text-color)}:host.drag-over-peripheral-tabbar{--sci-workbench-view-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}:host:not(.drag-over-tabbar)>div.content{transform:unset}:host:not(.drag-over-tabbar)>button.close:is(button,#sci-reset){transform:unset}:host:not(.can-drop){--sci-workbench-tab-text-color-active: var(--sci-workbench-tab-drag-text-color-disabled);--sci-workbench-tab-drag-border-color: var(--sci-workbench-tab-drag-border-color-disabled)}:host:not(.can-drop) button.close:is(button,#sci-reset){color:var(--sci-workbench-tab-drag-text-color-disabled)}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
10815
10829
  }
10816
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabDragImageComponent, decorators: [{
10830
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabDragImageComponent, decorators: [{
10817
10831
  type: Component,
10818
10832
  args: [{ selector: 'wb-view-tab-drag-image', imports: [
10819
10833
  CdkPortalOutlet,
@@ -10984,10 +10998,10 @@ class ViewTabDragImageRenderer {
10984
10998
  }
10985
10999
  });
10986
11000
  }
10987
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabDragImageRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10988
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabDragImageRenderer, providedIn: 'root' });
11001
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabDragImageRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11002
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabDragImageRenderer, providedIn: 'root' });
10989
11003
  }
10990
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabDragImageRenderer, decorators: [{
11004
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabDragImageRenderer, decorators: [{
10991
11005
  type: Injectable,
10992
11006
  args: [{ providedIn: 'root' }]
10993
11007
  }], ctorParameters: () => [] });
@@ -11013,18 +11027,18 @@ class DragImageWorkbenchView {
11013
11027
  last = signal(true).asReadonly();
11014
11028
  position = signal(0).asReadonly();
11015
11029
  scrolledIntoView = signal(true).asReadonly();
11016
- menuItems = signal([]);
11030
+ menuItems = signal([], ...(ngDevMode ? [{ debugName: "menuItems" }] : []));
11017
11031
  isClosable;
11018
- activationInstant = signal(0);
11032
+ activationInstant = signal(0, ...(ngDevMode ? [{ debugName: "activationInstant" }] : []));
11019
11033
  constructor(dragData) {
11020
11034
  this.id = dragData.viewId;
11021
11035
  this.alternativeId = dragData.alternativeViewId;
11022
- this.part = computed(() => throwError('UnsupportedOperationError'));
11023
- this.navigation = signal(dragData.navigation && { ...dragData.navigation, id: UUID.randomUUID() });
11024
- this.navigationHint = computed(() => this.navigation()?.hint);
11025
- this.navigationData = computed(() => this.navigation()?.data ?? {});
11026
- this.navigationState = computed(() => this.navigation()?.state ?? {});
11027
- this.urlSegments = computed(() => this.navigation()?.path ?? []);
11036
+ this.part = computed(() => throwError('UnsupportedOperationError'), ...(ngDevMode ? [{ debugName: "part" }] : []));
11037
+ this.navigation = signal(dragData.navigation && { ...dragData.navigation, id: UUID.randomUUID() }, ...(ngDevMode ? [{ debugName: "navigation" }] : []));
11038
+ this.navigationHint = computed(() => this.navigation()?.hint, ...(ngDevMode ? [{ debugName: "navigationHint" }] : []));
11039
+ this.navigationData = computed(() => this.navigation()?.data ?? {}, ...(ngDevMode ? [{ debugName: "navigationData" }] : []));
11040
+ this.navigationState = computed(() => this.navigation()?.state ?? {}, ...(ngDevMode ? [{ debugName: "navigationState" }] : []));
11041
+ this.urlSegments = computed(() => this.navigation()?.path ?? [], ...(ngDevMode ? [{ debugName: "urlSegments" }] : []));
11028
11042
  this.title = signal(dragData.viewTitle).asReadonly();
11029
11043
  this.heading = signal(dragData.viewHeading).asReadonly();
11030
11044
  this.dirty = signal(dragData.viewDirty).asReadonly();
@@ -11088,7 +11102,7 @@ class ViewTabBarComponent {
11088
11102
  /**
11089
11103
  * Defines the maximum available width for the tab bar, used to constrain the drag image to the tab bar bounds.
11090
11104
  */
11091
- maxWidth = input.required();
11105
+ maxWidth = input.required(...(ngDevMode ? [{ debugName: "maxWidth" }] : []));
11092
11106
  _host = inject(ElementRef).nativeElement;
11093
11107
  _partBarElement = inject(PART_BAR_ELEMENT);
11094
11108
  _viewportChange$ = new Subject();
@@ -11097,7 +11111,7 @@ class ViewTabBarComponent {
11097
11111
  _viewTabDragImageRenderer = inject(ViewTabDragImageRenderer);
11098
11112
  _viewDragService = inject(ViewDragService);
11099
11113
  _zone = inject(NgZone);
11100
- _viewTabs = viewChildren(ViewTabComponent);
11114
+ _viewTabs = viewChildren(ViewTabComponent, ...(ngDevMode ? [{ debugName: "_viewTabs" }] : []));
11101
11115
  _hostBoundingClientRect = boundingClientRect(inject(ElementRef));
11102
11116
  _viewportComponent = viewChild.required(SciViewportComponent);
11103
11117
  _viewportComponentElement = viewChild.required(SciViewportComponent, { read: (ElementRef) });
@@ -11111,12 +11125,12 @@ class ViewTabBarComponent {
11111
11125
  /**
11112
11126
  * Reference to the tab before which to insert the drag source on drop, or `end` if dropping it after the last tab.
11113
11127
  */
11114
- dropTargetViewTab = signal(null);
11128
+ dropTargetViewTab = signal(null, ...(ngDevMode ? [{ debugName: "dropTargetViewTab" }] : []));
11115
11129
  /**
11116
11130
  * Reference to the tab where the drag operation was started.
11117
11131
  * This reference is only set if the drag operation started on a tab of this tabbar.
11118
11132
  */
11119
- dragSourceViewTab = signal(null);
11133
+ dragSourceViewTab = signal(null, ...(ngDevMode ? [{ debugName: "dragSourceViewTab" }] : []));
11120
11134
  /**
11121
11135
  * Transfer data of the tab being dragged over this tabbar.
11122
11136
  */
@@ -11128,7 +11142,7 @@ class ViewTabBarComponent {
11128
11142
  /**
11129
11143
  * Signals when unsetting drag state.
11130
11144
  */
11131
- _onUnsetDragState = signal(undefined, { equal: () => false });
11145
+ _onUnsetDragState = signal(undefined, ...(ngDevMode ? [{ debugName: "_onUnsetDragState", equal: () => false }] : [{ equal: () => false }]));
11132
11146
  /**
11133
11147
  * Tabbar indents where to display the rounded bottom corners of the first and last view tab.
11134
11148
  */
@@ -11530,10 +11544,10 @@ class ViewTabBarComponent {
11530
11544
  ngOnDestroy() {
11531
11545
  this.unsetDragState();
11532
11546
  }
11533
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11534
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ViewTabBarComponent, isStandalone: true, selector: "wb-view-tab-bar", inputs: { maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "_viewTabs", predicate: ViewTabComponent, descendants: true, isSignal: true }, { propertyName: "_viewportComponent", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }, { propertyName: "_viewportComponentElement", first: true, predicate: SciViewportComponent, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "_tabCornerRadiusElement", first: true, predicate: ["tab_corner_radius"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<sci-viewport class=\"e2e-tab-viewport\" scrollbarStyle=\"hidden\">\n @for (view of part.views(); track view.id) {\n @if (viewtab === dropTargetViewTab()) {\n <div class=\"divider\"></div>\n }\n <wb-view-tab #viewtab\n [viewId]=\"view.id\"\n [class.drag-source]=\"viewtab === dragSourceViewTab()\"\n [class.drop-target]=\"viewtab === dropTargetViewTab()\"/>\n <div class=\"divider\"></div>\n }\n\n <!-- Placeholder for expanding the viewport when dragging a tab to the right, moving part actions along with the dragover event. -->\n <div class=\"drag-placeholder\"></div>\n</sci-viewport>\n\n<!-- Element for injecting the corner radius into the component. -->\n<div class=\"tab-corner-radius\" #tab_corner_radius></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-placeholder-width: 0;display:grid}:host>sci-viewport::part(content){display:flex;padding-left:var(--\\275part-bar-indent-left)}:host>sci-viewport::part(content):after{flex:none;width:var(--\\275part-bar-indent-right);content:\"\"}:host>sci-viewport>wb-view-tab{flex:none}:host>sci-viewport>wb-view-tab.drag-source{display:none}:host>sci-viewport>div.divider{flex:none;display:flex;position:relative;width:0}:host>sci-viewport>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)}@container style(--sci-workbench-tab-background-color-hover){:host>sci-viewport>div.divider{transition:opacity .2s ease-out}:host>sci-viewport>wb-view-tab:hover+div.divider{opacity:0}:host>sci-viewport>div.divider:has(+wb-view-tab:hover){opacity:0}}:host>sci-viewport>div.drag-placeholder{flex:none;width:var(--\\275part-bar-drag-placeholder-width)}:host>sci-viewport>wb-view-tab.drop-target,:host>sci-viewport wb-view-tab.drop-target~:is(wb-view-tab,div.divider),:host>sci-viewport>div.divider:has(+wb-view-tab.drop-target){transform:translate(var(--\\275part-bar-drag-source-width))}:host>sci-viewport>wb-view-tab:is([data-active],.drag-source)+div.divider{display:none}:host>sci-viewport>div.divider:has(+wb-view-tab[data-active]:not(.drag-source)){display:none}:host>sci-viewport>div.divider:has(+wb-view-tab.drag-source:not([data-active])){display:none}:host:not(.drag-over)>sci-viewport:not(:has(wb-view-tab:not(.drag-source)))::part(content):after{display:none}:host.on-drag-enter:not(.on-drag-start) wb-view-tab,:host.on-drag-enter:not(.on-drag-start) div.divider,:host.drag-over wb-view-tab,:host.drag-over div.divider,:host.on-drag-leave wb-view-tab,:host.on-drag-leave div.divider{transition:transform 175ms cubic-bezier(0,0,.2,1)}:host.on-drag-enter:not(.on-drag-start) div.drag-placeholder,:host.on-drag-leave div.drag-placeholder{transition:width 175ms cubic-bezier(0,0,.2,1)}:host:not(:has(wb-view-tab.drag-source)):not(:has(wb-view-tab.drop-target)):not(.drag-over) div.drag-placeholder{display:none}:host.pointer-events-disabled>sci-viewport::part(content){pointer-events:none}:host>div.tab-corner-radius{position:absolute;visibility:hidden;width:var(--sci-workbench-tab-border-radius)}\n"], dependencies: [{ kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "component", type: ViewTabComponent, selector: "wb-view-tab", inputs: ["viewId"] }] });
11547
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11548
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ViewTabBarComponent, isStandalone: true, selector: "wb-view-tab-bar", inputs: { maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "_viewTabs", predicate: ViewTabComponent, descendants: true, isSignal: true }, { propertyName: "_viewportComponent", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }, { propertyName: "_viewportComponentElement", first: true, predicate: SciViewportComponent, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "_tabCornerRadiusElement", first: true, predicate: ["tab_corner_radius"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<sci-viewport class=\"e2e-tab-viewport\" scrollbarStyle=\"hidden\">\n @for (view of part.views(); track view.id) {\n @if (viewtab === dropTargetViewTab()) {\n <div class=\"divider\"></div>\n }\n <wb-view-tab #viewtab\n [viewId]=\"view.id\"\n [class.drag-source]=\"viewtab === dragSourceViewTab()\"\n [class.drop-target]=\"viewtab === dropTargetViewTab()\"/>\n <div class=\"divider\"></div>\n }\n\n <!-- Placeholder for expanding the viewport when dragging a tab to the right, moving part actions along with the dragover event. -->\n <div class=\"drag-placeholder\"></div>\n</sci-viewport>\n\n<!-- Element for injecting the corner radius into the component. -->\n<div class=\"tab-corner-radius\" #tab_corner_radius></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-placeholder-width: 0;display:grid}:host>sci-viewport::part(content){display:flex;padding-left:var(--\\275part-bar-indent-left)}:host>sci-viewport::part(content):after{flex:none;width:var(--\\275part-bar-indent-right);content:\"\"}:host>sci-viewport>wb-view-tab{flex:none}:host>sci-viewport>wb-view-tab.drag-source{display:none}:host>sci-viewport>div.divider{flex:none;display:flex;position:relative;width:0}:host>sci-viewport>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)}@container style(--sci-workbench-tab-background-color-hover){:host>sci-viewport>div.divider{transition:opacity .2s ease-out}:host>sci-viewport>wb-view-tab:hover+div.divider{opacity:0}:host>sci-viewport>div.divider:has(+wb-view-tab:hover){opacity:0}}:host>sci-viewport>div.drag-placeholder{flex:none;width:var(--\\275part-bar-drag-placeholder-width)}:host>sci-viewport>wb-view-tab.drop-target,:host>sci-viewport wb-view-tab.drop-target~:is(wb-view-tab,div.divider),:host>sci-viewport>div.divider:has(+wb-view-tab.drop-target){transform:translate(var(--\\275part-bar-drag-source-width))}:host>sci-viewport>wb-view-tab:is([data-active],.drag-source)+div.divider{display:none}:host>sci-viewport>div.divider:has(+wb-view-tab[data-active]:not(.drag-source)){display:none}:host>sci-viewport>div.divider:has(+wb-view-tab.drag-source:not([data-active])){display:none}:host:not(.drag-over)>sci-viewport:not(:has(wb-view-tab:not(.drag-source)))::part(content):after{display:none}:host.on-drag-enter:not(.on-drag-start) wb-view-tab,:host.on-drag-enter:not(.on-drag-start) div.divider,:host.drag-over wb-view-tab,:host.drag-over div.divider,:host.on-drag-leave wb-view-tab,:host.on-drag-leave div.divider{transition:transform 175ms cubic-bezier(0,0,.2,1)}:host.on-drag-enter:not(.on-drag-start) div.drag-placeholder,:host.on-drag-leave div.drag-placeholder{transition:width 175ms cubic-bezier(0,0,.2,1)}:host:not(:has(wb-view-tab.drag-source)):not(:has(wb-view-tab.drop-target)):not(.drag-over) div.drag-placeholder{display:none}:host.pointer-events-disabled>sci-viewport::part(content){pointer-events:none}:host>div.tab-corner-radius{position:absolute;visibility:hidden;width:var(--sci-workbench-tab-border-radius)}\n"], dependencies: [{ kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }, { kind: "component", type: ViewTabComponent, selector: "wb-view-tab", inputs: ["viewId"] }] });
11535
11549
  }
11536
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewTabBarComponent, decorators: [{
11550
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewTabBarComponent, decorators: [{
11537
11551
  type: Component,
11538
11552
  args: [{ selector: 'wb-view-tab-bar', imports: [
11539
11553
  SciViewportComponent,
@@ -11556,11 +11570,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
11556
11570
  const PART_BAR_ELEMENT = new InjectionToken('PART_BAR_ELEMENT');
11557
11571
  class PartBarComponent {
11558
11572
  _router = inject(ɵWorkbenchRouter);
11559
- _viewTabBar = viewChild(ViewTabBarComponent, { read: (ElementRef) });
11573
+ _viewTabBar = viewChild(ViewTabBarComponent, ...(ngDevMode ? [{ debugName: "_viewTabBar", read: (ElementRef) }] : [{ read: (ElementRef) }]));
11560
11574
  _fillerElement = viewChild.required('filler');
11561
11575
  part = inject(ɵWorkbenchPart);
11562
- startActions = computed(() => this.part.actions().filter(action => action.align === 'start'));
11563
- endActions = computed(() => this.part.actions().filter(action => action.align !== 'start'));
11576
+ startActions = computed(() => this.part.actions().filter(action => action.align === 'start'), ...(ngDevMode ? [{ debugName: "startActions" }] : []));
11577
+ endActions = computed(() => this.part.actions().filter(action => action.align !== 'start'), ...(ngDevMode ? [{ debugName: "endActions" }] : []));
11564
11578
  maxViewTabBarWidth;
11565
11579
  constructor() {
11566
11580
  this.maxViewTabBarWidth = this.calculateMaxViewTabBarWidth();
@@ -11613,12 +11627,12 @@ class PartBarComponent {
11613
11627
  const viewTabBarDimension = dimension(this._viewTabBar);
11614
11628
  return computed(() => (viewTabBarDimension()?.offsetWidth ?? 0) + fillerDimension().offsetWidth);
11615
11629
  }
11616
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11617
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: PartBarComponent, isStandalone: true, selector: "wb-part-bar", providers: [
11630
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11631
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: PartBarComponent, isStandalone: true, selector: "wb-part-bar", providers: [
11618
11632
  { provide: PART_BAR_ELEMENT, useFactory: () => inject(ElementRef).nativeElement },
11619
- ], viewQueries: [{ propertyName: "_viewTabBar", first: true, predicate: ViewTabBarComponent, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "_fillerElement", first: true, predicate: ["filler"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Title -->\n@if (part.title()) {\n <span class=\"title e2e-title\" (mousedown)=\"onPartBarMouseDown($event)\">{{(part.title() | wbText)()}}</span>\n}\n\n<!-- View Tabs -->\n@if (part.views().length) {\n <wb-view-tab-bar [maxWidth]=\"maxViewTabBarWidth()\"/>\n}\n\n<!-- Start Actions -->\n@if (startActions().length) {\n <div class=\"actions\">\n @for (action of startActions(); track action) {\n <wb-part-action [action]=\"action\" [ngClass]=\"action.cssClass\" data-align=\"start\"/>\n }\n </div>\n}\n\n<!-- Filler -->\n<div class=\"filler e2e-filler\" #filler (mousedown)=\"onPartBarMouseDown($event)\"></div>\n\n<!-- End Actions -->\n@if (endActions().length) {\n <div class=\"actions\">\n @for (action of endActions(); track action) {\n <wb-part-action [action]=\"action\" [ngClass]=\"action.cssClass\" data-align=\"end\"/>\n }\n </div>\n}\n\n<!-- View List Dropdown -->\n@if (part.views().length) {\n <wb-view-list-button [title]=\"('%workbench.show_open_tabs.tooltip' | wbText)()\"/>\n}\n\n<!-- Minimize Button -->\n@if (part.canMinimize()) {\n <button (click)=\"onMinimize()\" [title]=\"('%workbench.minimize.tooltip' | wbText)()\" class=\"minimize e2e-minimize\">\n <wb-icon icon=\"workbench.minimize\"/>\n </button>\n}\n", styles: [":host{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;container-name:viewtab;container-type:size;position:relative;padding-inline:var(--sci-workbench-part-bar-padding-inline)}:host:has(wb-view-tab-bar:first-child){padding-left:calc(var(--sci-workbench-part-bar-padding-inline) - var(--sci-workbench-tab-border-radius))}wb-part[data-peripheral] :host{background-color:var(--sci-workbench-part-peripheral-bar-background-color)}:host>span.title{flex:none;align-self:center;-webkit-user-select:none;user-select:none;margin-right:.5em;font-family:var(--sci-workbench-part-title-font-family),sans-serif;font-size:var(--sci-workbench-part-title-font-size);font-weight:var(--sci-workbench-part-title-font-weight);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>wb-view-tab-bar{flex:initial}:host>div.actions{flex:initial;display:flex;align-items:center;gap:var(--sci-workbench-part-bar-actions-gap);padding-inline:var(--sci-workbench-part-bar-actions-padding-inline)}:host>div.actions>wb-part-action{flex:initial}:host>div.filler{flex:auto}:host>wb-view-list-button{flex:none;align-self:center}:host>button.minimize:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;align-self:center}:host>button.minimize:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.minimize:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.minimize:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.minimize:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.minimize:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host:before{content:\"\";position:absolute;bottom:0;left:0;right:0;height:var(--sci-workbench-part-bar-border-bottom-width);background-color:var(--sci-workbench-tab-border-color)}\n"], dependencies: [{ kind: "component", type: ViewTabBarComponent, selector: "wb-view-tab-bar", inputs: ["maxWidth"] }, { kind: "component", type: PartActionComponent, selector: "wb-part-action", inputs: ["action"] }, { kind: "component", type: ViewListButtonComponent, selector: "wb-view-list-button" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
11633
+ ], viewQueries: [{ propertyName: "_viewTabBar", first: true, predicate: ViewTabBarComponent, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "_fillerElement", first: true, predicate: ["filler"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Title -->\n@if (part.title()) {\n <span class=\"title e2e-title\" (mousedown)=\"onPartBarMouseDown($event)\">{{(part.title() | wbText)()}}</span>\n}\n\n<!-- View Tabs -->\n@if (part.views().length) {\n <wb-view-tab-bar [maxWidth]=\"maxViewTabBarWidth()\"/>\n}\n\n<!-- Start Actions -->\n@if (startActions().length) {\n <div class=\"actions\">\n @for (action of startActions(); track action) {\n <wb-part-action [action]=\"action\" [ngClass]=\"action.cssClass\" data-align=\"start\"/>\n }\n </div>\n}\n\n<!-- Filler -->\n<div class=\"filler e2e-filler\" #filler (mousedown)=\"onPartBarMouseDown($event)\"></div>\n\n<!-- End Actions -->\n@if (endActions().length) {\n <div class=\"actions\">\n @for (action of endActions(); track action) {\n <wb-part-action [action]=\"action\" [ngClass]=\"action.cssClass\" data-align=\"end\"/>\n }\n </div>\n}\n\n<!-- View List Dropdown -->\n@if (part.views().length) {\n <wb-view-list-button [title]=\"('%workbench.show_open_tabs.tooltip' | wbText)()\"/>\n}\n\n<!-- Minimize Button -->\n@if (part.canMinimize()) {\n <button (click)=\"onMinimize()\" [title]=\"('%workbench.minimize.tooltip' | wbText)()\" class=\"minimize e2e-minimize\">\n <wb-icon icon=\"workbench.minimize\"/>\n </button>\n}\n", styles: [":host{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;container-name:viewtab;container-type:size;position:relative;padding-inline:var(--sci-workbench-part-bar-padding-inline)}:host:has(wb-view-tab-bar:first-child){padding-left:calc(var(--sci-workbench-part-bar-padding-inline) - var(--sci-workbench-tab-border-radius))}wb-part[data-peripheral] :host{background-color:var(--sci-workbench-part-peripheral-bar-background-color)}:host>span.title{flex:none;align-self:center;-webkit-user-select:none;user-select:none;margin-right:.5em;font-family:var(--sci-workbench-part-title-font-family),sans-serif;font-size:var(--sci-workbench-part-title-font-size);font-weight:var(--sci-workbench-part-title-font-weight);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host>wb-view-tab-bar{flex:initial}:host>div.actions{flex:initial;display:flex;align-items:center;gap:var(--sci-workbench-part-bar-actions-gap);padding-inline:var(--sci-workbench-part-bar-actions-padding-inline)}:host>div.actions>wb-part-action{flex:initial}:host>div.filler{flex:auto}:host>wb-view-list-button{flex:none;align-self:center}:host>button.minimize:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:.25em;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);flex:none;align-self:center}:host>button.minimize:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.minimize:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.minimize:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.minimize:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.minimize:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}:host:before{content:\"\";position:absolute;bottom:0;left:0;right:0;height:var(--sci-workbench-part-bar-border-bottom-width);background-color:var(--sci-workbench-tab-border-color)}\n"], dependencies: [{ kind: "component", type: ViewTabBarComponent, selector: "wb-view-tab-bar", inputs: ["maxWidth"] }, { kind: "component", type: PartActionComponent, selector: "wb-part-action", inputs: ["action"] }, { kind: "component", type: ViewListButtonComponent, selector: "wb-view-list-button" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: TextPipe, name: "wbText" }] });
11620
11634
  }
11621
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartBarComponent, decorators: [{
11635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartBarComponent, decorators: [{
11622
11636
  type: Component,
11623
11637
  args: [{ selector: 'wb-part-bar', imports: [
11624
11638
  ViewTabBarComponent,
@@ -11704,10 +11718,10 @@ class PartComponent {
11704
11718
  logger.debug(() => `Constructing PartComponent [partId=${this.part.id}]`, LoggerNames.LIFECYCLE);
11705
11719
  inject(DestroyRef).onDestroy(() => logger.debug(() => `Destroying PartComponent [partId=${this.part.id}]'`, LoggerNames.LIFECYCLE));
11706
11720
  }
11707
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11708
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: PartComponent, isStandalone: true, selector: "wb-part", host: { properties: { "attr.data-partid": "part.id", "attr.data-peripheral": "part.peripheral() ? '' : null", "attr.data-grid": "dasherize(part.gridName())", "attr.data-active": "part.active() ? '' : null", "attr.data-referencepart": "part.referencePart() ? '' : null", "attr.tabindex": "-1" } }, ngImport: i0, template: "@if (part.title() || part.views().length || part.actions().length || part.canMinimize()) {\n <wb-part-bar/>\n}\n\n@if (part.views().length) {\n <!-- Prevent splitting if there is no active view, i.e, when dragging the last view out of the tabbar. -->\n @let canSplit = !!part.activeView();\n <div wbViewDropZone\n [wbViewDropZoneRegionSize]=\".25\"\n [wbViewDropZonePlaceholderSize]=\".5\"\n [wbViewDropZoneAttributes]=\"{'data-partid': part.id}\"\n [wbViewDropZoneRegions]=\"canDrop() && {center: true, north: canSplit, south: canSplit, west: canSplit, east: canSplit}\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"\n class=\"content e2e-content e2e-view-content\">\n <ng-container *wbPortalOutlet=\"part.activeView()?.slot!.portal; destroyOnDetach: false\"/>\n </div>\n} @else {\n <div wbViewDropZone\n [wbViewDropZoneRegions]=\"canDrop() && {center: false, north: true, south: true, west: true, east: true}\"\n [wbViewDropZoneAttributes]=\"{'data-partid': part.id}\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"\n class=\"content e2e-content e2e-part-content\">\n <ng-container *wbPortalOutlet=\"part.slot.portal; destroyOnDetach: false\"/>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column;outline:none;background-color:var(--sci-workbench-part-background-color);overflow:hidden}:host[data-peripheral]{background-color:var(--sci-workbench-part-peripheral-background-color)}:host>wb-part-bar{flex:none}:host>div.content{flex:auto;display:grid;position:relative}\n"], dependencies: [{ kind: "component", type: PartBarComponent, selector: "wb-part-bar" }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }] });
11721
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11722
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: PartComponent, isStandalone: true, selector: "wb-part", host: { properties: { "attr.data-partid": "part.id", "attr.data-peripheral": "part.peripheral() ? '' : null", "attr.data-grid": "dasherize(part.gridName())", "attr.data-active": "part.active() ? '' : null", "attr.data-referencepart": "part.referencePart() ? '' : null", "attr.tabindex": "-1" } }, ngImport: i0, template: "@if (part.title() || part.views().length || part.actions().length || part.canMinimize()) {\n <wb-part-bar/>\n}\n\n@if (part.views().length) {\n <!-- Prevent splitting if there is no active view, i.e, when dragging the last view out of the tabbar. -->\n @let canSplit = !!part.activeView();\n <div wbViewDropZone\n [wbViewDropZoneRegionSize]=\".25\"\n [wbViewDropZonePlaceholderSize]=\".5\"\n [wbViewDropZoneAttributes]=\"{'data-partid': part.id}\"\n [wbViewDropZoneRegions]=\"canDrop() && {center: true, north: canSplit, south: canSplit, west: canSplit, east: canSplit}\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"\n class=\"content e2e-content e2e-view-content\">\n <ng-container *wbPortalOutlet=\"part.activeView()?.slot!.portal; destroyOnDetach: false\"/>\n </div>\n} @else {\n <div wbViewDropZone\n [wbViewDropZoneRegions]=\"canDrop() && {center: false, north: true, south: true, west: true, east: true}\"\n [wbViewDropZoneAttributes]=\"{'data-partid': part.id}\"\n (wbViewDropZoneDrop)=\"onViewDrop($event)\"\n class=\"content e2e-content e2e-part-content\">\n <ng-container *wbPortalOutlet=\"part.slot.portal; destroyOnDetach: false\"/>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column;outline:none;background-color:var(--sci-workbench-part-background-color);overflow:hidden}:host[data-peripheral]{background-color:var(--sci-workbench-part-peripheral-background-color)}:host>wb-part-bar{flex:none}:host>div.content{flex:auto;display:grid;position:relative}\n"], dependencies: [{ kind: "component", type: PartBarComponent, selector: "wb-part-bar" }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }] });
11709
11723
  }
11710
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PartComponent, decorators: [{
11724
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PartComponent, decorators: [{
11711
11725
  type: Component,
11712
11726
  args: [{ selector: 'wb-part', imports: [
11713
11727
  PartBarComponent,
@@ -11739,23 +11753,23 @@ class ɵWorkbenchPart {
11739
11753
  _rootOutletContexts = inject(ChildrenOutletContexts);
11740
11754
  _focusMonitor = inject(WorkbenchFocusMonitor);
11741
11755
  _layout = inject(WorkbenchLayoutService).layout;
11742
- _title = signal(undefined);
11756
+ _title = signal(undefined, ...(ngDevMode ? [{ debugName: "_title" }] : []));
11743
11757
  _titleComputed = this.computeTitle();
11744
11758
  alternativeId;
11745
- navigation = signal(undefined);
11746
- activationInstant = signal(0);
11747
- active = signal(false);
11748
- focused = computed(() => this._focusMonitor.activeElement()?.id === this.id);
11749
- viewIds = computed(() => this.views().map(view => view.id));
11750
- activeViewId = computed(() => this.activeView()?.id ?? null);
11759
+ navigation = signal(undefined, ...(ngDevMode ? [{ debugName: "navigation" }] : []));
11760
+ activationInstant = signal(0, ...(ngDevMode ? [{ debugName: "activationInstant" }] : []));
11761
+ active = signal(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
11762
+ focused = computed(() => this._focusMonitor.activeElement()?.id === this.id, ...(ngDevMode ? [{ debugName: "focused" }] : []));
11763
+ viewIds = computed(() => this.views().map(view => view.id), ...(ngDevMode ? [{ debugName: "viewIds" }] : []));
11764
+ activeViewId = computed(() => this.activeView()?.id ?? null, ...(ngDevMode ? [{ debugName: "activeViewId" }] : []));
11751
11765
  mPart;
11752
11766
  gridName;
11753
- peripheral = signal(false);
11754
- referencePart = signal(false);
11755
- topLeft = signal(false);
11756
- topRight = signal(false);
11757
- activity = signal(null);
11758
- canMinimize = computed(() => this.activity() !== null && this.topRight());
11767
+ peripheral = signal(false, ...(ngDevMode ? [{ debugName: "peripheral" }] : []));
11768
+ referencePart = signal(false, ...(ngDevMode ? [{ debugName: "referencePart" }] : []));
11769
+ topLeft = signal(false, ...(ngDevMode ? [{ debugName: "topLeft" }] : []));
11770
+ topRight = signal(false, ...(ngDevMode ? [{ debugName: "topRight" }] : []));
11771
+ activity = signal(null, ...(ngDevMode ? [{ debugName: "activity" }] : []));
11772
+ canMinimize = computed(() => this.activity() !== null && this.topRight(), ...(ngDevMode ? [{ debugName: "canMinimize" }] : []));
11759
11773
  actions;
11760
11774
  activeView;
11761
11775
  views;
@@ -11765,8 +11779,8 @@ class ɵWorkbenchPart {
11765
11779
  _isInMainArea;
11766
11780
  constructor(id, layout) {
11767
11781
  this.id = id;
11768
- this.mPart = signal(layout.part({ partId: id }));
11769
- this.gridName = signal(layout.grid({ partId: id }).gridName);
11782
+ this.mPart = signal(layout.part({ partId: id }), ...(ngDevMode ? [{ debugName: "mPart" }] : []));
11783
+ this.gridName = signal(layout.grid({ partId: id }).gridName, ...(ngDevMode ? [{ debugName: "gridName" }] : []));
11770
11784
  this.actions = computePartActions(this);
11771
11785
  this.activeView = computeActiveView(this.mPart);
11772
11786
  this.views = computeViews(this.mPart);
@@ -12085,7 +12099,7 @@ class ViewDragService {
12085
12099
  /**
12086
12100
  * Indicates if a drag operation is active across application instances of the same origin.
12087
12101
  */
12088
- dragging = computed(() => this.viewDragData() !== null);
12102
+ dragging = computed(() => this.viewDragData() !== null, ...(ngDevMode ? [{ debugName: "dragging" }] : []));
12089
12103
  constructor() {
12090
12104
  this.installDragDetector();
12091
12105
  }
@@ -12272,7 +12286,7 @@ class ViewDragService {
12272
12286
  untracked(() => onDragEnd());
12273
12287
  options?.once && effectRef.destroy();
12274
12288
  }
12275
- }, { injector: options?.injector });
12289
+ }, ...(ngDevMode ? [{ debugName: "effectRef", injector: options?.injector }] : [{ injector: options?.injector }]));
12276
12290
  }
12277
12291
  /**
12278
12292
  * Signals when start dragging a view.
@@ -12288,10 +12302,10 @@ class ViewDragService {
12288
12302
  this._viewDragStartBroadcastChannel.destroy();
12289
12303
  this._viewDragEndBroadcastChannel.destroy();
12290
12304
  }
12291
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDragService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12292
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDragService, providedIn: 'root' });
12305
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDragService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12306
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDragService, providedIn: 'root' });
12293
12307
  }
12294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewDragService, decorators: [{
12308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewDragService, decorators: [{
12295
12309
  type: Injectable,
12296
12310
  args: [{ providedIn: 'root' }]
12297
12311
  }], ctorParameters: () => [] });
@@ -12382,12 +12396,12 @@ class ViewSlotComponent {
12382
12396
  logger.debug(() => `Constructing ViewComponent. [viewId=${this.view.id}]`, LoggerNames.LIFECYCLE);
12383
12397
  inject(DestroyRef).onDestroy(() => logger.debug(() => `Destroying ViewComponent [viewId=${this.view.id}]'`, LoggerNames.LIFECYCLE));
12384
12398
  }
12385
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12386
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: ViewSlotComponent, isStandalone: true, selector: "wb-view-slot", host: { properties: { "attr.data-viewid": "view.id", "attr.data-active": "view.active() ? '' : null", "class.view-drag": "viewDragService.dragging()" } }, providers: [
12399
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12400
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: ViewSlotComponent, isStandalone: true, selector: "wb-view-slot", host: { properties: { "attr.data-viewid": "view.id", "attr.data-active": "view.active() ? '' : null", "class.view-drag": "viewDragService.dragging()" } }, providers: [
12387
12401
  configureViewGlassPane(),
12388
12402
  ], viewQueries: [{ propertyName: "_viewport", first: true, predicate: SciViewportComponent, descendants: true, isSignal: true }], hostDirectives: [{ directive: GlassPaneDirective }], ngImport: i0, template: "<sci-viewport cdkTrapFocus>\n <router-outlet [name]=\"view.id\" wbRouterOutletRootContext/>\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-part[data-peripheral] :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", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterOutletRootContextDirective, selector: "router-outlet[wbRouterOutletRootContext]" }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }] });
12389
12403
  }
12390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewSlotComponent, decorators: [{
12404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewSlotComponent, decorators: [{
12391
12405
  type: Component,
12392
12406
  args: [{ selector: 'wb-view-slot', imports: [
12393
12407
  RouterOutlet,
@@ -12443,30 +12457,30 @@ class ɵWorkbenchView {
12443
12457
  _focusMonitor = inject(WorkbenchFocusMonitor);
12444
12458
  _logger = inject(Logger);
12445
12459
  _adapters = new Map();
12446
- _title = signal(null);
12447
- _heading = signal(null);
12448
- _dirty = signal(false);
12449
- _closable = signal(true);
12460
+ _title = signal(null, ...(ngDevMode ? [{ debugName: "_title" }] : []));
12461
+ _heading = signal(null, ...(ngDevMode ? [{ debugName: "_heading" }] : []));
12462
+ _dirty = signal(false, ...(ngDevMode ? [{ debugName: "_dirty" }] : []));
12463
+ _closable = signal(true, ...(ngDevMode ? [{ debugName: "_closable" }] : []));
12450
12464
  _blockedBy;
12451
- _scrolledIntoView = signal(true);
12465
+ _scrolledIntoView = signal(true, ...(ngDevMode ? [{ debugName: "_scrolledIntoView" }] : []));
12452
12466
  alternativeId;
12453
- navigation = signal(undefined);
12454
- navigationHint = computed(() => this.navigation()?.hint);
12455
- navigationData = computed(() => this.navigation()?.data ?? {});
12456
- navigationState = computed(() => this.navigation()?.state ?? {});
12457
- urlSegments = computed(() => this.navigation()?.path ?? []);
12458
- position = computed(() => this.part().views().indexOf(this));
12459
- first = computed(() => this.position() === 0);
12460
- last = computed(() => this.position() === this.part().views().length - 1);
12461
- part = signal(null);
12462
- activationInstant = signal(0);
12463
- active = signal(false);
12464
- focused = computed(() => this._focusMonitor.activeElement()?.id === this.id);
12467
+ navigation = signal(undefined, ...(ngDevMode ? [{ debugName: "navigation" }] : []));
12468
+ navigationHint = computed(() => this.navigation()?.hint, ...(ngDevMode ? [{ debugName: "navigationHint" }] : []));
12469
+ navigationData = computed(() => this.navigation()?.data ?? {}, ...(ngDevMode ? [{ debugName: "navigationData" }] : []));
12470
+ navigationState = computed(() => this.navigation()?.state ?? {}, ...(ngDevMode ? [{ debugName: "navigationState" }] : []));
12471
+ urlSegments = computed(() => this.navigation()?.path ?? [], ...(ngDevMode ? [{ debugName: "urlSegments" }] : []));
12472
+ position = computed(() => this.part().views().indexOf(this), ...(ngDevMode ? [{ debugName: "position" }] : []));
12473
+ first = computed(() => this.position() === 0, ...(ngDevMode ? [{ debugName: "first" }] : []));
12474
+ last = computed(() => this.position() === this.part().views().length - 1, ...(ngDevMode ? [{ debugName: "last" }] : []));
12475
+ part = signal(null, ...(ngDevMode ? [{ debugName: "part" }] : []));
12476
+ activationInstant = signal(0, ...(ngDevMode ? [{ debugName: "activationInstant" }] : []));
12477
+ active = signal(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
12478
+ focused = computed(() => this._focusMonitor.activeElement()?.id === this.id, ...(ngDevMode ? [{ debugName: "focused" }] : []));
12465
12479
  menuItems;
12466
12480
  blockedBy$;
12467
12481
  slot;
12468
12482
  classList = new ClassList();
12469
- isClosable = computed(() => this._closable() && !this._blockedBy());
12483
+ isClosable = computed(() => this._closable() && !this._blockedBy(), ...(ngDevMode ? [{ debugName: "isClosable" }] : []));
12470
12484
  /**
12471
12485
  * Guard to confirm closing the view, if any.
12472
12486
  *
@@ -12885,7 +12899,7 @@ class ɵPopup {
12885
12899
  };
12886
12900
  _destroyed = false;
12887
12901
  cssClasses;
12888
- focused = computed(() => this._focusMonitor.activeElement()?.id === this.id);
12902
+ focused = computed(() => this._focusMonitor.activeElement()?.id === this.id, ...(ngDevMode ? [{ debugName: "focused" }] : []));
12889
12903
  /**
12890
12904
  * Indicates whether this popup is blocked by dialog(s) that overlay it.
12891
12905
  */
@@ -12981,11 +12995,11 @@ class PageNotFoundComponent {
12981
12995
  popup: isPopupOutlet(this.outlet) || undefined,
12982
12996
  });
12983
12997
  return outlets.get(this.outlet)?.map(segment => `${segment}`).join('/') ?? '';
12984
- });
12985
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PageNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12986
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: PageNotFoundComponent, isStandalone: true, selector: "wb-page-not-found", ngImport: i0, template: "<header>{{('%workbench.page_not_found.title' | wbText)()}}</header>\n\n@if (isViewOutlet(outlet)) {\n @let message = '%workbench.page_not_found_view.message;path=' + path() | wbText;\n <section class=\"message\" [innerHTML]=\"message()\"></section>\n} @else if (isPartOutlet(outlet)) {\n @let message = '%workbench.page_not_found_part.message;path=' + path() | wbText;\n <section class=\"message\" [innerHTML]=\"message()\"></section>\n} @else {\n @let message = '%workbench.page_not_found.message;path=' + path() | wbText;\n <section class=\"message\" [innerHTML]=\"message()\"></section>\n}\n\n<section class=\"actions\">\n @if (isViewOutlet(outlet)) {\n <button (click)=\"workbenchService.resetPerspective()\">{{('%workbench.reset_perspective.action' | wbText)()}}</button>\n <button (click)=\"view!.close()\">{{('%workbench.close.action' | wbText)()}}</button>\n } @else if (isPartOutlet(outlet)) {\n <button (click)=\"workbenchService.resetPerspective()\">{{('%workbench.reset_perspective.action' | wbText)()}}</button>\n } @else if (isDialogOutlet(outlet)) {\n <button (click)=\"dialog!.close()\">{{('%workbench.close.action' | wbText)()}}</button>\n } @else if (isPopupOutlet(outlet)) {\n <button (click)=\"popup!.close()\">{{('%workbench.close.action' | wbText)()}}</button>\n }\n</section>\n\n@if (isDevMode) {\n @let hint = '%workbench.page_not_found_developer_hint.message' | wbText;\n @let tooltip = '%workbench.dev_mode_only_hint.tooltip' | wbText;\n <section class=\"developer-hint\" [title]=\"tooltip()\">{{hint()}}</section>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:2em;padding:3em;align-items:center}:host>header{font-weight:700;font-size:1.3rem}:host>section.message{text-align:center;line-height:1.75}: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>section.actions{display:flex;gap:.5em}:host>section.actions>button:is(button,#sci-reset){all:unset;cursor:var(--sci-workbench-button-cursor);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>section.actions>button:is(button,#sci-reset):focus,:host>section.actions>button:is(button,#sci-reset):active{border-color:transparent;outline:1px solid var(--sci-color-accent);color:var(--sci-color-accent-inverse)}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12998
+ }, ...(ngDevMode ? [{ debugName: "path" }] : []));
12999
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PageNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13000
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: PageNotFoundComponent, isStandalone: true, selector: "wb-page-not-found", ngImport: i0, template: "<header>{{('%workbench.page_not_found.title' | wbText)()}}</header>\n\n@if (isViewOutlet(outlet)) {\n @let message = '%workbench.page_not_found_view.message;path=' + path() | wbText;\n <section class=\"message\" [innerHTML]=\"message()\"></section>\n} @else if (isPartOutlet(outlet)) {\n @let message = '%workbench.page_not_found_part.message;path=' + path() | wbText;\n <section class=\"message\" [innerHTML]=\"message()\"></section>\n} @else {\n @let message = '%workbench.page_not_found.message;path=' + path() | wbText;\n <section class=\"message\" [innerHTML]=\"message()\"></section>\n}\n\n<section class=\"actions\">\n @if (isViewOutlet(outlet)) {\n <button (click)=\"workbenchService.resetPerspective()\">{{('%workbench.reset_perspective.action' | wbText)()}}</button>\n <button (click)=\"view!.close()\">{{('%workbench.close.action' | wbText)()}}</button>\n } @else if (isPartOutlet(outlet)) {\n <button (click)=\"workbenchService.resetPerspective()\">{{('%workbench.reset_perspective.action' | wbText)()}}</button>\n } @else if (isDialogOutlet(outlet)) {\n <button (click)=\"dialog!.close()\">{{('%workbench.close.action' | wbText)()}}</button>\n } @else if (isPopupOutlet(outlet)) {\n <button (click)=\"popup!.close()\">{{('%workbench.close.action' | wbText)()}}</button>\n }\n</section>\n\n@if (isDevMode) {\n @let hint = '%workbench.page_not_found_developer_hint.message' | wbText;\n @let tooltip = '%workbench.dev_mode_only_hint.tooltip' | wbText;\n <section class=\"developer-hint\" [title]=\"tooltip()\">{{hint()}}</section>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:2em;padding:3em;align-items:center}:host>header{font-weight:700;font-size:1.3rem}:host>section.message{text-align:center;line-height:1.75}: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>section.actions{display:flex;gap:.5em}:host>section.actions>button:is(button,#sci-reset){all:unset;cursor:var(--sci-workbench-button-cursor);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>section.actions>button:is(button,#sci-reset):focus,:host>section.actions>button:is(button,#sci-reset):active{border-color:transparent;outline:1px solid var(--sci-color-accent);color:var(--sci-color-accent-inverse)}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12987
13001
  }
12988
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: PageNotFoundComponent, decorators: [{
13002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PageNotFoundComponent, decorators: [{
12989
13003
  type: Component,
12990
13004
  args: [{ selector: 'wb-page-not-found', imports: [
12991
13005
  TextPipe,
@@ -13012,10 +13026,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
13012
13026
  * For more information, see the `standardizeConfig` function in Angular.
13013
13027
  */
13014
13028
  class ɵEmptyOutletComponent {
13015
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13016
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.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", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
13029
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13030
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", 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", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
13017
13031
  }
13018
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
13032
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
13019
13033
  type: Component,
13020
13034
  args: [{ imports: [RouterOutlet], template: "<router-outlet/>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"] }]
13021
13035
  }] });
@@ -13035,10 +13049,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
13035
13049
  class NullContentComponent {
13036
13050
  isDevMode = isDevMode();
13037
13051
  view = inject(WorkbenchView, { optional: true });
13038
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NullContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13039
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: NullContentComponent, isStandalone: true, selector: "wb-null-content", ngImport: i0, template: "@if (isDevMode && view) {\n @let hint = '%workbench.null_view_developer_hint.message;view=' + (view.alternativeId ?? view.id) | wbText;\n @let tooltip = '%workbench.dev_mode_only_hint.tooltip' | wbText;\n <section class=\"developer-hint\" [title]=\"tooltip()\" [innerHTML]=\"hint()\"></section>\n} @else {\n {{('%workbench.null_content.message' | wbText)()}}\n}\n", styles: [":host{display:flex;flex-direction:column;gap:2em;padding:3em;align-items:center;color:var(--sci-color-text-subtlest);-webkit-user-select:none;user-select:none}: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;-webkit-user-select:text;user-select:text}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }] });
13052
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NullContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13053
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: NullContentComponent, isStandalone: true, selector: "wb-null-content", ngImport: i0, template: "@if (isDevMode && view) {\n @let hint = '%workbench.null_view_developer_hint.message;view=' + (view.alternativeId ?? view.id) | wbText;\n @let tooltip = '%workbench.dev_mode_only_hint.tooltip' | wbText;\n <section class=\"developer-hint\" [title]=\"tooltip()\" [innerHTML]=\"hint()\"></section>\n} @else {\n {{('%workbench.null_content.message' | wbText)()}}\n}\n", styles: [":host{display:flex;flex-direction:column;gap:2em;padding:3em;align-items:center;color:var(--sci-color-text-subtlest);-webkit-user-select:none;user-select:none}: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;-webkit-user-select:text;user-select:text}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }] });
13040
13054
  }
13041
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NullContentComponent, decorators: [{
13055
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NullContentComponent, decorators: [{
13042
13056
  type: Component,
13043
13057
  args: [{ selector: 'wb-null-content', imports: [
13044
13058
  TextPipe,
@@ -13273,10 +13287,10 @@ class WorkbenchAuxiliaryRouteInstaller {
13273
13287
  const newRoutes = [...config];
13274
13288
  this._router.config.splice(0, this._router.config.length, ...newRoutes);
13275
13289
  }
13276
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchAuxiliaryRouteInstaller, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13277
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchAuxiliaryRouteInstaller, providedIn: 'root' });
13290
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchAuxiliaryRouteInstaller, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13291
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchAuxiliaryRouteInstaller, providedIn: 'root' });
13278
13292
  }
13279
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchAuxiliaryRouteInstaller, decorators: [{
13293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchAuxiliaryRouteInstaller, decorators: [{
13280
13294
  type: Injectable,
13281
13295
  args: [{ providedIn: 'root' }]
13282
13296
  }] });
@@ -13362,10 +13376,10 @@ class WorkbenchLayoutDiffer {
13362
13376
  views: this._viewsDiffer.diff(views),
13363
13377
  });
13364
13378
  }
13365
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutDiffer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13366
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutDiffer, providedIn: 'root' });
13379
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutDiffer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13380
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutDiffer, providedIn: 'root' });
13367
13381
  }
13368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutDiffer, decorators: [{
13382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutDiffer, decorators: [{
13369
13383
  type: Injectable,
13370
13384
  args: [{ providedIn: 'root' }]
13371
13385
  }], ctorParameters: () => [] });
@@ -13439,10 +13453,10 @@ class WorkbenchOutletDiffer {
13439
13453
  dialogs: this._dialogsDiffer.diff(dialogOutlets),
13440
13454
  });
13441
13455
  }
13442
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchOutletDiffer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13443
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchOutletDiffer, providedIn: 'root' });
13456
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchOutletDiffer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13457
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchOutletDiffer, providedIn: 'root' });
13444
13458
  }
13445
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchOutletDiffer, decorators: [{
13459
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchOutletDiffer, decorators: [{
13446
13460
  type: Injectable,
13447
13461
  args: [{ providedIn: 'root' }]
13448
13462
  }] });
@@ -13744,10 +13758,10 @@ class WorkbenchUrlObserver {
13744
13758
  }
13745
13759
  });
13746
13760
  }
13747
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchUrlObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13748
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchUrlObserver, providedIn: 'root' });
13761
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchUrlObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13762
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchUrlObserver, providedIn: 'root' });
13749
13763
  }
13750
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchUrlObserver, decorators: [{
13764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchUrlObserver, decorators: [{
13751
13765
  type: Injectable,
13752
13766
  args: [{ providedIn: 'root' }]
13753
13767
  }], ctorParameters: () => [] });
@@ -13876,10 +13890,10 @@ class ViewMoveHandler {
13876
13890
  void this.onViewMove(event).finally(() => viewDragService.signalViewMoved(event));
13877
13891
  });
13878
13892
  }
13879
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMoveHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13880
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMoveHandler, providedIn: 'root' });
13893
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMoveHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13894
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMoveHandler, providedIn: 'root' });
13881
13895
  }
13882
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ViewMoveHandler, decorators: [{
13896
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewMoveHandler, decorators: [{
13883
13897
  type: Injectable,
13884
13898
  args: [{ providedIn: 'root' }]
13885
13899
  }], ctorParameters: () => [] });
@@ -13931,10 +13945,10 @@ class NgZoneObservableDecorator {
13931
13945
  return () => subscription.unsubscribe();
13932
13946
  });
13933
13947
  }
13934
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NgZoneObservableDecorator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13935
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NgZoneObservableDecorator });
13948
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NgZoneObservableDecorator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13949
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NgZoneObservableDecorator });
13936
13950
  }
13937
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NgZoneObservableDecorator, decorators: [{
13951
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NgZoneObservableDecorator, decorators: [{
13938
13952
  type: Injectable
13939
13953
  }] });
13940
13954
 
@@ -14033,10 +14047,10 @@ const MICROFRONTEND_PLATFORM_POST_STARTUP = new InjectionToken('MICROFRONTEND_PL
14033
14047
  * Allows loading the configuration for the SCION Microfrontend Platform asynchronously, e.g., over the network or from a JSON file.
14034
14048
  */
14035
14049
  class MicrofrontendPlatformConfigLoader {
14036
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPlatformConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14037
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPlatformConfigLoader });
14050
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPlatformConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14051
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPlatformConfigLoader });
14038
14052
  }
14039
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPlatformConfigLoader, decorators: [{
14053
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPlatformConfigLoader, decorators: [{
14040
14054
  type: Injectable
14041
14055
  }] });
14042
14056
 
@@ -14083,10 +14097,10 @@ class ManifestObjectCache {
14083
14097
  return this._capabilities$
14084
14098
  .pipe(startWith(undefined), map(() => this.getCapability(capabilityId, { orElse: null })), distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)));
14085
14099
  }
14086
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ManifestObjectCache, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14087
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ManifestObjectCache });
14100
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ManifestObjectCache, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14101
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ManifestObjectCache });
14088
14102
  }
14089
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ManifestObjectCache, decorators: [{
14103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ManifestObjectCache, decorators: [{
14090
14104
  type: Injectable
14091
14105
  }] });
14092
14106
  /**
@@ -14326,13 +14340,106 @@ class MicrofrontendViewIntentHandler {
14326
14340
  .map(view => view.id);
14327
14341
  return viewIds.length ? viewIds : null;
14328
14342
  }
14329
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14330
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewIntentHandler });
14343
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14344
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewIntentHandler });
14331
14345
  }
14332
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewIntentHandler, decorators: [{
14346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewIntentHandler, decorators: [{
14333
14347
  type: Injectable
14334
14348
  }] });
14335
14349
 
14350
+ /*
14351
+ * Copyright (c) 2018-2025 Swiss Federal Railways
14352
+ *
14353
+ * This program and the accompanying materials are made
14354
+ * available under the terms of the Eclipse Public License 2.0
14355
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
14356
+ *
14357
+ * SPDX-License-Identifier: EPL-2.0
14358
+ */
14359
+ /**
14360
+ * Registers a text provider for the SCION Workbench to get texts from micro apps.
14361
+ *
14362
+ * If the key matches the format of a remote key, text is requested via intent from the respective 'text-provider' capability.
14363
+ * If not, the key is ignored and `undefined` is returned.
14364
+ *
14365
+ * Remote key format: "workbench.external.~<APP_SYMBOLIC_NAME>~.<TEXT_KEY>".
14366
+ *
14367
+ * @see createRemoteTranslatable
14368
+ */
14369
+ function provideRemoteTextProvider() {
14370
+ const REMOTE_KEY = /^workbench\.external\.~(?<provider>[^\\~]+)~\.(?<key>.+)$/;
14371
+ return makeEnvironmentProviders([
14372
+ {
14373
+ provide: WORKBENCH_TEXT_PROVIDER,
14374
+ useValue: remoteTextProvider,
14375
+ multi: true,
14376
+ },
14377
+ ]);
14378
+ function remoteTextProvider(remoteKey, params) {
14379
+ // Test if the key matches a remote key.
14380
+ const match = REMOTE_KEY.exec(remoteKey);
14381
+ if (!match) {
14382
+ return undefined; // ignore key
14383
+ }
14384
+ // Parse key and provider from the remote key.
14385
+ const { key, provider } = match.groups;
14386
+ // Request the text by intent. Parameters starting with the topic protocol 'topic://' are resolved via messaging.
14387
+ const text$ = observeParams$(params)
14388
+ .pipe(map$1(params => params.reduce((translatable, [name, value]) => `${translatable};${name}=${value}`, `%${key}`)), switchMap(translatable => Beans.get(WorkbenchTextService).text$(translatable, { provider: provider })), map$1(text => text ?? key));
14389
+ return toSignal(text$, { initialValue: '' });
14390
+ }
14391
+ /**
14392
+ * Creates an Observable that emits tuples of name/value pairs from the passed parameters.
14393
+ *
14394
+ * Parameters starting with the topic protocol 'topic://' are resolved via topic-based messaging.
14395
+ */
14396
+ function observeParams$(params) {
14397
+ const observableParams = Object.entries(params).map(([name, value]) => {
14398
+ if (!value.startsWith(TOPIC_PROTOCOL)) {
14399
+ return of([name, value]);
14400
+ }
14401
+ const topic = value.substring(TOPIC_PROTOCOL.length);
14402
+ return Beans.get(MessageClient).request$(topic, undefined, { retain: true }).pipe(map$1(({ body: resolved }) => ([name, resolved ?? ''])));
14403
+ });
14404
+ return observableParams.length ? combineLatest(observableParams) : of([]);
14405
+ }
14406
+ }
14407
+ /**
14408
+ * Creates a translatable for the SCION Workbench to request the text from a micro app.
14409
+ *
14410
+ * Passed parameters are used to substitute named interpolation parameters. A named interpolation parameter starts with a colon (`:`) followed by a name.
14411
+ *
14412
+ * Example: %translationKey;param1=value1;param2=:value2 // :value2 is a named interpolation parameter
14413
+ *
14414
+ * Named interpolation parameters can be substituted by explicit values (passed as value params) or topics (passed as topic params).
14415
+ * Unlike value params, topic params define a topic and the actual value will be requested when resolving the translatable.
14416
+ * Like the translatable's interpolation params, a topic can reference value params as named parameters in topic segments.
14417
+ *
14418
+ * @param translatable - Specifies the translatable.
14419
+ * @param config - Specifies the text provider and values for substituting named interpolation parameters.
14420
+ * @return Translatable that can be passed to the workbench's {@link text()} function for translation.
14421
+ *
14422
+ * @see provideRemoteTextProvider
14423
+ */
14424
+ function createRemoteTranslatable(translatable, config) {
14425
+ if (!translatable?.startsWith('%')) {
14426
+ return translatable;
14427
+ }
14428
+ const remoteTranslatable = `%workbench.external.~${config.appSymbolicName}~.${translatable.substring(1)}`;
14429
+ const valueParams = Dictionaries.coerce(config.valueParams);
14430
+ const topicParams = Object.fromEntries(Object.entries(Dictionaries.coerce(config.topicParams))
14431
+ // Replace named params in topic segments.
14432
+ .map(([name, topic]) => [name, topic.replace(/(?<=\/|^):(?<namedParam>[^/]+)/g, (match, namedParam) => `${valueParams[namedParam] ?? match}`)])
14433
+ // Add topic protocol to indicate resolution via topic-based messaging.
14434
+ .map(([paramName, topic]) => [paramName, `${TOPIC_PROTOCOL}${topic}`]));
14435
+ // Replace named params in matrix param values.
14436
+ return remoteTranslatable.replace(/(?<==):(?<namedParam>[^;]+)/g, (match, namedParam) => `${valueParams[namedParam] ?? topicParams[namedParam] ?? match}`);
14437
+ }
14438
+ /**
14439
+ * Prefix of topic params.
14440
+ */
14441
+ const TOPIC_PROTOCOL = 'topic://';
14442
+
14336
14443
  /*
14337
14444
  * Copyright (c) 2018-2024 Swiss Federal Railways
14338
14445
  *
@@ -14348,14 +14455,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
14348
14455
  * This component is designed to be displayed in {@link MicrofrontendHostMessageBoxComponent}.
14349
14456
  */
14350
14457
  class TextMessageComponent {
14351
- message = inject(WorkbenchMessageBox).params.get(eMESSAGE_BOX_MESSAGE_PARAM);
14352
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14353
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.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"] });
14458
+ message;
14459
+ constructor() {
14460
+ const messageBox = inject(WorkbenchMessageBox);
14461
+ const translatable = messageBox.params.get(eMESSAGE_BOX_MESSAGE_PARAM);
14462
+ this.message = createRemoteTranslatable(translatable, { appSymbolicName: messageBox.referrer.appSymbolicName });
14463
+ }
14464
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14465
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: TextMessageComponent, isStandalone: true, selector: "wb-text-message", ngImport: i0, template: "@if (message) {\n {{(message | wbText)()}}\n}\n", styles: [":host{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"], dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }] });
14354
14466
  }
14355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextMessageComponent, decorators: [{
14467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextMessageComponent, decorators: [{
14356
14468
  type: Component,
14357
- args: [{ selector: 'wb-text-message', 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"] }]
14358
- }] });
14469
+ args: [{ selector: 'wb-text-message', imports: [
14470
+ TextPipe,
14471
+ ], template: "@if (message) {\n {{(message | wbText)()}}\n}\n", styles: [":host{overflow-wrap:break-word;white-space:pre-line;text-align:var(--sci-workbench-messagebox-text-align)}\n"] }]
14472
+ }], ctorParameters: () => [] });
14359
14473
  /**
14360
14474
  * Route for the built-in text message box capability provided by the workbench host application.
14361
14475
  */
@@ -14388,6 +14502,7 @@ class WorkbenchHostManifestInterceptor {
14388
14502
  ...hostManifest.intentions ?? [],
14389
14503
  providePerspectiveIntention(),
14390
14504
  provideViewIntention(),
14505
+ provideTextProviderIntention(),
14391
14506
  ];
14392
14507
  hostManifest.capabilities = [
14393
14508
  ...hostManifest.capabilities ?? [],
@@ -14395,10 +14510,10 @@ class WorkbenchHostManifestInterceptor {
14395
14510
  provideBuiltInTextNotificationCapability(),
14396
14511
  ];
14397
14512
  }
14398
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchHostManifestInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14399
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchHostManifestInterceptor });
14513
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchHostManifestInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14514
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchHostManifestInterceptor });
14400
14515
  }
14401
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchHostManifestInterceptor, decorators: [{
14516
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchHostManifestInterceptor, decorators: [{
14402
14517
  type: Injectable
14403
14518
  }] });
14404
14519
  /**
@@ -14419,6 +14534,15 @@ function provideViewIntention() {
14419
14534
  qualifier: { '*': '*' },
14420
14535
  };
14421
14536
  }
14537
+ /**
14538
+ * Provides a wildcard intention for the workbench to request texts from any application.
14539
+ */
14540
+ function provideTextProviderIntention() {
14541
+ return {
14542
+ type: WorkbenchCapabilities.TextProvider,
14543
+ qualifier: { provider: '*' },
14544
+ };
14545
+ }
14422
14546
  /**
14423
14547
  * Provides the built-in notification capability to display text.
14424
14548
  *
@@ -14467,10 +14591,10 @@ function provideBuiltInTextMessageBoxCapability() {
14467
14591
  * SPDX-License-Identifier: EPL-2.0
14468
14592
  */
14469
14593
  class MicrofrontendSplashComponent {
14470
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendSplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14471
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.2", type: MicrofrontendSplashComponent, isStandalone: true, selector: "wb-microfrontend-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"/>\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 });
14594
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendSplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14595
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: MicrofrontendSplashComponent, isStandalone: true, selector: "wb-microfrontend-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"/>\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 });
14472
14596
  }
14473
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendSplashComponent, decorators: [{
14597
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendSplashComponent, decorators: [{
14474
14598
  type: Component,
14475
14599
  args: [{ selector: 'wb-microfrontend-splash', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SciThrobberComponent], template: "<sci-throbber type=\"ellipsis\"/>\n", styles: [":host{display:grid;place-items:center;grid-template-rows:minmax(3em,150px);overflow:hidden}:host>sci-throbber{--sci-throbber-size: 64px}\n"] }]
14476
14600
  }] });
@@ -14555,7 +14679,7 @@ const Microfrontends = {
14555
14679
  },
14556
14680
  /**
14557
14681
  * Replaces named parameters in the given value with values contained in the given {@link Map}.
14558
- * Named parameters begin with a colon (`:`).
14682
+ * Named parameters start with a colon (`:`).
14559
14683
  */
14560
14684
  substituteNamedParameters,
14561
14685
  };
@@ -14670,10 +14794,10 @@ class MicrofrontendPopupComponent {
14670
14794
  get popupContext() {
14671
14795
  return this.popup.input;
14672
14796
  }
14673
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14674
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: MicrofrontendPopupComponent, isStandalone: true, selector: "wb-microfrontend-popup", host: { properties: { "class.workbench-drag": "workbenchLayoutService.dragging()" } }, viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: 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\"/>\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"], exportAs: ["ngComponentOutlet"] }] });
14797
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14798
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: MicrofrontendPopupComponent, isStandalone: true, selector: "wb-microfrontend-popup", host: { properties: { "class.workbench-drag": "workbenchLayoutService.dragging()" } }, viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: 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\"/>\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", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }] });
14675
14799
  }
14676
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupComponent, decorators: [{
14800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupComponent, decorators: [{
14677
14801
  type: Component,
14678
14802
  args: [{ selector: 'wb-microfrontend-popup', imports: [NgClass, NgComponentOutlet], schemas: [CUSTOM_ELEMENTS_SCHEMA], host: {
14679
14803
  '[class.workbench-drag]': 'workbenchLayoutService.dragging()',
@@ -14746,10 +14870,10 @@ class MicrofrontendHostPopupComponent {
14746
14870
  const commands = [{ outlets: { [this.popup.id]: outletCommands } }];
14747
14871
  return this._angularRouterMutex.submit(() => this._router.navigate(commands, { skipLocationChange: true, queryParamsHandling: 'preserve' }));
14748
14872
  }
14749
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendHostPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14750
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.2", type: MicrofrontendHostPopupComponent, isStandalone: true, selector: "wb-microfrontend-host-popup", ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"popup.id\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
14873
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendHostPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14874
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: MicrofrontendHostPopupComponent, isStandalone: true, selector: "wb-microfrontend-host-popup", ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"popup.id\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
14751
14875
  }
14752
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendHostPopupComponent, decorators: [{
14876
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendHostPopupComponent, decorators: [{
14753
14877
  type: Component,
14754
14878
  args: [{ selector: 'wb-microfrontend-host-popup', imports: [
14755
14879
  RouterOutlet,
@@ -14920,10 +15044,10 @@ class MicrofrontendPopupIntentHandler {
14920
15044
  viewCapabilityId: view.adapt(MicrofrontendWorkbenchView)?.capability.metadata.id,
14921
15045
  };
14922
15046
  }
14923
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14924
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupIntentHandler });
15047
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15048
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupIntentHandler });
14925
15049
  }
14926
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupIntentHandler, decorators: [{
15050
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupIntentHandler, decorators: [{
14927
15051
  type: Injectable
14928
15052
  }] });
14929
15053
 
@@ -14951,10 +15075,10 @@ class MicrofrontendPopupCapabilityValidator {
14951
15075
  }
14952
15076
  return capability;
14953
15077
  }
14954
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14955
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupCapabilityValidator });
15078
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15079
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupCapabilityValidator });
14956
15080
  }
14957
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, decorators: [{
15081
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPopupCapabilityValidator, decorators: [{
14958
15082
  type: Injectable
14959
15083
  }] });
14960
15084
 
@@ -14976,8 +15100,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
14976
15100
  * This component is designed to be displayed in a workbench message box.
14977
15101
  */
14978
15102
  class MicrofrontendHostMessageBoxComponent {
14979
- capability = input.required();
14980
- params = input.required();
15103
+ capability = input.required(...(ngDevMode ? [{ debugName: "capability" }] : []));
15104
+ params = input.required(...(ngDevMode ? [{ debugName: "params" }] : []));
15105
+ referrer = input.required(...(ngDevMode ? [{ debugName: "referrer" }] : []));
14981
15106
  _host = inject(ElementRef).nativeElement;
14982
15107
  _injector = inject(Injector);
14983
15108
  _router = inject(Router);
@@ -15015,11 +15140,17 @@ class MicrofrontendHostMessageBoxComponent {
15015
15140
  computeOutletInjector() {
15016
15141
  const injector = inject(Injector);
15017
15142
  return computed(() => {
15018
- const capability = this.capability();
15019
- const params = this.params();
15143
+ const context = {
15144
+ capability: this.capability(),
15145
+ params: this.params(),
15146
+ dialogId: this.dialog.id,
15147
+ referrer: {
15148
+ appSymbolicName: this.referrer(),
15149
+ },
15150
+ };
15020
15151
  return untracked(() => Injector.create({
15021
15152
  parent: injector,
15022
- providers: [provideWorkbenchClientMessageBoxHandle(capability, params)],
15153
+ providers: [provideWorkbenchClientMessageBoxHandle(context)],
15023
15154
  }));
15024
15155
  });
15025
15156
  }
@@ -15038,10 +15169,10 @@ class MicrofrontendHostMessageBoxComponent {
15038
15169
  });
15039
15170
  });
15040
15171
  }
15041
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendHostMessageBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15042
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.2", type: MicrofrontendHostMessageBoxComponent, isStandalone: true, selector: "wb-microfrontend-host-message-box", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector()\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"dialog.id\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
15172
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendHostMessageBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15173
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.3", type: MicrofrontendHostMessageBoxComponent, isStandalone: true, selector: "wb-microfrontend-host-message-box", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null }, referrer: { classPropertyName: "referrer", publicName: "referrer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector()\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"dialog.id\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
15043
15174
  }
15044
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendHostMessageBoxComponent, decorators: [{
15175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendHostMessageBoxComponent, decorators: [{
15045
15176
  type: Component,
15046
15177
  args: [{ selector: 'wb-microfrontend-host-message-box', imports: [
15047
15178
  RouterOutlet,
@@ -15051,14 +15182,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
15051
15182
  /**
15052
15183
  * Provides the {WorkbenchMessageBox} handle to the routed component.
15053
15184
  */
15054
- function provideWorkbenchClientMessageBoxHandle(capability, params) {
15185
+ function provideWorkbenchClientMessageBoxHandle(context) {
15055
15186
  return {
15056
15187
  provide: WorkbenchMessageBox,
15057
15188
  useFactory: () => {
15058
15189
  const dialog = inject(ɵWorkbenchDialog);
15059
15190
  return new class {
15060
- capability = capability;
15061
- params = params;
15191
+ capability = context.capability;
15192
+ params = context.params;
15193
+ referrer = context.referrer;
15062
15194
  id = dialog.id;
15063
15195
  focused$ = toObservable(dialog.focused, { injector: dialog.injector });
15064
15196
  signalReady() {
@@ -15084,8 +15216,9 @@ function provideWorkbenchClientMessageBoxHandle(capability, params) {
15084
15216
  * This component is designed to be displayed in a workbench message box.
15085
15217
  */
15086
15218
  class MicrofrontendMessageBoxComponent {
15087
- capability = input.required();
15088
- params = input.required();
15219
+ capability = input.required(...(ngDevMode ? [{ debugName: "capability" }] : []));
15220
+ params = input.required(...(ngDevMode ? [{ debugName: "params" }] : []));
15221
+ referrer = input.required(...(ngDevMode ? [{ debugName: "referrer" }] : []));
15089
15222
  _host = inject(ElementRef).nativeElement;
15090
15223
  _outletRouter = inject(OutletRouter);
15091
15224
  _messageClient = inject(MessageClient);
@@ -15145,6 +15278,9 @@ class MicrofrontendMessageBoxComponent {
15145
15278
  dialogId: this.dialog.id,
15146
15279
  capability: this.capability(),
15147
15280
  params: this.params(),
15281
+ referrer: {
15282
+ appSymbolicName: this.referrer(),
15283
+ },
15148
15284
  };
15149
15285
  const routerOutletElement = this._routerOutletElement().nativeElement;
15150
15286
  untracked(() => routerOutletElement.setContextValue(_MESSAGE_BOX_CONTEXT, context));
@@ -15165,10 +15301,10 @@ class MicrofrontendMessageBoxComponent {
15165
15301
  const properties = this.capability().properties;
15166
15302
  untracked(() => {
15167
15303
  setStyle(routerOutletElement, {
15168
- 'width': properties.size?.width ?? '0', // allow content size to go bellow the default iframe size when reporting preferred size
15304
+ 'width': properties.size?.width ?? '0', // allow content size to go below the default iframe size when reporting preferred size
15169
15305
  'min-width': properties.size?.minWidth ?? null,
15170
15306
  'max-width': properties.size?.maxWidth ?? null,
15171
- 'height': properties.size?.height ?? '0', // allow content size to go bellow the default iframe size when reporting preferred size
15307
+ 'height': properties.size?.height ?? '0', // allow content size to go below the default iframe size when reporting preferred size
15172
15308
  'min-height': properties.size?.minHeight ?? null,
15173
15309
  'max-height': properties.size?.maxHeight ?? null,
15174
15310
  });
@@ -15178,10 +15314,10 @@ class MicrofrontendMessageBoxComponent {
15178
15314
  propagateWorkbenchTheme() {
15179
15315
  Microfrontends.propagateTheme(this._routerOutletElement);
15180
15316
  }
15181
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15182
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: MicrofrontendMessageBoxComponent, isStandalone: true, selector: "wb-microfrontend-message-box", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.workbench-drag": "workbenchLayoutService.dragging()" } }, viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: 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 (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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"], exportAs: ["ngComponentOutlet"] }] });
15317
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15318
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: MicrofrontendMessageBoxComponent, isStandalone: true, selector: "wb-microfrontend-message-box", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null }, referrer: { classPropertyName: "referrer", publicName: "referrer", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.workbench-drag": "workbenchLayoutService.dragging()" } }, viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: 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 (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }] });
15183
15319
  }
15184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxComponent, decorators: [{
15320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxComponent, decorators: [{
15185
15321
  type: Component,
15186
15322
  args: [{ selector: 'wb-microfrontend-message-box', imports: [
15187
15323
  NgComponentOutlet,
@@ -15245,12 +15381,13 @@ class MicrofrontendMessageBoxIntentHandler {
15245
15381
  const options = message.body ?? {};
15246
15382
  const capability = message.capability;
15247
15383
  const params = message.intent.params ?? new Map();
15384
+ const referrer = message.headers.get(MessageHeaders.AppSymbolicName);
15248
15385
  const isHostProvider = capability.metadata.appSymbolicName === Beans.get(APP_IDENTITY);
15249
15386
  this._logger.debug(() => 'Handling microfrontend messagebox intent', LoggerNames.MICROFRONTEND, options);
15250
15387
  return this._messageBoxService.open(isHostProvider ? MicrofrontendHostMessageBoxComponent : MicrofrontendMessageBoxComponent, {
15251
- inputs: { capability, params },
15252
- title: options.title,
15253
- actions: options.actions,
15388
+ inputs: { capability, params, referrer },
15389
+ title: createRemoteTranslatable(options.title, { appSymbolicName: referrer }),
15390
+ actions: options.actions && Object.fromEntries(Object.entries(options.actions).map(([key, label]) => [key, createRemoteTranslatable(label, { appSymbolicName: referrer })])),
15254
15391
  severity: options.severity,
15255
15392
  modality: options.modality,
15256
15393
  contentSelectable: options.contentSelectable,
@@ -15258,10 +15395,10 @@ class MicrofrontendMessageBoxIntentHandler {
15258
15395
  context: options.context,
15259
15396
  });
15260
15397
  }
15261
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15262
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler });
15398
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15399
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler });
15263
15400
  }
15264
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, decorators: [{
15401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxIntentHandler, decorators: [{
15265
15402
  type: Injectable
15266
15403
  }] });
15267
15404
 
@@ -15280,8 +15417,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
15280
15417
  * This component is designed to be displayed in a workbench dialog.
15281
15418
  */
15282
15419
  class MicrofrontendDialogComponent {
15283
- capability = input.required();
15284
- params = input.required();
15420
+ capability = input.required(...(ngDevMode ? [{ debugName: "capability" }] : []));
15421
+ params = input.required(...(ngDevMode ? [{ debugName: "params" }] : []));
15285
15422
  _host = inject(ElementRef).nativeElement;
15286
15423
  _outletRouter = inject(OutletRouter);
15287
15424
  _messageClient = inject(MessageClient);
@@ -15355,6 +15492,7 @@ class MicrofrontendDialogComponent {
15355
15492
  effect(() => {
15356
15493
  const properties = this.capability().properties;
15357
15494
  const params = this.params();
15495
+ const appSymbolicName = this.capability().metadata.appSymbolicName;
15358
15496
  untracked(() => {
15359
15497
  this.dialog.size.width = properties.size.width;
15360
15498
  this.dialog.size.height = properties.size.height;
@@ -15362,7 +15500,7 @@ class MicrofrontendDialogComponent {
15362
15500
  this.dialog.size.maxWidth = properties.size.maxWidth;
15363
15501
  this.dialog.size.minHeight = properties.size.minHeight;
15364
15502
  this.dialog.size.maxHeight = properties.size.maxHeight;
15365
- this.dialog.title = Microfrontends.substituteNamedParameters(properties.title, params);
15503
+ this.dialog.title = createRemoteTranslatable(properties.title, { appSymbolicName, valueParams: params, topicParams: properties.resolve });
15366
15504
  this.dialog.closable = properties.closable ?? true;
15367
15505
  this.dialog.resizable = properties.resizable ?? true;
15368
15506
  this.dialog.padding = properties.padding ?? false;
@@ -15389,13 +15527,14 @@ class MicrofrontendDialogComponent {
15389
15527
  inject(MessageClient).observe$(_WorkbenchCommands.dialogTitleTopic(this.dialog.id))
15390
15528
  .pipe(takeUntilDestroyed())
15391
15529
  .subscribe(message => {
15392
- this.dialog.title = message.body;
15530
+ const sender = message.headers.get(MessageHeaders.AppSymbolicName);
15531
+ this.dialog.title = createRemoteTranslatable(message.body, { appSymbolicName: sender });
15393
15532
  });
15394
15533
  }
15395
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15396
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: MicrofrontendDialogComponent, isStandalone: true, selector: "wb-microfrontend-dialog", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.workbench-drag": "workbenchLayoutService.dragging()" } }, viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: 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 (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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"], exportAs: ["ngComponentOutlet"] }] });
15534
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15535
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: MicrofrontendDialogComponent, isStandalone: true, selector: "wb-microfrontend-dialog", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.workbench-drag": "workbenchLayoutService.dragging()" } }, viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: 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 (focuswithin)=\"onFocusWithin($event)\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }] });
15397
15536
  }
15398
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogComponent, decorators: [{
15537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogComponent, decorators: [{
15399
15538
  type: Component,
15400
15539
  args: [{ selector: 'wb-microfrontend-dialog', imports: [
15401
15540
  NgComponentOutlet,
@@ -15422,8 +15561,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
15422
15561
  * This component is designed to be displayed in a workbench dialog.
15423
15562
  */
15424
15563
  class MicrofrontendHostDialogComponent {
15425
- capability = input.required();
15426
- params = input.required();
15564
+ capability = input.required(...(ngDevMode ? [{ debugName: "capability" }] : []));
15565
+ params = input.required(...(ngDevMode ? [{ debugName: "params" }] : []));
15427
15566
  _injector = inject(Injector);
15428
15567
  _router = inject(Router);
15429
15568
  /** Mutex to serialize Angular Router navigation requests, preventing the cancellation of previously initiated asynchronous navigations. */
@@ -15472,6 +15611,7 @@ class MicrofrontendHostDialogComponent {
15472
15611
  effect(() => {
15473
15612
  const properties = this.capability().properties;
15474
15613
  const params = this.params();
15614
+ const appSymbolicName = this.capability().metadata.appSymbolicName;
15475
15615
  untracked(() => {
15476
15616
  this.dialog.size.width = properties.size?.width;
15477
15617
  this.dialog.size.height = properties.size?.height;
@@ -15479,17 +15619,17 @@ class MicrofrontendHostDialogComponent {
15479
15619
  this.dialog.size.maxWidth = properties.size?.maxWidth;
15480
15620
  this.dialog.size.minHeight = properties.size?.minHeight;
15481
15621
  this.dialog.size.maxHeight = properties.size?.maxHeight;
15482
- this.dialog.title = Microfrontends.substituteNamedParameters(properties.title, params);
15622
+ this.dialog.title = createRemoteTranslatable(properties.title, { appSymbolicName, valueParams: params, topicParams: properties.resolve });
15483
15623
  this.dialog.closable = properties.closable ?? true;
15484
15624
  this.dialog.resizable = properties.resizable ?? true;
15485
15625
  this.dialog.padding = properties.padding ?? true;
15486
15626
  });
15487
15627
  });
15488
15628
  }
15489
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendHostDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15490
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.2", type: MicrofrontendHostDialogComponent, isStandalone: true, selector: "wb-microfrontend-host-dialog", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector()\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"dialog.id\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
15629
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendHostDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15630
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.3", type: MicrofrontendHostDialogComponent, isStandalone: true, selector: "wb-microfrontend-host-dialog", inputs: { capability: { classPropertyName: "capability", publicName: "capability", isSignal: true, isRequired: true, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"router_outlet; injector: outletInjector()\"/>\n\n<ng-template #router_outlet>\n <router-outlet [name]=\"dialog.id\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>router-outlet{position:absolute}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
15491
15631
  }
15492
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendHostDialogComponent, decorators: [{
15632
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendHostDialogComponent, decorators: [{
15493
15633
  type: Component,
15494
15634
  args: [{ selector: 'wb-microfrontend-host-dialog', imports: [
15495
15635
  RouterOutlet,
@@ -15514,7 +15654,7 @@ function provideWorkbenchClientDialogHandle(capability, params) {
15514
15654
  titleChange$.next();
15515
15655
  Observables.coerce(title)
15516
15656
  .pipe(takeUntilDestroyed(dialog.injector.get(DestroyRef)), takeUntil(titleChange$))
15517
- .subscribe(title => dialog.title = title);
15657
+ .subscribe(title => dialog.title = createRemoteTranslatable(title, { appSymbolicName: capability.metadata.appSymbolicName }));
15518
15658
  }
15519
15659
  close(result) {
15520
15660
  dialog.close(result);
@@ -15592,10 +15732,10 @@ class MicrofrontendDialogIntentHandler {
15592
15732
  cssClass: Arrays.coerce(capability.properties.cssClass).concat(Arrays.coerce(options.cssClass)),
15593
15733
  });
15594
15734
  }
15595
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15596
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogIntentHandler });
15735
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15736
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogIntentHandler });
15597
15737
  }
15598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogIntentHandler, decorators: [{
15738
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogIntentHandler, decorators: [{
15599
15739
  type: Injectable
15600
15740
  }] });
15601
15741
 
@@ -15644,10 +15784,10 @@ class MicrofrontendDialogCapabilityValidator {
15644
15784
  throw Error(`[NullSizeError] Dialog capability requires width and height in its size properties [application="${capability.metadata.appSymbolicName}", capability="${Objects.toMatrixNotation(capability.qualifier)}"]`);
15645
15785
  }
15646
15786
  }
15647
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15648
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogCapabilityValidator });
15787
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15788
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogCapabilityValidator });
15649
15789
  }
15650
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, decorators: [{
15790
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendDialogCapabilityValidator, decorators: [{
15651
15791
  type: Injectable
15652
15792
  }] });
15653
15793
 
@@ -15675,10 +15815,10 @@ class MicrofrontendViewCapabilityValidator {
15675
15815
  }
15676
15816
  return capability;
15677
15817
  }
15678
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15679
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator });
15818
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15819
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewCapabilityValidator });
15680
15820
  }
15681
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, decorators: [{
15821
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewCapabilityValidator, decorators: [{
15682
15822
  type: Injectable
15683
15823
  }] });
15684
15824
 
@@ -15701,10 +15841,10 @@ class StableCapabilityIdAssigner {
15701
15841
  },
15702
15842
  };
15703
15843
  }
15704
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: StableCapabilityIdAssigner, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15705
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: StableCapabilityIdAssigner });
15844
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: StableCapabilityIdAssigner, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15845
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: StableCapabilityIdAssigner });
15706
15846
  }
15707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: StableCapabilityIdAssigner, decorators: [{
15847
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: StableCapabilityIdAssigner, decorators: [{
15708
15848
  type: Injectable
15709
15849
  }] });
15710
15850
 
@@ -15732,10 +15872,10 @@ class MicrofrontendMessageBoxCapabilityValidator {
15732
15872
  }
15733
15873
  return capability;
15734
15874
  }
15735
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15736
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator });
15875
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15876
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator });
15737
15877
  }
15738
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator, decorators: [{
15878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendMessageBoxCapabilityValidator, decorators: [{
15739
15879
  type: Injectable
15740
15880
  }] });
15741
15881
  function isBuiltInTextMessageBoxCapability(capability) {
@@ -15773,10 +15913,10 @@ class MicrofrontendPerspectiveCapabilityValidator {
15773
15913
  }
15774
15914
  return capability;
15775
15915
  }
15776
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15777
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveCapabilityValidator });
15916
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15917
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveCapabilityValidator });
15778
15918
  }
15779
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveCapabilityValidator, decorators: [{
15919
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveCapabilityValidator, decorators: [{
15780
15920
  type: Injectable
15781
15921
  }] });
15782
15922
 
@@ -15818,10 +15958,37 @@ class MicrofrontendPerspectiveIntentHandler {
15818
15958
  this._logger.debug(() => `Switching to perspective ${perspectiveId}.`, LoggerNames.MICROFRONTEND);
15819
15959
  return this._workbenchService.switchPerspective(perspectiveId);
15820
15960
  }
15821
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15822
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveIntentHandler });
15961
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveIntentHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15962
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveIntentHandler });
15823
15963
  }
15824
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveIntentHandler, decorators: [{
15964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveIntentHandler, decorators: [{
15965
+ type: Injectable
15966
+ }] });
15967
+
15968
+ /**
15969
+ * Configures view capabilities not defining {@link WorkbenchViewCapability.properties.lazy} to preload views to maintain compatibility with applications setting view titles and headings in view microfrontends.
15970
+ *
15971
+ * @see MicrofrontendPlatformConfig.preloadInactiveViews
15972
+ */
15973
+ class ViewCapabilityPreloadCapabilityInterceptor {
15974
+ _logger = inject(Logger);
15975
+ async intercept(capability) {
15976
+ if (capability.type !== WorkbenchCapabilities.View) {
15977
+ return capability;
15978
+ }
15979
+ const viewCapability = capability;
15980
+ if (viewCapability.properties.lazy === undefined) {
15981
+ viewCapability.properties.lazy = false;
15982
+ const appSymbolicName = viewCapability.metadata?.appSymbolicName;
15983
+ const qualifier = Object.entries(viewCapability.qualifier).reduce((qualifier, [key, value]) => `${qualifier};${key}=${value}`, '').substring(1);
15984
+ this._logger.warn(`[Deprecation] Application '${appSymbolicName}' provides a "non-lazy" view capability: {${qualifier}}. Change to lazy by setting 'lazy' in capability properties. Lazy views require a title and heading in the manifest. Title and heading can be localized with optional interpolation parameters using resolvers. See documentation for details: https://workbench-client-api.scion.vercel.app/interfaces/WorkbenchViewCapability.html`);
15985
+ }
15986
+ return viewCapability;
15987
+ }
15988
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewCapabilityPreloadCapabilityInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15989
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewCapabilityPreloadCapabilityInterceptor });
15990
+ }
15991
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ViewCapabilityPreloadCapabilityInterceptor, decorators: [{
15825
15992
  type: Injectable
15826
15993
  }] });
15827
15994
 
@@ -15852,6 +16019,7 @@ class MicrofrontendPlatformInitializer {
15852
16019
  _dialogCapabilityValidator = inject(MicrofrontendDialogCapabilityValidator);
15853
16020
  _messageBoxCapabilityValidator = inject(MicrofrontendMessageBoxCapabilityValidator);
15854
16021
  _stableCapabilityIdAssigner = inject(StableCapabilityIdAssigner);
16022
+ _viewCapabilityPreloadCapabilityInterceptor = inject(ViewCapabilityPreloadCapabilityInterceptor);
15855
16023
  _injector = inject(Injector);
15856
16024
  _zone = inject(NgZone);
15857
16025
  _logger = inject(Logger);
@@ -15873,6 +16041,7 @@ class MicrofrontendPlatformInitializer {
15873
16041
  Beans.register(WorkbenchMessageBoxService$1, { useClass: _WorkbenchMessageBoxService });
15874
16042
  Beans.register(WorkbenchDialogService$1, { useClass: _WorkbenchDialogService });
15875
16043
  Beans.register(WorkbenchNotificationService);
16044
+ Beans.register(WorkbenchTextService, { useClass: _WorkbenchTextService });
15876
16045
  // Register host manifest interceptor for the workbench to register workbench-specific intentions and capabilities.
15877
16046
  Beans.register(HostManifestInterceptor, { useValue: this._hostManifestInterceptor, multi: true });
15878
16047
  // Synchronize emissions of Observables exposed by the SCION Microfrontend Platform with the Angular zone.
@@ -15899,6 +16068,10 @@ class MicrofrontendPlatformInitializer {
15899
16068
  Beans.register(CapabilityInterceptor, { useValue: this._messageBoxCapabilityValidator, multi: true });
15900
16069
  // Register capability interceptor to assign perspective and view capabilities a stable identifier.
15901
16070
  Beans.register(CapabilityInterceptor, { useValue: this._stableCapabilityIdAssigner, multi: true });
16071
+ // Register view capability interceptor to preload inactive microfrontend views not defining the `lazy` property to maintain compatibility with applications setting view titles and headings in view microfrontends.
16072
+ if (this.config.preloadInactiveViews) {
16073
+ Beans.register(CapabilityInterceptor, { useValue: this._viewCapabilityPreloadCapabilityInterceptor, multi: true });
16074
+ }
15902
16075
  // Inject services registered under {MICROFRONTEND_PLATFORM_POST_STARTUP} DI token;
15903
16076
  // must be done in runlevel 2, i.e., before activator microfrontends are installed.
15904
16077
  Beans.registerInitializer({
@@ -15914,10 +16087,10 @@ class MicrofrontendPlatformInitializer {
15914
16087
  ngOnDestroy() {
15915
16088
  void MicrofrontendPlatform.destroy();
15916
16089
  }
15917
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPlatformInitializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15918
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPlatformInitializer });
16090
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPlatformInitializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16091
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPlatformInitializer });
15919
16092
  }
15920
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPlatformInitializer, decorators: [{
16093
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPlatformInitializer, decorators: [{
15921
16094
  type: Injectable
15922
16095
  }] });
15923
16096
 
@@ -15949,7 +16122,8 @@ class MicrofrontendViewCommandHandler {
15949
16122
  return this._messageClient.onMessage(_WorkbenchCommands.viewTitleTopic(':viewId'), message => {
15950
16123
  const viewId = message.params.get('viewId');
15951
16124
  this.runIfPrivileged(viewId, message, view => {
15952
- view.title = message.body;
16125
+ const referrer = message.headers.get(MessageHeaders.AppSymbolicName);
16126
+ view.title = createRemoteTranslatable(message.body, { appSymbolicName: referrer }) ?? null;
15953
16127
  });
15954
16128
  });
15955
16129
  }
@@ -15960,7 +16134,8 @@ class MicrofrontendViewCommandHandler {
15960
16134
  return this._messageClient.onMessage(_WorkbenchCommands.viewHeadingTopic(':viewId'), message => {
15961
16135
  const viewId = message.params.get('viewId');
15962
16136
  this.runIfPrivileged(viewId, message, view => {
15963
- view.heading = message.body;
16137
+ const referrer = message.headers.get(MessageHeaders.AppSymbolicName);
16138
+ view.heading = createRemoteTranslatable(message.body, { appSymbolicName: referrer }) ?? null;
15964
16139
  });
15965
16140
  });
15966
16141
  }
@@ -16014,10 +16189,10 @@ class MicrofrontendViewCommandHandler {
16014
16189
  ngOnDestroy() {
16015
16190
  this._subscriptions.forEach(subscription => subscription.unsubscribe());
16016
16191
  }
16017
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewCommandHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16018
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewCommandHandler });
16192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewCommandHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16193
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewCommandHandler });
16019
16194
  }
16020
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewCommandHandler, decorators: [{
16195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewCommandHandler, decorators: [{
16021
16196
  type: Injectable
16022
16197
  }], ctorParameters: () => [] });
16023
16198
  /**
@@ -16058,10 +16233,10 @@ class Notification {
16058
16233
  */
16059
16234
  class TextNotificationComponent {
16060
16235
  text = inject(Notification).input;
16061
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16062
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.2", type: TextNotificationComponent, isStandalone: true, selector: "wb-text-notification", ngImport: i0, template: `{{(text | wbText)()}}`, isInline: true, dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
16236
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16237
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: TextNotificationComponent, isStandalone: true, selector: "wb-text-notification", ngImport: i0, template: `{{(text | wbText)()}}`, isInline: true, dependencies: [{ kind: "pipe", type: TextPipe, name: "wbText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
16063
16238
  }
16064
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: TextNotificationComponent, decorators: [{
16239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TextNotificationComponent, decorators: [{
16065
16240
  type: Component,
16066
16241
  args: [{
16067
16242
  selector: 'wb-text-notification',
@@ -16233,10 +16408,10 @@ class NotificationService {
16233
16408
  this.closeNotification(lastNotification);
16234
16409
  });
16235
16410
  }
16236
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16237
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationService, providedIn: 'root' });
16411
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16412
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationService, providedIn: 'root' });
16238
16413
  }
16239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationService, decorators: [{
16414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationService, decorators: [{
16240
16415
  type: Injectable,
16241
16416
  args: [{ providedIn: 'root' }]
16242
16417
  }], ctorParameters: () => [] });
@@ -16257,11 +16432,13 @@ function installNotificationIntentHandler() {
16257
16432
  const intentClient = inject(IntentClient);
16258
16433
  const notificationService = inject(NotificationService);
16259
16434
  const logger = inject(Logger);
16260
- intentClient.onIntent({ type: WorkbenchCapabilities.Notification, qualifier: {} }, ({ body: config }) => {
16435
+ intentClient.onIntent({ type: WorkbenchCapabilities.Notification, qualifier: {} }, message => {
16436
+ const config = message.body;
16437
+ const referrer = message.headers.get(MessageHeaders.AppSymbolicName);
16261
16438
  logger.debug(() => 'Showing notification', LoggerNames.MICROFRONTEND, config);
16262
16439
  notificationService.notify({
16263
- title: config?.title,
16264
- content: config?.content ? config.content : '',
16440
+ title: createRemoteTranslatable(config?.title, { appSymbolicName: referrer }),
16441
+ content: createRemoteTranslatable(config?.content, { appSymbolicName: referrer }) ?? '',
16265
16442
  severity: config?.severity,
16266
16443
  duration: config?.duration,
16267
16444
  group: config?.group,
@@ -16317,11 +16494,11 @@ class ContentAsOverlayComponent {
16317
16494
  *
16318
16495
  * A config input is used instead of separate input properties to support updating the config if detached from the Angular change detector.
16319
16496
  */
16320
- config = input.required();
16497
+ config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
16321
16498
  _template = viewChild.required(TemplateRef);
16322
- _visible = computed(() => this.config().visible());
16323
- _location = computed(() => this.config().location());
16324
- _overlay = signal(undefined);
16499
+ _visible = computed(() => this.config().visible(), ...(ngDevMode ? [{ debugName: "_visible" }] : []));
16500
+ _location = computed(() => this.config().location(), ...(ngDevMode ? [{ debugName: "_location" }] : []));
16501
+ _overlay = signal(undefined, ...(ngDevMode ? [{ debugName: "_overlay" }] : []));
16325
16502
  constructor() {
16326
16503
  this.createOverlay();
16327
16504
  this.alignOverlayToHostBounds();
@@ -16383,10 +16560,10 @@ class ContentAsOverlayComponent {
16383
16560
  });
16384
16561
  });
16385
16562
  }
16386
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ContentAsOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16387
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: ContentAsOverlayComponent, isStandalone: true, selector: "wb-content-as-overlay", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template>\n <ng-content/>\n</ng-template>\n" });
16563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ContentAsOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16564
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: ContentAsOverlayComponent, isStandalone: true, selector: "wb-content-as-overlay", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template>\n <ng-content/>\n</ng-template>\n" });
16388
16565
  }
16389
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ContentAsOverlayComponent, decorators: [{
16566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ContentAsOverlayComponent, decorators: [{
16390
16567
  type: Component,
16391
16568
  args: [{ selector: 'wb-content-as-overlay', template: "<ng-template>\n <ng-content/>\n</ng-template>\n" }]
16392
16569
  }], ctorParameters: () => [] });
@@ -16432,7 +16609,7 @@ class MicrofrontendViewComponent {
16432
16609
  location: inject(IFRAME_OVERLAY_HOST),
16433
16610
  visible: this.view.slot.portal.attached,
16434
16611
  };
16435
- capability = null;
16612
+ capability = signal(null, ...(ngDevMode ? [{ debugName: "capability" }] : []));
16436
16613
  constructor() {
16437
16614
  this._logger.debug(() => `Constructing MicrofrontendViewComponent. [viewId=${this.view.id}]`, LoggerNames.MICROFRONTEND_ROUTING);
16438
16615
  this.keystrokesToBubble = this.computeKeyStrokesToBubble();
@@ -16448,7 +16625,8 @@ class MicrofrontendViewComponent {
16448
16625
  }
16449
16626
  installNavigator() {
16450
16627
  this._route.params
16451
- .pipe(switchMap(params => this.fetchCapability$(params[_MicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]).pipe(map(capability => ({ capability, params })))), serializeExecution(({ capability, params }) => this.onNavigate(this.capability, capability, params)), takeUntilDestroyed())
16628
+ .pipe(switchMap(params => this.fetchCapability$(params[_MicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]).pipe(map(capability => ({ capability, params })))), executeOnCapabilityChange(context => this.onCapabilityChange(context)), filterNullCapability(), delayIfLazy(), serializeExecution(context => this.onNavigate(context)), subscribeOn(asyncScheduler), // subscribe asynchronously to prevent manual change detection in `onCapabilityChange` during component construction.
16629
+ takeUntilDestroyed())
16452
16630
  .subscribe();
16453
16631
  }
16454
16632
  /**
@@ -16461,23 +16639,39 @@ class MicrofrontendViewComponent {
16461
16639
  untracked(() => routerOutletElement.setContextValue(_VIEW_ID_CONTEXT_KEY, this.view.id));
16462
16640
  });
16463
16641
  }
16464
- async onNavigate(prevCapability, capability, params) {
16642
+ /**
16643
+ * Method invoked each time when navigating to a different capability.
16644
+ */
16645
+ onCapabilityChange(context) {
16646
+ const { capability, prevCapability, params } = context;
16647
+ this.capability.set(capability);
16648
+ // Signal the currently loaded application to unload.
16649
+ if (prevCapability && prevCapability.metadata.appSymbolicName !== capability?.metadata.appSymbolicName) {
16650
+ void this._messageClient.publish(_WorkbenchCommands.viewUnloadingTopic(this.view.id));
16651
+ }
16652
+ // Update view properties.
16653
+ this.setViewProperties(context);
16654
+ // Inactive views are not checked for changes since detached from the Angular component tree.
16655
+ // So, we manually trigger change detection to update attributes on the `sci-router-outlet`.
16656
+ if (!this.view.active()) {
16657
+ this._changeDetectorRef.detectChanges();
16658
+ }
16659
+ // Unload microfrontend if capability is not found.
16465
16660
  if (!capability) {
16466
16661
  this._logger.warn(() => `[NullCapabilityError] No application found to provide a view capability of id '${params[_MicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]}'. Maybe, the requested view is not public API or the providing application not available.`, LoggerNames.MICROFRONTEND_ROUTING);
16467
16662
  this.unload();
16468
- return;
16469
16663
  }
16470
- this.capability = capability;
16664
+ }
16665
+ /**
16666
+ * Method invoked to perform a navigation.
16667
+ */
16668
+ async onNavigate(context) {
16669
+ const { capability, prevCapability, params } = context;
16471
16670
  this.view.registerAdapter(MicrofrontendWorkbenchView, new MicrofrontendWorkbenchView(capability, params));
16472
- // Check if navigating to a new microfrontend.
16671
+ // Check if navigating to a different microfrontend.
16473
16672
  if (!prevCapability || prevCapability.metadata.id !== capability.metadata.id) {
16474
- this.setViewProperties(capability, params);
16475
16673
  this.installParamsUpdater(capability);
16476
16674
  }
16477
- // Signal the currently loaded application to unload.
16478
- if (prevCapability && prevCapability.metadata.appSymbolicName !== capability.metadata.appSymbolicName) {
16479
- await this._messageClient.publish(_WorkbenchCommands.viewUnloadingTopic(this.view.id));
16480
- }
16481
16675
  // Pass parameters to the microfrontend.
16482
16676
  await this._messageClient.publish(_WorkbenchCommands.viewParamsTopic(this.view.id), Maps.coerce(params), { retain: true });
16483
16677
  // When navigating to another view capability of the same app, wait until transported the params to the microfrontend before loading the
@@ -16493,7 +16687,7 @@ class MicrofrontendViewComponent {
16493
16687
  }
16494
16688
  // Navigate to the microfrontend.
16495
16689
  const application = this._manifestService.getApplication(capability.metadata.appSymbolicName);
16496
- this._logger.debug(() => `Loading microfrontend into workbench view [viewId=${this.view.id}, app=${capability.metadata.appSymbolicName}, baseUrl=${application.baseUrl}, path=${(capability.properties.path)}].`, LoggerNames.MICROFRONTEND_ROUTING, params, capability);
16690
+ this._logger.debug(() => `Loading microfrontend into "${this.view.id}" [app=${capability.metadata.appSymbolicName}, baseUrl=${application.baseUrl}, path=${(capability.properties.path)}].`, LoggerNames.MICROFRONTEND_ROUTING, params, capability);
16497
16691
  await this._outletRouter.navigate(capability.properties.path, {
16498
16692
  outlet: this.view.id,
16499
16693
  relativeTo: application.baseUrl,
@@ -16502,11 +16696,6 @@ class MicrofrontendViewComponent {
16502
16696
  showSplash: capability.properties.showSplash,
16503
16697
  ɵcapabilityId: capability.metadata.id,
16504
16698
  });
16505
- // Inactive views are not checked for changes since detached from the Angular component tree.
16506
- // So, we manually trigger change detection to update attributes on the `sci-router-outlet`.
16507
- if (!this.view.active()) {
16508
- this._changeDetectorRef.detectChanges();
16509
- }
16510
16699
  }
16511
16700
  fetchCapability$(capabilityId) {
16512
16701
  return this._manifestObjectCache.observeCapability$(capabilityId);
@@ -16550,11 +16739,12 @@ class MicrofrontendViewComponent {
16550
16739
  /**
16551
16740
  * Updates the properties of this view, such as the view title, as defined by the capability.
16552
16741
  */
16553
- setViewProperties(viewCapability, params) {
16554
- this.view.title = Microfrontends.substituteNamedParameters(viewCapability.properties.title, Maps.coerce(params)) ?? null;
16555
- this.view.heading = Microfrontends.substituteNamedParameters(viewCapability.properties.heading, Maps.coerce(params)) ?? null;
16556
- this.view.classList.application = viewCapability.properties.cssClass;
16557
- this.view.closable = viewCapability.properties.closable ?? true;
16742
+ setViewProperties(context) {
16743
+ const { capability, params } = context;
16744
+ this.view.title = (capability && createRemoteTranslatable(capability.properties.title, { appSymbolicName: capability.metadata.appSymbolicName, valueParams: params, topicParams: capability.properties.resolve })) ?? null;
16745
+ this.view.heading = (capability && createRemoteTranslatable(capability.properties.heading, { appSymbolicName: capability.metadata.appSymbolicName, valueParams: params, topicParams: capability.properties.resolve })) ?? null;
16746
+ this.view.classList.application = capability?.properties.cssClass;
16747
+ this.view.closable = capability?.properties.closable ?? true;
16558
16748
  this.view.dirty = false;
16559
16749
  }
16560
16750
  installViewActivePublisher() {
@@ -16654,12 +16844,12 @@ class MicrofrontendViewComponent {
16654
16844
  void this._outletRouter.navigate(null, { outlet: this.view.id });
16655
16845
  this.view.unregisterAdapter(MicrofrontendWorkbenchView);
16656
16846
  }
16657
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16658
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.2", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: true }], ngImport: i0, template: "<wb-content-as-overlay [config]=\"overlayConfig\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"workbenchLayoutService.dragging()\"\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.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble()\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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: "component", type: ContentAsOverlayComponent, selector: "wb-content-as-overlay", inputs: ["config"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
16847
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16848
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.2.3", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: true }], ngImport: i0, template: "<wb-content-as-overlay [config]=\"overlayConfig\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"workbenchLayoutService.dragging()\"\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.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble()\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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: "component", type: ContentAsOverlayComponent, selector: "wb-content-as-overlay", inputs: ["config"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
16659
16849
  configureMicrofrontendGlassPane(),
16660
16850
  ] });
16661
16851
  }
16662
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendViewComponent, decorators: [{
16852
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendViewComponent, decorators: [{
16663
16853
  type: Component,
16664
16854
  args: [{ selector: 'wb-microfrontend-view', imports: [
16665
16855
  NgClass,
@@ -16668,7 +16858,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
16668
16858
  GlassPaneDirective,
16669
16859
  ], viewProviders: [
16670
16860
  configureMicrofrontendGlassPane(),
16671
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [config]=\"overlayConfig\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"workbenchLayoutService.dragging()\"\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.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble()\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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"] }]
16861
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [config]=\"overlayConfig\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"workbenchLayoutService.dragging()\"\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.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble()\">\n <ng-container *ngComponentOutlet=\"splash\"/>\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"] }]
16672
16862
  }], ctorParameters: () => [] });
16673
16863
  /**
16674
16864
  * Blocks the microfrontend outlet when dialog(s) overlay this view.
@@ -16685,6 +16875,39 @@ function configureMicrofrontendGlassPane() {
16685
16875
  },
16686
16876
  ];
16687
16877
  }
16878
+ /**
16879
+ * Executes passed function each time when the source emits a different capability.
16880
+ */
16881
+ function executeOnCapabilityChange(onCapabilityChange) {
16882
+ let prevCapability = null;
16883
+ return map(({ capability, params }) => {
16884
+ const context = { capability, prevCapability, params };
16885
+ if (prevCapability?.metadata.id !== capability?.metadata.id) {
16886
+ onCapabilityChange(context);
16887
+ prevCapability = capability;
16888
+ }
16889
+ return context;
16890
+ });
16891
+ }
16892
+ /**
16893
+ * Continues the execution chain only if the capability is not `null`.
16894
+ */
16895
+ function filterNullCapability() {
16896
+ return filter((context) => !!context.capability);
16897
+ }
16898
+ /**
16899
+ * Mirrors the source if the view is active or non-lazy. Otherwise, emission is delayed until the view is activated.
16900
+ *
16901
+ * Cancels any previous delayed emission when the source emits again.
16902
+ */
16903
+ function delayIfLazy() {
16904
+ // Use a root effect to continue emitting even if the component is detached from change detection.
16905
+ const active$ = toRootObservable(inject(ɵWorkbenchView).active);
16906
+ return switchMap(context => {
16907
+ const lazy = context.capability.properties.lazy ?? true;
16908
+ return active$.pipe(filter(active => active || !lazy), map(() => context), take(1));
16909
+ });
16910
+ }
16688
16911
 
16689
16912
  /*
16690
16913
  * Copyright (c) 2018-2024 Swiss Federal Railways
@@ -16799,10 +17022,10 @@ class MicrofrontendPerspectiveInstaller {
16799
17022
  }));
16800
17023
  return firstValueFrom(viewCapabilities$);
16801
17024
  }
16802
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveInstaller, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16803
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveInstaller });
17025
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveInstaller, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17026
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveInstaller });
16804
17027
  }
16805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MicrofrontendPerspectiveInstaller, decorators: [{
17028
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MicrofrontendPerspectiveInstaller, decorators: [{
16806
17029
  type: Injectable
16807
17030
  }], ctorParameters: () => [] });
16808
17031
  /**
@@ -16815,6 +17038,33 @@ function providePerspectiveInstaller() {
16815
17038
  ]);
16816
17039
  }
16817
17040
 
17041
+ /*
17042
+ * Copyright (c) 2018-2025 Swiss Federal Railways
17043
+ *
17044
+ * This program and the accompanying materials are made
17045
+ * available under the terms of the Eclipse Public License 2.0
17046
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
17047
+ *
17048
+ * SPDX-License-Identifier: EPL-2.0
17049
+ */
17050
+ /**
17051
+ * Registers a text provider for micro apps to request texts of the host app.
17052
+ */
17053
+ function provideHostTextProvider() {
17054
+ return makeEnvironmentProviders([
17055
+ provideMicrofrontendPlatformInitializer(() => {
17056
+ const injector = inject(Injector);
17057
+ WorkbenchClient.registerTextProvider((key, params) => {
17058
+ const translatable = Object.entries(params).reduce((translatable, [name, value]) => `${translatable};${name}=${value}`, `%${key}`);
17059
+ const environmentInjector = createEnvironmentInjector([], injector.get(EnvironmentInjector));
17060
+ return toObservable(text(translatable, { injector: environmentInjector }), { injector: environmentInjector })
17061
+ .pipe(map$1(text => text !== '' && text !== key ? text : undefined), // emit `undefined` if not found the text
17062
+ finalize(() => environmentInjector.destroy()));
17063
+ });
17064
+ }),
17065
+ ]);
17066
+ }
17067
+
16818
17068
  /*
16819
17069
  * Copyright (c) 2018-2024 Swiss Federal Railways
16820
17070
  *
@@ -16849,12 +17099,15 @@ function provideWorkbenchMicrofrontendSupport(workbenchConfig) {
16849
17099
  MicrofrontendDialogCapabilityValidator,
16850
17100
  MicrofrontendMessageBoxCapabilityValidator,
16851
17101
  StableCapabilityIdAssigner,
17102
+ ViewCapabilityPreloadCapabilityInterceptor,
16852
17103
  NgZoneObservableDecorator,
16853
17104
  WorkbenchHostManifestInterceptor,
16854
17105
  provideBuiltInTextMessageBoxCapabilityRoute(),
16855
17106
  provideMicrofrontendViewRoute(),
16856
17107
  provideMicrofrontendPlatformBeans(),
16857
17108
  provideWorkbenchClientBeans(),
17109
+ provideRemoteTextProvider(),
17110
+ provideHostTextProvider(),
16858
17111
  ]);
16859
17112
  }
16860
17113
  /**
@@ -16903,6 +17156,7 @@ function provideWorkbenchClientBeans() {
16903
17156
  { provide: WorkbenchDialogService$1, useFactory: () => Beans.get(WorkbenchDialogService$1) },
16904
17157
  { provide: WorkbenchMessageBoxService$1, useFactory: () => Beans.get(WorkbenchMessageBoxService$1) },
16905
17158
  { provide: WorkbenchNotificationService, useFactory: () => Beans.get(WorkbenchNotificationService) },
17159
+ { provide: WorkbenchTextService, useFactory: () => Beans.get(WorkbenchTextService) },
16906
17160
  ]);
16907
17161
  }
16908
17162
  /**
@@ -16945,10 +17199,10 @@ class StaticMicrofrontendPlatformConfigLoader {
16945
17199
  async load() {
16946
17200
  return this._workbenchConfig.microfrontendPlatform;
16947
17201
  }
16948
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16949
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader });
17202
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17203
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader });
16950
17204
  }
16951
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, decorators: [{
17205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: StaticMicrofrontendPlatformConfigLoader, decorators: [{
16952
17206
  type: Injectable
16953
17207
  }] });
16954
17208
 
@@ -17006,10 +17260,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
17006
17260
  * @see provideWorkbenchInitializer
17007
17261
  */
17008
17262
  class WorkbenchLauncher {
17009
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLauncher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17010
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLauncher, providedIn: 'root', useExisting: ɵWorkbenchLauncher });
17263
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLauncher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17264
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLauncher, providedIn: 'root', useExisting: ɵWorkbenchLauncher });
17011
17265
  }
17012
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLauncher, decorators: [{
17266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLauncher, decorators: [{
17013
17267
  type: Injectable,
17014
17268
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchLauncher }]
17015
17269
  }] });
@@ -17084,10 +17338,10 @@ class ɵLocation extends Location {
17084
17338
  // the router only if the platform is still running.
17085
17339
  return (this._router ??= !this._appRef.destroyed ? this._appRef.injector.get(Router) : undefined);
17086
17340
  }
17087
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17088
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵLocation });
17341
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵLocation, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17342
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵLocation });
17089
17343
  }
17090
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ɵLocation, decorators: [{
17344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ɵLocation, decorators: [{
17091
17345
  type: Injectable
17092
17346
  }], ctorParameters: () => [] });
17093
17347
 
@@ -17242,7 +17496,7 @@ function provideTextProviders(config) {
17242
17496
  // Provide app-specific texts.
17243
17497
  {
17244
17498
  provide: WORKBENCH_TEXT_PROVIDER,
17245
- useValue: config.textProvider ?? (() => undefined),
17499
+ useValue: applicationTextProvider(config),
17246
17500
  multi: true,
17247
17501
  },
17248
17502
  // Provide texts of menu items configured in `config.viewMenuItems`.
@@ -17259,6 +17513,25 @@ function provideTextProviders(config) {
17259
17513
  },
17260
17514
  ]);
17261
17515
  }
17516
+ /**
17517
+ * Provides application-specifc texts and translated workbench texts.
17518
+ *
17519
+ * Register this provider as the first text provider, enabling change or translation of built-in workbench texts.
17520
+ */
17521
+ function applicationTextProvider(config) {
17522
+ const appTextProvider = config.textProvider;
17523
+ if (!appTextProvider) {
17524
+ return () => undefined;
17525
+ }
17526
+ return (key, params) => {
17527
+ // Translation keys starting with the `workbench.external.` prefix are external and must not
17528
+ // be localized by the workbench application, such as remote keys to resolve texts from micro apps.
17529
+ if (key.startsWith('workbench.external.')) {
17530
+ return undefined;
17531
+ }
17532
+ return appTextProvider(key, params);
17533
+ };
17534
+ }
17262
17535
 
17263
17536
  /**
17264
17537
  * Provides Material icons for non-workbench icons.
@@ -17284,11 +17557,11 @@ class MaterialIconComponent {
17284
17557
  /**
17285
17558
  * Specifies the ligature of the Material icon.
17286
17559
  */
17287
- ligature = input.required();
17288
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MaterialIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17289
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.2", type: MaterialIconComponent, isStandalone: true, selector: "wb-material-icon", inputs: { ligature: { classPropertyName: "ligature", publicName: "ligature", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.material-icons": "true", "class.material-icons-outlined": "true", "class.material-icons-round": "true", "class.material-icons-sharp": "true", "class.material-symbols-sharp": "true", "class.material-symbols-outlined": "true", "class.material-symbols-rounded": "true" } }, ngImport: i0, template: '{{ligature()}}', isInline: true });
17560
+ ligature = input.required(...(ngDevMode ? [{ debugName: "ligature" }] : []));
17561
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MaterialIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17562
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.3", type: MaterialIconComponent, isStandalone: true, selector: "wb-material-icon", inputs: { ligature: { classPropertyName: "ligature", publicName: "ligature", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.material-icons": "true", "class.material-icons-outlined": "true", "class.material-icons-round": "true", "class.material-icons-sharp": "true", "class.material-symbols-sharp": "true", "class.material-symbols-outlined": "true", "class.material-symbols-rounded": "true" } }, ngImport: i0, template: '{{ligature()}}', isInline: true });
17290
17563
  }
17291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: MaterialIconComponent, decorators: [{
17564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MaterialIconComponent, decorators: [{
17292
17565
  type: Component,
17293
17566
  args: [{
17294
17567
  selector: 'wb-material-icon',
@@ -17347,11 +17620,11 @@ class WorkbenchIconComponent {
17347
17620
  /**
17348
17621
  * Specifies the ligature of the icon.
17349
17622
  */
17350
- ligature = input.required();
17351
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17352
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchIconComponent, isStandalone: true, selector: "wb-workbench-icon", inputs: { ligature: { classPropertyName: "ligature", publicName: "ligature", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.scion-workbench-icons": "true" } }, ngImport: i0, template: '{{ligature()}}', isInline: true });
17623
+ ligature = input.required(...(ngDevMode ? [{ debugName: "ligature" }] : []));
17624
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17625
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchIconComponent, isStandalone: true, selector: "wb-workbench-icon", inputs: { ligature: { classPropertyName: "ligature", publicName: "ligature", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.scion-workbench-icons": "true" } }, ngImport: i0, template: '{{ligature()}}', isInline: true });
17353
17626
  }
17354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchIconComponent, decorators: [{
17627
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchIconComponent, decorators: [{
17355
17628
  type: Component,
17356
17629
  args: [{
17357
17630
  selector: 'wb-workbench-icon',
@@ -17532,10 +17805,10 @@ function rejectIfNotRootEnvironment() {
17532
17805
  * Default splash displayed while starting the workbench.
17533
17806
  */
17534
17807
  class SplashComponent {
17535
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: SplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17536
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.2", type: SplashComponent, isStandalone: true, selector: "wb-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"/>\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 });
17808
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: SplashComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17809
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: SplashComponent, isStandalone: true, selector: "wb-splash", ngImport: i0, template: "<sci-throbber type=\"ellipsis\"/>\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 });
17537
17810
  }
17538
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: SplashComponent, decorators: [{
17811
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: SplashComponent, decorators: [{
17539
17812
  type: Component,
17540
17813
  args: [{ selector: 'wb-splash', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SciThrobberComponent], template: "<sci-throbber type=\"ellipsis\"/>\n", styles: [":host{display:grid;justify-content:center;margin-top:3em}:host>sci-throbber{--sci-throbber-size: 80px}\n"] }]
17541
17814
  }] });
@@ -17557,10 +17830,10 @@ class CoerceObservablePipe {
17557
17830
  transform(value) {
17558
17831
  return Observables.coerce(value);
17559
17832
  }
17560
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: CoerceObservablePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
17561
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: CoerceObservablePipe, isStandalone: true, name: "wbCoerceObservable$" });
17833
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: CoerceObservablePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
17834
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: CoerceObservablePipe, isStandalone: true, name: "wbCoerceObservable$" });
17562
17835
  }
17563
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: CoerceObservablePipe, decorators: [{
17836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: CoerceObservablePipe, decorators: [{
17564
17837
  type: Pipe,
17565
17838
  args: [{ name: 'wbCoerceObservable$' }]
17566
17839
  }] });
@@ -17579,7 +17852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
17579
17852
  * It informs the user of a system event, e.g., that a task has been completed or an error has occurred.
17580
17853
  */
17581
17854
  class NotificationComponent {
17582
- notification = input.required();
17855
+ notification = input.required(...(ngDevMode ? [{ debugName: "notification" }] : []));
17583
17856
  closeNotification = output();
17584
17857
  _injector = inject(Injector);
17585
17858
  _cd = inject(ChangeDetectorRef);
@@ -17648,10 +17921,10 @@ class NotificationComponent {
17648
17921
  });
17649
17922
  }
17650
17923
  }
17651
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17652
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: NotificationComponent, isStandalone: true, selector: "wb-notification", inputs: { notification: { classPropertyName: "notification", publicName: "notification", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closeNotification: "closeNotification" }, host: { listeners: { "mousedown": "onMousedown($event)" } }, ngImport: i0, template: "<div class=\"outline\">\n @if (notification().title$ | async | wbCoerceObservable$ | async; as title) {\n <header class=\"e2e-title\">{{(title | wbText)()}}</header>\n }\n <ng-container *cdkPortalOutlet=\"portal\"/>\n</div>\n<button (click)=\"onClose()\"\n [title]=\"('%workbench.close.tooltip' | wbText)()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n</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:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);position:absolute;top:.275em;right:.275em;padding:.125em;border-radius:var(--sci-corner-small)}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: CoerceObservablePipe, name: "wbCoerceObservable$" }, { kind: "pipe", type: TextPipe, name: "wbText" }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17924
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17925
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: NotificationComponent, isStandalone: true, selector: "wb-notification", inputs: { notification: { classPropertyName: "notification", publicName: "notification", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closeNotification: "closeNotification" }, host: { listeners: { "mousedown": "onMousedown($event)" } }, ngImport: i0, template: "<div class=\"outline\">\n @if (notification().title$ | async | wbCoerceObservable$ | async; as title) {\n <header class=\"e2e-title\">{{(title | wbText)()}}</header>\n }\n <ng-container *cdkPortalOutlet=\"portal\"/>\n</div>\n<button (click)=\"onClose()\"\n [title]=\"('%workbench.close.tooltip' | wbText)()\"\n class=\"close e2e-close\">\n <wb-icon icon=\"workbench.close\"/>\n</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:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;border-radius:var(--sci-corner);-webkit-user-select:none;user-select:none;overflow:hidden;cursor:var(--sci-workbench-button-cursor);position:absolute;top:.275em;right:.275em;padding:.125em;border-radius:var(--sci-corner-small)}:host>button.close:is(button,#sci-reset):hover:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-hover)}:host>button.close:is(button,#sci-reset):active:where(:not(:disabled)){background-color:var(--sci-workbench-button-background-color-active)}:host>button.close:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button.close:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent)}:host>button.close:is(button,#sci-reset):disabled{color:var(--sci-color-gray-500)}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: CoerceObservablePipe, name: "wbCoerceObservable$" }, { kind: "pipe", type: TextPipe, name: "wbText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17653
17926
  }
17654
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationComponent, decorators: [{
17927
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationComponent, decorators: [{
17655
17928
  type: Component,
17656
17929
  args: [{ selector: 'wb-notification', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
17657
17930
  AsyncPipe,
@@ -17681,10 +17954,10 @@ class NotificationCssClassesPipe {
17681
17954
  .concat(severity)
17682
17955
  .concat(`e2e-severity-${severity}`)));
17683
17956
  }
17684
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationCssClassesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
17685
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.2", ngImport: i0, type: NotificationCssClassesPipe, isStandalone: true, name: "wbNotificationCssClasses$" });
17957
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationCssClassesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
17958
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.3", ngImport: i0, type: NotificationCssClassesPipe, isStandalone: true, name: "wbNotificationCssClasses$" });
17686
17959
  }
17687
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationCssClassesPipe, decorators: [{
17960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationCssClassesPipe, decorators: [{
17688
17961
  type: Pipe,
17689
17962
  args: [{ name: 'wbNotificationCssClasses$' }]
17690
17963
  }] });
@@ -17718,10 +17991,10 @@ class NotificationListComponent {
17718
17991
  ]),
17719
17992
  ];
17720
17993
  }
17721
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17722
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: NotificationListComponent, isStandalone: true, selector: "wb-notification-list", ngImport: i0, template: "@for (notification of notifications$ | async; track notification.config.group || notification) {\n <wb-notification [notification]=\"notification\"\n [ngClass]=\"notification | wbNotificationCssClasses$ | async\"\n (closeNotification)=\"onNotificationClose(notification)\"\n @notification-enter-or-leave/>\n}\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: "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 });
17994
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17995
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: NotificationListComponent, isStandalone: true, selector: "wb-notification-list", ngImport: i0, template: "@for (notification of notifications$ | async; track notification.config.group || notification) {\n <wb-notification [notification]=\"notification\"\n [ngClass]=\"notification | wbNotificationCssClasses$ | async\"\n (closeNotification)=\"onNotificationClose(notification)\"\n @notification-enter-or-leave/>\n}\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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NotificationComponent, selector: "wb-notification", inputs: ["notification"], outputs: ["closeNotification"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: NotificationCssClassesPipe, name: "wbNotificationCssClasses$" }], animations: [trigger('notification-enter-or-leave', NotificationListComponent.provideAnimation())], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17723
17996
  }
17724
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NotificationListComponent, decorators: [{
17997
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: NotificationListComponent, decorators: [{
17725
17998
  type: Component,
17726
17999
  args: [{ selector: 'wb-notification-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
17727
18000
  AsyncPipe,
@@ -17744,8 +18017,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
17744
18017
  * Renders a button to toggle the visibility of an activity.
17745
18018
  */
17746
18019
  class ActivityItemComponent {
17747
- activity = input.required();
17748
- active = input.required();
18020
+ activity = input.required(...(ngDevMode ? [{ debugName: "activity" }] : []));
18021
+ active = input.required(...(ngDevMode ? [{ debugName: "active" }] : []));
17749
18022
  tooltip = text(computed(() => this.activity().tooltip ?? this.activity().label));
17750
18023
  focusWithinActivity = this.computeFocusWithinActivity();
17751
18024
  _workbenchRouter = inject(ɵWorkbenchRouter);
@@ -17779,10 +18052,10 @@ class ActivityItemComponent {
17779
18052
  });
17780
18053
  });
17781
18054
  }
17782
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17783
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.2", type: ActivityItemComponent, isStandalone: true, selector: "wb-activity-item", inputs: { activity: { classPropertyName: "activity", publicName: "activity", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-active": "active() ? '' : null", "attr.data-focus-within-activity": "focusWithinActivity() ? '' : null", "attr.data-activityid": "activity().id", "attr.title": "tooltip()" } }, ngImport: i0, template: "<button (click)=\"onToggle()\"\n [class.focus-within-activity]=\"focusWithinActivity()\"\n [class.active]=\"active()\">\n <wb-icon [icon]=\"activity().icon\"/>\n</button>\n", styles: [":host{display:inline-grid}:host>button:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:var(--sci-workbench-activity-item-padding);background-color:var(--sci-workbench-activity-item-background-color);color:var(--sci-workbench-activity-item-text-color);border:var(--sci-workbench-activity-item-border-width) solid var(--sci-workbench-activity-item-border-color);border-radius:var(--sci-workbench-activity-item-border-radius);cursor:var(--sci-workbench-activity-item-cursor);-webkit-user-select:none;user-select:none;overflow:hidden;height:24px;width:24px;font-size:24px}:host>button:is(button,#sci-reset):hover{background-color:var(--sci-workbench-activity-item-background-color-hover);border-color:var(--sci-workbench-activity-item-border-color-hover);color:var(--sci-workbench-activity-item-text-color-hover)}:host>button:is(button,#sci-reset).active{background-color:var(--sci-workbench-activity-item-background-color-active);border-color:var(--sci-workbench-activity-item-border-color-active);color:var(--sci-workbench-activity-item-text-color-active)}:host>button:is(button,#sci-reset).active:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).active:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent);background-clip:padding-box}:host>button:is(button,#sci-reset).focus-within-activity{background-color:var(--sci-workbench-activity-item-background-color-focus);border-color:var(--sci-workbench-activity-item-border-color-focus);color:var(--sci-workbench-activity-item-text-color-focus)}:host>button:is(button,#sci-reset).focus-within-activity:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).focus-within-activity:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
18055
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18056
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.3", type: ActivityItemComponent, isStandalone: true, selector: "wb-activity-item", inputs: { activity: { classPropertyName: "activity", publicName: "activity", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-active": "active() ? '' : null", "attr.data-focus-within-activity": "focusWithinActivity() ? '' : null", "attr.data-activityid": "activity().id", "attr.title": "tooltip()" } }, ngImport: i0, template: "<button (click)=\"onToggle()\"\n [class.focus-within-activity]=\"focusWithinActivity()\"\n [class.active]=\"active()\">\n <wb-icon [icon]=\"activity().icon\"/>\n</button>\n", styles: [":host{display:inline-grid}:host>button:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:var(--sci-workbench-activity-item-padding);background-color:var(--sci-workbench-activity-item-background-color);color:var(--sci-workbench-activity-item-text-color);border:var(--sci-workbench-activity-item-border-width) solid var(--sci-workbench-activity-item-border-color);border-radius:var(--sci-workbench-activity-item-border-radius);cursor:var(--sci-workbench-activity-item-cursor);-webkit-user-select:none;user-select:none;overflow:hidden;height:24px;width:24px;font-size:24px}:host>button:is(button,#sci-reset):hover{background-color:var(--sci-workbench-activity-item-background-color-hover);border-color:var(--sci-workbench-activity-item-border-color-hover);color:var(--sci-workbench-activity-item-text-color-hover)}:host>button:is(button,#sci-reset):active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-hover) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).active{background-color:var(--sci-workbench-activity-item-background-color-active);border-color:var(--sci-workbench-activity-item-border-color-active);color:var(--sci-workbench-activity-item-text-color-active)}:host>button:is(button,#sci-reset).active:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).active:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent);background-clip:padding-box}:host>button:is(button,#sci-reset).focus-within-activity{background-color:var(--sci-workbench-activity-item-background-color-focus);border-color:var(--sci-workbench-activity-item-border-color-focus);color:var(--sci-workbench-activity-item-text-color-focus)}:host>button:is(button,#sci-reset).focus-within-activity:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).focus-within-activity:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "wb-icon", inputs: ["icon"] }] });
17784
18057
  }
17785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityItemComponent, decorators: [{
18058
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityItemComponent, decorators: [{
17786
18059
  type: Component,
17787
18060
  args: [{ selector: 'wb-activity-item', imports: [
17788
18061
  IconComponent,
@@ -17791,7 +18064,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
17791
18064
  '[attr.data-focus-within-activity]': `focusWithinActivity() ? '' : null`,
17792
18065
  '[attr.data-activityid]': 'activity().id',
17793
18066
  '[attr.title]': 'tooltip()',
17794
- }, template: "<button (click)=\"onToggle()\"\n [class.focus-within-activity]=\"focusWithinActivity()\"\n [class.active]=\"active()\">\n <wb-icon [icon]=\"activity().icon\"/>\n</button>\n", styles: [":host{display:inline-grid}:host>button:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:var(--sci-workbench-activity-item-padding);background-color:var(--sci-workbench-activity-item-background-color);color:var(--sci-workbench-activity-item-text-color);border:var(--sci-workbench-activity-item-border-width) solid var(--sci-workbench-activity-item-border-color);border-radius:var(--sci-workbench-activity-item-border-radius);cursor:var(--sci-workbench-activity-item-cursor);-webkit-user-select:none;user-select:none;overflow:hidden;height:24px;width:24px;font-size:24px}:host>button:is(button,#sci-reset):hover{background-color:var(--sci-workbench-activity-item-background-color-hover);border-color:var(--sci-workbench-activity-item-border-color-hover);color:var(--sci-workbench-activity-item-text-color-hover)}:host>button:is(button,#sci-reset).active{background-color:var(--sci-workbench-activity-item-background-color-active);border-color:var(--sci-workbench-activity-item-border-color-active);color:var(--sci-workbench-activity-item-text-color-active)}:host>button:is(button,#sci-reset).active:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).active:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent);background-clip:padding-box}:host>button:is(button,#sci-reset).focus-within-activity{background-color:var(--sci-workbench-activity-item-background-color-focus);border-color:var(--sci-workbench-activity-item-border-color-focus);color:var(--sci-workbench-activity-item-text-color-focus)}:host>button:is(button,#sci-reset).focus-within-activity:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).focus-within-activity:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}\n"] }]
18067
+ }, template: "<button (click)=\"onToggle()\"\n [class.focus-within-activity]=\"focusWithinActivity()\"\n [class.active]=\"active()\">\n <wb-icon [icon]=\"activity().icon\"/>\n</button>\n", styles: [":host{display:inline-grid}:host>button:is(button,#sci-reset){all:unset;display:inline-grid;place-content:center;place-items:center;padding:var(--sci-workbench-activity-item-padding);background-color:var(--sci-workbench-activity-item-background-color);color:var(--sci-workbench-activity-item-text-color);border:var(--sci-workbench-activity-item-border-width) solid var(--sci-workbench-activity-item-border-color);border-radius:var(--sci-workbench-activity-item-border-radius);cursor:var(--sci-workbench-activity-item-cursor);-webkit-user-select:none;user-select:none;overflow:hidden;height:24px;width:24px;font-size:24px}:host>button:is(button,#sci-reset):hover{background-color:var(--sci-workbench-activity-item-background-color-hover);border-color:var(--sci-workbench-activity-item-border-color-hover);color:var(--sci-workbench-activity-item-text-color-hover)}:host>button:is(button,#sci-reset):active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-hover) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).active{background-color:var(--sci-workbench-activity-item-background-color-active);border-color:var(--sci-workbench-activity-item-border-color-active);color:var(--sci-workbench-activity-item-text-color-active)}:host>button:is(button,#sci-reset).active:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).active:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-active) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset):focus:not(:focus-visible){outline:none}:host>button:is(button,#sci-reset):focus-visible{outline:var(--sci-workbench-button-outline-width-focus) solid var(--sci-color-accent);background-clip:padding-box}:host>button:is(button,#sci-reset).focus-within-activity{background-color:var(--sci-workbench-activity-item-background-color-focus);border-color:var(--sci-workbench-activity-item-border-color-focus);color:var(--sci-workbench-activity-item-text-color-focus)}:host>button:is(button,#sci-reset).focus-within-activity:hover{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 95%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}:host>button:is(button,#sci-reset).focus-within-activity:active{background-color:color-mix(in srgb,var(--sci-workbench-activity-item-background-color-focus) 90%,light-dark(var(--sci-static-color-black),var(--sci-static-color-white)))}\n"] }]
17795
18068
  }], ctorParameters: () => [] });
17796
18069
 
17797
18070
  /*
@@ -17807,11 +18080,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
17807
18080
  * Represents the stack of activities in a docking area.
17808
18081
  */
17809
18082
  class ActivityStackComponent {
17810
- stack = input.required();
17811
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17812
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ActivityStackComponent, isStandalone: true, selector: "wb-activity-stack", inputs: { stack: { classPropertyName: "stack", publicName: "stack", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (activity of stack().activities; track activity.id) {\n <wb-activity-item [activity]=\"activity\" [active]=\"stack().activeActivityId === activity.id\"/>\n}\n", styles: [":host{display:flex;flex-direction:column;align-items:center;gap:var(--sci-workbench-activity-item-gap)}\n"], dependencies: [{ kind: "component", type: ActivityItemComponent, selector: "wb-activity-item", inputs: ["activity", "active"] }] });
18083
+ stack = input.required(...(ngDevMode ? [{ debugName: "stack" }] : []));
18084
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18085
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ActivityStackComponent, isStandalone: true, selector: "wb-activity-stack", inputs: { stack: { classPropertyName: "stack", publicName: "stack", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@for (activity of stack().activities; track activity.id) {\n <wb-activity-item [activity]=\"activity\" [active]=\"stack().activeActivityId === activity.id\"/>\n}\n", styles: [":host{display:flex;flex-direction:column;align-items:center;gap:var(--sci-workbench-activity-item-gap)}\n"], dependencies: [{ kind: "component", type: ActivityItemComponent, selector: "wb-activity-item", inputs: ["activity", "active"] }] });
17813
18086
  }
17814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityStackComponent, decorators: [{
18087
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityStackComponent, decorators: [{
17815
18088
  type: Component,
17816
18089
  args: [{ selector: 'wb-activity-stack', imports: [
17817
18090
  ActivityItemComponent,
@@ -17831,12 +18104,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
17831
18104
  * Renders the activity bar of a given workbench side.
17832
18105
  */
17833
18106
  class ActivityBarComponent {
17834
- align = input.required();
18107
+ align = input.required(...(ngDevMode ? [{ debugName: "align" }] : []));
17835
18108
  layout = inject(ɵWorkbenchService).layout;
17836
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17837
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ActivityBarComponent, isStandalone: true, selector: "wb-activity-bar", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-align": "align()" } }, ngImport: i0, template: "@let activityLayout = layout().activityLayout;\n\n@switch (align()) {\n @case ('left') {\n @if (activityLayout.toolbars.leftTop.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.leftTop\" data-docking-area=\"left-top\"/>\n }\n\n @if (activityLayout.toolbars.leftTop.activities.length && activityLayout.toolbars.leftBottom.activities.length) {\n <hr/>\n }\n\n @if (activityLayout.toolbars.leftBottom.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.leftBottom\" data-docking-area=\"left-bottom\"/>\n }\n <div class=\"filler\"></div>\n @if (activityLayout.toolbars.bottomLeft.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.bottomLeft\" data-docking-area=\"bottom-left\"/>\n }\n }\n @case ('right') {\n @if (activityLayout.toolbars.rightTop.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.rightTop\" data-docking-area=\"right-top\"/>\n }\n\n @if (activityLayout.toolbars.rightTop.activities.length && activityLayout.toolbars.rightBottom.activities.length) {\n <hr>\n }\n\n @if (activityLayout.toolbars.rightBottom.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.rightBottom\" data-docking-area=\"right-bottom\"/>\n }\n <div class=\"filler\"></div>\n @if (activityLayout.toolbars.bottomRight.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.bottomRight\" data-docking-area=\"bottom-right\"/>\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;gap:var(--sci-workbench-activity-item-gap);-webkit-user-select:none;user-select:none;padding:var(--sci-workbench-activity-bar-padding);background-color:var(--sci-workbench-activity-bar-background-color)}:host[data-align=left]{border-right:1px solid var(--sci-color-border)}:host[data-align=right]{border-left:1px solid var(--sci-color-border)}:host>wb-activity-stack{display:flex;flex-direction:column;align-items:center}:host>hr{all:unset;height:1px;width:24px;align-self:center;background-color:var(--sci-color-border);border-radius:var(--sci-corner)}:host>div.filler{flex:auto}\n"], dependencies: [{ kind: "component", type: ActivityStackComponent, selector: "wb-activity-stack", inputs: ["stack"] }] });
18109
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18110
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ActivityBarComponent, isStandalone: true, selector: "wb-activity-bar", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-align": "align()" } }, ngImport: i0, template: "@let activityLayout = layout().activityLayout;\n\n@switch (align()) {\n @case ('left') {\n @if (activityLayout.toolbars.leftTop.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.leftTop\" data-docking-area=\"left-top\"/>\n }\n\n @if (activityLayout.toolbars.leftTop.activities.length && activityLayout.toolbars.leftBottom.activities.length) {\n <hr/>\n }\n\n @if (activityLayout.toolbars.leftBottom.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.leftBottom\" data-docking-area=\"left-bottom\"/>\n }\n <div class=\"filler\"></div>\n @if (activityLayout.toolbars.bottomLeft.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.bottomLeft\" data-docking-area=\"bottom-left\"/>\n }\n }\n @case ('right') {\n @if (activityLayout.toolbars.rightTop.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.rightTop\" data-docking-area=\"right-top\"/>\n }\n\n @if (activityLayout.toolbars.rightTop.activities.length && activityLayout.toolbars.rightBottom.activities.length) {\n <hr>\n }\n\n @if (activityLayout.toolbars.rightBottom.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.rightBottom\" data-docking-area=\"right-bottom\"/>\n }\n <div class=\"filler\"></div>\n @if (activityLayout.toolbars.bottomRight.activities.length) {\n <wb-activity-stack [stack]=\"activityLayout.toolbars.bottomRight\" data-docking-area=\"bottom-right\"/>\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;gap:var(--sci-workbench-activity-item-gap);-webkit-user-select:none;user-select:none;padding:var(--sci-workbench-activity-bar-padding);background-color:var(--sci-workbench-activity-bar-background-color)}:host[data-align=left]{border-right:1px solid var(--sci-color-border)}:host[data-align=right]{border-left:1px solid var(--sci-color-border)}:host>wb-activity-stack{display:flex;flex-direction:column;align-items:center}:host>hr{all:unset;height:1px;width:24px;align-self:center;background-color:var(--sci-color-border);border-radius:var(--sci-corner)}:host>div.filler{flex:auto}\n"], dependencies: [{ kind: "component", type: ActivityStackComponent, selector: "wb-activity-stack", inputs: ["stack"] }] });
17838
18111
  }
17839
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityBarComponent, decorators: [{
18112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityBarComponent, decorators: [{
17840
18113
  type: Component,
17841
18114
  args: [{ selector: 'wb-activity-bar', imports: [
17842
18115
  ActivityStackComponent,
@@ -17861,15 +18134,15 @@ class ActivityPanelComponent {
17861
18134
  /**
17862
18135
  * Specifies the location of the panel.
17863
18136
  */
17864
- panel = input.required();
18137
+ panel = input.required(...(ngDevMode ? [{ debugName: "panel" }] : []));
17865
18138
  /**
17866
18139
  * Specifies the first activity to display in the panel.
17867
18140
  */
17868
- activityId1 = input.required();
18141
+ activityId1 = input.required(...(ngDevMode ? [{ debugName: "activityId1" }] : []));
17869
18142
  /**
17870
18143
  * Specifies the second activity to display in the panel.
17871
18144
  */
17872
- activityId2 = input.required();
18145
+ activityId2 = input.required(...(ngDevMode ? [{ debugName: "activityId2" }] : []));
17873
18146
  _workbenchLayoutService = inject(WorkbenchLayoutService);
17874
18147
  _workbenchRouter = inject(ɵWorkbenchRouter);
17875
18148
  layout = this._workbenchLayoutService.layout;
@@ -17908,10 +18181,10 @@ class ActivityPanelComponent {
17908
18181
  };
17909
18182
  }, { equal: Objects$1.isEqual });
17910
18183
  }
17911
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17912
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: ActivityPanelComponent, isStandalone: true, selector: "wb-activity-panel", inputs: { panel: { classPropertyName: "panel", publicName: "panel", isSignal: true, isRequired: true, transformFunction: null }, activityId1: { classPropertyName: "activityId1", publicName: "activityId1", isSignal: true, isRequired: true, transformFunction: null }, activityId2: { classPropertyName: "activityId2", publicName: "activityId2", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-panel": "panel()" } }, ngImport: i0, template: "@if (activityId1() && activityId2()) {\n <sci-sashbox [direction]=\"direction()\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onSashEnd($event)\">\n <ng-template sciSash [size]=\"sashSizes().sash1\" key=\"sash1\">\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId1()}\"/>\n </ng-template>\n\n <ng-template sciSash [size]=\"sashSizes().sash2\" key=\"sash2\">\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId2()}\"/>\n </ng-template>\n </sci-sashbox>\n} @else if (activityId1()) {\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId1()}\"/>\n} @else if (activityId2()) {\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId2()}\"/>\n}\n\n<ng-template #activity_template let-activityId>\n <wb-grid [grid]=\"layout().grids[activityId]!\"\n [attr.data-grid]=\"activityId\"\n [gridDropZone]=\"{\n dropRegionSize: .15,\n dropPlaceholderSize: .15,\n dropZoneAttributes: {'data-grid': activityId},\n }\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>sci-sashbox{z-index:auto}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SciSashboxComponent, selector: "sci-sashbox", inputs: ["direction"], outputs: ["sashStart", "sashEnd"] }, { kind: "directive", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: ["size", "minSize", "key", "animate"], exportAs: ["sciSash"] }, { kind: "component", type: GridComponent, selector: "wb-grid", inputs: ["grid", "gridDropZone"] }] });
18184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18185
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: ActivityPanelComponent, isStandalone: true, selector: "wb-activity-panel", inputs: { panel: { classPropertyName: "panel", publicName: "panel", isSignal: true, isRequired: true, transformFunction: null }, activityId1: { classPropertyName: "activityId1", publicName: "activityId1", isSignal: true, isRequired: true, transformFunction: null }, activityId2: { classPropertyName: "activityId2", publicName: "activityId2", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-panel": "panel()" } }, ngImport: i0, template: "@if (activityId1() && activityId2()) {\n <sci-sashbox [direction]=\"direction()\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onSashEnd($event)\">\n <ng-template sciSash [size]=\"sashSizes().sash1\" key=\"sash1\">\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId1()}\"/>\n </ng-template>\n\n <ng-template sciSash [size]=\"sashSizes().sash2\" key=\"sash2\">\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId2()}\"/>\n </ng-template>\n </sci-sashbox>\n} @else if (activityId1()) {\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId1()}\"/>\n} @else if (activityId2()) {\n <ng-container *ngTemplateOutlet=\"activity_template; context: {$implicit: activityId2()}\"/>\n}\n\n<ng-template #activity_template let-activityId>\n <wb-grid [grid]=\"layout().grids[activityId]!\"\n [attr.data-grid]=\"activityId\"\n [gridDropZone]=\"{\n dropRegionSize: .15,\n dropPlaceholderSize: .15,\n dropZoneAttributes: {'data-grid': activityId},\n }\"/>\n</ng-template>\n", styles: [":host{display:grid}:host>sci-sashbox{z-index:auto}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SciSashboxComponent, selector: "sci-sashbox", inputs: ["direction"], outputs: ["sashStart", "sashEnd"] }, { kind: "directive", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: ["size", "minSize", "key", "animate"], exportAs: ["sciSash"] }, { kind: "component", type: GridComponent, selector: "wb-grid", inputs: ["grid", "gridDropZone"] }] });
17913
18186
  }
17914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ActivityPanelComponent, decorators: [{
18187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: ActivityPanelComponent, decorators: [{
17915
18188
  type: Component,
17916
18189
  args: [{ selector: 'wb-activity-panel', imports: [
17917
18190
  NgTemplateOutlet,
@@ -17933,19 +18206,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
17933
18206
  * SPDX-License-Identifier: EPL-2.0
17934
18207
  */
17935
18208
  class LayoutComponent {
17936
- layout = input.required();
18209
+ layout = input.required(...(ngDevMode ? [{ debugName: "layout" }] : []));
17937
18210
  _workbenchLayoutService = inject(WorkbenchLayoutService);
17938
18211
  _workbenchRouter = inject(ɵWorkbenchRouter);
17939
18212
  _workbenchId = inject(WORKBENCH_ID);
17940
18213
  _viewDragService = inject(ViewDragService);
17941
- _panels = computed(() => this.layout().activityLayout.panels);
18214
+ _panels = computed(() => this.layout().activityLayout.panels, ...(ngDevMode ? [{ debugName: "_panels" }] : []));
17942
18215
  desktop = inject(WorkbenchDesktop);
17943
- toolbars = computed(() => this.layout().activityLayout.toolbars);
17944
- leftActivityPanel = computed(() => this.toolbars().leftTop.activeActivityId || this.toolbars().leftBottom.activeActivityId ? this._panels().left : null);
17945
- rightActivityPanel = computed(() => this.toolbars().rightTop.activeActivityId || this.toolbars().rightBottom.activeActivityId ? this._panels().right : null);
17946
- bottomActivityPanel = computed(() => this.toolbars().bottomLeft.activeActivityId || this.toolbars().bottomRight.activeActivityId ? this._panels().bottom : null);
17947
- leftActivityBarVisible = computed(() => this.toolbars().leftTop.activities.length || this.toolbars().leftBottom.activities.length || this.toolbars().bottomLeft.activities.length);
17948
- rightActivityBarVisible = computed(() => this.toolbars().rightTop.activities.length || this.toolbars().rightBottom.activities.length || this.toolbars().bottomRight.activities.length);
18216
+ toolbars = computed(() => this.layout().activityLayout.toolbars, ...(ngDevMode ? [{ debugName: "toolbars" }] : []));
18217
+ leftActivityPanel = computed(() => this.toolbars().leftTop.activeActivityId || this.toolbars().leftBottom.activeActivityId ? this._panels().left : null, ...(ngDevMode ? [{ debugName: "leftActivityPanel" }] : []));
18218
+ rightActivityPanel = computed(() => this.toolbars().rightTop.activeActivityId || this.toolbars().rightBottom.activeActivityId ? this._panels().right : null, ...(ngDevMode ? [{ debugName: "rightActivityPanel" }] : []));
18219
+ bottomActivityPanel = computed(() => this.toolbars().bottomLeft.activeActivityId || this.toolbars().bottomRight.activeActivityId ? this._panels().bottom : null, ...(ngDevMode ? [{ debugName: "bottomActivityPanel" }] : []));
18220
+ leftActivityBarVisible = computed(() => this.toolbars().leftTop.activities.length || this.toolbars().leftBottom.activities.length || this.toolbars().bottomLeft.activities.length, ...(ngDevMode ? [{ debugName: "leftActivityBarVisible" }] : []));
18221
+ rightActivityBarVisible = computed(() => this.toolbars().rightTop.activities.length || this.toolbars().rightBottom.activities.length || this.toolbars().bottomRight.activities.length, ...(ngDevMode ? [{ debugName: "rightActivityBarVisible" }] : []));
17949
18222
  panelAlignment = inject(WorkbenchService).settings.panelAlignment;
17950
18223
  panelAnimation = inject(WorkbenchService).settings.panelAnimation;
17951
18224
  perspectiveService = inject(WorkbenchPerspectiveService);
@@ -17960,7 +18233,7 @@ class LayoutComponent {
17960
18233
  */
17961
18234
  canDropInMainGrid = computed(() => {
17962
18235
  return !this.layout().hasActivities() || this.layout().parts({ grid: 'main' }).some(part => part.id !== MAIN_AREA);
17963
- });
18236
+ }, ...(ngDevMode ? [{ debugName: "canDropInMainGrid" }] : []));
17964
18237
  onSashStart() {
17965
18238
  this._workbenchLayoutService.signalResizing(true);
17966
18239
  }
@@ -17992,10 +18265,10 @@ class LayoutComponent {
17992
18265
  dragData: event.dragData,
17993
18266
  });
17994
18267
  }
17995
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17996
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: LayoutComponent, isStandalone: true, selector: "wb-layout", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "@.disabled": "perspectiveService.switchingPerspective() || perspectiveService.resettingPerspective()" } }, ngImport: i0, template: "<!-- Left Activity Bar -->\n@if (leftActivityBarVisible()) {\n <wb-activity-bar [align]=\"'left'\"/>\n}\n\n<main>\n @switch (panelAlignment()) {\n @case ('left') {\n <ng-container *ngTemplateOutlet=\"layout_align_left\"/>\n }\n @case ('right') {\n <ng-container *ngTemplateOutlet=\"layout_align_right\"/>\n }\n @case ('center') {\n <ng-container *ngTemplateOutlet=\"layout_center\"/>\n }\n @case ('justify') {\n <ng-container *ngTemplateOutlet=\"layout_justify\"/>\n }\n }\n</main>\n\n<!-- Right Activity Bar -->\n@if (rightActivityBarVisible()) {\n <wb-activity-bar [align]=\"'right'\"/>\n}\n\n<!-- Layout with bottom panel alignment left -->\n<ng-template #layout_align_left>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | | R | -->\n <!-- | E | MAIN | I | -->\n <!-- | F | GRID | G | -->\n <!-- | T | | H | -->\n <!-- +---+------------+ T | -->\n <!-- | BOTTOM | | -->\n <!-- +----------------+---+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n </sci-sashbox>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n</ng-template>\n\n<!-- Layout with bottom panel alignment right -->\n<ng-template #layout_align_right>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | | R | -->\n <!-- | E | MAIN | I | -->\n <!-- | F | GRID | G | -->\n <!-- | T | | H | -->\n <!-- | | | T | -->\n <!-- | +------------+---| -->\n <!-- | | BOTTOM | -->\n <!-- +---+----------------+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n </sci-sashbox>\n</ng-template>\n\n<!-- Layout with bottom panel alignment center -->\n<ng-template #layout_center>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | MAIN | R | -->\n <!-- | E | GRID | I | -->\n <!-- | F | | G | -->\n <!-- | T +------------+ H | -->\n <!-- | | BOTTOM | T | -->\n <!-- +---+------------+---+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n</ng-template>\n\n<!-- Layout with bottom panel alignment justify -->\n<ng-template #layout_justify>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | | R | -->\n <!-- | E | MAIN | I | -->\n <!-- | F | GRID | G | -->\n <!-- | T | | H | -->\n <!-- | | | T | -->\n <!-- +---+------------+---+ -->\n <!-- | BOTTOM | -->\n <!-- +--------------------+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n</ng-template>\n\n<!-- Main Grid -->\n<ng-template #main_grid>\n @if (layout().grids.main.root.visible) {\n <wb-grid [grid]=\"layout().grids.main\"\n [gridDropZone]=\"canDropInMainGrid() && {\n dropRegionSize: 50,\n dropPlaceholderSize: 50,\n dropZoneAttributes: {'data-grid': 'main'}\n }\"\n [attr.data-grid]=\"'main'\"/>\n } @else {\n <div wbViewDropZone\n [wbViewDropZoneRegions]=\"canDrop() && {center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneAttributes]=\"{'data-desktop': ''}\"\n (wbViewDropZoneDrop)=\"onDesktopViewDrop($event)\"\n class=\"desktop\">\n <ng-container *wbPortalOutlet=\"desktop.slot.portal; destroyOnDetach: false\"/>\n </div>\n }\n</ng-template>\n", styles: [":host{display:flex;--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)}:host>wb-activity-bar{flex:none}:host>main{flex:auto;display:grid}:host>main div.desktop{display:grid;position:relative}:host>main sci-sashbox{z-index:auto}\n"], dependencies: [{ kind: "component", type: ActivityBarComponent, selector: "wb-activity-bar", inputs: ["align"] }, { kind: "directive", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: ["size", "minSize", "key", "animate"], exportAs: ["sciSash"] }, { kind: "component", type: SciSashboxComponent, selector: "sci-sashbox", inputs: ["direction"], outputs: ["sashStart", "sashEnd"] }, { kind: "component", type: ActivityPanelComponent, selector: "wb-activity-panel", inputs: ["panel", "activityId1", "activityId2"] }, { kind: "component", type: GridComponent, selector: "wb-grid", inputs: ["grid", "gridDropZone"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }] });
18268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18269
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: LayoutComponent, isStandalone: true, selector: "wb-layout", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "@.disabled": "perspectiveService.switchingPerspective() || perspectiveService.resettingPerspective()" } }, ngImport: i0, template: "<!-- Left Activity Bar -->\n@if (leftActivityBarVisible()) {\n <wb-activity-bar [align]=\"'left'\"/>\n}\n\n<main>\n @switch (panelAlignment()) {\n @case ('left') {\n <ng-container *ngTemplateOutlet=\"layout_align_left\"/>\n }\n @case ('right') {\n <ng-container *ngTemplateOutlet=\"layout_align_right\"/>\n }\n @case ('center') {\n <ng-container *ngTemplateOutlet=\"layout_center\"/>\n }\n @case ('justify') {\n <ng-container *ngTemplateOutlet=\"layout_justify\"/>\n }\n }\n</main>\n\n<!-- Right Activity Bar -->\n@if (rightActivityBarVisible()) {\n <wb-activity-bar [align]=\"'right'\"/>\n}\n\n<!-- Layout with bottom panel alignment left -->\n<ng-template #layout_align_left>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | | R | -->\n <!-- | E | MAIN | I | -->\n <!-- | F | GRID | G | -->\n <!-- | T | | H | -->\n <!-- +---+------------+ T | -->\n <!-- | BOTTOM | | -->\n <!-- +----------------+---+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n </sci-sashbox>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n</ng-template>\n\n<!-- Layout with bottom panel alignment right -->\n<ng-template #layout_align_right>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | | R | -->\n <!-- | E | MAIN | I | -->\n <!-- | F | GRID | G | -->\n <!-- | T | | H | -->\n <!-- | | | T | -->\n <!-- | +------------+---| -->\n <!-- | | BOTTOM | -->\n <!-- +---+----------------+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n </sci-sashbox>\n</ng-template>\n\n<!-- Layout with bottom panel alignment center -->\n<ng-template #layout_center>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | MAIN | R | -->\n <!-- | E | GRID | I | -->\n <!-- | F | | G | -->\n <!-- | T +------------+ H | -->\n <!-- | | BOTTOM | T | -->\n <!-- +---+------------+---+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n</ng-template>\n\n<!-- Layout with bottom panel alignment justify -->\n<ng-template #layout_justify>\n <!-- @formatter:off -->\n <!-- +---+------------+---+ -->\n <!-- | L | | R | -->\n <!-- | E | MAIN | I | -->\n <!-- | F | GRID | G | -->\n <!-- | T | | H | -->\n <!-- | | | T | -->\n <!-- +---+------------+---+ -->\n <!-- | BOTTOM | -->\n <!-- +--------------------+ -->\n <!-- @formatter:on -->\n <sci-sashbox [direction]=\"'column'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onVerticalSashEnd($event)\">\n <ng-template sciSash>\n <sci-sashbox [direction]=\"'row'\" (sashStart)=\"onSashStart()\" (sashEnd)=\"onHorizontalSashEnd($event)\">\n <!-- Left Activity Panel -->\n @if (leftActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"left\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'left'\" [activityId1]=\"toolbars().leftTop.activeActivityId\" [activityId2]=\"toolbars().leftBottom.activeActivityId\"/>\n </ng-template>\n }\n <!-- Main Grid -->\n <ng-template sciSash>\n <ng-container *ngTemplateOutlet=\"main_grid\"/>\n </ng-template>\n <!-- Right Activity Panel -->\n @if (rightActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.width}px`\" key=\"right\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'right'\" [activityId1]=\"toolbars().rightTop.activeActivityId\" [activityId2]=\"toolbars().rightBottom.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n </ng-template>\n <!-- Bottom Activity Panel -->\n @if (bottomActivityPanel(); as panel) {\n <ng-template sciSash [size]=\"`${panel.height}px`\" key=\"bottom\" [animate]=\"panelAnimation()\">\n <wb-activity-panel [panel]=\"'bottom'\" [activityId1]=\"toolbars().bottomLeft.activeActivityId\" [activityId2]=\"toolbars().bottomRight.activeActivityId\"/>\n </ng-template>\n }\n </sci-sashbox>\n</ng-template>\n\n<!-- Main Grid -->\n<ng-template #main_grid>\n @if (layout().grids.main.root.visible) {\n <wb-grid [grid]=\"layout().grids.main\"\n [gridDropZone]=\"canDropInMainGrid() && {\n dropRegionSize: 50,\n dropPlaceholderSize: 50,\n dropZoneAttributes: {'data-grid': 'main'}\n }\"\n [attr.data-grid]=\"'main'\"/>\n } @else {\n <div wbViewDropZone\n [wbViewDropZoneRegions]=\"canDrop() && {center: true, north: false, south: false, west: false, east: false}\"\n [wbViewDropZoneAttributes]=\"{'data-desktop': ''}\"\n (wbViewDropZoneDrop)=\"onDesktopViewDrop($event)\"\n class=\"desktop\">\n <ng-container *wbPortalOutlet=\"desktop.slot.portal; destroyOnDetach: false\"/>\n </div>\n }\n</ng-template>\n", styles: [":host{display:flex;--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)}:host>wb-activity-bar{flex:none}:host>main{flex:auto;display:grid}:host>main div.desktop{display:grid;position:relative}:host>main sci-sashbox{z-index:auto}\n"], dependencies: [{ kind: "component", type: ActivityBarComponent, selector: "wb-activity-bar", inputs: ["align"] }, { kind: "directive", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: ["size", "minSize", "key", "animate"], exportAs: ["sciSash"] }, { kind: "component", type: SciSashboxComponent, selector: "sci-sashbox", inputs: ["direction"], outputs: ["sashStart", "sashEnd"] }, { kind: "component", type: ActivityPanelComponent, selector: "wb-activity-panel", inputs: ["panel", "activityId1", "activityId2"] }, { kind: "component", type: GridComponent, selector: "wb-grid", inputs: ["grid", "gridDropZone"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ViewDropZoneDirective, selector: "[wbViewDropZone]", inputs: ["wbViewDropZoneRegions", "wbViewDropZoneAttributes", "wbViewDropZoneRegionSize", "wbViewDropZonePlaceholderSize"], outputs: ["wbViewDropZoneDrop"] }, { kind: "directive", type: WorkbenchPortalOutletDirective, selector: "ng-template[wbPortalOutlet]", inputs: ["wbPortalOutlet", "wbPortalOutletDestroyOnDetach"] }] });
17997
18270
  }
17998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LayoutComponent, decorators: [{
18271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: LayoutComponent, decorators: [{
17999
18272
  type: Component,
18000
18273
  args: [{ selector: 'wb-layout', imports: [
18001
18274
  ActivityBarComponent,
@@ -18027,8 +18300,8 @@ class WorkbenchComponent {
18027
18300
  _workbenchLauncher = inject(WorkbenchLauncher);
18028
18301
  _logger = inject(Logger);
18029
18302
  _workbenchRouter = inject(ɵWorkbenchRouter);
18030
- _iframeOverlayHost = viewChild('iframe_overlay_host', { read: ViewContainerRef });
18031
- _viewDropZoneOverlayHost = viewChild('view_drop_zone_overlay_host', { read: ViewContainerRef });
18303
+ _iframeOverlayHost = viewChild('iframe_overlay_host', ...(ngDevMode ? [{ debugName: "_iframeOverlayHost", read: ViewContainerRef }] : [{ read: ViewContainerRef }]));
18304
+ _viewDropZoneOverlayHost = viewChild('view_drop_zone_overlay_host', ...(ngDevMode ? [{ debugName: "_viewDropZoneOverlayHost", read: ViewContainerRef }] : [{ read: ViewContainerRef }]));
18032
18305
  /** Splash to display during workbench startup. */
18033
18306
  splash = inject(WorkbenchConfig).splashComponent ?? inject(WorkbenchConfig).startup?.splash ?? SplashComponent;
18034
18307
  workbenchStartup = inject(WorkbenchStartup);
@@ -18105,12 +18378,12 @@ class WorkbenchComponent {
18105
18378
  }
18106
18379
  throw Error(`[WorkbenchError] Circular loading of the workbench component detected in workbench outlet '${outlet}'. Did you forget to add the CanMatch guard 'canMatchWorkbenchOutlet(false)' to the application's empty-path default route?`);
18107
18380
  }
18108
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18109
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: WorkbenchComponent, isStandalone: true, selector: "wb-workbench", viewQueries: [{ propertyName: "_iframeOverlayHost", first: true, predicate: ["iframe_overlay_host"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "_viewDropZoneOverlayHost", first: true, predicate: ["view_drop_zone_overlay_host"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "@if (workbenchStartup.done()) {\n <div class=\"stacking-context-barrier\" wbGlassPane>\n <wb-layout [layout]=\"workbenchService.layout()\"/>\n\n <!-- Achor to attach iframes of embedded microfrontends -->\n <ng-container #iframe_overlay_host/>\n </div>\n\n <!-- Anchor to attach the visual placeholder when dragging a view over a valid drop zone -->\n <div #view_drop_zone_overlay_host class=\"view-drop-zone-overlay-host\"></div>\n\n <!-- Notifications -->\n <wb-notification-list/>\n} @else {\n <ng-container *ngComponentOutlet=\"splash\"/>\n}\n", styles: [":host{display:grid;overflow:hidden;color:var(--sci-color-text);background-color:var(--sci-color-background-primary)}:where(:host){position:relative}:host>div.stacking-context-barrier{display:flex;isolation:isolate}:host>div.stacking-context-barrier>wb-layout{flex:auto}:host>div.view-drop-zone-overlay-host{position:absolute}:host>wb-notification-list{position:absolute;inset:0}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: NotificationListComponent, selector: "wb-notification-list" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }, { kind: "component", type: LayoutComponent, selector: "wb-layout", inputs: ["layout"] }], viewProviders: [
18381
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18382
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.3", type: WorkbenchComponent, isStandalone: true, selector: "wb-workbench", viewQueries: [{ propertyName: "_iframeOverlayHost", first: true, predicate: ["iframe_overlay_host"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "_viewDropZoneOverlayHost", first: true, predicate: ["view_drop_zone_overlay_host"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "@if (workbenchStartup.done()) {\n <div class=\"stacking-context-barrier\" wbGlassPane>\n <wb-layout [layout]=\"workbenchService.layout()\"/>\n\n <!-- Achor to attach iframes of embedded microfrontends -->\n <ng-container #iframe_overlay_host/>\n </div>\n\n <!-- Anchor to attach the visual placeholder when dragging a view over a valid drop zone -->\n <div #view_drop_zone_overlay_host class=\"view-drop-zone-overlay-host\"></div>\n\n <!-- Notifications -->\n <wb-notification-list/>\n} @else {\n <ng-container *ngComponentOutlet=\"splash\"/>\n}\n", styles: [":host{display:grid;overflow:hidden;color:var(--sci-color-text);background-color:var(--sci-color-background-primary)}:where(:host){position:relative}:host>div.stacking-context-barrier{display:flex;isolation:isolate}:host>div.stacking-context-barrier>wb-layout{flex:auto}:host>div.view-drop-zone-overlay-host{position:absolute}:host>wb-notification-list{position:absolute;inset:0}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: NotificationListComponent, selector: "wb-notification-list" }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }, { kind: "component", type: LayoutComponent, selector: "wb-layout", inputs: ["layout"] }], viewProviders: [
18110
18383
  configureWorkbenchGlassPane(),
18111
18384
  ] });
18112
18385
  }
18113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchComponent, decorators: [{
18386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchComponent, decorators: [{
18114
18387
  type: Component,
18115
18388
  args: [{ selector: 'wb-workbench', imports: [
18116
18389
  NgComponentOutlet,
@@ -18163,10 +18436,10 @@ function configureWorkbenchGlassPane() {
18163
18436
  * Factory for creating a {@link WorkbenchLayout}.
18164
18437
  */
18165
18438
  class WorkbenchLayoutFactory {
18166
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18167
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutFactory, providedIn: 'root', useExisting: ɵWorkbenchLayoutFactory });
18439
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18440
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutFactory, providedIn: 'root', useExisting: ɵWorkbenchLayoutFactory });
18168
18441
  }
18169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchLayoutFactory, decorators: [{
18442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchLayoutFactory, decorators: [{
18170
18443
  type: Injectable,
18171
18444
  args: [{ providedIn: 'root', useExisting: ɵWorkbenchLayoutFactory }]
18172
18445
  }] });
@@ -18234,10 +18507,10 @@ class WorkbenchDesktopDirective {
18234
18507
  }
18235
18508
  });
18236
18509
  }
18237
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDesktopDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18238
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.2", type: WorkbenchDesktopDirective, isStandalone: true, selector: "ng-template[wbDesktop]", ngImport: i0 });
18510
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDesktopDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18511
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.3", type: WorkbenchDesktopDirective, isStandalone: true, selector: "ng-template[wbDesktop]", ngImport: i0 });
18239
18512
  }
18240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDesktopDirective, decorators: [{
18513
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDesktopDirective, decorators: [{
18241
18514
  type: Directive,
18242
18515
  args: [{ selector: 'ng-template[wbDesktop]' }]
18243
18516
  }], ctorParameters: () => [] });
@@ -18313,15 +18586,15 @@ class WorkbenchViewMenuItemDirective {
18313
18586
  *
18314
18587
  * Supported modifiers are 'ctrl', 'shift', 'alt' and 'meta'.
18315
18588
  */
18316
- accelerator = input();
18589
+ accelerator = input(...(ngDevMode ? [undefined, { debugName: "accelerator" }] : []));
18317
18590
  /**
18318
18591
  * Enables grouping of menu items.
18319
18592
  */
18320
- group = input();
18593
+ group = input(...(ngDevMode ? [undefined, { debugName: "group" }] : []));
18321
18594
  /**
18322
18595
  * Controls if the menu item is disabled. Defaults to `false`.
18323
18596
  */
18324
- disabled = input();
18597
+ disabled = input(...(ngDevMode ? [undefined, { debugName: "disabled" }] : []));
18325
18598
  /**
18326
18599
  * Predicate to match a specific context, such as a particular view or condition. Defaults to any context.
18327
18600
  *
@@ -18330,11 +18603,11 @@ class WorkbenchViewMenuItemDirective {
18330
18603
  * - Runs in a reactive context and is called again when tracked signals change.
18331
18604
  * Use Angular's `untracked` function to execute code outside this reactive context.
18332
18605
  */
18333
- canMatch = input();
18606
+ canMatch = input(...(ngDevMode ? [undefined, { debugName: "canMatch" }] : []));
18334
18607
  /**
18335
18608
  * Specifies CSS class(es) to add to the menu item, e.g., to locate the menu item in tests.
18336
18609
  */
18337
- cssClass = input();
18610
+ cssClass = input(...(ngDevMode ? [undefined, { debugName: "cssClass" }] : []));
18338
18611
  /**
18339
18612
  * Emits when the menu item is clicked.
18340
18613
  */
@@ -18366,10 +18639,10 @@ class WorkbenchViewMenuItemDirective {
18366
18639
  });
18367
18640
  inject(DestroyRef).onDestroy(() => action.dispose());
18368
18641
  }
18369
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchViewMenuItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18370
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchViewMenuItemDirective, isStandalone: true, selector: "ng-template[wbViewMenuItem]", inputs: { accelerator: { classPropertyName: "accelerator", publicName: "accelerator", isSignal: true, isRequired: false, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, canMatch: { classPropertyName: "canMatch", publicName: "canMatch", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, ngImport: i0 });
18642
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchViewMenuItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18643
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchViewMenuItemDirective, isStandalone: true, selector: "ng-template[wbViewMenuItem]", inputs: { accelerator: { classPropertyName: "accelerator", publicName: "accelerator", isSignal: true, isRequired: false, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, canMatch: { classPropertyName: "canMatch", publicName: "canMatch", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, ngImport: i0 });
18371
18644
  }
18372
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchViewMenuItemDirective, decorators: [{
18645
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchViewMenuItemDirective, decorators: [{
18373
18646
  type: Directive,
18374
18647
  args: [{ selector: 'ng-template[wbViewMenuItem]' }]
18375
18648
  }], ctorParameters: () => [] });
@@ -18424,7 +18697,7 @@ class WorkbenchPartActionDirective {
18424
18697
  /**
18425
18698
  * Specifies where to place this action in the part bar. Defaults to `end`.
18426
18699
  */
18427
- align = input();
18700
+ align = input(...(ngDevMode ? [undefined, { debugName: "align" }] : []));
18428
18701
  /**
18429
18702
  * Predicate to match a specific context, such as a particular part or condition. Defaults to any context.
18430
18703
  *
@@ -18433,11 +18706,11 @@ class WorkbenchPartActionDirective {
18433
18706
  * - Runs in a reactive context and is called again when tracked signals change.
18434
18707
  * Use Angular's `untracked` function to execute code outside this reactive context.
18435
18708
  */
18436
- canMatch = input();
18709
+ canMatch = input(...(ngDevMode ? [undefined, { debugName: "canMatch" }] : []));
18437
18710
  /**
18438
18711
  * Specifies CSS class(es) to add to the action, e.g., to locate the action in tests.
18439
18712
  */
18440
- cssClass = input();
18713
+ cssClass = input(...(ngDevMode ? [undefined, { debugName: "cssClass" }] : []));
18441
18714
  constructor() {
18442
18715
  this.registerPartAction();
18443
18716
  }
@@ -18469,10 +18742,10 @@ class WorkbenchPartActionDirective {
18469
18742
  });
18470
18743
  inject(DestroyRef).onDestroy(() => action.dispose());
18471
18744
  }
18472
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchPartActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18473
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchPartActionDirective, isStandalone: true, selector: "ng-template[wbPartAction]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, canMatch: { classPropertyName: "canMatch", publicName: "canMatch", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
18745
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchPartActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18746
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchPartActionDirective, isStandalone: true, selector: "ng-template[wbPartAction]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, canMatch: { classPropertyName: "canMatch", publicName: "canMatch", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
18474
18747
  }
18475
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchPartActionDirective, decorators: [{
18748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchPartActionDirective, decorators: [{
18476
18749
  type: Directive,
18477
18750
  args: [{ selector: 'ng-template[wbPartAction]' }]
18478
18751
  }], ctorParameters: () => [] });
@@ -18530,8 +18803,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImpor
18530
18803
  * ```
18531
18804
  */
18532
18805
  class WorkbenchRouterLinkDirective {
18533
- commands = input.required({ alias: 'wbRouterLink', transform: (commands) => Arrays.coerce(commands) });
18534
- extras = input({}, { alias: 'wbRouterLinkExtras', transform: (extras) => extras ?? {} });
18806
+ commands = input.required(...(ngDevMode ? [{ debugName: "commands", alias: 'wbRouterLink', transform: (commands) => Arrays.coerce(commands) }] : [{ alias: 'wbRouterLink', transform: (commands) => Arrays.coerce(commands) }]));
18807
+ extras = input({}, ...(ngDevMode ? [{ debugName: "extras", alias: 'wbRouterLinkExtras', transform: (extras) => extras ?? {} }] : [{ alias: 'wbRouterLinkExtras', transform: (extras) => extras ?? {} }]));
18535
18808
  _workbenchRouter = inject(WorkbenchRouter);
18536
18809
  _router = inject(Router);
18537
18810
  _route = inject(ActivatedRoute);
@@ -18578,10 +18851,10 @@ class WorkbenchRouterLinkDirective {
18578
18851
  .pipe(combineLatestWith(extras$, navigationEnd$), switchMap$1(([commands, extras]) => workbenchRouter.createUrlTree(createNavigationFromCommands(commands, extras), extras)), map(urlTree => urlTree && locationStrategy.prepareExternalUrl(this._router.serializeUrl(urlTree))));
18579
18852
  return toSignal(href$, { initialValue: null });
18580
18853
  }
18581
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchRouterLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18582
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchRouterLinkDirective, isStandalone: true, selector: "[wbRouterLink]", inputs: { commands: { classPropertyName: "commands", publicName: "wbRouterLink", isSignal: true, isRequired: true, transformFunction: null }, extras: { classPropertyName: "extras", publicName: "wbRouterLinkExtras", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.metaKey)" }, properties: { "attr.href": "href()" } }, ngImport: i0 });
18854
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchRouterLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18855
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchRouterLinkDirective, isStandalone: true, selector: "[wbRouterLink]", inputs: { commands: { classPropertyName: "commands", publicName: "wbRouterLink", isSignal: true, isRequired: true, transformFunction: null }, extras: { classPropertyName: "extras", publicName: "wbRouterLinkExtras", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.metaKey)" }, properties: { "attr.href": "href()" } }, ngImport: i0 });
18583
18856
  }
18584
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchRouterLinkDirective, decorators: [{
18857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchRouterLinkDirective, decorators: [{
18585
18858
  type: Directive,
18586
18859
  args: [{
18587
18860
  selector: '[wbRouterLink]',
@@ -18641,7 +18914,7 @@ class WorkbenchDialogActionDirective {
18641
18914
  /**
18642
18915
  * Specifies where to place this action in the dialog footer. Defaults to `end`.
18643
18916
  */
18644
- align = input('end');
18917
+ align = input('end', ...(ngDevMode ? [{ debugName: "align" }] : []));
18645
18918
  template = inject(TemplateRef);
18646
18919
  _action;
18647
18920
  constructor() {
@@ -18651,10 +18924,10 @@ class WorkbenchDialogActionDirective {
18651
18924
  // Defer disposing action to avoid `ExpressionChangedAfterItHasBeenCheckedError`.
18652
18925
  inject(DestroyRef).onDestroy(() => asapScheduler.schedule(() => this._action?.dispose()));
18653
18926
  }
18654
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18655
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: WorkbenchDialogActionDirective, isStandalone: true, selector: "ng-template[wbDialogAction]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
18927
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18928
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.3", type: WorkbenchDialogActionDirective, isStandalone: true, selector: "ng-template[wbDialogAction]", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
18656
18929
  }
18657
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: WorkbenchDialogActionDirective, decorators: [{
18930
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WorkbenchDialogActionDirective, decorators: [{
18658
18931
  type: Directive,
18659
18932
  args: [{ selector: 'ng-template[wbDialogAction]' }]
18660
18933
  }], ctorParameters: () => [] });