@acorex-platform/module-auth-client 0.0.53 → 0.0.56
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.
- package/fesm2022/{acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs → acorex-platform-module-auth-client-acorex-platform-module-auth-client-DuplzyV7.mjs} +115 -332
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-DuplzyV7.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-CLKLwWW8.mjs → acorex-platform-module-auth-client-app-chooser.component-DtqWiAUz.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-CLKLwWW8.mjs.map → acorex-platform-module-auth-client-app-chooser.component-DtqWiAUz.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-CknYaMZD.mjs → acorex-platform-module-auth-client-change-password.command-Bmhag8Ec.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-CknYaMZD.mjs.map → acorex-platform-module-auth-client-change-password.command-Bmhag8Ec.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-CML784Lg.mjs → acorex-platform-module-auth-client-change-photo.command-nUXhaunq.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-CML784Lg.mjs.map → acorex-platform-module-auth-client-change-photo.command-nUXhaunq.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-CV9mdOBi.mjs → acorex-platform-module-auth-client-get-user-activity.query-WQ2Cddje.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-CV9mdOBi.mjs.map → acorex-platform-module-auth-client-get-user-activity.query-WQ2Cddje.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-BH3Q6lJE.mjs → acorex-platform-module-auth-client-lock-screen.command-BNfSDphl.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-BH3Q6lJE.mjs.map → acorex-platform-module-auth-client-lock-screen.command-BNfSDphl.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-login.module-DtvnPpBH.mjs → acorex-platform-module-auth-client-login.module-Vnp_yqik.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-login.module-DtvnPpBH.mjs.map → acorex-platform-module-auth-client-login.module-Vnp_yqik.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-manage-two-factor.command-BAg2W20W.mjs → acorex-platform-module-auth-client-manage-two-factor.command-DUKXmbTm.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-manage-two-factor.command-BAg2W20W.mjs.map → acorex-platform-module-auth-client-manage-two-factor.command-DUKXmbTm.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-oauth-callback.component-DWnljN18.mjs → acorex-platform-module-auth-client-oauth-callback.component-BgUSFibH.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-oauth-callback.component-DWnljN18.mjs.map → acorex-platform-module-auth-client-oauth-callback.component-BgUSFibH.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-CEpu6c7D.mjs → acorex-platform-module-auth-client-open-sessions.command-QA8Qy-QK.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-CEpu6c7D.mjs.map → acorex-platform-module-auth-client-open-sessions.command-QA8Qy-QK.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-password.component-ddh-_0k3.mjs → acorex-platform-module-auth-client-password.component-DV_st1dO.mjs} +9 -9
- package/fesm2022/acorex-platform-module-auth-client-password.component-DV_st1dO.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-D4bqeKCd.mjs → acorex-platform-module-auth-client-profile-activity-chart.component-ChfLmf-G.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-D4bqeKCd.mjs.map → acorex-platform-module-auth-client-profile-activity-chart.component-ChfLmf-G.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DWNbDzDd.mjs → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DTujROAP.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DWNbDzDd.mjs.map → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DTujROAP.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-DLTbTEe6.mjs → acorex-platform-module-auth-client-profile-page-component.provider-DFR0YCzn.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-DLTbTEe6.mjs.map → acorex-platform-module-auth-client-profile-page-component.provider-DFR0YCzn.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-BhmMsO3g.mjs → acorex-platform-module-auth-client-profile-page.component-CTUIGiwl.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-BhmMsO3g.mjs.map → acorex-platform-module-auth-client-profile-page.component-CTUIGiwl.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-M-ayP7oO.mjs → acorex-platform-module-auth-client-register-password.component-Dxnh1oWk.mjs} +9 -8
- package/fesm2022/acorex-platform-module-auth-client-register-password.component-Dxnh1oWk.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-register.module-Qa3ovje0.mjs → acorex-platform-module-auth-client-register.module-5_AvLXe5.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-register.module-Qa3ovje0.mjs.map → acorex-platform-module-auth-client-register.module-5_AvLXe5.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-BenNCyt6.mjs → acorex-platform-module-auth-client-remove-pin-code.command-CHs-Ulo9.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-BenNCyt6.mjs.map → acorex-platform-module-auth-client-remove-pin-code.command-CHs-Ulo9.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-result.component-DuMch6Ge.mjs +38 -0
- package/fesm2022/acorex-platform-module-auth-client-result.component-DuMch6Ge.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-ChigSAI-.mjs → acorex-platform-module-auth-client-session-lock-overlay.component-BG_kRZlx.mjs} +6 -6
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-ChigSAI-.mjs.map → acorex-platform-module-auth-client-session-lock-overlay.component-BG_kRZlx.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-CefSbJz8.mjs → acorex-platform-module-auth-client-set-pin-code.command-Dr-Ca07P.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-CefSbJz8.mjs.map → acorex-platform-module-auth-client-set-pin-code.command-Dr-Ca07P.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-DqFW_4rM.mjs → acorex-platform-module-auth-client-set-pin-code.component-BJDxhfaN.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-DqFW_4rM.mjs.map → acorex-platform-module-auth-client-set-pin-code.component-BJDxhfaN.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-DCdRCf1m.mjs → acorex-platform-module-auth-client-tenant-chooser.component-BuDF5_BQ.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-DCdRCf1m.mjs.map → acorex-platform-module-auth-client-tenant-chooser.component-BuDF5_BQ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-two-factor-code.component-CtSv3MQu.mjs → acorex-platform-module-auth-client-two-factor-code.component-C7mUgPF3.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-two-factor-code.component-CtSv3MQu.mjs.map → acorex-platform-module-auth-client-two-factor-code.component-C7mUgPF3.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-B7tETPbq.mjs → acorex-platform-module-auth-client-two-factor.module-DfBc55hu.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-B7tETPbq.mjs.map → acorex-platform-module-auth-client-two-factor.module-DfBc55hu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-CKPbyVWd.mjs → acorex-platform-module-auth-client-view-login-history.command-BDWELxmi.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-CKPbyVWd.mjs.map → acorex-platform-module-auth-client-view-login-history.command-BDWELxmi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding-page.component-C2WYgv4l.mjs → acorex-platform-module-auth-client-welcome-onboarding-page.component-DcYCayqN.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding-page.component-C2WYgv4l.mjs.map → acorex-platform-module-auth-client-welcome-onboarding-page.component-DcYCayqN.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs → acorex-platform-module-auth-client-welcome-onboarding.command-BKMo5xN9.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs.map → acorex-platform-module-auth-client-welcome-onboarding.command-BKMo5xN9.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client.mjs +1 -1
- package/i18n/en-AU/auth.json +1196 -0
- package/i18n/en-US/auth.json +1196 -0
- package/i18n/fa-IR/auth.json +1196 -0
- package/package.json +2 -2
- package/types/acorex-platform-module-auth-client.d.ts +29 -2
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-master.layout-B3krDskY.mjs +0 -39
- package/fesm2022/acorex-platform-module-auth-client-master.layout-B3krDskY.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-password.component-ddh-_0k3.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-pwa-install.component-BJOvT0hW.mjs +0 -84
- package/fesm2022/acorex-platform-module-auth-client-pwa-install.component-BJOvT0hW.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-register-password.component-M-ayP7oO.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-result.component-PhPaEAgh.mjs +0 -36
- package/fesm2022/acorex-platform-module-auth-client-result.component-PhPaEAgh.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i1$4 from '@acorex-platform/framework-client/common';
|
|
2
|
-
import { AXPFileStorageService, AXPHomePageService, AXPPlatformSettingsLoadState, AXPSettingsService, AXPDataProvider, AXPCommonSettings, AXPSettingDefinitionProviderService, AXP_PROTECTED_ROUTE_GUARDS, AXPCommonModule, AXPPlatformSettingsOfflineBootstrapService, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';
|
|
2
|
+
import { AXPFileStorageService, AXPHomePageService, AXPPlatformSettingsLoadState, AXPSettingsService, AXPDataProvider, AXPCommonSettings, AXPSettingDefinitionProviderService, AXP_PROTECTED_ROUTE_GUARDS, AXPCommonModule, AXPPlatformSettingsOfflineBootstrapService, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXPPlatformBrandingService } from '@acorex-platform/framework-client/common';
|
|
3
3
|
import { AXPSessionService, AXPUnauthorizedError, AXPUnauthenticatedError, AXPAuthStrategyRegistryService, storeSessionLimitPendingTenant, isMaxActiveDeviceSessionsError, traceAuthGuard, AXPAuthGuard, AXPSessionStatus } from '@acorex-platform/framework-client/auth';
|
|
4
4
|
import { AXPUserAvatarService, AXPUserAvatarComponent, AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';
|
|
5
5
|
import { AXPFileStorageStatus, coerceUnknownToTrimmedString, AXPPlatformScope, AXPKeyboardShortcutPriority, AXPRegionalSetting, verifyPassword, runtimeCommandPayloadData } from '@acorex-platform/framework-shared/core';
|
|
@@ -16,7 +16,7 @@ import * as i1 from '@acorex/core/validation';
|
|
|
16
16
|
import { AXValidationModule } from '@acorex/core/validation';
|
|
17
17
|
import { isNil, isString, orderBy, isEmpty, get, defaultTo } from 'lodash';
|
|
18
18
|
import * as i1$3 from '@acorex-platform/framework-client/core';
|
|
19
|
-
import { axpApplicationLogoKey, AXPEntityLogoRegistrationService, AXPLogoComponent, axpTenantLogoKey, AXPHookService, AXPKeyboardShortcutRegistry, AXPDeviceService, chordToKbdItemKeys, getPrimaryKeyboardShortcutChord, normalizeKeyboardShortcuts, AXPComponentSlotModule, AXPAppStartUpService, AXP_APP_STARTUP_PRIORITY, AXP_HOOK_PROVIDER, provideAppStartUpTask, provideLazyProvider, AXPComponentSlotDirective } from '@acorex-platform/framework-client/core';
|
|
19
|
+
import { axpApplicationLogoKey, AXPEntityLogoRegistrationService, AXPLogoComponent, axpTenantLogoKey, AXPHookService, AXPKeyboardShortcutRegistry, AXPDeviceService, chordToKbdItemKeys, getPrimaryKeyboardShortcutChord, normalizeKeyboardShortcuts, AXPComponentSlotModule, AXPAppStartUpService, AXP_APP_STARTUP_PRIORITY, AXP_HOOK_PROVIDER, provideAppStartUpTask, provideLazyProvider, AXPComponentSlotDirective, AXPContextStore } from '@acorex-platform/framework-client/core';
|
|
20
20
|
import { AXPCommandService, provideQuerySetups, provideCommandSetups } from '@acorex-platform/framework-client/runtime';
|
|
21
21
|
import { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';
|
|
22
22
|
import * as i3$1 from '@angular/common';
|
|
@@ -24,7 +24,7 @@ import { CommonModule, AsyncPipe, Location } from '@angular/common';
|
|
|
24
24
|
import { first, filter, firstValueFrom, take, combineLatest, distinctUntilChanged, switchMap, EMPTY, from, timeout } from 'rxjs';
|
|
25
25
|
import * as i1$1 from '@acorex/components/button';
|
|
26
26
|
import { AXButtonModule } from '@acorex/components/button';
|
|
27
|
-
import * as
|
|
27
|
+
import * as i3$2 from '@acorex/components/decorators';
|
|
28
28
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
29
29
|
import * as i2$1 from '@acorex/components/popover';
|
|
30
30
|
import { AXPopoverModule } from '@acorex/components/popover';
|
|
@@ -38,9 +38,9 @@ import * as i3 from '@acorex/components/skeleton';
|
|
|
38
38
|
import { AXSkeletonModule } from '@acorex/components/skeleton';
|
|
39
39
|
import * as i5 from '@acorex/core/translation';
|
|
40
40
|
import { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
|
|
41
|
+
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
41
42
|
import { AXAvatarModule } from '@acorex/components/avatar';
|
|
42
43
|
import { AXImageModule } from '@acorex/components/image';
|
|
43
|
-
import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
44
44
|
import * as i6 from '@acorex/components/search-box';
|
|
45
45
|
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
|
46
46
|
import * as i1$2 from '@angular/forms';
|
|
@@ -995,32 +995,22 @@ const routes = [
|
|
|
995
995
|
},
|
|
996
996
|
{
|
|
997
997
|
path: '',
|
|
998
|
-
loadComponent: () =>
|
|
999
|
-
|
|
1000
|
-
{
|
|
1001
|
-
path: 'install',
|
|
1002
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-pwa-install.component-BJOvT0hW.mjs').then((c) => c.AXMPwaInstallComponent),
|
|
1003
|
-
},
|
|
1004
|
-
],
|
|
1005
|
-
},
|
|
1006
|
-
{
|
|
1007
|
-
path: '',
|
|
1008
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-B3krDskY.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
1009
|
-
loadChildren: () => import('./acorex-platform-module-auth-client-login.module-DtvnPpBH.mjs').then((c) => c.AXPSignInModule),
|
|
998
|
+
loadComponent: () => Promise.resolve().then(function () { return master_layout; }).then((c) => c.AXPAuthMasterLayoutComponent),
|
|
999
|
+
loadChildren: () => import('./acorex-platform-module-auth-client-login.module-Vnp_yqik.mjs').then((c) => c.AXPSignInModule),
|
|
1010
1000
|
},
|
|
1011
1001
|
{
|
|
1012
1002
|
path: '',
|
|
1013
|
-
loadComponent: () =>
|
|
1014
|
-
loadChildren: () => import('./acorex-platform-module-auth-client-two-factor.module-
|
|
1003
|
+
loadComponent: () => Promise.resolve().then(function () { return master_layout; }).then((c) => c.AXPAuthMasterLayoutComponent),
|
|
1004
|
+
loadChildren: () => import('./acorex-platform-module-auth-client-two-factor.module-DfBc55hu.mjs').then((c) => c.AXPTwoFactorModule),
|
|
1015
1005
|
},
|
|
1016
1006
|
{
|
|
1017
1007
|
path: '',
|
|
1018
|
-
loadComponent: () =>
|
|
1008
|
+
loadComponent: () => Promise.resolve().then(function () { return master_layout; }).then((c) => c.AXPAuthMasterLayoutComponent),
|
|
1019
1009
|
loadChildren: () => import('./acorex-platform-module-auth-client-routes-90eFjxx8.mjs').then((c) => c),
|
|
1020
1010
|
},
|
|
1021
1011
|
{
|
|
1022
1012
|
path: 'oauth-callback',
|
|
1023
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-oauth-callback.component-
|
|
1013
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-oauth-callback.component-BgUSFibH.mjs').then((c) => c.AXPOAuthCallbackComponent),
|
|
1024
1014
|
},
|
|
1025
1015
|
{
|
|
1026
1016
|
path: 'account',
|
|
@@ -1029,8 +1019,8 @@ const routes = [
|
|
|
1029
1019
|
},
|
|
1030
1020
|
{
|
|
1031
1021
|
path: '',
|
|
1032
|
-
loadComponent: () =>
|
|
1033
|
-
loadChildren: () => import('./acorex-platform-module-auth-client-register.module-
|
|
1022
|
+
loadComponent: () => Promise.resolve().then(function () { return master_layout; }).then((c) => c.AXPAuthMasterLayoutComponent),
|
|
1023
|
+
loadChildren: () => import('./acorex-platform-module-auth-client-register.module-5_AvLXe5.mjs').then((c) => c.AXPRegisterModule),
|
|
1034
1024
|
},
|
|
1035
1025
|
],
|
|
1036
1026
|
},
|
|
@@ -1040,7 +1030,7 @@ class AXPAppChooserListComponent {
|
|
|
1040
1030
|
//#endregion
|
|
1041
1031
|
//#region ---- Computed Properties ----
|
|
1042
1032
|
isApplicationSelected(application) {
|
|
1043
|
-
return application.id === this.
|
|
1033
|
+
return application.id === this.sessionApplicationId;
|
|
1044
1034
|
}
|
|
1045
1035
|
applicationLogoKey(application) {
|
|
1046
1036
|
return axpApplicationLogoKey(application.id);
|
|
@@ -1085,9 +1075,14 @@ class AXPAppChooserListComponent {
|
|
|
1085
1075
|
...(ngDevMode ? [{ debugName: "selectedApplication" }] : /* istanbul ignore next */ []));
|
|
1086
1076
|
this.isSelectBoxOpen = signal(false, /* @ts-ignore */
|
|
1087
1077
|
...(ngDevMode ? [{ debugName: "isSelectBoxOpen" }] : /* istanbul ignore next */ []));
|
|
1078
|
+
/** Current session application id. Kept off the session getter so template checks do not emit session subjects. */
|
|
1079
|
+
this.sessionApplicationId = null;
|
|
1088
1080
|
this.canApply = computed(() => !!this.selectedApplication(), /* @ts-ignore */
|
|
1089
1081
|
...(ngDevMode ? [{ debugName: "canApply" }] : /* istanbul ignore next */ []));
|
|
1090
1082
|
this.skeletonItems = [1, 2, 3];
|
|
1083
|
+
this.sessionService.application$.pipe(takeUntilDestroyed()).subscribe((application) => {
|
|
1084
|
+
this.sessionApplicationId = application?.id ?? null;
|
|
1085
|
+
});
|
|
1091
1086
|
effect(() => {
|
|
1092
1087
|
this.loadingChange.emit(this.isLoading());
|
|
1093
1088
|
});
|
|
@@ -1103,16 +1098,23 @@ class AXPAppChooserListComponent {
|
|
|
1103
1098
|
this.sessionService.applications$.pipe(first()).subscribe((applications) => {
|
|
1104
1099
|
this.logoRegistration.registerApplications(applications);
|
|
1105
1100
|
this.allApplications.set(applications);
|
|
1106
|
-
if (applications.length > 0) {
|
|
1107
|
-
this.selectedApplication.set(applications[0]);
|
|
1108
|
-
}
|
|
1109
1101
|
this.isLoading.set(false);
|
|
1110
1102
|
});
|
|
1111
1103
|
}
|
|
1112
1104
|
//#endregion
|
|
1113
1105
|
//#region ---- UI Handlers ----
|
|
1114
1106
|
handleApplicationSelectionChanged(event) {
|
|
1115
|
-
|
|
1107
|
+
if (!event.isUserInteraction) {
|
|
1108
|
+
return;
|
|
1109
|
+
}
|
|
1110
|
+
const application = event.items?.[0] ?? null;
|
|
1111
|
+
queueMicrotask(() => this.selectedApplication.set(application));
|
|
1112
|
+
}
|
|
1113
|
+
handleSelectBoxOpened() {
|
|
1114
|
+
queueMicrotask(() => this.isSelectBoxOpen.set(true));
|
|
1115
|
+
}
|
|
1116
|
+
handleSelectBoxClosed() {
|
|
1117
|
+
queueMicrotask(() => this.isSelectBoxOpen.set(false));
|
|
1116
1118
|
}
|
|
1117
1119
|
handleApplicationSelect(event) {
|
|
1118
1120
|
if (!event.isUserInteraction) {
|
|
@@ -1213,7 +1215,7 @@ class AXPAppChooserListComponent {
|
|
|
1213
1215
|
}
|
|
1214
1216
|
}
|
|
1215
1217
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAppChooserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1216
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { applicationChosen: "applicationChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedApplication()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n [selectedTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"
|
|
1218
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { applicationChosen: "applicationChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedApplication()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n [selectedTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"handleSelectBoxOpened()\"\n (onClosed)=\"handleSelectBoxClosed()\"\n (onValueChanged)=\"handleApplicationSelect($event)\"\n (onSelectionChanged)=\"handleApplicationSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (application of allApplications(); track application.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isApplicationSelected(application)\"\n [attr.aria-busy]=\"choosingId() === application.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isApplicationSelected(application)\"\n [class.dark:bg-primary-darker]=\"isApplicationSelected(application)\"\n [class.text-primary-on-lighter]=\"isApplicationSelected(application)\"\n [class.dark:text-primary-on-darker]=\"isApplicationSelected(application)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== application.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseApplication(application)\"\n (keydown)=\"handleListItemKeyDown($event, application)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(application)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(application.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 min-w-0 text-start md:text-base text-sm break-words md:truncate\">{{\n application.title | translate | async\n }}</span>\n @if (application.edition?.title) {\n <span class=\"text-muted text-xs shrink-0\">{{\n application.edition?.title | translate | async\n }}</span>\n }\n </div>\n @if (choosingId() === application.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #applicationItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n @if (item.edition?.title) {\n <span class=\"text-muted text-xs\">{{ item.edition.title | translate | async }}</span>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i4.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i4.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1217
1219
|
}
|
|
1218
1220
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAppChooserListComponent, decorators: [{
|
|
1219
1221
|
type: Component,
|
|
@@ -1227,7 +1229,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1227
1229
|
AXListNavigationModule,
|
|
1228
1230
|
AXTranslationModule,
|
|
1229
1231
|
AXPLogoComponent,
|
|
1230
|
-
], template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedApplication()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n [selectedTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"
|
|
1232
|
+
], template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedApplication()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n [selectedTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"handleSelectBoxOpened()\"\n (onClosed)=\"handleSelectBoxClosed()\"\n (onValueChanged)=\"handleApplicationSelect($event)\"\n (onSelectionChanged)=\"handleApplicationSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (application of allApplications(); track application.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isApplicationSelected(application)\"\n [attr.aria-busy]=\"choosingId() === application.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isApplicationSelected(application)\"\n [class.dark:bg-primary-darker]=\"isApplicationSelected(application)\"\n [class.text-primary-on-lighter]=\"isApplicationSelected(application)\"\n [class.dark:text-primary-on-darker]=\"isApplicationSelected(application)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== application.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseApplication(application)\"\n (keydown)=\"handleListItemKeyDown($event, application)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(application)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(application.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 min-w-0 text-start md:text-base text-sm break-words md:truncate\">{{\n application.title | translate | async\n }}</span>\n @if (application.edition?.title) {\n <span class=\"text-muted text-xs shrink-0\">{{\n application.edition?.title | translate | async\n }}</span>\n }\n </div>\n @if (choosingId() === application.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #applicationItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n @if (item.edition?.title) {\n <span class=\"text-muted text-xs\">{{ item.edition.title | translate | async }}</span>\n }\n </div>\n</ng-template>\n" }]
|
|
1231
1233
|
}], ctorParameters: () => [], propDecorators: { simple: [{ type: i0.Input, args: [{ isSignal: true, alias: "simple", required: false }] }], applicationChosen: [{ type: i0.Output, args: ["applicationChosen"] }], loadingChange: [{ type: i0.Output, args: ["loadingChange"] }], listNav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], listItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
|
|
1232
1234
|
|
|
1233
1235
|
class AXMAppChooserSlotComponent {
|
|
@@ -1242,7 +1244,7 @@ class AXMAppChooserSlotComponent {
|
|
|
1242
1244
|
this.appPopover()?.close();
|
|
1243
1245
|
}
|
|
1244
1246
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAppChooserSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1245
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "appPopover", first: true, predicate: ["appPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (applications$ | async; as applications) {\n @if (applications.length > 1) {\n <ax-button [color]=\"themeStore.headerButtonColor()\" [look]=\"themeStore.headerButtonLook()\" #appChooser>\n <ax-icon class=\"fa-regular fa-grid-2\"> </ax-icon>\n </ax-button>\n <ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #appPopover>\n <div class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\">\n <axp-app-chooser-list [simple]=\"true\" (applicationChosen)=\"closePopover()\"></axp-app-chooser-list>\n </div>\n </ax-popover>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type:
|
|
1247
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "appPopover", first: true, predicate: ["appPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (applications$ | async; as applications) {\n @if (applications.length > 1) {\n <ax-button [color]=\"themeStore.headerButtonColor()\" [look]=\"themeStore.headerButtonLook()\" #appChooser>\n <ax-icon class=\"fa-regular fa-grid-2\"> </ax-icon>\n </ax-button>\n <ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #appPopover>\n <div class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\">\n <axp-app-chooser-list [simple]=\"true\" (applicationChosen)=\"closePopover()\"></axp-app-chooser-list>\n </div>\n </ax-popover>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAppChooserListComponent, selector: "axp-app-chooser-list", inputs: ["simple"], outputs: ["applicationChosen", "loadingChange"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1246
1248
|
}
|
|
1247
1249
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAppChooserSlotComponent, decorators: [{
|
|
1248
1250
|
type: Component,
|
|
@@ -1268,7 +1270,7 @@ class AXPTenantChooserListComponent {
|
|
|
1268
1270
|
//#endregion
|
|
1269
1271
|
//#region ---- Computed Properties ----
|
|
1270
1272
|
isTenantSelected(tenant) {
|
|
1271
|
-
return tenant.id === this.
|
|
1273
|
+
return tenant.id === this.sessionTenantId;
|
|
1272
1274
|
}
|
|
1273
1275
|
//#endregion
|
|
1274
1276
|
//#region ---- Constructor ----
|
|
@@ -1313,6 +1315,8 @@ class AXPTenantChooserListComponent {
|
|
|
1313
1315
|
...(ngDevMode ? [{ debugName: "selectedTenant" }] : /* istanbul ignore next */ []));
|
|
1314
1316
|
this.isSelectBoxOpen = signal(false, /* @ts-ignore */
|
|
1315
1317
|
...(ngDevMode ? [{ debugName: "isSelectBoxOpen" }] : /* istanbul ignore next */ []));
|
|
1318
|
+
/** Current session tenant id. Kept off the session getter so template checks do not emit `tenant$`. */
|
|
1319
|
+
this.sessionTenantId = null;
|
|
1316
1320
|
this.canApply = computed(() => !!this.selectedTenant(), /* @ts-ignore */
|
|
1317
1321
|
...(ngDevMode ? [{ debugName: "canApply" }] : /* istanbul ignore next */ []));
|
|
1318
1322
|
this.skeletonItems = [1, 2, 3];
|
|
@@ -1327,6 +1331,9 @@ class AXPTenantChooserListComponent {
|
|
|
1327
1331
|
...(ngDevMode ? [{ debugName: "displayedTenants" }] : /* istanbul ignore next */ []));
|
|
1328
1332
|
this.showSearchAndViewAll = computed(() => this.allTenants().length > 4, /* @ts-ignore */
|
|
1329
1333
|
...(ngDevMode ? [{ debugName: "showSearchAndViewAll" }] : /* istanbul ignore next */ []));
|
|
1334
|
+
this.sessionService.tenant$.pipe(takeUntilDestroyed()).subscribe((tenant) => {
|
|
1335
|
+
this.sessionTenantId = tenant?.id ?? null;
|
|
1336
|
+
});
|
|
1330
1337
|
effect(() => {
|
|
1331
1338
|
this.loadingChange.emit(this.isLoading());
|
|
1332
1339
|
});
|
|
@@ -1342,9 +1349,6 @@ class AXPTenantChooserListComponent {
|
|
|
1342
1349
|
this.sessionService.tenants$.pipe(first()).subscribe((tenants) => {
|
|
1343
1350
|
this.logoRegistration.registerTenants(tenants);
|
|
1344
1351
|
this.allTenants.set(tenants);
|
|
1345
|
-
if (tenants.length > 0) {
|
|
1346
|
-
this.selectedTenant.set(tenants[0]);
|
|
1347
|
-
}
|
|
1348
1352
|
this.isLoading.set(false);
|
|
1349
1353
|
});
|
|
1350
1354
|
}
|
|
@@ -1367,7 +1371,17 @@ class AXPTenantChooserListComponent {
|
|
|
1367
1371
|
this.showAll.update((value) => !value);
|
|
1368
1372
|
}
|
|
1369
1373
|
handleTenantSelectionChanged(event) {
|
|
1370
|
-
|
|
1374
|
+
if (!event.isUserInteraction) {
|
|
1375
|
+
return;
|
|
1376
|
+
}
|
|
1377
|
+
const tenant = event.items?.[0] ?? null;
|
|
1378
|
+
queueMicrotask(() => this.selectedTenant.set(tenant));
|
|
1379
|
+
}
|
|
1380
|
+
handleSelectBoxOpened() {
|
|
1381
|
+
queueMicrotask(() => this.isSelectBoxOpen.set(true));
|
|
1382
|
+
}
|
|
1383
|
+
handleSelectBoxClosed() {
|
|
1384
|
+
queueMicrotask(() => this.isSelectBoxOpen.set(false));
|
|
1371
1385
|
}
|
|
1372
1386
|
handleTenantSelect(event) {
|
|
1373
1387
|
if (!event.isUserInteraction) {
|
|
@@ -1448,7 +1462,7 @@ class AXPTenantChooserListComponent {
|
|
|
1448
1462
|
}
|
|
1449
1463
|
}
|
|
1450
1464
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1451
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserListComponent, isStandalone: true, selector: "axp-tenant-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChosen: "tenantChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <!--->\n <!-- ----- Compact dropdown skeleton ----- -->\n @if (simple()) {\n <div class=\"w-full flex flex-col gap-1\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-2 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-6 rounded-md shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-4 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n <!-- ----- Full chooser skeleton ----- -->\n @else {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n}\n<!-- ----- Compact list for header/sidebar dropdowns ----- -->\n@else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] flex flex-col gap-1\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-2 items-center min-w-0\">\n <div class=\"shrink-0 size-6 overflow-hidden rounded-md grid place-items-center\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"24\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-6 overflow-hidden\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n <!--->\n <!-- ----- Choosing indicator for this tenant ----- -->\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n<!-- ----- Lookup when the catalog is long ----- -->\n@else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n [selectedTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n (onSelectionChanged)=\"handleTenantSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n}\n<!-- ----- Full list on the login tenant chooser ----- -->\n@else {\n @if (showSearchAndViewAll()) {\n <ax-search-box\n [placeholder]=\"'@general:search.title' | translate | async\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearch($event)\"\n class=\"w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n }\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of displayedTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isTenantSelected(tenant)\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.text-primary-on-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:text-primary-on-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n @if (showSearchAndViewAll()) {\n <div class=\"mt-6 w-full flex justify-center\">\n <ax-button\n (onClick)=\"showAllTenants()\"\n class=\"w-full\"\n look=\"outline\"\n [disabled]=\"isChoosing()\"\n [text]=\"\n showAll()\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"\n ></ax-button>\n </div>\n }\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i4.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i4.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1465
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserListComponent, isStandalone: true, selector: "axp-tenant-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChosen: "tenantChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <!--->\n <!-- ----- Compact dropdown skeleton ----- -->\n @if (simple()) {\n <div class=\"w-full flex flex-col gap-1\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-2 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-6 rounded-md shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-4 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n <!-- ----- Full chooser skeleton ----- -->\n @else {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n}\n<!-- ----- Compact list for header/sidebar dropdowns ----- -->\n@else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] flex flex-col gap-1\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-2 items-center min-w-0\">\n <div class=\"shrink-0 size-6 overflow-hidden rounded-md grid place-items-center\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"24\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-6 overflow-hidden\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n <!--->\n <!-- ----- Choosing indicator for this tenant ----- -->\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n<!-- ----- Lookup when the catalog is long ----- -->\n@else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n [selectedTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"handleSelectBoxOpened()\"\n (onClosed)=\"handleSelectBoxClosed()\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n (onSelectionChanged)=\"handleTenantSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n}\n<!-- ----- Full list on the login tenant chooser ----- -->\n@else {\n @if (showSearchAndViewAll()) {\n <ax-search-box\n [placeholder]=\"'@general:search.title' | translate | async\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearch($event)\"\n class=\"w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n }\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of displayedTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isTenantSelected(tenant)\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.text-primary-on-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:text-primary-on-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n @if (showSearchAndViewAll()) {\n <div class=\"mt-6 w-full flex justify-center\">\n <ax-button\n (onClick)=\"showAllTenants()\"\n class=\"w-full\"\n look=\"outline\"\n [disabled]=\"isChoosing()\"\n [text]=\"\n showAll()\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"\n ></ax-button>\n </div>\n }\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i4.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i4.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1452
1466
|
}
|
|
1453
1467
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserListComponent, decorators: [{
|
|
1454
1468
|
type: Component,
|
|
@@ -1464,7 +1478,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1464
1478
|
AXSearchBoxModule,
|
|
1465
1479
|
AXListNavigationModule,
|
|
1466
1480
|
AXPLogoComponent,
|
|
1467
|
-
], template: "@if (isLoading()) {\n <!--->\n <!-- ----- Compact dropdown skeleton ----- -->\n @if (simple()) {\n <div class=\"w-full flex flex-col gap-1\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-2 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-6 rounded-md shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-4 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n <!-- ----- Full chooser skeleton ----- -->\n @else {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n}\n<!-- ----- Compact list for header/sidebar dropdowns ----- -->\n@else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] flex flex-col gap-1\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-2 items-center min-w-0\">\n <div class=\"shrink-0 size-6 overflow-hidden rounded-md grid place-items-center\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"24\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-6 overflow-hidden\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n <!--->\n <!-- ----- Choosing indicator for this tenant ----- -->\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n<!-- ----- Lookup when the catalog is long ----- -->\n@else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n [selectedTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"
|
|
1481
|
+
], template: "@if (isLoading()) {\n <!--->\n <!-- ----- Compact dropdown skeleton ----- -->\n @if (simple()) {\n <div class=\"w-full flex flex-col gap-1\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-2 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-6 rounded-md shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-4 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n <!-- ----- Full chooser skeleton ----- -->\n @else {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n}\n<!-- ----- Compact list for header/sidebar dropdowns ----- -->\n@else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] flex flex-col gap-1\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-2 items-center min-w-0\">\n <div class=\"shrink-0 size-6 overflow-hidden rounded-md grid place-items-center\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"24\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-6 overflow-hidden\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n <!--->\n <!-- ----- Choosing indicator for this tenant ----- -->\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n<!-- ----- Lookup when the catalog is long ----- -->\n@else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n [selectedTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"handleSelectBoxOpened()\"\n (onClosed)=\"handleSelectBoxClosed()\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n (onSelectionChanged)=\"handleTenantSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n}\n<!-- ----- Full list on the login tenant chooser ----- -->\n@else {\n @if (showSearchAndViewAll()) {\n <ax-search-box\n [placeholder]=\"'@general:search.title' | translate | async\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearch($event)\"\n class=\"w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n }\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of displayedTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isTenantSelected(tenant)\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.text-primary-on-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:text-primary-on-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n @if (showSearchAndViewAll()) {\n <div class=\"mt-6 w-full flex justify-center\">\n <ax-button\n (onClick)=\"showAllTenants()\"\n class=\"w-full\"\n look=\"outline\"\n [disabled]=\"isChoosing()\"\n [text]=\"\n showAll()\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"\n ></ax-button>\n </div>\n }\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n </div>\n</ng-template>\n" }]
|
|
1468
1482
|
}], ctorParameters: () => [], propDecorators: { simple: [{ type: i0.Input, args: [{ isSignal: true, alias: "simple", required: false }] }], tenantChosen: [{ type: i0.Output, args: ["tenantChosen"] }], loadingChange: [{ type: i0.Output, args: ["loadingChange"] }], listNav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], listItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
|
|
1469
1483
|
|
|
1470
1484
|
class AXPTenantChooserDropdownComponent {
|
|
@@ -1509,7 +1523,7 @@ class AXPTenantChooserDropdownComponent {
|
|
|
1509
1523
|
void this.router.navigate(['/auth/account/tenant-chooser']);
|
|
1510
1524
|
}
|
|
1511
1525
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1512
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", inputs: { inline: "inline" }, viewQueries: [{ propertyName: "tenantPopover", first: true, predicate: ["tenantPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tenantsLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"h-5 w-32 max-w-full\"></ax-skeleton>\n} @else if (tenants$ | async; as tenants) {\n @if (inline) {\n @if (tenants.length > 1) {\n <!-- ----- Inline dropdown for multi-tenant ----- -->\n <span\n class=\"text-xs font-medium px-3 cursor-pointer inline-flex items-center gap-1\"\n #inlineTenantTrigger\n >\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n <i class=\"fa-solid fa-caret-down text-2xs opacity-60\"></i>\n </span>\n <ax-popover\n [target]=\"inlineTenantTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div [class]=\"popupPanelClass\">\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <!-- ----- Plain text for single tenant ----- -->\n <span class=\"text-xs font-medium px-3\">\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n </span>\n }\n } @else {\n @if (tenants.length > 1) {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n look=\"blank\"\n #tenantChooser\n >\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n <ax-popover\n [target]=\"tenantChooser\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div [class]=\"popupPanelClass\">\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n class=\"ax-sm\"\n look=\"blank\"\n ></ax-button>\n }\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type:
|
|
1526
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", inputs: { inline: "inline" }, viewQueries: [{ propertyName: "tenantPopover", first: true, predicate: ["tenantPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tenantsLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"h-5 w-32 max-w-full\"></ax-skeleton>\n} @else if (tenants$ | async; as tenants) {\n @if (inline) {\n @if (tenants.length > 1) {\n <!-- ----- Inline dropdown for multi-tenant ----- -->\n <span\n class=\"text-xs font-medium px-3 cursor-pointer inline-flex items-center gap-1\"\n #inlineTenantTrigger\n >\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n <i class=\"fa-solid fa-caret-down text-2xs opacity-60\"></i>\n </span>\n <ax-popover\n [target]=\"inlineTenantTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div [class]=\"popupPanelClass\">\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <!-- ----- Plain text for single tenant ----- -->\n <span class=\"text-xs font-medium px-3\">\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n </span>\n }\n } @else {\n @if (tenants.length > 1) {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n look=\"blank\"\n #tenantChooser\n >\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n <ax-popover\n [target]=\"tenantChooser\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div [class]=\"popupPanelClass\">\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n class=\"ax-sm\"\n look=\"blank\"\n ></ax-button>\n }\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXPTenantChooserListComponent, selector: "axp-tenant-chooser-list", inputs: ["simple"], outputs: ["tenantChosen", "loadingChange"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1513
1527
|
}
|
|
1514
1528
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserDropdownComponent, decorators: [{
|
|
1515
1529
|
type: Component,
|
|
@@ -1643,9 +1657,9 @@ class AXMAuthProfileSlotComponent {
|
|
|
1643
1657
|
}
|
|
1644
1658
|
}
|
|
1645
1659
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAuthProfileSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1646
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMAuthProfileSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if (isAuthenticated$ | async) {\n <div class=\"size-fit\">\n <div #avatar>\n <axp-user-avatar\n [size]=\"36\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"true\"\n ></axp-user-avatar>\n </div>\n\n <ax-popover\n [target]=\"avatar\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"false\"\n #p\n >\n <div\n class=\"bg-lightest border border-lightest rounded-md shadow-md w-80\"\n >\n <div class=\"flex flex-col items-center p-4 border-b\">\n <axp-user-avatar\n [size]=\"64\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n\n <div class=\"flex flex-col items-center justify-center mt-2\">\n <div class=\"text-base font-bold \">{{ (user$ | async)?.title }}</div>\n @if (!deviceService.isSmall()) {\n <axp-tenant-chooser-dropdown class=\"mt-1\"></axp-tenant-chooser-dropdown>\n }\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n @for (item of menuItems(); track item.name ?? item.title) {\n @if (item.visible != false) {\n @if (hasProfileSlotMenuBreakBefore(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n <li [class]=\"menuItemClass(item)\">\n <a (click)=\"handleMenuItemClick(item, p)\">\n <i [class]=\"item.icon\"></i>\n <span class=\"flex-1\">{{\n item.title | translate | async\n }}</span>\n </a>\n </li>\n @if (hasProfileSlotMenuBreakAfter(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </ax-popover>\n </div>\n} @else {\n <ax-button\n color=\"default\"\n look=\"blank\"\n text=\"
|
|
1660
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMAuthProfileSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if (isAuthenticated$ | async) {\n <div class=\"size-fit\">\n <div #avatar>\n <axp-user-avatar\n [size]=\"36\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"true\"\n ></axp-user-avatar>\n </div>\n\n <ax-popover\n [target]=\"avatar\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"false\"\n #p\n >\n <div\n class=\"bg-lightest border border-lightest rounded-md shadow-md w-80\"\n >\n <div class=\"flex flex-col items-center p-4 border-b\">\n <axp-user-avatar\n [size]=\"64\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n\n <div class=\"flex flex-col items-center justify-center mt-2\">\n <div class=\"text-base font-bold \">{{ (user$ | async)?.title }}</div>\n @if (!deviceService.isSmall()) {\n <axp-tenant-chooser-dropdown class=\"mt-1\"></axp-tenant-chooser-dropdown>\n }\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n @for (item of menuItems(); track item.name ?? item.title) {\n @if (item.visible != false) {\n @if (hasProfileSlotMenuBreakBefore(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n <li [class]=\"menuItemClass(item)\">\n <a (click)=\"handleMenuItemClick(item, p)\">\n <i [class]=\"item.icon\"></i>\n <span class=\"flex-1\">{{\n item.title | translate | async\n }}</span>\n </a>\n </li>\n @if (hasProfileSlotMenuBreakAfter(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </ax-popover>\n </div>\n} @else {\n <ax-button\n color=\"default\"\n look=\"blank\"\n [text]=\"('@auth:profile-page.profile-slot.sign-up-sign-in' | translate | async) ?? ''\"\n (click)=\"handleSignIn()\"\n >\n <ax-icon>\n <i class=\"fa-solid fa-user text-slate-400 dark:text-slate-200\"></i>\n </ax-icon>\n </ax-button>\n}\n", styles: ["@layer properties;.axp-profile-slot-menus ul{margin-top:calc(var(--spacing, .25rem) * 2);display:flex;flex-direction:column;gap:var(--spacing, .25rem);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border-default);padding-inline:calc(var(--spacing, .25rem) * 2)}.axp-profile-slot-menus ul:last-child{border-style:var(--tw-border-style);border-width:0px}.axp-profile-slot-menus ul li{display:flex;cursor:pointer;border-radius:var(--radius-md, .375rem)}.axp-profile-slot-menus ul li:last-child{margin-bottom:calc(var(--spacing, .25rem) * 2)}.axp-profile-slot-menus ul li:hover{background-color:rgba(var(--ax-sys-color-dark-surface))}.axp-profile-slot-menus ul li.axp-profile-slot-menu-break{pointer-events:none;margin-inline:calc(var(--spacing, .25rem) * 2);margin-block:var(--spacing, .25rem);height:0px;min-height:0px;cursor:default;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border-default);padding:0}.axp-profile-slot-menus ul li.axp-profile-slot-menu-break:hover{background-color:transparent}.axp-profile-slot-menus ul li i{margin-inline-end:calc(var(--spacing, .25rem) * 3);display:grid;height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 6);place-items:center;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)))}.axp-profile-slot-menus ul li a{display:flex;height:100%;width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
|
|
1647
1661
|
//
|
|
1648
|
-
AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type:
|
|
1662
|
+
AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type:
|
|
1649
1663
|
// AXKBDComponent,
|
|
1650
1664
|
// AXKBDItemComponent,
|
|
1651
1665
|
AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "component", type:
|
|
@@ -1670,7 +1684,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1670
1684
|
AXPUserAvatarComponent,
|
|
1671
1685
|
//
|
|
1672
1686
|
AXPTenantChooserDropdownComponent,
|
|
1673
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if (isAuthenticated$ | async) {\n <div class=\"size-fit\">\n <div #avatar>\n <axp-user-avatar\n [size]=\"36\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"true\"\n ></axp-user-avatar>\n </div>\n\n <ax-popover\n [target]=\"avatar\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"false\"\n #p\n >\n <div\n class=\"bg-lightest border border-lightest rounded-md shadow-md w-80\"\n >\n <div class=\"flex flex-col items-center p-4 border-b\">\n <axp-user-avatar\n [size]=\"64\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n\n <div class=\"flex flex-col items-center justify-center mt-2\">\n <div class=\"text-base font-bold \">{{ (user$ | async)?.title }}</div>\n @if (!deviceService.isSmall()) {\n <axp-tenant-chooser-dropdown class=\"mt-1\"></axp-tenant-chooser-dropdown>\n }\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n @for (item of menuItems(); track item.name ?? item.title) {\n @if (item.visible != false) {\n @if (hasProfileSlotMenuBreakBefore(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n <li [class]=\"menuItemClass(item)\">\n <a (click)=\"handleMenuItemClick(item, p)\">\n <i [class]=\"item.icon\"></i>\n <span class=\"flex-1\">{{\n item.title | translate | async\n }}</span>\n </a>\n </li>\n @if (hasProfileSlotMenuBreakAfter(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </ax-popover>\n </div>\n} @else {\n <ax-button\n color=\"default\"\n look=\"blank\"\n text=\"
|
|
1687
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if (isAuthenticated$ | async) {\n <div class=\"size-fit\">\n <div #avatar>\n <axp-user-avatar\n [size]=\"36\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"true\"\n ></axp-user-avatar>\n </div>\n\n <ax-popover\n [target]=\"avatar\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"false\"\n #p\n >\n <div\n class=\"bg-lightest border border-lightest rounded-md shadow-md w-80\"\n >\n <div class=\"flex flex-col items-center p-4 border-b\">\n <axp-user-avatar\n [size]=\"64\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n\n <div class=\"flex flex-col items-center justify-center mt-2\">\n <div class=\"text-base font-bold \">{{ (user$ | async)?.title }}</div>\n @if (!deviceService.isSmall()) {\n <axp-tenant-chooser-dropdown class=\"mt-1\"></axp-tenant-chooser-dropdown>\n }\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n @for (item of menuItems(); track item.name ?? item.title) {\n @if (item.visible != false) {\n @if (hasProfileSlotMenuBreakBefore(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n <li [class]=\"menuItemClass(item)\">\n <a (click)=\"handleMenuItemClick(item, p)\">\n <i [class]=\"item.icon\"></i>\n <span class=\"flex-1\">{{\n item.title | translate | async\n }}</span>\n </a>\n </li>\n @if (hasProfileSlotMenuBreakAfter(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </ax-popover>\n </div>\n} @else {\n <ax-button\n color=\"default\"\n look=\"blank\"\n [text]=\"('@auth:profile-page.profile-slot.sign-up-sign-in' | translate | async) ?? ''\"\n (click)=\"handleSignIn()\"\n >\n <ax-icon>\n <i class=\"fa-solid fa-user text-slate-400 dark:text-slate-200\"></i>\n </ax-icon>\n </ax-button>\n}\n", styles: ["@layer properties;.axp-profile-slot-menus ul{margin-top:calc(var(--spacing, .25rem) * 2);display:flex;flex-direction:column;gap:var(--spacing, .25rem);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border-default);padding-inline:calc(var(--spacing, .25rem) * 2)}.axp-profile-slot-menus ul:last-child{border-style:var(--tw-border-style);border-width:0px}.axp-profile-slot-menus ul li{display:flex;cursor:pointer;border-radius:var(--radius-md, .375rem)}.axp-profile-slot-menus ul li:last-child{margin-bottom:calc(var(--spacing, .25rem) * 2)}.axp-profile-slot-menus ul li:hover{background-color:rgba(var(--ax-sys-color-dark-surface))}.axp-profile-slot-menus ul li.axp-profile-slot-menu-break{pointer-events:none;margin-inline:calc(var(--spacing, .25rem) * 2);margin-block:var(--spacing, .25rem);height:0px;min-height:0px;cursor:default;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border-default);padding:0}.axp-profile-slot-menus ul li.axp-profile-slot-menu-break:hover{background-color:transparent}.axp-profile-slot-menus ul li i{margin-inline-end:calc(var(--spacing, .25rem) * 3);display:grid;height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 6);place-items:center;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)))}.axp-profile-slot-menus ul li a{display:flex;height:100%;width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
1674
1688
|
}] });
|
|
1675
1689
|
|
|
1676
1690
|
class AXMUserProfileCardSlotComponent {
|
|
@@ -1755,7 +1769,7 @@ class AXMUserProfileCardSlotComponent {
|
|
|
1755
1769
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMUserProfileCardSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1756
1770
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMUserProfileCardSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "profilePopover", first: true, predicate: ["profilePopover"], descendants: true }], ngImport: i0, template: "@if((isAuthenticated$ | async)) {\n<div\n class=\"flex items-center gap-1 border-b\"\n [class.p-3]=\"!isCompactMode()\"\n [class.py-2]=\"isCompactMode()\"\n [class.px-0]=\"isCompactMode()\"\n [class.border-white/7]=\"isMenuDark()\"\n [class.border-black/7]=\"!isMenuDark()\"\n [class.justify-center]=\"isCompactMode()\"\n>\n <div #avatar>\n <axp-user-avatar\n [size]=\"avatarSize()\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n </div>\n @if (!isCompactMode()) {\n <div class=\"flex flex-col\">\n <ax-title class=\"text-sm font-medium px-3\">{{ (user$ | async)?.title }}</ax-title>\n <axp-tenant-chooser-dropdown [inline]=\"true\" />\n </div>\n }\n</div>\n}\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
|
|
1757
1771
|
//
|
|
1758
|
-
AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type:
|
|
1772
|
+
AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type:
|
|
1759
1773
|
//
|
|
1760
1774
|
AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown", inputs: ["inline"] }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1761
1775
|
}
|
|
@@ -1781,180 +1795,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1781
1795
|
args: ['profilePopover']
|
|
1782
1796
|
}] } });
|
|
1783
1797
|
|
|
1784
|
-
//#region ----- Imports -----
|
|
1785
|
-
//#endregion
|
|
1786
|
-
//#region ----- PWA install -----
|
|
1787
|
-
/**
|
|
1788
|
-
* Captures Chromium `beforeinstallprompt` as soon as startup runs, so the install
|
|
1789
|
-
* page still has a deferred prompt if the event fired before navigation.
|
|
1790
|
-
*/
|
|
1791
|
-
class AXPPwaInstallService {
|
|
1792
|
-
constructor() {
|
|
1793
|
-
//#region ----- Services & Dependencies -----
|
|
1794
|
-
this.destroyRef = inject(DestroyRef);
|
|
1795
|
-
//#endregion
|
|
1796
|
-
//#region ----- State Signals -----
|
|
1797
|
-
this.installedSignal = signal(false, /* @ts-ignore */
|
|
1798
|
-
...(ngDevMode ? [{ debugName: "installedSignal" }] : /* istanbul ignore next */ []));
|
|
1799
|
-
this.canPromptSignal = signal(false, /* @ts-ignore */
|
|
1800
|
-
...(ngDevMode ? [{ debugName: "canPromptSignal" }] : /* istanbul ignore next */ []));
|
|
1801
|
-
this.iosSignal = signal(false, /* @ts-ignore */
|
|
1802
|
-
...(ngDevMode ? [{ debugName: "iosSignal" }] : /* istanbul ignore next */ []));
|
|
1803
|
-
this.dismissedSignal = signal(readPromptDismissed(), /* @ts-ignore */
|
|
1804
|
-
...(ngDevMode ? [{ debugName: "dismissedSignal" }] : /* istanbul ignore next */ []));
|
|
1805
|
-
this.deferredPrompt = null;
|
|
1806
|
-
this.started = false;
|
|
1807
|
-
this.installed = this.installedSignal.asReadonly();
|
|
1808
|
-
this.canPrompt = this.canPromptSignal.asReadonly();
|
|
1809
|
-
this.ios = this.iosSignal.asReadonly();
|
|
1810
|
-
this.dismissed = this.dismissedSignal.asReadonly();
|
|
1811
|
-
this.showPrompt = computed(() => !this.installedSignal() && !this.dismissedSignal(), /* @ts-ignore */
|
|
1812
|
-
...(ngDevMode ? [{ debugName: "showPrompt" }] : /* istanbul ignore next */ []));
|
|
1813
|
-
this.offerInProfile = computed(() => !this.installedSignal(), /* @ts-ignore */
|
|
1814
|
-
...(ngDevMode ? [{ debugName: "offerInProfile" }] : /* istanbul ignore next */ []));
|
|
1815
|
-
this.promptHostClaimed = false;
|
|
1816
|
-
}
|
|
1817
|
-
//#endregion
|
|
1818
|
-
//#region ----- Public API -----
|
|
1819
|
-
start() {
|
|
1820
|
-
if (this.started || typeof window === 'undefined') {
|
|
1821
|
-
return;
|
|
1822
|
-
}
|
|
1823
|
-
this.started = true;
|
|
1824
|
-
this.installedSignal.set(isStandaloneDisplay());
|
|
1825
|
-
this.iosSignal.set(isIosSafari() && !isStandaloneDisplay());
|
|
1826
|
-
const onBeforeInstall = (event) => {
|
|
1827
|
-
event.preventDefault();
|
|
1828
|
-
this.deferredPrompt = event;
|
|
1829
|
-
this.canPromptSignal.set(true);
|
|
1830
|
-
};
|
|
1831
|
-
const onInstalled = () => {
|
|
1832
|
-
this.deferredPrompt = null;
|
|
1833
|
-
this.canPromptSignal.set(false);
|
|
1834
|
-
this.installedSignal.set(true);
|
|
1835
|
-
this.iosSignal.set(false);
|
|
1836
|
-
this.dismissPrompt();
|
|
1837
|
-
};
|
|
1838
|
-
const onDisplayMode = () => {
|
|
1839
|
-
const standalone = isStandaloneDisplay();
|
|
1840
|
-
this.installedSignal.set(standalone);
|
|
1841
|
-
if (standalone) {
|
|
1842
|
-
this.iosSignal.set(false);
|
|
1843
|
-
}
|
|
1844
|
-
};
|
|
1845
|
-
window.addEventListener('beforeinstallprompt', onBeforeInstall);
|
|
1846
|
-
window.addEventListener('appinstalled', onInstalled);
|
|
1847
|
-
const displayQuery = window.matchMedia('(display-mode: standalone)');
|
|
1848
|
-
displayQuery.addEventListener('change', onDisplayMode);
|
|
1849
|
-
this.destroyRef.onDestroy(() => {
|
|
1850
|
-
window.removeEventListener('beforeinstallprompt', onBeforeInstall);
|
|
1851
|
-
window.removeEventListener('appinstalled', onInstalled);
|
|
1852
|
-
displayQuery.removeEventListener('change', onDisplayMode);
|
|
1853
|
-
});
|
|
1854
|
-
}
|
|
1855
|
-
dismissPrompt() {
|
|
1856
|
-
this.dismissedSignal.set(true);
|
|
1857
|
-
persistPromptDismissed();
|
|
1858
|
-
}
|
|
1859
|
-
claimPromptHost() {
|
|
1860
|
-
if (this.promptHostClaimed) {
|
|
1861
|
-
return false;
|
|
1862
|
-
}
|
|
1863
|
-
this.promptHostClaimed = true;
|
|
1864
|
-
return true;
|
|
1865
|
-
}
|
|
1866
|
-
async promptInstall() {
|
|
1867
|
-
const promptEvent = this.deferredPrompt;
|
|
1868
|
-
if (!promptEvent) {
|
|
1869
|
-
return 'unavailable';
|
|
1870
|
-
}
|
|
1871
|
-
await promptEvent.prompt();
|
|
1872
|
-
const choice = await promptEvent.userChoice;
|
|
1873
|
-
this.deferredPrompt = null;
|
|
1874
|
-
this.canPromptSignal.set(false);
|
|
1875
|
-
if (choice.outcome === 'accepted') {
|
|
1876
|
-
this.installedSignal.set(true);
|
|
1877
|
-
}
|
|
1878
|
-
return choice.outcome;
|
|
1879
|
-
}
|
|
1880
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPPwaInstallService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1881
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPPwaInstallService, providedIn: 'root' }); }
|
|
1882
|
-
}
|
|
1883
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPPwaInstallService, decorators: [{
|
|
1884
|
-
type: Injectable,
|
|
1885
|
-
args: [{ providedIn: 'root' }]
|
|
1886
|
-
}] });
|
|
1887
|
-
//#endregion
|
|
1888
|
-
//#region ----- Helpers -----
|
|
1889
|
-
function isStandaloneDisplay() {
|
|
1890
|
-
if (typeof window === 'undefined') {
|
|
1891
|
-
return false;
|
|
1892
|
-
}
|
|
1893
|
-
const navigatorStandalone = navigator.standalone === true;
|
|
1894
|
-
return (navigatorStandalone ||
|
|
1895
|
-
window.matchMedia('(display-mode: standalone)').matches ||
|
|
1896
|
-
window.matchMedia('(display-mode: window-controls-overlay)').matches);
|
|
1897
|
-
}
|
|
1898
|
-
const PWA_INSTALL_PROMPT_DISMISSED_KEY = 'axp:pwa-install-prompt-dismissed';
|
|
1899
|
-
function readPromptDismissed() {
|
|
1900
|
-
if (typeof window === 'undefined') {
|
|
1901
|
-
return false;
|
|
1902
|
-
}
|
|
1903
|
-
try {
|
|
1904
|
-
return window.localStorage.getItem(PWA_INSTALL_PROMPT_DISMISSED_KEY) === '1';
|
|
1905
|
-
}
|
|
1906
|
-
catch {
|
|
1907
|
-
return false;
|
|
1908
|
-
}
|
|
1909
|
-
}
|
|
1910
|
-
function persistPromptDismissed() {
|
|
1911
|
-
if (typeof window === 'undefined') {
|
|
1912
|
-
return;
|
|
1913
|
-
}
|
|
1914
|
-
try {
|
|
1915
|
-
window.localStorage.setItem(PWA_INSTALL_PROMPT_DISMISSED_KEY, '1');
|
|
1916
|
-
}
|
|
1917
|
-
catch {
|
|
1918
|
-
// Private mode or blocked storage; in-memory dismiss still applies for this session.
|
|
1919
|
-
}
|
|
1920
|
-
}
|
|
1921
|
-
function isIosSafari() {
|
|
1922
|
-
if (typeof navigator === 'undefined') {
|
|
1923
|
-
return false;
|
|
1924
|
-
}
|
|
1925
|
-
const ua = navigator.userAgent;
|
|
1926
|
-
const iPhone = /iPhone|iPad|iPod/i.test(ua);
|
|
1927
|
-
const iPadOs = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;
|
|
1928
|
-
return iPhone || iPadOs;
|
|
1929
|
-
}
|
|
1930
|
-
|
|
1931
|
-
//#region ----- Imports -----
|
|
1932
|
-
//#endregion
|
|
1933
|
-
//#region ----- Component -----
|
|
1934
|
-
class AXMPwaInstallPromptComponent {
|
|
1935
|
-
constructor() {
|
|
1936
|
-
//#region ----- Services & Dependencies -----
|
|
1937
|
-
this.router = inject(Router);
|
|
1938
|
-
this.pwaInstall = inject(AXPPwaInstallService);
|
|
1939
|
-
this.isPromptHost = this.pwaInstall.claimPromptHost();
|
|
1940
|
-
}
|
|
1941
|
-
//#endregion
|
|
1942
|
-
//#region ----- Event Handlers -----
|
|
1943
|
-
handleOpenInstallPage() {
|
|
1944
|
-
this.pwaInstall.dismissPrompt();
|
|
1945
|
-
void this.router.navigateByUrl('/auth/install');
|
|
1946
|
-
}
|
|
1947
|
-
handleDismiss() {
|
|
1948
|
-
this.pwaInstall.dismissPrompt();
|
|
1949
|
-
}
|
|
1950
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPwaInstallPromptComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1951
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMPwaInstallPromptComponent, isStandalone: true, selector: "axm-pwa-install-prompt", ngImport: i0, template: "@if (isPromptHost && pwaInstall.showPrompt()) {\n <!-- ----- Corner install suggestion while the app is not installed ----- -->\n <div\n class=\"axp-pwa-install-prompt\"\n role=\"region\"\n [attr.aria-label]=\"'@auth:pwa-install.prompt.title' | translate | async\"\n >\n <ax-button\n class=\"axp-pwa-install-prompt__dismiss\"\n look=\"blank\"\n [iconOnly]=\"true\"\n [attr.aria-label]=\"'@auth:pwa-install.prompt.dismiss' | translate | async\"\n (onClick)=\"handleDismiss()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-xmark\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <div class=\"axp-pwa-install-prompt__copy\">\n <p class=\"font-semibold\">{{ '@auth:pwa-install.prompt.title' | translate | async }}</p>\n <p class=\"text-sm text-neutral-600\">{{ '@auth:pwa-install.prompt.hint' | translate | async }}</p>\n </div>\n <ax-button\n color=\"primary\"\n class=\"w-full\"\n [text]=\"'@auth:pwa-install.prompt.action' | translate | async\"\n (onClick)=\"handleOpenInstallPage()\"\n ></ax-button>\n </div>\n}\n", styles: ["@layer properties;:host{display:contents}.axp-pwa-install-prompt{position:fixed;z-index:40;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border-default);background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);inset-inline-end:1.5rem;bottom:1.5rem;width:min(20rem,calc(100vw - 2rem))}.axp-pwa-install-prompt__dismiss{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 2);top:calc(var(--spacing, .25rem) * 2)}.axp-pwa-install-prompt__copy{padding-inline-end:calc(var(--spacing, .25rem) * 8);text-align:start}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1952
|
-
}
|
|
1953
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPwaInstallPromptComponent, decorators: [{
|
|
1954
|
-
type: Component,
|
|
1955
|
-
args: [{ selector: 'axm-pwa-install-prompt', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule, AXTranslationModule, AsyncPipe], template: "@if (isPromptHost && pwaInstall.showPrompt()) {\n <!-- ----- Corner install suggestion while the app is not installed ----- -->\n <div\n class=\"axp-pwa-install-prompt\"\n role=\"region\"\n [attr.aria-label]=\"'@auth:pwa-install.prompt.title' | translate | async\"\n >\n <ax-button\n class=\"axp-pwa-install-prompt__dismiss\"\n look=\"blank\"\n [iconOnly]=\"true\"\n [attr.aria-label]=\"'@auth:pwa-install.prompt.dismiss' | translate | async\"\n (onClick)=\"handleDismiss()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-xmark\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <div class=\"axp-pwa-install-prompt__copy\">\n <p class=\"font-semibold\">{{ '@auth:pwa-install.prompt.title' | translate | async }}</p>\n <p class=\"text-sm text-neutral-600\">{{ '@auth:pwa-install.prompt.hint' | translate | async }}</p>\n </div>\n <ax-button\n color=\"primary\"\n class=\"w-full\"\n [text]=\"'@auth:pwa-install.prompt.action' | translate | async\"\n (onClick)=\"handleOpenInstallPage()\"\n ></ax-button>\n </div>\n}\n", styles: ["@layer properties;:host{display:contents}.axp-pwa-install-prompt{position:fixed;z-index:40;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border-default);background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);inset-inline-end:1.5rem;bottom:1.5rem;width:min(20rem,calc(100vw - 2rem))}.axp-pwa-install-prompt__dismiss{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 2);top:calc(var(--spacing, .25rem) * 2)}.axp-pwa-install-prompt__copy{padding-inline-end:calc(var(--spacing, .25rem) * 8);text-align:start}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
1956
|
-
}] });
|
|
1957
|
-
|
|
1958
1798
|
class AXMUserDeviceSessionsService {
|
|
1959
1799
|
}
|
|
1960
1800
|
class AXMUserDeviceSessionsServiceImp extends AXMUserDeviceSessionsService {
|
|
@@ -2577,7 +2417,7 @@ function routesFacory() {
|
|
|
2577
2417
|
routes = [
|
|
2578
2418
|
{
|
|
2579
2419
|
path: 'tenant-chooser',
|
|
2580
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-tenant-chooser.component-
|
|
2420
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-tenant-chooser.component-BuDF5_BQ.mjs').then((c) => c.AXPAuthTenantChooserComponent),
|
|
2581
2421
|
canActivate: [AXPAuthGuard, canActivateTenantChooser],
|
|
2582
2422
|
},
|
|
2583
2423
|
{
|
|
@@ -2592,12 +2432,12 @@ function routesFacory() {
|
|
|
2592
2432
|
},
|
|
2593
2433
|
{
|
|
2594
2434
|
path: 'app-chooser',
|
|
2595
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-app-chooser.component-
|
|
2435
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-app-chooser.component-DtqWiAUz.mjs').then((c) => c.AXPAuthAppChooserComponent),
|
|
2596
2436
|
canActivate: [AXPAuthGuard, canActivateAppChooser],
|
|
2597
2437
|
},
|
|
2598
2438
|
{
|
|
2599
2439
|
path: 'welcome-onboarding',
|
|
2600
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-welcome-onboarding-page.component-
|
|
2440
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-welcome-onboarding-page.component-DcYCayqN.mjs').then((c) => c.AXPAuthWelcomeOnboardingPageComponent),
|
|
2601
2441
|
canActivate: [AXPAuthGuard, canActivateWelcomeOnboarding],
|
|
2602
2442
|
},
|
|
2603
2443
|
];
|
|
@@ -2624,20 +2464,6 @@ class AXPAccountModule {
|
|
|
2624
2464
|
component: AXMUserProfileCardSlotComponent,
|
|
2625
2465
|
},
|
|
2626
2466
|
],
|
|
2627
|
-
'root-footer-end': [
|
|
2628
|
-
{
|
|
2629
|
-
priority: 20,
|
|
2630
|
-
name: 'pwa-install-prompt',
|
|
2631
|
-
component: AXMPwaInstallPromptComponent,
|
|
2632
|
-
},
|
|
2633
|
-
],
|
|
2634
|
-
'root-layout-overlay': [
|
|
2635
|
-
{
|
|
2636
|
-
priority: 10,
|
|
2637
|
-
name: 'pwa-install-prompt',
|
|
2638
|
-
component: AXMPwaInstallPromptComponent,
|
|
2639
|
-
},
|
|
2640
|
-
],
|
|
2641
2467
|
'root-header-end': [
|
|
2642
2468
|
{
|
|
2643
2469
|
priority: 98,
|
|
@@ -2665,20 +2491,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2665
2491
|
component: AXMUserProfileCardSlotComponent,
|
|
2666
2492
|
},
|
|
2667
2493
|
],
|
|
2668
|
-
'root-footer-end': [
|
|
2669
|
-
{
|
|
2670
|
-
priority: 20,
|
|
2671
|
-
name: 'pwa-install-prompt',
|
|
2672
|
-
component: AXMPwaInstallPromptComponent,
|
|
2673
|
-
},
|
|
2674
|
-
],
|
|
2675
|
-
'root-layout-overlay': [
|
|
2676
|
-
{
|
|
2677
|
-
priority: 10,
|
|
2678
|
-
name: 'pwa-install-prompt',
|
|
2679
|
-
component: AXMPwaInstallPromptComponent,
|
|
2680
|
-
},
|
|
2681
|
-
],
|
|
2682
2494
|
'root-header-end': [
|
|
2683
2495
|
{
|
|
2684
2496
|
priority: 98,
|
|
@@ -3013,7 +2825,7 @@ class AXPIdleLockService {
|
|
|
3013
2825
|
this.overlayOpening = true;
|
|
3014
2826
|
this.locked.set(true);
|
|
3015
2827
|
try {
|
|
3016
|
-
const { AXMSessionLockOverlayComponent: overlayComponent } = await import('./acorex-platform-module-auth-client-session-lock-overlay.component-
|
|
2828
|
+
const { AXMSessionLockOverlayComponent: overlayComponent } = await import('./acorex-platform-module-auth-client-session-lock-overlay.component-BG_kRZlx.mjs');
|
|
3017
2829
|
const panelClasses = ['axm-session-lock-overlay-shell'];
|
|
3018
2830
|
if (this.platform.isDark()) {
|
|
3019
2831
|
panelClasses.push('ax-dark');
|
|
@@ -3904,35 +3716,6 @@ const ProfileSlotPresenceMenuHookProvider = {
|
|
|
3904
3716
|
};
|
|
3905
3717
|
//#endregion
|
|
3906
3718
|
|
|
3907
|
-
//#region ---- Profile slot install app menu hook ----
|
|
3908
|
-
/** Registers Install App in the profile dropdown while this device is not in standalone mode. */
|
|
3909
|
-
const ProfileSlotInstallAppMenuHookProvider = {
|
|
3910
|
-
key: PROFILE_SLOT_MENU_ITEMS_HOOK,
|
|
3911
|
-
priority: 5,
|
|
3912
|
-
execute: (payload) => {
|
|
3913
|
-
const pwaInstall = inject(AXPPwaInstallService);
|
|
3914
|
-
return {
|
|
3915
|
-
...payload,
|
|
3916
|
-
items: [
|
|
3917
|
-
...payload.items,
|
|
3918
|
-
{
|
|
3919
|
-
name: 'install-app',
|
|
3920
|
-
title: '@auth:pwa-install.link',
|
|
3921
|
-
icon: 'fa-light fa-download',
|
|
3922
|
-
visible: pwaInstall.offerInProfile(),
|
|
3923
|
-
command: {
|
|
3924
|
-
name: 'navigate',
|
|
3925
|
-
options: {
|
|
3926
|
-
path: '/auth/install',
|
|
3927
|
-
},
|
|
3928
|
-
},
|
|
3929
|
-
},
|
|
3930
|
-
],
|
|
3931
|
-
};
|
|
3932
|
-
},
|
|
3933
|
-
};
|
|
3934
|
-
//#endregion
|
|
3935
|
-
|
|
3936
3719
|
//#region ----- Welcome preference steps hook -----
|
|
3937
3720
|
/**
|
|
3938
3721
|
* Core welcome preference steps, ordered for first-run UX:
|
|
@@ -4274,7 +4057,7 @@ function provideAuthSecurityAlertRealtime() {
|
|
|
4274
4057
|
//#endregion
|
|
4275
4058
|
|
|
4276
4059
|
function profileRoutesFactory() {
|
|
4277
|
-
const loadProfilePage = () => import('./acorex-platform-module-auth-client-profile-page.component-
|
|
4060
|
+
const loadProfilePage = () => import('./acorex-platform-module-auth-client-profile-page.component-CTUIGiwl.mjs').then((c) => c.AXMUserProfilePageComponent);
|
|
4278
4061
|
return [
|
|
4279
4062
|
{
|
|
4280
4063
|
path: ':app/profile',
|
|
@@ -4307,16 +4090,6 @@ class AXMAuthModule {
|
|
|
4307
4090
|
AXMAuthValidationRulesModule] }); }
|
|
4308
4091
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAuthModule, providers: [
|
|
4309
4092
|
...provideAuthSecurityAlertRealtime(),
|
|
4310
|
-
provideAppStartUpTask(() => {
|
|
4311
|
-
const pwaInstall = inject(AXPPwaInstallService);
|
|
4312
|
-
return {
|
|
4313
|
-
name: 'pwa-install-prompt',
|
|
4314
|
-
priority: AXP_APP_STARTUP_PRIORITY.terms,
|
|
4315
|
-
run: async () => {
|
|
4316
|
-
pwaInstall.start();
|
|
4317
|
-
},
|
|
4318
|
-
};
|
|
4319
|
-
}),
|
|
4320
4093
|
provideAppStartUpTask(() => {
|
|
4321
4094
|
const sessionService = inject(AXPSessionService);
|
|
4322
4095
|
const idleLockService = inject(AXPIdleLockService);
|
|
@@ -4402,11 +4175,11 @@ class AXMAuthModule {
|
|
|
4402
4175
|
AXMAuthErrorHandler,
|
|
4403
4176
|
provideLazyProvider(AXP_MENU_PROVIDER, () => import('./acorex-platform-module-auth-client-menu.provider-Bz-kRip4.mjs').then(m => m.AXMSecurityManagementModuleMenuProvider)),
|
|
4404
4177
|
provideLazyProvider(AXP_SETTING_DEFINITION_PROVIDER, () => import('./acorex-platform-module-auth-client-settings.provider-DsKsZrOC.mjs').then(m => m.AXMSettingProvider)),
|
|
4405
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-
|
|
4178
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-DFR0YCzn.mjs').then((module) => module.AXMProfilePageComponentProvider)),
|
|
4406
4179
|
provideQuerySetups([
|
|
4407
4180
|
{
|
|
4408
4181
|
key: 'Auth:GetUserActivity',
|
|
4409
|
-
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-
|
|
4182
|
+
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-WQ2Cddje.mjs').then((c) => c.AXMGetUserActivityQuery),
|
|
4410
4183
|
},
|
|
4411
4184
|
]),
|
|
4412
4185
|
{
|
|
@@ -4430,15 +4203,15 @@ class AXMAuthModule {
|
|
|
4430
4203
|
},
|
|
4431
4204
|
{
|
|
4432
4205
|
key: AXMAuthCommandKeys.Session.OpenSessions,
|
|
4433
|
-
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-
|
|
4206
|
+
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-QA8Qy-QK.mjs').then((c) => c.AXPOpenSessionsCommand),
|
|
4434
4207
|
},
|
|
4435
4208
|
{
|
|
4436
4209
|
key: AXMAuthCommandKeys.Session.LockScreen,
|
|
4437
|
-
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-
|
|
4210
|
+
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-BNfSDphl.mjs').then((c) => c.AXPLockScreenCommand),
|
|
4438
4211
|
},
|
|
4439
4212
|
{
|
|
4440
4213
|
key: AXMAuthCommandKeys.Profile.ChangePhoto,
|
|
4441
|
-
command: () => import('./acorex-platform-module-auth-client-change-photo.command-
|
|
4214
|
+
command: () => import('./acorex-platform-module-auth-client-change-photo.command-nUXhaunq.mjs').then((c) => c.AXPChangePhotoCommand),
|
|
4442
4215
|
},
|
|
4443
4216
|
{
|
|
4444
4217
|
key: AXMAuthCommandKeys.Profile.EditAccountInfo,
|
|
@@ -4446,23 +4219,23 @@ class AXMAuthModule {
|
|
|
4446
4219
|
},
|
|
4447
4220
|
{
|
|
4448
4221
|
key: AXMAuthCommandKeys.Security.ChangePassword,
|
|
4449
|
-
command: () => import('./acorex-platform-module-auth-client-change-password.command-
|
|
4222
|
+
command: () => import('./acorex-platform-module-auth-client-change-password.command-Bmhag8Ec.mjs').then((c) => c.AXPChangePasswordCommand),
|
|
4450
4223
|
},
|
|
4451
4224
|
{
|
|
4452
4225
|
key: AXMAuthCommandKeys.Security.ManageTwoFactor,
|
|
4453
|
-
command: () => import('./acorex-platform-module-auth-client-manage-two-factor.command-
|
|
4226
|
+
command: () => import('./acorex-platform-module-auth-client-manage-two-factor.command-DUKXmbTm.mjs').then((c) => c.AXPManageTwoFactorCommand),
|
|
4454
4227
|
},
|
|
4455
4228
|
{
|
|
4456
4229
|
key: AXMAuthCommandKeys.Security.SetPinCode,
|
|
4457
|
-
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-
|
|
4230
|
+
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-Dr-Ca07P.mjs').then((c) => c.AXPSetPinCodeCommand),
|
|
4458
4231
|
},
|
|
4459
4232
|
{
|
|
4460
4233
|
key: AXMAuthCommandKeys.Security.RemovePinCode,
|
|
4461
|
-
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-
|
|
4234
|
+
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-CHs-Ulo9.mjs').then((c) => c.AXPRemovePinCodeCommand),
|
|
4462
4235
|
},
|
|
4463
4236
|
{
|
|
4464
4237
|
key: AXMAuthCommandKeys.Security.ViewLoginHistory,
|
|
4465
|
-
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-
|
|
4238
|
+
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-BDWELxmi.mjs').then((c) => c.AXPViewLoginHistoryCommand),
|
|
4466
4239
|
},
|
|
4467
4240
|
{
|
|
4468
4241
|
key: AXMAuthCommandKeys.Security.EditSignature,
|
|
@@ -4474,7 +4247,7 @@ class AXMAuthModule {
|
|
|
4474
4247
|
},
|
|
4475
4248
|
{
|
|
4476
4249
|
key: AXMAuthCommandKeys.Onboarding.Welcome,
|
|
4477
|
-
command: () => import('./acorex-platform-module-auth-client-welcome-onboarding.command-
|
|
4250
|
+
command: () => import('./acorex-platform-module-auth-client-welcome-onboarding.command-BKMo5xN9.mjs').then((c) => c.AXPWelcomeOnboardingCommand),
|
|
4478
4251
|
},
|
|
4479
4252
|
{
|
|
4480
4253
|
key: AXMAuthCommandKeys.Account.OpenWaitingRoom,
|
|
@@ -4492,11 +4265,6 @@ class AXMAuthModule {
|
|
|
4492
4265
|
useValue: ProfileSlotMyProfileMenuHookProvider,
|
|
4493
4266
|
multi: true,
|
|
4494
4267
|
},
|
|
4495
|
-
{
|
|
4496
|
-
provide: AXP_HOOK_PROVIDER,
|
|
4497
|
-
useValue: ProfileSlotInstallAppMenuHookProvider,
|
|
4498
|
-
multi: true,
|
|
4499
|
-
},
|
|
4500
4268
|
{
|
|
4501
4269
|
provide: AXP_HOOK_PROVIDER,
|
|
4502
4270
|
useValue: ProfileSlotLockMenuHookProvider,
|
|
@@ -4560,16 +4328,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4560
4328
|
],
|
|
4561
4329
|
providers: [
|
|
4562
4330
|
...provideAuthSecurityAlertRealtime(),
|
|
4563
|
-
provideAppStartUpTask(() => {
|
|
4564
|
-
const pwaInstall = inject(AXPPwaInstallService);
|
|
4565
|
-
return {
|
|
4566
|
-
name: 'pwa-install-prompt',
|
|
4567
|
-
priority: AXP_APP_STARTUP_PRIORITY.terms,
|
|
4568
|
-
run: async () => {
|
|
4569
|
-
pwaInstall.start();
|
|
4570
|
-
},
|
|
4571
|
-
};
|
|
4572
|
-
}),
|
|
4573
4331
|
provideAppStartUpTask(() => {
|
|
4574
4332
|
const sessionService = inject(AXPSessionService);
|
|
4575
4333
|
const idleLockService = inject(AXPIdleLockService);
|
|
@@ -4655,11 +4413,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4655
4413
|
AXMAuthErrorHandler,
|
|
4656
4414
|
provideLazyProvider(AXP_MENU_PROVIDER, () => import('./acorex-platform-module-auth-client-menu.provider-Bz-kRip4.mjs').then(m => m.AXMSecurityManagementModuleMenuProvider)),
|
|
4657
4415
|
provideLazyProvider(AXP_SETTING_DEFINITION_PROVIDER, () => import('./acorex-platform-module-auth-client-settings.provider-DsKsZrOC.mjs').then(m => m.AXMSettingProvider)),
|
|
4658
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-
|
|
4416
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-DFR0YCzn.mjs').then((module) => module.AXMProfilePageComponentProvider)),
|
|
4659
4417
|
provideQuerySetups([
|
|
4660
4418
|
{
|
|
4661
4419
|
key: 'Auth:GetUserActivity',
|
|
4662
|
-
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-
|
|
4420
|
+
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-WQ2Cddje.mjs').then((c) => c.AXMGetUserActivityQuery),
|
|
4663
4421
|
},
|
|
4664
4422
|
]),
|
|
4665
4423
|
{
|
|
@@ -4683,15 +4441,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4683
4441
|
},
|
|
4684
4442
|
{
|
|
4685
4443
|
key: AXMAuthCommandKeys.Session.OpenSessions,
|
|
4686
|
-
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-
|
|
4444
|
+
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-QA8Qy-QK.mjs').then((c) => c.AXPOpenSessionsCommand),
|
|
4687
4445
|
},
|
|
4688
4446
|
{
|
|
4689
4447
|
key: AXMAuthCommandKeys.Session.LockScreen,
|
|
4690
|
-
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-
|
|
4448
|
+
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-BNfSDphl.mjs').then((c) => c.AXPLockScreenCommand),
|
|
4691
4449
|
},
|
|
4692
4450
|
{
|
|
4693
4451
|
key: AXMAuthCommandKeys.Profile.ChangePhoto,
|
|
4694
|
-
command: () => import('./acorex-platform-module-auth-client-change-photo.command-
|
|
4452
|
+
command: () => import('./acorex-platform-module-auth-client-change-photo.command-nUXhaunq.mjs').then((c) => c.AXPChangePhotoCommand),
|
|
4695
4453
|
},
|
|
4696
4454
|
{
|
|
4697
4455
|
key: AXMAuthCommandKeys.Profile.EditAccountInfo,
|
|
@@ -4699,23 +4457,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4699
4457
|
},
|
|
4700
4458
|
{
|
|
4701
4459
|
key: AXMAuthCommandKeys.Security.ChangePassword,
|
|
4702
|
-
command: () => import('./acorex-platform-module-auth-client-change-password.command-
|
|
4460
|
+
command: () => import('./acorex-platform-module-auth-client-change-password.command-Bmhag8Ec.mjs').then((c) => c.AXPChangePasswordCommand),
|
|
4703
4461
|
},
|
|
4704
4462
|
{
|
|
4705
4463
|
key: AXMAuthCommandKeys.Security.ManageTwoFactor,
|
|
4706
|
-
command: () => import('./acorex-platform-module-auth-client-manage-two-factor.command-
|
|
4464
|
+
command: () => import('./acorex-platform-module-auth-client-manage-two-factor.command-DUKXmbTm.mjs').then((c) => c.AXPManageTwoFactorCommand),
|
|
4707
4465
|
},
|
|
4708
4466
|
{
|
|
4709
4467
|
key: AXMAuthCommandKeys.Security.SetPinCode,
|
|
4710
|
-
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-
|
|
4468
|
+
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-Dr-Ca07P.mjs').then((c) => c.AXPSetPinCodeCommand),
|
|
4711
4469
|
},
|
|
4712
4470
|
{
|
|
4713
4471
|
key: AXMAuthCommandKeys.Security.RemovePinCode,
|
|
4714
|
-
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-
|
|
4472
|
+
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-CHs-Ulo9.mjs').then((c) => c.AXPRemovePinCodeCommand),
|
|
4715
4473
|
},
|
|
4716
4474
|
{
|
|
4717
4475
|
key: AXMAuthCommandKeys.Security.ViewLoginHistory,
|
|
4718
|
-
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-
|
|
4476
|
+
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-BDWELxmi.mjs').then((c) => c.AXPViewLoginHistoryCommand),
|
|
4719
4477
|
},
|
|
4720
4478
|
{
|
|
4721
4479
|
key: AXMAuthCommandKeys.Security.EditSignature,
|
|
@@ -4727,7 +4485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4727
4485
|
},
|
|
4728
4486
|
{
|
|
4729
4487
|
key: AXMAuthCommandKeys.Onboarding.Welcome,
|
|
4730
|
-
command: () => import('./acorex-platform-module-auth-client-welcome-onboarding.command-
|
|
4488
|
+
command: () => import('./acorex-platform-module-auth-client-welcome-onboarding.command-BKMo5xN9.mjs').then((c) => c.AXPWelcomeOnboardingCommand),
|
|
4731
4489
|
},
|
|
4732
4490
|
{
|
|
4733
4491
|
key: AXMAuthCommandKeys.Account.OpenWaitingRoom,
|
|
@@ -4745,11 +4503,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4745
4503
|
useValue: ProfileSlotMyProfileMenuHookProvider,
|
|
4746
4504
|
multi: true,
|
|
4747
4505
|
},
|
|
4748
|
-
{
|
|
4749
|
-
provide: AXP_HOOK_PROVIDER,
|
|
4750
|
-
useValue: ProfileSlotInstallAppMenuHookProvider,
|
|
4751
|
-
multi: true,
|
|
4752
|
-
},
|
|
4753
4506
|
{
|
|
4754
4507
|
provide: AXP_HOOK_PROVIDER,
|
|
4755
4508
|
useValue: ProfileSlotLockMenuHookProvider,
|
|
@@ -4863,9 +4616,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4863
4616
|
args: [{ providedIn: 'root' }]
|
|
4864
4617
|
}] });
|
|
4865
4618
|
|
|
4619
|
+
//#region ----- Auth master layout -----
|
|
4620
|
+
class AXPAuthMasterLayoutComponent {
|
|
4621
|
+
//#endregion
|
|
4622
|
+
//#region ----- Lifecycle -----
|
|
4623
|
+
constructor() {
|
|
4624
|
+
//#region ----- Services & Dependencies -----
|
|
4625
|
+
this.authPlatformSettings = inject(AXMAuthPlatformSettingsService);
|
|
4626
|
+
this.platformBranding = inject(AXPPlatformBrandingService);
|
|
4627
|
+
this.platformTitle = signal('', /* @ts-ignore */
|
|
4628
|
+
...(ngDevMode ? [{ debugName: "platformTitle" }] : /* istanbul ignore next */ []));
|
|
4629
|
+
//#endregion
|
|
4630
|
+
//#region ----- Computed Properties -----
|
|
4631
|
+
/** Plain string or MLS map — rendered via translate pipe. */
|
|
4632
|
+
this.slogan = this.authPlatformSettings.slogan();
|
|
4633
|
+
this.description = this.authPlatformSettings.description();
|
|
4634
|
+
void this.platformBranding.resolvePlatformTitle().then((title) => this.platformTitle.set(title));
|
|
4635
|
+
}
|
|
4636
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAuthMasterLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4637
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPAuthMasterLayoutComponent, isStandalone: true, selector: "ng-component", providers: [AXPContextStore], ngImport: i0, template: "<div class=\"w-full h-full flex overflow-hidden\">\n <div\n class=\"axp-auth-master__form-pane flex-1 min-h-0 lightest-surface dark:darker-surface overflow-y-auto px-6 sm:px-8 md:px-10 lg:px-0\"\n >\n <!-- ----- Stack: logo + form vertically centered; footer pinned below ----- -->\n <div\n class=\"axp-auth-master__stack w-full min-h-full flex flex-col items-center\"\n >\n <div\n class=\"axp-auth-master__main w-full grow flex flex-col items-center justify-center gap-5 pt-6 pb-4 sm:pt-8 lg:pt-0 lg:gap-0\"\n >\n <!-- ----- Platform branding on viewports without the side panel ----- -->\n <div class=\"axp-auth-master__brand lg:hidden shrink-0 w-full flex justify-center\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"240\"\n [attr.alt]=\"platformTitle()\"\n class=\"axp-auth-master__logo\"\n ></axp-logo>\n </div>\n <div class=\"axp-auth-master__form-body w-full flex flex-col items-center\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <div class=\"flex justify-between shrink-0 pt-2 pb-1\">\n <div class=\"auth-footer-links\">\n <axp-component-slot name=\"auth-footer-links\"></axp-component-slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"hidden lg:flex bg-primary-500 flex-1 axp-auth-bk text-white\">\n <div class=\"flex w-full flex-col justify-between px-48 py-20 text-center \">\n <div>\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onDark\"\n format=\"full\"\n [size]=\"280\"\n [attr.alt]=\"platformTitle()\"\n class=\"w-[280px] max-w-full mx-auto\"\n ></axp-logo>\n </div>\n <div>\n <p class=\"font-black text-4xl mb-4\">{{ slogan | translate | async }}</p>\n <p>{{ description | translate | async }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;.axp-auth-master__form-pane{-webkit-overflow-scrolling:touch;padding-top:max(1.75rem,calc(env(safe-area-inset-top,0px) + 1.25rem));padding-bottom:max(1.5rem,env(safe-area-inset-bottom,0px))}@media(min-width:1024px){.axp-auth-master__form-pane{padding-top:3rem;padding-bottom:3rem}}.axp-auth-master__brand{padding-top:.5rem;margin-bottom:.25rem}.axp-auth-master__logo{width:min(15rem,85vw);max-width:100%}@media(min-width:640px){.axp-auth-master__logo{width:min(16.25rem,90vw)}}.axp-auth-master__form-body>*:not(router-outlet){display:block;width:100%}.auth-footer-links{gap:calc(var(--spacing, .25rem) * 5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.auth-footer-links a{background-color:transparent;color:var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-surface)))}.auth-footer-links a.ax-state-selected{color:var(--ax-comp-ink-darker, var(--ax-comp-bg-darker, var(--color-on-surface)))}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i6$1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "directive", type: i1$3.AXPComponentSlotDirective, selector: "axp-component-slot", inputs: ["name", "host", "context"], exportAs: ["slot"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
|
|
4638
|
+
}
|
|
4639
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAuthMasterLayoutComponent, decorators: [{
|
|
4640
|
+
type: Component,
|
|
4641
|
+
args: [{ imports: [RouterModule, AXPLogoComponent, AXPComponentSlotModule, AXTranslationModule, AsyncPipe], providers: [AXPContextStore], changeDetection: ChangeDetectionStrategy.Eager, encapsulation: ViewEncapsulation.None, template: "<div class=\"w-full h-full flex overflow-hidden\">\n <div\n class=\"axp-auth-master__form-pane flex-1 min-h-0 lightest-surface dark:darker-surface overflow-y-auto px-6 sm:px-8 md:px-10 lg:px-0\"\n >\n <!-- ----- Stack: logo + form vertically centered; footer pinned below ----- -->\n <div\n class=\"axp-auth-master__stack w-full min-h-full flex flex-col items-center\"\n >\n <div\n class=\"axp-auth-master__main w-full grow flex flex-col items-center justify-center gap-5 pt-6 pb-4 sm:pt-8 lg:pt-0 lg:gap-0\"\n >\n <!-- ----- Platform branding on viewports without the side panel ----- -->\n <div class=\"axp-auth-master__brand lg:hidden shrink-0 w-full flex justify-center\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"240\"\n [attr.alt]=\"platformTitle()\"\n class=\"axp-auth-master__logo\"\n ></axp-logo>\n </div>\n <div class=\"axp-auth-master__form-body w-full flex flex-col items-center\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <div class=\"flex justify-between shrink-0 pt-2 pb-1\">\n <div class=\"auth-footer-links\">\n <axp-component-slot name=\"auth-footer-links\"></axp-component-slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"hidden lg:flex bg-primary-500 flex-1 axp-auth-bk text-white\">\n <div class=\"flex w-full flex-col justify-between px-48 py-20 text-center \">\n <div>\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onDark\"\n format=\"full\"\n [size]=\"280\"\n [attr.alt]=\"platformTitle()\"\n class=\"w-[280px] max-w-full mx-auto\"\n ></axp-logo>\n </div>\n <div>\n <p class=\"font-black text-4xl mb-4\">{{ slogan | translate | async }}</p>\n <p>{{ description | translate | async }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;.axp-auth-master__form-pane{-webkit-overflow-scrolling:touch;padding-top:max(1.75rem,calc(env(safe-area-inset-top,0px) + 1.25rem));padding-bottom:max(1.5rem,env(safe-area-inset-bottom,0px))}@media(min-width:1024px){.axp-auth-master__form-pane{padding-top:3rem;padding-bottom:3rem}}.axp-auth-master__brand{padding-top:.5rem;margin-bottom:.25rem}.axp-auth-master__logo{width:min(15rem,85vw);max-width:100%}@media(min-width:640px){.axp-auth-master__logo{width:min(16.25rem,90vw)}}.axp-auth-master__form-body>*:not(router-outlet){display:block;width:100%}.auth-footer-links{gap:calc(var(--spacing, .25rem) * 5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.auth-footer-links a{background-color:transparent;color:var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-surface)))}.auth-footer-links a.ax-state-selected{color:var(--ax-comp-ink-darker, var(--ax-comp-bg-darker, var(--color-on-surface)))}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
4642
|
+
}], ctorParameters: () => [] });
|
|
4643
|
+
|
|
4644
|
+
var master_layout = /*#__PURE__*/Object.freeze({
|
|
4645
|
+
__proto__: null,
|
|
4646
|
+
AXPAuthMasterLayoutComponent: AXPAuthMasterLayoutComponent
|
|
4647
|
+
});
|
|
4648
|
+
|
|
4866
4649
|
/**
|
|
4867
4650
|
* Generated bundle index. Do not edit.
|
|
4868
4651
|
*/
|
|
4869
4652
|
|
|
4870
|
-
export {
|
|
4871
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
4653
|
+
export { configAuthModule as $, AXMUserDeviceSessionsService as A, AXPAppChooserListComponent as B, CHANGE_PASSWORD_SECTION_ID as C, AXPOnboardingProgressService as D, formatCompactActivityCount as E, AXPLoginExternalProvidersComponent as F, AXMAuthenticationTypes as G, AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT as H, AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS as I, AUTH_USER_ACTIVITY_DEFAULT_WEEKS as J, AUTH_USER_ACTIVITY_WEEK_PRESETS as K, AXMAuthErrorHandler as L, AXMAuthModule as M, AXMDefaultAuthConfigs as N, AXM_AUTH_CONFIG_TOKEN as O, PROFILE_PAGE_GROUPS_HOOK as P, AXPAuthMasterLayoutComponent as Q, ONBOARDING_STEPS_HOOK as R, ONBOARDING_WELCOME_SETTING_KEY as S, TWO_FACTOR_SECTION_ID$1 as T, PROFILE_SLOT_MENU_ITEMS_HOOK as U, aggregateDailySessionCounts as V, aggregateHourlySessionCounts as W, buildUserActivityHours as X, buildUserActivityWeeks as Y, canActivateLogin as Z, computeUserActivityStats as _, PROFILE_PAGE_SECTIONS_HOOK as a, countToActivityLevel as a0, extractUserActivityEndDate as a1, extractUserActivityStartDate as a2, extractUserActivityUserId as a3, hasProfileSlotMenuBreakAfter as a4, hasProfileSlotMenuBreakBefore as a5, isUserProfileGroupComponent as a6, isUserProfileSectionsGroupRequested as a7, parseAuthCredentialType as a8, resolveDayDateRange as a9, resolveUserActivityHeatmapLayout as aa, PROFILE_PAGE_HEADER_META_HOOK as b, resolveUserProfileSectionContent as c, PROFILE_SECTION_INSIGHTS_PATCH_METADATA_KEY as d, PROFILE_ACTIVITY_CHART_COMPONENT_KEY as e, PROFILE_DELETE_ACCOUNT_DANGER_ZONE_COMPONENT_KEY as f, resolveDefaultUserActivityDateRange as g, resolveSmartUserActivityDateRange as h, buildUserActivityDataSourceItem as i, AXPIdleLockService as j, AXPUserAvatarSyncService as k, AXPAuthPasswordComplexityService as l, AXPAuthPasswordChangeTrackingService as m, getPasswordComplexityHintKey as n, getPasswordComplexityValidationMessageKey as o, validatePasswordAgainstComplexity as p, buildPasswordLastChangedInsights as q, resolveDefaultUserProfileSectionAction as r, buildTwoFactorStatusInsights as s, AXPLoginHistoryService as t, AXPWelcomeOnboardingFlowService as u, visibleUserProfileSectionActions as v, AXM_LOGIN_GUARD_TOKEN as w, AXMAuthPlatformSettingsService as x, AXPTenantChooserListComponent as y, AXPTenantChooserDropdownComponent as z };
|
|
4654
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-acorex-platform-module-auth-client-DuplzyV7.mjs.map
|