@acorex/modules 20.8.19 → 20.8.22

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 (102) hide show
  1. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-W8hHssaa.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BQxvz9qz.mjs} +23 -23
  2. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-W8hHssaa.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-BQxvz9qz.mjs.map} +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-C9occE-a.mjs → acorex-modules-assessment-management-answers-viewer-widget-column.component-BHaTemlm.mjs} +2 -2
  4. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-C9occE-a.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-column.component-BHaTemlm.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-qTjj8B-L.mjs → acorex-modules-assessment-management-answers-viewer-widget-edit.component-CyCK9uPT.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-qTjj8B-L.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-edit.component-CyCK9uPT.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-Dx1v9ySF.mjs → acorex-modules-assessment-management-answers-viewer-widget-view.component-CV4P5gBS.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-Dx1v9ySF.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-view.component-CV4P5gBS.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-D7ceKbbc.mjs → acorex-modules-assessment-management-assessment-case.entity-BtAkQq_o.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-D7ceKbbc.mjs.map → acorex-modules-assessment-management-assessment-case.entity-BtAkQq_o.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-Bohm1F0Z.mjs → acorex-modules-assessment-management-assessment-session.entity-BQHipLrW.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-Bohm1F0Z.mjs.map → acorex-modules-assessment-management-assessment-session.entity-BQHipLrW.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CaDLclxt.mjs → acorex-modules-assessment-management-fill-assessment-session.command-DebAvDbX.mjs} +3 -3
  14. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CaDLclxt.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-DebAvDbX.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-a6iOcFCi.mjs → acorex-modules-assessment-management-preview-questionnaire.command-CG4j1NOB.mjs} +4 -4
  16. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-a6iOcFCi.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-CG4j1NOB.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-bELSO0yJ.mjs → acorex-modules-assessment-management-question-bank-item.entity-DAf7QYtV.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-bELSO0yJ.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-DAf7QYtV.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-DSOv1eQv.mjs → acorex-modules-assessment-management-questionnaire-builder-edit.component-qS6AkdAY.mjs} +3 -3
  20. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-DSOv1eQv.mjs.map → acorex-modules-assessment-management-questionnaire-builder-edit.component-qS6AkdAY.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-Dzs8wQDL.mjs → acorex-modules-assessment-management-questionnaire-builder-view.component-CUGD63Ig.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-Dzs8wQDL.mjs.map → acorex-modules-assessment-management-questionnaire-builder-view.component-CUGD63Ig.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-DHGcsvkT.mjs → acorex-modules-assessment-management-questionnaire-builder.component-BH0LHKoT.mjs} +3 -3
  24. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-DHGcsvkT.mjs.map → acorex-modules-assessment-management-questionnaire-builder.component-BH0LHKoT.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-B9pP4j23.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-DfWlHRnf.mjs} +2 -2
  26. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-B9pP4j23.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-DfWlHRnf.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-BwxkdgXr.mjs → acorex-modules-assessment-management-questionnaire-viewer.service-DKTr7U0w.mjs} +2 -2
  28. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-BwxkdgXr.mjs.map → acorex-modules-assessment-management-questionnaire-viewer.service-DKTr7U0w.mjs.map} +1 -1
  29. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-B8eP0kxN.mjs → acorex-modules-assessment-management-questionnaire.entity-BYMQ113p.mjs} +2 -2
  30. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-B8eP0kxN.mjs.map → acorex-modules-assessment-management-questionnaire.entity-BYMQ113p.mjs.map} +1 -1
  31. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CwR0yKS8.mjs → acorex-modules-assessment-management-view-session-answers.command-MbqZHMxk.mjs} +3 -3
  32. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CwR0yKS8.mjs.map → acorex-modules-assessment-management-view-session-answers.command-MbqZHMxk.mjs.map} +1 -1
  33. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  34. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-9Tz_Jq63.mjs → acorex-modules-auth-acorex-modules-auth-ilqI5CxA.mjs} +214 -63
  35. package/fesm2022/acorex-modules-auth-acorex-modules-auth-ilqI5CxA.mjs.map +1 -0
  36. package/fesm2022/{acorex-modules-auth-app-chooser.component-BQRMc-PP.mjs → acorex-modules-auth-app-chooser.component-Cz98Okd6.mjs} +3 -4
  37. package/fesm2022/acorex-modules-auth-app-chooser.component-Cz98Okd6.mjs.map +1 -0
  38. package/fesm2022/{acorex-modules-auth-login.module-BnzKJuwI.mjs → acorex-modules-auth-login.module-Cw-N4q-C.mjs} +4 -4
  39. package/fesm2022/{acorex-modules-auth-login.module-BnzKJuwI.mjs.map → acorex-modules-auth-login.module-Cw-N4q-C.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-auth-master.layout-DyBOEl3Z.mjs → acorex-modules-auth-master.layout-C5neEC1G.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-auth-master.layout-DyBOEl3Z.mjs.map → acorex-modules-auth-master.layout-C5neEC1G.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-auth-oauth-callback.component-B1qqH43K.mjs → acorex-modules-auth-oauth-callback.component-0bBwkZ35.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-auth-oauth-callback.component-B1qqH43K.mjs.map → acorex-modules-auth-oauth-callback.component-0bBwkZ35.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-auth-password.component-KHLtwwR7.mjs → acorex-modules-auth-password.component-BtBzriSa.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-auth-password.component-KHLtwwR7.mjs.map → acorex-modules-auth-password.component-BtBzriSa.mjs.map} +1 -1
  46. package/fesm2022/{acorex-modules-auth-password.component-DGV3LMvW.mjs → acorex-modules-auth-password.component-C5UGJdbY.mjs} +2 -2
  47. package/fesm2022/{acorex-modules-auth-password.component-DGV3LMvW.mjs.map → acorex-modules-auth-password.component-C5UGJdbY.mjs.map} +1 -1
  48. package/fesm2022/{acorex-modules-auth-routes-CMdYNEdU.mjs → acorex-modules-auth-routes-PKJ3dtI0.mjs} +2 -2
  49. package/fesm2022/{acorex-modules-auth-routes-CMdYNEdU.mjs.map → acorex-modules-auth-routes-PKJ3dtI0.mjs.map} +1 -1
  50. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DFJoSg_2.mjs → acorex-modules-auth-tenant-chooser.component-D3ENGMPa.mjs} +2 -2
  51. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DFJoSg_2.mjs.map → acorex-modules-auth-tenant-chooser.component-D3ENGMPa.mjs.map} +1 -1
  52. package/fesm2022/{acorex-modules-auth-two-factor.module-CH0SPs-d.mjs → acorex-modules-auth-two-factor.module-W31v75W2.mjs} +2 -2
  53. package/fesm2022/{acorex-modules-auth-two-factor.module-CH0SPs-d.mjs.map → acorex-modules-auth-two-factor.module-W31v75W2.mjs.map} +1 -1
  54. package/fesm2022/{acorex-modules-auth-user-sessions.component-C7POJT6o.mjs → acorex-modules-auth-user-sessions.component-DTEFg3f5.mjs} +2 -2
  55. package/fesm2022/{acorex-modules-auth-user-sessions.component-C7POJT6o.mjs.map → acorex-modules-auth-user-sessions.component-DTEFg3f5.mjs.map} +1 -1
  56. package/fesm2022/acorex-modules-auth.mjs +1 -1
  57. package/fesm2022/acorex-modules-conversation.mjs +5 -5
  58. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  59. package/fesm2022/acorex-modules-dashboard-management.mjs +3 -3
  60. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  61. package/fesm2022/acorex-modules-document-management.mjs +3 -3
  62. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  63. package/fesm2022/acorex-modules-human-capital-management.mjs +3 -3
  64. package/fesm2022/acorex-modules-human-capital-management.mjs.map +1 -1
  65. package/fesm2022/acorex-modules-notification-management.mjs +3 -3
  66. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  67. package/fesm2022/acorex-modules-organization-management.mjs +3 -3
  68. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  69. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-BmAtaDRT.mjs → acorex-modules-platform-management-acorex-modules-platform-management-C_aLEi3d.mjs} +5 -5
  70. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-BmAtaDRT.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-C_aLEi3d.mjs.map} +1 -1
  71. package/fesm2022/{acorex-modules-platform-management-menu-list.component-DMEgu6_w.mjs → acorex-modules-platform-management-menu-list.component-BC1SOdwQ.mjs} +2 -2
  72. package/fesm2022/{acorex-modules-platform-management-menu-list.component-DMEgu6_w.mjs.map → acorex-modules-platform-management-menu-list.component-BC1SOdwQ.mjs.map} +1 -1
  73. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  74. package/fesm2022/acorex-modules-report-management.mjs +4 -4
  75. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  76. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-C1ehsiff.mjs → acorex-modules-reservation-management-acorex-modules-reservation-management-BFGx6GK-.mjs} +7 -7
  77. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-C1ehsiff.mjs.map → acorex-modules-reservation-management-acorex-modules-reservation-management-BFGx6GK-.mjs.map} +1 -1
  78. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-DrGJ-Adz.mjs → acorex-modules-reservation-management-reservation-class-status.entity-DTOUrTLT.mjs} +2 -2
  79. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-DrGJ-Adz.mjs.map → acorex-modules-reservation-management-reservation-class-status.entity-DTOUrTLT.mjs.map} +1 -1
  80. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-3ySsMmeQ.mjs → acorex-modules-reservation-management-reservation-resource-type.entity-DmygFSZB.mjs} +2 -2
  81. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-3ySsMmeQ.mjs.map → acorex-modules-reservation-management-reservation-resource-type.entity-DmygFSZB.mjs.map} +1 -1
  82. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-ilzVQIWd.mjs → acorex-modules-reservation-management-reservation-status-transition.entity-DQab6X62.mjs} +2 -2
  83. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-ilzVQIWd.mjs.map → acorex-modules-reservation-management-reservation-status-transition.entity-DQab6X62.mjs.map} +1 -1
  84. package/fesm2022/acorex-modules-reservation-management.mjs +1 -1
  85. package/fesm2022/acorex-modules-security-management.mjs +2 -2
  86. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  87. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BxRF7Sj_.mjs → acorex-modules-settings-management-acorex-modules-settings-management-CQR64tFc.mjs} +8 -8
  88. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BxRF7Sj_.mjs.map → acorex-modules-settings-management-acorex-modules-settings-management-CQR64tFc.mjs.map} +1 -1
  89. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-BF3MqGDk.mjs → acorex-modules-settings-management-permission-definition.provider-Y6HBcIFV.mjs} +2 -2
  90. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-BF3MqGDk.mjs.map → acorex-modules-settings-management-permission-definition.provider-Y6HBcIFV.mjs.map} +1 -1
  91. package/fesm2022/{acorex-modules-settings-management-setting-page.component-BMzfjy_0.mjs → acorex-modules-settings-management-setting-page.component-COOQW9ON.mjs} +2 -2
  92. package/fesm2022/{acorex-modules-settings-management-setting-page.component-BMzfjy_0.mjs.map → acorex-modules-settings-management-setting-page.component-COOQW9ON.mjs.map} +1 -1
  93. package/fesm2022/{acorex-modules-settings-management-setting-view.component-CBhAa6rq.mjs → acorex-modules-settings-management-setting-view.component-CeyzDpwa.mjs} +2 -2
  94. package/fesm2022/{acorex-modules-settings-management-setting-view.component-CBhAa6rq.mjs.map → acorex-modules-settings-management-setting-view.component-CeyzDpwa.mjs.map} +1 -1
  95. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  96. package/fesm2022/acorex-modules-task-management.mjs +3 -3
  97. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  98. package/fesm2022/acorex-modules-workflow-management.mjs +3 -3
  99. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  100. package/package.json +14 -14
  101. package/fesm2022/acorex-modules-auth-acorex-modules-auth-9Tz_Jq63.mjs.map +0 -1
  102. package/fesm2022/acorex-modules-auth-app-chooser.component-BQRMc-PP.mjs.map +0 -1
