@elderbyte/ngx-starter 20.7.1 → 20.8.0

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.
@@ -1,7 +1,7 @@
1
1
  import * as i2 from '@angular/common';
2
2
  import { formatDate, CommonModule, formatCurrency, getCurrencySymbol, AsyncPipe, NgTemplateOutlet, NgClass, NgStyle, formatNumber, DecimalPipe, DatePipe, registerLocaleData, CurrencyPipe } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Pipe, LOCALE_ID, Inject, NgModule, Injectable, inject, Optional, SkipSelf, Input, Output, Directive, forwardRef, ViewChild, ElementRef, DestroyRef, model, signal, computed, untracked, HostBinding, ViewChildren, ContentChild, ChangeDetectionStrategy, Component, Host, APP_INITIALIZER, TemplateRef, HostListener, EventEmitter, input, ViewEncapsulation, InjectionToken, output, effect, ContentChildren, contentChildren, viewChild, contentChild, viewChildren, linkedSignal, booleanAttribute } from '@angular/core';
4
+ import { Pipe, LOCALE_ID, Inject, NgModule, Injectable, inject, Optional, SkipSelf, Input, Output, Directive, forwardRef, ViewChild, ElementRef, DestroyRef, model, signal, computed, untracked, HostBinding, ViewChildren, ContentChild, ChangeDetectionStrategy, Component, Host, APP_INITIALIZER, TemplateRef, HostListener, EventEmitter, input, ViewEncapsulation, InjectionToken, output, effect, ContentChildren, contentChildren, viewChild, contentChild, viewChildren, linkedSignal, booleanAttribute, Injector, NgZone } from '@angular/core';
5
5
  import * as i1 from '@angular/platform-browser';
6
6
  import { Duration, Period, TemporalQueries, LocalTime, Instant, LocalDate, nativeJs, ZoneId, DateTimeFormatter, convert, ZonedDateTime, Temporal as Temporal$1 } from '@js-joda/core';
7
7
  import { LoggerFactory } from '@elderbyte/ts-logger';
@@ -27,7 +27,7 @@ import { MatIcon, MatIconModule } from '@angular/material/icon';
27
27
  import { MatSlideToggle, MatSlideToggleModule } from '@angular/material/slide-toggle';
28
28
  import * as i1$5 from '@angular/material/toolbar';
29
29
  import { MatToolbar, MatToolbarRow, MatToolbarModule } from '@angular/material/toolbar';
30
- import { MatCard, MatCardModule, MatCardContent } from '@angular/material/card';
30
+ import { MatCard, MatCardModule } from '@angular/material/card';
31
31
  import * as i1$c from '@angular/material/core';
32
32
  import { MatRipple, MatRippleModule, MatOption, MatCommonModule, NativeDateAdapter, MAT_DATE_LOCALE, DateAdapter, MatNativeDateModule } from '@angular/material/core';
33
33
  import * as i5 from '@angular/material/button';
@@ -47,7 +47,7 @@ import { MatDivider, MatDividerModule } from '@angular/material/divider';
47
47
  import * as i6 from '@angular/material/menu';
48
48
  import { MatMenuTrigger, MatMenu, MatMenuItem, MatMenuModule } from '@angular/material/menu';
49
49
  import * as i1$7 from '@angular/material/dialog';
50
- import { MatDialogClose, MAT_DIALOG_DATA, MatDialogConfig, MatDialogModule } from '@angular/material/dialog';
50
+ import { MatDialogClose, MAT_DIALOG_DATA, MatDialogConfig, MatDialogModule, MatDialog } from '@angular/material/dialog';
51
51
  import { MatBadge, MatBadgeModule } from '@angular/material/badge';
52
52
  import * as i1$b from '@angular/material/checkbox';
53
53
  import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';
@@ -2106,7 +2106,7 @@ class CountryPhoneFormatService {
2106
2106
  '+423': {
2107
2107
  country: 'LI',
2108
2108
  countryCode: '+423',
2109
- bodyFormat: [/^(\d{3})(\d{4})$/, '$1 $2'],
2109
+ bodyFormat: [/^(\d{3})(\d{2})(\d{2})$/, '$1 $2 $3'],
2110
2110
  },
2111
2111
  '+49': {
2112
2112
  country: 'DE',
@@ -10539,11 +10539,11 @@ class ElderThemeToggleComponent {
10539
10539
  }
10540
10540
  }
10541
10541
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderThemeToggleComponent, deps: [{ token: ElderThemeService }, { token: ElderThemePreferenceService }], target: i0.ɵɵFactoryTarget.Component }); }
10542
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: ElderThemeToggleComponent, isStandalone: true, selector: "elder-theme-toggle", inputs: { color: "color" }, ngImport: i0, template: "@if (activeToggleTheme$ | async; as activeToggleTheme) {\n <div class=\"layout-row place-start-center\">\n <mat-slide-toggle\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n >\n </mat-slide-toggle>\n <mat-icon [color]=\"color\">\n {{ activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2' }}\n </mat-icon>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10542
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: ElderThemeToggleComponent, isStandalone: true, selector: "elder-theme-toggle", inputs: { color: "color" }, ngImport: i0, template: "@if (activeToggleTheme$ | async; as activeToggleTheme) {\n <div class=\"layout-row place-start-center\">\n <mat-slide-toggle\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n aria-label=\"Toggle theme\"\n >\n </mat-slide-toggle>\n <mat-icon [color]=\"color\">\n {{ activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2' }}\n </mat-icon>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10543
10543
  }
10544
10544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderThemeToggleComponent, decorators: [{
10545
10545
  type: Component,
10546
- args: [{ selector: 'elder-theme-toggle', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatSlideToggle, FormsModule, MatIcon, AsyncPipe], template: "@if (activeToggleTheme$ | async; as activeToggleTheme) {\n <div class=\"layout-row place-start-center\">\n <mat-slide-toggle\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n >\n </mat-slide-toggle>\n <mat-icon [color]=\"color\">\n {{ activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2' }}\n </mat-icon>\n </div>\n}\n" }]
10546
+ args: [{ selector: 'elder-theme-toggle', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatSlideToggle, FormsModule, MatIcon, AsyncPipe], template: "@if (activeToggleTheme$ | async; as activeToggleTheme) {\n <div class=\"layout-row place-start-center\">\n <mat-slide-toggle\n [ngModel]=\"activeToggleTheme !== 'default'\"\n (ngModelChange)=\"onToggle($event)\"\n [color]=\"color\"\n aria-label=\"Toggle theme\"\n >\n </mat-slide-toggle>\n <mat-icon [color]=\"color\">\n {{ activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2' }}\n </mat-icon>\n </div>\n}\n" }]
10547
10547
  }], ctorParameters: () => [{ type: ElderThemeService }, { type: ElderThemePreferenceService }], propDecorators: { color: [{
10548
10548
  type: Input
10549
10549
  }] } });
