@acorex/modules 20.2.0-next.1 → 20.2.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/auth/index.d.ts +58 -4
  2. package/conversation/README.md +1 -1
  3. package/conversation/index.d.ts +117 -71
  4. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-y6rICHrT.mjs → acorex-modules-auth-acorex-modules-auth-BxqN76H7.mjs} +232 -84
  5. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BxqN76H7.mjs.map +1 -0
  6. package/fesm2022/{acorex-modules-auth-app-chooser.component-Cpy0VN6n.mjs → acorex-modules-auth-app-chooser.component-5FbgqbVo.mjs} +6 -4
  7. package/fesm2022/acorex-modules-auth-app-chooser.component-5FbgqbVo.mjs.map +1 -0
  8. package/fesm2022/{acorex-modules-auth-login.module-ZEX4NMuJ.mjs → acorex-modules-auth-login.module-CmMM4TpQ.mjs} +4 -4
  9. package/fesm2022/{acorex-modules-auth-login.module-ZEX4NMuJ.mjs.map → acorex-modules-auth-login.module-CmMM4TpQ.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-auth-master.layout-D-lIn4Pl.mjs → acorex-modules-auth-master.layout-eX5-7AeO.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-auth-master.layout-D-lIn4Pl.mjs.map → acorex-modules-auth-master.layout-eX5-7AeO.mjs.map} +1 -1
  12. package/fesm2022/acorex-modules-auth-oauth-callback.component-C9s-5c7F.mjs +97 -0
  13. package/fesm2022/acorex-modules-auth-oauth-callback.component-C9s-5c7F.mjs.map +1 -0
  14. package/fesm2022/{acorex-modules-auth-password.component-CafZfqKe.mjs → acorex-modules-auth-password.component-CDrYHh1x.mjs} +7 -7
  15. package/fesm2022/{acorex-modules-auth-password.component-CafZfqKe.mjs.map → acorex-modules-auth-password.component-CDrYHh1x.mjs.map} +1 -1
  16. package/fesm2022/acorex-modules-auth-password.component-r_Lh8oGN.mjs +226 -0
  17. package/fesm2022/acorex-modules-auth-password.component-r_Lh8oGN.mjs.map +1 -0
  18. package/fesm2022/{acorex-modules-auth-routes-D9-qfC3V.mjs → acorex-modules-auth-routes-CMdsDZud.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-auth-routes-D9-qfC3V.mjs.map → acorex-modules-auth-routes-CMdsDZud.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-B1aE-TOD.mjs → acorex-modules-auth-tenant-chooser.component-BdK5T-8X.mjs} +19 -10
  21. package/fesm2022/acorex-modules-auth-tenant-chooser.component-BdK5T-8X.mjs.map +1 -0
  22. package/fesm2022/{acorex-modules-auth-two-factor-code.component-BglerlU-.mjs → acorex-modules-auth-two-factor-code.component-DSWd06bn.mjs} +6 -6
  23. package/fesm2022/{acorex-modules-auth-two-factor-code.component-BglerlU-.mjs.map → acorex-modules-auth-two-factor-code.component-DSWd06bn.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-auth-two-factor.module-D3N2XyOH.mjs → acorex-modules-auth-two-factor.module-YV9pDOnB.mjs} +3 -3
  25. package/fesm2022/{acorex-modules-auth-two-factor.module-D3N2XyOH.mjs.map → acorex-modules-auth-two-factor.module-YV9pDOnB.mjs.map} +1 -1
  26. package/fesm2022/acorex-modules-auth-user-sessions.component-KI9dYs78.mjs +135 -0
  27. package/fesm2022/acorex-modules-auth-user-sessions.component-KI9dYs78.mjs.map +1 -0
  28. package/fesm2022/acorex-modules-auth.mjs +1 -1
  29. package/fesm2022/acorex-modules-conversation.mjs +282 -204
  30. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  31. package/fesm2022/acorex-modules-notification-management.mjs +109 -28
  32. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  33. package/fesm2022/acorex-modules-organization-management-branch.entity-CHp5WtIF.mjs.map +1 -1
  34. package/fesm2022/acorex-modules-organization-management-department.entity-BxCyXNtv.mjs.map +1 -1
  35. package/fesm2022/acorex-modules-organization-management-division.entity-DzQT2jpz.mjs.map +1 -1
  36. package/fesm2022/acorex-modules-organization-management-employee.entity-CSY_U9Bl.mjs.map +1 -1
  37. package/fesm2022/acorex-modules-organization-management-employment-type.entity-h9Hua7Xe.mjs.map +1 -1
  38. package/fesm2022/acorex-modules-organization-management-position-category.entity-CIir9UMg.mjs.map +1 -1
  39. package/fesm2022/acorex-modules-organization-management-position.entity-BpkjUsoZ.mjs.map +1 -1
  40. package/fesm2022/acorex-modules-organization-management-responsibility-category.entity-tJFpEylO.mjs.map +1 -1
  41. package/fesm2022/acorex-modules-organization-management-responsibility.entity-DmKSoxpL.mjs.map +1 -1
  42. package/fesm2022/acorex-modules-organization-management-role-category.entity-CAljzQcH.mjs.map +1 -1
  43. package/fesm2022/acorex-modules-organization-management-skill-category.entity-iIbc-pjJ.mjs.map +1 -1
  44. package/fesm2022/acorex-modules-organization-management-skill.entity-DoAsCzm9.mjs.map +1 -1
  45. package/fesm2022/acorex-modules-organization-management-team.entity-DMCfAZsr.mjs.map +1 -1
  46. package/fesm2022/acorex-modules-security-management.mjs +753 -217
  47. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  48. package/fesm2022/{acorex-modules-workflow-management-acorex-modules-workflow-management-enYapFRb.mjs → acorex-modules-workflow-management-acorex-modules-workflow-management-DnSdOSmj.mjs} +6 -6
  49. package/fesm2022/{acorex-modules-workflow-management-acorex-modules-workflow-management-enYapFRb.mjs.map → acorex-modules-workflow-management-acorex-modules-workflow-management-DnSdOSmj.mjs.map} +1 -1
  50. package/fesm2022/{acorex-modules-workflow-management-task-board.page-CPL7HwN4.mjs → acorex-modules-workflow-management-task-board.page-Bzu4j4VW.mjs} +2 -2
  51. package/fesm2022/{acorex-modules-workflow-management-task-board.page-CPL7HwN4.mjs.map → acorex-modules-workflow-management-task-board.page-Bzu4j4VW.mjs.map} +1 -1
  52. package/fesm2022/acorex-modules-workflow-management.mjs +1 -1
  53. package/notification-management/index.d.ts +69 -59
  54. package/package.json +13 -13
  55. package/security-management/index.d.ts +13 -4
  56. package/workflow-management/index.d.ts +2 -2
  57. package/fesm2022/acorex-modules-auth-acorex-modules-auth-y6rICHrT.mjs.map +0 -1
  58. package/fesm2022/acorex-modules-auth-app-chooser.component-Cpy0VN6n.mjs.map +0 -1
  59. package/fesm2022/acorex-modules-auth-password.component-DLCb0_6e.mjs +0 -134
  60. package/fesm2022/acorex-modules-auth-password.component-DLCb0_6e.mjs.map +0 -1
  61. package/fesm2022/acorex-modules-auth-tenant-chooser.component-B1aE-TOD.mjs.map +0 -1