@@ -3,36 +3,40 @@ import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
3
3
  import * as i1$3 from '@angular/common/http';
4
4
  import { HttpErrorResponse } from '@angular/common/http';
5
5
  import * as i0 from '@angular/core';
6
- import { inject, isDevMode, Injectable, InjectionToken, output, Component, viewChild, input, ViewChild, ViewEncapsulation, ChangeDetectionStrategy, signal, NgModule } from '@angular/core';
6
+ import { inject, isDevMode, Injectable, InjectionToken, output, viewChild, viewChildren, signal, computed, effect, ChangeDetectionStrategy, Component, input, ViewChild, ViewEncapsulation, NgModule } from '@angular/core';
7
7
  import * as i1$2 from '@angular/router';
8
8
  import { Router, RouterModule, ROUTES } from '@angular/router';
9
9
  import * as i1$5 from '@acorex/platform/common';
10
10
  import { AXPHomePageService, AXPDataProvider, AXP_ROOT_CONFIG_TOKEN, AXPSettingsService, AXPCommonModule, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';
11
11
  import { AXPCommandExecutor, provideCommandSetups } from '@acorex/platform/runtime';
12
- import * as i1 from '@angular/common';
12
+ import * as i1$1 from '@angular/common';
13
13
  import { CommonModule, AsyncPipe } from '@angular/common';
14
14
  import * as i1$4 from '@acorex/platform/core';
15
15
  import { AXPIconLogoConfig, AXPPlatformScope, AXPComponentSlotModule, provideLazyProvider } from '@acorex/platform/core';
16
- import * as i1$1 from '@acorex/components/button';
16
+ import * as i1 from '@acorex/components/button';
17
17
  import { AXButtonModule } from '@acorex/components/button';
18
- import * as i3 from '@acorex/components/decorators';
18
+ import * as i3$1 from '@acorex/components/decorators';
19
19
  import { AXDecoratorModule } from '@acorex/components/decorators';
20
- import * as i2 from '@acorex/components/popover';
20
+ import * as i2$2 from '@acorex/components/popover';
21
21
  import { AXPopoverModule } from '@acorex/components/popover';
22
- import { AXLoadingModule } from '@acorex/components/loading';
23
- import { AXPLogoComponent, AXPUserAvatarComponent } from '@acorex/platform/layout/components';
22
+ import * as i5 from '@acorex/cdk/list-navigation';
23
+ import { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';
24
+ import * as i4 from '@acorex/components/search-box';
25
+ import { AXSearchBoxModule } from '@acorex/components/search-box';
26
+ import * as i3 from '@acorex/components/select-box';
27
+ import { AXSelectBoxModule } from '@acorex/components/select-box';
28
+ import * as i2 from '@acorex/components/skeleton';
29
+ import { AXSkeletonModule } from '@acorex/components/skeleton';
30
+ import * as i2$1 from '@acorex/core/translation';
31
+ import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
24
32
  import { AXMApplicationService } from '@acorex/modules/application-management';
33
+ import { AXPLogoComponent, AXPUserAvatarComponent } from '@acorex/platform/layout/components';
34
+ import { first, Subject, timer, map, firstValueFrom } from 'rxjs';
25
35
  import { AXAvatarModule } from '@acorex/components/avatar';
26
36
  import { AXImageModule } from '@acorex/components/image';
37
+ import { AXLoadingModule } from '@acorex/components/loading';
27
38
  import { AXPopupService } from '@acorex/components/popup';
28
39
  import { AXPlatform } from '@acorex/core/platform';
29
- import * as i2$2 from '@acorex/core/translation';
30
- import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
31
- import * as i3$1 from '@acorex/components/search-box';
32
- import { AXSearchBoxModule } from '@acorex/components/search-box';
33
- import * as i2$1 from '@angular/forms';
34
- import { FormsModule } from '@angular/forms';
35
- import { first, Subject, timer, map, firstValueFrom } from 'rxjs';
36
40
  import { startWith, switchMap, tap } from 'rxjs/operators';
37
41
  import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';
38
42
 
@@ -132,22 +136,22 @@ const routes = [
132
136
  },
133
137
  {
134
138
  path: '',
135
- loadComponent: () => import('./acorex-modules-auth-master.layout-DyBOEl3Z.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
136
- loadChildren: () => import('./acorex-modules-auth-login.module-BnzKJuwI.mjs').then((c) => c.AXPSignInModule),
139
+ loadComponent: () => import('./acorex-modules-auth-master.layout-C5neEC1G.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
140
+ loadChildren: () => import('./acorex-modules-auth-login.module-Cw-N4q-C.mjs').then((c) => c.AXPSignInModule),
137
141
  },
138
142
  {
139
143
  path: '',
140
- loadComponent: () => import('./acorex-modules-auth-master.layout-DyBOEl3Z.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
141
- loadChildren: () => import('./acorex-modules-auth-two-factor.module-CH0SPs-d.mjs').then((c) => c.AXPTwoFactorModule),
144
+ loadComponent: () => import('./acorex-modules-auth-master.layout-C5neEC1G.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
145
+ loadChildren: () => import('./acorex-modules-auth-two-factor.module-W31v75W2.mjs').then((c) => c.AXPTwoFactorModule),
142
146
  },
143
147
  {
144
148
  path: '',
145
- loadComponent: () => import('./acorex-modules-auth-master.layout-DyBOEl3Z.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
146
- loadChildren: () => import('./acorex-modules-auth-routes-CMdYNEdU.mjs').then((c) => c),
149
+ loadComponent: () => import('./acorex-modules-auth-master.layout-C5neEC1G.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
150
+ loadChildren: () => import('./acorex-modules-auth-routes-PKJ3dtI0.mjs').then((c) => c),
147
151
  },
148
152
  {
149
153
  path: 'axp-oauth-callback',
150
- loadComponent: () => import('./acorex-modules-auth-oauth-callback.component-B1qqH43K.mjs').then((c) => c.AXPOAuthCallbackComponent),
154
+ loadComponent: () => import('./acorex-modules-auth-oauth-callback.component-0bBwkZ35.mjs').then((c) => c.AXPOAuthCallbackComponent),
151
155
  },
152
156
  {
153
157
  path: 'account',
@@ -170,29 +174,94 @@ const routes = [
170
174
  ];
171
175
 
172
176
  class AXPAppChooserListComponent {
177
+ //#endregion
178
+ //#region ---- Constructor ----
173
179
  constructor() {
180
+ //#region ---- Services & Dependencies ----
174
181
  this.sessionService = inject(AXPSessionService);
175
182
  this.homePageService = inject(AXPHomePageService);
176
183
  this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);
177
184
  this.applicationService = inject(AXMApplicationService);
178
185
  this.strategyName = this.sessionService.getSessionData()?.strategy;
179
186
  this.strategy = this.authStrategyRegistry.get(this.strategyName);
180
- this.selectedApplication = null;
181
- this.applications$ = this.sessionService.applications$;
187
+ //#endregion
188
+ //#region ---- Outputs ----
182
189
  this.applicationChosen = output();
190
+ //#endregion
191
+ //#region ---- View References ----
192
+ this.listNav = viewChild(AXListNavigationDirective, ...(ngDevMode ? [{ debugName: "listNav" }] : []));
193
+ this.listItems = viewChildren(AXListNavigationItemDirective, ...(ngDevMode ? [{ debugName: "listItems" }] : []));
194
+ //#endregion
195
+ //#region ---- State ----
196
+ this.isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
197
+ this.allApplications = signal([], ...(ngDevMode ? [{ debugName: "allApplications" }] : []));
198
+ this.useSelectBox = computed(() => this.allApplications().length > 3, ...(ngDevMode ? [{ debugName: "useSelectBox" }] : []));
199
+ this.selectedApplication = signal(null, ...(ngDevMode ? [{ debugName: "selectedApplication" }] : []));
200
+ this.isSelectBoxOpen = signal(false, ...(ngDevMode ? [{ debugName: "isSelectBoxOpen" }] : []));
201
+ this.canApply = computed(() => !!this.selectedApplication(), ...(ngDevMode ? [{ debugName: "canApply" }] : []));
202
+ this.skeletonItems = [1, 2, 3];
203
+ effect(() => {
204
+ if (!this.isLoading() && !this.useSelectBox() && this.allApplications().length > 0) {
205
+ queueMicrotask(() => this.focusFirstListItem());
206
+ }
207
+ });
208
+ }
209
+ //#endregion
210
+ //#region ---- Lifecycle Methods ----
211
+ ngOnInit() {
212
+ this.sessionService.applications$.pipe(first()).subscribe((applications) => {
213
+ this.allApplications.set(applications);
214
+ if (applications.length > 0) {
215
+ this.selectedApplication.set(applications[0]);
216
+ }
217
+ this.isLoading.set(false);
218
+ });
219
+ }
220
+ //#endregion
221
+ //#region ---- UI Handlers ----
222
+ handleApplicationSelect(event) {
223
+ if (!event.isUserInteraction) {
224
+ return;
225
+ }
226
+ this.selectedApplication.set(event.component.selectedItems[0] ?? null);
227
+ }
228
+ handleListItemKeyDown(event, application) {
229
+ if (event.key === 'Enter' || event.key === ' ') {
230
+ event.preventDefault();
231
+ void this.chooseApplication(application);
232
+ }
233
+ }
234
+ handleSelectBoxKeyDown(event) {
235
+ if (!(event instanceof KeyboardEvent)) {
236
+ return;
237
+ }
238
+ if (event.key !== 'Enter' && event.key !== 'NumpadEnter') {
239
+ return;
240
+ }
241
+ if (this.isSelectBoxOpen()) {
242
+ return;
243
+ }
244
+ event.preventDefault();
245
+ event.stopPropagation();
246
+ if (this.canApply()) {
247
+ this.applySelection();
248
+ }
249
+ }
250
+ applySelection() {
251
+ const application = this.selectedApplication();
252
+ if (application) {
253
+ void this.chooseApplication(application);
254
+ }
183
255
  }
184
256
  async chooseApplication(item) {
185
- this.selectedApplication = item;
186
257
  const tenantId = this.sessionService.tenant?.id || '';
187
258
  if (!tenantId) {
188
259
  throw new Error('Tenant ID is missing. Cannot choose application.');
189
260
  }
190
- // Get the full application entity to access its editions
191
261
  const fullApplication = await this.applicationService.getOne(item.id);
192
262
  if (!fullApplication) {
193
263
  throw new Error(`Application not found: ${item.id}`);
194
264
  }
195
- // Determine which edition to use (from item.edition or default to first edition)
196
265
  let selectedEdition = item.edition;
197
266
  if (!selectedEdition && fullApplication.editions && fullApplication.editions.length > 0) {
198
267
  selectedEdition = {
@@ -201,7 +270,6 @@ class AXPAppChooserListComponent {
201
270
  description: fullApplication.editions[0].description,
202
271
  };
203
272
  }
204
- // Update application with edition information and version from full entity
205
273
  const applicationWithEdition = {
206
274
  ...item,
207
275
  version: fullApplication.version || item.version,
@@ -216,15 +284,34 @@ class AXPAppChooserListComponent {
216
284
  await this.sessionService.updateToken(updateContext);
217
285
  }
218
286
  this.applicationChosen.emit();
219
- return await this.homePageService.navigateTo();
287
+ await this.homePageService.navigateTo();
288
+ }
289
+ //#endregion
290
+ //#region ---- Utility Methods ----
291
+ focusFirstListItem() {
292
+ const nav = this.listNav();
293
+ const items = this.listItems();
294
+ if (nav && items.length > 0) {
295
+ nav.navigateTo(items[0]);
296
+ }
220
297
  }
221
298
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPAppChooserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
222
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", outputs: { applicationChosen: "applicationChosen" }, 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\n 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 <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-muted ax-text-xs\">{{ application.edition?.title }}</span>\n </div>\n </div>\n }\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["source"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
299
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", outputs: { applicationChosen: "applicationChosen" }, 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=\"ax-w-full ax-flex ax-flex-col ax-gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-py-1\">\n <ax-skeleton [animated]=\"true\" class=\"ax-w-12 ax-h-12 ax-rounded-full ax-shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"ax-flex-1 ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div class=\"ax-w-full ax-flex ax-flex-col ax-gap-4\" (keydown.capture)=\"handleSelectBoxKeyDown($event)\">\n <ax-select-box\n class=\"ax-w-full\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [itemHeight]=\"56\"\n [value]=\"selectedApplication()\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleApplicationSelect($event)\"\n >\n <ax-search-box look=\"fill\"></ax-search-box>\n </ax-select-box>\n <ax-button\n class=\"ax-w-full\"\n color=\"primary\"\n [disabled]=\"!canApply()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n ></ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\"\n role=\"listbox\"\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]=\"navItem.isActive()\"\n class=\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-1 ax-px-2 ax-items-start ax-cursor-pointer ax-rounded-md ax-transition-colors ax-outline-none hover:ax-bg-primary-lightest hover:dark:ax-bg-primary-dark\"\n [class.ax-bg-primary-lightest]=\"navItem.isActive()\"\n [class.dark:ax-bg-primary-dark]=\"navItem.isActive()\"\n (click)=\"chooseApplication(application)\"\n (keydown)=\"handleListItemKeyDown($event, application)\"\n >\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 >\n <axp-logo\n [source]=\"application.logo\"\n [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 dark:ax-bg-neutral-800 ax-rounded-full\"\n ></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-muted ax-text-xs\">{{ application.edition?.title }}</span>\n </div>\n </div>\n }\n </div>\n}\n\n<ng-template #applicationItemTemplate let-item>\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-p-2\">\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-shrink-0\"\n >\n <axp-logo\n [source]=\"item.data.logo\"\n [attr.alt]=\"item.data.title\"\n class=\"!ax-flex ax-items-center ax-justify-center !ax-text-sm ax-w-8 ax-h-8 ax-bg-neutral-200 ax-rounded-full\"\n ></axp-logo>\n </div>\n <span class=\"ax-flex-1 ax-text-start md:ax-text-base ax-text-sm\">{{ item.data.title }}</span>\n @if (item.data.edition?.title) {\n <span class=\"ax-text-muted ax-text-xs\">{{ item.data.edition.title }}</span>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.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: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i3.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4.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: i5.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i5.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["source"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
223
300
  }
224
301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPAppChooserListComponent, decorators: [{
225
302
  type: Component,
226
- args: [{ selector: 'axp-app-chooser-list', imports: [CommonModule, AXDecoratorModule, AXLoadingModule, AXPLogoComponent], 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\n 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 <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-muted ax-text-xs\">{{ application.edition?.title }}</span>\n </div>\n </div>\n }\n</div>" }]
227
- }], propDecorators: { applicationChosen: [{ type: i0.Output, args: ["applicationChosen"] }] } });
303
+ args: [{ selector: 'axp-app-chooser-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
304
+ CommonModule,
305
+ AXButtonModule,
306
+ AXDecoratorModule,
307
+ AXSkeletonModule,
308
+ AXSelectBoxModule,
309
+ AXSearchBoxModule,
310
+ AXListNavigationModule,
311
+ AXTranslationModule,
312
+ AXPLogoComponent,
313
+ ], template: "@if (isLoading()) {\n <div class=\"ax-w-full ax-flex ax-flex-col ax-gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-py-1\">\n <ax-skeleton [animated]=\"true\" class=\"ax-w-12 ax-h-12 ax-rounded-full ax-shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"ax-flex-1 ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div class=\"ax-w-full ax-flex ax-flex-col ax-gap-4\" (keydown.capture)=\"handleSelectBoxKeyDown($event)\">\n <ax-select-box\n class=\"ax-w-full\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [itemHeight]=\"56\"\n [value]=\"selectedApplication()\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleApplicationSelect($event)\"\n >\n <ax-search-box look=\"fill\"></ax-search-box>\n </ax-select-box>\n <ax-button\n class=\"ax-w-full\"\n color=\"primary\"\n [disabled]=\"!canApply()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n ></ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\"\n role=\"listbox\"\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]=\"navItem.isActive()\"\n class=\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-1 ax-px-2 ax-items-start ax-cursor-pointer ax-rounded-md ax-transition-colors ax-outline-none hover:ax-bg-primary-lightest hover:dark:ax-bg-primary-dark\"\n [class.ax-bg-primary-lightest]=\"navItem.isActive()\"\n [class.dark:ax-bg-primary-dark]=\"navItem.isActive()\"\n (click)=\"chooseApplication(application)\"\n (keydown)=\"handleListItemKeyDown($event, application)\"\n >\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 >\n <axp-logo\n [source]=\"application.logo\"\n [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 dark:ax-bg-neutral-800 ax-rounded-full\"\n ></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-muted ax-text-xs\">{{ application.edition?.title }}</span>\n </div>\n </div>\n }\n </div>\n}\n\n<ng-template #applicationItemTemplate let-item>\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-p-2\">\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-shrink-0\"\n >\n <axp-logo\n [source]=\"item.data.logo\"\n [attr.alt]=\"item.data.title\"\n class=\"!ax-flex ax-items-center ax-justify-center !ax-text-sm ax-w-8 ax-h-8 ax-bg-neutral-200 ax-rounded-full\"\n ></axp-logo>\n </div>\n <span class=\"ax-flex-1 ax-text-start md:ax-text-base ax-text-sm\">{{ item.data.title }}</span>\n @if (item.data.edition?.title) {\n <span class=\"ax-text-muted ax-text-xs\">{{ item.data.edition.title }}</span>\n }\n </div>\n</ng-template>\n" }]
314
+ }], ctorParameters: () => [], propDecorators: { applicationChosen: [{ type: i0.Output, args: ["applicationChosen"] }], listNav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], listItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
228
315
 
229
316
  class AXMAppChooserSlotComponent {
230
317
  constructor() {
@@ -236,7 +323,7 @@ class AXMAppChooserSlotComponent {
236
323
  this.appPopover()?.close();
237
324
  }
238
325
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXMAppChooserSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
239
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "appPopover", first: true, predicate: ["appPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (((applications$ | async)?.length ?? 0) > 1) {\n <ax-button color=\"primary\" #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=\"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 (applicationChosen)=\"closePopover()\"></axp-app-chooser-list>\n </div>\n </ax-popover>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$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.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAppChooserListComponent, selector: "axp-app-chooser-list", outputs: ["applicationChosen"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
326
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "appPopover", first: true, predicate: ["appPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (((applications$ | async)?.length ?? 0) > 1) {\n <ax-button color=\"primary\" #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=\"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 (applicationChosen)=\"closePopover()\"></axp-app-chooser-list>\n </div>\n </ax-popover>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.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", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAppChooserListComponent, selector: "axp-app-chooser-list", outputs: ["applicationChosen"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
240
327
  }
241
328
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXMAppChooserSlotComponent, decorators: [{
242
329
  type: Component,
@@ -244,42 +331,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
244
331
  }], propDecorators: { appPopover: [{ type: i0.ViewChild, args: ['appPopover', { isSignal: true }] }] } });
245
332
 
246
333
  class AXPTenantChooserListComponent {
334
+ //#endregion
335
+ //#region ---- Constructor ----
247
336
  constructor() {
337
+ //#region ---- Services & Dependencies ----
248
338
  this.sessionService = inject(AXPSessionService);
249
339
  this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);
250
340
  this.router = inject(Router);
251
341
  this.strategyName = this.sessionService.getSessionData()?.strategy;
252
342
  this.strategy = this.authStrategyRegistry.get(this.strategyName);
253
- this.defaultLogo = new AXPIconLogoConfig('fa-solid fa-building', 'neutral-500');
343
+ //#endregion
344
+ //#region ---- Inputs & Outputs ----
254
345
  this.simple = input(false, ...(ngDevMode ? [{ debugName: "simple" }] : []));
255
- this.searchValue = '';
256
- this.showAll = false;
257
- this.selectedTenant = null;
258
- this.displayedTenants = [];
259
- this.tenants$ = this.sessionService.tenants$;
260
346
  this.tenantChosen = output();
347
+ //#endregion
348
+ //#region ---- View References ----
349
+ this.listNav = viewChild(AXListNavigationDirective, ...(ngDevMode ? [{ debugName: "listNav" }] : []));
350
+ this.listItems = viewChildren(AXListNavigationItemDirective, ...(ngDevMode ? [{ debugName: "listItems" }] : []));
351
+ //#endregion
352
+ //#region ---- State ----
353
+ this.defaultLogo = new AXPIconLogoConfig('fa-solid fa-building', 'neutral-500');
354
+ this.isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
355
+ this.allTenants = signal([], ...(ngDevMode ? [{ debugName: "allTenants" }] : []));
356
+ this.useSelectBox = computed(() => this.allTenants().length > 3, ...(ngDevMode ? [{ debugName: "useSelectBox" }] : []));
357
+ this.selectedTenant = signal(null, ...(ngDevMode ? [{ debugName: "selectedTenant" }] : []));
358
+ this.isSelectBoxOpen = signal(false, ...(ngDevMode ? [{ debugName: "isSelectBoxOpen" }] : []));
359
+ this.canApply = computed(() => !!this.selectedTenant(), ...(ngDevMode ? [{ debugName: "canApply" }] : []));
360
+ this.skeletonItems = [1, 2, 3];
361
+ effect(() => {
362
+ if (!this.isLoading() && !this.useSelectBox() && this.allTenants().length > 0) {
363
+ queueMicrotask(() => this.focusFirstListItem());
364
+ }
365
+ });
261
366
  }
367
+ //#endregion
368
+ //#region ---- Lifecycle Methods ----
262
369
  ngOnInit() {
263
370
  this.sessionService.tenants$.pipe(first()).subscribe((tenants) => {
264
- this.displayedTenants = tenants.slice(0, 4);
265
- this.allTenants = tenants;
371
+ this.allTenants.set(tenants);
372
+ if (tenants.length > 0) {
373
+ this.selectedTenant.set(tenants[0]);
374
+ }
375
+ this.isLoading.set(false);
266
376
  });
267
377
  }
268
- filterTenants(tenants) {
269
- return tenants.filter((tenant) => tenant.title.toLowerCase().includes(this.searchValue.toLowerCase()));
378
+ //#endregion
379
+ //#region ---- UI Handlers ----
380
+ handleTenantSelect(event) {
381
+ if (!event.isUserInteraction) {
382
+ return;
383
+ }
384
+ this.selectedTenant.set(event.component.selectedItems[0] ?? null);
270
385
  }
271
- handleSearch(event) {
272
- if (event != undefined) {
273
- this.searchValue = event;
274
- this.displayedTenants = this.filterTenants(this.allTenants);
386
+ handleListItemKeyDown(event, tenant) {
387
+ if (event.key === 'Enter' || event.key === ' ') {
388
+ event.preventDefault();
389
+ void this.chooseTenant(tenant);
275
390
  }
276
391
  }
277
- showAllTenants() {
278
- this.showAll = !this.showAll;
279
- this.displayedTenants = this.filterTenants(this.showAll ? this.allTenants : this.allTenants.slice(0, 4));
392
+ handleSelectBoxKeyDown(event) {
393
+ if (!(event instanceof KeyboardEvent)) {
394
+ return;
395
+ }
396
+ if (event.key !== 'Enter' && event.key !== 'NumpadEnter') {
397
+ return;
398
+ }
399
+ if (this.isSelectBoxOpen()) {
400
+ return;
401
+ }
402
+ event.preventDefault();
403
+ event.stopPropagation();
404
+ if (this.canApply()) {
405
+ this.applySelection();
406
+ }
407
+ }
408
+ applySelection() {
409
+ const tenant = this.selectedTenant();
410
+ if (tenant) {
411
+ void this.chooseTenant(tenant);
412
+ }
280
413
  }
281
414
  async chooseTenant(item) {
282
- this.selectedTenant = item;
283
415
  if (this.strategy) {
284
416
  const updateContext = {
285
417
  tenant: item,
@@ -290,13 +422,32 @@ class AXPTenantChooserListComponent {
290
422
  this.tenantChosen.emit();
291
423
  return this.router.navigate(['/auth/account/app-chooser']);
292
424
  }
425
+ //#endregion
426
+ //#region ---- Utility Methods ----
427
+ focusFirstListItem() {
428
+ const nav = this.listNav();
429
+ const items = this.listItems();
430
+ if (nav && items.length > 0) {
431
+ nav.navigateTo(items[0]);
432
+ }
433
+ }
293
434
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTenantChooserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
294
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXPTenantChooserListComponent, isStandalone: true, selector: "axp-tenant-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChosen: "tenantChosen" }, ngImport: i0, template: "@if (simple()) {\n<div class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for (tenant of tenants$ | 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)=\"chooseTenant(tenant)\">\n <div class=\"ax-flex ax-flex-1 ax-gap-2 ax-items-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 <axp-logo [source]=\"tenant.logo ?? defaultLogo\" [attr.alt]=\"tenant.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\">{{ tenant.title }}</span>\n </div>\n </div>\n }\n</div>\n} @else {\n@if (allTenants && allTenants.length > 4) {\n<ax-search-box [placeholder]=\"'@general:search.title' | translate | async\" [ngModel]=\"searchValue\"\n (ngModelChange)=\"handleSearch($event)\" class=\"ax-w-full\"><ax-clear-button></ax-clear-button></ax-search-box>\n<div class=\"ax-mt-3 ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for (tenant of displayedTenants; 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-center ax-cursor-pointer\"\n (click)=\"chooseTenant(tenant)\">\n <div class=\"ax-flex ax-gap-2 ax-items-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 <axp-logo [source]=\"tenant.logo ?? defaultLogo\" [attr.alt]=\"tenant.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=\"md:ax-text-base ax-text-sm ax-text-start\">{{ tenant.title }} </span>\n </div>\n </div>\n }\n</div>\n} @else {\n<div class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for (tenant of displayedTenants; 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-center ax-cursor-pointer\"\n (click)=\"chooseTenant(tenant)\">\n <div class=\"ax-flex ax-gap-2 ax-items-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 <axp-logo [source]=\"tenant.logo ?? defaultLogo\" [attr.alt]=\"tenant.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=\"md:ax-text-base ax-text-sm ax-text-start\">{{ tenant.title }} </span>\n </div>\n </div>\n }\n</div>\n}\n@if (allTenants && allTenants.length > 4) {\n<div class=\"ax-mt-6 ax-w-full ax-flex ax-justify-center\">\n <ax-button (onClick)=\"showAllTenants()\" class=\"ax-w-full\" look=\"outline\" [text]=\"\n showAll\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"></ax-button>\n</div>\n}\n}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["source"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i3$1.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: AXButtonModule }, { kind: "component", type: i1$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.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$2.AXTranslatorPipe, name: "translate" }] }); }
435
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXPTenantChooserListComponent, isStandalone: true, selector: "axp-tenant-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChosen: "tenantChosen" }, 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=\"ax-w-full ax-flex ax-flex-col ax-gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-py-1\">\n <ax-skeleton [animated]=\"true\" class=\"ax-w-12 ax-h-12 ax-rounded-full ax-shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"ax-flex-1 ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div class=\"ax-w-full ax-flex ax-flex-col ax-gap-4\" (keydown.capture)=\"handleSelectBoxKeyDown($event)\">\n <ax-select-box\n class=\"ax-w-full\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()\"\n [itemHeight]=\"56\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n >\n <ax-search-box look=\"fill\"></ax-search-box>\n </ax-select-box>\n <ax-button\n class=\"ax-w-full\"\n color=\"primary\"\n [disabled]=\"!canApply()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n ></ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\"\n role=\"listbox\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"navItem.isActive()\"\n class=\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-1 ax-px-2 ax-items-center ax-cursor-pointer ax-rounded-md ax-transition-colors ax-outline-none hover:ax-bg-primary-lightest hover:dark:ax-bg-primary-dark\"\n [class.ax-bg-primary-lightest]=\"navItem.isActive()\"\n [class.dark:ax-bg-primary-dark]=\"navItem.isActive()\"\n [class.ax-items-start]=\"simple()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"ax-flex ax-flex-1 ax-gap-2 ax-items-center ax-font-medium\" [class.ax-justify-center]=\"simple()\">\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 >\n <axp-logo\n [source]=\"tenant.logo ?? defaultLogo\"\n [attr.alt]=\"tenant.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 dark:ax-bg-neutral-800 ax-rounded-full\"\n ></axp-logo>\n </div>\n <span class=\"ax-flex-1 ax-text-start md:ax-text-base ax-text-sm\">{{ tenant.title }}</span>\n </div>\n </div>\n }\n </div>\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-p-2\">\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-shrink-0\"\n >\n <axp-logo\n [source]=\"item.data.logo ?? defaultLogo\"\n [attr.alt]=\"item.data.title\"\n class=\"!ax-flex ax-items-center ax-justify-center !ax-text-sm ax-w-8 ax-h-8 ax-bg-neutral-200 ax-rounded-full\"\n ></axp-logo>\n </div>\n <span class=\"ax-text-start md:ax-text-base ax-text-sm\">{{ item.data.title }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.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: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i3.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4.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: i5.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i5.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["source"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
295
436
  }
296
437
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTenantChooserListComponent, decorators: [{
297
438
  type: Component,
298
- args: [{ selector: 'axp-tenant-chooser-list', imports: [CommonModule, FormsModule, AXTranslationModule, AXDecoratorModule, AXLoadingModule, AXPLogoComponent, AXSearchBoxModule, AXButtonModule], template: "@if (simple()) {\n<div class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for (tenant of tenants$ | 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)=\"chooseTenant(tenant)\">\n <div class=\"ax-flex ax-flex-1 ax-gap-2 ax-items-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 <axp-logo [source]=\"tenant.logo ?? defaultLogo\" [attr.alt]=\"tenant.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\">{{ tenant.title }}</span>\n </div>\n </div>\n }\n</div>\n} @else {\n@if (allTenants && allTenants.length > 4) {\n<ax-search-box [placeholder]=\"'@general:search.title' | translate | async\" [ngModel]=\"searchValue\"\n (ngModelChange)=\"handleSearch($event)\" class=\"ax-w-full\"><ax-clear-button></ax-clear-button></ax-search-box>\n<div class=\"ax-mt-3 ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for (tenant of displayedTenants; 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-center ax-cursor-pointer\"\n (click)=\"chooseTenant(tenant)\">\n <div class=\"ax-flex ax-gap-2 ax-items-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 <axp-logo [source]=\"tenant.logo ?? defaultLogo\" [attr.alt]=\"tenant.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=\"md:ax-text-base ax-text-sm ax-text-start\">{{ tenant.title }} </span>\n </div>\n </div>\n }\n</div>\n} @else {\n<div class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for (tenant of displayedTenants; 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-center ax-cursor-pointer\"\n (click)=\"chooseTenant(tenant)\">\n <div class=\"ax-flex ax-gap-2 ax-items-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 <axp-logo [source]=\"tenant.logo ?? defaultLogo\" [attr.alt]=\"tenant.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=\"md:ax-text-base ax-text-sm ax-text-start\">{{ tenant.title }} </span>\n </div>\n </div>\n }\n</div>\n}\n@if (allTenants && allTenants.length > 4) {\n<div class=\"ax-mt-6 ax-w-full ax-flex ax-justify-center\">\n <ax-button (onClick)=\"showAllTenants()\" class=\"ax-w-full\" look=\"outline\" [text]=\"\n showAll\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"></ax-button>\n</div>\n}\n}" }]
299
- }], propDecorators: { simple: [{ type: i0.Input, args: [{ isSignal: true, alias: "simple", required: false }] }], tenantChosen: [{ type: i0.Output, args: ["tenantChosen"] }] } });
439
+ args: [{ selector: 'axp-tenant-chooser-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
440
+ CommonModule,
441
+ AXTranslationModule,
442
+ AXButtonModule,
443
+ AXDecoratorModule,
444
+ AXSkeletonModule,
445
+ AXSelectBoxModule,
446
+ AXSearchBoxModule,
447
+ AXListNavigationModule,
448
+ AXPLogoComponent,
449
+ ], template: "@if (isLoading()) {\n <div class=\"ax-w-full ax-flex ax-flex-col ax-gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-py-1\">\n <ax-skeleton [animated]=\"true\" class=\"ax-w-12 ax-h-12 ax-rounded-full ax-shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"ax-flex-1 ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div class=\"ax-w-full ax-flex ax-flex-col ax-gap-4\" (keydown.capture)=\"handleSelectBoxKeyDown($event)\">\n <ax-select-box\n class=\"ax-w-full\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()\"\n [itemHeight]=\"56\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n >\n <ax-search-box look=\"fill\"></ax-search-box>\n </ax-select-box>\n <ax-button\n class=\"ax-w-full\"\n color=\"primary\"\n [disabled]=\"!canApply()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n ></ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\"\n role=\"listbox\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"navItem.isActive()\"\n class=\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-1 ax-px-2 ax-items-center ax-cursor-pointer ax-rounded-md ax-transition-colors ax-outline-none hover:ax-bg-primary-lightest hover:dark:ax-bg-primary-dark\"\n [class.ax-bg-primary-lightest]=\"navItem.isActive()\"\n [class.dark:ax-bg-primary-dark]=\"navItem.isActive()\"\n [class.ax-items-start]=\"simple()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"ax-flex ax-flex-1 ax-gap-2 ax-items-center ax-font-medium\" [class.ax-justify-center]=\"simple()\">\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 >\n <axp-logo\n [source]=\"tenant.logo ?? defaultLogo\"\n [attr.alt]=\"tenant.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 dark:ax-bg-neutral-800 ax-rounded-full\"\n ></axp-logo>\n </div>\n <span class=\"ax-flex-1 ax-text-start md:ax-text-base ax-text-sm\">{{ tenant.title }}</span>\n </div>\n </div>\n }\n </div>\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"ax-flex ax-gap-2 ax-items-center ax-p-2\">\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-shrink-0\"\n >\n <axp-logo\n [source]=\"item.data.logo ?? defaultLogo\"\n [attr.alt]=\"item.data.title\"\n class=\"!ax-flex ax-items-center ax-justify-center !ax-text-sm ax-w-8 ax-h-8 ax-bg-neutral-200 ax-rounded-full\"\n ></axp-logo>\n </div>\n <span class=\"ax-text-start md:ax-text-base ax-text-sm\">{{ item.data.title }}</span>\n </div>\n</ng-template>\n" }]
450
+ }], ctorParameters: () => [], propDecorators: { simple: [{ type: i0.Input, args: [{ isSignal: true, alias: "simple", required: false }] }], tenantChosen: [{ type: i0.Output, args: ["tenantChosen"] }], listNav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], listItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
300
451
 
301
452
  class AXPTenantChooserDropdownComponent {
302
453
  constructor() {
@@ -309,7 +460,7 @@ class AXPTenantChooserDropdownComponent {
309
460
  this.tenantPopover()?.close();
310
461
  }
311
462
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTenantChooserDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
312
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", viewQueries: [{ propertyName: "tenantPopover", first: true, predicate: ["tenantPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tenants$ | async; as tenants) {\n@if (tenants.length > 1) {\n<ax-button [text]=\"tenant?.title ?? ''\" class=\"ax-xs\" look=\"blank\" #tenantChooser>\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n</ax-button>\n<ax-popover [target]=\"tenantChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\"\n #tenantPopover>\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-tenant-chooser-list [simple]=\"true\" (tenantChosen)=\"closePopover()\"></axp-tenant-chooser-list>\n </div>\n</ax-popover>\n} @else {\n<ax-button [text]=\"tenant?.title ?? ''\" class=\"ax-xs\" look=\"blank\"></ax-button>\n}\n}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$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.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.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: "component", type: AXPTenantChooserListComponent, selector: "axp-tenant-chooser-list", inputs: ["simple"], outputs: ["tenantChosen"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
463
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", viewQueries: [{ propertyName: "tenantPopover", first: true, predicate: ["tenantPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tenants$ | async; as tenants) {\n@if (tenants.length > 1) {\n<ax-button [text]=\"tenant?.title ?? ''\" class=\"ax-xs\" look=\"blank\" #tenantChooser>\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n</ax-button>\n<ax-popover [target]=\"tenantChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\"\n #tenantPopover>\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-tenant-chooser-list [simple]=\"true\" (tenantChosen)=\"closePopover()\"></axp-tenant-chooser-list>\n </div>\n</ax-popover>\n} @else {\n<ax-button [text]=\"tenant?.title ?? ''\" class=\"ax-xs\" look=\"blank\"></ax-button>\n}\n}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.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", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$1.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: "component", type: AXPTenantChooserListComponent, selector: "axp-tenant-chooser-list", inputs: ["simple"], outputs: ["tenantChosen"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
313
464
  }
314
465
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTenantChooserDropdownComponent, decorators: [{
315
466
  type: Component,
@@ -344,7 +495,7 @@ class AXMAuthProfileSlotComponent {
344
495
  this.router.navigate(['/auth/login']);
345
496
  }
346
497
  async openUserSession() {
347
- const com = await import('./acorex-modules-auth-user-sessions.component-C7POJT6o.mjs').then((c) => c.AXMUserSessionsComponent);
498
+ const com = await import('./acorex-modules-auth-user-sessions.component-DTEFg3f5.mjs').then((c) => c.AXMUserSessionsComponent);
348
499
  this.popupService.open(com, {
349
500
  size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : 'sm',
350
501
  title: await this.translateService.translateAsync('@auth:profile.sessions.title'),
@@ -354,11 +505,11 @@ class AXMAuthProfileSlotComponent {
354
505
  this.commandExecutor.execute('auth:profile', {});
355
506
  }
356
507
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXMAuthProfileSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
357
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", 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)=\"showProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ '@auth:profile.edit' | translate | 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>{{ '@auth:profile.settings' | translate | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ '@auth:profile.sessions' | translate | 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>{{ '@auth:profile.logout' | translate | 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$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type:
508
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", 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)=\"showProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ '@auth:profile.edit' | translate | 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>{{ '@auth:profile.settings' | translate | async }}</span>\n </a>\n </li>\n <!-- <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ '@auth:profile.sessions' | translate | 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>{{ '@auth:profile.logout' | translate | 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$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type:
358
509
  //
359
- AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$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: i3.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:
510
+ AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.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: i3$1.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:
360
511
  //
361
- AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
512
+ AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
362
513
  }
363
514
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXMAuthProfileSlotComponent, decorators: [{
364
515
  type: Component,
@@ -376,7 +527,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
376
527
  AXPUserAvatarComponent,
377
528
  //
378
529
  AXPTenantChooserDropdownComponent,
379
- ], 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)=\"showProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ '@auth:profile.edit' | translate | 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>{{ '@auth:profile.settings' | translate | async }}</span>\n </a>\n </li>\n <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ '@auth:profile.sessions' | translate | 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>{{ '@auth:profile.logout' | translate | 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"] }]
530
+ ], 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)=\"showProfile()\">\n <i class=\"fa-light fa-user\"></i>\n <span>{{ '@auth:profile.edit' | translate | 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>{{ '@auth:profile.settings' | translate | async }}</span>\n </a>\n </li>\n <!-- <li>\n <a (click)=\"openUserSession()\">\n <i class=\"fa-light fa-mobile\"></i>\n <span>{{ '@auth:profile.sessions' | translate | 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>{{ '@auth:profile.logout' | translate | 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"] }]
380
531
  }], propDecorators: { profilePopover: [{
381
532
  type: ViewChild,
382
533
  args: ['profilePopover']
@@ -444,7 +595,7 @@ class AXMUserProfileCardSlotComponent {
444
595
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXMUserProfileCardSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
445
596
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXMUserProfileCardSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "profilePopover", first: true, predicate: ["profilePopover"], descendants: true }], ngImport: i0, template: "@if((isAuthenticated$ | async)) {\n<div class=\"ax-p-3 ax-flex ax-items-center ax-gap-1 ax-border-b ax-border-lighter\">\n <div #avatar>\n <axp-user-avatar [size]=\"48\" [userId]=\"(user$ | async)?.id!\"></axp-user-avatar>\n </div>\n <div class=\"ax-flex ax-flex-col\">\n <ax-title class=\"ax-text-sm ax-font-medium ax-px-3\">{{ (user$ | async)?.title }}</ax-title>\n <axp-tenant-chooser-dropdown />\n </div>\n</div>\n}\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
446
597
  //
447
- AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.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:
598
+ AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.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:
448
599
  //
449
600
  AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
450
601
  }
@@ -637,12 +788,12 @@ function routesFacory() {
637
788
  routes = [
638
789
  {
639
790
  path: 'tenant-chooser',
640
- loadComponent: () => import('./acorex-modules-auth-tenant-chooser.component-DFJoSg_2.mjs').then((c) => c.AXPAuthTenantChooserComponent),
791
+ loadComponent: () => import('./acorex-modules-auth-tenant-chooser.component-D3ENGMPa.mjs').then((c) => c.AXPAuthTenantChooserComponent),
641
792
  canActivate: [AXPAuthGuard, canActivateTenantChooser],
642
793
  },
643
794
  {
644
795
  path: 'app-chooser',
645
- loadComponent: () => import('./acorex-modules-auth-app-chooser.component-BQRMc-PP.mjs').then((c) => c.AXPAuthAppChooserComponent),
796
+ loadComponent: () => import('./acorex-modules-auth-app-chooser.component-Cz98Okd6.mjs').then((c) => c.AXPAuthAppChooserComponent),
646
797
  canActivate: [AXPAuthGuard, canActivateAppChooser],
647
798
  },
648
799
  ];
@@ -789,4 +940,4 @@ var AXMSessionStatusTypes;
789
940
  */
790
941
 
791
942
  export { AXM_AUTH_CONFIG_TOKEN as A, AXM_LOGIN_GUARD_TOKEN as a, AXMAuthenticationTypes as b, AXPTenantChooserListComponent as c, AXPTenantChooserDropdownComponent as d, AXPAppChooserListComponent as e, AXMUserDeviceSessionsService as f, AXMAuthErrorHandler as g, AXMAuthModule as h, AXMDefaultAuthConfigs as i, AXMDeviceSessionsService as j, AXMDeviceSessionsServiceImpl as k, AXMSessionStatusTypes as l, AXPIdleService as m, canActivateLogin as n, configAuthModule as o };
792
- //# sourceMappingURL=acorex-modules-auth-acorex-modules-auth-9Tz_Jq63.mjs.map
943
+ //# sourceMappingURL=acorex-modules-auth-acorex-modules-auth-ilqI5CxA.mjs.map