@@ -36441,8 +36441,302 @@ class DataViewMessage extends TypedEventMessage {
36441
36441
  class IframeMessages {
36442
36442
  static { this.CLOSE = 'CLOSE'; }
36443
36443
  static { this.VIEW_READY_EVENT = 'VIEW_READY_EVENT'; }
36444
+ static { this.LOCKS_CHANGE_EVENT = 'LOCKS_CHANGE_EVENT'; }
36444
36445
  }
36445
36446
 
36447
+ class ElderLockManagerService {
36448
+ /***************************************************************************
36449
+ * *
36450
+ * Constructor *
36451
+ * *
36452
+ **************************************************************************/
36453
+ constructor() {
36454
+ this.log = LoggerFactory.getLogger(this.constructor.name);
36455
+ this.lockContext = inject(ElderLockContext);
36456
+ /***************************************************************************
36457
+ * *
36458
+ * Signal state *
36459
+ * *
36460
+ **************************************************************************/
36461
+ this.isUnloadEventListenerActive = signal(false, ...(ngDevMode ? [{ debugName: "isUnloadEventListenerActive" }] : []));
36462
+ /***************************************************************************
36463
+ * *
36464
+ * Computed signals *
36465
+ * *
36466
+ **************************************************************************/
36467
+ this.hasLocks = computed(() => this.lockMessages().length > 0, ...(ngDevMode ? [{ debugName: "hasLocks" }] : []));
36468
+ this.lockMessages = computed(() => this.lockContext.lockMessages(), ...(ngDevMode ? [{ debugName: "lockMessages" }] : []));
36469
+ /***************************************************************************
36470
+ * *
36471
+ * Private properties *
36472
+ * *
36473
+ **************************************************************************/
36474
+ this.handleBeforeUnload = (event) => {
36475
+ event.preventDefault();
36476
+ };
36477
+ // Handle initial state on construction since this service may be initialized async
36478
+ this.handleInitialLockState();
36479
+ this.lockContext.locksChanged.pipe(takeUntilDestroyed()).subscribe((locks) => {
36480
+ this.sendLockMessages();
36481
+ });
36482
+ const lockedStatusChanged = this.lockContext.locksChanged.pipe(map((locks) => locks.length > 0), takeUntilDestroyed());
36483
+ lockedStatusChanged.subscribe((isLocked) => {
36484
+ if (isLocked) {
36485
+ this.activateUnloadEventListener();
36486
+ }
36487
+ else {
36488
+ this.deactivateUnloadEventListener();
36489
+ }
36490
+ });
36491
+ }
36492
+ /***************************************************************************
36493
+ * *
36494
+ * Private methods *
36495
+ * *
36496
+ **************************************************************************/
36497
+ handleInitialLockState() {
36498
+ if (this.hasLocks()) {
36499
+ this.sendLockMessages();
36500
+ this.activateUnloadEventListener();
36501
+ }
36502
+ }
36503
+ sendLockMessages() {
36504
+ if (!this.isTopWindow()) {
36505
+ this.postLocksChangeEvent(this.lockMessages());
36506
+ }
36507
+ }
36508
+ activateUnloadEventListener() {
36509
+ if (this.isUnloadEventListenerActive()) {
36510
+ return;
36511
+ }
36512
+ this.isUnloadEventListenerActive.set(true);
36513
+ window.addEventListener('beforeunload', this.handleBeforeUnload);
36514
+ }
36515
+ deactivateUnloadEventListener() {
36516
+ if (!this.isUnloadEventListenerActive()) {
36517
+ return;
36518
+ }
36519
+ this.isUnloadEventListenerActive.set(false);
36520
+ window.removeEventListener('beforeunload', this.handleBeforeUnload);
36521
+ }
36522
+ isTopWindow() {
36523
+ return window.self === window.top;
36524
+ }
36525
+ /***************************************************************************
36526
+ * *
36527
+ * Iframe communication *
36528
+ * *
36529
+ **************************************************************************/
36530
+ postLocksChangeEvent(lockMessages) {
36531
+ const message = new TypedEventMessage(IframeMessages.LOCKS_CHANGE_EVENT, lockMessages);
36532
+ parent.postMessage(message, '*'); // `*` on any domain
36533
+ }
36534
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36535
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockManagerService, providedIn: 'root' }); }
36536
+ }
36537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockManagerService, decorators: [{
36538
+ type: Injectable,
36539
+ args: [{
36540
+ providedIn: 'root',
36541
+ }]
36542
+ }], ctorParameters: () => [] });
36543
+
36544
+ class ElderLock {
36545
+ constructor(message) {
36546
+ this.message = message;
36547
+ this.id = UuidUtil.weakUuid4();
36548
+ }
36549
+ }
36550
+ class ElderLockContext {
36551
+ /***************************************************************************
36552
+ * *
36553
+ * Constructor *
36554
+ * *
36555
+ **************************************************************************/
36556
+ constructor() {
36557
+ this.injector = inject(Injector);
36558
+ this.ngZone = inject(NgZone);
36559
+ this.parentLockService = inject(ElderLockContext, {
36560
+ skipSelf: true,
36561
+ optional: true,
36562
+ });
36563
+ /***************************************************************************
36564
+ * *
36565
+ * Signal state *
36566
+ * *
36567
+ **************************************************************************/
36568
+ this.childLockServices = signal([], ...(ngDevMode ? [{ debugName: "childLockServices" }] : []));
36569
+ this.ownLocks = signal([], ...(ngDevMode ? [{ debugName: "ownLocks" }] : []));
36570
+ /***************************************************************************
36571
+ * *
36572
+ * Computed signals *
36573
+ * *
36574
+ **************************************************************************/
36575
+ this.childLockMessages = computed(() => {
36576
+ return this.childLockServices().flatMap((service) => service.lockMessages());
36577
+ }, ...(ngDevMode ? [{ debugName: "childLockMessages" }] : []));
36578
+ this.lockMessages = computed(() => [
36579
+ ...this.ownLocks().map((lock) => lock.message),
36580
+ ...this.childLockMessages(),
36581
+ ], ...(ngDevMode ? [{ debugName: "lockMessages" }] : []));
36582
+ this.hasOwnLocks = computed(() => this.ownLocks().length > 0, ...(ngDevMode ? [{ debugName: "hasOwnLocks" }] : []));
36583
+ this.hasLocks = computed(() => this.lockMessages().length > 0, ...(ngDevMode ? [{ debugName: "hasLocks" }] : []));
36584
+ if (this.parentLockService) {
36585
+ this.registerWithParent();
36586
+ }
36587
+ this.locksChanged = toObservable(this.lockMessages);
36588
+ setTimeout(() => {
36589
+ // Initialize lock manager asynchronously to deal with circular dependency
36590
+ this.injector.get(ElderLockManagerService);
36591
+ });
36592
+ }
36593
+ /***************************************************************************
36594
+ * *
36595
+ * Lifecycle methods *
36596
+ * *
36597
+ **************************************************************************/
36598
+ ngOnDestroy() {
36599
+ this.unlockAllOwnLocks();
36600
+ this.unlockChildLocksRecursively();
36601
+ if (this.parentLockService) {
36602
+ this.deregisterFromParent();
36603
+ }
36604
+ }
36605
+ /***************************************************************************
36606
+ * *
36607
+ * Public API *
36608
+ * *
36609
+ **************************************************************************/
36610
+ lock(message) {
36611
+ const lock = new ElderLock(message);
36612
+ this.ownLocks.set([...this.ownLocks(), lock]);
36613
+ return lock;
36614
+ }
36615
+ unlock(lock) {
36616
+ this.ownLocks.update((currentLocks) => currentLocks.filter((l) => l.id !== lock.id));
36617
+ }
36618
+ unlockAllOwnLocks() {
36619
+ this.ownLocks.set([]);
36620
+ }
36621
+ unlockChildLocksRecursively() {
36622
+ this.childLockServices().forEach((service) => {
36623
+ service.unlockAllOwnLocks();
36624
+ service.unlockChildLocksRecursively();
36625
+ });
36626
+ }
36627
+ /***************************************************************************
36628
+ * *
36629
+ * Private methods *
36630
+ * *
36631
+ **************************************************************************/
36632
+ registerWithParent() {
36633
+ const newChildServices = [...this.parentLockService.childLockServices(), this];
36634
+ this.parentLockService.childLockServices.set(newChildServices);
36635
+ }
36636
+ deregisterFromParent() {
36637
+ const newChildServices = this.parentLockService
36638
+ .childLockServices()
36639
+ .filter((service) => service !== this);
36640
+ this.parentLockService.childLockServices.set(newChildServices);
36641
+ }
36642
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockContext, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36643
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockContext, providedIn: 'root' }); }
36644
+ }
36645
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockContext, decorators: [{
36646
+ type: Injectable,
36647
+ args: [{
36648
+ providedIn: 'root',
36649
+ }]
36650
+ }], ctorParameters: () => [] });
36651
+
36652
+ class ElderLockContextDirective {
36653
+ constructor() {
36654
+ /***************************************************************************
36655
+ * *
36656
+ * Fields *
36657
+ * *
36658
+ **************************************************************************/
36659
+ this.lockContext = inject(ElderLockContext, { self: true });
36660
+ }
36661
+ /***************************************************************************
36662
+ * *
36663
+ * Computed signals *
36664
+ * *
36665
+ **************************************************************************/
36666
+ get lockMessages() {
36667
+ return this.lockContext.lockMessages;
36668
+ }
36669
+ get hasLocks() {
36670
+ return this.lockContext.hasLocks;
36671
+ }
36672
+ get hasOwnLocks() {
36673
+ return this.lockContext.hasOwnLocks;
36674
+ }
36675
+ get childLockMessages() {
36676
+ return this.lockContext.childLockMessages;
36677
+ }
36678
+ /***************************************************************************
36679
+ * *
36680
+ * Public API *
36681
+ * *
36682
+ **************************************************************************/
36683
+ lock(message) {
36684
+ return this.lockContext.lock(message);
36685
+ }
36686
+ unlockAllOwnLocks() {
36687
+ return this.lockContext.unlockAllOwnLocks();
36688
+ }
36689
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
36690
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: ElderLockContextDirective, isStandalone: true, selector: "[elderLockContext]", providers: [ElderLockContext], ngImport: i0 }); }
36691
+ }
36692
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockContextDirective, decorators: [{
36693
+ type: Directive,
36694
+ args: [{
36695
+ selector: '[elderLockContext]',
36696
+ standalone: true,
36697
+ providers: [ElderLockContext],
36698
+ }]
36699
+ }] });
36700
+
36701
+ class ElderLockWarningService {
36702
+ constructor() {
36703
+ this.dialogService = inject(ElderDialogService);
36704
+ this.translateService = inject(TranslateService);
36705
+ }
36706
+ /***************************************************************************
36707
+ * *
36708
+ * Public API *
36709
+ * *
36710
+ **************************************************************************/
36711
+ displayMessages(lockMessages, options = {}) {
36712
+ const defaultOptions = {
36713
+ title: 'dialogs.confirm_ignore_locks.title',
36714
+ actionDescription: 'dialogs.confirm_ignore_locks.close_element',
36715
+ ...options,
36716
+ };
36717
+ const message = 'dialogs.confirm_ignore_locks.message';
36718
+ const translatedLockMessages = lockMessages.map((msg) => this.translateService.instant(msg));
36719
+ const locksListStr = translatedLockMessages.join('; ');
36720
+ return this.dialogService.showConfirm({
36721
+ title: defaultOptions.title,
36722
+ message: message,
36723
+ yesNo: true,
36724
+ interpolateParams: {
36725
+ actionDescription: defaultOptions.actionDescription,
36726
+ locksList: locksListStr,
36727
+ },
36728
+ });
36729
+ }
36730
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockWarningService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36731
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockWarningService, providedIn: 'root' }); }
36732
+ }
36733
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderLockWarningService, decorators: [{
36734
+ type: Injectable,
36735
+ args: [{
36736
+ providedIn: 'root',
36737
+ }]
36738
+ }] });
36739
+
36446
36740
  class IFrameState {
36447
36741
  constructor(type, message = null) {
36448
36742
  this.type = type;
@@ -36468,6 +36762,8 @@ class IframeHostComponent {
36468
36762
  * *
36469
36763
  **************************************************************************/
36470
36764
  constructor() {
36765
+ this.lockContext = inject(ElderLockContextDirective).lockContext;
36766
+ this.lockWarningService = inject(ElderLockWarningService);
36471
36767
  /***************************************************************************
36472
36768
  * *
36473
36769
  * Fields *
@@ -36491,10 +36787,11 @@ class IframeHostComponent {
36491
36787
  * @param event message from child window
36492
36788
  */
36493
36789
  onWindowMessage(event) {
36790
+ const messageOrigin = event.source === this.getIframeContentWindow() ? 'ownIframe' : 'foreign';
36494
36791
  if (event && event.data) {
36495
36792
  if (TypedEventMessage.isOfType(event.data)) {
36496
36793
  this.log.debug('Received message from child:', event.data);
36497
- this.handleMessageFromChild(event.data);
36794
+ this.handleMessageFromChild(event.data, messageOrigin);
36498
36795
  }
36499
36796
  }
36500
36797
  return true;
@@ -36531,14 +36828,28 @@ class IframeHostComponent {
36531
36828
  this.iframe.nativeElement.contentWindow.postMessage(msg, '*');
36532
36829
  }
36533
36830
  doClose(event) {
36534
- this.close.emit();
36831
+ if (this.lockContext.hasLocks()) {
36832
+ this.lockWarningService
36833
+ .displayMessages(this.lockContext.lockMessages())
36834
+ .subscribe((confirmed) => {
36835
+ if (confirmed) {
36836
+ this.close.emit();
36837
+ }
36838
+ });
36839
+ }
36840
+ else {
36841
+ this.close.emit();
36842
+ }
36535
36843
  }
36536
36844
  /***************************************************************************
36537
36845
  * *
36538
36846
  * Private methods *
36539
36847
  * *
36540
36848
  **************************************************************************/
36541
- handleMessageFromChild(message) {
36849
+ getIframeContentWindow() {
36850
+ return this.iframe.nativeElement.contentWindow;
36851
+ }
36852
+ handleMessageFromChild(message, messageOrigin) {
36542
36853
  this.message.next(message);
36543
36854
  if (message.type === IframeMessages.CLOSE) {
36544
36855
  this.close.emit(message.data);
@@ -36546,13 +36857,30 @@ class IframeHostComponent {
36546
36857
  if (message.type === IframeMessages.VIEW_READY_EVENT) {
36547
36858
  this.iframeState$.next(new IFrameState('VIEW_READY'));
36548
36859
  }
36860
+ if (message.type === IframeMessages.LOCKS_CHANGE_EVENT && messageOrigin === 'ownIframe') {
36861
+ const postedLockMessages = message.data;
36862
+ this.lockContext.unlockAllOwnLocks();
36863
+ if (postedLockMessages?.length > 0) {
36864
+ for (const lockMessage of postedLockMessages) {
36865
+ this.lockContext.lock(lockMessage);
36866
+ }
36867
+ }
36868
+ }
36549
36869
  }
36550
36870
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36551
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: IframeHostComponent, isStandalone: true, selector: "elder-i-frame-host", inputs: { iframeParams: "iframeParams" }, outputs: { message: "message", close: "close" }, host: { listeners: { "window:message": "onWindowMessage($event)" } }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], ngImport: i0, template: "@if ({ state: iframeState$ | async, params: iframeParams$ | async }; as ctx) {\n <div class=\"layout-col full\">\n <!-- In Case of Error -->\n @if (ctx.state.hasError) {\n <div class=\"layout-row place-center-center flex\">\n <span>Failed to load Iframe: {{ ctx.state.message }}</span>\n </div>\n }\n <!-- IFrame -->\n @if (!ctx.state.hasError) {\n <iframe\n #iframe\n (load)=\"onIframeLoadEvent($event)\"\n (error)=\"onIframeErrorEvent($event)\"\n [src]=\"ctx.params.srcUrl | elderSafeUrl\"\n class=\"iframe flex\"\n allow=\"clipboard *;clipboard-read *;clipboard-write *;\"\n ></iframe>\n }\n <!-- Bottom Toolbar -->\n @if (!ctx.params.hideActionBar) {\n <mat-toolbar elderTheme class=\"layout-row place-between-center flex-none elder-dense-toolbar\">\n <a mat-icon-button (click)=\"doClose($event)\" class=\"elder-icon-button-sm\">\n <mat-icon>close</mat-icon>\n </a>\n <a\n mat-icon-button\n class=\"elder-icon-button-sm\"\n [href]=\"ctx.params.srcUrl | elderSafeUrl\"\n target=\"_blank\"\n >\n <mat-icon>open_in_new</mat-icon>\n </a>\n </mat-toolbar>\n }\n </div>\n}\n", styles: [".iframe{margin:0;border:0;height:100%;background-color:#fff}.elder-dense-toolbar,.elder-dense-toolbar .mat-toolbar-row{height:40px}\n"], dependencies: [{ kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: ElderThemeDirective, selector: "[elderTheme]" }, { kind: "component", type: MatIconAnchor, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ElderSafeUrlPipe, name: "elderSafeUrl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36871
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: IframeHostComponent, isStandalone: true, selector: "elder-i-frame-host", inputs: { iframeParams: "iframeParams" }, outputs: { message: "message", close: "close" }, host: { listeners: { "window:message": "onWindowMessage($event)" } }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], hostDirectives: [{ directive: ElderLockContextDirective }], ngImport: i0, template: "@if ({ state: iframeState$ | async, params: iframeParams$ | async }; as ctx) {\n <div class=\"layout-col full\">\n <!-- In Case of Error -->\n @if (ctx.state.hasError) {\n <div class=\"layout-row place-center-center flex\">\n <span>Failed to load Iframe: {{ ctx.state.message }}</span>\n </div>\n }\n <!-- IFrame -->\n @if (!ctx.state.hasError) {\n <iframe\n #iframe\n (load)=\"onIframeLoadEvent($event)\"\n (error)=\"onIframeErrorEvent($event)\"\n [src]=\"ctx.params.srcUrl | elderSafeUrl\"\n class=\"iframe flex\"\n allow=\"clipboard *;clipboard-read *;clipboard-write *;\"\n ></iframe>\n }\n <!-- Bottom Toolbar -->\n @if (!ctx.params.hideActionBar) {\n <mat-toolbar elderTheme class=\"layout-row place-between-center flex-none elder-dense-toolbar\">\n <a mat-icon-button (click)=\"doClose($event)\" class=\"elder-icon-button-sm\">\n <mat-icon>close</mat-icon>\n </a>\n <a\n mat-icon-button\n class=\"elder-icon-button-sm\"\n [href]=\"ctx.params.srcUrl | elderSafeUrl\"\n target=\"_blank\"\n >\n <mat-icon>open_in_new</mat-icon>\n </a>\n </mat-toolbar>\n }\n </div>\n}\n", styles: [".iframe{margin:0;border:0;height:100%;background-color:#fff}.elder-dense-toolbar,.elder-dense-toolbar .mat-toolbar-row{height:40px}\n"], dependencies: [{ kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: ElderThemeDirective, selector: "[elderTheme]" }, { kind: "component", type: MatIconAnchor, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: ElderSafeUrlPipe, name: "elderSafeUrl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36552
36872
  }
36553
36873
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeHostComponent, decorators: [{
36554
36874
  type: Component,
36555
- args: [{ selector: 'elder-i-frame-host', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatToolbar, ElderThemeDirective, MatIconAnchor, MatIcon, AsyncPipe, ElderSafeUrlPipe], template: "@if ({ state: iframeState$ | async, params: iframeParams$ | async }; as ctx) {\n <div class=\"layout-col full\">\n <!-- In Case of Error -->\n @if (ctx.state.hasError) {\n <div class=\"layout-row place-center-center flex\">\n <span>Failed to load Iframe: {{ ctx.state.message }}</span>\n </div>\n }\n <!-- IFrame -->\n @if (!ctx.state.hasError) {\n <iframe\n #iframe\n (load)=\"onIframeLoadEvent($event)\"\n (error)=\"onIframeErrorEvent($event)\"\n [src]=\"ctx.params.srcUrl | elderSafeUrl\"\n class=\"iframe flex\"\n allow=\"clipboard *;clipboard-read *;clipboard-write *;\"\n ></iframe>\n }\n <!-- Bottom Toolbar -->\n @if (!ctx.params.hideActionBar) {\n <mat-toolbar elderTheme class=\"layout-row place-between-center flex-none elder-dense-toolbar\">\n <a mat-icon-button (click)=\"doClose($event)\" class=\"elder-icon-button-sm\">\n <mat-icon>close</mat-icon>\n </a>\n <a\n mat-icon-button\n class=\"elder-icon-button-sm\"\n [href]=\"ctx.params.srcUrl | elderSafeUrl\"\n target=\"_blank\"\n >\n <mat-icon>open_in_new</mat-icon>\n </a>\n </mat-toolbar>\n }\n </div>\n}\n", styles: [".iframe{margin:0;border:0;height:100%;background-color:#fff}.elder-dense-toolbar,.elder-dense-toolbar .mat-toolbar-row{height:40px}\n"] }]
36875
+ args: [{ selector: 'elder-i-frame-host', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36876
+ MatToolbar,
36877
+ ElderThemeDirective,
36878
+ MatIconAnchor,
36879
+ MatIcon,
36880
+ AsyncPipe,
36881
+ ElderSafeUrlPipe,
36882
+ MatIconButton,
36883
+ ], hostDirectives: [ElderLockContextDirective], template: "@if ({ state: iframeState$ | async, params: iframeParams$ | async }; as ctx) {\n <div class=\"layout-col full\">\n <!-- In Case of Error -->\n @if (ctx.state.hasError) {\n <div class=\"layout-row place-center-center flex\">\n <span>Failed to load Iframe: {{ ctx.state.message }}</span>\n </div>\n }\n <!-- IFrame -->\n @if (!ctx.state.hasError) {\n <iframe\n #iframe\n (load)=\"onIframeLoadEvent($event)\"\n (error)=\"onIframeErrorEvent($event)\"\n [src]=\"ctx.params.srcUrl | elderSafeUrl\"\n class=\"iframe flex\"\n allow=\"clipboard *;clipboard-read *;clipboard-write *;\"\n ></iframe>\n }\n <!-- Bottom Toolbar -->\n @if (!ctx.params.hideActionBar) {\n <mat-toolbar elderTheme class=\"layout-row place-between-center flex-none elder-dense-toolbar\">\n <a mat-icon-button (click)=\"doClose($event)\" class=\"elder-icon-button-sm\">\n <mat-icon>close</mat-icon>\n </a>\n <a\n mat-icon-button\n class=\"elder-icon-button-sm\"\n [href]=\"ctx.params.srcUrl | elderSafeUrl\"\n target=\"_blank\"\n >\n <mat-icon>open_in_new</mat-icon>\n </a>\n </mat-toolbar>\n }\n </div>\n}\n", styles: [".iframe{margin:0;border:0;height:100%;background-color:#fff}.elder-dense-toolbar,.elder-dense-toolbar .mat-toolbar-row{height:40px}\n"] }]
36556
36884
  }], ctorParameters: () => [], propDecorators: { iframe: [{
36557
36885
  type: ViewChild,
36558
36886
  args: ['iframe']
@@ -36583,6 +36911,10 @@ class IframeDialogComponent {
36583
36911
  **************************************************************************/
36584
36912
  this.logger = LoggerFactory.getLogger(this.constructor.name);
36585
36913
  this.iframeParams$ = new BehaviorSubject(null);
36914
+ /**
36915
+ * iframeHost is exposed for iframe service backdrop click handling.
36916
+ */
36917
+ this.iframeHost = viewChild(IframeHostComponent, ...(ngDevMode ? [{ debugName: "iframeHost" }] : []));
36586
36918
  this.iframeParams$.next(data);
36587
36919
  }
36588
36920
  /***************************************************************************
@@ -36600,7 +36932,7 @@ class IframeDialogComponent {
36600
36932
  this.dialogRef.close(data);
36601
36933
  }
36602
36934
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeDialogComponent, deps: [{ token: i1$7.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
36603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: IframeDialogComponent, isStandalone: true, selector: "elder-i-frame-dialog", ngImport: i0, template: "@if (iframeParams$ | async; as iFrameParams) {\n <div class=\"full\">\n <elder-i-frame-host class=\"full\" [iframeParams]=\"iFrameParams\" (close)=\"close($event)\">\n </elder-i-frame-host>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: IframeHostComponent, selector: "elder-i-frame-host", inputs: ["iframeParams"], outputs: ["message", "close"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36935
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: IframeDialogComponent, isStandalone: true, selector: "elder-i-frame-dialog", viewQueries: [{ propertyName: "iframeHost", first: true, predicate: IframeHostComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (iframeParams$ | async; as iFrameParams) {\n <div class=\"full\">\n <elder-i-frame-host class=\"full\" [iframeParams]=\"iFrameParams\" (close)=\"close($event)\">\n </elder-i-frame-host>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: IframeHostComponent, selector: "elder-i-frame-host", inputs: ["iframeParams"], outputs: ["message", "close"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36604
36936
  }
36605
36937
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeDialogComponent, decorators: [{
36606
36938
  type: Component,
@@ -36682,33 +37014,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
36682
37014
  }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }, { type: ElderShellService }] });
36683
37015
 
36684
37016
  class IframeService {
37017
+ constructor() {
37018
+ this.dialog = inject(MatDialog);
37019
+ this.dialogService = inject(ElderDialogService);
37020
+ this.lockWarningService = inject(ElderLockWarningService);
37021
+ }
36685
37022
  static postToParent(message) {
36686
37023
  parent.postMessage(message, '*'); // `*` on any domain
36687
37024
  }
36688
- /***************************************************************************
36689
- * *
36690
- * Fields *
36691
- * *
36692
- **************************************************************************/
36693
- constructor(dialog) {
36694
- this.dialog = dialog;
36695
- }
36696
37025
  /***************************************************************************
36697
37026
  * *
36698
37027
  * Public API *
36699
37028
  * *
36700
37029
  **************************************************************************/
36701
37030
  openIframeDialog(params) {
36702
- return this.dialog
36703
- .open(IframeDialogComponent, {
37031
+ const dialogRef = this.dialog.open(IframeDialogComponent, {
36704
37032
  panelClass: 'no-padding-dialog',
36705
37033
  maxWidth: '100vw',
36706
37034
  maxHeight: '100vh',
36707
37035
  width: params.width || '90vw',
36708
37036
  height: params.height || '90vh',
36709
37037
  data: params,
36710
- })
36711
- .afterClosed();
37038
+ disableClose: true,
37039
+ });
37040
+ dialogRef.backdropClick().subscribe(() => {
37041
+ const dialogComponent = dialogRef.componentInstance;
37042
+ const iframeHost = dialogComponent?.iframeHost();
37043
+ if (iframeHost?.lockContext.hasLocks()) {
37044
+ this.lockWarningService
37045
+ .displayMessages(iframeHost.lockContext.lockMessages())
37046
+ .subscribe((confirmed) => {
37047
+ if (confirmed) {
37048
+ dialogRef.close();
37049
+ }
37050
+ });
37051
+ }
37052
+ else {
37053
+ dialogRef.close();
37054
+ }
37055
+ });
37056
+ return dialogRef.afterClosed();
36712
37057
  }
36713
37058
  postCloseMessage(data) {
36714
37059
  IframeService.postToParent(new TypedEventMessage(IframeMessages.CLOSE, data));
@@ -36719,7 +37064,7 @@ class IframeService {
36719
37064
  postDataMessage(message) {
36720
37065
  IframeService.postToParent(message);
36721
37066
  }
36722
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeService, deps: [{ token: i1$7.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
37067
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36723
37068
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeService, providedIn: 'root' }); }
36724
37069
  }
36725
37070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeService, decorators: [{
@@ -36727,16 +37072,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
36727
37072
  args: [{
36728
37073
  providedIn: 'root',
36729
37074
  }]
36730
- }], ctorParameters: () => [{ type: i1$7.MatDialog }] });
37075
+ }] });
36731
37076
 
36732
37077
  class IframeCloseDirective {
36733
- /***************************************************************************
36734
- * *
36735
- * Constructor *
36736
- * *
36737
- **************************************************************************/
36738
- constructor(iframeService) {
36739
- this.iframeService = iframeService;
37078
+ constructor() {
37079
+ this.lockManagerService = inject(ElderLockManagerService);
37080
+ this.dialogService = inject(ElderDialogService);
37081
+ this.iframeService = inject(IframeService);
37082
+ this.lockWarningService = inject(ElderLockWarningService);
36740
37083
  /***************************************************************************
36741
37084
  * *
36742
37085
  * Fields *
@@ -36744,11 +37087,35 @@ class IframeCloseDirective {
36744
37087
  **************************************************************************/
36745
37088
  this.logger = LoggerFactory.getLogger(this.constructor.name);
36746
37089
  }
37090
+ /***************************************************************************
37091
+ * *
37092
+ * Host listener *
37093
+ * *
37094
+ **************************************************************************/
36747
37095
  onClick(event) {
37096
+ if (this.lockManagerService.hasLocks()) {
37097
+ this.lockWarningService
37098
+ .displayMessages(this.lockManagerService.lockMessages())
37099
+ .subscribe((confirmed) => {
37100
+ if (confirmed) {
37101
+ this.closeIframe();
37102
+ }
37103
+ });
37104
+ }
37105
+ else {
37106
+ this.closeIframe();
37107
+ }
37108
+ }
37109
+ /***************************************************************************
37110
+ * *
37111
+ * Private methods *
37112
+ * *
37113
+ **************************************************************************/
37114
+ closeIframe() {
36748
37115
  this.logger.debug('Iframe result:', this.iframeResult);
36749
37116
  this.iframeService.postCloseMessage(this.iframeResult);
36750
37117
  }
36751
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeCloseDirective, deps: [{ token: IframeService }], target: i0.ɵɵFactoryTarget.Directive }); }
37118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeCloseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
36752
37119
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: IframeCloseDirective, isStandalone: true, selector: "[elderIframeClose]", inputs: { iframeResult: ["elderIframeClose", "iframeResult"] }, host: { listeners: { "click": "onClick($event)" } }, exportAs: ["elderIframeClose"], ngImport: i0 }); }
36753
37120
  }
