@newheap/platform-common 1.3.1 → 1.5.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,12 +1,12 @@
1
1
  import * as i2$1 from '@angular/common/http';
2
- import { HttpErrorResponse, HttpParams, HttpClient, HttpHeaders, HttpResponse, HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi, withFetch } from '@angular/common/http';
2
+ import { HttpErrorResponse, HttpParams, HttpContextToken, HttpClient, HttpHeaders, HttpContext, HttpResponse, HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi, withFetch } from '@angular/common/http';
3
3
  import * as i1$4 from '@angular/forms';
4
4
  import { UntypedFormGroup, UntypedFormArray, AbstractControl, NG_VALUE_ACCESSOR, UntypedFormControl, NgForm, FormsModule } from '@angular/forms';
5
5
  import * as i0 from '@angular/core';
6
6
  import { Injectable, PLATFORM_ID, REQUEST_CONTEXT, Inject, Optional, inject, NgZone, forwardRef, InjectionToken, afterNextRender, makeStateKey, Directive, input, Input, Component, viewChild, output, HostListener, EventEmitter, Pipe, HostBinding, ChangeDetectionStrategy, Output, ViewChild, ViewEncapsulation, model, ErrorHandler, provideAppInitializer, SkipSelf, NgModule } from '@angular/core';
7
7
  import * as i1$3 from '@angular/common';
8
8
  import { isPlatformServer, DOCUMENT, isPlatformBrowser, DatePipe, CommonModule } from '@angular/common';
9
- import { BehaviorSubject, lastValueFrom, tap, filter, map, Subject, share, switchMap, EMPTY, timer, exhaustMap, from, Subscription, defer, finalize as finalize$1, catchError, of, Observable } from 'rxjs';
9
+ import { BehaviorSubject, lastValueFrom, tap, catchError, throwError, filter, map, Subject, share, switchMap, EMPTY, timer, exhaustMap, from, Subscription, defer, finalize as finalize$1, of, Observable } from 'rxjs';
10
10
  import * as i1 from 'ngx-cookie-service';
11
11
  import { DateTime } from 'luxon';
12
12
  import { Base64 } from 'js-base64';
@@ -33,6 +33,32 @@ class EndpointsAuthenticationNhCommonModuleConfig {
33
33
  this.impersonate = '/authentication/impersonate';
34
34
  this.revertImpersonate = '/authentication/ImpersonateRevert';
35
35
  this.accountInformation = '/account';
36
+ this.twoFactorVerify = '/authentication/two-factor/verify';
37
+ this.twoFactorStatus = '/account/two-factor';
38
+ this.twoFactorAuthenticator = '/account/two-factor/authenticator';
39
+ this.twoFactorAuthenticatorConfirm = '/account/two-factor/authenticator/confirm';
40
+ this.twoFactorRecoveryCodes = '/account/two-factor/recovery-codes';
41
+ this.twoFactorDisable = '/account/two-factor/disable';
42
+ this.twoFactorForgetDevices = '/account/two-factor/forget-devices';
43
+ this.twoFactorEmailSetup = '/account/two-factor/email';
44
+ this.twoFactorEmailConfirm = '/account/two-factor/email/confirm';
45
+ this.twoFactorEmail = '/authentication/two-factor/email';
46
+ this.twoFactorPasskeyOptions = '/authentication/two-factor/passkey/options';
47
+ this.twoFactorPasskey = '/authentication/two-factor/passkey';
48
+ this.twoFactorEnrollmentAuthenticator = '/authentication/two-factor/enrollment/authenticator';
49
+ this.twoFactorEnrollmentAuthenticatorConfirm = '/authentication/two-factor/enrollment/authenticator/confirm';
50
+ this.twoFactorEnrollmentEmail = '/authentication/two-factor/enrollment/email';
51
+ this.twoFactorEnrollmentEmailConfirm = '/authentication/two-factor/enrollment/email/confirm';
52
+ this.twoFactorEnrollmentPasskeyOptions = '/authentication/two-factor/enrollment/passkey/options';
53
+ this.twoFactorEnrollmentPasskey = '/authentication/two-factor/enrollment/passkey';
54
+ /** Administration route; `{userId}` is replaced with the user ID. */
55
+ this.twoFactorUserReset = '/authentication/two-factor/users/{userId}/reset';
56
+ this.twoFactorEnrollmentReminders = '/authentication/two-factor/operations/enrollment-reminders';
57
+ this.twoFactorSessionRevocation = '/authentication/two-factor/operations/session-revocation';
58
+ this.passkeySignInOptions = '/authentication/passkey/options';
59
+ this.passkeySignIn = '/authentication/passkey/login';
60
+ this.passkeys = '/account/passkeys';
61
+ this.passkeyRegistrationOptions = '/account/passkeys/options';
36
62
  Object.assign(this, init);
37
63
  }
38
64
  }
@@ -43,6 +69,11 @@ class AuthenticationNhCommonModuleConfig {
43
69
  this.additionalDivisionClaimPermissionTypes = [];
44
70
  this.endpoints = new EndpointsAuthenticationNhCommonModuleConfig();
45
71
  this.loginPath = '/';
72
+ /**
73
+ * Ends the local session when the API answers 401 and the account endpoint confirms that the
74
+ * server no longer accepts the session, for example after a password change on another device.
75
+ */
76
+ this.endSessionRejectedByServer = true;
46
77
  Object.assign(this, init);
47
78
  }
48
79
  }
@@ -543,6 +574,8 @@ class AuthSessionExpirationInformation {
543
574
  this.isAuthenticated = false;
544
575
  this.expiresWithin15MinutesOrExpired = false;
545
576
  this.displayMinutesSecondsUntilExpiration = '00:00';
577
+ /** The server rejected the session before it expired; it stays set until the next sign-in. */
578
+ this.rejectedByServer = false;
546
579
  Object.assign(this, init);
547
580
  }
548
581
  }
@@ -617,6 +650,174 @@ class RevertImpersonateAuthenticateModel {
617
650
  Object.assign(this, init);
618
651
  }
619
652
  }
653
+ /**
654
+ * Second-factor methods a user can present after the first factor succeeded.
655
+ */
656
+ const NhTwoFactorMethods = {
657
+ authenticator: 'authenticator',
658
+ recoveryCode: 'recovery-code',
659
+ email: 'email',
660
+ passkey: 'passkey'
661
+ };
662
+ /**
663
+ * Safe failure codes returned by the two-factor endpoints. Each error item uses the code as
664
+ * its name and `nh-two-factor.<suffix>` as its translation key.
665
+ */
666
+ var NhTwoFactorFailureCodes;
667
+ (function (NhTwoFactorFailureCodes) {
668
+ NhTwoFactorFailureCodes["Required"] = "two-factor-required";
669
+ NhTwoFactorFailureCodes["EnrollmentRequired"] = "two-factor-enrollment-required";
670
+ NhTwoFactorFailureCodes["InvalidCode"] = "two-factor-invalid-code";
671
+ NhTwoFactorFailureCodes["ChallengeExpired"] = "two-factor-challenge-expired";
672
+ NhTwoFactorFailureCodes["LockedOut"] = "two-factor-locked-out";
673
+ NhTwoFactorFailureCodes["MethodNotAllowed"] = "two-factor-method-not-allowed";
674
+ NhTwoFactorFailureCodes["NotEnabled"] = "two-factor-not-enabled";
675
+ NhTwoFactorFailureCodes["AlreadyEnabled"] = "two-factor-already-enabled";
676
+ NhTwoFactorFailureCodes["SetupNotStarted"] = "two-factor-setup-not-started";
677
+ NhTwoFactorFailureCodes["ReauthenticationRequired"] = "two-factor-reauthentication-required";
678
+ NhTwoFactorFailureCodes["ReauthenticationFailed"] = "two-factor-reauthentication-failed";
679
+ NhTwoFactorFailureCodes["RequiredByPolicy"] = "two-factor-required-by-policy";
680
+ NhTwoFactorFailureCodes["NotAllowedWhileImpersonating"] = "two-factor-not-allowed-while-impersonating";
681
+ NhTwoFactorFailureCodes["ConfigurationInvalid"] = "two-factor-configuration-invalid";
682
+ NhTwoFactorFailureCodes["EmailCooldown"] = "two-factor-email-cooldown";
683
+ NhTwoFactorFailureCodes["EmailUnavailable"] = "two-factor-email-unavailable";
684
+ NhTwoFactorFailureCodes["UserNotFound"] = "two-factor-user-not-found";
685
+ NhTwoFactorFailureCodes["PasskeyInvalid"] = "two-factor-passkey-invalid";
686
+ NhTwoFactorFailureCodes["PasskeyNotFound"] = "two-factor-passkey-not-found";
687
+ /** The browser does not support passkeys or the user cancelled the passkey prompt. */
688
+ NhTwoFactorFailureCodes["PasskeyUnavailable"] = "two-factor-passkey-unavailable";
689
+ })(NhTwoFactorFailureCodes || (NhTwoFactorFailureCodes = {}));
690
+ /**
691
+ * Status values of a pending authentication step.
692
+ */
693
+ const NhAuthenticationStepStatuses = {
694
+ twoFactorRequired: 'two-factor-required',
695
+ enrollmentRequired: 'enrollment-required'
696
+ };
697
+ /**
698
+ * A pending sign-in step. With status `two-factor-required` the user presents a second
699
+ * factor; with `enrollment-required` the policy requires the user to enroll one first, and
700
+ * `challengeToken` is the enrollment token.
701
+ */
702
+ class NhTwoFactorChallenge {
703
+ constructor(init) {
704
+ this.status = NhAuthenticationStepStatuses.twoFactorRequired;
705
+ this.challengeToken = '';
706
+ this.expiresAt = '';
707
+ this.methods = [];
708
+ /** Whether completing the challenge can remember this device for later sign-ins. */
709
+ this.rememberDeviceAvailable = false;
710
+ Object.assign(this, init);
711
+ }
712
+ }
713
+ /**
714
+ * Outcome of an interactive sign-in step: the stored authorization, a second-factor
715
+ * challenge or a required enrollment.
716
+ */
717
+ class NhAuthenticationStep {
718
+ constructor(init) {
719
+ this.status = 'authenticated';
720
+ Object.assign(this, init);
721
+ }
722
+ }
723
+ class NhTwoFactorVerifyModel {
724
+ constructor(init) {
725
+ this.challengeToken = '';
726
+ this.method = NhTwoFactorMethods.authenticator;
727
+ this.code = '';
728
+ Object.assign(this, init);
729
+ }
730
+ }
731
+ /**
732
+ * Proof that the signed-in user is present before a sensitive change: the current password
733
+ * or a valid second-factor code.
734
+ */
735
+ class NhTwoFactorReauthentication {
736
+ constructor(init) {
737
+ Object.assign(this, init);
738
+ }
739
+ }
740
+ class NhTwoFactorStatus {
741
+ constructor(init) {
742
+ this.enabled = false;
743
+ this.required = false;
744
+ this.methods = [];
745
+ this.availableMethods = [];
746
+ this.recoveryCodesLeft = 0;
747
+ this.authenticatorSetupPending = false;
748
+ this.emailSetupPending = false;
749
+ this.rememberDeviceAvailable = false;
750
+ this.passkeyCount = 0;
751
+ Object.assign(this, init);
752
+ }
753
+ }
754
+ /**
755
+ * Pending authenticator enrollment. `qrCodeDataUri` is a PNG data URI rendered by the server.
756
+ */
757
+ class NhAuthenticatorSetup {
758
+ constructor(init) {
759
+ this.sharedKey = '';
760
+ this.authenticatorUri = '';
761
+ Object.assign(this, init);
762
+ }
763
+ }
764
+ /**
765
+ * Result of a two-factor change. Recovery codes are returned once. When the change ended
766
+ * every session, the service has already stored the renewed session for this device.
767
+ */
768
+ class NhTwoFactorChange {
769
+ constructor(init) {
770
+ this.sessionRenewed = false;
771
+ Object.assign(this, init);
772
+ }
773
+ }
774
+ /**
775
+ * Confirmation that the server e-mailed a code.
776
+ */
777
+ class NhTwoFactorEmailCodeSent {
778
+ constructor(init) {
779
+ this.expiresAt = '';
780
+ /** When another code can be requested. */
781
+ this.resendAvailableAt = '';
782
+ Object.assign(this, init);
783
+ }
784
+ }
785
+ /**
786
+ * Result of an enrollment that the policy required during sign-in. The session is already
787
+ * stored; the recovery codes are returned once.
788
+ */
789
+ class NhTwoFactorEnrollmentResult {
790
+ constructor(init) {
791
+ Object.assign(this, init);
792
+ }
793
+ }
794
+ /**
795
+ * WebAuthn options from the server for one passkey ceremony. `options` is the JSON form of
796
+ * the creation or request options; `ceremonyToken` goes back with the credential.
797
+ */
798
+ class NhPasskeyOptions {
799
+ constructor(init) {
800
+ this.options = {};
801
+ this.ceremonyToken = '';
802
+ this.expiresAt = '';
803
+ Object.assign(this, init);
804
+ }
805
+ }
806
+ /**
807
+ * A registered passkey. The public key is never returned.
808
+ */
809
+ class NhPasskey {
810
+ constructor(init) {
811
+ /** Credential ID, base64url encoded. */
812
+ this.id = '';
813
+ this.name = '';
814
+ this.createdAt = '';
815
+ /** Whether a passkey provider, such as a password manager, syncs the passkey. */
816
+ this.isBackedUp = false;
817
+ this.transports = [];
818
+ Object.assign(this, init);
819
+ }
820
+ }
620
821
 
621
822
  class NhUserNotificationCollectionHttpRequestOptions extends CollectionHttpRequestOptions {
622
823
  constructor(init) {
@@ -1045,10 +1246,10 @@ class NhEncodeHttpParamsInterceptor {
1045
1246
  const params = new HttpParams({ encoder: new CustomEncoder(), fromString: req.params.toString() });
1046
1247
  return next.handle(req.clone({ params }));
1047
1248
  }
1048
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhEncodeHttpParamsInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1049
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhEncodeHttpParamsInterceptor }); }
1249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhEncodeHttpParamsInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1250
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhEncodeHttpParamsInterceptor }); }
1050
1251
  }
1051
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhEncodeHttpParamsInterceptor, decorators: [{
1252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhEncodeHttpParamsInterceptor, decorators: [{
1052
1253
  type: Injectable
1053
1254
  }] });
1054
1255
  class CustomEncoder {
@@ -2322,10 +2523,10 @@ class NhCookieService {
2322
2523
  }
2323
2524
  }
2324
2525
  }
2325
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCookieService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }, { token: i1.CookieService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2326
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCookieService }); }
2526
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCookieService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }, { token: i1.CookieService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2527
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCookieService }); }
2327
2528
  }
2328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCookieService, decorators: [{
2529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCookieService, decorators: [{
2329
2530
  type: Injectable
2330
2531
  }], ctorParameters: () => [{ type: Document, decorators: [{
2331
2532
  type: Inject,
@@ -2340,18 +2541,146 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImpo
2340
2541
  args: [REQUEST_CONTEXT]
2341
2542
  }] }, { type: i1.CookieService }] });
2342
2543
 