@@ -1,15 +1,18 @@
1
- import { AXPUnauthorizedError, AXPUnauthenticatedError, AXPSessionService, AXPAuthGuard } from '@acorex/platform/auth';
1
+ import { AXPUnauthorizedError, AXPUnauthenticatedError, AXPSessionService, AXPAuthStrategyRegistryService, AXPAuthGuard } from '@acorex/platform/auth';
2
2
  import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
3
+ import * as i1$3 from '@angular/common/http';
3
4
  import { HttpErrorResponse } from '@angular/common/http';
4
5
  import * as i0 from '@angular/core';
5
6
  import { inject, isDevMode, Injectable, InjectionToken, Component, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, signal, NgModule, Injector } from '@angular/core';
6
- import * as i1$1 from '@angular/router';
7
+ import * as i1$2 from '@angular/router';
7
8
  import { Router, RouterModule, ROUTES } from '@angular/router';
8
- import * as i1$3 from '@acorex/platform/common';
9
- import { AXPHomePageService, AXPDataProvider, AXPCommonModule, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';
10
- import * as i3 from '@angular/common';
9
+ import * as i1$5 from '@acorex/platform/common';
10
+ import { AXPHomePageService, AXPDataProvider, AXPSettingService, AXPCommonModule, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';
11
+ import * as i1$1 from '@angular/common';
11
12
  import { CommonModule, AsyncPipe } from '@angular/common';
12
- import { firstValueFrom, of, first, Subject, timer } from 'rxjs';
13
+ import { firstValueFrom, of, first, Subject, timer, map } from 'rxjs';
14
+ import * as i1$4 from '@acorex/platform/layout/components';
15
+ import { AXPUserAvatarComponent, AXPComponentSlotModule } from '@acorex/platform/layout/components';
13
16
  import * as i2$1 from '@acorex/components/button';
14
17
  import { AXButtonModule } from '@acorex/components/button';
15
18
  import * as i1 from '@acorex/components/decorators';
@@ -24,11 +27,11 @@ import { AXPopupService } from '@acorex/components/popup';
24
27
  import { AXPlatform } from '@acorex/core/platform';
25
28
  import * as i6 from '@acorex/core/translation';
26
29
  import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
27
- import * as i1$2 from '@acorex/platform/layout/components';
28
- import { AXPUserAvatarComponent, AXPComponentSlotModule } from '@acorex/platform/layout/components';
29
30
  import { AXChipsModule } from '@acorex/components/chips';
30
31
  import { AXTagModule } from '@acorex/components/tag';
32
+ import { AXPPlatformScope } from '@acorex/platform/core';
31
33
  import { startWith, switchMap, tap } from 'rxjs/operators';
34
+ import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';
32
35
 
33
36
  class AXMAuthErrorHandler {
34
37
  constructor() {
@@ -88,6 +91,8 @@ const AXM_AUTH_CONFIG_TOKEN = new InjectionToken('app-module-auth-config', {
88
91
  });
89
92
  const AXMDefaultAuthConfigs = {
90
93
  type: AXMAuthenticationTypes.UsernamePassword,
94
+ // defaultStrategyName:'oidc'
95
+ defaultStrategyName: 'user-pass'
91
96
  };
92
97
  function configAuthModule(config = AXMDefaultAuthConfigs) {
93
98
  return { ...AXMDefaultAuthConfigs, ...config };
@@ -104,18 +109,22 @@ const routes = [
104
109
  },
105
110
  {
106
111
  path: '',
107
- loadComponent: () => import('./acorex-modules-auth-master.layout-D-lIn4Pl.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
108
- loadChildren: () => import('./acorex-modules-auth-login.module-ZEX4NMuJ.mjs').then((c) => c.AXPSignInModule),
112
+ loadComponent: () => import('./acorex-modules-auth-master.layout-eX5-7AeO.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
113
+ loadChildren: () => import('./acorex-modules-auth-login.module-CmMM4TpQ.mjs').then((c) => c.AXPSignInModule),
109
114
  },
110
115
  {
111
116
  path: '',
112
- loadComponent: () => import('./acorex-modules-auth-master.layout-D-lIn4Pl.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
113
- loadChildren: () => import('./acorex-modules-auth-two-factor.module-D3N2XyOH.mjs').then((c) => c.AXPTwoFactorModule),
117
+ loadComponent: () => import('./acorex-modules-auth-master.layout-eX5-7AeO.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
118
+ loadChildren: () => import('./acorex-modules-auth-two-factor.module-YV9pDOnB.mjs').then((c) => c.AXPTwoFactorModule),
114
119
  },
115
120
  {
116
121
  path: '',
117
- loadComponent: () => import('./acorex-modules-auth-master.layout-D-lIn4Pl.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
118
- loadChildren: () => import('./acorex-modules-auth-routes-D9-qfC3V.mjs').then((c) => c),
122
+ loadComponent: () => import('./acorex-modules-auth-master.layout-eX5-7AeO.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
123
+ loadChildren: () => import('./acorex-modules-auth-routes-CMdsDZud.mjs').then((c) => c),
124
+ },
125
+ {
126
+ path: 'axp-oauth-callback',
127
+ loadComponent: () => import('./acorex-modules-auth-oauth-callback.component-C9s-5c7F.mjs').then((c) => c.AXPOAuthCallbackComponent),
119
128
  },
120
129
  {
121
130
  path: 'account',
@@ -123,6 +132,11 @@ const routes = [
123
132
  loadChildren: () => Promise.resolve().then(function () { return account_module; }).then((c) => c.AXPAccountModule),
124
133
  },
125
134
  // {
135
+ // path: 'signincallback',
136
+ // loadComponent: () =>
137
+ // import('./pages/callback/oauth-callback.component').then((c) => c.AXPOAuthCallbackComponent),
138
+ // },
139
+ // {
126
140
  // path: '',
127
141
  // loadComponent: () =>
128
142
  // import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),
@@ -159,16 +173,30 @@ class AXPAppChooserListComponent {
159
173
  this.router = inject(Router);
160
174
  this.sessionService = inject(AXPSessionService);
161
175
  this.homePageService = inject(AXPHomePageService);
176
+ this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);
177
+ this.strategyName = this.sessionService.getSessionData()?.strategy;
178
+ this.strategy = this.authStrategyRegistry.get(this.strategyName);
162
179
  this.selectedApplication = null;
163
180
  this.applications$ = this.sessionService.applications$;
164
181
  }
165
182
  async chooseApplication(item) {
166
183
  this.selectedApplication = item;
167
- await this.sessionService.setApplication(item);
168
- await this.homePageService.navigateTo();
184
+ const tenantId = this.sessionService.tenant?.id || '';
185
+ if (!tenantId) {
186
+ throw new Error('Tenant ID is missing. Cannot choose application.');
187
+ }
188
+ if (this.strategy && typeof this.strategy.updateToken === 'function') {
189
+ const updateContext = {
190
+ application: item,
191
+ user: this.sessionService.user,
192
+ tenant: this.sessionService.tenant,
193
+ };
194
+ await this.sessionService.updateToken(updateContext);
195
+ }
196
+ return await this.homePageService.navigateTo();
169
197
  }
170
198
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPAppChooserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
171
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", ngImport: i0, template: "<div class=\" ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for(application of (applications$ | async); track $index){\n <div class=\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-3 ax-items-start ax-cursor-pointer\"\n (click)=\"chooseApplication(application)\">\n <div class=\"ax-flex ax-flex-1 ax-gap-2 ax-items-center ax-justify-center ax-font-medium\">\n <div\n class=\"ax-w-12 ax-h-12 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-m-auto\">\n <ax-icon class=\"fa-solid fa-computer ax-text-neutral-500 ax-text-lg\"> </ax-icon>\n <!-- TODO: logo instead of application icon -->\n <!-- <axp-logo [source]=\"application.logo\" [attr.alt]=\"application.title\"\n class=\"!ax-flex ax-items-center ax-justify-center !ax-text-sm ax-mx-auto ax-w-10 ax-h-10 ax-bg-neutral-200 ax-rounded-full\"></axp-logo> -->\n </div>\n <span class=\"ax-flex-1 ax-text-start md:ax-text-base ax-text-sm\">{{ application.title }}</span>\n <span class=\"ax-text-gray-500 md:ax-text-sm ax-text-xs\">{{application.editionName}}</span>\n @if(application.name===selectedApplication?.name){\n <ax-loading></ax-loading>\n }@else {\n <ax-icon class=\"fa-solid fa-chevron-right ax-text-neutral-400\"> </ax-icon>\n }\n </div>\n </div>\n }\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", ngImport: i0, template: "<div class=\" ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for(application of (applications$ | async); track $index){\n <div class=\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-3 ax-items-start ax-cursor-pointer\"\n (click)=\"chooseApplication(application)\">\n <div class=\"ax-flex ax-flex-1 ax-gap-2 ax-items-center ax-justify-center ax-font-medium\">\n <div\n class=\"ax-w-12 ax-h-12 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-m-auto\">\n <ax-icon class=\"fa-solid fa-computer ax-text-neutral-500 ax-text-lg\"> </ax-icon>\n <!-- TODO: logo instead of application icon -->\n <!-- <axp-logo [source]=\"application.logo\" [attr.alt]=\"application.title\"\n class=\"!ax-flex ax-items-center ax-justify-center !ax-text-sm ax-mx-auto ax-w-10 ax-h-10 ax-bg-neutral-200 ax-rounded-full\"></axp-logo> -->\n </div>\n <span class=\"ax-flex-1 ax-text-start md:ax-text-base ax-text-sm\">{{ application.title }}</span>\n <span class=\"ax-text-gray-500 md:ax-text-sm ax-text-xs\">{{application.editionName}}</span>\n @if(application.name===selectedApplication?.name){\n <ax-loading></ax-loading>\n }@else {\n <ax-icon class=\"fa-solid fa-chevron-right ax-text-neutral-400\"> </ax-icon>\n }\n </div>\n </div>\n }\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
172
200
  }
173
201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPAppChooserListComponent, decorators: [{
174
202
  type: Component,
@@ -179,16 +207,26 @@ class AXMAppChooserSlotComponent {
179
207
  constructor() {
180
208
  this.sessionService = inject(AXPSessionService);
181
209
  this.homePageService = inject(AXPHomePageService);
210
+ this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);
211
+ this.strategyName = this.sessionService.getSessionData()?.strategy;
212
+ this.strategy = this.authStrategyRegistry.get(this.strategyName);
182
213
  this.tenant$ = this.sessionService.tenant$;
183
214
  this.application$ = this.sessionService.application$;
184
215
  this.applications$ = of([]);
185
216
  }
186
217
  async chooseApplication(item) {
187
- await this.sessionService.setApplication(item);
188
- await this.homePageService.navigateTo();
218
+ const tenantId = this.sessionService.tenant?.id || '';
219
+ if (this.strategy && typeof this.strategy.updateToken === 'function') {
220
+ const updateContext = {
221
+ tenant: this.sessionService.tenant,
222
+ user: this.sessionService.user,
223
+ application: item,
224
+ };
225
+ await this.sessionService.updateToken(updateContext);
226
+ }
189
227
  }
190
228
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMAppChooserSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
191
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if(((applications$ | async)?.length ?? 0) > 1) {\n<ax-button color=\"default\" look=\"blank\" #appChooser>\n <ax-icon>\n <i class=\"fa-solid fa-grid-2 ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n</ax-button>\n<ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-lightest ax-border ax-overflow-hidden ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64 ax-p-3\">\n <axp-app-chooser-list></axp-app-chooser-list>\n </div>\n</ax-popover>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "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$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAppChooserListComponent, selector: "axp-app-chooser-list" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
229
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if(((applications$ | async)?.length ?? 0) > 1) {\n<ax-button color=\"default\" look=\"blank\" #appChooser>\n <ax-icon>\n <i class=\"fa-solid fa-grid-2 ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n</ax-button>\n<ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-lightest ax-border ax-overflow-hidden ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64 ax-p-3\">\n <axp-app-chooser-list></axp-app-chooser-list>\n </div>\n</ax-popover>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "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$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAppChooserListComponent, selector: "axp-app-chooser-list" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
192
230
  }
193
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMAppChooserSlotComponent, decorators: [{
194
232
  type: Component,
@@ -206,7 +244,7 @@ class AXPTenantChooserDropdownComponent {
206
244
  this.router.navigate(['/auth/account/tenant-chooser']);
207
245
  }
208
246
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPTenantChooserDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
209
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", ngImport: i0, template: "<!-- <ng-container *ngIf=\"tenants$ | async as tenants\">\n@if(tenants.length>1){\n <div (click)=\"tenantChooser()\"\n class=\"ax-flex ax-items-center ax-border ax-rounded-full ax-px-4 ax-py-1 ax-gap-2 ax-cursor-pointer\">\n <ax-icon class=\"fa-solid fa-building ax-text-neutral-500 ax-text-xs\"></ax-icon>\n <p class=\"ax-text-neutral-500 ax-text-sm ax-font-medium\">\n {{ tenant?.title }}\n </p>\n <ax-icon class=\"fa-regular fa-chevron-down ax-text-neutral-400\"></ax-icon>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-border ax-rounded-full ax-px-4 ax-py-1 ax-gap-2 ax-cursor-pointer\">\n <ax-icon class=\"fa-solid fa-building ax-text-neutral-500\"></ax-icon>\n <p class=\"ax-text-neutral-500 ax-text-sm ax-font-medium\">\n {{ tenant?.title }}\n </p>\n </div>\n}\n</ng-container> -->\n\n@if (tenants$ | async; as tenants) {\n <ax-button [text]=\"tenant?.title ?? ''\" class=\"ax-xs\" look=\"blank\">\n @if(tenants.length > 1){\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n }\n </ax-button>\n}", dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.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: AXChipsModule }, { kind: "ngmodule", type: AXTagModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", ngImport: i0, template: "<!-- <ng-container *ngIf=\"tenants$ | async as tenants\">\n@if(tenants.length>1){\n <div (click)=\"tenantChooser()\"\n class=\"ax-flex ax-items-center ax-border ax-rounded-full ax-px-4 ax-py-1 ax-gap-2 ax-cursor-pointer\">\n <ax-icon class=\"fa-solid fa-building ax-text-neutral-500 ax-text-xs\"></ax-icon>\n <p class=\"ax-text-neutral-500 ax-text-sm ax-font-medium\">\n {{ tenant?.title }}\n </p>\n <ax-icon class=\"fa-regular fa-chevron-down ax-text-neutral-400\"></ax-icon>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-border ax-rounded-full ax-px-4 ax-py-1 ax-gap-2 ax-cursor-pointer\">\n <ax-icon class=\"fa-solid fa-building ax-text-neutral-500\"></ax-icon>\n <p class=\"ax-text-neutral-500 ax-text-sm ax-font-medium\">\n {{ tenant?.title }}\n </p>\n </div>\n}\n</ng-container> -->\n\n@if (tenants$ | async; as tenants) {\n <ax-button [text]=\"tenant?.title ?? ''\" class=\"ax-xs\" look=\"blank\">\n @if(tenants.length > 1){\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n }\n </ax-button>\n}", dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.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: AXChipsModule }, { kind: "ngmodule", type: AXTagModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
210
248
  }
211
249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPTenantChooserDropdownComponent, decorators: [{
212
250
  type: Component,
@@ -239,12 +277,21 @@ class AXMAuthProfileSlotComponent {
239
277
  handleSignIn() {
240
278
  this.router.navigate(['/auth/login']);
241
279
  }
280
+ async openUserSession() {
281
+ const com = await import('./acorex-modules-auth-user-sessions.component-KI9dYs78.mjs').then((c) => c.AXMUserSessionsComponent);
282
+ this.popupService.open(com, {
283
+ size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : 'sm',
284
+ title: await this.translateService.translateAsync('profile.sessions.title', {
285
+ scope: 'auth',
286
+ }),
287
+ });
288
+ }
242
289
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMAuthProfileSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
243
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXMAuthProfileSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "profilePopover", first: true, predicate: ["profilePopover"], descendants: true }], ngImport: i0, template: "@if (isAuthenticated$ | async) {\n <div class=\"ax-size-fit\">\n <div #avatar>\n <axp-user-avatar [size]=\"36\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n </div>\n\n <ax-popover [target]=\"avatar\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #p>\n <div class=\"ax-bg-lightest ax-border ax-border-lightest ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-p-4 ax-border-b\">\n <axp-user-avatar [size]=\"64\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-mt-2\">\n <div class=\"ax-text-base ax-font-bold\">{{ (user$ | async)?.title }}</div>\n <axp-tenant-chooser-dropdown></axp-tenant-chooser-dropdown>\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n <li>\n <a (click)=\"editProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ 'profile.edit' | translate: { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"p.close()\" [routerLink]=\"['/', appName(), 'settings', 'user']\">\n <i class=\"fa-light fa-gear\"></i>\n <span>{{ 'profile.settings' | translate: { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <!-- <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ 'profile.sessions' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li> -->\n <li class=\"ax-text-danger-500\">\n <a (click)=\"logOut()\">\n <i class=\"fa-light fa-arrow-right-from-bracket\"></i>\n <span>{{ 'profile.logout' | translate: { scope: 'auth' } | async }}</span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </ax-popover>\n </div>\n} @else {\n <ax-button color=\"default\" look=\"blank\" text=\"Sign Up / Sign In\" (click)=\"handleSignIn()\">\n <ax-icon>\n <i class=\"fa-solid fa-user ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n </ax-button>\n}\n", styles: [".axp-profile-slot-menus ul{margin-top:.5rem;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding-left:.5rem;padding-right:.5rem}.axp-profile-slot-menus ul:last-child{border-width:0px}.axp-profile-slot-menus ul li{display:flex;cursor:pointer;border-radius:.375rem}.axp-profile-slot-menus ul li:last-child{margin-bottom:.5rem}.axp-profile-slot-menus ul li:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}.axp-profile-slot-menus ul li i{margin-inline-end:.75rem;display:grid;height:1.5rem;width:1.5rem;place-items:center;font-size:1.25rem;line-height:1.75rem}.axp-profile-slot-menus ul li a{display:flex;height:100%;width:100%;align-items:center;padding:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type:
290
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXMAuthProfileSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "profilePopover", first: true, predicate: ["profilePopover"], descendants: true }], ngImport: i0, template: "@if((isAuthenticated$ | async)) {\n<div class=\"ax-size-fit\">\n <div #avatar>\n <axp-user-avatar [size]=\"36\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n </div>\n\n <ax-popover [target]=\"avatar\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #p>\n <div class=\"ax-bg-lightest ax-border ax-border-lightest ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-p-4 ax-border-b\">\n <axp-user-avatar [size]=\"64\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-mt-2\">\n <div class=\"ax-text-base ax-font-bold\">{{ (user$ | async)?.title }}</div>\n <axp-tenant-chooser-dropdown></axp-tenant-chooser-dropdown>\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n <li>\n <a (click)=\"editProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ 'profile.edit' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"p.close()\" [routerLink]=\"['/', appName(), 'settings', 'user']\">\n <i class=\"fa-light fa-gear\"></i>\n <span>{{ 'profile.settings' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ 'profile.sessions' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li class=\"ax-text-danger-500\">\n <a (click)=\"logOut()\">\n <i class=\"fa-light fa-arrow-right-from-bracket\"></i>\n <span>{{ 'profile.logout' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </ax-popover>\n</div>\n\n} @else {\n<ax-button color=\"default\" look=\"blank\" text=\"Sign Up / Sign In\" (click)=\"handleSignIn()\">\n <ax-icon>\n <i class=\"fa-solid fa-user ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n</ax-button>\n}\n", styles: [".axp-profile-slot-menus ul{margin-top:.5rem;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding-left:.5rem;padding-right:.5rem}.axp-profile-slot-menus ul:last-child{border-width:0px}.axp-profile-slot-menus ul li{display:flex;cursor:pointer;border-radius:.375rem}.axp-profile-slot-menus ul li:last-child{margin-bottom:.5rem}.axp-profile-slot-menus ul li:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}.axp-profile-slot-menus ul li i{margin-inline-end:.75rem;display:grid;height:1.5rem;width:1.5rem;place-items:center;font-size:1.25rem;line-height:1.75rem}.axp-profile-slot-menus ul li a{display:flex;height:100%;width:100%;align-items:center;padding:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type:
244
291
  //
245
292
  AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "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: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId"] }, { kind: "component", type:
246
293
  //
247
- AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
294
+ AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
248
295
  }
249
296
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMAuthProfileSlotComponent, decorators: [{
250
297
  type: Component,
@@ -262,7 +309,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
262
309
  AXPUserAvatarComponent,
263
310
  //
264
311
  AXPTenantChooserDropdownComponent,
265
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if (isAuthenticated$ | async) {\n <div class=\"ax-size-fit\">\n <div #avatar>\n <axp-user-avatar [size]=\"36\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n </div>\n\n <ax-popover [target]=\"avatar\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #p>\n <div class=\"ax-bg-lightest ax-border ax-border-lightest ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-p-4 ax-border-b\">\n <axp-user-avatar [size]=\"64\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-mt-2\">\n <div class=\"ax-text-base ax-font-bold\">{{ (user$ | async)?.title }}</div>\n <axp-tenant-chooser-dropdown></axp-tenant-chooser-dropdown>\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n <li>\n <a (click)=\"editProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ 'profile.edit' | translate: { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"p.close()\" [routerLink]=\"['/', appName(), 'settings', 'user']\">\n <i class=\"fa-light fa-gear\"></i>\n <span>{{ 'profile.settings' | translate: { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <!-- <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ 'profile.sessions' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li> -->\n <li class=\"ax-text-danger-500\">\n <a (click)=\"logOut()\">\n <i class=\"fa-light fa-arrow-right-from-bracket\"></i>\n <span>{{ 'profile.logout' | translate: { scope: 'auth' } | async }}</span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </ax-popover>\n </div>\n} @else {\n <ax-button color=\"default\" look=\"blank\" text=\"Sign Up / Sign In\" (click)=\"handleSignIn()\">\n <ax-icon>\n <i class=\"fa-solid fa-user ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n </ax-button>\n}\n", styles: [".axp-profile-slot-menus ul{margin-top:.5rem;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding-left:.5rem;padding-right:.5rem}.axp-profile-slot-menus ul:last-child{border-width:0px}.axp-profile-slot-menus ul li{display:flex;cursor:pointer;border-radius:.375rem}.axp-profile-slot-menus ul li:last-child{margin-bottom:.5rem}.axp-profile-slot-menus ul li:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}.axp-profile-slot-menus ul li i{margin-inline-end:.75rem;display:grid;height:1.5rem;width:1.5rem;place-items:center;font-size:1.25rem;line-height:1.75rem}.axp-profile-slot-menus ul li a{display:flex;height:100%;width:100%;align-items:center;padding:.5rem}\n"] }]
312
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if((isAuthenticated$ | async)) {\n<div class=\"ax-size-fit\">\n <div #avatar>\n <axp-user-avatar [size]=\"36\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n </div>\n\n <ax-popover [target]=\"avatar\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #p>\n <div class=\"ax-bg-lightest ax-border ax-border-lightest ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-p-4 ax-border-b\">\n <axp-user-avatar [size]=\"64\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-mt-2\">\n <div class=\"ax-text-base ax-font-bold\">{{ (user$ | async)?.title }}</div>\n <axp-tenant-chooser-dropdown></axp-tenant-chooser-dropdown>\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n <li>\n <a (click)=\"editProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ 'profile.edit' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"p.close()\" [routerLink]=\"['/', appName(), 'settings', 'user']\">\n <i class=\"fa-light fa-gear\"></i>\n <span>{{ 'profile.settings' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ 'profile.sessions' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n <li class=\"ax-text-danger-500\">\n <a (click)=\"logOut()\">\n <i class=\"fa-light fa-arrow-right-from-bracket\"></i>\n <span>{{ 'profile.logout' | translate : { scope: 'auth' } | async }}</span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </ax-popover>\n</div>\n\n} @else {\n<ax-button color=\"default\" look=\"blank\" text=\"Sign Up / Sign In\" (click)=\"handleSignIn()\">\n <ax-icon>\n <i class=\"fa-solid fa-user ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n</ax-button>\n}\n", styles: [".axp-profile-slot-menus ul{margin-top:.5rem;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding-left:.5rem;padding-right:.5rem}.axp-profile-slot-menus ul:last-child{border-width:0px}.axp-profile-slot-menus ul li{display:flex;cursor:pointer;border-radius:.375rem}.axp-profile-slot-menus ul li:last-child{margin-bottom:.5rem}.axp-profile-slot-menus ul li:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}.axp-profile-slot-menus ul li i{margin-inline-end:.75rem;display:grid;height:1.5rem;width:1.5rem;place-items:center;font-size:1.25rem;line-height:1.75rem}.axp-profile-slot-menus ul li a{display:flex;height:100%;width:100%;align-items:center;padding:.5rem}\n"] }]
266
313
  }], propDecorators: { profilePopover: [{
267
314
  type: ViewChild,
268
315
  args: ['profilePopover']
@@ -356,44 +403,175 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
356
403
  args: ['profilePopover']
357
404
  }] } });
358
405
 
406
+ class AXPIdleService {
407
+ constructor() {
408
+ this.configs = inject(AXM_AUTH_CONFIG_TOKEN);
409
+ this.idle$ = new Subject();
410
+ this.timeoutDuration = this.configs.idleTimeout ?? 10 * 60 * 1000;
411
+ this.userActivity$ = new Subject();
412
+ this.idleSubscription = null;
413
+ this.setupActivityListeners();
414
+ }
415
+ get idleState$() {
416
+ return this.idle$.asObservable();
417
+ }
418
+ setupActivityListeners() {
419
+ const activityEvents = ['mousemove', 'keydown', 'wheel'];
420
+ activityEvents.forEach(event => document.addEventListener(event, () => this.resetTimer()));
421
+ }
422
+ startWatching() {
423
+ this.stopWatching(); // Stop any existing subscription
424
+ this.idleSubscription = this.userActivity$.pipe(startWith(null), switchMap(() => timer(this.timeoutDuration)), tap(() => this.idle$.next())).subscribe();
425
+ }
426
+ resetTimer() {
427
+ this.userActivity$.next();
428
+ }
429
+ stopWatching() {
430
+ if (this.idleSubscription) {
431
+ this.idleSubscription.unsubscribe();
432
+ this.idleSubscription = null;
433
+ }
434
+ }
435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPIdleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
436
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPIdleService, providedIn: 'root' }); }
437
+ }
438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPIdleService, decorators: [{
439
+ type: Injectable,
440
+ args: [{ providedIn: 'root' }]
441
+ }], ctorParameters: () => [] });
442
+
443
+ class AXMDeviceSessionsService extends AXMEntityCrudServiceImpl {
444
+ }
445
+ class AXMDeviceSessionsServiceImpl extends AXMDeviceSessionsService {
446
+ // private aXMAuthConfigs: AXMAuthConfigs = inject(AXM_AUTH_CONFIG_TOKEN);
447
+ constructor(http) {
448
+ super('auth.deviceSessions'); // TODO: Update with correct RootConfig if needed
449
+ this.http = http;
450
+ }
451
+ terminate(id) {
452
+ throw new Error('Method not implemented.');
453
+ }
454
+ async terminateAllCurrentUserSessions() {
455
+ return (this.http
456
+ .post('' + '/api/security-management/device-sessions/Terminate-All', {})
457
+ .pipe(map((t) => (t === undefined ? false : t)))
458
+ .toPromise() ?? false);
459
+ }
460
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMDeviceSessionsServiceImpl, deps: [{ token: i1$3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
461
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMDeviceSessionsServiceImpl }); }
462
+ }
463
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMDeviceSessionsServiceImpl, decorators: [{
464
+ type: Injectable
465
+ }], ctorParameters: () => [{ type: i1$3.HttpClient }] });
466
+
467
+ class AXMUserDeviceSessionsService {
468
+ }
469
+ class AXMUserDeviceSessionsServiceImp extends AXMUserDeviceSessionsService {
470
+ constructor() {
471
+ super(); // Call the base class constructor (good practice)
472
+ this.sessionService = inject(AXPSessionService);
473
+ this.deviceSessionsService = inject(AXMDeviceSessionsService);
474
+ this.settingService = inject(AXPSettingService);
475
+ }
476
+ async getSessions() {
477
+ const userId = this.sessionService.user?.id;
478
+ if (!userId) {
479
+ return [];
480
+ }
481
+ const response = await this.deviceSessionsService.query();
482
+ const items = response.items.filter((item) => item.userId === userId && String(item.status).toLowerCase() === 'active' && !item.isActiveSession);
483
+ return items;
484
+ }
485
+ async getCurrentActiveSessions() {
486
+ const userId = this.sessionService.user?.id;
487
+ const response = await this.deviceSessionsService.query();
488
+ const activeSession = response.items.find((item) => item.userId === userId && String(item.status).toLowerCase() === 'active' && item.isActiveSession);
489
+ return activeSession;
490
+ }
491
+ async terminateSession(sessionId) {
492
+ await this.deviceSessionsService.updateOne(sessionId, { status: 'revoked' });
493
+ }
494
+ async terminateAllSession() {
495
+ await this.deviceSessionsService.terminateAllCurrentUserSessions();
496
+ }
497
+ async setTokenLifetimeMinutes(value) {
498
+ await this.settingService.scope(AXPPlatformScope.User).set('session-timeout', value);
499
+ let s2 = await this.settingService.scope(AXPPlatformScope.User).get('session-timeout');
500
+ }
501
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMUserDeviceSessionsServiceImp, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
502
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMUserDeviceSessionsServiceImp }); }
503
+ }
504
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMUserDeviceSessionsServiceImp, decorators: [{
505
+ type: Injectable
506
+ }], ctorParameters: () => [] });
507
+
359
508
  const canActivateTenantChooser = async (route, state) => {
360
509
  const sessionService = inject(AXPSessionService);
510
+ const authStrategyRegistry = inject(AXPAuthStrategyRegistryService);
361
511
  const router = inject(Router);
512
+ const strategyName = sessionService.getSessionData()?.strategy;
513
+ const strategy = authStrategyRegistry.get(strategyName);
362
514
  const tenants = await firstValueFrom(sessionService.tenants$);
363
- if (tenants.length == 0) {
515
+ if (tenants.length === 0) {
516
+ window.alert('You do not have any tenant assigned to your account and cannot use the site. Please contact your administrator.');
364
517
  return router.createUrlTree(['/auth/login']);
365
518
  }
366
- if (tenants.length == 1) {
367
- await sessionService.setTenant(tenants[0]);
368
- return router.createUrlTree(['/auth/account/app-chooser']);
519
+ if (tenants.length === 1) {
520
+ if (strategy && typeof strategy.updateToken === 'function') {
521
+ const updateContext = {
522
+ user: sessionService.user,
523
+ tenant: tenants[0],
524
+ };
525
+ await sessionService.updateToken(updateContext);
526
+ return router.createUrlTree(['/auth/account/app-chooser']);
527
+ }
528
+ return false;
369
529
  }
370
530
  return true;
371
531
  };
532
+
372
533
  const canActivateAppChooser = async (route, state) => {
373
534
  const sessionService = inject(AXPSessionService);
535
+ const authStrategyRegistry = inject(AXPAuthStrategyRegistryService);
374
536
  const homePageService = inject(AXPHomePageService);
375
537
  const router = inject(Router);
538
+ const strategyName = sessionService.getSessionData()?.strategy;
539
+ const strategy = authStrategyRegistry.get(strategyName);
376
540
  const apps = await firstValueFrom(sessionService.applications$);
377
- if (apps.length == 0) {
378
- return router.createUrlTree(['/auth/login']);
379
- }
380
- if (apps.length == 1) {
381
- await sessionService.setApplication(apps[0]);
382
- return router.createUrlTree([homePageService.getCurrent().path]);
541
+ if (apps.length === 0) {
542
+ await router.navigate(['/auth/login']);
543
+ return false;
544
+ }
545
+ if (apps.length === 1) {
546
+ const tenantId = sessionService.tenant?.id;
547
+ if (!tenantId) {
548
+ throw new Error('Tenant ID is missing. Please contact support.');
549
+ }
550
+ if (strategy && typeof strategy.updateToken === 'function') {
551
+ const updateContext = {
552
+ user: sessionService.user,
553
+ tenant: sessionService.tenant,
554
+ application: apps[0],
555
+ };
556
+ await sessionService.updateToken(updateContext);
557
+ return router.createUrlTree([homePageService.getCurrent().path]);
558
+ }
559
+ return false;
383
560
  }
384
561
  return true;
385
562
  };
563
+
386
564
  function routesFacory() {
387
565
  let routes = [];
388
566
  routes = [
389
567
  {
390
568
  path: 'tenant-chooser',
391
- loadComponent: () => import('./acorex-modules-auth-tenant-chooser.component-B1aE-TOD.mjs').then((c) => c.AXPAuthTenantChooserComponent),
569
+ loadComponent: () => import('./acorex-modules-auth-tenant-chooser.component-BdK5T-8X.mjs').then((c) => c.AXPAuthTenantChooserComponent),
392
570
  canActivate: [AXPAuthGuard, canActivateTenantChooser],
393
571
  },
394
572
  {
395
573
  path: 'app-chooser',
396
- loadComponent: () => import('./acorex-modules-auth-app-chooser.component-Cpy0VN6n.mjs').then((c) => c.AXPAuthAppChooserComponent),
574
+ loadComponent: () => import('./acorex-modules-auth-app-chooser.component-5FbgqbVo.mjs').then((c) => c.AXPAuthAppChooserComponent),
397
575
  canActivate: [AXPAuthGuard, canActivateAppChooser],
398
576
  },
399
577
  ];
@@ -401,17 +579,17 @@ function routesFacory() {
401
579
  }
402
580
  class AXPAccountModule {
403
581
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPAccountModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
404
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: AXPAccountModule, imports: [RouterModule, i1$2.AXPComponentSlotModule] }); }
582
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: AXPAccountModule, imports: [RouterModule, i1$4.AXPComponentSlotModule] }); }
405
583
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPAccountModule, providers: [
406
584
  {
407
585
  provide: ROUTES,
408
586
  multi: true,
409
587
  useFactory: routesFacory,
410
588
  },
411
- // {
412
- // provide: AXMUserDeviceSessionsService,
413
- // useClass: AXMUserDeviceSessionsServiceImp,
414
- // },
589
+ {
590
+ provide: AXMUserDeviceSessionsService,
591
+ useClass: AXMUserDeviceSessionsServiceImp,
592
+ },
415
593
  ], imports: [RouterModule,
416
594
  //
417
595
  AXPComponentSlotModule.forChild({
@@ -472,10 +650,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
472
650
  multi: true,
473
651
  useFactory: routesFacory,
474
652
  },
475
- // {
476
- // provide: AXMUserDeviceSessionsService,
477
- // useClass: AXMUserDeviceSessionsServiceImp,
478
- // },
653
+ {
654
+ provide: AXMUserDeviceSessionsService,
655
+ useClass: AXMUserDeviceSessionsServiceImp,
656
+ },
479
657
  ],
480
658
  }]