36754
37121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: IframeCloseDirective, decorators: [{
@@ -36758,7 +37125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
36758
37125
  exportAs: 'elderIframeClose',
36759
37126
  standalone: true,
36760
37127
  }]
36761
- }], ctorParameters: () => [{ type: IframeService }], propDecorators: { iframeResult: [{
37128
+ }], propDecorators: { iframeResult: [{
36762
37129
  type: Input,
36763
37130
  args: ['elderIframeClose']
36764
37131
  }], onClick: [{
@@ -37585,205 +37952,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
37585
37952
  }]
37586
37953
  }] });
37587
37954
 
37588
- class ElderPageExitLockComponent {
37589
- /***************************************************************************
37590
- * *
37591
- * Constructor *
37592
- * *
37593
- **************************************************************************/
37594
- constructor() {
37595
- /***************************************************************************
37596
- * *
37597
- * Fields *
37598
- * *
37599
- **************************************************************************/
37600
- this.lock = input.required(...(ngDevMode ? [{ debugName: "lock" }] : []));
37601
- }
37602
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderPageExitLockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.1", type: ElderPageExitLockComponent, isStandalone: true, selector: "elder-page-exit-lock", inputs: { lock: { classPropertyName: "lock", publicName: "lock", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex layout-row p-xs\">\n <div class=\"layout-col p-xs place-center-start\">\n <mat-icon>lock</mat-icon>\n </div>\n <div class=\"layout-col place-center-start\">\n <span class=\"mat-subtitle-2 noselect\">{{ lock()?.message }}</span>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37604
- }
37605
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderPageExitLockComponent, decorators: [{
37606
- type: Component,
37607
- args: [{ selector: 'elder-page-exit-lock', imports: [MatIcon], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex layout-row p-xs\">\n <div class=\"layout-col p-xs place-center-start\">\n <mat-icon>lock</mat-icon>\n </div>\n <div class=\"layout-col place-center-start\">\n <span class=\"mat-subtitle-2 noselect\">{{ lock()?.message }}</span>\n </div>\n</div>\n" }]
37608
- }], ctorParameters: () => [] });
37609
-
37610
- class ElderPageExitLockOverviewComponent {
37611
- /***************************************************************************
37612
- * *
37613
- * Constructor *
37614
- * *
37615
- **************************************************************************/
37616
- constructor() {
37617
- /***************************************************************************
37618
- * *
37619
- * Fields *
37620
- * *
37621
- **************************************************************************/
37622
- this.locks = input.required(...(ngDevMode ? [{ debugName: "locks" }] : []));
37623
- }
37624
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderPageExitLockOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37625
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: ElderPageExitLockOverviewComponent, isStandalone: true, selector: "elder-page-exit-lock-overview", inputs: { locks: { classPropertyName: "locks", publicName: "locks", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<mat-card appearance=\"raised\" class=\"layout-col full scrollable\">\n <mat-card-content>\n <div>\n @for (lock of locks(); track lock.id) {\n <elder-page-exit-lock [lock]=\"lock\"> </elder-page-exit-lock>\n }\n </div>\n </mat-card-content>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: ElderPageExitLockComponent, selector: "elder-page-exit-lock", inputs: ["lock"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37626
- }
37627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderPageExitLockOverviewComponent, decorators: [{
37628
- type: Component,
37629
- args: [{ selector: 'elder-page-exit-lock-overview', imports: [MatCard, MatCardContent, ElderPageExitLockComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card appearance=\"raised\" class=\"layout-col full scrollable\">\n <mat-card-content>\n <div>\n @for (lock of locks(); track lock.id) {\n <elder-page-exit-lock [lock]=\"lock\"> </elder-page-exit-lock>\n }\n </div>\n </mat-card-content>\n</mat-card>\n" }]
37630
- }], ctorParameters: () => [] });
37631
-
37632
- class PageExitLock {
37633
- constructor(message, lockService) {
37634
- this.message = message;
37635
- this.lockService = lockService;
37636
- this.id = UuidUtil.weakUuid4();
37637
- }
37638
- release() {
37639
- this.lockService.unlock(this);
37640
- }
37641
- }
37642
- class PageExitGuardService {
37643
- constructor(toast) {
37644
- this.toast = toast;
37645
- this.internal = new PageExitGuardServiceInternal(toast);
37646
- }
37647
- get locks$() {
37648
- return this.internal.locks$;
37649
- }
37650
- get isPageExitBlocked$() {
37651
- return this.internal.isPageExitBlocked$;
37652
- }
37653
- lock(message) {
37654
- return this.internal.lock(message);
37655
- }
37656
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: PageExitGuardService, deps: [{ token: ElderToastService }], target: i0.ɵɵFactoryTarget.Injectable }); }
37657
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: PageExitGuardService, providedIn: 'root' }); }
37658
- }
37659
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: PageExitGuardService, decorators: [{
37660
- type: Injectable,
37661
- args: [{
37662
- providedIn: 'root',
37663
- }]
37664
- }], ctorParameters: () => [{ type: ElderToastService }] });
37665
- /***************************************************************************
37666
- * *
37667
- * Internal *
37668
- * *
37669
- **************************************************************************/
37670
- class PageExitGuardServiceInternal {
37671
- /***************************************************************************
37672
- * *
37673
- * Properties *
37674
- * *
37675
- **************************************************************************/
37676
- get locks$() {
37677
- return this._lockMap$.map$.pipe(map((lockMap) => Array.from(lockMap.values())));
37678
- }
37679
- get isPageExitBlocked$() {
37680
- return this._isPageExitBlocked$.asObservable();
37681
- }
37682
- /***************************************************************************
37683
- * *
37684
- * Constructor *
37685
- * *
37686
- **************************************************************************/
37687
- constructor(toast) {
37688
- this.toast = toast;
37689
- this._isPageExitBlocked$ = new BehaviorSubject(false);
37690
- this._lockMap$ = new ReactiveMap();
37691
- this._beforeUnloadHandler = this.preventDefaultAndWarnEvent();
37692
- this._lockMap$.map$.subscribe({
37693
- next: (map) => {
37694
- if (map.size > 0) {
37695
- this.ensureListenerStarted();
37696
- }
37697
- else {
37698
- this.ensureListenerStopped();
37699
- }
37700
- },
37701
- });
37702
- }
37703
- /***************************************************************************
37704
- * *
37705
- * Public methods *
37706
- * *
37707
- **************************************************************************/
37708
- lock(message) {
37709
- const newLock = new PageExitLock(message, this);
37710
- this._lockMap$.set(newLock.id, newLock);
37711
- return this._lockMap$.get(newLock.id);
37712
- }
37713
- unlock(lock) {
37714
- this._lockMap$.delete(lock.id);
37715
- }
37716
- /***************************************************************************
37717
- * *
37718
- * Private methods *
37719
- * *
37720
- **************************************************************************/
37721
- /**
37722
- * starts an event listener that will prevent the user from immediately closing
37723
- * the tab / reloading, if it isn't already running.
37724
- *
37725
- * try to stop the alert service whenever you can to minimize the effect on
37726
- * performance.
37727
- * [more details here](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event#usage_notes)
37728
- *
37729
- */
37730
- ensureListenerStarted() {
37731
- if (!this._isPageExitBlocked$.getValue()) {
37732
- this._isPageExitBlocked$.next(true);
37733
- window.addEventListener('beforeunload', this._beforeUnloadHandler);
37734
- }
37735
- }
37736
- /**
37737
- * removes the event listener, if the listener is running.
37738
- */
37739
- ensureListenerStopped() {
37740
- if (this._isPageExitBlocked$.getValue()) {
37741
- this._isPageExitBlocked$.next(false);
37742
- window.removeEventListener('beforeunload', this._beforeUnloadHandler);
37743
- }
37744
- }
37745
- preventDefaultAndWarnEvent() {
37746
- return (event) => {
37747
- const msgs = Array.from(this._lockMap$.values()).map((lock) => lock.message);
37748
- this.toast.warn('[' + this._lockMap$.size + '] ' + msgs);
37749
- event.preventDefault();
37750
- };
37751
- }
37752
- }
37753
-
37754
- class ElderPageExitLockIndicatorComponent {
37755
- /***************************************************************************
37756
- * *
37757
- * Constructor *
37758
- * *
37759
- **************************************************************************/
37760
- constructor(pageExitGuardService) {
37761
- this.pageExitGuardService = pageExitGuardService;
37762
- this.isPageExitBlocked = toSignal(this.pageExitGuardService.isPageExitBlocked$);
37763
- this.locks = toSignal(this.pageExitGuardService.locks$);
37764
- }
37765
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderPageExitLockIndicatorComponent, deps: [{ token: PageExitGuardService }], target: i0.ɵɵFactoryTarget.Component }); }
37766
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: ElderPageExitLockIndicatorComponent, isStandalone: true, selector: "elder-page-exit-lock-indicator", ngImport: i0, template: "@if (isPageExitBlocked()) {\n <button mat-icon-button [elderOverlayTrigger]=\"overlay\" type=\"button\">\n <mat-icon color=\"accent\">lock_clock</mat-icon>\n </button>\n}\n\n<elder-overlay #overlay=\"elderOverlay\" originX=\"center\" overlayX=\"center\">\n <elder-page-exit-lock-overview [locks]=\"locks()\" class=\"panel\"> </elder-page-exit-lock-overview>\n</elder-overlay>\n", styles: [".panel{width:250px;height:250px;border-radius:var(--elder-border-radius-sm);overflow:hidden;box-shadow:var(--elder-box-shadow-default)}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ElderOverlayModule }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "component", type: ElderPageExitLockOverviewComponent, selector: "elder-page-exit-lock-overview", inputs: ["locks"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37767
- }
37768
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ElderPageExitLockIndicatorComponent, decorators: [{
37769
- type: Component,
37770
- args: [{ selector: 'elder-page-exit-lock-indicator', imports: [MatIconButton, MatIcon, ElderOverlayModule, ElderPageExitLockOverviewComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isPageExitBlocked()) {\n <button mat-icon-button [elderOverlayTrigger]=\"overlay\" type=\"button\">\n <mat-icon color=\"accent\">lock_clock</mat-icon>\n </button>\n}\n\n<elder-overlay #overlay=\"elderOverlay\" originX=\"center\" overlayX=\"center\">\n <elder-page-exit-lock-overview [locks]=\"locks()\" class=\"panel\"> </elder-page-exit-lock-overview>\n</elder-overlay>\n", styles: [".panel{width:250px;height:250px;border-radius:var(--elder-border-radius-sm);overflow:hidden;box-shadow:var(--elder-box-shadow-default)}\n"] }]
37771
- }], ctorParameters: () => [{ type: PageExitGuardService }] });
37772
-
37773
- class PageExitGuardModule {
37774
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: PageExitGuardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
37775
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.1", ngImport: i0, type: PageExitGuardModule, imports: [CommonModule, ElderPageExitLockIndicatorComponent], exports: [ElderPageExitLockIndicatorComponent] }); }
37776
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: PageExitGuardModule, imports: [CommonModule, ElderPageExitLockIndicatorComponent] }); }
37777
- }
37778
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: PageExitGuardModule, decorators: [{
37779
- type: NgModule,
37780
- args: [{
37781
- declarations: [],
37782
- imports: [CommonModule, ElderPageExitLockIndicatorComponent],
37783
- exports: [ElderPageExitLockIndicatorComponent],
37784
- }]
37785
- }] });
37786
-
37787
37955
  class ElderPaneComponent {
37788
37956
  constructor() {
37789
37957
  this.class = '';
@@ -38887,5 +39055,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
38887
39055
  * Generated bundle index. Do not edit.
38888
39056
  */
38889
39057
 
38890
- export { ActivationEventSource, ActivationModel, Arrays, AuditedEntity, AutoStartSpec, Batcher, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, CommonValidationMessageStrategy, ComparatorBuilder, CompositeSort, ConfirmDialogConfig, ContinuableListing, CountryPhoneFormatService, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, CuratedDataSource, CuratedListDataSource, CuratedPagedDataSource, Currency, CurrencyCode, CurrencyFormatUtil, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, CustomMatcherSpec, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextRange, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSelectionController, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceEntityPatch, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewActivationController, DataViewDndControllerService, DataViewDndGroupControllerService, DataViewDndModelUtil, DataViewDragEnteredEvent, DataViewDragExitedEvent, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewInteractionControllerDirective, DataViewItemDropEvent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DomUtil, DrawerOutletBinding, DurationBucket, DurationFormat, DurationFormatUtil, DynamicValidationMessageStrategy, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutoSelectSuggestFirstDirective, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeDirective, ElderBasicPaneLayoutComponent, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCenterCellDirective, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsIncludeExcludeDirective, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderCompositeSortComponent, ElderCompositeSortDcDirective, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderContinuatorComponent, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataActivationDirective, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewDndDirective, ElderDataViewDndGroupDirective, ElderDataViewItemDragDirective, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFilterChipTemplateComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGridActivationDirective, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderIntervalPickerBindingDirective, ElderIntervalPickerComponent, ElderIntervalPickerToggleComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalDndSupportDirective, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectAllInitialDirective, ElderMultiSelectBase, ElderMultiSelectChipOptionsComponent, ElderMultiSelectChipsComponent, ElderMultiSelectChipsOptionsDirective, ElderMultiSelectFormField, ElderMultiTranslateHttpLoader, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayRef, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPageExitLockIndicatorComponent, ElderPaneActionsComponent, ElderPaneComponent, ElderPaneContentComponent, ElderPaneHeaderComponent, ElderPaneSubtitleComponent, ElderPaneTitleComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchIncludeExcludeDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSearchUrlDirective, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectOptionComponent, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSinglePaneWrapperComponent, ElderSingleSortComponent, ElderSingleStateCheckboxDirective, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSuggestionPanelComponent, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableDropListConnectorDirective, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableNavigationBarDirective, ElderTableProviders, ElderTableRootDirective, ElderTableSelectionCellComponent, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTileComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToggleTextInputDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitiesChangeEvent, EntityDelta, EntityIdUtil, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FallbackValidationMessageStrategy, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IncludeExcludeSelectionModel, IncludeExcludeState, IncludeExcludeValue, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalFormatUtil, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalDataFilter, LocalListDataSource, LocalPagedDataSource, Locale, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, ModifierKeyService, ModifierKeyState, MultiModelBaseComponent, NamedColorDirective, NamedColorSelectDirective, NamedColorSelectValueComponent, NextNumberUtil, ObjectFieldMatcher, ObjectPathResolver, Objects, OnlineStatus, Page, PageExitGuardModule, PageExitGuardService, PageExitLock, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, PhoneFormatService, PhonePipe, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveEventSourceState, ReactiveFetchEventSource, ReactiveFetchEventSourceService, ReactiveMap, ReactiveSSeMessage, RefreshingEntity, ResizeObserverDirective, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, RoutedTabActivationFailed, SearchInputState, SelectChipSpecUtil, SelectOptionChipSpecUtil, SelectionChangedEvent, SelectionEventSource, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, SimpleSearchInput, Sort, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TargetValue, TemplateCompositeControl, TemplatedSelectionDialogComponent, TemporalPlainDateInterval, TemporalUtil, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UnreachableCaseError, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueChangeEvent, ValueWrapper, ViewDropModelUpdateInstruction, ViewProviders, WebLocalStorage, WebSessionStorage, WebappDomainFragmentSpec, WebappDomainSpec, WebappDomainSpecService, WebappDomainSwitcherDirective, WebappUrlFragmentSwitcherConfig, WeightPipe, alphaNumStringComparator, booleanTransformFn, buildFormIntegrationProviders, coerceInterval, coerceIntervalIsoStr, createDataOptionsProvider, createSelectionModel, elderChipColorLevels, elderChipColorStates, elderNamedColorRoles, elderNamedColorToken, elderNamedColors, existingOrNewElderTableModel, initSearchUrlService, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isLocalListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
39058
+ export { ActivationEventSource, ActivationModel, Arrays, AuditedEntity, AutoStartSpec, Batcher, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, CommonValidationMessageStrategy, ComparatorBuilder, CompositeSort, ConfirmDialogConfig, ContinuableListing, CountryPhoneFormatService, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, CuratedDataSource, CuratedListDataSource, CuratedPagedDataSource, Currency, CurrencyCode, CurrencyFormatUtil, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, CustomMatcherSpec, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextRange, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSelectionController, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceEntityPatch, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewActivationController, DataViewDndControllerService, DataViewDndGroupControllerService, DataViewDndModelUtil, DataViewDragEnteredEvent, DataViewDragExitedEvent, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewInteractionControllerDirective, DataViewItemDropEvent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DomUtil, DrawerOutletBinding, DurationBucket, DurationFormat, DurationFormatUtil, DynamicValidationMessageStrategy, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutoSelectSuggestFirstDirective, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeDirective, ElderBasicPaneLayoutComponent, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCenterCellDirective, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsIncludeExcludeDirective, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderCompositeSortComponent, ElderCompositeSortDcDirective, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderContinuatorComponent, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataActivationDirective, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewDndDirective, ElderDataViewDndGroupDirective, ElderDataViewItemDragDirective, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFilterChipTemplateComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGridActivationDirective, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderIntervalPickerBindingDirective, ElderIntervalPickerComponent, ElderIntervalPickerToggleComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalDndSupportDirective, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderLock, ElderLockContext, ElderLockContextDirective, ElderLockManagerService, ElderLockWarningService, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectAllInitialDirective, ElderMultiSelectBase, ElderMultiSelectChipOptionsComponent, ElderMultiSelectChipsComponent, ElderMultiSelectChipsOptionsDirective, ElderMultiSelectFormField, ElderMultiTranslateHttpLoader, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayRef, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPaneActionsComponent, ElderPaneComponent, ElderPaneContentComponent, ElderPaneHeaderComponent, ElderPaneSubtitleComponent, ElderPaneTitleComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchIncludeExcludeDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSearchUrlDirective, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectOptionComponent, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSinglePaneWrapperComponent, ElderSingleSortComponent, ElderSingleStateCheckboxDirective, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSuggestionPanelComponent, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableDropListConnectorDirective, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableNavigationBarDirective, ElderTableProviders, ElderTableRootDirective, ElderTableSelectionCellComponent, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTileComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToggleTextInputDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitiesChangeEvent, EntityDelta, EntityIdUtil, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FallbackValidationMessageStrategy, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IncludeExcludeSelectionModel, IncludeExcludeState, IncludeExcludeValue, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalFormatUtil, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalDataFilter, LocalListDataSource, LocalPagedDataSource, Locale, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, ModifierKeyService, ModifierKeyState, MultiModelBaseComponent, NamedColorDirective, NamedColorSelectDirective, NamedColorSelectValueComponent, NextNumberUtil, ObjectFieldMatcher, ObjectPathResolver, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, PhoneFormatService, PhonePipe, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveEventSourceState, ReactiveFetchEventSource, ReactiveFetchEventSourceService, ReactiveMap, ReactiveSSeMessage, RefreshingEntity, ResizeObserverDirective, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, RoutedTabActivationFailed, SearchInputState, SelectChipSpecUtil, SelectOptionChipSpecUtil, SelectionChangedEvent, SelectionEventSource, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, SimpleSearchInput, Sort, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TargetValue, TemplateCompositeControl, TemplatedSelectionDialogComponent, TemporalPlainDateInterval, TemporalUtil, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UnreachableCaseError, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueChangeEvent, ValueWrapper, ViewDropModelUpdateInstruction, ViewProviders, WebLocalStorage, WebSessionStorage, WebappDomainFragmentSpec, WebappDomainSpec, WebappDomainSpecService, WebappDomainSwitcherDirective, WebappUrlFragmentSwitcherConfig, WeightPipe, alphaNumStringComparator, booleanTransformFn, buildFormIntegrationProviders, coerceInterval, coerceIntervalIsoStr, createDataOptionsProvider, createSelectionModel, elderChipColorLevels, elderChipColorStates, elderNamedColorRoles, elderNamedColorToken, elderNamedColors, existingOrNewElderTableModel, initSearchUrlService, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isLocalListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
38891
39059
  //# sourceMappingURL=elderbyte-ngx-starter.mjs.map