2544
+ /**
2545
+ * Runs WebAuthn ceremonies in the browser. The server returns the options in their JSON form
2546
+ * and expects the credential in its JSON form; this client converts both, with a fallback for
2547
+ * browsers without `PublicKeyCredential.parseCreationOptionsFromJSON` and `toJSON()`.
2548
+ */
2549
+ class NhPasskeyClient {
2550
+ constructor() {
2551
+ this.platformId = inject(PLATFORM_ID);
2552
+ }
2553
+ /**
2554
+ * Whether the browser supports passkeys. Always false during server-side rendering.
2555
+ */
2556
+ isSupported() {
2557
+ return isPlatformBrowser(this.platformId)
2558
+ && typeof window !== 'undefined'
2559
+ && typeof window.PublicKeyCredential !== 'undefined'
2560
+ && !!navigator.credentials;
2561
+ }
2562
+ /**
2563
+ * Creates a passkey for WebAuthn creation options and returns the credential JSON.
2564
+ * Rejects when the user cancels the prompt or the browser refuses the request.
2565
+ */
2566
+ async create(options) {
2567
+ this.ensureSupported();
2568
+ const parse = PublicKeyCredential.parseCreationOptionsFromJSON;
2569
+ const publicKey = typeof parse === 'function'
2570
+ ? parse.call(PublicKeyCredential, options)
2571
+ : this.creationOptionsFromJSON(options);
2572
+ const credential = await navigator.credentials.create({ publicKey: publicKey });
2573
+ return this.credentialToJSON(this.requireCredential(credential));
2574
+ }
2575
+ /**
2576
+ * Signs WebAuthn request options with a passkey and returns the credential JSON.
2577
+ * Rejects when the user cancels the prompt or the browser refuses the request.
2578
+ */
2579
+ async get(options) {
2580
+ this.ensureSupported();
2581
+ const parse = PublicKeyCredential.parseRequestOptionsFromJSON;
2582
+ const publicKey = typeof parse === 'function'
2583
+ ? parse.call(PublicKeyCredential, options)
2584
+ : this.requestOptionsFromJSON(options);
2585
+ const credential = await navigator.credentials.get({ publicKey: publicKey });
2586
+ return this.credentialToJSON(this.requireCredential(credential));
2587
+ }
2588
+ ensureSupported() {
2589
+ if (!this.isSupported()) {
2590
+ throw new Error('Passkeys are not supported in this browser.');
2591
+ }
2592
+ }
2593
+ requireCredential(credential) {
2594
+ if (!credential || credential.type !== 'public-key') {
2595
+ throw new Error('No passkey was selected.');
2596
+ }
2597
+ return credential;
2598
+ }
2599
+ creationOptionsFromJSON(json) {
2600
+ return {
2601
+ ...json,
2602
+ challenge: NhPasskeyClient.fromBase64Url(json.challenge),
2603
+ user: { ...json.user, id: NhPasskeyClient.fromBase64Url(json.user.id) },
2604
+ excludeCredentials: (json.excludeCredentials ?? []).map((descriptor) => ({
2605
+ ...descriptor,
2606
+ id: NhPasskeyClient.fromBase64Url(descriptor.id)
2607
+ }))
2608
+ };
2609
+ }
2610
+ requestOptionsFromJSON(json) {
2611
+ return {
2612
+ ...json,
2613
+ challenge: NhPasskeyClient.fromBase64Url(json.challenge),
2614
+ allowCredentials: (json.allowCredentials ?? []).map((descriptor) => ({
2615
+ ...descriptor,
2616
+ id: NhPasskeyClient.fromBase64Url(descriptor.id)
2617
+ }))
2618
+ };
2619
+ }
2620
+ credentialToJSON(credential) {
2621
+ const toJSON = credential.toJSON;
2622
+ if (typeof toJSON === 'function') {
2623
+ return toJSON.call(credential);
2624
+ }
2625
+ const response = credential.response;
2626
+ const json = {
2627
+ id: credential.id,
2628
+ rawId: NhPasskeyClient.toBase64Url(credential.rawId),
2629
+ type: credential.type,
2630
+ authenticatorAttachment: credential.authenticatorAttachment ?? undefined,
2631
+ clientExtensionResults: credential.getClientExtensionResults?.() ?? {},
2632
+ response: {
2633
+ clientDataJSON: NhPasskeyClient.toBase64Url(response.clientDataJSON)
2634
+ }
2635
+ };
2636
+ if (response.attestationObject) {
2637
+ json.response.attestationObject = NhPasskeyClient.toBase64Url(response.attestationObject);
2638
+ json.response.transports = typeof response.getTransports === 'function' ? response.getTransports() : [];
2639
+ }
2640
+ if (response.authenticatorData) {
2641
+ json.response.authenticatorData = NhPasskeyClient.toBase64Url(response.authenticatorData);
2642
+ json.response.signature = NhPasskeyClient.toBase64Url(response.signature);
2643
+ json.response.userHandle = response.userHandle ? NhPasskeyClient.toBase64Url(response.userHandle) : null;
2644
+ }
2645
+ return json;
2646
+ }
2647
+ static fromBase64Url(value) {
2648
+ const bytes = Base64.toUint8Array(value);
2649
+ return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
2650
+ }
2651
+ static toBase64Url(buffer) {
2652
+ return Base64.fromUint8Array(new Uint8Array(buffer), true);
2653
+ }
2654
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPasskeyClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2655
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPasskeyClient, providedIn: 'root' }); }
2656
+ }
2657
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPasskeyClient, decorators: [{
2658
+ type: Injectable,
2659
+ args: [{ providedIn: 'root' }]
2660
+ }] });
2661
+
2662
+ /** Marks a request whose 401 must not start a server session check, such as the check itself. */
2663
+ const NH_SKIP_SERVER_SESSION_CHECK = new HttpContextToken(() => false);
2343
2664
  class BaseNhAuthService {
2665
+ static { this.pendingTwoFactorChallengeStorageKey = 'nh-two-factor-challenge'; }
2666
+ static { this.externalTwoFactorChallengePrefix = 'nh-two-factor='; }
2667
+ static { this.rememberDeviceStorageKey = 'nh-two-factor-device'; }
2668
+ static { this.serverSessionConfirmationMilliseconds = 30_000; }
2344
2669
  constructor() {
2345
2670
  this.authorization = undefined;
2671
+ this.pendingTwoFactorChallenge = undefined;
2346
2672
  this.authSession = undefined;
2347
2673
  this.authSubject = new BehaviorSubject(this.getAuthorization());
2348
2674
  this._sessionExpirationInformation = new BehaviorSubject(this.getSessionExpirationInformation());
2349
2675
  this.sessionExpirationInformationChanged = this._sessionExpirationInformation.asObservable();
2676
+ this.serverSessionConfirmedAt = 0;
2677
+ this.sessionRejectedByServer = false;
2350
2678
  this.zone = inject(NgZone);
2351
2679
  this.moduleConfig = inject(NhCommonModuleConfig);
2352
2680
  this.httpClient = inject(HttpClient);
2353
2681
  this.platformId = inject(PLATFORM_ID);
2354
2682
  this.requestContext = inject(REQUEST_CONTEXT, { optional: true });
2683
+ this.passkeyClient = inject(NhPasskeyClient);
2355
2684
  this.authReady = new Promise(resolve => {
2356
2685
  this.onReady = resolve;
2357
2686
  });
@@ -2408,6 +2737,7 @@ class BaseNhAuthService {
2408
2737
  else {
2409
2738
  result.expiresWithin15MinutesOrExpired = true;
2410
2739
  result.displayMinutesSecondsUntilExpiration = `00:00`;
2740
+ result.rejectedByServer = this.sessionRejectedByServer;
2411
2741
  }
2412
2742
  return result;
2413
2743
  }
@@ -2428,6 +2758,8 @@ class BaseNhAuthService {
2428
2758
  setAuthorization(auth, noEvent = false) {
2429
2759
  localStorage.setItem('at', Base64.encode(JSON.stringify(auth)));
2430
2760
  this.authorization = auth;
2761
+ this.sessionRejectedByServer = false;
2762
+ this.serverSessionConfirmedAt = 0;
2431
2763
  if (!noEvent) {
2432
2764
  this.authSubject.next(this.authorization);
2433
2765
  }
@@ -2590,23 +2922,44 @@ class BaseNhAuthService {
2590
2922
  withCredentials: true
2591
2923
  }).taskResultLastValueFrom();
2592
2924
  }
2925
+ /**
2926
+ * Signs in with username and password and stores the complete session.
2927
+ *
2928
+ * When the server requires a second factor this method fails with
2929
+ * `NhTwoFactorFailureCodes.Required` and stores nothing. Use `authenticateInteractive`
2930
+ * to receive the challenge, or read it with `getPendingTwoFactorChallenge()`.
2931
+ */
2593
2932
  async authenticate(model, loginAsUser = false) {
2594
2933
  const result = new TaskResult();
2595
- let httpParams = new HttpParams();
2596
- if (httpParams.get('language') === null) {
2597
- httpParams = httpParams.set('language', this.moduleConfig.language);
2934
+ const stepResult = await this.authenticateInteractive(model);
2935
+ if (!stepResult.isSuccess) {
2936
+ stepResult.copyTo(result);
2937
+ return result;
2938
+ }
2939
+ if (stepResult.data?.status === 'two-factor-required') {
2940
+ return result.withError(NhTwoFactorFailureCodes.Required, 'nh-two-factor.required');
2941
+ }
2942
+ if (stepResult.data?.status === 'enrollment-required') {
2943
+ return result.withError(NhTwoFactorFailureCodes.EnrollmentRequired, 'nh-two-factor.enrollment-required');
2598
2944
  }
2945
+ result.data = stepResult.data?.authorization;
2946
+ return result;
2947
+ }
2948
+ /**
2949
+ * Signs in with username and password. Returns the stored authorization, the
2950
+ * second-factor challenge or the required enrollment. A pending step is never stored as
2951
+ * an authorization.
2952
+ */
2953
+ async authenticateInteractive(model) {
2954
+ const result = new TaskResult();
2599
2955
  model.realm = this.moduleConfig.authenticationRealm;
2956
+ model.rememberDeviceToken = model.rememberDeviceToken ?? this.getRememberDeviceToken();
2600
2957
  const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + this.moduleConfig.authentication.endpoints.login, model, {
2601
- params: httpParams,
2958
+ params: this.languageParams(),
2602
2959
  withCredentials: true
2603
2960
  });
2604
2961
  try {
2605
- result.data = await lastValueFrom(request$);
2606
- if (result.isSuccess) {
2607
- result.data.realm = this.moduleConfig.authenticationRealm;
2608
- }
2609
- this.setAuthorization(result.data);
2962
+ result.data = this.completeAuthenticationStep(await lastValueFrom(request$));
2610
2963
  }
2611
2964
  catch (ex) {
2612
2965
  if (this.isAuthenticated()) {
@@ -2617,6 +2970,523 @@ class BaseNhAuthService {
2617
2970
  }
2618
2971
  return result;
2619
2972
  }
2973
+ /**
2974
+ * Completes a second-factor challenge and stores the session.
2975
+ */
2976
+ async verifyTwoFactor(model) {
2977
+ const result = new TaskResult();
2978
+ const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + this.twoFactorEndpoints().twoFactorVerify, model, {
2979
+ params: this.languageParams(),
2980
+ withCredentials: true
2981
+ });
2982
+ try {
2983
+ result.data = this.completeAuthenticationStep(await lastValueFrom(request$)).authorization;
2984
+ }
2985
+ catch (ex) {
2986
+ this.pendingStepFailed(ex).copyTo(result);
2987
+ }
2988
+ return result;
2989
+ }
2990
+ /**
2991
+ * E-mails a sign-in code for the pending challenge when the user enrolled the e-mail factor.
2992
+ */
2993
+ sendTwoFactorEmailCode(challengeToken) {
2994
+ return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEmail), { challengeToken: challengeToken }, this.twoFactorStepRequestOptions()), response => new NhTwoFactorEmailCodeSent(response));
2995
+ }
2996
+ /**
2997
+ * Whether this browser can use passkeys.
2998
+ */
2999
+ isPasskeySupported() {
3000
+ return this.passkeyClient.isSupported();
3001
+ }
3002
+ /**
3003
+ * Completes the pending challenge with a passkey and stores the session.
3004
+ */
3005
+ async verifyTwoFactorWithPasskey(challengeToken, rememberDevice = false) {
3006
+ const result = new TaskResult();
3007
+ const endpoints = this.twoFactorEndpoints();
3008
+ const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.twoFactorPasskeyOptions), { challengeToken: challengeToken }, this.twoFactorStepRequestOptions()), response => new NhPasskeyOptions(response));
3009
+ if (!options.isSuccess) {
3010
+ options.copyTo(result);
3011
+ return result;
3012
+ }
3013
+ const credential = await this.runPasskeyCeremony(() => this.passkeyClient.get(options.data.options));
3014
+ if (!credential.isSuccess) {
3015
+ credential.copyTo(result);
3016
+ return result;
3017
+ }
3018
+ const request$ = this.httpClient.post(this.twoFactorUrl(endpoints.twoFactorPasskey), {
3019
+ challengeToken: challengeToken,
3020
+ ceremonyToken: options.data.ceremonyToken,
3021
+ credential: credential.data,
3022
+ rememberDevice: rememberDevice
3023
+ }, this.twoFactorStepRequestOptions());
3024
+ try {
3025
+ result.data = this.completeAuthenticationStep(await lastValueFrom(request$)).authorization;
3026
+ }
3027
+ catch (ex) {
3028
+ this.pendingStepFailed(ex).copyTo(result);
3029
+ }
3030
+ return result;
3031
+ }
3032
+ /**
3033
+ * Signs in with a discoverable passkey, without a username or password. Returns the
3034
+ * stored authorization, or a pending step when the server's policy asks for more.
3035
+ */
3036
+ async signInWithPasskey() {
3037
+ const result = new TaskResult();
3038
+ const endpoints = this.twoFactorEndpoints();
3039
+ const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.passkeySignInOptions), {}, this.twoFactorStepRequestOptions()), response => new NhPasskeyOptions(response));
3040
+ if (!options.isSuccess) {
3041
+ options.copyTo(result);
3042
+ return result;
3043
+ }
3044
+ const credential = await this.runPasskeyCeremony(() => this.passkeyClient.get(options.data.options));
3045
+ if (!credential.isSuccess) {
3046
+ credential.copyTo(result);
3047
+ return result;
3048
+ }
3049
+ const request$ = this.httpClient.post(this.twoFactorUrl(endpoints.passkeySignIn), {
3050
+ ceremonyToken: options.data.ceremonyToken,
3051
+ credential: credential.data,
3052
+ rememberDeviceToken: this.getRememberDeviceToken()
3053
+ }, this.twoFactorStepRequestOptions());
3054
+ try {
3055
+ result.data = this.completeAuthenticationStep(await lastValueFrom(request$));
3056
+ }
3057
+ catch (ex) {
3058
+ NhApiUtil.taskResultFromResponse(ex).copyTo(result);
3059
+ }
3060
+ return result;
3061
+ }
3062
+ /**
3063
+ * Starts authenticator enrollment for a user whom the policy requires to enroll during
3064
+ * sign-in. `enrollmentToken` is the `challengeToken` of the enrollment step.
3065
+ */
3066
+ beginEnrollmentAuthenticatorSetup(enrollmentToken) {
3067
+ return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEnrollmentAuthenticator), { enrollmentToken: enrollmentToken }, this.twoFactorStepRequestOptions()), response => new NhAuthenticatorSetup(response));
3068
+ }
3069
+ /**
3070
+ * Confirms the authenticator during a required enrollment and stores the session.
3071
+ */
3072
+ confirmEnrollmentAuthenticator(enrollmentToken, code) {
3073
+ return this.sendEnrollmentCompletion(this.twoFactorEndpoints().twoFactorEnrollmentAuthenticatorConfirm, { enrollmentToken: enrollmentToken, code: code });
3074
+ }
3075
+ /**
3076
+ * E-mails a confirmation code during a required enrollment.
3077
+ */
3078
+ sendEnrollmentEmailCode(enrollmentToken) {
3079
+ return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEnrollmentEmail), { enrollmentToken: enrollmentToken }, this.twoFactorStepRequestOptions()), response => new NhTwoFactorEmailCodeSent(response));
3080
+ }
3081
+ /**
3082
+ * Confirms the e-mail factor during a required enrollment and stores the session.
3083
+ */
3084
+ confirmEnrollmentEmail(enrollmentToken, code) {
3085
+ return this.sendEnrollmentCompletion(this.twoFactorEndpoints().twoFactorEnrollmentEmailConfirm, { enrollmentToken: enrollmentToken, code: code });
3086
+ }
3087
+ /**
3088
+ * Registers a passkey during a required enrollment and stores the session.
3089
+ */
3090
+ async enrollPasskey(enrollmentToken, name) {
3091
+ const result = new TaskResult();
3092
+ const endpoints = this.twoFactorEndpoints();
3093
+ const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.twoFactorEnrollmentPasskeyOptions), { enrollmentToken: enrollmentToken }, this.twoFactorStepRequestOptions()), response => new NhPasskeyOptions(response));
3094
+ if (!options.isSuccess) {
3095
+ options.copyTo(result);
3096
+ return result;
3097
+ }
3098
+ const credential = await this.runPasskeyCeremony(() => this.passkeyClient.create(options.data.options));
3099
+ if (!credential.isSuccess) {
3100
+ credential.copyTo(result);
3101
+ return result;
3102
+ }
3103
+ return this.sendEnrollmentCompletion(endpoints.twoFactorEnrollmentPasskey, {
3104
+ enrollmentToken: enrollmentToken,
3105
+ ceremonyToken: options.data.ceremonyToken,
3106
+ credential: credential.data,
3107
+ name: name
3108
+ });
3109
+ }
3110
+ /**
3111
+ * Returns the pending second-factor challenge of this browser tab, if it has not expired.
3112
+ */
3113
+ getPendingTwoFactorChallenge() {
3114
+ const challenge = this.pendingTwoFactorChallenge ?? this.readStoredTwoFactorChallenge();
3115
+ if (!challenge) {
3116
+ return undefined;
3117
+ }
3118
+ if (challenge.expiresAt && DateTime.fromISO(challenge.expiresAt) <= DateTime.now()) {
3119
+ this.clearPendingTwoFactorChallenge();
3120
+ return undefined;
3121
+ }
3122
+ this.pendingTwoFactorChallenge = challenge;
3123
+ return challenge;
3124
+ }
3125
+ clearPendingTwoFactorChallenge() {
3126
+ this.pendingTwoFactorChallenge = undefined;
3127
+ if (isPlatformServer(this.platformId)) {
3128
+ return;
3129
+ }
3130
+ try {
3131
+ sessionStorage.removeItem(BaseNhAuthService.pendingTwoFactorChallengeStorageKey);
3132
+ }
3133
+ catch {
3134
+ // Storage can be unavailable in private browsing; the in-memory challenge is cleared.
3135
+ }
3136
+ }
3137
+ /**
3138
+ * Reads a challenge that an external sign-in (Microsoft OAuth) passed back in the URL
3139
+ * fragment, stores it as the pending challenge and removes it from the address bar.
3140
+ */
3141
+ consumeExternalTwoFactorChallenge(fragment) {
3142
+ const browser = !isPlatformServer(this.platformId);
3143
+ const source = fragment ?? (browser ? window.location.hash : '');
3144
+ const value = source.startsWith('#') ? source.substring(1) : source;
3145
+ if (!value.startsWith(BaseNhAuthService.externalTwoFactorChallengePrefix)) {
3146
+ return undefined;
3147
+ }
3148
+ let challenge;
3149
+ try {
3150
+ const payload = value.substring(BaseNhAuthService.externalTwoFactorChallengePrefix.length);
3151
+ challenge = new NhTwoFactorChallenge(JSON.parse(Base64.decode(payload)));
3152
+ }
3153
+ catch {
3154
+ return undefined;
3155
+ }
3156
+ if (!challenge.challengeToken) {
3157
+ return undefined;
3158
+ }
3159
+ this.setPendingTwoFactorChallenge(challenge);
3160
+ if (browser && fragment === undefined) {
3161
+ window.history.replaceState(window.history.state, '', window.location.pathname + window.location.search);
3162
+ }
3163
+ return challenge;
3164
+ }
3165
+ async getTwoFactorStatus() {
3166
+ const result = new TaskResult();
3167
+ const request$ = this.httpClient.get(this.moduleConfig.authApiBaseUrl + this.twoFactorEndpoints().twoFactorStatus, this.twoFactorAccountRequestOptions());
3168
+ try {
3169
+ result.data = new NhTwoFactorStatus(await lastValueFrom(request$));
3170
+ }
3171
+ catch (ex) {
3172
+ const errResult = NhApiUtil.taskResultFromResponse(ex);
3173
+ errResult.copyTo(result);
3174
+ }
3175
+ return result;
3176
+ }
3177
+ /**
3178
+ * Starts authenticator enrollment. Restarting enrollment while two-factor authentication
3179
+ * is enabled requires reauthentication.
3180
+ */
3181
+ async beginAuthenticatorSetup(reauthentication) {
3182
+ const result = new TaskResult();
3183
+ const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + this.twoFactorEndpoints().twoFactorAuthenticator, { reauthentication: reauthentication }, this.twoFactorAccountRequestOptions());
3184
+ try {
3185
+ result.data = new NhAuthenticatorSetup(await lastValueFrom(request$));
3186
+ }
3187
+ catch (ex) {
3188
+ const errResult = NhApiUtil.taskResultFromResponse(ex);
3189
+ errResult.copyTo(result);
3190
+ }
3191
+ return result;
3192
+ }
3193
+ /**
3194
+ * Confirms authenticator enrollment. The server ends every other session; the renewed
3195
+ * session for this device is stored before the promise resolves.
3196
+ */
3197
+ confirmAuthenticator(code) {
3198
+ return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorAuthenticatorConfirm, { code: code });
3199
+ }
3200
+ regenerateRecoveryCodes(reauthentication) {
3201
+ return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorRecoveryCodes, { reauthentication: reauthentication });
3202
+ }
3203
+ disableTwoFactor(reauthentication) {
3204
+ return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorDisable, { reauthentication: reauthentication });
3205
+ }
3206
+ /**
3207
+ * E-mails a code that confirms the user's e-mail address as a second factor. Requires
3208
+ * reauthentication while two-factor authentication is enabled.
3209
+ */
3210
+ beginEmailSetup(reauthentication) {
3211
+ return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEmailSetup), { reauthentication: reauthentication }, this.twoFactorAccountRequestOptions()), response => new NhTwoFactorEmailCodeSent(response));
3212
+ }
3213
+ confirmEmailSetup(code) {
3214
+ return this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorEmailConfirm, { code: code });
3215
+ }
3216
+ /**
3217
+ * Forgets every remembered device, including this one, and ends every other session.
3218
+ */
3219
+ async forgetTwoFactorDevices(reauthentication) {
3220
+ const result = await this.sendTwoFactorChange(this.twoFactorEndpoints().twoFactorForgetDevices, { reauthentication: reauthentication });
3221
+ if (result.isSuccess) {
3222
+ this.storeRememberDeviceToken(undefined);
3223
+ }
3224
+ return result;
3225
+ }
3226
+ getPasskeys() {
3227
+ return this.sendTwoFactorRequest(this.httpClient.get(this.twoFactorUrl(this.twoFactorEndpoints().passkeys), this.twoFactorAccountRequestOptions()), response => (response ?? []).map(passkey => new NhPasskey(passkey)));
3228
+ }
3229
+ /**
3230
+ * Registers a passkey on this device. Adding a passkey while two-factor authentication is
3231
+ * enabled requires reauthentication. The server ends every other session; the renewed
3232
+ * session for this device is stored before the promise resolves.
3233
+ */
3234
+ async registerPasskey(name, reauthentication) {
3235
+ const result = new TaskResult();
3236
+ const endpoints = this.twoFactorEndpoints();
3237
+ const options = await this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoints.passkeyRegistrationOptions), { reauthentication: reauthentication }, this.twoFactorAccountRequestOptions()), response => new NhPasskeyOptions(response));
3238
+ if (!options.isSuccess) {
3239
+ options.copyTo(result);
3240
+ return result;
3241
+ }
3242
+ const credential = await this.runPasskeyCeremony(() => this.passkeyClient.create(options.data.options));
3243
+ if (!credential.isSuccess) {
3244
+ credential.copyTo(result);
3245
+ return result;
3246
+ }
3247
+ return this.sendTwoFactorChange(endpoints.passkeys, {
3248
+ ceremonyToken: options.data.ceremonyToken,
3249
+ credential: credential.data,
3250
+ name: name
3251
+ });
3252
+ }
3253
+ renamePasskey(passkeyId, name) {
3254
+ return this.sendTwoFactorRequest(this.httpClient.put(this.twoFactorUrl(this.twoFactorEndpoints().passkeys) + '/' + encodeURIComponent(passkeyId), { name: name }, this.twoFactorAccountRequestOptions()), () => undefined);
3255
+ }
3256
+ /**
3257
+ * Removes a passkey. Removing the last second factor disables two-factor authentication,
3258
+ * which fails when the policy requires it.
3259
+ */
3260
+ removePasskey(passkeyId, reauthentication) {
3261
+ return this.sendTwoFactorChange(this.twoFactorEndpoints().passkeys + '/' + encodeURIComponent(passkeyId) + '/remove', { reauthentication: reauthentication });
3262
+ }
3263
+ /**
3264
+ * Removes every second factor of another user who lost access to them. Requires the
3265
+ * server's two-factor administration policy.
3266
+ */
3267
+ resetUserTwoFactor(userId) {
3268
+ const endpoint = this.twoFactorEndpoints().twoFactorUserReset.replace('{userId}', encodeURIComponent(userId));
3269
+ return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(endpoint), {}, this.twoFactorAccountRequestOptions()), () => undefined);
3270
+ }
3271
+ /**
3272
+ * Starts a background operation that reminds every user whom the policy requires to
3273
+ * enroll. A repeated idempotency key returns the operation that was already started.
3274
+ */
3275
+ startTwoFactorEnrollmentReminders(idempotencyKey) {
3276
+ return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorEnrollmentReminders), { idempotencyKey: idempotencyKey }, this.twoFactorAccountRequestOptions()), response => response);
3277
+ }
3278
+ /**
3279
+ * Starts a background operation that ends the sessions of every user whom the policy
3280
+ * requires to enroll, so their next sign-in enrolls them.
3281
+ */
3282
+ startTwoFactorSessionRevocation(idempotencyKey) {
3283
+ return this.sendTwoFactorRequest(this.httpClient.post(this.twoFactorUrl(this.twoFactorEndpoints().twoFactorSessionRevocation), { idempotencyKey: idempotencyKey }, this.twoFactorAccountRequestOptions()), response => response);
3284
+ }
3285
+ async sendTwoFactorChange(endpoint, body) {
3286
+ const result = new TaskResult();
3287
+ const request$ = this.httpClient.post(this.moduleConfig.authApiBaseUrl + endpoint, body, this.twoFactorAccountRequestOptions());
3288
+ try {
3289
+ const response = await lastValueFrom(request$);
3290
+ const sessionRenewed = this.applyRenewedSession(response?.session);
3291
+ result.data = new NhTwoFactorChange({
3292
+ recoveryCodes: response?.recoveryCodes ?? undefined,
3293
+ sessionRenewed: sessionRenewed
3294
+ });
3295
+ }
3296
+ catch (ex) {
3297
+ const errResult = NhApiUtil.taskResultFromResponse(ex);
3298
+ errResult.copyTo(result);
3299
+ }
3300
+ return result;
3301
+ }
3302
+ /**
3303
+ * Stores the session that the server issued for this device after a change that ended
3304
+ * every session. The user, claims and divisions of the current authorization are kept.
3305
+ */
3306
+ applyRenewedSession(session) {
3307
+ const authorization = this.getAuthorization();
3308
+ if (!session?.token || !authorization) {
3309
+ return false;
3310
+ }
3311
+ authorization.token = session.token;
3312
+ authorization.validTo = session.validTo ?? authorization.validTo;
3313
+ authorization.refreshToken = session.refreshToken ?? undefined;
3314
+ authorization.refreshTokenExpires = session.refreshValidTo ?? undefined;
3315
+ this.setAuthorization(authorization);
3316
+ return true;
3317
+ }
3318
+ toAuthorization(response) {
3319
+ const authorization = response;
3320
+ delete authorization.twoFactor;
3321
+ delete authorization.rememberDeviceToken;
3322
+ authorization.realm = this.moduleConfig.authenticationRealm;
3323
+ return authorization;
3324
+ }
3325
+ /**
3326
+ * Stores a complete session, or keeps a second-factor challenge or enrollment as the
3327
+ * pending step of this browser tab.
3328
+ */
3329
+ completeAuthenticationStep(response) {
3330
+ if (response?.twoFactor) {
3331
+ const challenge = new NhTwoFactorChallenge(response.twoFactor);
3332
+ this.setPendingTwoFactorChallenge(challenge);
3333
+ return new NhAuthenticationStep({
3334
+ status: challenge.status === NhAuthenticationStepStatuses.enrollmentRequired ? 'enrollment-required' : 'two-factor-required',
3335
+ challenge: challenge
3336
+ });
3337
+ }
3338
+ if (response?.rememberDeviceToken) {
3339
+ this.storeRememberDeviceToken(response.rememberDeviceToken);
3340
+ }
3341
+ const authorization = this.toAuthorization(response);
3342
+ this.setAuthorization(authorization);
3343
+ this.clearPendingTwoFactorChallenge();
3344
+ return new NhAuthenticationStep({ status: 'authenticated', authorization: authorization });
3345
+ }
3346
+ /**
3347
+ * Converts a failed challenge or enrollment request and forgets the pending step when the
3348
+ * server ended it.
3349
+ */
3350
+ pendingStepFailed(ex) {
3351
+ const errResult = NhApiUtil.taskResultFromResponse(ex);
3352
+ const stepEnded = errResult.items.some(item => item.name === NhTwoFactorFailureCodes.ChallengeExpired || item.name === NhTwoFactorFailureCodes.LockedOut);
3353
+ if (stepEnded) {
3354
+ this.clearPendingTwoFactorChallenge();
3355
+ }
3356
+ return errResult;
3357
+ }
3358
+ async sendEnrollmentCompletion(endpoint, body) {
3359
+ const result = new TaskResult();
3360
+ const request$ = this.httpClient.post(this.twoFactorUrl(endpoint), body, this.twoFactorStepRequestOptions());
3361
+ try {
3362
+ const response = await lastValueFrom(request$);
3363
+ const authorization = response?.session ? this.completeAuthenticationStep(response.session).authorization : undefined;
3364
+ result.data = new NhTwoFactorEnrollmentResult({
3365
+ authorization: authorization,
3366
+ recoveryCodes: response?.recoveryCodes ?? undefined
3367
+ });
3368
+ }
3369
+ catch (ex) {
3370
+ this.pendingStepFailed(ex).copyTo(result);
3371
+ }
3372
+ return result;
3373
+ }
3374
+ async sendTwoFactorRequest(request$, map) {
3375
+ const result = new TaskResult();
3376
+ try {
3377
+ result.data = map(await lastValueFrom(request$, { defaultValue: undefined }));
3378
+ }
3379
+ catch (ex) {
3380
+ NhApiUtil.taskResultFromResponse(ex).copyTo(result);
3381
+ }
3382
+ return result;
3383
+ }
3384
+ /**
3385
+ * Runs a WebAuthn prompt. A cancelled prompt or an unsupported browser becomes a failed
3386
+ * result with `NhTwoFactorFailureCodes.PasskeyUnavailable`.
3387
+ */
3388
+ async runPasskeyCeremony(ceremony) {
3389
+ const result = new TaskResult();
3390
+ try {
3391
+ result.data = await ceremony();
3392
+ }
3393
+ catch {
3394
+ return result.withError(NhTwoFactorFailureCodes.PasskeyUnavailable, 'nh-two-factor.passkey-unavailable');
3395
+ }
3396
+ return result;
3397
+ }
3398
+ /**
3399
+ * Returns the remember-device token of header clients. Cookie clients receive it as an
3400
+ * HttpOnly cookie, so nothing is stored in the browser.
3401
+ */
3402
+ getRememberDeviceToken() {
3403
+ if (this.moduleConfig.authType !== 'header' || isPlatformServer(this.platformId)) {
3404
+ return undefined;
3405
+ }
3406
+ try {
3407
+ return localStorage.getItem(this.rememberDeviceStorageKey()) ?? undefined;
3408
+ }
3409
+ catch {
3410
+ return undefined;
3411
+ }
3412
+ }
3413
+ storeRememberDeviceToken(token) {
3414
+ if (this.moduleConfig.authType !== 'header' || isPlatformServer(this.platformId)) {
3415
+ return;
3416
+ }
3417
+ try {
3418
+ if (token) {
3419
+ localStorage.setItem(this.rememberDeviceStorageKey(), token);
3420
+ }
3421
+ else {
3422
+ localStorage.removeItem(this.rememberDeviceStorageKey());
3423
+ }
3424
+ }
3425
+ catch {
3426
+ // Storage can be unavailable in private browsing; the device is then not remembered.
3427
+ }
3428
+ }
3429
+ rememberDeviceStorageKey() {
3430
+ return BaseNhAuthService.rememberDeviceStorageKey + ':' + this.moduleConfig.authenticationRealm;
3431
+ }
3432
+ setPendingTwoFactorChallenge(challenge) {
3433
+ this.pendingTwoFactorChallenge = challenge;
3434
+ if (isPlatformServer(this.platformId)) {
3435
+ return;
3436
+ }
3437
+ try {
3438
+ sessionStorage.setItem(BaseNhAuthService.pendingTwoFactorChallengeStorageKey, JSON.stringify(challenge));
3439
+ }
3440
+ catch {
3441
+ // Storage can be unavailable in private browsing; the in-memory challenge still works.
3442
+ }
3443
+ }
3444
+ readStoredTwoFactorChallenge() {
3445
+ if (isPlatformServer(this.platformId)) {
3446
+ return undefined;
3447
+ }
3448
+ try {
3449
+ const stored = sessionStorage.getItem(BaseNhAuthService.pendingTwoFactorChallengeStorageKey);
3450
+ if (!stored) {
3451
+ return undefined;
3452
+ }
3453
+ return new NhTwoFactorChallenge(JSON.parse(stored));
3454
+ }
3455
+ catch {
3456
+ return undefined;
3457
+ }
3458
+ }
3459
+ twoFactorEndpoints() {
3460
+ // Consumers that passed a plain endpoints object keep working with the default routes.
3461
+ return new EndpointsAuthenticationNhCommonModuleConfig({
3462
+ ...new EndpointsAuthenticationNhCommonModuleConfig(),
3463
+ ...this.moduleConfig.authentication.endpoints
3464
+ });
3465
+ }
3466
+ twoFactorUrl(endpoint) {
3467
+ return this.moduleConfig.authApiBaseUrl + endpoint;
3468
+ }
3469
+ twoFactorStepRequestOptions() {
3470
+ return {
3471
+ params: this.languageParams(),
3472
+ withCredentials: true
3473
+ };
3474
+ }
3475
+ twoFactorAccountRequestOptions() {
3476
+ let headers = new HttpHeaders();
3477
+ const authorization = this.getAuthorization();
3478
+ if (this.moduleConfig.authType === 'header' && authorization?.token) {
3479
+ headers = headers.set('Authorization', `Bearer ${authorization.token}`);
3480
+ }
3481
+ return {
3482
+ params: this.languageParams(),
3483
+ headers: headers,
3484
+ withCredentials: true
3485
+ };
3486
+ }
3487
+ languageParams() {
3488
+ return new HttpParams().set('language', this.moduleConfig.language);
3489
+ }
2620
3490
  async reloadAuthorizationProfile() {
2621
3491
  const result = new TaskResult();
2622
3492
  const auth = this.getAuthorization();
@@ -2665,6 +3535,53 @@ class BaseNhAuthService {
2665
3535
  }
2666
3536
  return result;
2667
3537
  }