481
659
  }] });
@@ -487,7 +665,7 @@ var account_module = /*#__PURE__*/Object.freeze({
487
665
 
488
666
  class AXMAuthModule {
489
667
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
490
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: AXMAuthModule, imports: [CommonModule, i1$3.AXPCommonModule, i1$1.RouterModule, AXPAccountModule] }); }
668
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: AXMAuthModule, imports: [CommonModule, i1$5.AXPCommonModule, i1$2.RouterModule, AXPAccountModule] }); }
491
669
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXMAuthModule, providers: [
492
670
  AXMAuthErrorHandler,
493
671
  {
@@ -538,46 +716,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
538
716
  }]
539
717
  }] });
540
718
 
541
- class AXPIdleService {
542
- constructor() {
543
- this.configs = inject(AXM_AUTH_CONFIG_TOKEN);
544
- this.idle$ = new Subject();
545
- this.timeoutDuration = this.configs.idleTimeout ?? 10 * 60 * 1000;
546
- this.userActivity$ = new Subject();
547
- this.idleSubscription = null;
548
- this.setupActivityListeners();
549
- }
550
- get idleState$() {
551
- return this.idle$.asObservable();
552
- }
553
- setupActivityListeners() {
554
- const activityEvents = ['mousemove', 'keydown', 'wheel'];
555
- activityEvents.forEach(event => document.addEventListener(event, () => this.resetTimer()));
556
- }
557
- startWatching() {
558
- this.stopWatching(); // Stop any existing subscription
559
- this.idleSubscription = this.userActivity$.pipe(startWith(null), switchMap(() => timer(this.timeoutDuration)), tap(() => this.idle$.next())).subscribe();
560
- }
561
- resetTimer() {
562
- this.userActivity$.next();
563
- }
564
- stopWatching() {
565
- if (this.idleSubscription) {
566
- this.idleSubscription.unsubscribe();
567
- this.idleSubscription = null;
568
- }
569
- }
570
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPIdleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
571
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPIdleService, providedIn: 'root' }); }
572
- }
573
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPIdleService, decorators: [{
574
- type: Injectable,
575
- args: [{ providedIn: 'root' }]
576
- }], ctorParameters: () => [] });
719
+ var AXMSessionStatusTypes;
720
+ (function (AXMSessionStatusTypes) {
721
+ AXMSessionStatusTypes["revoked"] = "revoked";
722
+ AXMSessionStatusTypes["expired"] = "expired";
723
+ AXMSessionStatusTypes["active"] = "active";
724
+ })(AXMSessionStatusTypes || (AXMSessionStatusTypes = {}));
577
725
 
578
726
  /**
579
727
  * Generated bundle index. Do not edit.
580
728
  */
581
729
 
582
- export { AXM_AUTH_CONFIG_TOKEN as A, AXMAuthenticationTypes as a, AXPTenantChooserDropdownComponent as b, AXPAppChooserListComponent as c, AXMAuthErrorHandler as d, AXMDefaultAuthConfigs as e, configAuthModule as f, AXMAuthModule as g, AXPIdleService as h };
583
- //# sourceMappingURL=acorex-modules-auth-acorex-modules-auth-y6rICHrT.mjs.map
730
+ export { AXM_AUTH_CONFIG_TOKEN as A, AXMAuthenticationTypes as a, AXPTenantChooserDropdownComponent as b, AXPAppChooserListComponent as c, AXMUserDeviceSessionsService as d, AXMAuthErrorHandler as e, AXMDefaultAuthConfigs as f, configAuthModule as g, AXMAuthModule as h, AXMSessionStatusTypes as i, AXPIdleService as j, AXMDeviceSessionsService as k, AXMDeviceSessionsServiceImpl as l };
731
+ //# sourceMappingURL=acorex-modules-auth-acorex-modules-auth-BxqN76H7.mjs.map