3538
+ /**
3539
+ * Asks the account information endpoint whether the server still accepts the current session.
3540
+ * When the server answers 401, for example after a password change on another device, the local
3541
+ * session ends and the session expiration information reports `rejectedByServer`. Concurrent
3542
+ * checks share one request, and a confirmed session is not checked again for 30 seconds.
3543
+ * @returns `false` only when there is no session or the server rejected it.
3544
+ */
3545
+ verifyServerSession() {
3546
+ if (!this.isAuthenticated()) {
3547
+ return Promise.resolve(false);
3548
+ }
3549
+ if (Date.now() - this.serverSessionConfirmedAt < BaseNhAuthService.serverSessionConfirmationMilliseconds) {
3550
+ return Promise.resolve(true);
3551
+ }
3552
+ this.serverSessionCheck ??= this.checkServerSession().finally(() => {
3553
+ this.serverSessionCheck = undefined;
3554
+ });
3555
+ return this.serverSessionCheck;
3556
+ }
3557
+ async checkServerSession() {
3558
+ const checkedAuthorization = this.getAuthorization();
3559
+ let httpHeaders = new HttpHeaders();
3560
+ if (this.moduleConfig.authType === 'header' && (checkedAuthorization?.token?.length ?? 0) > 0) {
3561
+ httpHeaders = httpHeaders.set('Authorization', `Bearer ${checkedAuthorization.token}`);
3562
+ }
3563
+ const request$ = this.httpClient.get(this.moduleConfig.authApiBaseUrl + this.moduleConfig.authentication.endpoints.accountInformation, {
3564
+ params: new HttpParams().set('language', this.moduleConfig.language),
3565
+ headers: httpHeaders,
3566
+ withCredentials: true,
3567
+ context: new HttpContext().set(NH_SKIP_SERVER_SESSION_CHECK, true)
3568
+ });
3569
+ try {
3570
+ await lastValueFrom(request$);
3571
+ this.serverSessionConfirmedAt = Date.now();
3572
+ return true;
3573
+ }
3574
+ catch (ex) {
3575
+ const rejected = ex instanceof HttpErrorResponse && ex.status === 401;
3576
+ // Other failures say nothing about the session, and a sign-in during the check replaced it.
3577
+ if (!rejected || this.getAuthorization() !== checkedAuthorization) {
3578
+ return true;
3579
+ }
3580
+ this.sessionRejectedByServer = true;
3581
+ this.clearAuthorization();
3582
+ return false;
3583
+ }
3584
+ }
2668
3585
  async logout() {
2669
3586
  const result = new TaskResult();
2670
3587
  const refreshToken = this.getAuthorization()?.refreshToken ?? null;
@@ -2756,10 +3673,10 @@ class BaseNhAuthService {
2756
3673
  }
2757
3674
  return result;
2758
3675
  }
2759
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: BaseNhAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2760
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: BaseNhAuthService }); }
3676
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: BaseNhAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3677
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: BaseNhAuthService }); }
2761
3678
  }
2762
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: BaseNhAuthService, decorators: [{
3679
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: BaseNhAuthService, decorators: [{
2763
3680
  type: Injectable
2764
3681
  }], ctorParameters: () => [] });
2765
3682
  class NhAuthService extends BaseNhAuthService {
@@ -2769,10 +3686,10 @@ class NhAuthService extends BaseNhAuthService {
2769
3686
  constructor() {
2770
3687
  super();
2771
3688
  }
2772
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2773
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhAuthService }); }
3689
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3690
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAuthService }); }
2774
3691
  }
2775
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhAuthService, decorators: [{
3692
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAuthService, decorators: [{
2776
3693
  type: Injectable
2777
3694
  }], ctorParameters: () => [] });
2778
3695
 
@@ -2783,10 +3700,10 @@ class NhRequestScopedServerHttpInterceptorService {
2783
3700
  this.requestContext = requestContext;
2784
3701
  this.didSetCookies = false;
2785
3702
  }
2786
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, deps: [{ token: NhCommonModuleConfig }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
2787
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, providedIn: 'root' }); }
3703
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, deps: [{ token: NhCommonModuleConfig }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
3704
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, providedIn: 'root' }); }
2788
3705
  }
2789
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, decorators: [{
3706
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRequestScopedServerHttpInterceptorService, decorators: [{
2790
3707
  type: Injectable,
2791
3708
  args: [{
2792
3709
  providedIn: 'root'
@@ -2870,10 +3787,10 @@ class NhServerHttpInterceptor {
2870
3787
  }
2871
3788
  }));
2872
3789
  }
2873
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerHttpInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: PLATFORM_ID }, { token: DOCUMENT }, { token: NhRequestScopedServerHttpInterceptorService }, { token: NhCookieService }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2874
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerHttpInterceptor }); }
3790
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerHttpInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: PLATFORM_ID }, { token: DOCUMENT }, { token: NhRequestScopedServerHttpInterceptorService }, { token: NhCookieService }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3791
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerHttpInterceptor }); }
2875
3792
  }
2876
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerHttpInterceptor, decorators: [{
3793
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerHttpInterceptor, decorators: [{
2877
3794
  type: Injectable
2878
3795
  }], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: Object, decorators: [{
2879
3796
  type: Inject,
@@ -2910,13 +3827,51 @@ class NhDeduplicateGetRequestsInterceptor {
2910
3827
  .join('|');
2911
3828
  return `${req.method.toUpperCase()} ${req.urlWithParams} ${headerKey}`;
2912
3829
  }
2913
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
2914
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor }); }
3830
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
3831
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor }); }
2915
3832
  }
2916
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor, decorators: [{
3833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDeduplicateGetRequestsInterceptor, decorators: [{
2917
3834
  type: Injectable
2918
3835
  }], ctorParameters: () => [{ type: NhCommonModuleConfig }] });
2919
3836
 
3837
+ /**
3838
+ * Ends a session that the NewHeap API no longer accepts. A 401 from the API while the browser
3839
+ * still holds a session asks the auth service to check that session with the server. Only a 401
3840
+ * from the account endpoint ends it, so an endpoint that answers 401 for another reason never
3841
+ * signs the user out. The original error still reaches the caller.
3842
+ */
3843
+ class NhSessionRejectionInterceptor {
3844
+ constructor(moduleConfig, authService) {
3845
+ this.moduleConfig = moduleConfig;
3846
+ this.authService = authService;
3847
+ }
3848
+ intercept(req, next) {
3849
+ if (!this.appliesTo(req)) {
3850
+ return next.handle(req);
3851
+ }
3852
+ return next.handle(req).pipe(catchError((error) => {
3853
+ if (error instanceof HttpErrorResponse && error.status === 401 && this.authService.isAuthenticated()) {
3854
+ void this.authService.verifyServerSession();
3855
+ }
3856
+ return throwError(() => error);
3857
+ }));
3858
+ }
3859
+ appliesTo(req) {
3860
+ if (this.moduleConfig.authentication?.endSessionRejectedByServer === false || req.context.get(NH_SKIP_SERVER_SESSION_CHECK)) {
3861
+ return false;
3862
+ }
3863
+ return this.isUnder(req.url, this.moduleConfig.apiBaseUrl) || this.isUnder(req.url, this.moduleConfig.authApiBaseUrl);
3864
+ }
3865
+ isUnder(url, baseUrl) {
3866
+ return (baseUrl?.length ?? 0) > 0 && url.startsWith(baseUrl);
3867
+ }
3868
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSessionRejectionInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3869
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSessionRejectionInterceptor }); }
3870
+ }
3871
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSessionRejectionInterceptor, decorators: [{
3872
+ type: Injectable
3873
+ }], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }] });
3874
+
2920
3875
  class AbstractValueAccessor {
2921
3876
  constructor() {
2922
3877
  this._value = '';
@@ -2972,10 +3927,10 @@ class NhErrorHandlerService {
2972
3927
  }
2973
3928
  }
2974
3929
  }
2975
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhErrorHandlerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
2976
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhErrorHandlerService, providedIn: 'root' }); }
3930
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorHandlerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
3931
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorHandlerService, providedIn: 'root' }); }
2977
3932
  }
2978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhErrorHandlerService, decorators: [{
3933
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorHandlerService, decorators: [{
2979
3934
  type: Injectable,
2980
3935
  args: [{ providedIn: 'root' }]
2981
3936
  }], ctorParameters: () => [{ type: i0.Injector }] });
@@ -3060,10 +4015,10 @@ class NhAppService {
3060
4015
  }
3061
4016
  return this.transferState.get(stateKey, undefined);
3062
4017
  }
3063
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhAppService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ApplicationRef }, { token: i0.TransferState }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
3064
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhAppService, providedIn: 'root' }); }
4018
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAppService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ApplicationRef }, { token: i0.TransferState }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
4019
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAppService, providedIn: 'root' }); }
3065
4020
  }
3066
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhAppService, decorators: [{
4021
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhAppService, decorators: [{
3067
4022
  type: Injectable,
3068
4023
  args: [{
3069
4024
  providedIn: 'root',
@@ -3182,10 +4137,10 @@ class NhJsonLdService {
3182
4137
  item.data = { ...item.data, ...placeholderItem.data };
3183
4138
  }
3184
4139
  }
3185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhJsonLdService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3186
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhJsonLdService, providedIn: 'root' }); }
4140
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4141
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdService, providedIn: 'root' }); }
3187
4142
  }
3188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhJsonLdService, decorators: [{
4143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdService, decorators: [{
3189
4144
  type: Injectable,
3190
4145
  args: [{
3191
4146
  providedIn: 'root'
@@ -3334,10 +4289,10 @@ class NhConfigCommonService {
3334
4289
  this.setConfig(this.config);
3335
4290
  await lastValueFrom(this.translateService.use(newLanguageCode));
3336
4291
  }
3337
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhConfigCommonService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }, { token: NhAuthService }, { token: i2.TranslateService }, { token: NhCookieService }, { token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
3338
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhConfigCommonService, providedIn: 'root' }); }
4292
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhConfigCommonService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST_CONTEXT, optional: true }, { token: NhAuthService }, { token: i2.TranslateService }, { token: NhCookieService }, { token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
4293
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhConfigCommonService, providedIn: 'root' }); }
3339
4294
  }
3340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhConfigCommonService, decorators: [{
4295
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhConfigCommonService, decorators: [{
3341
4296
  type: Injectable,
3342
4297
  args: [{
3343
4298
  providedIn: 'root',
@@ -3364,10 +4319,10 @@ class NhTitleService {
3364
4319
  this.titleService.setTitle(title);
3365
4320
  this.title.next(title);
3366
4321
  }
3367
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTitleService, deps: [{ token: i1$2.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
3368
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTitleService, providedIn: 'root' }); }
4322
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTitleService, deps: [{ token: i1$2.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
4323
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTitleService, providedIn: 'root' }); }
3369
4324
  }
3370
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTitleService, decorators: [{
4325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTitleService, decorators: [{
3371
4326
  type: Injectable,
3372
4327
  args: [{
3373
4328
  providedIn: 'root',
@@ -3425,10 +4380,10 @@ class NhMetaService {
3425
4380
  }
3426
4381
  }
3427
4382
  }
3428
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhMetaService, deps: [{ token: i1$2.Meta }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
3429
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhMetaService, providedIn: 'root' }); }
4383
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMetaService, deps: [{ token: i1$2.Meta }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
4384
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMetaService, providedIn: 'root' }); }
3430
4385
  }
3431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhMetaService, decorators: [{
4386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMetaService, decorators: [{
3432
4387
  type: Injectable,
3433
4388
  args: [{
3434
4389
  providedIn: 'root'
@@ -3629,10 +4584,10 @@ class NhRouterSetupService {
3629
4584
  }
3630
4585
  return activatedRoute;
3631
4586
  }
3632
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterSetupService, deps: [{ token: NhCommonModuleConfig }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3633
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterSetupService, providedIn: 'root' }); }
4587
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterSetupService, deps: [{ token: NhCommonModuleConfig }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4588
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterSetupService, providedIn: 'root' }); }
3634
4589
  }
3635
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterSetupService, decorators: [{
4590
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterSetupService, decorators: [{
3636
4591
  type: Injectable,
3637
4592
  args: [{
3638
4593
  providedIn: 'root',
@@ -3916,10 +4871,10 @@ class NhRouterService {
3916
4871
  processRoute(rootRoute);
3917
4872
  return sitemap;
3918
4873
  }
3919
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterService, deps: [{ token: NhCommonModuleConfig }, { token: i2.TranslateService }, { token: NhRouterSetupService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: NH_ROUTER_ROOT_ROUTES, optional: true }, { token: NH_ROUTER_LANGUAGE_CHANGE_METHOD, optional: true }, { token: REQUEST_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
3920
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterService, providedIn: 'root' }); }
4874
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterService, deps: [{ token: NhCommonModuleConfig }, { token: i2.TranslateService }, { token: NhRouterSetupService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: NH_ROUTER_ROOT_ROUTES, optional: true }, { token: NH_ROUTER_LANGUAGE_CHANGE_METHOD, optional: true }, { token: REQUEST_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
4875
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterService, providedIn: 'root' }); }
3921
4876
  }
3922
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterService, decorators: [{
4877
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterService, decorators: [{
3923
4878
  type: Injectable,
3924
4879
  args: [{
3925
4880
  providedIn: 'root',
@@ -4090,10 +5045,10 @@ class NhPageService {
4090
5045
  navigateTo404NotFound(navigationExtras) {
4091
5046
  return this.routerService.navigate({ id: 'root.home.not-found' }, navigationExtras);
4092
5047
  }
4093
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: NhCommonModuleConfig }, { token: i0.ApplicationRef }, { token: NhAppService }, { token: NhConfigCommonService }, { token: NhAuthService }, { token: i2.TranslateService }, { token: NhTitleService }, { token: NhMetaService }, { token: NhJsonLdService }, { token: NhRouterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4094
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageService, providedIn: 'root' }); }
5048
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: NhCommonModuleConfig }, { token: i0.ApplicationRef }, { token: NhAppService }, { token: NhConfigCommonService }, { token: NhAuthService }, { token: i2.TranslateService }, { token: NhTitleService }, { token: NhMetaService }, { token: NhJsonLdService }, { token: NhRouterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5049
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageService, providedIn: 'root' }); }
4095
5050
  }
4096
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageService, decorators: [{
5051
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageService, decorators: [{
4097
5052
  type: Injectable,
4098
5053
  args: [{
4099
5054
  providedIn: 'root'
@@ -4579,10 +5534,10 @@ class NhApiService {
4579
5534
  withCredentials: requestOptions.withCredentials
4580
5535
  }).pipe(share());
4581
5536
  }
4582
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhApiService, deps: [{ token: NhCommonModuleConfig }, { token: i2$1.HttpClient }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4583
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhApiService, providedIn: 'root' }); }
5537
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiService, deps: [{ token: NhCommonModuleConfig }, { token: i2$1.HttpClient }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5538
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiService, providedIn: 'root' }); }
4584
5539
  }
4585
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhApiService, decorators: [{
5540
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiService, decorators: [{
4586
5541
  type: Injectable,
4587
5542
  args: [{
4588
5543
  providedIn: 'root',
@@ -4593,10 +5548,10 @@ class NhModalContentDirective {
4593
5548
  constructor(viewContainerRef) {
4594
5549
  this.viewContainerRef = viewContainerRef;
4595
5550
  }
4596
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalContentDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
4597
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.28", type: NhModalContentDirective, isStandalone: false, selector: "[nhModalContent]", ngImport: i0 }); }
5551
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalContentDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
5552
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhModalContentDirective, isStandalone: false, selector: "[nhModalContent]", ngImport: i0 }); }
4598
5553
  }
4599
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalContentDirective, decorators: [{
5554
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalContentDirective, decorators: [{
4600
5555
  type: Directive,
4601
5556
  args: [{
4602
5557
  selector: '[nhModalContent]',
@@ -4620,10 +5575,10 @@ class NhLoaderComponent {
4620
5575
  this.backdropTransparent = input(true, ...(ngDevMode ? [{ debugName: "backdropTransparent" }] : []));
4621
5576
  this._containerClass = '';
4622
5577
  }
4623
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4624
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.28", type: NhLoaderComponent, isStandalone: false, selector: "nh-loader", inputs: { dark: { classPropertyName: "dark", publicName: "dark", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, backdropTransparent: { classPropertyName: "backdropTransparent", publicName: "backdropTransparent", isSignal: true, isRequired: false, transformFunction: null }, containerClass: { classPropertyName: "containerClass", publicName: "containerClass", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div #loader [class]=\"containerClass\" [class.dark]=\"dark()\" [class.backdrop]=\"hasBackdrop()\" [class.noTrans]=\"!backdropTransparent()\">\n <div class=\"spinner\"></div>\n</div>\n", styles: [".backdrop{position:absolute;width:100%;height:100%;text-align:center;z-index:15;background-color:#fff6;top:0;left:0;display:flex;align-items:center;justify-content:space-around;border-radius:5px}.backdrop.noTrans{background-color:#fff}.spinner{display:inline-block;position:relative;width:44px;height:44px;border-radius:50%;border:4px solid transparent;border-top:4px solid #FF5722;animation:spin 1.5s linear infinite;box-shadow:inset 0 0 25px 25px #fff,0 0 0 5px #fff;background-color:#d8d8d8}.dark .spinner{box-shadow:inset 0 0 25px 25px #071e2b,0 0 0 5px #061a25;background-color:#000}\n"] }); }
5578
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5579
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhLoaderComponent, isStandalone: false, selector: "nh-loader", inputs: { dark: { classPropertyName: "dark", publicName: "dark", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, backdropTransparent: { classPropertyName: "backdropTransparent", publicName: "backdropTransparent", isSignal: true, isRequired: false, transformFunction: null }, containerClass: { classPropertyName: "containerClass", publicName: "containerClass", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div #loader [class]=\"containerClass\" [class.dark]=\"dark()\" [class.backdrop]=\"hasBackdrop()\" [class.noTrans]=\"!backdropTransparent()\">\n <div class=\"spinner\"></div>\n</div>\n", styles: [".backdrop{position:absolute;width:100%;height:100%;text-align:center;z-index:15;background-color:#fff6;top:0;left:0;display:flex;align-items:center;justify-content:space-around;border-radius:5px}.backdrop.noTrans{background-color:#fff}.spinner{display:inline-block;position:relative;width:44px;height:44px;border-radius:50%;border:4px solid transparent;border-top:4px solid #FF5722;animation:spin 1.5s linear infinite;box-shadow:inset 0 0 25px 25px #fff,0 0 0 5px #fff;background-color:#d8d8d8}.dark .spinner{box-shadow:inset 0 0 25px 25px #071e2b,0 0 0 5px #061a25;background-color:#000}\n"] }); }
4625
5580
  }
4626
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhLoaderComponent, decorators: [{
5581
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhLoaderComponent, decorators: [{
4627
5582
  type: Component,
4628
5583
  args: [{ selector: 'nh-loader', standalone: false, template: "<div #loader [class]=\"containerClass\" [class.dark]=\"dark()\" [class.backdrop]=\"hasBackdrop()\" [class.noTrans]=\"!backdropTransparent()\">\n <div class=\"spinner\"></div>\n</div>\n", styles: [".backdrop{position:absolute;width:100%;height:100%;text-align:center;z-index:15;background-color:#fff6;top:0;left:0;display:flex;align-items:center;justify-content:space-around;border-radius:5px}.backdrop.noTrans{background-color:#fff}.spinner{display:inline-block;position:relative;width:44px;height:44px;border-radius:50%;border:4px solid transparent;border-top:4px solid #FF5722;animation:spin 1.5s linear infinite;box-shadow:inset 0 0 25px 25px #fff,0 0 0 5px #fff;background-color:#d8d8d8}.dark .spinner{box-shadow:inset 0 0 25px 25px #071e2b,0 0 0 5px #061a25;background-color:#000}\n"] }]
4629
5584
  }], ctorParameters: () => [], propDecorators: { dark: [{ type: i0.Input, args: [{ isSignal: true, alias: "dark", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], backdropTransparent: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdropTransparent", required: false }] }], containerClass: [{
@@ -4672,10 +5627,10 @@ class NhModalComponentImpl {
4672
5627
  appOnDestroy() {
4673
5628
  return Promise.resolve();
4674
5629
  }
4675
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalComponentImpl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4676
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.28", type: NhModalComponentImpl, isStandalone: true, usesOnChanges: true, ngImport: i0 }); }
5630
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponentImpl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5631
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhModalComponentImpl, isStandalone: true, usesOnChanges: true, ngImport: i0 }); }
4677
5632
  }
4678
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalComponentImpl, decorators: [{
5633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponentImpl, decorators: [{
4679
5634
  type: Directive
4680
5635
  }] });
4681
5636
  class NhModalComponent {
@@ -4762,10 +5717,10 @@ class NhModalComponent {
4762
5717
  }
4763
5718
  modalScrollMove(y) {
4764
5719
  }
4765
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4766
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhModalComponent, isStandalone: false, selector: "nh-modal", outputs: { closed: "closed" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: NhModalContentDirective, descendants: true, isSignal: true }, { propertyName: "modalHolder", first: true, predicate: ["modalHolder"], descendants: true, isSignal: true }, { propertyName: "modalBackdrop", first: true, predicate: ["modalBackdrop"], descendants: true, isSignal: true }, { propertyName: "modal", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #modalHolder (touchmove)=\"modalTouchMove($event)\" (touchcancel)=\"modalTouchEnd($event)\"\n (touchend)=\"modalTouchEnd($event)\" (mousemove)=\"modalMouseMove($event)\" (mouseup)=\"modalMouseUp($event)\"\n role=\"dialog\" class=\"nh-modal-holder\" [ngClass]=\"modalHolderClasses\">\n <div #modalBackdrop class=\"nh-modal-backdrop\"></div>\n <div #modal class=\"nh-modal\" [ngClass]=\"modalClasses\" style=\"transform: translateY(100vh);\">\n <div class=\"nh-modal-header\" [ngClass]=\"modalHeaderClasses\">\n <h3>{{ title }}</h3>\n @if (closeable) {\n <button (click)=\"close()\" class=\"close-nh-modal bg-white small font-grey\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path fill=\"black\"\n d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/>\n </svg>\n </button>\n }\n </div>\n <div class=\"nh-modal-body\" [ngClass]=\"modalBodyClasses\">\n @if (isLoading) {\n <nh-loader></nh-loader>\n }\n <div (touchstart)=\"modalTouchStart($event)\" (mousedown)=\"modalSlideStart($event)\" class=\"nh-modal-slider\"></div>\n <ng-template nhModalContent></ng-template>\n </div>\n </div>\n </div>\n", styles: [".nh-modal hr{height:2px;border:0;margin:10px 0;padding:0;background-color:#bababa;display:block;width:calc(100% + 40px);border-radius:2px}.nh-modal-body{padding:0;margin:0;background-color:transparent}.nh-modal-body.p-0,.nh-modal-body .container-text{padding:0!important}.nh-modal-holder{overflow:auto;position:fixed;top:0;left:0;width:100%;height:100%;z-index:250000;display:grid;place-items:center;overscroll-behavior:none}@media all and (max-width:768px){.nh-modal-holder{max-width:calc(100% - 30px);margin:0 auto}}.nh-modal-backdrop{content:\" \";background-color:#000000d9;opacity:0;transition:opacity .5s;will-change:opacity;position:fixed;left:0;top:0;width:100%;height:100%}.nh-modal{background-color:var(--color-background-white);border-radius:5px;max-width:95vw;width:600px;position:relative;margin:100px auto}.nh-modal .nh-modal-body{padding:20px;border-top:2px solid #dcdcdc;border-top-left-radius:5px;border-top-right-radius:5px}.nh-modal .nh-modal-body ::ng-deep h1.header{background-color:#255a34;color:#fff;border-radius:15px;text-align:center}.nh-modal.large{width:1000px!important}.nh-modal.large .nh-modal-header{margin-top:-72px}.nh-modal>strong{text-align:center;font-size:1.5em}.nh-modal button{font-size:1em}.nh-modal .nh-modal-header{margin-top:-67px}.nh-modal .nh-modal-header h3{margin-bottom:0;padding:10px 20px;border-top-left-radius:5px;border-top-right-radius:5px;color:#fff;min-height:48px}.nh-modal .large .nh-modal-header h3{min-height:51px}.nh-modal .close-nh-modal{position:absolute;right:6px;top:-45px;font-size:13px;background-color:transparent;height:40px;border:2px solid #255A34;padding:0 15px}.nh-modal .close-nh-modal svg{height:10px;fill:#000}.nh-modal .nh-modal-slider{display:none}@media all and (max-width:768px){.nh-modal{max-width:calc(100vw - 30px)!important;margin:0 auto}}@media all and (max-width:768px){.nh-modal .large-padding{padding-left:3em;padding-right:3em}}@media only screen and (max-width:920px){.nh-modal-holder{place-items:end}.nh-modal-holder .nh-modal{border-bottom-left-radius:0;border-bottom-right-radius:0;max-width:100vw;transition:transform .5s}.nh-modal-holder .nh-modal-body{padding:0 20px 15px}.nh-modal-holder .nh-modal-slider{width:100%;display:block}.nh-modal-holder.slidable .nh-modal-slider{cursor:pointer}.nh-modal-holder.slidable .nh-modal-slider:before{content:\" \";width:40px;border-radius:2px;display:block;margin:0 auto;height:3px;background-color:#bababa}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NhLoaderComponent, selector: "nh-loader", inputs: ["dark", "hasBackdrop", "backdropTransparent", "containerClass"] }, { kind: "directive", type: NhModalContentDirective, selector: "[nhModalContent]" }] }); }
5720
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5721
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhModalComponent, isStandalone: false, selector: "nh-modal", outputs: { closed: "closed" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: NhModalContentDirective, descendants: true, isSignal: true }, { propertyName: "modalHolder", first: true, predicate: ["modalHolder"], descendants: true, isSignal: true }, { propertyName: "modalBackdrop", first: true, predicate: ["modalBackdrop"], descendants: true, isSignal: true }, { propertyName: "modal", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #modalHolder (touchmove)=\"modalTouchMove($event)\" (touchcancel)=\"modalTouchEnd($event)\"\n (touchend)=\"modalTouchEnd($event)\" (mousemove)=\"modalMouseMove($event)\" (mouseup)=\"modalMouseUp($event)\"\n role=\"dialog\" class=\"nh-modal-holder\" [ngClass]=\"modalHolderClasses\">\n <div #modalBackdrop class=\"nh-modal-backdrop\"></div>\n <div #modal class=\"nh-modal\" [ngClass]=\"modalClasses\" style=\"transform: translateY(100vh);\">\n <div class=\"nh-modal-header\" [ngClass]=\"modalHeaderClasses\">\n <h3>{{ title }}</h3>\n @if (closeable) {\n <button (click)=\"close()\" class=\"close-nh-modal bg-white small font-grey\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path fill=\"black\"\n d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/>\n </svg>\n </button>\n }\n </div>\n <div class=\"nh-modal-body\" [ngClass]=\"modalBodyClasses\">\n @if (isLoading) {\n <nh-loader></nh-loader>\n }\n <div (touchstart)=\"modalTouchStart($event)\" (mousedown)=\"modalSlideStart($event)\" class=\"nh-modal-slider\"></div>\n <ng-template nhModalContent></ng-template>\n </div>\n </div>\n </div>\n", styles: [".nh-modal hr{height:2px;border:0;margin:10px 0;padding:0;background-color:#bababa;display:block;width:calc(100% + 40px);border-radius:2px}.nh-modal-body{padding:0;margin:0;background-color:transparent}.nh-modal-body.p-0,.nh-modal-body .container-text{padding:0!important}.nh-modal-holder{overflow:auto;position:fixed;top:0;left:0;width:100%;height:100%;z-index:250000;display:grid;place-items:center;overscroll-behavior:none}@media all and (max-width:768px){.nh-modal-holder{max-width:calc(100% - 30px);margin:0 auto}}.nh-modal-backdrop{content:\" \";background-color:#000000d9;opacity:0;transition:opacity .5s;will-change:opacity;position:fixed;left:0;top:0;width:100%;height:100%}.nh-modal{background-color:var(--color-background-white);border-radius:5px;max-width:95vw;width:600px;position:relative;margin:100px auto}.nh-modal .nh-modal-body{padding:20px;border-top:2px solid #dcdcdc;border-top-left-radius:5px;border-top-right-radius:5px}.nh-modal .nh-modal-body ::ng-deep h1.header{background-color:#255a34;color:#fff;border-radius:15px;text-align:center}.nh-modal.large{width:1000px!important}.nh-modal.large .nh-modal-header{margin-top:-72px}.nh-modal>strong{text-align:center;font-size:1.5em}.nh-modal button{font-size:1em}.nh-modal .nh-modal-header{margin-top:-67px}.nh-modal .nh-modal-header h3{margin-bottom:0;padding:10px 20px;border-top-left-radius:5px;border-top-right-radius:5px;color:#fff;min-height:48px}.nh-modal .large .nh-modal-header h3{min-height:51px}.nh-modal .close-nh-modal{position:absolute;right:6px;top:-45px;font-size:13px;background-color:transparent;height:40px;border:2px solid #255A34;padding:0 15px}.nh-modal .close-nh-modal svg{height:10px;fill:#000}.nh-modal .nh-modal-slider{display:none}@media all and (max-width:768px){.nh-modal{max-width:calc(100vw - 30px)!important;margin:0 auto}}@media all and (max-width:768px){.nh-modal .large-padding{padding-left:3em;padding-right:3em}}@media only screen and (max-width:920px){.nh-modal-holder{place-items:end}.nh-modal-holder .nh-modal{border-bottom-left-radius:0;border-bottom-right-radius:0;max-width:100vw;transition:transform .5s}.nh-modal-holder .nh-modal-body{padding:0 20px 15px}.nh-modal-holder .nh-modal-slider{width:100%;display:block}.nh-modal-holder.slidable .nh-modal-slider{cursor:pointer}.nh-modal-holder.slidable .nh-modal-slider:before{content:\" \";width:40px;border-radius:2px;display:block;margin:0 auto;height:3px;background-color:#bababa}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NhLoaderComponent, selector: "nh-loader", inputs: ["dark", "hasBackdrop", "backdropTransparent", "containerClass"] }, { kind: "directive", type: NhModalContentDirective, selector: "[nhModalContent]" }] }); }
4767
5722
  }
4768
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalComponent, decorators: [{
5723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalComponent, decorators: [{
4769
5724
  type: Component,
4770
5725
  args: [{ selector: 'nh-modal', standalone: false, template: "<div #modalHolder (touchmove)=\"modalTouchMove($event)\" (touchcancel)=\"modalTouchEnd($event)\"\n (touchend)=\"modalTouchEnd($event)\" (mousemove)=\"modalMouseMove($event)\" (mouseup)=\"modalMouseUp($event)\"\n role=\"dialog\" class=\"nh-modal-holder\" [ngClass]=\"modalHolderClasses\">\n <div #modalBackdrop class=\"nh-modal-backdrop\"></div>\n <div #modal class=\"nh-modal\" [ngClass]=\"modalClasses\" style=\"transform: translateY(100vh);\">\n <div class=\"nh-modal-header\" [ngClass]=\"modalHeaderClasses\">\n <h3>{{ title }}</h3>\n @if (closeable) {\n <button (click)=\"close()\" class=\"close-nh-modal bg-white small font-grey\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path fill=\"black\"\n d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/>\n </svg>\n </button>\n }\n </div>\n <div class=\"nh-modal-body\" [ngClass]=\"modalBodyClasses\">\n @if (isLoading) {\n <nh-loader></nh-loader>\n }\n <div (touchstart)=\"modalTouchStart($event)\" (mousedown)=\"modalSlideStart($event)\" class=\"nh-modal-slider\"></div>\n <ng-template nhModalContent></ng-template>\n </div>\n </div>\n </div>\n", styles: [".nh-modal hr{height:2px;border:0;margin:10px 0;padding:0;background-color:#bababa;display:block;width:calc(100% + 40px);border-radius:2px}.nh-modal-body{padding:0;margin:0;background-color:transparent}.nh-modal-body.p-0,.nh-modal-body .container-text{padding:0!important}.nh-modal-holder{overflow:auto;position:fixed;top:0;left:0;width:100%;height:100%;z-index:250000;display:grid;place-items:center;overscroll-behavior:none}@media all and (max-width:768px){.nh-modal-holder{max-width:calc(100% - 30px);margin:0 auto}}.nh-modal-backdrop{content:\" \";background-color:#000000d9;opacity:0;transition:opacity .5s;will-change:opacity;position:fixed;left:0;top:0;width:100%;height:100%}.nh-modal{background-color:var(--color-background-white);border-radius:5px;max-width:95vw;width:600px;position:relative;margin:100px auto}.nh-modal .nh-modal-body{padding:20px;border-top:2px solid #dcdcdc;border-top-left-radius:5px;border-top-right-radius:5px}.nh-modal .nh-modal-body ::ng-deep h1.header{background-color:#255a34;color:#fff;border-radius:15px;text-align:center}.nh-modal.large{width:1000px!important}.nh-modal.large .nh-modal-header{margin-top:-72px}.nh-modal>strong{text-align:center;font-size:1.5em}.nh-modal button{font-size:1em}.nh-modal .nh-modal-header{margin-top:-67px}.nh-modal .nh-modal-header h3{margin-bottom:0;padding:10px 20px;border-top-left-radius:5px;border-top-right-radius:5px;color:#fff;min-height:48px}.nh-modal .large .nh-modal-header h3{min-height:51px}.nh-modal .close-nh-modal{position:absolute;right:6px;top:-45px;font-size:13px;background-color:transparent;height:40px;border:2px solid #255A34;padding:0 15px}.nh-modal .close-nh-modal svg{height:10px;fill:#000}.nh-modal .nh-modal-slider{display:none}@media all and (max-width:768px){.nh-modal{max-width:calc(100vw - 30px)!important;margin:0 auto}}@media all and (max-width:768px){.nh-modal .large-padding{padding-left:3em;padding-right:3em}}@media only screen and (max-width:920px){.nh-modal-holder{place-items:end}.nh-modal-holder .nh-modal{border-bottom-left-radius:0;border-bottom-right-radius:0;max-width:100vw;transition:transform .5s}.nh-modal-holder .nh-modal-body{padding:0 20px 15px}.nh-modal-holder .nh-modal-slider{width:100%;display:block}.nh-modal-holder.slidable .nh-modal-slider{cursor:pointer}.nh-modal-holder.slidable .nh-modal-slider:before{content:\" \";width:40px;border-radius:2px;display:block;margin:0 auto;height:3px;background-color:#bababa}}\n"] }]
4771
5726
  }], propDecorators: { modalContent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => NhModalContentDirective), { isSignal: true }] }], modalHolder: [{ type: i0.ViewChild, args: ['modalHolder', { isSignal: true }] }], modalBackdrop: [{ type: i0.ViewChild, args: ['modalBackdrop', { isSignal: true }] }], modal: [{ type: i0.ViewChild, args: ['modal', { isSignal: true }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
@@ -4817,10 +5772,10 @@ class NhModalConfirmComponent {
4817
5772
  }
4818
5773
  }
4819
5774
  }
4820
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4821
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhModalConfirmComponent, isStandalone: false, selector: "nh-confirm-modal", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, btnConfirmText: { classPropertyName: "btnConfirmText", publicName: "btnConfirmText", isSignal: false, isRequired: false, transformFunction: null }, btnCancelText: { classPropertyName: "btnCancelText", publicName: "btnCancelText", isSignal: false, isRequired: false, transformFunction: null }, modalClass: { classPropertyName: "modalClass", publicName: "modalClass", isSignal: false, isRequired: false, transformFunction: null }, btnConfirmDisabled: { classPropertyName: "btnConfirmDisabled", publicName: "btnConfirmDisabled", isSignal: false, isRequired: false, transformFunction: null }, btnCancelDisabled: { classPropertyName: "btnCancelDisabled", publicName: "btnCancelDisabled", isSignal: false, isRequired: false, transformFunction: null }, allBtnsDisabled: { classPropertyName: "allBtnsDisabled", publicName: "allBtnsDisabled", isSignal: false, isRequired: false, transformFunction: null }, showLoader: { classPropertyName: "showLoader", publicName: "showLoader", isSignal: false, isRequired: false, transformFunction: null }, errorResult: { classPropertyName: "errorResult", publicName: "errorResult", isSignal: false, isRequired: false, transformFunction: null }, onConfirm: { classPropertyName: "onConfirm", publicName: "onConfirm", isSignal: false, isRequired: false, transformFunction: null }, onCancel: { classPropertyName: "onCancel", publicName: "onCancel", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { confirmed: "confirmed" }, host: { listeners: { "document:keyup": "onKeyUp($event)" } }, ngImport: i0, template: "<div class=\"{{modalClass}}\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [innerHTML]=\"message\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n @if (errorResult && !errorResult?.isSuccess) {\n <div class=\"alert alert-danger\" role=\"alert\">\n <b>Er is een fout opgetreden</b>\n <ul>\n @for (resultItem of errorResult.items; track resultItem) {\n @for (resultItemErrorMsg of resultItem.errorMessages; track resultItemErrorMsg) {\n <li>{{ resultItemErrorMsg }}</li>\n }\n }\n </ul>\n </div>\n }\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <button [disabled]=\"allBtnsDisabled || btnCancelDisabled\" class=\"btn btn-danger me-2\" (click)=\"cancel()\">{{ btnCancelText | translate }}</button>\n <button [disabled]=\"allBtnsDisabled || btnConfirmDisabled\" class=\"btn btn-success\" (click)=\"confirm()\">{{ btnConfirmText | translate }}</button>\n </div>\n </div>\n</div>\n", styles: [".icon-bg svg{display:inline-block;width:1.5em}\n"], dependencies: [{ kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
5775
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5776
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhModalConfirmComponent, isStandalone: false, selector: "nh-confirm-modal", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, btnConfirmText: { classPropertyName: "btnConfirmText", publicName: "btnConfirmText", isSignal: false, isRequired: false, transformFunction: null }, btnCancelText: { classPropertyName: "btnCancelText", publicName: "btnCancelText", isSignal: false, isRequired: false, transformFunction: null }, modalClass: { classPropertyName: "modalClass", publicName: "modalClass", isSignal: false, isRequired: false, transformFunction: null }, btnConfirmDisabled: { classPropertyName: "btnConfirmDisabled", publicName: "btnConfirmDisabled", isSignal: false, isRequired: false, transformFunction: null }, btnCancelDisabled: { classPropertyName: "btnCancelDisabled", publicName: "btnCancelDisabled", isSignal: false, isRequired: false, transformFunction: null }, allBtnsDisabled: { classPropertyName: "allBtnsDisabled", publicName: "allBtnsDisabled", isSignal: false, isRequired: false, transformFunction: null }, showLoader: { classPropertyName: "showLoader", publicName: "showLoader", isSignal: false, isRequired: false, transformFunction: null }, errorResult: { classPropertyName: "errorResult", publicName: "errorResult", isSignal: false, isRequired: false, transformFunction: null }, onConfirm: { classPropertyName: "onConfirm", publicName: "onConfirm", isSignal: false, isRequired: false, transformFunction: null }, onCancel: { classPropertyName: "onCancel", publicName: "onCancel", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { confirmed: "confirmed" }, host: { listeners: { "document:keyup": "onKeyUp($event)" } }, ngImport: i0, template: "<div class=\"{{modalClass}}\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [innerHTML]=\"message\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n @if (errorResult && !errorResult?.isSuccess) {\n <div class=\"alert alert-danger\" role=\"alert\">\n <b>Er is een fout opgetreden</b>\n <ul>\n @for (resultItem of errorResult.items; track resultItem) {\n @for (resultItemErrorMsg of resultItem.errorMessages; track resultItemErrorMsg) {\n <li>{{ resultItemErrorMsg }}</li>\n }\n }\n </ul>\n </div>\n }\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <button [disabled]=\"allBtnsDisabled || btnCancelDisabled\" class=\"btn btn-danger me-2\" (click)=\"cancel()\">{{ btnCancelText | translate }}</button>\n <button [disabled]=\"allBtnsDisabled || btnConfirmDisabled\" class=\"btn btn-success\" (click)=\"confirm()\">{{ btnConfirmText | translate }}</button>\n </div>\n </div>\n</div>\n", styles: [".icon-bg svg{display:inline-block;width:1.5em}\n"], dependencies: [{ kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
4822
5777
  }
4823
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalConfirmComponent, decorators: [{
5778
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalConfirmComponent, decorators: [{
4824
5779
  type: Component,
4825
5780
  args: [{ selector: 'nh-confirm-modal', standalone: false, template: "<div class=\"{{modalClass}}\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p [innerHTML]=\"message\"></p>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n @if (errorResult && !errorResult?.isSuccess) {\n <div class=\"alert alert-danger\" role=\"alert\">\n <b>Er is een fout opgetreden</b>\n <ul>\n @for (resultItem of errorResult.items; track resultItem) {\n @for (resultItemErrorMsg of resultItem.errorMessages; track resultItemErrorMsg) {\n <li>{{ resultItemErrorMsg }}</li>\n }\n }\n </ul>\n </div>\n }\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end\">\n <button [disabled]=\"allBtnsDisabled || btnCancelDisabled\" class=\"btn btn-danger me-2\" (click)=\"cancel()\">{{ btnCancelText | translate }}</button>\n <button [disabled]=\"allBtnsDisabled || btnConfirmDisabled\" class=\"btn btn-success\" (click)=\"confirm()\">{{ btnConfirmText | translate }}</button>\n </div>\n </div>\n</div>\n", styles: [".icon-bg svg{display:inline-block;width:1.5em}\n"] }]
4826
5781
  }], propDecorators: { message: [{
@@ -4976,10 +5931,10 @@ class NhModalService {
4976
5931
  const latestModalRef = this.modalRefs[this.modalRefs.length - 1];
4977
5932
  this.close(latestModalRef);
4978
5933
  }
4979
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4980
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalService, providedIn: 'root' }); }
5934
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5935
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalService, providedIn: 'root' }); }
4981
5936
  }
4982
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalService, decorators: [{
5937
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalService, decorators: [{
4983
5938
  type: Injectable,
4984
5939
  args: [{
4985
5940
  providedIn: 'root'
@@ -5039,10 +5994,10 @@ class NhTaskResultFormValidationService {
5039
5994
  }
5040
5995
  return formControl;
5041
5996
  }
5042
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTaskResultFormValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5043
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTaskResultFormValidationService }); }
5997
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTaskResultFormValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5998
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTaskResultFormValidationService }); }
5044
5999
  }
5045
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTaskResultFormValidationService, decorators: [{
6000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTaskResultFormValidationService, decorators: [{
5046
6001
  type: Injectable
5047
6002
  }] });
5048
6003
 
@@ -5085,10 +6040,10 @@ class NhHeadService {
5085
6040
  addElementToHead(element) {
5086
6041
  this.renderer.appendChild(this.document.head, element);
5087
6042
  }
5088
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhHeadService, deps: [{ token: DOCUMENT }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
5089
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhHeadService, providedIn: 'root' }); }
6043
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhHeadService, deps: [{ token: DOCUMENT }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
6044
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhHeadService, providedIn: 'root' }); }
5090
6045
  }
5091
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhHeadService, decorators: [{
6046
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhHeadService, decorators: [{
5092
6047
  type: Injectable,
5093
6048
  args: [{
5094
6049
  providedIn: 'root'
@@ -5114,10 +6069,10 @@ class NhInternetConnectionService {
5114
6069
  });
5115
6070
  });
5116
6071
  }
5117
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhInternetConnectionService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
5118
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhInternetConnectionService }); }
6072
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhInternetConnectionService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
6073
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhInternetConnectionService }); }
5119
6074
  }
5120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhInternetConnectionService, decorators: [{
6075
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhInternetConnectionService, decorators: [{
5121
6076
  type: Injectable
5122
6077
  }], ctorParameters: () => [{ type: i0.NgZone }] });
5123
6078
 
@@ -5136,10 +6091,10 @@ class NhServerService {
5136
6091
  && this.transferState.hasKey(NhServerService.DID_INIT_BY_SERVER_STATE_KEY)
5137
6092
  && this.transferState.get(NhServerService.DID_INIT_BY_SERVER_STATE_KEY, false);
5138
6093
  }
5139
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerService, deps: [{ token: PLATFORM_ID }, { token: NhCommonModuleConfig }, { token: i0.TransferState }], target: i0.ɵɵFactoryTarget.Injectable }); }
5140
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerService, providedIn: 'root' }); }
6094
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerService, deps: [{ token: PLATFORM_ID }, { token: NhCommonModuleConfig }, { token: i0.TransferState }], target: i0.ɵɵFactoryTarget.Injectable }); }
6095
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerService, providedIn: 'root' }); }
5141
6096
  }
5142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerService, decorators: [{
6097
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerService, decorators: [{
5143
6098
  type: Injectable,
5144
6099
  args: [{
5145
6100
  providedIn: 'root',
@@ -5187,10 +6142,10 @@ class NhServerSideFormValidationService {
5187
6142
  }
5188
6143
  }
5189
6144
  }
5190
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerSideFormValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5191
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerSideFormValidationService }); }
6145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerSideFormValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6146
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerSideFormValidationService }); }
5192
6147
  }
5193
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhServerSideFormValidationService, decorators: [{
6148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhServerSideFormValidationService, decorators: [{
5194
6149
  type: Injectable
5195
6150
  }] });
5196
6151
  class AspMvcFormServerSideFormValidator {
@@ -5403,7 +6358,8 @@ class NhUserNotificationService {
5403
6358
  }
5404
6359
  }
5405
6360
  async doWork() {
5406
- if (!this.isRunning()) {
6361
+ // Notifications belong to a user; without a session every poll would only answer 401.
6362
+ if (!this.isRunning() || !this.authService.isAuthenticated()) {
5407
6363
  return;
5408
6364
  }
5409
6365
  await this.loadState();
@@ -5415,7 +6371,10 @@ class NhUserNotificationService {
5415
6371
  this.userNotificationState.overview = await this.getOverview().lastValueFrom();
5416
6372
  }
5417
6373
  catch (error) {
5418
- console.error('Error fetching user notification overview:', error);
6374
+ // The session rejection interceptor handles a 401; it is not a notification failure.
6375
+ if (!(error instanceof HttpErrorResponse && error.status === 401)) {
6376
+ console.error('Error fetching user notification overview:', error);
6377
+ }
5419
6378
  }
5420
6379
  }
5421
6380
  getOverview() {
@@ -5437,10 +6396,10 @@ class NhUserNotificationService {
5437
6396
  archiveAll() {
5438
6397
  return this.apiService.put(`${this.baseUrl}/ArchiveAll`, {});
5439
6398
  }
5440
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhUserNotificationService, deps: [{ token: NhAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5441
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhUserNotificationService, providedIn: 'root' }); }
6399
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationService, deps: [{ token: NhAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6400
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationService, providedIn: 'root' }); }
5442
6401
  }
5443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhUserNotificationService, decorators: [{
6402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationService, decorators: [{
5444
6403
  type: Injectable,
5445
6404
  args: [{
5446
6405
  providedIn: 'root',
@@ -5475,10 +6434,10 @@ class NhBackgroundOperationService {
5475
6434
  joinUrl(base, suffix) {
5476
6435
  return `${base.replace(/\/$/, '')}/${suffix.replace(/^\//, '')}`;
5477
6436
  }
5478
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5479
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationService, providedIn: 'root' }); }
6437
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6438
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationService, providedIn: 'root' }); }
5480
6439
  }
5481
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationService, decorators: [{
6440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationService, decorators: [{
5482
6441
  type: Injectable,
5483
6442
  args: [{ providedIn: 'root' }]
5484
6443
  }] });
@@ -5518,10 +6477,10 @@ class NhBackgroundOperationAdministrationService {
5518
6477
  joinUrl(base, suffix) {
5519
6478
  return `${base.replace(/\/$/, '')}/${suffix.replace(/^\//, '')}`;
5520
6479
  }
5521
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationAdministrationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5522
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationAdministrationService, providedIn: 'root' }); }
6480
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationAdministrationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6481
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationAdministrationService, providedIn: 'root' }); }
5523
6482
  }
5524
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationAdministrationService, decorators: [{
6483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationAdministrationService, decorators: [{
5525
6484
  type: Injectable,
5526
6485
  args: [{ providedIn: 'root' }]
5527
6486
  }] });
@@ -5686,10 +6645,10 @@ class NhBackgroundOperationLiveUpdateService {
5686
6645
  const authorization = this.auth.getAuthorization();
5687
6646
  return `${authorization?.user?.id ?? 'anonymous'}:${authorization?.activeDivision?.id ?? 'global'}`;
5688
6647
  }
5689
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }, { token: NhAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5690
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, providedIn: 'root' }); }
6648
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }, { token: NhAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6649
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, providedIn: 'root' }); }
5691
6650
  }
5692
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, decorators: [{
6651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationLiveUpdateService, decorators: [{
5693
6652
  type: Injectable,
5694
6653
  args: [{ providedIn: 'root' }]
5695
6654
  }], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }, { type: NhAppService }] });
@@ -5955,10 +6914,10 @@ class NhBackgroundOperationStore {
5955
6914
  operations.delete(operationId);
5956
6915
  this.operationsSubject.next(operations);
5957
6916
  }
5958
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationStore, deps: [{ token: NhBackgroundOperationService }, { token: NhBackgroundOperationLiveUpdateService }, { token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5959
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationStore, providedIn: 'root' }); }
6917
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationStore, deps: [{ token: NhBackgroundOperationService }, { token: NhBackgroundOperationLiveUpdateService }, { token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
6918
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationStore, providedIn: 'root' }); }
5960
6919
  }
5961
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationStore, decorators: [{
6920
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationStore, decorators: [{
5962
6921
  type: Injectable,
5963
6922
  args: [{ providedIn: 'root' }]
5964
6923
  }], ctorParameters: () => [{ type: NhBackgroundOperationService }, { type: NhBackgroundOperationLiveUpdateService }, { type: NhCommonModuleConfig }, { type: NhAuthService }] });
@@ -6103,10 +7062,10 @@ class NhContextMenuService {
6103
7062
  }
6104
7063
  this.renderer.appendChild(contextMenuElement, menuItemElement);
6105
7064
  }
6106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhContextMenuService, deps: [{ token: PLATFORM_ID }, { token: NhAppService }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
6107
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhContextMenuService, providedIn: 'root' }); }
7065
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhContextMenuService, deps: [{ token: PLATFORM_ID }, { token: NhAppService }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
7066
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhContextMenuService, providedIn: 'root' }); }
6108
7067
  }
6109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhContextMenuService, decorators: [{
7068
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhContextMenuService, decorators: [{
6110
7069
  type: Injectable,
6111
7070
  args: [{
6112
7071
  providedIn: 'root'
@@ -6235,10 +7194,10 @@ class NhUrlEncodePipe {
6235
7194
  }
6236
7195
  return encodeURIComponent(value ?? '');
6237
7196
  }
6238
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhUrlEncodePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
6239
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: NhUrlEncodePipe, isStandalone: false, name: "nhUrlEncode" }); }
7197
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUrlEncodePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
7198
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhUrlEncodePipe, isStandalone: false, name: "nhUrlEncode" }); }
6240
7199
  }
6241
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhUrlEncodePipe, decorators: [{
7200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUrlEncodePipe, decorators: [{
6242
7201
  type: Pipe,
6243
7202
  args: [{
6244
7203
  name: 'nhUrlEncode',
@@ -6255,10 +7214,10 @@ class NhDatePipe {
6255
7214
  const datePipe = new DatePipe(this.moduleConfig.language);
6256
7215
  return datePipe.transform(value, pattern);
6257
7216
  }
6258
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDatePipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
6259
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: NhDatePipe, isStandalone: false, name: "nhDate", pure: false }); }
7217
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDatePipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
7218
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhDatePipe, isStandalone: false, name: "nhDate", pure: false }); }
6260
7219
  }
6261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDatePipe, decorators: [{
7220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDatePipe, decorators: [{
6262
7221
  type: Pipe,
6263
7222
  args: [{
6264
7223
  name: 'nhDate',
@@ -6275,10 +7234,10 @@ class NhDateTimePipe {
6275
7234
  const datePipe = new NhDatePipe(this.moduleConfig);
6276
7235
  return datePipe.transform(value, pattern);
6277
7236
  }
6278
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDateTimePipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
6279
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: NhDateTimePipe, isStandalone: false, name: "nhDateTime", pure: false }); }
7237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateTimePipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
7238
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhDateTimePipe, isStandalone: false, name: "nhDateTime", pure: false }); }
6280
7239
  }
6281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDateTimePipe, decorators: [{
7240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateTimePipe, decorators: [{
6282
7241
  type: Pipe,
6283
7242
  args: [{
6284
7243
  name: 'nhDateTime',
@@ -6297,10 +7256,10 @@ class NhDateUtcPipe {
6297
7256
  const datePipe = new DatePipe(this.moduleConfig.language);
6298
7257
  return datePipe.transform(value, pattern);
6299
7258
  }
6300
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDateUtcPipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
6301
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: NhDateUtcPipe, isStandalone: false, name: "nhDateUtc", pure: false }); }
7259
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateUtcPipe, deps: [{ token: NhCommonModuleConfig }], target: i0.ɵɵFactoryTarget.Pipe }); }
7260
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhDateUtcPipe, isStandalone: false, name: "nhDateUtc", pure: false }); }
6302
7261
  }
6303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDateUtcPipe, decorators: [{
7262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDateUtcPipe, decorators: [{
6304
7263
  type: Pipe,
6305
7264
  args: [{
6306
7265
  name: 'nhDateUtc',
@@ -6316,10 +7275,10 @@ class IsOnePermissionGrantedPipe {
6316
7275
  transform(permissions) {
6317
7276
  return this.authService.isOnePermissionGranted(permissions);
6318
7277
  }
6319
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOnePermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6320
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsOnePermissionGrantedPipe, isStandalone: false, name: "isOnePermissionGranted" }); }
7278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOnePermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7279
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOnePermissionGrantedPipe, isStandalone: false, name: "isOnePermissionGranted" }); }
6321
7280
  }
6322
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOnePermissionGrantedPipe, decorators: [{
7281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOnePermissionGrantedPipe, decorators: [{
6323
7282
  type: Pipe,
6324
7283
  args: [{
6325
7284
  name: 'isOnePermissionGranted',
@@ -6333,10 +7292,10 @@ class IsAllPermissionsGrantedPipe {
6333
7292
  transform(permissions) {
6334
7293
  return this.authService.isAllPermissionsGranted(permissions);
6335
7294
  }
6336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsAllPermissionsGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6337
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsAllPermissionsGrantedPipe, isStandalone: false, name: "isAllPermissionsGranted" }); }
7295
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAllPermissionsGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7296
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsAllPermissionsGrantedPipe, isStandalone: false, name: "isAllPermissionsGranted" }); }
6338
7297
  }
6339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsAllPermissionsGrantedPipe, decorators: [{
7298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAllPermissionsGrantedPipe, decorators: [{
6340
7299
  type: Pipe,
6341
7300
  args: [{
6342
7301
  name: "isAllPermissionsGranted",
@@ -6350,10 +7309,10 @@ class IsGrantedRolePipe {
6350
7309
  transform(roles) {
6351
7310
  return this.authService.isGrantedRole(roles);
6352
7311
  }
6353
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsGrantedRolePipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6354
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsGrantedRolePipe, isStandalone: false, name: "isGrantedRole" }); }
7312
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsGrantedRolePipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7313
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsGrantedRolePipe, isStandalone: false, name: "isGrantedRole" }); }
6355
7314
  }
6356
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsGrantedRolePipe, decorators: [{
7315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsGrantedRolePipe, decorators: [{
6357
7316
  type: Pipe,
6358
7317
  args: [{
6359
7318
  name: 'isGrantedRole',
@@ -6367,10 +7326,10 @@ class IsAuthenticatedPipe {
6367
7326
  transform() {
6368
7327
  return this.authService.isAuthenticated();
6369
7328
  }
6370
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsAuthenticatedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6371
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsAuthenticatedPipe, isStandalone: false, name: "isAuthenticated" }); }
7329
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAuthenticatedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7330
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsAuthenticatedPipe, isStandalone: false, name: "isAuthenticated" }); }
6372
7331
  }
6373
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsAuthenticatedPipe, decorators: [{
7332
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsAuthenticatedPipe, decorators: [{
6374
7333
  type: Pipe,
6375
7334
  args: [{
6376
7335
  name: 'isAuthenticated',
@@ -6384,10 +7343,10 @@ class IsClaimGrantedPipe {
6384
7343
  transform(claim) {
6385
7344
  return this.authService.isClaimGranted(claim);
6386
7345
  }
6387
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsClaimGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6388
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsClaimGrantedPipe, isStandalone: false, name: "isClaimGranted" }); }
7346
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsClaimGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7347
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsClaimGrantedPipe, isStandalone: false, name: "isClaimGranted" }); }
6389
7348
  }
6390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsClaimGrantedPipe, decorators: [{
7349
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsClaimGrantedPipe, decorators: [{
6391
7350
  type: Pipe,
6392
7351
  args: [{
6393
7352
  name: 'isClaimGranted',
@@ -6401,10 +7360,10 @@ class IsOneClaimGrantedPipe {
6401
7360
  transform(claims) {
6402
7361
  return this.authService.isOneClaimGranted(claims);
6403
7362
  }
6404
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneClaimGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6405
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsOneClaimGrantedPipe, isStandalone: false, name: "isOneClaimGranted" }); }
7363
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneClaimGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7364
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneClaimGrantedPipe, isStandalone: false, name: "isOneClaimGranted" }); }
6406
7365
  }
6407
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneClaimGrantedPipe, decorators: [{
7366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneClaimGrantedPipe, decorators: [{
6408
7367
  type: Pipe,
6409
7368
  args: [{
6410
7369
  name: 'isOneClaimGranted',
@@ -6418,10 +7377,10 @@ class IsOneRoleGrantedPipe {
6418
7377
  transform(roles) {
6419
7378
  return this.authService.isOneRoleGranted(roles);
6420
7379
  }
6421
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6422
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsOneRoleGrantedPipe, isStandalone: false, name: "isOneRoleGranted" }); }
7380
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7381
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneRoleGrantedPipe, isStandalone: false, name: "isOneRoleGranted" }); }
6423
7382
  }
6424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneRoleGrantedPipe, decorators: [{
7383
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneRoleGrantedPipe, decorators: [{
6425
7384
  type: Pipe,
6426
7385
  args: [{
6427
7386
  name: 'isOneRoleGranted',
@@ -6435,10 +7394,10 @@ class IsOneDivisionPermissionGrantedPipe {
6435
7394
  transform(divisionId, permissions) {
6436
7395
  return this.authService.isOneDivisionPermissionGranted(divisionId, permissions);
6437
7396
  }
6438
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6439
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, isStandalone: false, name: "isOneDivisionPermissionGranted" }); }
7397
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7398
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, isStandalone: false, name: "isOneDivisionPermissionGranted" }); }
6440
7399
  }
6441
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, decorators: [{
7400
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionPermissionGrantedPipe, decorators: [{
6442
7401
  type: Pipe,
6443
7402
  args: [{
6444
7403
  name: 'isOneDivisionPermissionGranted',
@@ -6452,10 +7411,10 @@ class IsOneDivisionRoleGrantedPipe {
6452
7411
  transform(divisionId, roles) {
6453
7412
  return this.authService.isOneDivisionRoleGranted(divisionId, roles);
6454
7413
  }
6455
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6456
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, isStandalone: false, name: "isOneDivisionRoleGranted" }); }
7414
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7415
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, isStandalone: false, name: "isOneDivisionRoleGranted" }); }
6457
7416
  }
6458
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, decorators: [{
7417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneDivisionRoleGrantedPipe, decorators: [{
6459
7418
  type: Pipe,
6460
7419
  args: [{
6461
7420
  name: 'isOneDivisionRoleGranted',
@@ -6469,10 +7428,10 @@ class IsOneActiveDivisionPermissionGrantedPipe {
6469
7428
  transform(permissions) {
6470
7429
  return this.authService.isOneActiveDivisionPermissionGranted(permissions);
6471
7430
  }
6472
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6473
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, isStandalone: false, name: "isOneActiveDivisionPermissionGranted" }); }
7431
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7432
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, isStandalone: false, name: "isOneActiveDivisionPermissionGranted" }); }
6474
7433
  }
6475
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, decorators: [{
7434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionPermissionGrantedPipe, decorators: [{
6476
7435
  type: Pipe,
6477
7436
  args: [{
6478
7437
  name: 'isOneActiveDivisionPermissionGranted',
@@ -6486,10 +7445,10 @@ class IsOneActiveDivisionRoleGrantedPipe {
6486
7445
  transform(roles) {
6487
7446
  return this.authService.isOneActiveDivisionRoleGranted(roles);
6488
7447
  }
6489
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6490
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, isStandalone: false, name: "isOneActiveDivisionRoleGranted" }); }
7448
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, deps: [{ token: NhAuthService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7449
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, isStandalone: false, name: "isOneActiveDivisionRoleGranted" }); }
6491
7450
  }
6492
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, decorators: [{
7451
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: IsOneActiveDivisionRoleGrantedPipe, decorators: [{
6493
7452
  type: Pipe,
6494
7453
  args: [{
6495
7454
  name: 'isOneActiveDivisionRoleGranted',
@@ -6509,10 +7468,10 @@ class NhBooleanToStringPipe {
6509
7468
  ? this.translateService.instant('Yes')
6510
7469
  : this.translateService.instant('No');
6511
7470
  }
6512
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBooleanToStringPipe, deps: [{ token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
6513
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: NhBooleanToStringPipe, isStandalone: false, name: "nhBooleanToString" }); }
7471
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBooleanToStringPipe, deps: [{ token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
7472
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhBooleanToStringPipe, isStandalone: false, name: "nhBooleanToString" }); }
6514
7473
  }
6515
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBooleanToStringPipe, decorators: [{
7474
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBooleanToStringPipe, decorators: [{
6516
7475
  type: Pipe,
6517
7476
  args: [{
6518
7477
  name: 'nhBooleanToString',
@@ -6527,10 +7486,10 @@ class SafeHtmlPipe {
6527
7486
  transform(value) {
6528
7487
  return this.sanitized.bypassSecurityTrustHtml(value);
6529
7488
  }
6530
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
6531
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: SafeHtmlPipe, isStandalone: false, name: "safeHtml" }); }
7489
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
7490
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: SafeHtmlPipe, isStandalone: false, name: "safeHtml" }); }
6532
7491
  }
6533
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: SafeHtmlPipe, decorators: [{
7492
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeHtmlPipe, decorators: [{
6534
7493
  type: Pipe,
6535
7494
  args: [{
6536
7495
  name: 'safeHtml',
@@ -6544,10 +7503,10 @@ class SafeUrlPipe {
6544
7503
  transform(value) {
6545
7504
  return this.sanitizer.bypassSecurityTrustUrl(value);
6546
7505
  }
6547
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
6548
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: SafeUrlPipe, isStandalone: false, name: "safeUrl" }); }
7506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
7507
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: SafeUrlPipe, isStandalone: false, name: "safeUrl" }); }
6549
7508
  }
6550
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: SafeUrlPipe, decorators: [{
7509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeUrlPipe, decorators: [{
6551
7510
  type: Pipe,
6552
7511
  args: [{
6553
7512
  name: 'safeUrl',
@@ -6561,10 +7520,10 @@ class SafeResourceUrlPipe {
6561
7520
  transform(value) {
6562
7521
  return this.sanitizer.bypassSecurityTrustResourceUrl(value);
6563
7522
  }
6564
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: SafeResourceUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
6565
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: SafeResourceUrlPipe, isStandalone: false, name: "safeResourceUrl" }); }
7523
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeResourceUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
7524
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: SafeResourceUrlPipe, isStandalone: false, name: "safeResourceUrl" }); }
6566
7525
  }
6567
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: SafeResourceUrlPipe, decorators: [{
7526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SafeResourceUrlPipe, decorators: [{
6568
7527
  type: Pipe,
6569
7528
  args: [{
6570
7529
  name: 'safeResourceUrl',
@@ -6586,10 +7545,10 @@ class NhToHeadDirective {
6586
7545
  ngOnDestroy() {
6587
7546
  this._renderer.removeChild(this._document.head, this._elementRef.nativeElement);
6588
7547
  }
6589
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhToHeadDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
6590
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.28", type: NhToHeadDirective, isStandalone: false, selector: "[nhToHead]", exportAs: ["nhToHead"], ngImport: i0 }); }
7548
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhToHeadDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
7549
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhToHeadDirective, isStandalone: false, selector: "[nhToHead]", exportAs: ["nhToHead"], ngImport: i0 }); }
6591
7550
  }
6592
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhToHeadDirective, decorators: [{
7551
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhToHeadDirective, decorators: [{
6593
7552
  type: Directive,
6594
7553
  args: [{
6595
7554
  selector: `[nhToHead]`,
@@ -6636,10 +7595,10 @@ class NhDebounceDirective {
6636
7595
  this.ngUnsubscribe.next();
6637
7596
  this.ngUnsubscribe.complete();
6638
7597
  }
6639
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDebounceDirective, deps: [{ token: i1$4.NgControl }], target: i0.ɵɵFactoryTarget.Directive }); }
6640
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.28", type: NhDebounceDirective, isStandalone: false, selector: "[ngModel][nhDebounce]", inputs: { debounceTime: { classPropertyName: "debounceTime", publicName: "nhDebounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDebounce: "onDebounce", preDebounce: "preDebounce" }, ngImport: i0 }); }
7598
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDebounceDirective, deps: [{ token: i1$4.NgControl }], target: i0.ɵɵFactoryTarget.Directive }); }
7599
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: NhDebounceDirective, isStandalone: false, selector: "[ngModel][nhDebounce]", inputs: { debounceTime: { classPropertyName: "debounceTime", publicName: "nhDebounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDebounce: "onDebounce", preDebounce: "preDebounce" }, ngImport: i0 }); }
6641
7600
  }
6642
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhDebounceDirective, decorators: [{
7601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhDebounceDirective, decorators: [{
6643
7602
  type: Directive,
6644
7603
  args: [{
6645
7604
  selector: '[ngModel][nhDebounce]',
@@ -6664,10 +7623,10 @@ class NhButtonDebounceDirective {
6664
7623
  this.clicks.complete();
6665
7624
  this.subscription?.unsubscribe();
6666
7625
  }
6667
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhButtonDebounceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6668
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.28", type: NhButtonDebounceDirective, isStandalone: false, selector: "[nhButtonDebounce]", inputs: { debounceTime: { classPropertyName: "debounceTime", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDebounce: "onDebounce" }, host: { listeners: { "click": "clickEvent($event)" } }, ngImport: i0 }); }
7626
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhButtonDebounceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7627
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: NhButtonDebounceDirective, isStandalone: false, selector: "[nhButtonDebounce]", inputs: { debounceTime: { classPropertyName: "debounceTime", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDebounce: "onDebounce" }, host: { listeners: { "click": "clickEvent($event)" } }, ngImport: i0 }); }
6669
7628
  }
6670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhButtonDebounceDirective, decorators: [{
7629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhButtonDebounceDirective, decorators: [{
6671
7630
  type: Directive,
6672
7631
  args: [{
6673
7632
  selector: '[nhButtonDebounce]',
@@ -6723,10 +7682,10 @@ class NhRouterLinkDirective {
6723
7682
  }
6724
7683
  return this.hostRouterLink.onClick(button, ctrlKey, shiftKey, altKey, metaKey);
6725
7684
  }
6726
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterLinkDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1$1.RouterLink }, { token: i1$1.Router }, { token: NhRouterService }, { token: i2.TranslateService }, { token: NH_ROUTER_LANGUAGE_CHANGE_METHOD, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
6727
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.28", type: NhRouterLinkDirective, isStandalone: false, selector: "[nhRouterLink]", inputs: { nhRouterLink: "nhRouterLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" } }, exportAs: ["nhRouterLink"], hostDirectives: [{ directive: i1$1.RouterLink, inputs: ["target", "target", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "info", "info", "relativeTo", "relativeTo", "preserveFragment", "preserveFragment", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl"] }], ngImport: i0 }); }
7685
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterLinkDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1$1.RouterLink }, { token: i1$1.Router }, { token: NhRouterService }, { token: i2.TranslateService }, { token: NH_ROUTER_LANGUAGE_CHANGE_METHOD, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
7686
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.33", type: NhRouterLinkDirective, isStandalone: false, selector: "[nhRouterLink]", inputs: { nhRouterLink: "nhRouterLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" } }, exportAs: ["nhRouterLink"], hostDirectives: [{ directive: i1$1.RouterLink, inputs: ["target", "target", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "info", "info", "relativeTo", "relativeTo", "preserveFragment", "preserveFragment", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl"] }], ngImport: i0 }); }
6728
7687
  }
6729
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhRouterLinkDirective, decorators: [{
7688
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhRouterLinkDirective, decorators: [{
6730
7689
  type: Directive,
6731
7690
  args: [{
6732
7691
  selector: `[nhRouterLink]`,
@@ -6783,10 +7742,10 @@ class NhJsonLdComponent {
6783
7742
  const html = `<script type="application/ld+json">${json}</script>`;
6784
7743
  return this._sanitizer.bypassSecurityTrustHtml(html);
6785
7744
  }
6786
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhJsonLdComponent, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
6787
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhJsonLdComponent, isStandalone: false, selector: "nh-json-ld", inputs: { json: "json" }, host: { properties: { "innerHTML": "this._jsonLD" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7745
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdComponent, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
7746
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhJsonLdComponent, isStandalone: false, selector: "nh-json-ld", inputs: { json: "json" }, host: { properties: { "innerHTML": "this._jsonLD" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6788
7747
  }
6789
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhJsonLdComponent, decorators: [{
7748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhJsonLdComponent, decorators: [{
6790
7749
  type: Component,
6791
7750
  args: [{
6792
7751
  selector: 'nh-json-ld',
@@ -6808,10 +7767,10 @@ class NhModalLoadingComponent {
6808
7767
  setModalComponentRef(ref) {
6809
7768
  this.modalComponentRef = ref;
6810
7769
  }
6811
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6812
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.28", type: NhModalLoadingComponent, isStandalone: false, selector: "nh-loading-modal", inputs: { information: { classPropertyName: "information", publicName: "information", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"grid center\">\n <nh-loader [hasBackdrop]=\"false\"></nh-loader>\n {{ information() }}\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: NhLoaderComponent, selector: "nh-loader", inputs: ["dark", "hasBackdrop", "backdropTransparent", "containerClass"] }] }); }
7770
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7771
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhModalLoadingComponent, isStandalone: false, selector: "nh-loading-modal", inputs: { information: { classPropertyName: "information", publicName: "information", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"grid center\">\n <nh-loader [hasBackdrop]=\"false\"></nh-loader>\n {{ information() }}\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: NhLoaderComponent, selector: "nh-loader", inputs: ["dark", "hasBackdrop", "backdropTransparent", "containerClass"] }] }); }
6813
7772
  }
6814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalLoadingComponent, decorators: [{
7773
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalLoadingComponent, decorators: [{
6815
7774
  type: Component,
6816
7775
  args: [{ selector: 'nh-loading-modal', standalone: false, template: "<div class=\"grid center\">\n <nh-loader [hasBackdrop]=\"false\"></nh-loader>\n {{ information() }}\n</div>\n" }]
6817
7776
  }], propDecorators: { information: [{ type: i0.Input, args: [{ isSignal: true, alias: "information", required: false }] }] } });
@@ -6976,10 +7935,10 @@ class NhPageTypeBaseComponent {
6976
7935
  appOnDestroy() {
6977
7936
  return Promise.resolve();
6978
7937
  }
6979
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
6980
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhPageTypeBaseComponent, isStandalone: false, selector: "nh-page-base-component-type", usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
7938
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
7939
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhPageTypeBaseComponent, isStandalone: false, selector: "nh-page-base-component-type", usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
6981
7940
  }
6982
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageTypeBaseComponent, decorators: [{
7941
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageTypeBaseComponent, decorators: [{
6983
7942
  type: Component,
6984
7943
  args: [{
6985
7944
  selector: 'nh-page-base-component-type',
@@ -6991,10 +7950,10 @@ class NhPageBaseComponent extends NhPageTypeBaseComponent {
6991
7950
  constructor() {
6992
7951
  super(NhAuthService);
6993
7952
  }
6994
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6995
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhPageBaseComponent, isStandalone: false, selector: "nh-page-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7953
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7954
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhPageBaseComponent, isStandalone: false, selector: "nh-page-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
6996
7955
  }
6997
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageBaseComponent, decorators: [{
7956
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageBaseComponent, decorators: [{
6998
7957
  type: Component,
6999
7958
  args: [{
7000
7959
  selector: 'nh-page-base-component',
@@ -7017,10 +7976,10 @@ class NhTypedPageTypeBaseComponent extends NhPageTypeBaseComponent {
7017
7976
  constructor(authServiceType) {
7018
7977
  super(authServiceType);
7019
7978
  }
7020
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTypedPageTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
7021
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhTypedPageTypeBaseComponent, isStandalone: false, selector: "nh-page-base-component-type-typed", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7979
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
7980
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhTypedPageTypeBaseComponent, isStandalone: false, selector: "nh-page-base-component-type-typed", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7022
7981
  }
7023
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTypedPageTypeBaseComponent, decorators: [{
7982
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageTypeBaseComponent, decorators: [{
7024
7983
  type: Component,
7025
7984
  args: [{
7026
7985
  selector: 'nh-page-base-component-type-typed',
@@ -7032,10 +7991,10 @@ class NhTypedPageBaseComponent extends NhTypedPageTypeBaseComponent {
7032
7991
  constructor() {
7033
7992
  super(NhAuthService);
7034
7993
  }
7035
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTypedPageBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7036
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhTypedPageBaseComponent, isStandalone: false, selector: "nh-page-base-component-typed", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7994
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7995
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhTypedPageBaseComponent, isStandalone: false, selector: "nh-page-base-component-typed", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7037
7996
  }
7038
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhTypedPageBaseComponent, decorators: [{
7997
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhTypedPageBaseComponent, decorators: [{
7039
7998
  type: Component,
7040
7999
  args: [{
7041
8000
  selector: 'nh-page-base-component-typed',
@@ -7473,10 +8432,10 @@ class NhFormDropDownComponent extends AbstractValueAccessor {
7473
8432
  }
7474
8433
  this.options = newSelectedOptions.concat(this.options);
7475
8434
  }
7476
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhFormDropDownComponent, deps: [{ token: i2.TranslateService }, { token: i0.ChangeDetectorRef }, { token: NhCommonModuleConfig, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
7477
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhFormDropDownComponent, isStandalone: false, selector: "nh-form-dropdown", inputs: { disabled: "disabled", settings: "settings" }, outputs: { onLazyLoadError: "onLazyLoadError", closed: "closed", opened: "opened" }, providers: [MakeProvider(NhFormDropDownComponent)], viewQueries: [{ propertyName: "lazyLoadComponent", first: true, predicate: ["lazyLoadComponent"], descendants: true }, { propertyName: "noLazyLoadComponent", first: true, predicate: ["noLazyLoadComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div>\n @if (settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #lazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"onDropdownOpened()\"\n (ngModelChange)=\"onModelChange($event)\"\n (lazyLoad)=\"lazyLoadData($event)\"\n ></ngx-bootstrap-multiselect>\n }\n @if (!settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #noLazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"opened.emit()\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n ></ngx-bootstrap-multiselect>\n }\n</div>\n", styles: ["app-form-dropdown ngx-bootstrap-multiselect>div.dropdown{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>button.dropdown-toggle{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>div.dropdown-menu{width:100%}\n"], dependencies: [{ kind: "component", type: i2$2.NgxDropdownMultiselectComponent, selector: "ngx-bootstrap-multiselect", inputs: ["options", "settings", "texts", "disabled", "disabledSelection", "searchFunction"], outputs: ["selectionLimitReached", "dropdownClosed", "dropdownOpened", "added", "removed", "lazyLoad", "filter"] }, { 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"] }], encapsulation: i0.ViewEncapsulation.None }); }
8435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormDropDownComponent, deps: [{ token: i2.TranslateService }, { token: i0.ChangeDetectorRef }, { token: NhCommonModuleConfig, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
8436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhFormDropDownComponent, isStandalone: false, selector: "nh-form-dropdown", inputs: { disabled: "disabled", settings: "settings" }, outputs: { onLazyLoadError: "onLazyLoadError", closed: "closed", opened: "opened" }, providers: [MakeProvider(NhFormDropDownComponent)], viewQueries: [{ propertyName: "lazyLoadComponent", first: true, predicate: ["lazyLoadComponent"], descendants: true }, { propertyName: "noLazyLoadComponent", first: true, predicate: ["noLazyLoadComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div>\n @if (settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #lazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"onDropdownOpened()\"\n (ngModelChange)=\"onModelChange($event)\"\n (lazyLoad)=\"lazyLoadData($event)\"\n ></ngx-bootstrap-multiselect>\n }\n @if (!settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #noLazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"opened.emit()\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n ></ngx-bootstrap-multiselect>\n }\n</div>\n", styles: ["app-form-dropdown ngx-bootstrap-multiselect>div.dropdown{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>button.dropdown-toggle{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>div.dropdown-menu{width:100%}\n"], dependencies: [{ kind: "component", type: i2$2.NgxDropdownMultiselectComponent, selector: "ngx-bootstrap-multiselect", inputs: ["options", "settings", "texts", "disabled", "disabledSelection", "searchFunction"], outputs: ["selectionLimitReached", "dropdownClosed", "dropdownOpened", "added", "removed", "lazyLoad", "filter"] }, { 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"] }], encapsulation: i0.ViewEncapsulation.None }); }
7478
8437
  }
7479
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhFormDropDownComponent, decorators: [{
8438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormDropDownComponent, decorators: [{
7480
8439
  type: Component,
7481
8440
  args: [{ selector: 'nh-form-dropdown', encapsulation: ViewEncapsulation.None, providers: [MakeProvider(NhFormDropDownComponent)], standalone: false, template: "<div>\n @if (settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #lazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"onDropdownOpened()\"\n (ngModelChange)=\"onModelChange($event)\"\n (lazyLoad)=\"lazyLoadData($event)\"\n ></ngx-bootstrap-multiselect>\n }\n @if (!settings.lazyLoad) {\n <ngx-bootstrap-multiselect\n #noLazyLoadComponent\n (focus)=\"hasFocus = true\"\n (blur)=\"hasFocus = false\"\n [options]=\"options\"\n [disabled]=\"disabled\"\n (dropdownClosed)=\"closed.emit()\"\n (dropdownOpened)=\"opened.emit()\"\n [texts]=\"settings.multiSelectTexts\"\n [settings]=\"settings.multiSelectSettings\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onModelChange($event)\"\n ></ngx-bootstrap-multiselect>\n }\n</div>\n", styles: ["app-form-dropdown ngx-bootstrap-multiselect>div.dropdown{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>button.dropdown-toggle{width:100%}app-form-dropdown ngx-bootstrap-multiselect>div.dropdown>div.dropdown-menu{width:100%}\n"] }]
7482
8441
  }], ctorParameters: () => [{ type: i2.TranslateService }, { type: i0.ChangeDetectorRef }, { type: NhCommonModuleConfig, decorators: [{
@@ -7514,10 +8473,10 @@ class NhFormErrorMessageComponent {
7514
8473
  }
7515
8474
  return errors;
7516
8475
  }
7517
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhFormErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7518
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhFormErrorMessageComponent, isStandalone: false, selector: "nh-form-error-message", inputs: { control: "control" }, ngImport: i0, template: "@if (getErrors().length > 0) {\n <div class=\"error-list\">\n @for (error of this.getErrors(); track error) {\n <div>\n <p class=\"text-danger m-0\"><i>{{ error|translate }}</i></p>\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
8476
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8477
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhFormErrorMessageComponent, isStandalone: false, selector: "nh-form-error-message", inputs: { control: "control" }, ngImport: i0, template: "@if (getErrors().length > 0) {\n <div class=\"error-list\">\n @for (error of this.getErrors(); track error) {\n <div>\n <p class=\"text-danger m-0\"><i>{{ error|translate }}</i></p>\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
7519
8478
  }
7520
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhFormErrorMessageComponent, decorators: [{
8479
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhFormErrorMessageComponent, decorators: [{
7521
8480
  type: Component,
7522
8481
  args: [{ selector: 'nh-form-error-message', encapsulation: ViewEncapsulation.None, standalone: false, template: "@if (getErrors().length > 0) {\n <div class=\"error-list\">\n @for (error of this.getErrors(); track error) {\n <div>\n <p class=\"text-danger m-0\"><i>{{ error|translate }}</i></p>\n </div>\n }\n </div>\n}\n" }]
7523
8482
  }], ctorParameters: () => [], propDecorators: { control: [{
@@ -7731,10 +8690,10 @@ class NhCollectionTypeBaseComponent {
7731
8690
  this.requestOptions.page = 1;
7732
8691
  await this.load();
7733
8692
  }
7734
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCollectionTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
7735
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.28", type: NhCollectionTypeBaseComponent, isStandalone: false, selector: "nh-shared-collection-base-component", inputs: { queryParamUpdates: { classPropertyName: "queryParamUpdates", publicName: "queryParamUpdates", isSignal: true, isRequired: false, transformFunction: null }, localStorageUpdates: { classPropertyName: "localStorageUpdates", publicName: "localStorageUpdates", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryParamUpdates: "queryParamUpdatesChange", localStorageUpdates: "localStorageUpdatesChange" }, usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
8693
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionTypeBaseComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
8694
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhCollectionTypeBaseComponent, isStandalone: false, selector: "nh-shared-collection-base-component", inputs: { queryParamUpdates: { classPropertyName: "queryParamUpdates", publicName: "queryParamUpdates", isSignal: true, isRequired: false, transformFunction: null }, localStorageUpdates: { classPropertyName: "localStorageUpdates", publicName: "localStorageUpdates", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryParamUpdates: "queryParamUpdatesChange", localStorageUpdates: "localStorageUpdatesChange" }, usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
7736
8695
  }
7737
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCollectionTypeBaseComponent, decorators: [{
8696
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionTypeBaseComponent, decorators: [{
7738
8697
  type: Component,
7739
8698
  args: [{
7740
8699
  selector: 'nh-shared-collection-base-component',
@@ -7746,10 +8705,10 @@ class NhCollectionBaseComponent extends NhCollectionTypeBaseComponent {
7746
8705
  constructor() {
7747
8706
  super(NhAuthService);
7748
8707
  }
7749
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCollectionBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7750
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhCollectionBaseComponent, isStandalone: false, selector: "nh-shared-collection-type-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
8708
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8709
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhCollectionBaseComponent, isStandalone: false, selector: "nh-shared-collection-type-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7751
8710
  }
7752
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCollectionBaseComponent, decorators: [{
8711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCollectionBaseComponent, decorators: [{
7753
8712
  type: Component,
7754
8713
  args: [{
7755
8714
  selector: 'nh-shared-collection-type-base-component',
@@ -7909,10 +8868,10 @@ class NhMutateBaseTypeComponent {
7909
8868
  this.isSubmitting = false;
7910
8869
  }
7911
8870
  }
7912
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhMutateBaseTypeComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
7913
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhMutateBaseTypeComponent, isStandalone: false, selector: "nh-mutate-base-type-component", outputs: { created: "created", updated: "updated" }, viewQueries: [{ propertyName: "form", first: true, predicate: NgForm, descendants: true }], usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
8871
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseTypeComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
8872
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhMutateBaseTypeComponent, isStandalone: false, selector: "nh-mutate-base-type-component", outputs: { created: "created", updated: "updated" }, viewQueries: [{ propertyName: "form", first: true, predicate: NgForm, descendants: true }], usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
7914
8873
  }
7915
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhMutateBaseTypeComponent, decorators: [{
8874
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseTypeComponent, decorators: [{
7916
8875
  type: Component,
7917
8876
  args: [{
7918
8877
  selector: 'nh-mutate-base-type-component',
@@ -7931,10 +8890,10 @@ class NhMutateBaseComponent extends NhMutateBaseTypeComponent {
7931
8890
  constructor() {
7932
8891
  super(NhAuthService);
7933
8892
  }
7934
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhMutateBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7935
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhMutateBaseComponent, isStandalone: false, selector: "nh-mutate-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
8893
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8894
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhMutateBaseComponent, isStandalone: false, selector: "nh-mutate-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7936
8895
  }
7937
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhMutateBaseComponent, decorators: [{
8896
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhMutateBaseComponent, decorators: [{
7938
8897
  type: Component,
7939
8898
  args: [{
7940
8899
  selector: 'nh-mutate-base-component',
@@ -7960,10 +8919,10 @@ class NhModalMutateBaseTypeComponent extends NhMutateBaseTypeComponent {
7960
8919
  closeDialog(event) {
7961
8920
  this.modalComponentRef?.close();
7962
8921
  }
7963
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalMutateBaseTypeComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
7964
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhModalMutateBaseTypeComponent, isStandalone: false, selector: "nh-modal-mutate-base-type-component", host: { listeners: { "document:keyup": "onKeyUp($event)" } }, usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
8922
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseTypeComponent, deps: [{ token: i0.Type }], target: i0.ɵɵFactoryTarget.Component }); }
8923
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhModalMutateBaseTypeComponent, isStandalone: false, selector: "nh-modal-mutate-base-type-component", host: { listeners: { "document:keyup": "onKeyUp($event)" } }, usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7965
8924
  }
7966
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalMutateBaseTypeComponent, decorators: [{
8925
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseTypeComponent, decorators: [{
7967
8926
  type: Component,
7968
8927
  args: [{
7969
8928
  selector: 'nh-modal-mutate-base-type-component',
@@ -7978,10 +8937,10 @@ class NhModalMutateBaseComponent extends NhModalMutateBaseTypeComponent {
7978
8937
  constructor() {
7979
8938
  super(NhAuthService);
7980
8939
  }
7981
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalMutateBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7982
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhModalMutateBaseComponent, isStandalone: false, selector: "nh-modal-mutate-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
8940
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8941
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhModalMutateBaseComponent, isStandalone: false, selector: "nh-modal-mutate-base-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
7983
8942
  }
7984
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhModalMutateBaseComponent, decorators: [{
8943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhModalMutateBaseComponent, decorators: [{
7985
8944
  type: Component,
7986
8945
  args: [{
7987
8946
  selector: 'nh-modal-mutate-base-component',
@@ -8001,10 +8960,10 @@ class NhErrorComponent {
8001
8960
  }
8002
8961
  return this.errors()?.items.find(x => x.name?.toLowerCase() === this.key()?.toLowerCase())?.errorMessages || [];
8003
8962
  }
8004
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8005
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhErrorComponent, isStandalone: false, selector: "nh-error", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "\n@if(displayErrors.length > 0) {\n <ul class=\"text-danger validation-errors\">\n @for(error of displayErrors; track $index) {\n <li>{{error}}</li>\n }\n </ul>\n}\n\n", styles: [""] }); }
8963
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8964
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhErrorComponent, isStandalone: false, selector: "nh-error", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "\n@if(displayErrors.length > 0) {\n <ul class=\"text-danger validation-errors\">\n @for(error of displayErrors; track $index) {\n <li>{{error}}</li>\n }\n </ul>\n}\n\n", styles: [""] }); }
8006
8965
  }
8007
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhErrorComponent, decorators: [{
8966
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhErrorComponent, decorators: [{
8008
8967
  type: Component,
8009
8968
  args: [{ selector: 'nh-error', standalone: false, template: "\n@if(displayErrors.length > 0) {\n <ul class=\"text-danger validation-errors\">\n @for(error of displayErrors; track $index) {\n <li>{{error}}</li>\n }\n </ul>\n}\n\n" }]
8010
8969
  }], propDecorators: { key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: true }] }] } });
@@ -8151,10 +9110,10 @@ class NhUserNotificationsAbstractComponent extends NhCollectionBaseComponent {
8151
9110
  this.lastNotificationCount = state.overview.totalCount;
8152
9111
  this.lastUnreadNotificationCount = state.overview.unreadCount;
8153
9112
  }
8154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhUserNotificationsAbstractComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.28", type: NhUserNotificationsAbstractComponent, isStandalone: false, selector: "nh-user-notifications-abstract", inputs: { allowStart: { classPropertyName: "allowStart", publicName: "allowStart", isSignal: false, isRequired: false, transformFunction: null }, allowStop: { classPropertyName: "allowStop", publicName: "allowStop", isSignal: false, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: false, isRequired: false, transformFunction: null }, autoLoadNotificationChanges: { classPropertyName: "autoLoadNotificationChanges", publicName: "autoLoadNotificationChanges", isSignal: false, isRequired: false, transformFunction: null }, partialLocalStorageKey: { classPropertyName: "partialLocalStorageKey", publicName: "partialLocalStorageKey", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
9113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationsAbstractComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.33", type: NhUserNotificationsAbstractComponent, isStandalone: false, selector: "nh-user-notifications-abstract", inputs: { allowStart: { classPropertyName: "allowStart", publicName: "allowStart", isSignal: false, isRequired: false, transformFunction: null }, allowStop: { classPropertyName: "allowStop", publicName: "allowStop", isSignal: false, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: false, isRequired: false, transformFunction: null }, autoLoadNotificationChanges: { classPropertyName: "autoLoadNotificationChanges", publicName: "autoLoadNotificationChanges", isSignal: false, isRequired: false, transformFunction: null }, partialLocalStorageKey: { classPropertyName: "partialLocalStorageKey", publicName: "partialLocalStorageKey", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
8156
9115
  }
8157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhUserNotificationsAbstractComponent, decorators: [{
9116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhUserNotificationsAbstractComponent, decorators: [{
8158
9117
  type: Component,
8159
9118
  args: [{
8160
9119
  selector: 'nh-user-notifications-abstract',
@@ -8218,10 +9177,10 @@ class NhBackgroundOperationProgressComponent {
8218
9177
  return !operation.sensitiveDataRedactedAt
8219
9178
  && ['Failed', 'Cancelled', 'TimedOut'].includes(nhBackgroundOperationStatusName(operation.status));
8220
9179
  }
8221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8222
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhBackgroundOperationProgressComponent, isStandalone: true, selector: "nh-background-operation-progress", inputs: { operation: "operation", showEvents: "showEvents", showActions: "showActions" }, outputs: { cancelRequested: "cancelRequested", retryRequested: "retryRequested" }, ngImport: i0, template: "<section class=\"nh-operation\" [attr.data-status]=\"statusKey(operation.status)\">\n <header class=\"nh-operation__header\">\n <div>\n <p class=\"nh-operation__eyebrow\">{{ 'nh-background-operations.operation' | translate }}</p>\n <h2>{{ operation.operationType }}</h2>\n </div>\n <span class=\"nh-operation__status\">{{ statusKey(operation.status) | translate }}</span>\n </header>\n\n <div class=\"nh-operation__overall\">\n <div class=\"nh-operation__progress-label\">\n <span>{{ operation.progressMessageKey ? (operation.progressMessageKey | translate: arguments(operation.progressMessageArgumentsJson)) : ('nh-background-operations.progress' | translate) }}</span>\n <strong>{{ percentage(operation.progressPercentage) | number:'1.0-1' }}%</strong>\n </div>\n <div class=\"nh-operation__progress\" role=\"progressbar\"\n [attr.aria-label]=\"'nh-background-operations.overall-progress' | translate\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(operation.progressPercentage)\">\n <span [style.width.%]=\"percentage(operation.progressPercentage)\"></span>\n </div>\n </div>\n\n @if (showActions && (canCancel(operation.status) || canRetry(operation))) {\n <div class=\"nh-operation__actions\">\n @if (canCancel(operation.status)) {\n <button type=\"button\" (click)=\"cancelRequested.emit(operation.id)\">\n {{ 'nh-background-operations.cancel' | translate }}\n </button>\n }\n @if (canRetry(operation)) {\n <button type=\"button\" (click)=\"retryRequested.emit(operation.id)\">\n {{ 'nh-background-operations.retry' | translate }}\n </button>\n }\n </div>\n }\n\n <div class=\"nh-operation__steps\" role=\"list\" [attr.aria-label]=\"'nh-background-operations.steps' | translate\">\n <ng-template #renderStep let-step let-depth=\"depth\">\n <article class=\"nh-step\" role=\"listitem\" [style.--nh-step-depth]=\"depth\">\n <div class=\"nh-step__heading\">\n <div>\n <strong>{{ stepTitle(step) | translate: arguments(step.titleArgumentsJson) }}</strong>\n @if (step.messageKey) {\n <span>{{ step.messageKey | translate: arguments(step.messageArgumentsJson) }}</span>\n }\n </div>\n <span class=\"nh-step__status\">{{ stepStatusKey(step.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"stepTitle(step) | translate: arguments(step.titleArgumentsJson)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(step.percentage)\">\n <span [style.width.%]=\"percentage(step.percentage)\"></span>\n </div>\n @if (hasBatch(step)) {\n <dl class=\"nh-step__batch\">\n <div><dt>{{ 'nh-background-operations.batch.processed' | translate }}</dt><dd>{{ step.processedItems }} / {{ step.discoveredItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.succeeded' | translate }}</dt><dd>{{ step.succeededItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.failed' | translate }}</dt><dd>{{ step.failedItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.skipped' | translate }}</dt><dd>{{ step.skippedItems }}</dd></div>\n @if (step.retriedItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.retried' | translate }}</dt><dd>{{ step.retriedItems }}</dd></div>\n }\n @if (step.activeItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.active' | translate }}</dt><dd>{{ step.activeItems }}</dd></div>\n }\n </dl>\n }\n </article>\n @for (child of step.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: child, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (step of operation.steps; track step.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: step, depth: 0}\"></ng-container>\n } @empty {\n <p class=\"nh-operation__empty\">{{ 'nh-background-operations.no-steps' | translate }}</p>\n }\n </div>\n\n @if (operation.children.length > 0) {\n <section class=\"nh-operation__children\">\n <h3>{{ 'nh-background-operations.children' | translate }}</h3>\n <div role=\"list\" [attr.aria-label]=\"'nh-background-operations.children' | translate\">\n <ng-template #renderChild let-child let-depth=\"depth\">\n <article class=\"nh-child\" role=\"listitem\" [style.--nh-child-depth]=\"depth\">\n <div class=\"nh-child__heading\">\n <div>\n <strong>{{ childLabel(child) }}</strong>\n <span>{{ child.operationType }}</span>\n </div>\n <span class=\"nh-child__status\">{{ statusKey(child.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"childLabel(child)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(child.progressPercentage)\">\n <span [style.width.%]=\"percentage(child.progressPercentage)\"></span>\n </div>\n @if (child.resultUrl) {\n <a [href]=\"child.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </article>\n @for (nestedChild of child.children; track nestedChild.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: nestedChild, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (child of operation.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: child, depth: 0}\"></ng-container>\n }\n </div>\n </section>\n }\n\n @if (showEvents && operation.events.length > 0) {\n <section class=\"nh-operation__events\">\n <h3>{{ 'nh-background-operations.activity' | translate }}</h3>\n <ol>\n @for (event of operation.events; track event.id) {\n @if (event.messageKey) {\n <li [class.nh-operation__event--operator]=\"event.isOperatorOnly\">\n <time [attr.datetime]=\"event.creationDateTime\">{{ event.creationDateTime | date:'short' }}</time>\n <span>\n {{ event.messageKey | translate: arguments(event.messageArgumentsJson) }}\n @if (event.isOperatorOnly) {\n <small class=\"nh-operation__event-badge\">{{ 'nh-background-operations.operator-only' | translate }}</small>\n }\n </span>\n @if (event.resultUrl) {\n <a [href]=\"event.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </li>\n }\n }\n </ol>\n </section>\n }\n</section>\n", styles: [":host{display:block;color:var(--nh-color-text, #fff)}.nh-operation{display:grid;gap:1rem;padding:1rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:1rem;background:var(--nh-color-surface, #101827)}.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__progress-label,.nh-operation__actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-operation__header h2,.nh-operation__events h3,.nh-operation__children h3,.nh-operation__eyebrow,.nh-step__heading span,.nh-step__batch,.nh-operation__events ol{margin:0}.nh-operation__eyebrow{color:var(--nh-color-muted, #9aa8bc);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}.nh-operation__status,.nh-step__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));font-size:.75rem}.nh-operation__progress,.nh-step__progress{overflow:hidden;height:.5rem;border-radius:.25rem;background:var(--nh-color-progress-track, rgba(255, 255, 255, .1))}.nh-operation__progress span,.nh-step__progress span{display:block;height:100%;background:var(--nh-color-progress, #ff6700);transition:width .18s ease-out}.nh-operation__steps{display:grid;gap:.625rem}.nh-operation__children,.nh-operation__children>div{display:grid;gap:.625rem}.nh-child{display:grid;gap:.5rem;margin-inline-start:min(var(--nh-child-depth) * 1rem,3rem);padding:.75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:.5rem;background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-child__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-child__heading>div{display:grid;gap:.125rem}.nh-child__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-child__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));color:var(--nh-color-text, #fff);font-size:.75rem}.nh-child a{justify-self:start}.nh-step{display:grid;gap:.5rem;margin-inline-start:calc(var(--nh-step-depth) * 1rem);padding:.75rem;border-inline-start:2px solid var(--nh-color-progress, #ff6700);background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-step__heading>div{display:grid;gap:.125rem}.nh-step__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-step__batch{display:flex;flex-wrap:wrap;gap:.5rem 1rem;color:var(--nh-color-muted, #9aa8bc);font-size:.75rem}.nh-step__batch div{display:flex;gap:.25rem}.nh-step__batch dd{margin:0;color:var(--nh-color-text, #fff)}.nh-operation__actions{justify-content:flex-end}.nh-operation__actions button{min-height:2.25rem;padding:.4rem .75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.5rem;color:inherit;background:transparent}.nh-operation__actions button:focus-visible,.nh-child a:focus-visible,.nh-operation__events a:focus-visible{outline:2px solid var(--nh-color-progress, #ff6700);outline-offset:2px}.nh-operation__events ol{display:grid;gap:.5rem;padding:0;list-style:none}.nh-operation__events li{display:grid;grid-template-columns:minmax(7rem,auto) 1fr auto;gap:.75rem;color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-operation__events li span{color:var(--nh-color-text, #fff)}.nh-operation__event-badge{margin-left:.5rem;padding:.125rem .375rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.4rem;color:var(--nh-color-muted, #9aa8bc);font-size:.7rem;white-space:nowrap}@media(prefers-reduced-motion:reduce){.nh-operation__progress span,.nh-step__progress span{transition:none}}@media(max-width:40rem){.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__events li{align-items:flex-start;grid-template-columns:1fr}.nh-operation__header,.nh-step__heading{flex-direction:column}.nh-child__heading{align-items:flex-start;flex-direction:column}.nh-step{margin-inline-start:min(var(--nh-step-depth) * .5rem,1.5rem)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$3.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9180
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9181
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhBackgroundOperationProgressComponent, isStandalone: true, selector: "nh-background-operation-progress", inputs: { operation: "operation", showEvents: "showEvents", showActions: "showActions" }, outputs: { cancelRequested: "cancelRequested", retryRequested: "retryRequested" }, ngImport: i0, template: "<section class=\"nh-operation\" [attr.data-status]=\"statusKey(operation.status)\">\n <header class=\"nh-operation__header\">\n <div>\n <p class=\"nh-operation__eyebrow\">{{ 'nh-background-operations.operation' | translate }}</p>\n <h2>{{ operation.operationType }}</h2>\n </div>\n <span class=\"nh-operation__status\">{{ statusKey(operation.status) | translate }}</span>\n </header>\n\n <div class=\"nh-operation__overall\">\n <div class=\"nh-operation__progress-label\">\n <span>{{ operation.progressMessageKey ? (operation.progressMessageKey | translate: arguments(operation.progressMessageArgumentsJson)) : ('nh-background-operations.progress' | translate) }}</span>\n <strong>{{ percentage(operation.progressPercentage) | number:'1.0-1' }}%</strong>\n </div>\n <div class=\"nh-operation__progress\" role=\"progressbar\"\n [attr.aria-label]=\"'nh-background-operations.overall-progress' | translate\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(operation.progressPercentage)\">\n <span [style.width.%]=\"percentage(operation.progressPercentage)\"></span>\n </div>\n </div>\n\n @if (showActions && (canCancel(operation.status) || canRetry(operation))) {\n <div class=\"nh-operation__actions\">\n @if (canCancel(operation.status)) {\n <button type=\"button\" (click)=\"cancelRequested.emit(operation.id)\">\n {{ 'nh-background-operations.cancel' | translate }}\n </button>\n }\n @if (canRetry(operation)) {\n <button type=\"button\" (click)=\"retryRequested.emit(operation.id)\">\n {{ 'nh-background-operations.retry' | translate }}\n </button>\n }\n </div>\n }\n\n <div class=\"nh-operation__steps\" role=\"list\" [attr.aria-label]=\"'nh-background-operations.steps' | translate\">\n <ng-template #renderStep let-step let-depth=\"depth\">\n <article class=\"nh-step\" role=\"listitem\" [style.--nh-step-depth]=\"depth\">\n <div class=\"nh-step__heading\">\n <div>\n <strong>{{ stepTitle(step) | translate: arguments(step.titleArgumentsJson) }}</strong>\n @if (step.messageKey) {\n <span>{{ step.messageKey | translate: arguments(step.messageArgumentsJson) }}</span>\n }\n </div>\n <span class=\"nh-step__status\">{{ stepStatusKey(step.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"stepTitle(step) | translate: arguments(step.titleArgumentsJson)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(step.percentage)\">\n <span [style.width.%]=\"percentage(step.percentage)\"></span>\n </div>\n @if (hasBatch(step)) {\n <dl class=\"nh-step__batch\">\n <div><dt>{{ 'nh-background-operations.batch.processed' | translate }}</dt><dd>{{ step.processedItems }} / {{ step.discoveredItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.succeeded' | translate }}</dt><dd>{{ step.succeededItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.failed' | translate }}</dt><dd>{{ step.failedItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.skipped' | translate }}</dt><dd>{{ step.skippedItems }}</dd></div>\n @if (step.retriedItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.retried' | translate }}</dt><dd>{{ step.retriedItems }}</dd></div>\n }\n @if (step.activeItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.active' | translate }}</dt><dd>{{ step.activeItems }}</dd></div>\n }\n </dl>\n }\n </article>\n @for (child of step.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: child, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (step of operation.steps; track step.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: step, depth: 0}\"></ng-container>\n } @empty {\n <p class=\"nh-operation__empty\">{{ 'nh-background-operations.no-steps' | translate }}</p>\n }\n </div>\n\n @if (operation.children.length > 0) {\n <section class=\"nh-operation__children\">\n <h3>{{ 'nh-background-operations.children' | translate }}</h3>\n <div role=\"list\" [attr.aria-label]=\"'nh-background-operations.children' | translate\">\n <ng-template #renderChild let-child let-depth=\"depth\">\n <article class=\"nh-child\" role=\"listitem\" [style.--nh-child-depth]=\"depth\">\n <div class=\"nh-child__heading\">\n <div>\n <strong>{{ childLabel(child) }}</strong>\n <span>{{ child.operationType }}</span>\n </div>\n <span class=\"nh-child__status\">{{ statusKey(child.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"childLabel(child)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(child.progressPercentage)\">\n <span [style.width.%]=\"percentage(child.progressPercentage)\"></span>\n </div>\n @if (child.resultUrl) {\n <a [href]=\"child.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </article>\n @for (nestedChild of child.children; track nestedChild.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: nestedChild, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (child of operation.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: child, depth: 0}\"></ng-container>\n }\n </div>\n </section>\n }\n\n @if (showEvents && operation.events.length > 0) {\n <section class=\"nh-operation__events\">\n <h3>{{ 'nh-background-operations.activity' | translate }}</h3>\n <ol>\n @for (event of operation.events; track event.id) {\n @if (event.messageKey) {\n <li [class.nh-operation__event--operator]=\"event.isOperatorOnly\">\n <time [attr.datetime]=\"event.creationDateTime\">{{ event.creationDateTime | date:'short' }}</time>\n <span>\n {{ event.messageKey | translate: arguments(event.messageArgumentsJson) }}\n @if (event.isOperatorOnly) {\n <small class=\"nh-operation__event-badge\">{{ 'nh-background-operations.operator-only' | translate }}</small>\n }\n </span>\n @if (event.resultUrl) {\n <a [href]=\"event.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </li>\n }\n }\n </ol>\n </section>\n }\n</section>\n", styles: [":host{display:block;color:var(--nh-color-text, #fff)}.nh-operation{display:grid;gap:1rem;padding:1rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:1rem;background:var(--nh-color-surface, #101827)}.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__progress-label,.nh-operation__actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-operation__header h2,.nh-operation__events h3,.nh-operation__children h3,.nh-operation__eyebrow,.nh-step__heading span,.nh-step__batch,.nh-operation__events ol{margin:0}.nh-operation__eyebrow{color:var(--nh-color-muted, #9aa8bc);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}.nh-operation__status,.nh-step__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));font-size:.75rem}.nh-operation__progress,.nh-step__progress{overflow:hidden;height:.5rem;border-radius:.25rem;background:var(--nh-color-progress-track, rgba(255, 255, 255, .1))}.nh-operation__progress span,.nh-step__progress span{display:block;height:100%;background:var(--nh-color-progress, #ff6700);transition:width .18s ease-out}.nh-operation__steps{display:grid;gap:.625rem}.nh-operation__children,.nh-operation__children>div{display:grid;gap:.625rem}.nh-child{display:grid;gap:.5rem;margin-inline-start:min(var(--nh-child-depth) * 1rem,3rem);padding:.75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:.5rem;background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-child__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-child__heading>div{display:grid;gap:.125rem}.nh-child__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-child__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));color:var(--nh-color-text, #fff);font-size:.75rem}.nh-child a{justify-self:start}.nh-step{display:grid;gap:.5rem;margin-inline-start:calc(var(--nh-step-depth) * 1rem);padding:.75rem;border-inline-start:2px solid var(--nh-color-progress, #ff6700);background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-step__heading>div{display:grid;gap:.125rem}.nh-step__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-step__batch{display:flex;flex-wrap:wrap;gap:.5rem 1rem;color:var(--nh-color-muted, #9aa8bc);font-size:.75rem}.nh-step__batch div{display:flex;gap:.25rem}.nh-step__batch dd{margin:0;color:var(--nh-color-text, #fff)}.nh-operation__actions{justify-content:flex-end}.nh-operation__actions button{min-height:2.25rem;padding:.4rem .75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.5rem;color:inherit;background:transparent}.nh-operation__actions button:focus-visible,.nh-child a:focus-visible,.nh-operation__events a:focus-visible{outline:2px solid var(--nh-color-progress, #ff6700);outline-offset:2px}.nh-operation__events ol{display:grid;gap:.5rem;padding:0;list-style:none}.nh-operation__events li{display:grid;grid-template-columns:minmax(7rem,auto) 1fr auto;gap:.75rem;color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-operation__events li span{color:var(--nh-color-text, #fff)}.nh-operation__event-badge{margin-left:.5rem;padding:.125rem .375rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.4rem;color:var(--nh-color-muted, #9aa8bc);font-size:.7rem;white-space:nowrap}@media(prefers-reduced-motion:reduce){.nh-operation__progress span,.nh-step__progress span{transition:none}}@media(max-width:40rem){.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__events li{align-items:flex-start;grid-template-columns:1fr}.nh-operation__header,.nh-step__heading{flex-direction:column}.nh-child__heading{align-items:flex-start;flex-direction:column}.nh-step{margin-inline-start:min(var(--nh-step-depth) * .5rem,1.5rem)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$3.DecimalPipe, name: "number" }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8223
9182
  }
8224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhBackgroundOperationProgressComponent, decorators: [{
9183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhBackgroundOperationProgressComponent, decorators: [{
8225
9184
  type: Component,
8226
9185
  args: [{ selector: 'nh-background-operation-progress', standalone: true, imports: [CommonModule, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"nh-operation\" [attr.data-status]=\"statusKey(operation.status)\">\n <header class=\"nh-operation__header\">\n <div>\n <p class=\"nh-operation__eyebrow\">{{ 'nh-background-operations.operation' | translate }}</p>\n <h2>{{ operation.operationType }}</h2>\n </div>\n <span class=\"nh-operation__status\">{{ statusKey(operation.status) | translate }}</span>\n </header>\n\n <div class=\"nh-operation__overall\">\n <div class=\"nh-operation__progress-label\">\n <span>{{ operation.progressMessageKey ? (operation.progressMessageKey | translate: arguments(operation.progressMessageArgumentsJson)) : ('nh-background-operations.progress' | translate) }}</span>\n <strong>{{ percentage(operation.progressPercentage) | number:'1.0-1' }}%</strong>\n </div>\n <div class=\"nh-operation__progress\" role=\"progressbar\"\n [attr.aria-label]=\"'nh-background-operations.overall-progress' | translate\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(operation.progressPercentage)\">\n <span [style.width.%]=\"percentage(operation.progressPercentage)\"></span>\n </div>\n </div>\n\n @if (showActions && (canCancel(operation.status) || canRetry(operation))) {\n <div class=\"nh-operation__actions\">\n @if (canCancel(operation.status)) {\n <button type=\"button\" (click)=\"cancelRequested.emit(operation.id)\">\n {{ 'nh-background-operations.cancel' | translate }}\n </button>\n }\n @if (canRetry(operation)) {\n <button type=\"button\" (click)=\"retryRequested.emit(operation.id)\">\n {{ 'nh-background-operations.retry' | translate }}\n </button>\n }\n </div>\n }\n\n <div class=\"nh-operation__steps\" role=\"list\" [attr.aria-label]=\"'nh-background-operations.steps' | translate\">\n <ng-template #renderStep let-step let-depth=\"depth\">\n <article class=\"nh-step\" role=\"listitem\" [style.--nh-step-depth]=\"depth\">\n <div class=\"nh-step__heading\">\n <div>\n <strong>{{ stepTitle(step) | translate: arguments(step.titleArgumentsJson) }}</strong>\n @if (step.messageKey) {\n <span>{{ step.messageKey | translate: arguments(step.messageArgumentsJson) }}</span>\n }\n </div>\n <span class=\"nh-step__status\">{{ stepStatusKey(step.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"stepTitle(step) | translate: arguments(step.titleArgumentsJson)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(step.percentage)\">\n <span [style.width.%]=\"percentage(step.percentage)\"></span>\n </div>\n @if (hasBatch(step)) {\n <dl class=\"nh-step__batch\">\n <div><dt>{{ 'nh-background-operations.batch.processed' | translate }}</dt><dd>{{ step.processedItems }} / {{ step.discoveredItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.succeeded' | translate }}</dt><dd>{{ step.succeededItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.failed' | translate }}</dt><dd>{{ step.failedItems }}</dd></div>\n <div><dt>{{ 'nh-background-operations.batch.skipped' | translate }}</dt><dd>{{ step.skippedItems }}</dd></div>\n @if (step.retriedItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.retried' | translate }}</dt><dd>{{ step.retriedItems }}</dd></div>\n }\n @if (step.activeItems > 0) {\n <div><dt>{{ 'nh-background-operations.batch.active' | translate }}</dt><dd>{{ step.activeItems }}</dd></div>\n }\n </dl>\n }\n </article>\n @for (child of step.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: child, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (step of operation.steps; track step.id) {\n <ng-container *ngTemplateOutlet=\"renderStep; context: {$implicit: step, depth: 0}\"></ng-container>\n } @empty {\n <p class=\"nh-operation__empty\">{{ 'nh-background-operations.no-steps' | translate }}</p>\n }\n </div>\n\n @if (operation.children.length > 0) {\n <section class=\"nh-operation__children\">\n <h3>{{ 'nh-background-operations.children' | translate }}</h3>\n <div role=\"list\" [attr.aria-label]=\"'nh-background-operations.children' | translate\">\n <ng-template #renderChild let-child let-depth=\"depth\">\n <article class=\"nh-child\" role=\"listitem\" [style.--nh-child-depth]=\"depth\">\n <div class=\"nh-child__heading\">\n <div>\n <strong>{{ childLabel(child) }}</strong>\n <span>{{ child.operationType }}</span>\n </div>\n <span class=\"nh-child__status\">{{ statusKey(child.status) | translate }}</span>\n </div>\n <div class=\"nh-step__progress\" role=\"progressbar\"\n [attr.aria-label]=\"childLabel(child)\"\n aria-valuemin=\"0\" aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"percentage(child.progressPercentage)\">\n <span [style.width.%]=\"percentage(child.progressPercentage)\"></span>\n </div>\n @if (child.resultUrl) {\n <a [href]=\"child.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </article>\n @for (nestedChild of child.children; track nestedChild.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: nestedChild, depth: depth + 1}\"></ng-container>\n }\n </ng-template>\n\n @for (child of operation.children; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderChild; context: {$implicit: child, depth: 0}\"></ng-container>\n }\n </div>\n </section>\n }\n\n @if (showEvents && operation.events.length > 0) {\n <section class=\"nh-operation__events\">\n <h3>{{ 'nh-background-operations.activity' | translate }}</h3>\n <ol>\n @for (event of operation.events; track event.id) {\n @if (event.messageKey) {\n <li [class.nh-operation__event--operator]=\"event.isOperatorOnly\">\n <time [attr.datetime]=\"event.creationDateTime\">{{ event.creationDateTime | date:'short' }}</time>\n <span>\n {{ event.messageKey | translate: arguments(event.messageArgumentsJson) }}\n @if (event.isOperatorOnly) {\n <small class=\"nh-operation__event-badge\">{{ 'nh-background-operations.operator-only' | translate }}</small>\n }\n </span>\n @if (event.resultUrl) {\n <a [href]=\"event.resultUrl\">{{ 'nh-background-operations.open-result' | translate }}</a>\n }\n </li>\n }\n }\n </ol>\n </section>\n }\n</section>\n", styles: [":host{display:block;color:var(--nh-color-text, #fff)}.nh-operation{display:grid;gap:1rem;padding:1rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:1rem;background:var(--nh-color-surface, #101827)}.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__progress-label,.nh-operation__actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-operation__header h2,.nh-operation__events h3,.nh-operation__children h3,.nh-operation__eyebrow,.nh-step__heading span,.nh-step__batch,.nh-operation__events ol{margin:0}.nh-operation__eyebrow{color:var(--nh-color-muted, #9aa8bc);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}.nh-operation__status,.nh-step__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));font-size:.75rem}.nh-operation__progress,.nh-step__progress{overflow:hidden;height:.5rem;border-radius:.25rem;background:var(--nh-color-progress-track, rgba(255, 255, 255, .1))}.nh-operation__progress span,.nh-step__progress span{display:block;height:100%;background:var(--nh-color-progress, #ff6700);transition:width .18s ease-out}.nh-operation__steps{display:grid;gap:.625rem}.nh-operation__children,.nh-operation__children>div{display:grid;gap:.625rem}.nh-child{display:grid;gap:.5rem;margin-inline-start:min(var(--nh-child-depth) * 1rem,3rem);padding:.75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .14));border-radius:.5rem;background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-child__heading{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nh-child__heading>div{display:grid;gap:.125rem}.nh-child__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-child__status{flex:none;padding:.25rem .5rem;border-radius:.4rem;background:var(--nh-color-status-background, rgba(2, 41, 98, .75));color:var(--nh-color-text, #fff);font-size:.75rem}.nh-child a{justify-self:start}.nh-step{display:grid;gap:.5rem;margin-inline-start:calc(var(--nh-step-depth) * 1rem);padding:.75rem;border-inline-start:2px solid var(--nh-color-progress, #ff6700);background:var(--nh-color-surface-subtle, rgba(255, 255, 255, .035))}.nh-step__heading>div{display:grid;gap:.125rem}.nh-step__heading span{color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-step__batch{display:flex;flex-wrap:wrap;gap:.5rem 1rem;color:var(--nh-color-muted, #9aa8bc);font-size:.75rem}.nh-step__batch div{display:flex;gap:.25rem}.nh-step__batch dd{margin:0;color:var(--nh-color-text, #fff)}.nh-operation__actions{justify-content:flex-end}.nh-operation__actions button{min-height:2.25rem;padding:.4rem .75rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.5rem;color:inherit;background:transparent}.nh-operation__actions button:focus-visible,.nh-child a:focus-visible,.nh-operation__events a:focus-visible{outline:2px solid var(--nh-color-progress, #ff6700);outline-offset:2px}.nh-operation__events ol{display:grid;gap:.5rem;padding:0;list-style:none}.nh-operation__events li{display:grid;grid-template-columns:minmax(7rem,auto) 1fr auto;gap:.75rem;color:var(--nh-color-muted, #9aa8bc);font-size:.8rem}.nh-operation__events li span{color:var(--nh-color-text, #fff)}.nh-operation__event-badge{margin-left:.5rem;padding:.125rem .375rem;border:1px solid var(--nh-color-border, rgba(255, 255, 255, .2));border-radius:.4rem;color:var(--nh-color-muted, #9aa8bc);font-size:.7rem;white-space:nowrap}@media(prefers-reduced-motion:reduce){.nh-operation__progress span,.nh-step__progress span{transition:none}}@media(max-width:40rem){.nh-operation__header,.nh-step__heading,.nh-child__heading,.nh-operation__events li{align-items:flex-start;grid-template-columns:1fr}.nh-operation__header,.nh-step__heading{flex-direction:column}.nh-child__heading{align-items:flex-start;flex-direction:column}.nh-step{margin-inline-start:min(var(--nh-step-depth) * .5rem,1.5rem)}}\n"] }]
8227
9186
  }], propDecorators: { operation: [{
@@ -8249,10 +9208,10 @@ class NhSearchInputComponent {
8249
9208
  onDebounceEvent(val) {
8250
9209
  this.onDebounce.emit(val?.toString());
8251
9210
  }
8252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhSearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8253
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.28", type: NhSearchInputComponent, isStandalone: false, selector: "nh-search-input", inputs: { value: "value" }, outputs: { onDebounce: "onDebounce" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"filter search-filter\" [class.open]=\"open || value\">\n <div class=\" mb-2\" (click)=\"focusInput()\">\n <input #searchInput (focusin)=\"open = true\" (focusout)=\"open = false\" class=\"form-control\" type=\"text\" placeholder=\"{{ 'general.search' | translate }}...\"\n [ngModel]=\"value\" [nhDebounce]=\"500\" (onDebounce)=\"onDebounceEvent($event)\" />\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.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$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: "directive", type: NhDebounceDirective, selector: "[ngModel][nhDebounce]", inputs: ["nhDebounce"], outputs: ["onDebounce", "preDebounce"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
9211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9212
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.33", type: NhSearchInputComponent, isStandalone: false, selector: "nh-search-input", inputs: { value: "value" }, outputs: { onDebounce: "onDebounce" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"filter search-filter\" [class.open]=\"open || value\">\n <div class=\" mb-2\" (click)=\"focusInput()\">\n <input #searchInput (focusin)=\"open = true\" (focusout)=\"open = false\" class=\"form-control\" type=\"text\" placeholder=\"{{ 'general.search' | translate }}...\"\n [ngModel]=\"value\" [nhDebounce]=\"500\" (onDebounce)=\"onDebounceEvent($event)\" />\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.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$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: "directive", type: NhDebounceDirective, selector: "[ngModel][nhDebounce]", inputs: ["nhDebounce"], outputs: ["onDebounce", "preDebounce"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
8254
9213
  }
8255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhSearchInputComponent, decorators: [{
9214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhSearchInputComponent, decorators: [{
8256
9215
  type: Component,
8257
9216
  args: [{ selector: 'nh-search-input', standalone: false, template: "<div class=\"filter search-filter\" [class.open]=\"open || value\">\n <div class=\" mb-2\" (click)=\"focusInput()\">\n <input #searchInput (focusin)=\"open = true\" (focusout)=\"open = false\" class=\"form-control\" type=\"text\" placeholder=\"{{ 'general.search' | translate }}...\"\n [ngModel]=\"value\" [nhDebounce]=\"500\" (onDebounce)=\"onDebounceEvent($event)\" />\n </div>\n</div>\n" }]
8258
9217
  }], propDecorators: { value: [{
@@ -8286,10 +9245,10 @@ class NhPageSizeComponent extends AbstractValueAccessor {
8286
9245
  // optional: disable your input
8287
9246
  this.isDisabled = isDisabled;
8288
9247
  }
8289
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageSizeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
8290
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.28", type: NhPageSizeComponent, isStandalone: false, selector: "nh-page-size", inputs: { name: "name" }, providers: [MakeProvider(NhPageSizeComponent)], usesInheritance: true, ngImport: i0, template: "@if (pageSizeDropDownSettings) {\n <div class=\"filter dropdown-with-icon\">\n @if (value) {\n <nh-form-dropdown\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [settings]=\"pageSizeDropDownSettings\"></nh-form-dropdown>\n }\n </div>\n}\n", styles: [""], dependencies: [{ 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: NhFormDropDownComponent, selector: "nh-form-dropdown", inputs: ["disabled", "settings"], outputs: ["onLazyLoadError", "closed", "opened"] }] }); }
9248
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageSizeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
9249
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: NhPageSizeComponent, isStandalone: false, selector: "nh-page-size", inputs: { name: "name" }, providers: [MakeProvider(NhPageSizeComponent)], usesInheritance: true, ngImport: i0, template: "@if (pageSizeDropDownSettings) {\n <div class=\"filter dropdown-with-icon\">\n @if (value) {\n <nh-form-dropdown\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [settings]=\"pageSizeDropDownSettings\"></nh-form-dropdown>\n }\n </div>\n}\n", styles: [""], dependencies: [{ 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: NhFormDropDownComponent, selector: "nh-form-dropdown", inputs: ["disabled", "settings"], outputs: ["onLazyLoadError", "closed", "opened"] }] }); }
8291
9250
  }
8292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhPageSizeComponent, decorators: [{
9251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhPageSizeComponent, decorators: [{
8293
9252
  type: Component,
8294
9253
  args: [{ selector: 'nh-page-size', standalone: false, providers: [MakeProvider(NhPageSizeComponent)], template: "@if (pageSizeDropDownSettings) {\n <div class=\"filter dropdown-with-icon\">\n @if (value) {\n <nh-form-dropdown\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [settings]=\"pageSizeDropDownSettings\"></nh-form-dropdown>\n }\n </div>\n}\n" }]
8295
9254
  }], propDecorators: { name: [{
@@ -8341,10 +9300,10 @@ class NhActiveDivisionInterceptor {
8341
9300
  }
8342
9301
  return next.handle(req.clone({ headers }));
8343
9302
  }
8344
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhActiveDivisionInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
8345
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhActiveDivisionInterceptor }); }
9303
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhActiveDivisionInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
9304
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhActiveDivisionInterceptor }); }
8346
9305
  }
8347
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhActiveDivisionInterceptor, decorators: [{
9306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhActiveDivisionInterceptor, decorators: [{
8348
9307
  type: Injectable
8349
9308
  }], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }] });
8350
9309
 
@@ -8368,10 +9327,10 @@ class NhApiAuthInterceptor {
8368
9327
  }
8369
9328
  return next.handle(req.clone({ headers }));
8370
9329
  }
8371
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhApiAuthInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
8372
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhApiAuthInterceptor }); }
9330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiAuthInterceptor, deps: [{ token: NhCommonModuleConfig }, { token: NhAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
9331
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiAuthInterceptor }); }
8373
9332
  }
8374
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhApiAuthInterceptor, decorators: [{
9333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhApiAuthInterceptor, decorators: [{
8375
9334
  type: Injectable
8376
9335
  }], ctorParameters: () => [{ type: NhCommonModuleConfig }, { type: NhAuthService }] });
8377
9336
 
@@ -8390,8 +9349,8 @@ class NhCommonModule {
8390
9349
  ]
8391
9350
  };
8392
9351
  }
8393
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCommonModule, deps: [{ token: NhCommonModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
8394
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.28", ngImport: i0, type: NhCommonModule, declarations: [
9352
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, deps: [{ token: NhCommonModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
9353
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, declarations: [
8395
9354
  // Components
8396
9355
  NhModalComponent,
8397
9356
  NhLoaderComponent,
@@ -8469,7 +9428,7 @@ class NhCommonModule {
8469
9428
  NhButtonDebounceDirective,
8470
9429
  NhModalContentDirective,
8471
9430
  NhRouterLinkDirective] }); }
8472
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCommonModule, providers: [
9431
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, providers: [
8473
9432
  provideAppInitializer(() => {
8474
9433
  const configService = inject(NhConfigCommonService);
8475
9434
  return new Observable((observer) => {
@@ -8496,6 +9455,11 @@ class NhCommonModule {
8496
9455
  useClass: NhApiAuthInterceptor,
8497
9456
  multi: true
8498
9457
  },
9458
+ {
9459
+ provide: HTTP_INTERCEPTORS,
9460
+ useClass: NhSessionRejectionInterceptor,
9461
+ multi: true
9462
+ },
8499
9463
  {
8500
9464
  provide: HTTP_INTERCEPTORS,
8501
9465
  useClass: NhEncodeHttpParamsInterceptor,
@@ -8534,7 +9498,7 @@ class NhCommonModule {
8534
9498
  NgxBootstrapMultiselectModule,
8535
9499
  FormsModule] }); }
8536
9500
  }
8537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImport: i0, type: NhCommonModule, decorators: [{
9501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NhCommonModule, decorators: [{
8538
9502
  type: NgModule,
8539
9503
  args: [{
8540
9504
  imports: [
@@ -8648,6 +9612,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.28", ngImpo
8648
9612
  useClass: NhApiAuthInterceptor,
8649
9613
  multi: true
8650
9614
  },
9615
+ {
9616
+ provide: HTTP_INTERCEPTORS,
9617
+ useClass: NhSessionRejectionInterceptor,
9618
+ multi: true
9619
+ },
8651
9620
  {
8652
9621
  provide: HTTP_INTERCEPTORS,
8653
9622
  useClass: NhEncodeHttpParamsInterceptor,
@@ -8769,5 +9738,5 @@ function nhTranslateBrowserLoaderFactory(httpClient, transferState) {
8769
9738
  * Generated bundle index. Do not edit.
8770
9739
  */
8771
9740
 
8772
- export { AbstractValueAccessor, AspMvcFormServerSideFormValidator, AuthSessionExpirationInformation, AuthenticateModel, AuthenticationNhCommonModuleConfig, AuthenticationSessionCreateResponse, BackgroundOperationsNhCommonModuleConfig, BaseNhAuthService, CheckAuthenticateSessionModel, Claim, ClaimAuthenticateSessionAccountMutateModel, ClaimAuthenticateSessionAccountViewModel, ClaimTypes, CollectionHttpRequestOptions, CollectionHttpResponse, DefaultMultiSelectSettings, DefaultMultiSelectTexts, EndpointsAuthenticationNhCommonModuleConfig, FilterRequestOptions, FormError, FormValidationResult, HttpDownloadRequestOptions, HttpRequestOptions, HttpRequestOptionsArrayBuffer, HttpRequestOptionsText, ImpersonateAuthenticateModel, IsAllPermissionsGrantedPipe, IsAuthenticatedPipe, IsClaimGrantedPipe, IsDefined, IsGrantedRolePipe, IsOneActiveDivisionPermissionGrantedGuard, IsOneActiveDivisionPermissionGrantedPipe, IsOneActiveDivisionRoleGrantedGuard, IsOneActiveDivisionRoleGrantedPipe, IsOneClaimGrantedPipe, IsOneDivisionPermissionGrantedPipe, IsOneDivisionRoleGrantedPipe, IsOnePermissionGrantedPipe, IsOneRoleGrantedPipe, JsonLdDataChanged, ListSortDirection, MakeProvider, MutationType, NH_ERROR_HANDLERS, NH_ROUTER_LANGUAGE_CHANGE_METHOD, NH_ROUTER_ROOT_ROUTES, NhAccountInformationResponse, NhAngularUtil, NhApiService, NhApiUtil, NhAppService, NhAsyncLock, NhAuthService, NhAuthorization, NhBackgroundOperationAdministrationCollectionHttpRequestOptions, NhBackgroundOperationAdministrationService, NhBackgroundOperationCollectionHttpRequestOptions, NhBackgroundOperationLiveUpdateService, NhBackgroundOperationProgressComponent, NhBackgroundOperationService, NhBackgroundOperationStore, NhBaseApiService, NhBooleanToStringPipe, NhBreadCrumb, NhBreadCrumbItem, NhButtonDebounceDirective, NhCanCancelNavigationGuard, NhCollectionBaseComponent, NhCollectionTypeBaseComponent, NhCommonConfig, NhCommonConfigChanged, NhCommonModule, NhCommonModuleConfig, NhConfigCommonService, NhContextMenu, NhContextMenuItem, NhContextMenuService, NhContextMenuServiceConfig, NhCookieService, NhDatePipe, NhDateTimePipe, NhDateUtcPipe, NhDebounceDirective, NhDeduplicateGetRequestsInterceptor, NhDivision, NhDivisionRole, NhDivisionUser, NhEncodeHttpParamsInterceptor, NhEncodingUtil, NhErrorComponent, NhErrorHandlerService, NhFormDropDownComponent, NhFormDropDownNhCommonModuleConfig, NhFormDropDownSettings, NhFormErrorMessageComponent, NhFormHelper, NhHeadService, NhHttpNhCommonModuleConfig, NhHttpUtil, NhInternetConnectionService, NhIsAllPermissionsGrantedGuard, NhIsAuthenticatedGuard, NhIsOneClaimGrantedGuard, NhIsOnePermissionGrantedGuard, NhIsOneRoleGrantedGuard, NhJsonLdComponent, NhJsonLdData, NhJsonLdDataItem, NhJsonLdService, NhLoaderComponent, NhMetaService, NhModalComponent, NhModalComponentClosed, NhModalComponentImpl, NhModalComponentRef, NhModalConfirmComponent, NhModalContentDirective, NhModalLoadingComponent, NhModalMutateBaseComponent, NhModalMutateBaseTypeComponent, NhModalOptions, NhModalService, NhMutateBaseComponent, NhMutateBaseTypeComponent, NhMutex, NhPageBaseComponent, NhPageService, NhPageSettings, NhPageSizeComponent, NhPageTypeBaseComponent, NhRegisterRoute, NhRequestScopedServerHttpInterceptorService, NhRoute, NhRouteInfo, NhRouteNavigationItem, NhRouterLinkDirective, NhRouterService, NhRouterSetupService, NhSearchInputComponent, NhServerHttpInterceptor, NhServerService, NhServerSideFormValidationService, NhSitemap, NhSitemapEntry, NhSitemapEntryItem, NhStringUtil, NhTaskResultFormValidationService, NhTitleService, NhToHeadDirective, NhTranslateBrowserLoader, NhTranslationNhCommonModuleConfig, NhTypedPageBaseComponent, NhTypedPageTypeBaseComponent, NhUrlEncodePipe, NhUser, NhUserNotification, NhUserNotificationCollectionHttpRequestOptions, NhUserNotificationData, NhUserNotificationMessage, NhUserNotificationOverview, NhUserNotificationService, NhUserNotificationState, NhUserNotificationsAbstractComponent, OrderByRequestOptions, PreConnectUrlItem, PreLoadUrlItem, REVIEW_AGGREGATE_RATING_KEY, REVIEW_KEY, RefreshTokenLoginAccountMutateModel, RevertImpersonateAuthenticateModel, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SearchableCollectionHttpRequestOptions, SimpleCollectionHttpRequestOptions, SimpleCollectionHttpResponse, TaskResult, TaskResultItem, TypedNhPageSettings, UserNotificationNhCommonModuleConfig, enumIntValuesToArray, enumKeysToArray, enumStringValuesToArray, enumValuesToArray, getEmptyGuid, getRandomIdentifier, groupBy, languageToCultureMap, nameof, nhBackgroundOperationStatusName, nhBackgroundOperationStepStatusName, nhBackgroundOperationTranslationSegment, nhTranslateBrowserLoaderFactory, nhUserNotificationSeverityName, uppercaseFirst };
9741
+ export { AbstractValueAccessor, AspMvcFormServerSideFormValidator, AuthSessionExpirationInformation, AuthenticateModel, AuthenticationNhCommonModuleConfig, AuthenticationSessionCreateResponse, BackgroundOperationsNhCommonModuleConfig, BaseNhAuthService, CheckAuthenticateSessionModel, Claim, ClaimAuthenticateSessionAccountMutateModel, ClaimAuthenticateSessionAccountViewModel, ClaimTypes, CollectionHttpRequestOptions, CollectionHttpResponse, DefaultMultiSelectSettings, DefaultMultiSelectTexts, EndpointsAuthenticationNhCommonModuleConfig, FilterRequestOptions, FormError, FormValidationResult, HttpDownloadRequestOptions, HttpRequestOptions, HttpRequestOptionsArrayBuffer, HttpRequestOptionsText, ImpersonateAuthenticateModel, IsAllPermissionsGrantedPipe, IsAuthenticatedPipe, IsClaimGrantedPipe, IsDefined, IsGrantedRolePipe, IsOneActiveDivisionPermissionGrantedGuard, IsOneActiveDivisionPermissionGrantedPipe, IsOneActiveDivisionRoleGrantedGuard, IsOneActiveDivisionRoleGrantedPipe, IsOneClaimGrantedPipe, IsOneDivisionPermissionGrantedPipe, IsOneDivisionRoleGrantedPipe, IsOnePermissionGrantedPipe, IsOneRoleGrantedPipe, JsonLdDataChanged, ListSortDirection, MakeProvider, MutationType, NH_ERROR_HANDLERS, NH_ROUTER_LANGUAGE_CHANGE_METHOD, NH_ROUTER_ROOT_ROUTES, NH_SKIP_SERVER_SESSION_CHECK, NhAccountInformationResponse, NhAngularUtil, NhApiService, NhApiUtil, NhAppService, NhAsyncLock, NhAuthService, NhAuthenticationStep, NhAuthenticationStepStatuses, NhAuthenticatorSetup, NhAuthorization, NhBackgroundOperationAdministrationCollectionHttpRequestOptions, NhBackgroundOperationAdministrationService, NhBackgroundOperationCollectionHttpRequestOptions, NhBackgroundOperationLiveUpdateService, NhBackgroundOperationProgressComponent, NhBackgroundOperationService, NhBackgroundOperationStore, NhBaseApiService, NhBooleanToStringPipe, NhBreadCrumb, NhBreadCrumbItem, NhButtonDebounceDirective, NhCanCancelNavigationGuard, NhCollectionBaseComponent, NhCollectionTypeBaseComponent, NhCommonConfig, NhCommonConfigChanged, NhCommonModule, NhCommonModuleConfig, NhConfigCommonService, NhContextMenu, NhContextMenuItem, NhContextMenuService, NhContextMenuServiceConfig, NhCookieService, NhDatePipe, NhDateTimePipe, NhDateUtcPipe, NhDebounceDirective, NhDeduplicateGetRequestsInterceptor, NhDivision, NhDivisionRole, NhDivisionUser, NhEncodeHttpParamsInterceptor, NhEncodingUtil, NhErrorComponent, NhErrorHandlerService, NhFormDropDownComponent, NhFormDropDownNhCommonModuleConfig, NhFormDropDownSettings, NhFormErrorMessageComponent, NhFormHelper, NhHeadService, NhHttpNhCommonModuleConfig, NhHttpUtil, NhInternetConnectionService, NhIsAllPermissionsGrantedGuard, NhIsAuthenticatedGuard, NhIsOneClaimGrantedGuard, NhIsOnePermissionGrantedGuard, NhIsOneRoleGrantedGuard, NhJsonLdComponent, NhJsonLdData, NhJsonLdDataItem, NhJsonLdService, NhLoaderComponent, NhMetaService, NhModalComponent, NhModalComponentClosed, NhModalComponentImpl, NhModalComponentRef, NhModalConfirmComponent, NhModalContentDirective, NhModalLoadingComponent, NhModalMutateBaseComponent, NhModalMutateBaseTypeComponent, NhModalOptions, NhModalService, NhMutateBaseComponent, NhMutateBaseTypeComponent, NhMutex, NhPageBaseComponent, NhPageService, NhPageSettings, NhPageSizeComponent, NhPageTypeBaseComponent, NhPasskey, NhPasskeyClient, NhPasskeyOptions, NhRegisterRoute, NhRequestScopedServerHttpInterceptorService, NhRoute, NhRouteInfo, NhRouteNavigationItem, NhRouterLinkDirective, NhRouterService, NhRouterSetupService, NhSearchInputComponent, NhServerHttpInterceptor, NhServerService, NhServerSideFormValidationService, NhSessionRejectionInterceptor, NhSitemap, NhSitemapEntry, NhSitemapEntryItem, NhStringUtil, NhTaskResultFormValidationService, NhTitleService, NhToHeadDirective, NhTranslateBrowserLoader, NhTranslationNhCommonModuleConfig, NhTwoFactorChallenge, NhTwoFactorChange, NhTwoFactorEmailCodeSent, NhTwoFactorEnrollmentResult, NhTwoFactorFailureCodes, NhTwoFactorMethods, NhTwoFactorReauthentication, NhTwoFactorStatus, NhTwoFactorVerifyModel, NhTypedPageBaseComponent, NhTypedPageTypeBaseComponent, NhUrlEncodePipe, NhUser, NhUserNotification, NhUserNotificationCollectionHttpRequestOptions, NhUserNotificationData, NhUserNotificationMessage, NhUserNotificationOverview, NhUserNotificationService, NhUserNotificationState, NhUserNotificationsAbstractComponent, OrderByRequestOptions, PreConnectUrlItem, PreLoadUrlItem, REVIEW_AGGREGATE_RATING_KEY, REVIEW_KEY, RefreshTokenLoginAccountMutateModel, RevertImpersonateAuthenticateModel, SafeHtmlPipe, SafeResourceUrlPipe, SafeUrlPipe, SearchableCollectionHttpRequestOptions, SimpleCollectionHttpRequestOptions, SimpleCollectionHttpResponse, TaskResult, TaskResultItem, TypedNhPageSettings, UserNotificationNhCommonModuleConfig, enumIntValuesToArray, enumKeysToArray, enumStringValuesToArray, enumValuesToArray, getEmptyGuid, getRandomIdentifier, groupBy, languageToCultureMap, nameof, nhBackgroundOperationStatusName, nhBackgroundOperationStepStatusName, nhBackgroundOperationTranslationSegment, nhTranslateBrowserLoaderFactory, nhUserNotificationSeverityName, uppercaseFirst };
8773
9742
  //# sourceMappingURL=newheap-platform-common.mjs.map