@acorex-platform/module-auth-client 0.0.38 → 0.0.48

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 (107) hide show
  1. package/fesm2022/acorex-platform-module-auth-client-accept-invitation.component-Ct28GG3a.mjs +179 -0
  2. package/fesm2022/acorex-platform-module-auth-client-accept-invitation.component-Ct28GG3a.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-auth-client-acorex-platform-module-auth-client-CRl74b8g.mjs → acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs} +1154 -107
  4. package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs.map +1 -0
  5. package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-CjWofUGR.mjs → acorex-platform-module-auth-client-app-chooser.component-CLKLwWW8.mjs} +4 -4
  6. package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-CjWofUGR.mjs.map → acorex-platform-module-auth-client-app-chooser.component-CLKLwWW8.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-auth-client-blank.layout-BCXNPgrp.mjs → acorex-platform-module-auth-client-blank.layout-xSXPWxyw.mjs} +3 -3
  8. package/fesm2022/acorex-platform-module-auth-client-blank.layout-xSXPWxyw.mjs.map +1 -0
  9. package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BqU3jYV9.mjs → acorex-platform-module-auth-client-change-password.command-CknYaMZD.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BqU3jYV9.mjs.map → acorex-platform-module-auth-client-change-password.command-CknYaMZD.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-CzO3A7OG.mjs → acorex-platform-module-auth-client-change-photo.command-CML784Lg.mjs} +71 -21
  12. package/fesm2022/acorex-platform-module-auth-client-change-photo.command-CML784Lg.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-auth-client-command-return-url.util-mBmtJ7T2.mjs +69 -0
  14. package/fesm2022/acorex-platform-module-auth-client-command-return-url.util-mBmtJ7T2.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-auth-client-contracts.mjs +12 -7
  16. package/fesm2022/acorex-platform-module-auth-client-contracts.mjs.map +1 -1
  17. package/fesm2022/{acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs → acorex-platform-module-auth-client-edit-account-info.command-DulLUfWs.mjs} +25 -4
  18. package/fesm2022/acorex-platform-module-auth-client-edit-account-info.command-DulLUfWs.mjs.map +1 -0
  19. package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-B1bKcSVQ.mjs → acorex-platform-module-auth-client-get-user-activity.query-CV9mdOBi.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-B1bKcSVQ.mjs.map → acorex-platform-module-auth-client-get-user-activity.query-CV9mdOBi.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-DKtlBzS7.mjs → acorex-platform-module-auth-client-lock-screen.command-BH3Q6lJE.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-DKtlBzS7.mjs.map → acorex-platform-module-auth-client-lock-screen.command-BH3Q6lJE.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-module-auth-client-login.module-CXl61yOu.mjs → acorex-platform-module-auth-client-login.module-DtvnPpBH.mjs} +3 -3
  24. package/fesm2022/{acorex-platform-module-auth-client-login.module-CXl61yOu.mjs.map → acorex-platform-module-auth-client-login.module-DtvnPpBH.mjs.map} +1 -1
  25. package/fesm2022/acorex-platform-module-auth-client-manage-two-factor.command-BAg2W20W.mjs +445 -0
  26. package/fesm2022/acorex-platform-module-auth-client-manage-two-factor.command-BAg2W20W.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-module-auth-client-master.layout-D7zUm7aL.mjs → acorex-platform-module-auth-client-master.layout-B3krDskY.mjs} +5 -5
  28. package/fesm2022/{acorex-platform-module-auth-client-master.layout-D7zUm7aL.mjs.map → acorex-platform-module-auth-client-master.layout-B3krDskY.mjs.map} +1 -1
  29. package/fesm2022/{acorex-platform-module-auth-client-oauth-callback.component-fdWC08nA.mjs → acorex-platform-module-auth-client-oauth-callback.component-DWnljN18.mjs} +3 -3
  30. package/fesm2022/{acorex-platform-module-auth-client-oauth-callback.component-fdWC08nA.mjs.map → acorex-platform-module-auth-client-oauth-callback.component-DWnljN18.mjs.map} +1 -1
  31. package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-DKvyMkhl.mjs → acorex-platform-module-auth-client-open-sessions.command-CEpu6c7D.mjs} +6 -6
  32. package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-DKvyMkhl.mjs.map → acorex-platform-module-auth-client-open-sessions.command-CEpu6c7D.mjs.map} +1 -1
  33. package/fesm2022/acorex-platform-module-auth-client-open-waiting-room.command-CR-_ppYd.mjs +28 -0
  34. package/fesm2022/acorex-platform-module-auth-client-open-waiting-room.command-CR-_ppYd.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-module-auth-client-password.component-BE2JkYm_.mjs → acorex-platform-module-auth-client-password.component-Ci5Wy3rO.mjs} +5 -5
  36. package/fesm2022/{acorex-platform-module-auth-client-password.component-BE2JkYm_.mjs.map → acorex-platform-module-auth-client-password.component-Ci5Wy3rO.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-module-auth-client-password.component-BoWDVby5.mjs → acorex-platform-module-auth-client-password.component-ddh-_0k3.mjs} +39 -9
  38. package/fesm2022/acorex-platform-module-auth-client-password.component-ddh-_0k3.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-module-auth-client-platform-settings-unavailable.component-BJMtsa99.mjs → acorex-platform-module-auth-client-platform-settings-unavailable.component-LwuokJiZ.mjs} +4 -4
  40. package/fesm2022/{acorex-platform-module-auth-client-platform-settings-unavailable.component-BJMtsa99.mjs.map → acorex-platform-module-auth-client-platform-settings-unavailable.component-LwuokJiZ.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-CFaRGMKu.mjs → acorex-platform-module-auth-client-profile-activity-chart.component-D4bqeKCd.mjs} +5 -5
  42. package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-CFaRGMKu.mjs.map → acorex-platform-module-auth-client-profile-activity-chart.component-D4bqeKCd.mjs.map} +1 -1
  43. package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-Dx2-o9XL.mjs → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DWNbDzDd.mjs} +4 -4
  44. package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-Dx2-o9XL.mjs.map → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DWNbDzDd.mjs.map} +1 -1
  45. package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-1Spuexhb.mjs → acorex-platform-module-auth-client-profile-page-component.provider-DLTbTEe6.mjs} +4 -4
  46. package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-1Spuexhb.mjs.map → acorex-platform-module-auth-client-profile-page-component.provider-DLTbTEe6.mjs.map} +1 -1
  47. package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-CGs24n0j.mjs → acorex-platform-module-auth-client-profile-page.component-BhmMsO3g.mjs} +9 -7
  48. package/fesm2022/acorex-platform-module-auth-client-profile-page.component-BhmMsO3g.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-module-auth-client-pwa-install.component-BJOvT0hW.mjs +84 -0
  50. package/fesm2022/acorex-platform-module-auth-client-pwa-install.component-BJOvT0hW.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-module-auth-client-register-password.component-BlOn9609.mjs → acorex-platform-module-auth-client-register-password.component-M-ayP7oO.mjs} +7 -7
  52. package/fesm2022/{acorex-platform-module-auth-client-register-password.component-BlOn9609.mjs.map → acorex-platform-module-auth-client-register-password.component-M-ayP7oO.mjs.map} +1 -1
  53. package/fesm2022/{acorex-platform-module-auth-client-register.module-CpoYf5uG.mjs → acorex-platform-module-auth-client-register.module-Qa3ovje0.mjs} +4 -4
  54. package/fesm2022/{acorex-platform-module-auth-client-register.module-CpoYf5uG.mjs.map → acorex-platform-module-auth-client-register.module-Qa3ovje0.mjs.map} +1 -1
  55. package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-Da7ryul6.mjs → acorex-platform-module-auth-client-remove-pin-code.command-BenNCyt6.mjs} +2 -2
  56. package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-Da7ryul6.mjs.map → acorex-platform-module-auth-client-remove-pin-code.command-BenNCyt6.mjs.map} +1 -1
  57. package/fesm2022/{acorex-platform-module-auth-client-reset-password.component-D0nxlhJm.mjs → acorex-platform-module-auth-client-reset-password.component-BQfKSqpW.mjs} +6 -6
  58. package/fesm2022/{acorex-platform-module-auth-client-reset-password.component-D0nxlhJm.mjs.map → acorex-platform-module-auth-client-reset-password.component-BQfKSqpW.mjs.map} +1 -1
  59. package/fesm2022/{acorex-platform-module-auth-client-result.component-Bo1QkwMu.mjs → acorex-platform-module-auth-client-result.component-PhPaEAgh.mjs} +3 -3
  60. package/fesm2022/{acorex-platform-module-auth-client-result.component-Bo1QkwMu.mjs.map → acorex-platform-module-auth-client-result.component-PhPaEAgh.mjs.map} +1 -1
  61. package/fesm2022/acorex-platform-module-auth-client-routes-90eFjxx8.mjs +17 -0
  62. package/fesm2022/acorex-platform-module-auth-client-routes-90eFjxx8.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-module-auth-client-session-limit.component-DH58dRba.mjs → acorex-platform-module-auth-client-session-limit.component-Dc6TIn-2.mjs} +3 -3
  64. package/fesm2022/{acorex-platform-module-auth-client-session-limit.component-DH58dRba.mjs.map → acorex-platform-module-auth-client-session-limit.component-Dc6TIn-2.mjs.map} +1 -1
  65. package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-cDCrwNRV.mjs → acorex-platform-module-auth-client-session-lock-overlay.component-ChigSAI-.mjs} +7 -7
  66. package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-cDCrwNRV.mjs.map → acorex-platform-module-auth-client-session-lock-overlay.component-ChigSAI-.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-FjM1kzUj.mjs → acorex-platform-module-auth-client-set-pin-code.command-CefSbJz8.mjs} +3 -3
  68. package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-FjM1kzUj.mjs.map → acorex-platform-module-auth-client-set-pin-code.command-CefSbJz8.mjs.map} +1 -1
  69. package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-BgEgdFxQ.mjs → acorex-platform-module-auth-client-set-pin-code.component-DqFW_4rM.mjs} +6 -6
  70. package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-BgEgdFxQ.mjs.map → acorex-platform-module-auth-client-set-pin-code.component-DqFW_4rM.mjs.map} +1 -1
  71. package/fesm2022/{acorex-platform-module-auth-client-settings.provider-DGiK-MmW.mjs → acorex-platform-module-auth-client-settings.provider-DsKsZrOC.mjs} +18 -13
  72. package/fesm2022/acorex-platform-module-auth-client-settings.provider-DsKsZrOC.mjs.map +1 -0
  73. package/fesm2022/{acorex-platform-module-auth-client-signout-command-B7n_Fn4P.mjs → acorex-platform-module-auth-client-signout-command-D4Qgv7q2.mjs} +7 -1
  74. package/fesm2022/acorex-platform-module-auth-client-signout-command-D4Qgv7q2.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-B8CNqHx5.mjs → acorex-platform-module-auth-client-tenant-chooser.component-DCdRCf1m.mjs} +5 -5
  76. package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-B8CNqHx5.mjs.map → acorex-platform-module-auth-client-tenant-chooser.component-DCdRCf1m.mjs.map} +1 -1
  77. package/fesm2022/acorex-platform-module-auth-client-two-factor-challenge.storage-mi0UD7Sc.mjs +48 -0
  78. package/fesm2022/acorex-platform-module-auth-client-two-factor-challenge.storage-mi0UD7Sc.mjs.map +1 -0
  79. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-CtSv3MQu.mjs +200 -0
  80. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-CtSv3MQu.mjs.map +1 -0
  81. package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-CI8KC5M_.mjs → acorex-platform-module-auth-client-two-factor.module-B7tETPbq.mjs} +10 -5
  82. package/fesm2022/acorex-platform-module-auth-client-two-factor.module-B7tETPbq.mjs.map +1 -0
  83. package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-Cqb27L-l.mjs → acorex-platform-module-auth-client-view-login-history.command-CKPbyVWd.mjs} +2 -2
  84. package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-Cqb27L-l.mjs.map → acorex-platform-module-auth-client-view-login-history.command-CKPbyVWd.mjs.map} +1 -1
  85. package/fesm2022/acorex-platform-module-auth-client-waiting-room.component-IAVIt1fY.mjs +165 -0
  86. package/fesm2022/acorex-platform-module-auth-client-waiting-room.component-IAVIt1fY.mjs.map +1 -0
  87. package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding-page.component-C2WYgv4l.mjs +813 -0
  88. package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding-page.component-C2WYgv4l.mjs.map +1 -0
  89. package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs +59 -0
  90. package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs.map +1 -0
  91. package/fesm2022/acorex-platform-module-auth-client.mjs +1 -1
  92. package/package.json +2 -2
  93. package/types/acorex-platform-module-auth-client-contracts.d.ts +13 -3
  94. package/types/acorex-platform-module-auth-client.d.ts +60 -2
  95. package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-CRl74b8g.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-module-auth-client-blank.layout-BCXNPgrp.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-module-auth-client-change-photo.command-CzO3A7OG.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-module-auth-client-password.component-BoWDVby5.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-module-auth-client-profile-page.component-CGs24n0j.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-module-auth-client-routes-B6iJHJ60.mjs +0 -13
  102. package/fesm2022/acorex-platform-module-auth-client-routes-B6iJHJ60.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-module-auth-client-settings.provider-DGiK-MmW.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-module-auth-client-signout-command-B7n_Fn4P.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-BrqfaY8i.mjs +0 -40
  106. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-BrqfaY8i.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-module-auth-client-two-factor.module-CI8KC5M_.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/profile-page.types.ts","../../../../libs/modules/auth/client/src/lib/shared/utils/avatar-storage.util.ts","../../../../libs/modules/auth/client/src/lib/shared/services/user-avatar-sync.service.ts","../../../../libs/modules/auth/client/src/lib/shared/datasources/user-activity/user-activity.types.ts","../../../../libs/modules/auth/client/src/lib/shared/datasources/user-activity/user-activity.utils.ts","../../../../libs/modules/auth/client/src/lib/shared/datasources/user-activity/user-activity-filter.utils.ts","../../../../libs/modules/auth/client/src/lib/error-handler.ts","../../../../libs/modules/auth/client/src/lib/pages/login/login.guard.ts","../../../../libs/modules/auth/client/src/lib/auth.config.ts","../../../../libs/modules/auth/client/src/lib/auth-platform-settings.service.ts","../../../../libs/modules/auth/client/src/lib/shared/utils/password-complexity.utils.ts","../../../../libs/modules/auth/client/src/lib/shared/services/password-complexity.service.ts","../../../../libs/modules/auth/client/src/lib/validations/password-complexity-validation-rule.class.ts","../../../../libs/modules/auth/client/src/lib/validations/auth-validation-rules.module.ts","../../../../libs/modules/auth/client/src/lib/auth.routes.ts","../../../../libs/modules/auth/client/src/lib/pages/account/app-chooser/app-chooser-list.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/app-chooser/app-chooser-list.component.html","../../../../libs/modules/auth/client/src/lib/pages/account/app-chooser/app-chooser-slot.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/app-chooser/app-chooser-slot.component.html","../../../../libs/modules/auth/client/src/lib/pages/account/session-limit/session-limit.navigation.ts","../../../../libs/modules/auth/client/src/lib/pages/account/tenant-chooser/tenant-chooser-list.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/tenant-chooser/tenant-chooser-list.component.html","../../../../libs/modules/auth/client/src/lib/pages/account/tenant-chooser/tenant-chooser-dropdown.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/tenant-chooser/tenant-chooser-dropdown.component.html","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot-menu.types.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot.component.html","../../../../libs/modules/auth/client/src/lib/pages/account/user-profile-card/user-profile-card.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/user-profile-card/user-profile-card.component.html","../../../../libs/modules/auth/client/src/lib/pages/install/pwa-install.service.ts","../../../../libs/modules/auth/client/src/lib/pages/install/pwa-install-prompt.component.ts","../../../../libs/modules/auth/client/src/lib/pages/install/pwa-install-prompt.component.html","../../../../libs/modules/auth/client/src/lib/pages/account/user-sessions/user-sessions.service.ts","../../../../libs/modules/auth/client/src/lib/pages/account/tenant-chooser/tenant-chooser.guard.ts","../../../../libs/modules/auth/client/src/lib/pages/account/app-chooser/app-chooser.guard.ts","../../../../libs/modules/auth/client/src/lib/onboarding/onboarding.types.ts","../../../../libs/modules/auth/client/src/lib/onboarding/onboarding-progress.service.ts","../../../../libs/modules/auth/client/src/lib/onboarding/onboarding-plan.service.ts","../../../../libs/modules/auth/client/src/lib/onboarding/welcome-onboarding-flow.service.ts","../../../../libs/modules/auth/client/src/lib/pages/account/welcome-onboarding/welcome-onboarding.guard.ts","../../../../libs/modules/auth/client/src/lib/pages/account/account.module.ts","../../../../libs/modules/auth/client/src/lib/shared/services/idle-lock.service.ts","../../../../libs/modules/auth/client/src/lib/shared/services/logo-entity-sync.service.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/profile-page.component-keys.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/core-profile-sections.hook.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/security-pin-section.hook.ts","../../../../libs/modules/auth/client/src/lib/shared/services/password-change-tracking.service.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/profile-password-insight.util.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/profile-two-factor-insight.util.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/profile-page-security-insights.service.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile-page/security-sections-insights.hook.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot-logout-menu.hook.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot-my-profile-menu.hook.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot-lock-menu.hook.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot-presence-menu.hook.ts","../../../../libs/modules/auth/client/src/lib/pages/account/profile/profile-slot-install-app-menu.hook.ts","../../../../libs/modules/auth/client/src/lib/onboarding/hooks/welcome-intro.hook.ts","../../../../libs/modules/auth/client/src/lib/onboarding/hooks/profile-basics.hook.ts","../../../../libs/modules/auth/client/src/lib/onboarding/hooks/welcome-navigation-typography.hook.ts","../../../../libs/modules/auth/client/src/lib/onboarding/welcome-onboarding-trigger.service.ts","../../../../libs/modules/auth/client/src/lib/middlewares/user-avatar.middleware.ts","../../../../libs/modules/auth/client/src/lib/realtime/auth-security-alert-realtime.providers.ts","../../../../libs/modules/auth/client/src/lib/auth.module.ts","../../../../libs/modules/auth/client/src/lib/pages/login/login-external-providers.slot.ts","../../../../libs/modules/auth/client/src/lib/pages/login/login-external-providers.component.ts","../../../../libs/modules/auth/client/src/lib/pages/login/login-external-providers.component.html","../../../../libs/modules/auth/client/src/lib/shared/services/login-history.service.ts","../../../../libs/modules/auth/client/src/acorex-platform-module-auth-client.ts"],"sourcesContent":["import { AXPActionMenuItem, AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Hook keys ----\n\nexport const PROFILE_PAGE_GROUPS_HOOK = 'profile-page.groups';\nexport const PROFILE_PAGE_SECTIONS_HOOK = 'profile-page.sections';\nexport const PROFILE_PAGE_HEADER_META_HOOK = 'profile-page.header-meta';\n\n//#endregion\n\n//#region ---- Hook payloads ----\n\nexport type AXPUserProfileGroupsPayload = {\n groups: AXPUserProfileGroup[];\n};\n\nexport type AXPUserProfileSectionsPayload = {\n sections: AXPUserProfileSection[];\n /** When set, hooks should only contribute or enrich this tab group. */\n groupId?: string;\n};\n\nexport type AXPUserProfileHeaderMetaPayload = {\n items: AXPUserProfileHeaderMetaItem[];\n};\n\n//#endregion\n\n//#region ---- Content modes ----\n\n/** Renders section cards in a configurable grid (default). */\nexport interface AXPUserProfileGroupSectionsContent {\n mode: 'sections';\n}\n\n/** Replaces the entire tab body with a registered page component. */\nexport interface AXPUserProfileGroupComponentContent {\n mode: 'component';\n componentKey: string;\n pageConfig?: Record<string, unknown>;\n}\n\nexport type AXPUserProfileGroupContent =\n | AXPUserProfileGroupSectionsContent\n | AXPUserProfileGroupComponentContent;\n\n/** Standard card with title, description, and action buttons. */\nexport interface AXPUserProfileSectionCardContent {\n mode: 'card';\n actions: AXPUserProfileSectionAction[];\n}\n\n/** Replaces the section slot with a registered page component. */\nexport interface AXPUserProfileSectionComponentContent {\n mode: 'component';\n componentKey: string;\n pageConfig?: Record<string, unknown>;\n}\n\nexport type AXPUserProfileSectionContent =\n | AXPUserProfileSectionCardContent\n | AXPUserProfileSectionComponentContent;\n\n//#endregion\n\n//#region ---- Layout ----\n\n/** Grid placement for a section within the 12-column profile sections grid. */\nexport interface AXPUserProfileSectionLayout {\n /** 1-based column start on md+ breakpoints. */\n col?: number;\n /** Number of columns to span on md+ (default 6). */\n colSpan?: number;\n /** Number of grid rows to span (default 1). */\n rowSpan?: number;\n}\n\n//#endregion\n\n//#region ---- Definitions ----\n\n/** Action on a profile section card. */\nexport type AXPUserProfileSectionAction = AXPActionMenuItem & {\n /** Primary action when the section card is clicked (required for multi-action sections). */\n default?: boolean;\n};\n\n/** Top tab group on the profile hub. */\nexport interface AXPUserProfileGroup {\n id: string;\n /** URL segment under `/:app/profile/:route`; defaults to `id`. */\n route?: string;\n title: AXPMultiLanguageString;\n icon?: string;\n priority?: number;\n /** When omitted, the tab renders its section grid. */\n content?: AXPUserProfileGroupContent;\n}\n\n/** Profile hub section contributed by modules. */\nexport interface AXPUserProfileSection {\n id: string;\n groupId: string;\n title?: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n icon?: string;\n priority?: number;\n feature?: string;\n layout?: AXPUserProfileSectionLayout;\n content?: AXPUserProfileSectionContent;\n /** Used when `content` is omitted (card mode). */\n actions?: AXPUserProfileSectionAction[];\n /** Optional contextual block shown instead of the section description. */\n insights?: AXPUserProfileSectionInsight[];\n}\n\n/** Contextual detail row on a profile section card. */\nexport interface AXPUserProfileSectionInsight {\n id: string;\n icon?: string;\n /** Plain line shown when no date is set. */\n text?: string;\n /** Field label shown as tooltip on the insight badge. */\n title?: AXPMultiLanguageString;\n /** Date value formatted in the template when valid. */\n date?: Date;\n /** Optional prefix shown before a formatted relative date. */\n datePrefix?: AXPMultiLanguageString;\n}\n\n/** Extra row in the profile page header (label + value). */\nexport interface AXPUserProfileHeaderMetaItem {\n id: string;\n label: AXPMultiLanguageString;\n value: AXPMultiLanguageString;\n icon?: string;\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\n/** Resolves section content; top-level `actions` imply card mode. */\nexport function resolveUserProfileSectionContent(\n section: AXPUserProfileSection,\n): AXPUserProfileSectionContent {\n if (section.content) {\n return section.content;\n }\n\n return { mode: 'card', actions: section.actions ?? [] };\n}\n\n/** Whether the group renders a full-tab component instead of sections. */\nexport function isUserProfileGroupComponent(group: AXPUserProfileGroup): boolean {\n return group.content?.mode === 'component';\n}\n\n/** True when section hooks should run for `groupId` (all groups when the payload omits it). */\nexport function isUserProfileSectionsGroupRequested(\n payload: AXPUserProfileSectionsPayload,\n groupId: string,\n): boolean {\n return payload.groupId == null || payload.groupId === groupId;\n}\n\n/** Visible actions on a section card. */\nexport function visibleUserProfileSectionActions(\n actions: AXPUserProfileSectionAction[],\n): AXPUserProfileSectionAction[] {\n return actions.filter((action) => action.visible !== false);\n}\n\n/** Default card action: explicit `default`, otherwise the first visible action. */\nexport function resolveDefaultUserProfileSectionAction(\n actions: AXPUserProfileSectionAction[],\n): AXPUserProfileSectionAction | undefined {\n const visibleActions = visibleUserProfileSectionActions(actions);\n if (!visibleActions.length) {\n return undefined;\n }\n\n return visibleActions.find((action) => action.default) ?? visibleActions[0];\n}\n\n//#endregion\n","//#region ---- Avatar storage constants ----\n\nexport const AXP_PROFILE_PHOTO_USER_REF_TYPE = 'SecurityManagement.User';\nexport const AXP_PROFILE_PHOTO_CATEGORY = 'profile-photo';\n\nconst FILE_STORAGE_ID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n//#endregion\n\n//#region ---- Avatar storage helpers ----\n\nexport function isFileStorageId(value: string | null | undefined): boolean {\n if (!value) {\n return false;\n }\n return FILE_STORAGE_ID_PATTERN.test(value.trim());\n}\n\nexport function isExternalAvatarUrl(value: string | null | undefined): boolean {\n if (!value) {\n return false;\n }\n return /^https?:\\/\\//i.test(value.trim());\n}\n\nexport function isDataImageUrl(value: string | null | undefined): boolean {\n if (!value) {\n return false;\n }\n return value.trim().startsWith('data:image/');\n}\n\nexport function normalizeAvatarRef(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed || trimmed === 'null') {\n return null;\n }\n return trimmed;\n}\n\nexport function dataUrlToBlob(dataUrl: string): Blob {\n const [header, base64] = dataUrl.split(',');\n const mimeMatch = /data:([^;]+)/.exec(header);\n const mimeType = mimeMatch?.[1] ?? 'image/png';\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: mimeType });\n}\n\n//#endregion\n","import { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPUserAvatarService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPFileStorageStatus } from '@acorex-platform/framework-shared/core';\nimport { RootConfig as SecurityManagementRootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXMSecurityManagementUsersEntityModel } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport {\n AXP_PROFILE_PHOTO_CATEGORY,\n AXP_PROFILE_PHOTO_USER_REF_TYPE,\n dataUrlToBlob,\n isDataImageUrl,\n isExternalAvatarUrl,\n isFileStorageId,\n normalizeAvatarRef,\n} from '../utils/avatar-storage.util';\n\n//#region ---- User avatar sync service (client) ----\n\n/**\n * Client-side profile photo operations for self-service flows.\n * Canonical store is SecurityManagement.User.avatar; Person.image is mirrored\n * on the server by HCM avatar sync middleware.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPUserAvatarSyncService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly userAvatarService = inject(AXPUserAvatarService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async getCurrentAvatarRef(userId: string): Promise<string | null> {\n const sessionUser = this.sessionService.user;\n if (sessionUser?.id === userId && sessionUser.avatar !== undefined) {\n return normalizeAvatarRef(sessionUser.avatar);\n }\n\n const user = await this.userData().byKey(userId);\n return normalizeAvatarRef(user?.avatar);\n }\n\n async getCurrentAvatarBlob(userId: string): Promise<Blob | null> {\n const ref = await this.getCurrentAvatarRef(userId);\n if (!ref) {\n return null;\n }\n if (isDataImageUrl(ref)) {\n return dataUrlToBlob(ref);\n }\n if (isExternalAvatarUrl(ref)) {\n const response = await fetch(ref);\n return response.blob();\n }\n if (isFileStorageId(ref)) {\n try {\n return await this.fileStorage.download(ref);\n } catch {\n return null;\n }\n }\n return null;\n }\n\n async uploadAndSetAvatar(userId: string, file: File): Promise<string> {\n // Save as Temporary; HCM UserAvatarSyncMiddleware commits on attach and\n // removes the previous avatar file server-side (no client File:Remove).\n const info = await this.fileStorage.save({\n file,\n name: file.name || 'profile-photo.png',\n refId: userId,\n refType: AXP_PROFILE_PHOTO_USER_REF_TYPE,\n category: AXP_PROFILE_PHOTO_CATEGORY,\n status: AXPFileStorageStatus.Temporary,\n });\n\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n\n await this.userData().update(userId, { avatar: fileId });\n await this.notifyAvatarChanged(userId, fileId);\n\n return fileId;\n }\n\n async removeAvatar(userId: string): Promise<void> {\n // Previous file cleanup runs in HCM avatar middleware when avatar is cleared.\n await this.userData().update(userId, { avatar: null });\n await this.notifyAvatarChanged(userId, null);\n }\n\n /** Keeps session, avatar cache, and shell avatars in sync after any avatar change. */\n async notifyAvatarChanged(userId: string, avatar: string | null): Promise<void> {\n await this.refreshClientDisplay(userId, avatar);\n }\n\n //#endregion\n\n //#region ---- Private helpers ----\n\n private async refreshClientDisplay(userId: string, avatar: string | null): Promise<void> {\n try {\n const isCurrentUser = this.sessionService.user?.id === userId;\n const session = isCurrentUser ? this.sessionService.getSessionData() : null;\n\n if (avatar === null && session?.user?.avatar) {\n this.userAvatarService.invalidateDisplayUrl(session.user.avatar);\n }\n\n if (isCurrentUser && session?.user) {\n this.sessionService.setSession({\n ...session,\n user: {\n ...session.user,\n avatar,\n },\n });\n }\n\n const sessionUser = isCurrentUser ? this.sessionService.user : null;\n const displayName = sessionUser?.title || sessionUser?.name || '';\n const parts = displayName.trim().split(/\\s+/).filter(Boolean);\n\n const patch: {\n id: string;\n status: 'offline';\n username: string;\n firstName: string;\n lastName: string;\n avatarUrl?: string;\n } = {\n id: userId,\n status: 'offline',\n username: sessionUser?.name || '',\n firstName: parts[0] ?? '',\n lastName: parts.slice(1).join(' '),\n };\n if (avatar) {\n patch.avatarUrl = avatar;\n }\n\n this.userAvatarService.patchCachedUser(userId, patch);\n } catch (error) {\n console.warn('Avatar display refresh failed after profile photo change', error);\n }\n }\n\n private userData() {\n return this.entityService\n .withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.users.name)\n .data<string, AXMSecurityManagementUsersEntityModel>();\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- User activity data source types ----\n\nexport type AXPUserActivityLevel = 0 | 1 | 2 | 3 | 4;\n\n/** How the profile heatmap should be drawn for the chosen window. */\nexport type AXPUserActivityHeatmapLayout = 'hours' | 'days' | 'calendar';\n\nexport interface AXPUserActivityDay {\n date: string;\n count: number;\n level: AXPUserActivityLevel;\n}\n\nexport interface AXPUserActivityHour {\n hour: number;\n count: number;\n level: AXPUserActivityLevel;\n}\n\nexport interface AXPUserActivityWeek {\n days: AXPUserActivityDay[];\n}\n\nexport interface AXPUserActivityStats {\n longestStreak: number;\n avgPerDay: number;\n avgPerWeek: number;\n total: number;\n}\n\n/** Single payload row returned by Auth:GetUserActivity. */\nexport interface AXPUserActivityDataSourceItem {\n id: string;\n userId: string;\n startDate: string;\n endDate: string;\n layout: AXPUserActivityHeatmapLayout;\n weeks: AXPUserActivityWeek[];\n hours: AXPUserActivityHour[];\n stats: AXPUserActivityStats;\n}\n\nexport interface AXPUserActivityLoadParams {\n userId: string;\n startDate: Date;\n endDate: Date;\n}\n\n//#endregion\n","//#region ---- User activity helpers ----\n\nimport { AXMSecurityManagementDeviceSessionsEntityModel } from '@acorex-platform/module-security-management-client/contracts';\nimport {\n AXPUserActivityDataSourceItem,\n AXPUserActivityDay,\n AXPUserActivityHeatmapLayout,\n AXPUserActivityHour,\n AXPUserActivityLevel,\n AXPUserActivityLoadParams,\n AXPUserActivityStats,\n AXPUserActivityWeek,\n} from './user-activity.types';\n\n//#region ---- Constants ----\n\nexport const AUTH_USER_ACTIVITY_DEFAULT_WEEKS = 53;\n/** Ignore an older sign-in cluster when the gap to the next newer day exceeds this. */\nexport const AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS = 14;\n/** Week / month / quarter / year heatmap windows, smallest first. */\nexport const AUTH_USER_ACTIVITY_WEEK_PRESETS = [1, 2, 5, 13, 53] as const;\nconst LEVEL_THRESHOLDS = [0, 3, 8, 15, 30];\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\n//#endregion\n\n//#region ---- Date range ----\n\nfunction startOfLocalDay(date: Date): Date {\n const value = new Date(date);\n value.setHours(0, 0, 0, 0);\n return value;\n}\n\nfunction calendarDaysBetween(newer: Date, older: Date): number {\n return Math.round((startOfLocalDay(newer).getTime() - startOfLocalDay(older).getTime()) / MS_PER_DAY);\n}\n\nexport function resolveDefaultUserActivityDateRange(\n weeksToShow = AUTH_USER_ACTIVITY_DEFAULT_WEEKS,\n referenceDate = new Date(),\n): { startDate: Date; endDate: Date } {\n const today = startOfLocalDay(referenceDate);\n\n const endSunday = new Date(today);\n endSunday.setDate(today.getDate() + (6 - today.getDay()));\n\n const startDate = new Date(endSunday);\n startDate.setDate(endSunday.getDate() - weeksToShow * 7 + 1);\n startDate.setHours(0, 0, 0, 0);\n\n return { startDate, endDate: endSunday };\n}\n\nfunction collectUserSignInDays(\n sessions: ReadonlyArray<AXMSecurityManagementDeviceSessionsEntityModel>,\n userId: string,\n lookbackStart: Date,\n lookbackEnd: Date,\n): Date[] {\n const days = new Map<number, Date>();\n const rangeStart = startOfLocalDay(lookbackStart);\n const rangeEnd = startOfLocalDay(lookbackEnd);\n\n for (const session of sessions) {\n if (session.userId !== userId || session.lastLoginDate == null) {\n continue;\n }\n\n const day = startOfLocalDay(new Date(session.lastLoginDate));\n if (Number.isNaN(day.getTime()) || day < rangeStart || day > rangeEnd) {\n continue;\n }\n\n days.set(day.getTime(), day);\n }\n\n return [...days.values()].sort((left, right) => right.getTime() - left.getTime());\n}\n\nfunction resolveRecentSignInCluster(activityDaysNewestFirst: Date[], gapDays: number): Date[] {\n if (activityDaysNewestFirst.length === 0) {\n return [];\n }\n\n const cluster = [activityDaysNewestFirst[0]];\n for (let index = 1; index < activityDaysNewestFirst.length; index += 1) {\n const newer = activityDaysNewestFirst[index - 1];\n const older = activityDaysNewestFirst[index];\n if (calendarDaysBetween(newer, older) > gapDays) {\n break;\n }\n cluster.push(older);\n }\n\n return cluster;\n}\n\nfunction pickWeeksToCoverCluster(oldestDay: Date, referenceDate: Date): number {\n const oldest = startOfLocalDay(oldestDay);\n for (const weeks of AUTH_USER_ACTIVITY_WEEK_PRESETS) {\n const { startDate } = resolveDefaultUserActivityDateRange(weeks, referenceDate);\n if (startDate <= oldest) {\n return weeks;\n }\n }\n return AUTH_USER_ACTIVITY_DEFAULT_WEEKS;\n}\n\n/**\n * Auto heatmap window from recent sign-in days.\n * Walks backward from the latest sign-in and drops an older cluster when the gap\n * exceeds {@link AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS}. Empty users get one week.\n */\nexport function resolveSmartUserActivityDateRange(\n sessions: ReadonlyArray<AXMSecurityManagementDeviceSessionsEntityModel>,\n userId: string,\n referenceDate = new Date(),\n): { startDate: Date; endDate: Date } {\n const lookback = resolveDefaultUserActivityDateRange(AUTH_USER_ACTIVITY_DEFAULT_WEEKS, referenceDate);\n const activityDays = collectUserSignInDays(sessions, userId, lookback.startDate, lookback.endDate);\n const cluster = resolveRecentSignInCluster(activityDays, AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS);\n\n if (cluster.length === 0) {\n return resolveDefaultUserActivityDateRange(1, referenceDate);\n }\n\n if (cluster.length === 1) {\n return resolveDayDateRange(cluster[0]);\n }\n\n const oldest = cluster[cluster.length - 1];\n return resolveDefaultUserActivityDateRange(pickWeeksToCoverCluster(oldest, referenceDate), referenceDate);\n}\n\nexport function resolveDayDateRange(day: Date): { startDate: Date; endDate: Date } {\n const startDate = startOfLocalDay(day);\n return { startDate, endDate: new Date(startDate) };\n}\n\nexport function resolveUserActivityHeatmapLayout(\n startDate: Date,\n endDate: Date,\n): AXPUserActivityHeatmapLayout {\n const { rangeStart, rangeEnd } = normalizeDateRange(startDate, endDate);\n const spanDays = calendarDaysBetween(rangeEnd, rangeStart) + 1;\n if (spanDays <= 1) {\n return 'hours';\n }\n if (spanDays <= 35) {\n return 'days';\n }\n return 'calendar';\n}\n\n//#endregion\n\n//#region ---- Session aggregation ----\n\nfunction normalizeDateRange(startDate: Date, endDate: Date): { rangeStart: Date; rangeEnd: Date } {\n const start = new Date(startDate);\n const end = new Date(endDate);\n start.setHours(0, 0, 0, 0);\n end.setHours(0, 0, 0, 0);\n return start <= end ? { rangeStart: start, rangeEnd: end } : { rangeStart: end, rangeEnd: start };\n}\n\nfunction toIsoDate(date: Date): string {\n return date.toISOString().slice(0, 10);\n}\n\nfunction toDayKey(value: Date | string): string | undefined {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n return undefined;\n }\n date.setHours(0, 0, 0, 0);\n return toIsoDate(date);\n}\n\n/** Counts sign-in events per calendar day from device session rows. */\nexport function aggregateDailySessionCounts(\n sessions: ReadonlyArray<AXMSecurityManagementDeviceSessionsEntityModel>,\n params: AXPUserActivityLoadParams,\n): Map<string, number> {\n const { rangeStart, rangeEnd } = normalizeDateRange(params.startDate, params.endDate);\n const counts = new Map<string, number>();\n\n for (const session of sessions) {\n if (session.userId !== params.userId || session.lastLoginDate == null) {\n continue;\n }\n\n const dayKey = toDayKey(session.lastLoginDate);\n if (!dayKey) {\n continue;\n }\n\n const day = new Date(dayKey);\n if (day < rangeStart || day > rangeEnd) {\n continue;\n }\n\n counts.set(dayKey, (counts.get(dayKey) ?? 0) + 1);\n }\n\n return counts;\n}\n\n/** Counts sign-in events per local hour from device session rows. */\nexport function aggregateHourlySessionCounts(\n sessions: ReadonlyArray<AXMSecurityManagementDeviceSessionsEntityModel>,\n params: AXPUserActivityLoadParams,\n): number[] {\n const { rangeStart, rangeEnd } = normalizeDateRange(params.startDate, params.endDate);\n const counts = Array.from({ length: 24 }, () => 0);\n\n for (const session of sessions) {\n if (session.userId !== params.userId || session.lastLoginDate == null) {\n continue;\n }\n\n const login = new Date(session.lastLoginDate);\n if (Number.isNaN(login.getTime())) {\n continue;\n }\n\n const day = startOfLocalDay(login);\n if (day < rangeStart || day > rangeEnd) {\n continue;\n }\n\n counts[login.getHours()] += 1;\n }\n\n return counts;\n}\n\nexport function buildUserActivityHours(hourlyCounts: readonly number[]): AXPUserActivityHour[] {\n return hourlyCounts.map((count, hour) => ({\n hour,\n count,\n level: countToActivityLevel(count),\n }));\n}\n\n//#endregion\n\n//#region ---- Week grid ----\n\nexport function countToActivityLevel(count: number): AXPUserActivityLevel {\n if (count <= LEVEL_THRESHOLDS[1]) {\n return count === 0 ? 0 : 1;\n }\n if (count <= LEVEL_THRESHOLDS[2]) {\n return 2;\n }\n if (count <= LEVEL_THRESHOLDS[3]) {\n return 3;\n }\n return 4;\n}\n\nfunction startOfWeekSunday(date: Date): Date {\n const value = new Date(date);\n value.setHours(0, 0, 0, 0);\n value.setDate(value.getDate() - value.getDay());\n return value;\n}\n\nexport function buildUserActivityWeeks(\n params: AXPUserActivityLoadParams,\n dailyCounts: ReadonlyMap<string, number>,\n): AXPUserActivityWeek[] {\n const { rangeStart, rangeEnd } = normalizeDateRange(params.startDate, params.endDate);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const gridStart = startOfWeekSunday(rangeStart);\n const gridEnd = startOfWeekSunday(rangeEnd);\n gridEnd.setDate(gridEnd.getDate() + 6);\n\n const weeks: AXPUserActivityWeek[] = [];\n const cursor = new Date(gridStart);\n\n while (cursor <= gridEnd) {\n const days: AXPUserActivityDay[] = [];\n\n for (let dayIndex = 0; dayIndex < 7; dayIndex += 1) {\n const date = new Date(cursor);\n const inRange = date >= rangeStart && date <= rangeEnd;\n const dayKey = toIsoDate(date);\n const count = inRange && date <= today ? (dailyCounts.get(dayKey) ?? 0) : 0;\n\n days.push({\n date: dayKey,\n count,\n level: countToActivityLevel(count),\n });\n cursor.setDate(cursor.getDate() + 1);\n }\n\n weeks.push({ days });\n }\n\n return weeks;\n}\n\nexport function computeUserActivityStats(weeks: AXPUserActivityWeek[]): AXPUserActivityStats {\n const days = weeks.flatMap((week) => week.days).filter((day) => day.count > 0);\n const total = days.reduce((sum, day) => sum + day.count, 0);\n const activeDayCount = days.length || 1;\n\n let longestStreak = 0;\n let currentStreak = 0;\n\n for (const week of weeks) {\n for (const day of week.days) {\n if (day.count > 0) {\n currentStreak += 1;\n longestStreak = Math.max(longestStreak, currentStreak);\n } else {\n currentStreak = 0;\n }\n }\n }\n\n const weekCount = weeks.length || 1;\n\n return {\n longestStreak,\n avgPerDay: Math.round(total / activeDayCount),\n avgPerWeek: Math.round(total / weekCount),\n total,\n };\n}\n\nexport function buildUserActivityDataSourceItem(\n params: AXPUserActivityLoadParams,\n sessions: ReadonlyArray<AXMSecurityManagementDeviceSessionsEntityModel>,\n): AXPUserActivityDataSourceItem {\n const dailyCounts = aggregateDailySessionCounts(sessions, params);\n const weeks = buildUserActivityWeeks(params, dailyCounts);\n const layout = resolveUserActivityHeatmapLayout(params.startDate, params.endDate);\n const hours =\n layout === 'hours' ? buildUserActivityHours(aggregateHourlySessionCounts(sessions, params)) : [];\n\n return {\n id: `${params.userId}:${toIsoDate(params.startDate)}:${toIsoDate(params.endDate)}`,\n userId: params.userId,\n startDate: toIsoDate(params.startDate),\n endDate: toIsoDate(params.endDate),\n layout,\n weeks,\n hours,\n stats: computeUserActivityStats(weeks),\n };\n}\n\nexport function formatCompactActivityCount(value: number): string {\n if (value >= 1_000_000) {\n return `${(value / 1_000_000).toFixed(2)}M`;\n }\n if (value >= 1_000) {\n return `${Math.round(value / 1000)}K`;\n }\n return String(value);\n}\n\n//#endregion\n","//#region ---- User activity filter helpers ----\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nfunction isResolvedFilterScalar(value: unknown): value is string | number | Date {\n if (value == null) {\n return false;\n }\n if (value instanceof Date) {\n return !Number.isNaN(value.getTime());\n }\n const text = String(value).trim();\n return text.length > 0 && !text.includes('{{');\n}\n\nfunction parseFilterDate(value: unknown): Date | undefined {\n if (!isResolvedFilterScalar(value)) {\n return undefined;\n }\n if (value instanceof Date) {\n return value;\n }\n const parsed = new Date(String(value));\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n}\n\nfunction extractFilterFieldValue(\n filter: AXDataSourceFilterOption | undefined,\n field: string,\n operators: string[],\n): unknown {\n if (!filter) {\n return undefined;\n }\n\n if (filter.filters?.length) {\n for (const child of filter.filters) {\n const value = extractFilterFieldValue(child, field, operators);\n if (value !== undefined) {\n return value;\n }\n }\n return undefined;\n }\n\n const operator = String(filter.operator?.type ?? '');\n if (filter.field === field && operators.includes(operator)) {\n return isResolvedFilterScalar(filter.value) ? filter.value : undefined;\n }\n\n return undefined;\n}\n\nexport function extractUserActivityUserId(filter: AXDataSourceFilterOption | undefined): string | undefined {\n const value = extractFilterFieldValue(filter, 'userId', ['equal', 'eq']);\n if (value == null) {\n return undefined;\n }\n const text = String(value).trim();\n return text.length > 0 ? text : undefined;\n}\n\nexport function extractUserActivityStartDate(filter: AXDataSourceFilterOption | undefined): Date | undefined {\n const gte = parseFilterDate(extractFilterFieldValue(filter, 'startDate', ['gte', 'greaterThanOrEqual', 'equal', 'eq']));\n if (gte) {\n return gte;\n }\n return parseFilterDate(extractFilterFieldValue(filter, 'dateFrom', ['gte', 'greaterThanOrEqual', 'equal', 'eq']));\n}\n\nexport function extractUserActivityEndDate(filter: AXDataSourceFilterOption | undefined): Date | undefined {\n const lte = parseFilterDate(extractFilterFieldValue(filter, 'endDate', ['lte', 'lessThanOrEqual', 'equal', 'eq']));\n if (lte) {\n return lte;\n }\n return parseFilterDate(extractFilterFieldValue(filter, 'dateTo', ['lte', 'lessThanOrEqual', 'equal', 'eq']));\n}\n\n//#endregion\n","import { AXPUnauthenticatedError, AXPUnauthorizedError } from '@acorex-platform/framework-client/auth';\nimport { AXPErrorHandler } from '@acorex-platform/framework-client/common';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, NgZone, inject, isDevMode } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class AXMAuthErrorHandler implements AXPErrorHandler {\n private router = inject(Router);\n private layoutService = inject(AXPLayoutThemeService);\n\n handleError(error: Error, next: (error: any) => void): void {\n if (error instanceof HttpErrorResponse) {\n // if (error.status == 401) {\n // this.router.navigate(['/auth/login']);\n // }\n // else if (error.status == 404) {\n // this.router.navigate(['/404']);\n // }\n } else if (error instanceof AXPUnauthorizedError) {\n const redirectUrl = error.data?.redirectUrl;\n console.error(error.message);\n this.router.navigate(['/401'], { queryParams: redirectUrl ? { redirectUrl: redirectUrl } : null });\n } else if (error instanceof AXPUnauthenticatedError) {\n console.error(error.message);\n const redirectUrl = error.data?.redirectUrl;\n this.router.navigate(['/auth/login'], { queryParams: redirectUrl ? { redirectUrl: redirectUrl } : null });\n } else {\n if (isDevMode()) {\n next(error); // Pass the error to the next handler\n } else {\n next(error); // maybe we need a error page\n }\n }\n this.layoutService.setNavigationLoading(false);\n }\n}\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPHomePageService, AXPPlatformSettingsLoadState } from '@acorex-platform/framework-client/common';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\n\n//#region ----- Login page guard -----\n\n/**\n * Login page guard.\n * If the user already has a cookie session but has not finished tenant/app binding,\n * send them to the chooser — never destroy the session.\n * If the session is fully bound, send them home (do not show login again).\n */\nexport const canActivateLogin: CanActivateFn = async (\n _route: ActivatedRouteSnapshot,\n _state: RouterStateSnapshot,\n): Promise<boolean | UrlTree> => {\n const sessionService = inject(AXPSessionService);\n const homePageService = inject(AXPHomePageService);\n const platformSettingsLoadState = inject(AXPPlatformSettingsLoadState);\n const router = inject(Router);\n\n if (platformSettingsLoadState.hasFailure()) {\n return router.createUrlTree(['/auth/unavailable']);\n }\n\n const session = sessionService.getSessionData();\n\n if (session?.user?.id && session.cookieSession) {\n if (!session.tenant?.id) {\n return router.createUrlTree(['/auth/account/tenant-chooser']);\n }\n if (!session.application?.id) {\n return router.createUrlTree(['/auth/account/app-chooser']);\n }\n if (sessionService.isAuthorized && sessionService.application?.name) {\n return homePageService.resolveAuthorizedHomeUrlTree();\n }\n return router.createUrlTree(['/auth/account/app-chooser']);\n }\n\n return true;\n};\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport {\n AXPAuthCredentialTypeOptions,\n type AXPAuthCredentialTypeValue,\n} from '@acorex-platform/module-auth-client/contracts';\nimport { canActivateLogin } from './pages/login/login.guard';\n\n//#region ----- Authentication types -----\n\nexport enum AXMAuthenticationTypes {\n UsernamePassword,\n UsernameEmailPassword,\n EmailPassword,\n MobilePassword,\n EmailCode,\n MobileCode,\n}\n\n/** Map persisted credential-type setting values to {@link AXMAuthenticationTypes}. */\nexport function parseAuthCredentialType(value: unknown): AXMAuthenticationTypes {\n const raw = typeof value === 'string' ? value.trim() : '';\n switch (raw as AXPAuthCredentialTypeValue) {\n case AXPAuthCredentialTypeOptions.UsernameEmailPassword:\n return AXMAuthenticationTypes.UsernameEmailPassword;\n case AXPAuthCredentialTypeOptions.EmailPassword:\n return AXMAuthenticationTypes.EmailPassword;\n case AXPAuthCredentialTypeOptions.MobilePassword:\n return AXMAuthenticationTypes.MobilePassword;\n case AXPAuthCredentialTypeOptions.EmailCode:\n return AXMAuthenticationTypes.EmailCode;\n case AXPAuthCredentialTypeOptions.MobileCode:\n return AXMAuthenticationTypes.MobileCode;\n case AXPAuthCredentialTypeOptions.UsernamePassword:\n default:\n return AXMAuthenticationTypes.UsernamePassword;\n }\n}\n\n//#endregion\n\n//#region ----- Deploy-time auth config (API base / optional OAuth overrides) -----\n\n/** Optional deploy-time OAuth client overrides (defaults live in platform auth strategies). */\nexport interface AXMAuthClientConfig {\n clientId?: string;\n client_id?: string;\n redirectUri?: string;\n scope?: string;\n issuer?: string;\n}\n\n/**\n * Compile-time / environment auth wiring only.\n * Sign-in page branding, sign-up policy, credential type, and default strategy\n * come from platform (P) settings — not this token.\n */\nexport interface AXMAuthConfigs {\n authConfig?: AXMAuthClientConfig;\n baseUrl?: string;\n}\n\nexport const AXM_AUTH_CONFIG_TOKEN = new InjectionToken<AXMAuthConfigs>('app-module-auth-config', {\n providedIn: 'root',\n factory: () => AXMDefaultAuthConfigs,\n});\n\nexport const AXMDefaultAuthConfigs: AXMAuthConfigs = {};\n\nexport function configAuthModule(config: Partial<AXMAuthConfigs> = AXMDefaultAuthConfigs): AXMAuthConfigs {\n return { ...AXMDefaultAuthConfigs, ...config };\n}\n\n//#endregion\n\n//#region ----- Login Guard Token -----\n\n/**\n * Injection token for login page guard.\n * Apps can provide their own custom guard by providing this token.\n * If not provided, the default guard (canActivateLogin) will be used.\n */\nexport const AXM_LOGIN_GUARD_TOKEN = new InjectionToken<CanActivateFn>('AXM_LOGIN_GUARD_TOKEN', {\n providedIn: 'root',\n factory: () => canActivateLogin,\n});\n\n//#endregion\n","import { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPAuthSettings, AXP_AUTH_SIGN_IN_PAGE_DESCRIPTION_DEFAULT, AXP_AUTH_SIGN_IN_PAGE_SLOGAN_DEFAULT } from '@acorex-platform/module-auth-client/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMAuthenticationTypes, parseAuthCredentialType } from './auth.config';\n\n//#region ----- Constants -----\n\nconst DEFAULT_SLOGAN: AXPMultiLanguageString = AXP_AUTH_SIGN_IN_PAGE_SLOGAN_DEFAULT;\nconst DEFAULT_DESCRIPTION: AXPMultiLanguageString = AXP_AUTH_SIGN_IN_PAGE_DESCRIPTION_DEFAULT;\nconst DEFAULT_STRATEGY = 'user-pass';\nconst DEFAULT_SIGNUP_URL = '/auth/register';\n\n//#endregion\n\n//#region ----- Auth platform settings (P) -----\n\n/**\n * Reads public platform auth UI settings loaded during app startup.\n * Slogan and description are multi-language strings.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMAuthPlatformSettingsService {\n private readonly settings = inject(AXPSettingsService);\n\n //#region ----- Sign-in page -----\n\n slogan(): AXPMultiLanguageString {\n return this.readMls(AXPAuthSettings.SignInPageSlogan, DEFAULT_SLOGAN);\n }\n\n description(): AXPMultiLanguageString {\n return this.readMls(AXPAuthSettings.SignInPageDescription, DEFAULT_DESCRIPTION);\n }\n\n //#endregion\n\n //#region ----- Sign-up -----\n\n signupEnabled(): boolean {\n const value = this.settings.peekCached(AXPAuthSettings.SignUpEnabled);\n return value === true || value === 'true';\n }\n\n signupUrl(): string {\n const value = this.settings.peekCached(AXPAuthSettings.SignUpUrl);\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n return DEFAULT_SIGNUP_URL;\n }\n\n //#endregion\n\n //#region ----- Sign-in -----\n\n credentialType(): AXMAuthenticationTypes {\n return parseAuthCredentialType(this.settings.peekCached(AXPAuthSettings.SignInCredentialType));\n }\n\n defaultStrategyName(): string {\n const value = this.settings.peekCached(AXPAuthSettings.SignInDefaultStrategy);\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n return DEFAULT_STRATEGY;\n }\n\n //#endregion\n\n //#region ----- Private -----\n\n private readMls(key: string, fallback: AXPMultiLanguageString): AXPMultiLanguageString {\n const value = this.settings.peekCached(key);\n if (value == null || value === '') {\n return fallback;\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value as AXPMultiLanguageString;\n }\n return fallback;\n }\n\n //#endregion\n}\n\n//#endregion\n","import { coerceUnknownToTrimmedString } from '@acorex-platform/framework-shared/core';\nimport { isNil } from 'lodash';\n\n//#region ---- Types ----\n\nexport const AXPAuthPasswordComplexityLevels = {\n Low: 'Low',\n Medium: 'Medium',\n High: 'High',\n} as const;\n\nexport type AXPAuthPasswordComplexityLevel =\n (typeof AXPAuthPasswordComplexityLevels)[keyof typeof AXPAuthPasswordComplexityLevels];\n\nexport interface AXPAuthPasswordComplexityPolicy {\n minLength: number;\n requireUppercase: boolean;\n requireLowercase: boolean;\n requireDigit: boolean;\n requireSpecialCharacter: boolean;\n}\n\n//#endregion\n\n//#region ---- Policy ----\n\nconst PASSWORD_COMPLEXITY_POLICIES: Record<AXPAuthPasswordComplexityLevel, AXPAuthPasswordComplexityPolicy> = {\n [AXPAuthPasswordComplexityLevels.Low]: {\n minLength: 6,\n requireUppercase: false,\n requireLowercase: false,\n requireDigit: false,\n requireSpecialCharacter: false,\n },\n [AXPAuthPasswordComplexityLevels.Medium]: {\n minLength: 8,\n requireUppercase: true,\n requireLowercase: true,\n requireDigit: true,\n requireSpecialCharacter: false,\n },\n [AXPAuthPasswordComplexityLevels.High]: {\n minLength: 12,\n requireUppercase: true,\n requireLowercase: true,\n requireDigit: true,\n requireSpecialCharacter: true,\n },\n};\n\nconst SPECIAL_CHARACTER_PATTERN = /[^a-zA-Z0-9]/;\n\n//#endregion\n\n//#region ---- Utility Methods ----\n\n/**\n * Normalizes tenant password complexity setting values to a supported level.\n */\nexport function normalizePasswordComplexityLevel(value: unknown): AXPAuthPasswordComplexityLevel {\n if (isNil(value)) {\n return AXPAuthPasswordComplexityLevels.Medium;\n }\n\n const normalized = coerceUnknownToTrimmedString(value).toLowerCase();\n\n if (normalized === 'low') {\n return AXPAuthPasswordComplexityLevels.Low;\n }\n\n if (normalized === 'medium') {\n return AXPAuthPasswordComplexityLevels.Medium;\n }\n\n if (normalized === 'high') {\n return AXPAuthPasswordComplexityLevels.High;\n }\n\n return AXPAuthPasswordComplexityLevels.Medium;\n}\n\n/**\n * Returns the validation policy for the given complexity level.\n */\nexport function getPasswordComplexityPolicy(\n level: AXPAuthPasswordComplexityLevel,\n): AXPAuthPasswordComplexityPolicy {\n return PASSWORD_COMPLEXITY_POLICIES[level];\n}\n\n/**\n * Validates a password against the configured complexity policy.\n */\nexport function validatePasswordAgainstComplexity(\n password: string,\n level: AXPAuthPasswordComplexityLevel,\n): boolean {\n const policy = getPasswordComplexityPolicy(level);\n\n if (password.length < policy.minLength) {\n return false;\n }\n\n if (policy.requireUppercase && !/[A-Z]/.test(password)) {\n return false;\n }\n\n if (policy.requireLowercase && !/[a-z]/.test(password)) {\n return false;\n }\n\n if (policy.requireDigit && !/\\d/.test(password)) {\n return false;\n }\n\n if (policy.requireSpecialCharacter && !SPECIAL_CHARACTER_PATTERN.test(password)) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Resolves the i18n key for the password complexity hint shown under the new password field.\n */\nexport function getPasswordComplexityHintKey(level: AXPAuthPasswordComplexityLevel): string {\n return `@auth:profile-page.commands.change-password.complexity.hint.${level.toLowerCase()}`;\n}\n\n/**\n * Resolves the i18n key for the password complexity validation error message.\n */\nexport function getPasswordComplexityValidationMessageKey(level: AXPAuthPasswordComplexityLevel): string {\n return `@auth:profile-page.commands.change-password.complexity.validation.${level.toLowerCase()}`;\n}\n\n//#endregion\n","import { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPAuthSettings } from '@acorex-platform/module-auth-client/contracts';\nimport {\n AXPAuthPasswordComplexityLevel,\n normalizePasswordComplexityLevel,\n} from '../utils/password-complexity.utils';\n\n//#region ---- Password Complexity Service ----\n\n/**\n * Resolves tenant password complexity policy for auth flows (change password, registration, etc.).\n * Uses tenant scope explicitly so inherited user-scope snapshots do not override tenant policy.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAuthPasswordComplexityService {\n //#region ---- Services & Dependencies ----\n\n private readonly settingsService = inject(AXPSettingsService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n async getLevel(): Promise<AXPAuthPasswordComplexityLevel> {\n const tenantValue = await this.settingsService\n .scope(AXPPlatformScope.Tenant)\n .get<unknown>(AXPAuthSettings.PasswordComplexity);\n\n if (tenantValue !== undefined && tenantValue !== null) {\n return normalizePasswordComplexityLevel(tenantValue);\n }\n\n const effectiveValue = await this.settingsService.get<unknown>(AXPAuthSettings.PasswordComplexity);\n return normalizePasswordComplexityLevel(effectiveValue);\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '@acorex/core/validation';\nimport { inject, Injectable } from '@angular/core';\nimport { isString } from 'lodash';\nimport { AXPAuthPasswordComplexityService } from '../shared/services/password-complexity.service';\nimport {\n AXPAuthPasswordComplexityLevel,\n normalizePasswordComplexityLevel,\n validatePasswordAgainstComplexity,\n} from '../shared/utils/password-complexity.utils';\n\n//#region ---- Password Complexity Validation Rule ----\n\nexport interface AXPasswordComplexityValidationRuleOptions extends AXValidationRuleOptions {\n complexity?: AXPAuthPasswordComplexityLevel | string;\n message?: string;\n}\n\n/**\n * Validates passwords against tenant-configured complexity levels (Low, Medium, High).\n */\n@Injectable()\nexport class PasswordComplexityValidationRule implements AXValidationRule {\n //#region ---- Services & Dependencies ----\n\n private readonly passwordComplexityService = inject(AXPAuthPasswordComplexityService);\n\n //#endregion\n\n get name(): string {\n return 'password-complexity';\n }\n\n async validate(\n value: unknown,\n options?: AXPasswordComplexityValidationRuleOptions,\n ): Promise<AXValidationRuleResult> {\n const complexity = await this.resolveComplexity(options?.complexity);\n const message = options?.message ?? '';\n\n if (!isString(value) || value.length === 0) {\n return {\n rule: this.name,\n result: false,\n message,\n value,\n };\n }\n\n const isValid = validatePasswordAgainstComplexity(value, complexity);\n\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : message,\n value,\n };\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async resolveComplexity(\n override: AXPAuthPasswordComplexityLevel | string | undefined,\n ): Promise<AXPAuthPasswordComplexityLevel> {\n if (override !== undefined && override !== null && String(override).trim() !== '') {\n return normalizePasswordComplexityLevel(override);\n }\n\n return this.passwordComplexityService.getLevel();\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXValidationModule } from '@acorex/core/validation';\nimport { NgModule } from '@angular/core';\nimport { PasswordComplexityValidationRule } from './password-complexity-validation-rule.class';\n\n//#region ---- Auth Validation Rules Module ----\n\n@NgModule({\n imports: [\n AXValidationModule.forChild({\n rules: [PasswordComplexityValidationRule],\n }),\n ],\n})\nexport class AXMAuthValidationRulesModule {}\n\n//#endregion\n","import { Route } from '@angular/router';\nexport const routes: Route[] = [\n {\n path: 'auth',\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'login',\n },\n {\n path: 'unavailable',\n loadComponent: () =>\n import('./pages/unavailable/platform-settings-unavailable.component').then(\n (c) => c.AXMPlatformSettingsUnavailableComponent,\n ),\n },\n {\n path: '',\n loadComponent: () =>\n import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n children: [\n {\n path: 'install',\n loadComponent: () =>\n import('./pages/install/pwa-install.component').then((c) => c.AXMPwaInstallComponent),\n },\n ],\n },\n {\n path: '',\n loadComponent: () =>\n import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n loadChildren: () => import('./pages/login/login.module').then((c) => c.AXPSignInModule),\n },\n {\n path: '',\n loadComponent: () =>\n import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n loadChildren: () => import('./pages/two-factor/two-factor.module').then((c) => c.AXPTwoFactorModule),\n },\n {\n path: '',\n loadComponent: () =>\n import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n loadChildren: () => import('./pages/forgot/routes').then((c) => c),\n },\n {\n path: 'oauth-callback',\n loadComponent: () =>\n import('./pages/callback/oauth-callback.component').then((c) => c.AXPOAuthCallbackComponent),\n },\n {\n path: 'account',\n loadComponent: () => import('./shared/layouts/blank/blank.layout').then((c) => c.AXPAuthBlankLayoutComponent),\n loadChildren: () => import('./pages/account/account.module').then((c) => c.AXPAccountModule),\n },\n {\n path: '',\n loadComponent: () =>\n import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n loadChildren: () => import('./pages/register/register.module').then((c) => c.AXPRegisterModule),\n },\n ],\n },\n];\n","import { RootConfig } from '@acorex-platform/module-application-management-client/contracts';\r\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\r\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\r\nimport { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';\r\nimport { AXButtonModule } from '@acorex/components/button';\r\nimport { AXDecoratorModule } from '@acorex/components/decorators';\r\nimport { AXLookupComponent, type AXLookupSelectionChangedEvent } from '@acorex/components/lookup';\r\nimport { AXLoadingModule } from '@acorex/components/loading';\r\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\r\nimport { AXTranslationModule } from '@acorex/core/translation';\r\nimport { AXPApplication, AXPAuthStrategyRegistryService, AXPSessionContext, AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { AXPHomePageService } from '@acorex-platform/framework-client/common';\r\nimport {\r\n AXPLogoComponent,\r\n AXPEntityLogoRegistrationService,\r\n axpApplicationLogoKey,\r\n} from '@acorex-platform/framework-client/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, OnInit, output, signal, viewChild, viewChildren } from '@angular/core';\r\nimport { first } from 'rxjs';\r\n@Component({\r\n selector: 'axp-app-chooser-list',\r\n templateUrl: 'app-chooser-list.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n AXButtonModule,\r\n AXDecoratorModule,\r\n AXLoadingModule,\r\n AXSkeletonModule,\r\n AXLookupComponent,\r\n AXListNavigationModule,\r\n AXTranslationModule,\r\n AXPLogoComponent,\r\n ],\r\n})\r\nexport class AXPAppChooserListComponent implements OnInit {\r\n private readonly entityService = inject(AXPEntityService);\r\n //#region ---- Services & Dependencies ----\r\n\r\n private sessionService = inject(AXPSessionService);\r\n private homePageService = inject(AXPHomePageService);\r\n private authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\r\n private logoRegistration = inject(AXPEntityLogoRegistrationService);\r\n private applicationService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.application.name).data<any, any>();\r\n private strategyName = this.sessionService.getSessionData()?.strategy;\r\n private strategy = this.authStrategyRegistry.get(this.strategyName!);\r\n\r\n //#endregion\r\n\r\n //#region ---- Inputs & Outputs ----\r\n\r\n simple = input<boolean>(false);\r\n applicationChosen = output<void>();\r\n loadingChange = output<boolean>();\r\n\r\n //#endregion\r\n\r\n //#region ---- View References ----\r\n\r\n private listNav = viewChild(AXListNavigationDirective);\r\n private listItems = viewChildren(AXListNavigationItemDirective);\r\n\r\n //#endregion\r\n\r\n //#region ---- State ----\r\n\r\n protected isLoading = signal(true);\r\n protected isChoosing = signal(false);\r\n protected choosingId = signal<string | null>(null);\r\n protected allApplications = signal<AXPApplication[]>([]);\r\n protected useSelectBox = computed(() => this.allApplications().length > 3);\r\n protected selectedApplication = signal<AXPApplication | null>(null);\r\n protected isSelectBoxOpen = signal(false);\r\n protected canApply = computed(() => !!this.selectedApplication());\r\n protected skeletonItems = [1, 2, 3];\r\n\r\n //#endregion\r\n\r\n //#region ---- Computed Properties ----\r\n\r\n protected isApplicationSelected(application: AXPApplication): boolean {\r\n return application.id === this.sessionService.application?.id;\r\n }\r\n\r\n protected applicationLogoKey(application: AXPApplication): string {\r\n return axpApplicationLogoKey(application.id);\r\n }\r\n\r\n //#endregion\r\n\r\n //#region ---- Constructor ----\r\n\r\n constructor() {\r\n effect(() => {\r\n this.loadingChange.emit(this.isLoading());\r\n });\r\n\r\n effect(() => {\r\n if (!this.isLoading() && !this.useSelectBox() && this.allApplications().length > 0) {\r\n queueMicrotask(() => this.focusFirstListItem());\r\n }\r\n });\r\n }\r\n\r\n //#endregion\r\n\r\n //#region ---- Lifecycle Methods ----\r\n\r\n ngOnInit(): void {\r\n this.sessionService.applications$.pipe(first()).subscribe((applications) => {\r\n this.logoRegistration.registerApplications(applications);\r\n this.allApplications.set(applications);\r\n\r\n if (applications.length > 0) {\r\n this.selectedApplication.set(applications[0]);\r\n }\r\n\r\n this.isLoading.set(false);\r\n });\r\n }\r\n\r\n //#endregion\r\n\r\n //#region ---- UI Handlers ----\r\n\r\n handleApplicationSelectionChanged(event: AXLookupSelectionChangedEvent): void {\r\n this.selectedApplication.set((event.items?.[0] as AXPApplication) ?? null);\r\n }\r\n\r\n handleApplicationSelect(event: AXValueChangedEvent): void {\r\n if (!event.isUserInteraction) {\r\n return;\r\n }\r\n }\r\n\r\n handleListItemKeyDown(event: KeyboardEvent, application: AXPApplication): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n void this.chooseApplication(application);\r\n }\r\n }\r\n\r\n handleSelectBoxKeyDown(event: Event): void {\r\n if (!(event instanceof KeyboardEvent)) {\r\n return;\r\n }\r\n\r\n if (event.key !== 'Enter' && event.key !== 'NumpadEnter') {\r\n return;\r\n }\r\n\r\n if (this.isSelectBoxOpen()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.canApply()) {\r\n this.applySelection();\r\n }\r\n }\r\n\r\n applySelection(): void {\r\n if (this.isChoosing()) {\r\n return;\r\n }\r\n\r\n const application = this.selectedApplication();\r\n if (application) {\r\n void this.chooseApplication(application);\r\n }\r\n }\r\n\r\n async chooseApplication(item: AXPApplication): Promise<void> {\r\n if (this.isChoosing()) {\r\n return;\r\n }\r\n\r\n this.isChoosing.set(true);\r\n this.choosingId.set(item.id);\r\n\r\n try {\r\n const tenantId = this.sessionService.tenant?.id || '';\r\n if (!tenantId) {\r\n throw new Error('Tenant ID is missing. Cannot choose application.');\r\n }\r\n\r\n let applicationWithEdition: AXPApplication = { ...item };\r\n\r\n if (this.strategy && typeof this.strategy.updateToken === 'function') {\r\n await this.sessionService.updateToken({\r\n application: applicationWithEdition,\r\n user: this.sessionService.user,\r\n tenant: this.sessionService.tenant,\r\n } as AXPSessionContext);\r\n }\r\n\r\n if (!applicationWithEdition.edition) {\r\n const fullApplication = await this.applicationService.byKey(item.id);\r\n if (!fullApplication) {\r\n throw new Error(`Application not found: ${item.id}`);\r\n }\r\n\r\n if (fullApplication.editions && fullApplication.editions.length > 0) {\r\n applicationWithEdition = {\r\n ...applicationWithEdition,\r\n version: fullApplication.version || applicationWithEdition.version,\r\n edition: {\r\n id: fullApplication.editions[0].id,\r\n title: fullApplication.editions[0].title,\r\n description: fullApplication.editions[0].description,\r\n },\r\n };\r\n\r\n if (this.strategy && typeof this.strategy.updateToken === 'function') {\r\n await this.sessionService.updateToken({\r\n application: applicationWithEdition,\r\n user: this.sessionService.user,\r\n tenant: this.sessionService.tenant,\r\n } as AXPSessionContext);\r\n }\r\n }\r\n }\r\n\r\n this.applicationChosen.emit();\r\n await this.homePageService.navigateTo();\r\n } finally {\r\n this.isChoosing.set(false);\r\n this.choosingId.set(null);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region ---- Utility Methods ----\r\n\r\n private focusFirstListItem(): void {\r\n const nav = this.listNav();\r\n const items = this.listItems();\r\n const applications = this.allApplications();\r\n const currentIndex = applications.findIndex((application) => this.isApplicationSelected(application));\r\n\r\n if (nav && items.length > 0) {\r\n nav.navigateTo(items[currentIndex >= 0 ? currentIndex : 0]);\r\n }\r\n }\r\n\r\n //#endregion\r\n}\r\n","@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedApplication()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n [selectedTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleApplicationSelect($event)\"\n (onSelectionChanged)=\"handleApplicationSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (application of allApplications(); track application.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isApplicationSelected(application)\"\n [attr.aria-busy]=\"choosingId() === application.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isApplicationSelected(application)\"\n [class.dark:bg-primary-darker]=\"isApplicationSelected(application)\"\n [class.text-primary-on-lighter]=\"isApplicationSelected(application)\"\n [class.dark:text-primary-on-darker]=\"isApplicationSelected(application)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== application.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseApplication(application)\"\n (keydown)=\"handleListItemKeyDown($event, application)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(application)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(application.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 min-w-0 text-start md:text-base text-sm break-words md:truncate\">{{\n application.title | translate | async\n }}</span>\n @if (application.edition?.title) {\n <span class=\"text-muted text-xs shrink-0\">{{\n application.edition?.title | translate | async\n }}</span>\n }\n </div>\n @if (choosingId() === application.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #applicationItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n @if (item.edition?.title) {\n <span class=\"text-muted text-xs\">{{ item.edition.title | translate | async }}</span>\n }\n </div>\n</ng-template>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXPApplication, AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXPAppChooserListComponent } from './app-chooser-list.component';\n\n@Component({\n templateUrl: './app-chooser-slot.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [CommonModule, AXButtonModule, AXPopoverModule, AXDecoratorModule, AXPAppChooserListComponent],\n})\nexport class AXMAppChooserSlotComponent {\n\n private sessionService = inject(AXPSessionService);\n protected readonly themeStore = inject(AXPLayoutThemeService);\n protected readonly applications$: Observable<AXPApplication[]> = this.sessionService.applications$;\n\n private appPopover = viewChild<AXPopoverComponent>('appPopover');\n\n closePopover(): void {\n this.appPopover()?.close();\n }\n}\n","@if (applications$ | async; as applications) {\n @if (applications.length > 1) {\n <ax-button [color]=\"themeStore.headerButtonColor()\" [look]=\"themeStore.headerButtonLook()\" #appChooser>\n <ax-icon class=\"fa-regular fa-grid-2\"> </ax-icon>\n </ax-button>\n <ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #appPopover>\n <div class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\">\n <axp-app-chooser-list [simple]=\"true\" (applicationChosen)=\"closePopover()\"></axp-app-chooser-list>\n </div>\n </ax-popover>\n }\n}\n","import {\n isMaxActiveDeviceSessionsError,\n storeSessionLimitPendingTenant,\n type AXPSessionLimitPendingTenant,\n} from '@acorex-platform/framework-client/auth';\nimport { Router } from '@angular/router';\n\n//#region ----- Session limit navigation -----\n\nexport async function navigateToSessionLimitChooser(\n router: Router,\n tenant: AXPSessionLimitPendingTenant,\n): Promise<boolean> {\n storeSessionLimitPendingTenant(tenant);\n return router.navigate(['/auth/account/session-limit'], {\n state: { tenant },\n });\n}\n\nexport function isSessionLimitBindError(error: unknown): boolean {\n return isMaxActiveDeviceSessionsError(error);\n}\n\n//#endregion\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport {\n AXListNavigationDirective,\n AXListNavigationItemDirective,\n AXListNavigationModule,\n} from '@acorex/cdk/list-navigation';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXLookupComponent, type AXLookupSelectionChangedEvent } from '@acorex/components/lookup';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPAuthStrategyRegistryService, AXPSessionService, AXPTenant } from '@acorex-platform/framework-client/auth';\nimport {\n AXPLogoComponent,\n AXPEntityLogoRegistrationService,\n axpTenantLogoKey,\n} from '@acorex-platform/framework-client/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { first } from 'rxjs';\nimport {\n isSessionLimitBindError,\n navigateToSessionLimitChooser,\n} from '../session-limit/session-limit.navigation';\n\n@Component({\n selector: 'axp-tenant-chooser-list',\n templateUrl: 'tenant-chooser-list.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n AXTranslationModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXSkeletonModule,\n AXLookupComponent,\n AXSearchBoxModule,\n AXListNavigationModule,\n AXPLogoComponent,\n ],\n})\nexport class AXPTenantChooserListComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private sessionService = inject(AXPSessionService);\n private authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n private logoRegistration = inject(AXPEntityLogoRegistrationService);\n private translationService = inject(AXTranslationService);\n private router = inject(Router);\n private strategyName = this.sessionService.getSessionData()?.strategy;\n private strategy = this.authStrategyRegistry.get(this.strategyName!);\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n simple = input<boolean>(false);\n tenantChosen = output<void>();\n loadingChange = output<boolean>();\n\n //#endregion\n\n //#region ---- View References ----\n\n private listNav = viewChild(AXListNavigationDirective);\n private listItems = viewChildren(AXListNavigationItemDirective);\n\n protected tenantLogoKey(tenant: AXPTenant): string {\n return axpTenantLogoKey(tenant.id);\n }\n\n //#endregion\n\n //#region ---- State ----\n\n protected isLoading = signal(true);\n protected isChoosing = signal(false);\n protected choosingId = signal<string | null>(null);\n protected allTenants = signal<AXPTenant[]>([]);\n protected searchValue = signal('');\n protected showAll = signal(false);\n protected useSelectBox = computed(() => this.allTenants().length > 3);\n protected selectedTenant = signal<AXPTenant | null>(null);\n protected isSelectBoxOpen = signal(false);\n protected canApply = computed(() => !!this.selectedTenant());\n protected skeletonItems = [1, 2, 3];\n\n /** Tenants shown in the list (respects search and view-all toggle). */\n protected displayedTenants = computed(() => {\n const tenants = this.filterTenants(this.allTenants());\n if (this.showAll() || tenants.length <= 4) {\n return tenants;\n }\n return tenants.slice(0, 4);\n });\n\n protected showSearchAndViewAll = computed(() => this.allTenants().length > 4);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected isTenantSelected(tenant: AXPTenant): boolean {\n return tenant.id === this.sessionService.tenant?.id;\n }\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n effect(() => {\n this.loadingChange.emit(this.isLoading());\n });\n\n effect(() => {\n if (!this.isLoading() && !this.useSelectBox() && !this.simple() && this.allTenants().length > 0) {\n queueMicrotask(() => this.focusFirstListItem());\n }\n });\n }\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n this.sessionService.tenants$.pipe(first()).subscribe((tenants) => {\n this.logoRegistration.registerTenants(tenants);\n this.allTenants.set(tenants);\n\n if (tenants.length > 0) {\n this.selectedTenant.set(tenants[0]);\n }\n\n this.isLoading.set(false);\n });\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n filterTenants(tenants: AXPTenant[]): AXPTenant[] {\n const query = this.searchValue().toLowerCase();\n if (!query) {\n return tenants;\n }\n const locale = this.translationService.getActiveLang();\n return tenants.filter((tenant) =>\n resolveMultiLanguageString(tenant.title, locale).toLowerCase().includes(query),\n );\n }\n\n handleSearch(event: string): void {\n if (event !== undefined) {\n this.searchValue.set(event);\n }\n }\n\n showAllTenants(): void {\n this.showAll.update((value) => !value);\n }\n\n handleTenantSelectionChanged(event: AXLookupSelectionChangedEvent): void {\n this.selectedTenant.set((event.items?.[0] as AXPTenant) ?? null);\n }\n\n handleTenantSelect(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n }\n\n handleListItemKeyDown(event: KeyboardEvent, tenant: AXPTenant): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n void this.chooseTenant(tenant);\n }\n }\n\n handleSelectBoxKeyDown(event: Event): void {\n if (!(event instanceof KeyboardEvent)) {\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== 'NumpadEnter') {\n return;\n }\n\n if (this.isSelectBoxOpen()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.canApply()) {\n this.applySelection();\n }\n }\n\n applySelection(): void {\n if (this.isChoosing()) {\n return;\n }\n\n const tenant = this.selectedTenant();\n if (tenant) {\n void this.chooseTenant(tenant);\n }\n }\n\n async chooseTenant(item: AXPTenant): Promise<boolean | void> {\n if (this.isChoosing()) {\n return;\n }\n\n this.isChoosing.set(true);\n this.choosingId.set(item.id);\n\n try {\n if (this.strategy) {\n const updateContext = {\n tenant: item,\n user: this.sessionService.user,\n };\n await this.sessionService.updateToken(updateContext);\n }\n\n this.tenantChosen.emit();\n return this.router.navigate(['/auth/account/app-chooser']);\n } catch (error) {\n if (isSessionLimitBindError(error)) {\n // Swallow — do not rethrow (avoids global error handler + logout noise).\n await navigateToSessionLimitChooser(this.router, item);\n return;\n }\n console.error('Tenant choose failed:', error);\n throw error;\n } finally {\n this.isChoosing.set(false);\n this.choosingId.set(null);\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private focusFirstListItem(): void {\n const nav = this.listNav();\n const items = this.listItems();\n const tenants = this.allTenants();\n const currentIndex = tenants.findIndex((tenant) => this.isTenantSelected(tenant));\n\n if (nav && items.length > 0) {\n nav.navigateTo(items[currentIndex >= 0 ? currentIndex : 0]);\n }\n }\n\n //#endregion\n}\n","@if (isLoading()) {\n <!--->\n <!-- ----- Compact dropdown skeleton ----- -->\n @if (simple()) {\n <div class=\"w-full flex flex-col gap-1\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-2 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-6 rounded-md shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-4 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n <!-- ----- Full chooser skeleton ----- -->\n @else {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n }\n}\n<!-- ----- Compact list for header/sidebar dropdowns ----- -->\n@else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] flex flex-col gap-1\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-2 items-center min-w-0\">\n <div class=\"shrink-0 size-6 overflow-hidden rounded-md grid place-items-center\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"24\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-6 overflow-hidden\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n <!--->\n <!-- ----- Choosing indicator for this tenant ----- -->\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n<!-- ----- Lookup when the catalog is long ----- -->\n@else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n [selectedTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n (onSelectionChanged)=\"handleTenantSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n}\n<!-- ----- Full list on the login tenant chooser ----- -->\n@else {\n @if (showSearchAndViewAll()) {\n <ax-search-box\n [placeholder]=\"'@general:search.title' | translate | async\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearch($event)\"\n class=\"w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n }\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of displayedTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isTenantSelected(tenant)\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.text-primary-on-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:text-primary-on-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n @if (showSearchAndViewAll()) {\n <div class=\"mt-6 w-full flex justify-center\">\n <ax-button\n (onClick)=\"showAllTenants()\"\n class=\"w-full\"\n look=\"outline\"\n [disabled]=\"isChoosing()\"\n [text]=\"\n showAll()\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"\n ></ax-button>\n </div>\n }\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n </div>\n</ng-template>\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit, signal, viewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { first } from 'rxjs';\nimport { AXPTenantChooserListComponent } from './tenant-chooser-list.component';\n\n@Component({\n selector: 'axp-tenant-chooser-dropdown',\n templateUrl: 'tenant-chooser-dropdown.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [CommonModule, AXTranslationModule, AXButtonModule, AXPopoverModule, AXDecoratorModule, AXSkeletonModule, AXPTenantChooserListComponent],\n})\nexport class AXPTenantChooserDropdownComponent implements OnInit {\n //#region ----- Services & Dependencies -----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly tenants$ = this.sessionService.tenants$;\n protected readonly tenant$ = this.sessionService.tenant$;\n protected readonly tenantsLoading = signal(true);\n\n private readonly tenantPopover = viewChild<AXPopoverComponent>('tenantPopover');\n\n //#endregion\n\n //#region ----- Constants -----\n\n /** Shared panel size so sidebar and header tenant popovers match. */\n protected readonly popupPanelClass = 'bg-lightest overflow-hidden rounded-md shadow-md w-full p-1';\n\n //#endregion\n\n //#region ----- Inputs -----\n\n /**\n * When true, renders a plain inline tenant text (no popover).\n * When multiple tenants are available, the text is clickable.\n */\n @Input() inline = false;\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n ngOnInit(): void {\n this.tenants$.pipe(first()).subscribe(() => {\n this.tenantsLoading.set(false);\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n closePopover(): void {\n this.tenantPopover()?.close();\n }\n\n protected openTenantChooser(): void {\n // Route registered in `AXPAccountModule` as `/auth/account/tenant-chooser`.\n void this.router.navigate(['/auth/account/tenant-chooser']);\n }\n\n //#endregion\n}\n","@if (tenantsLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"h-5 w-32 max-w-full\"></ax-skeleton>\n} @else if (tenants$ | async; as tenants) {\n @if (inline) {\n @if (tenants.length > 1) {\n <!-- ----- Inline dropdown for multi-tenant ----- -->\n <span\n class=\"text-xs font-medium px-3 cursor-pointer inline-flex items-center gap-1\"\n #inlineTenantTrigger\n >\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n <i class=\"fa-solid fa-caret-down text-2xs opacity-60\"></i>\n </span>\n <ax-popover\n [target]=\"inlineTenantTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div [class]=\"popupPanelClass\">\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <!-- ----- Plain text for single tenant ----- -->\n <span class=\"text-xs font-medium px-3\">\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n </span>\n }\n } @else {\n @if (tenants.length > 1) {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n look=\"blank\"\n #tenantChooser\n >\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n <ax-popover\n [target]=\"tenantChooser\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div [class]=\"popupPanelClass\">\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n class=\"ax-sm\"\n look=\"blank\"\n ></ax-button>\n }\n }\n}\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Profile slot menu hook ----\n\nexport const PROFILE_SLOT_MENU_ITEMS_HOOK = 'profile-slot.menu-items';\n\nexport type AXPProfileSlotMenuBreakOptions = {\n before?: boolean;\n after?: boolean;\n};\n\nexport type AXPProfileSlotMenuItem = Omit<AXPActionMenuItem, 'break'> & {\n break?: AXPProfileSlotMenuBreakOptions;\n};\n\nexport type AXPProfileSlotMenuItemsPayload = {\n items: AXPProfileSlotMenuItem[];\n};\n\nexport function hasProfileSlotMenuBreakBefore(breakOptions?: AXPProfileSlotMenuBreakOptions): boolean {\n return breakOptions?.before === true;\n}\n\nexport function hasProfileSlotMenuBreakAfter(breakOptions?: AXPProfileSlotMenuBreakOptions): boolean {\n return breakOptions?.after === true;\n}\n\n//#endregion\n","\nimport { AXPExecuteCommand, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority } from '@acorex-platform/framework-shared/core';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPUserAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnInit,\n ViewEncapsulation,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { Router, RouterModule } from '@angular/router';\n\nimport { AXPDeviceService, AXPKeyboardShortcutRegistry, AXPHookService, chordToKbdItemKeys, getPrimaryKeyboardShortcutChord, normalizeKeyboardShortcuts } from '@acorex-platform/framework-client/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPTenantChooserDropdownComponent } from '../tenant-chooser/tenant-chooser-dropdown.component';\nimport { AXPAuthSettings } from '@acorex-platform/module-auth-client/contracts';\nimport {\n AXPProfileSlotMenuItem,\n AXPProfileSlotMenuItemsPayload,\n hasProfileSlotMenuBreakAfter,\n hasProfileSlotMenuBreakBefore,\n PROFILE_SLOT_MENU_ITEMS_HOOK,\n} from './profile-slot-menu.types';\n\n@Component({\n templateUrl: './profile-slot.component.html',\n styleUrl: './profile-slot.component.css',\n imports: [\n CommonModule,\n RouterModule,\n //\n AXImageModule,\n AXAvatarModule,\n AXPopoverModule,\n AXButtonModule,\n AXDecoratorModule,\n // AXKBDComponent,\n // AXKBDItemComponent,\n AXLoadingModule,\n AXTranslationModule,\n AXPUserAvatarComponent,\n //\n\n AXPTenantChooserDropdownComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMAuthProfileSlotComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly router = inject(Router);\n private readonly sessionService = inject(AXPSessionService);\n private readonly themeService = inject(AXPLayoutThemeService);\n private readonly hooks = inject(AXPHookService);\n private readonly commandService = inject(AXPCommandService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly destroyRef = inject(DestroyRef);\n protected readonly deviceService = inject(AXPDeviceService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly isDarkMode = this.themeService.isDarkMode;\n\n protected readonly user$ = this.sessionService.user$;\n protected readonly tenant$ = this.sessionService.tenant$;\n protected readonly isAuthenticated$ = this.sessionService.isAuthenticated$;\n private readonly isAuthenticated = toSignal(this.sessionService.isAuthenticated$, { initialValue: false });\n\n protected readonly menuItems = signal<AXPProfileSlotMenuItem[]>([]);\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n async ngOnInit(): Promise<void> {\n await this.loadMenuItems();\n this.bindLockMenuSettingsReload();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected appName = () => this.sessionService.application?.name;\n\n protected menuItemClass(item: AXPProfileSlotMenuItem): Record<string, boolean> {\n return {\n 'text-danger-500': item.color === 'danger',\n };\n }\n\n protected readonly hasProfileSlotMenuBreakBefore = hasProfileSlotMenuBreakBefore;\n protected readonly hasProfileSlotMenuBreakAfter = hasProfileSlotMenuBreakAfter;\n\n protected shortcutKeys(chord: string): string[] {\n return chordToKbdItemKeys(chord);\n }\n\n protected primaryShortcut(item: AXPProfileSlotMenuItem): string | undefined {\n return getPrimaryKeyboardShortcutChord(item.shortcuts);\n }\n\n protected async handleMenuItemClick(item: AXPProfileSlotMenuItem, popover: AXPopoverComponent): Promise<void> {\n popover.close();\n\n if (item.command) {\n await this.executeCommand(item.command);\n }\n }\n\n protected handleSignIn(): void {\n this.router.navigate(['/auth/login']);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private bindLockMenuSettingsReload(): void {\n this.settingsService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (!event.keys.includes(AXPAuthSettings.LockWhenIdleEnabled)) {\n return;\n }\n\n void this.loadMenuItems();\n });\n\n this.settingsService.onLoaded.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n void this.loadMenuItems();\n });\n }\n\n private async loadMenuItems(): Promise<void> {\n const payload = await this.hooks.runAsync<AXPProfileSlotMenuItemsPayload>(PROFILE_SLOT_MENU_ITEMS_HOOK, {\n items: [],\n });\n const items = payload.items ?? [];\n this.menuItems.set(items);\n this.registerMenuShortcuts(items);\n }\n\n private registerMenuShortcuts(items: AXPProfileSlotMenuItem[]): void {\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n for (const item of items) {\n if (item.visible === false || !item.command || !item.shortcuts?.length) {\n continue;\n }\n\n const command = item.command;\n\n for (const shortcut of normalizeKeyboardShortcuts(item.shortcuts)) {\n for (const chord of shortcut.keys) {\n shortcuts.push({\n keys: [chord],\n title: item.title as string,\n group: '@general:keyboard-shortcuts.groups.global',\n allowInEditableFields: shortcut.allowInEditableFields,\n directionBehavior: shortcut.directionBehavior,\n when: () => this.isAuthenticated() && (shortcut.when?.() ?? true),\n handler: () => {\n void this.executeCommand(command);\n },\n });\n }\n }\n }\n\n if (shortcuts.length === 0) {\n return;\n }\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'profile-slot-menu',\n priority: AXPKeyboardShortcutPriority.Global,\n group: '@general:keyboard-shortcuts.groups.global',\n when: () => this.isAuthenticated(),\n shortcuts,\n });\n }\n\n private async executeCommand(command: AXPExecuteCommand): Promise<void> {\n if (this.commandService.exists(command.name)) {\n await this.commandService.execute(command.name, command.options ?? {});\n }\n }\n\n //#endregion\n}\n","@if (isAuthenticated$ | async) {\n <div class=\"size-fit\">\n <div #avatar>\n <axp-user-avatar\n [size]=\"36\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"true\"\n ></axp-user-avatar>\n </div>\n\n <ax-popover\n [target]=\"avatar\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"false\"\n #p\n >\n <div\n class=\"bg-lightest border border-lightest rounded-md shadow-md w-80\"\n >\n <div class=\"flex flex-col items-center p-4 border-b\">\n <axp-user-avatar\n [size]=\"64\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n\n <div class=\"flex flex-col items-center justify-center mt-2\">\n <div class=\"text-base font-bold \">{{ (user$ | async)?.title }}</div>\n @if (!deviceService.isSmall()) {\n <axp-tenant-chooser-dropdown class=\"mt-1\"></axp-tenant-chooser-dropdown>\n }\n </div>\n </div>\n <div class=\"axp-profile-slot-menus\">\n <ul>\n @for (item of menuItems(); track item.name ?? item.title) {\n @if (item.visible != false) {\n @if (hasProfileSlotMenuBreakBefore(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n <li [class]=\"menuItemClass(item)\">\n <a (click)=\"handleMenuItemClick(item, p)\">\n <i [class]=\"item.icon\"></i>\n <span class=\"flex-1\">{{\n item.title | translate | async\n }}</span>\n </a>\n </li>\n @if (hasProfileSlotMenuBreakAfter(item.break)) {\n <li class=\"axp-profile-slot-menu-break\" role=\"separator\"></li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </ax-popover>\n </div>\n} @else {\n <ax-button\n color=\"default\"\n look=\"blank\"\n text=\"Sign Up / Sign In\"\n (click)=\"handleSignIn()\"\n >\n <ax-icon>\n <i class=\"fa-solid fa-user text-slate-400 dark:text-slate-200\"></i>\n </ax-icon>\n </ax-button>\n}\n","import { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXHtmlEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDataProvider } from '@acorex-platform/framework-client/common';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPUserAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPMenuVerticalMode, AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewChild, computed, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { first } from 'rxjs';\nimport { AXPTenantChooserDropdownComponent } from '../tenant-chooser/tenant-chooser-dropdown.component';\n\n@Component({\n templateUrl: './user-profile-card.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n RouterModule,\n //\n AXImageModule,\n AXAvatarModule,\n AXPopoverModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n //\n AXPTenantChooserDropdownComponent,\n AsyncPipe,\n AXPUserAvatarComponent,\n ],\n})\nexport class AXMUserProfileCardSlotComponent {\n private router = inject(Router);\n private sessionService = inject(AXPSessionService);\n private dataService = inject(AXPDataProvider, { optional: true });\n private themeStore = inject(AXPLayoutThemeService);\n private deviceService = inject(AXPDeviceService);\n\n protected isCompactMode = computed(() => {\n this.deviceService.screenSize();\n return this.themeStore.effectiveMenuVerticalMode() === AXPMenuVerticalMode.Compact;\n });\n\n /** Compact rail: match mark size; full menu keeps the larger profile avatar. */\n protected readonly avatarSize = computed(() => (this.isCompactMode() ? 28 : 48));\n\n protected readonly isMenuDark = computed(\n () =>\n this.themeStore.menuDarkEnabled() ||\n (this.themeStore.menuAppearance() === 'brand-light' &&\n this.themeStore.isDarkMode()),\n );\n\n protected hasPicture = signal(true);\n protected avatarText = signal<string>('');\n\n constructor() {\n this.loadImage();\n this.getAvatarText();\n }\n protected src!: string;\n protected user$ = this.sessionService.user$;\n protected tenant$ = this.sessionService.tenant$;\n\n protected isAuthenticated$ = this.sessionService.isAuthenticated$;\n\n protected appName = () => this.sessionService.application?.name;\n\n @ViewChild('profilePopover') profilePopover!: AXPopoverComponent;\n\n editProfile() {\n this.router.navigate([`/${this.appName()}/m/securityManagement/e/profile/0/view`]);\n }\n\n async logOut() {\n await this.sessionService.signout();\n const path = (this.router.url ?? '').split('?')[0];\n if (!path.startsWith('/auth')) {\n await this.router.navigateByUrl('/auth/login', { replaceUrl: true });\n }\n }\n\n toggleProfileMenu() {\n this.profilePopover.open();\n }\n\n protected handleSignIn() {\n this.router.navigate(['/auth/login']);\n }\n\n protected onImageError(event: AXHtmlEvent<ErrorEvent>) {\n this.hasPicture.set(false);\n }\n\n protected getAvatarText = () => {\n this.user$.pipe(first()).subscribe((user) => {\n const names = user?.title.split(' ');\n if (names?.length && names[0]?.[0]) {\n this.avatarText.set(names[0][0].toUpperCase());\n } else return this.avatarText.set('AC');\n });\n };\n\n private async loadImage() {\n try {\n const url = this.sessionService.user?.avatar as string;\n if (url?.toLowerCase().startsWith('http')) {\n this.src = url;\n } else if (this.sessionService.user?.avatar != 'null' && this.dataService) {\n const blob = await this.dataService.viewFile(url, '');\n this.src = URL.createObjectURL(blob);\n } else {\n //this.src = this.mockerService.avatar();\n }\n } catch (error) {\n this.hasPicture.set(false);\n console.error('Failed to load image by ID:', error);\n this.src = '';\n }\n }\n}\n","@if((isAuthenticated$ | async)) {\n<div\n class=\"flex items-center gap-1 border-b\"\n [class.p-3]=\"!isCompactMode()\"\n [class.py-2]=\"isCompactMode()\"\n [class.px-0]=\"isCompactMode()\"\n [class.border-white/7]=\"isMenuDark()\"\n [class.border-black/7]=\"!isMenuDark()\"\n [class.justify-center]=\"isCompactMode()\"\n>\n <div #avatar>\n <axp-user-avatar\n [size]=\"avatarSize()\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n </div>\n @if (!isCompactMode()) {\n <div class=\"flex flex-col\">\n <ax-title class=\"text-sm font-medium px-3\">{{ (user$ | async)?.title }}</ax-title>\n <axp-tenant-chooser-dropdown [inline]=\"true\" />\n </div>\n }\n</div>\n}\n","//#region ----- Imports -----\n\nimport { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport type { AXPBeforeInstallPromptEvent, AXPPwaInstallPromptOutcome } from './pwa-install.types';\n\n//#endregion\n\n//#region ----- PWA install -----\n\n/**\n * Captures Chromium `beforeinstallprompt` as soon as startup runs, so the install\n * page still has a deferred prompt if the event fired before navigation.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPPwaInstallService {\n //#region ----- Services & Dependencies -----\n\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n private readonly installedSignal = signal(false);\n private readonly canPromptSignal = signal(false);\n private readonly iosSignal = signal(false);\n private readonly dismissedSignal = signal(readPromptDismissed());\n private deferredPrompt: AXPBeforeInstallPromptEvent | null = null;\n private started = false;\n\n readonly installed = this.installedSignal.asReadonly();\n readonly canPrompt = this.canPromptSignal.asReadonly();\n readonly ios = this.iosSignal.asReadonly();\n readonly dismissed = this.dismissedSignal.asReadonly();\n readonly showPrompt = computed(() => !this.installedSignal() && !this.dismissedSignal());\n readonly offerInProfile = computed(() => !this.installedSignal());\n private promptHostClaimed = false;\n\n //#endregion\n\n //#region ----- Public API -----\n\n start(): void {\n if (this.started || typeof window === 'undefined') {\n return;\n }\n this.started = true;\n this.installedSignal.set(isStandaloneDisplay());\n this.iosSignal.set(isIosSafari() && !isStandaloneDisplay());\n\n const onBeforeInstall = (event: Event): void => {\n event.preventDefault();\n this.deferredPrompt = event as AXPBeforeInstallPromptEvent;\n this.canPromptSignal.set(true);\n };\n const onInstalled = (): void => {\n this.deferredPrompt = null;\n this.canPromptSignal.set(false);\n this.installedSignal.set(true);\n this.iosSignal.set(false);\n this.dismissPrompt();\n };\n const onDisplayMode = (): void => {\n const standalone = isStandaloneDisplay();\n this.installedSignal.set(standalone);\n if (standalone) {\n this.iosSignal.set(false);\n }\n };\n\n window.addEventListener('beforeinstallprompt', onBeforeInstall);\n window.addEventListener('appinstalled', onInstalled);\n const displayQuery = window.matchMedia('(display-mode: standalone)');\n displayQuery.addEventListener('change', onDisplayMode);\n\n this.destroyRef.onDestroy(() => {\n window.removeEventListener('beforeinstallprompt', onBeforeInstall);\n window.removeEventListener('appinstalled', onInstalled);\n displayQuery.removeEventListener('change', onDisplayMode);\n });\n }\n\n dismissPrompt(): void {\n this.dismissedSignal.set(true);\n persistPromptDismissed();\n }\n\n claimPromptHost(): boolean {\n if (this.promptHostClaimed) {\n return false;\n }\n this.promptHostClaimed = true;\n return true;\n }\n\n async promptInstall(): Promise<AXPPwaInstallPromptOutcome> {\n const promptEvent = this.deferredPrompt;\n if (!promptEvent) {\n return 'unavailable';\n }\n\n await promptEvent.prompt();\n const choice = await promptEvent.userChoice;\n this.deferredPrompt = null;\n this.canPromptSignal.set(false);\n if (choice.outcome === 'accepted') {\n this.installedSignal.set(true);\n }\n return choice.outcome;\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction isStandaloneDisplay(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n const navigatorStandalone = (navigator as Navigator & { standalone?: boolean }).standalone === true;\n return (\n navigatorStandalone ||\n window.matchMedia('(display-mode: standalone)').matches ||\n window.matchMedia('(display-mode: window-controls-overlay)').matches\n );\n}\n\nconst PWA_INSTALL_PROMPT_DISMISSED_KEY = 'axp:pwa-install-prompt-dismissed';\n\nfunction readPromptDismissed(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n try {\n return window.localStorage.getItem(PWA_INSTALL_PROMPT_DISMISSED_KEY) === '1';\n } catch {\n return false;\n }\n}\n\nfunction persistPromptDismissed(): void {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(PWA_INSTALL_PROMPT_DISMISSED_KEY, '1');\n } catch {\n // Private mode or blocked storage; in-memory dismiss still applies for this session.\n }\n}\n\nfunction isIosSafari(): boolean {\n if (typeof navigator === 'undefined') {\n return false;\n }\n const ua = navigator.userAgent;\n const iPhone = /iPhone|iPad|iPod/i.test(ua);\n const iPadOs = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n return iPhone || iPadOs;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPPwaInstallService } from './pwa-install.service';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-pwa-install-prompt',\n templateUrl: './pwa-install-prompt.component.html',\n styleUrls: ['./pwa-install-prompt.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXMPwaInstallPromptComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly router = inject(Router);\n protected readonly pwaInstall = inject(AXPPwaInstallService);\n protected readonly isPromptHost = this.pwaInstall.claimPromptHost();\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected handleOpenInstallPage(): void {\n this.pwaInstall.dismissPrompt();\n void this.router.navigateByUrl('/auth/install');\n }\n\n protected handleDismiss(): void {\n this.pwaInstall.dismissPrompt();\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (isPromptHost && pwaInstall.showPrompt()) {\n <!-- ----- Corner install suggestion while the app is not installed ----- -->\n <div\n class=\"axp-pwa-install-prompt\"\n role=\"region\"\n [attr.aria-label]=\"'@auth:pwa-install.prompt.title' | translate | async\"\n >\n <ax-button\n class=\"axp-pwa-install-prompt__dismiss\"\n look=\"blank\"\n [iconOnly]=\"true\"\n [attr.aria-label]=\"'@auth:pwa-install.prompt.dismiss' | translate | async\"\n (onClick)=\"handleDismiss()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-xmark\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <div class=\"axp-pwa-install-prompt__copy\">\n <p class=\"font-semibold\">{{ '@auth:pwa-install.prompt.title' | translate | async }}</p>\n <p class=\"text-sm text-neutral-600\">{{ '@auth:pwa-install.prompt.hint' | translate | async }}</p>\n </div>\n <ax-button\n color=\"primary\"\n class=\"w-full\"\n [text]=\"'@auth:pwa-install.prompt.action' | translate | async\"\n (onClick)=\"handleOpenInstallPage()\"\n ></ax-button>\n </div>\n}\n","\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\nimport { orderBy } from 'lodash';\nimport {\n AXPAuthInactiveSessionTerminationValue,\n AXPAuthSettings,\n} from '@acorex-platform/module-auth-client/contracts';\nimport {\n AXMSecurityManagementDeviceSessionsEntityModel,\n AXMSessionStatusTypes,\n RootConfig as SecurityManagementRootConfig,\n} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nexport abstract class AXMUserDeviceSessionsService {\n abstract getSessions(): Promise<AXMSecurityManagementDeviceSessionsEntityModel[]>;\n abstract getCurrentActiveSessions(): Promise<AXMSecurityManagementDeviceSessionsEntityModel>;\n abstract terminateSession(sessionId: string): Promise<void>;\n abstract terminateAllSession(): Promise<void>;\n abstract setInactiveSessionTermination(value: AXPAuthInactiveSessionTerminationValue): Promise<void>;\n}\n\n@Injectable()\nexport class AXMUserDeviceSessionsServiceImp extends AXMUserDeviceSessionsService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly entityService = inject(AXPEntityService);\n private readonly deviceSessionsDataAccessor = this.entityService\n .withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.deviceSessions.name)\n .data<string, AXMSecurityManagementDeviceSessionsEntityModel>();\n private readonly settingsService = inject(AXPSettingsService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n override async getSessions(): Promise<AXMSecurityManagementDeviceSessionsEntityModel[]> {\n const sessions = await this.loadActiveUserSessions();\n const current = this.pickCurrentSession(sessions);\n const others = current ? sessions.filter((item) => item.id !== current.id) : sessions;\n return orderBy(\n others,\n [(session) => new Date(session.lastLoginDate).getTime()],\n ['desc'],\n );\n }\n\n override async getCurrentActiveSessions(): Promise<AXMSecurityManagementDeviceSessionsEntityModel> {\n const userSessions = await this.loadActiveUserSessions();\n const activeSession = this.pickCurrentSession(userSessions);\n\n if (!activeSession) {\n throw new Error('No active session found for current user');\n }\n\n return activeSession;\n }\n\n override async terminateSession(sessionId: string): Promise<void> {\n const sessions = await this.loadActiveUserSessions();\n const current = this.pickCurrentSession(sessions);\n if (current && sessionId === current.id) {\n return;\n }\n\n await this.deviceSessionsDataAccessor.update(sessionId, {\n status: AXMSessionStatusTypes.revoked,\n loggedOutAt: new Date(),\n isActiveSession: false,\n });\n await this.showTerminateSuccessToast();\n }\n\n override async terminateAllSession(): Promise<void> {\n const sessions = await this.loadActiveUserSessions();\n const current = this.pickCurrentSession(sessions);\n if (!current) {\n return;\n }\n\n const otherActiveSessions = sessions.filter((session) => session.id !== current.id);\n await Promise.all(\n otherActiveSessions.map((session) =>\n this.deviceSessionsDataAccessor.update(session.id, {\n status: AXMSessionStatusTypes.revoked,\n loggedOutAt: new Date(),\n isActiveSession: false,\n }),\n ),\n );\n await this.showTerminateSuccessToast();\n }\n\n override async setInactiveSessionTermination(value: AXPAuthInactiveSessionTerminationValue): Promise<void> {\n await this.settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPAuthSettings.InactiveSessionTermination, value);\n }\n\n /**\n * Current device = unique middleware flag, otherwise most recent last visit.\n */\n private pickCurrentSession(\n sessions: AXMSecurityManagementDeviceSessionsEntityModel[],\n ): AXMSecurityManagementDeviceSessionsEntityModel | undefined {\n if (sessions.length === 0) {\n return undefined;\n }\n\n const flagged = sessions.filter((session) => session.isActiveSession === true);\n if (flagged.length === 1) {\n return flagged[0];\n }\n\n return orderBy(\n sessions,\n [(session) => new Date(session.lastLoginDate).getTime()],\n ['desc'],\n )[0];\n }\n\n private async loadActiveUserSessions(): Promise<AXMSecurityManagementDeviceSessionsEntityModel[]> {\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return [];\n }\n\n const response = await this.deviceSessionsDataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [\n { field: 'userId', operator: { type: 'equal' }, value: userId },\n { field: 'status', operator: { type: 'equal' }, value: 'active' },\n ],\n },\n });\n\n const items = response.items ?? [];\n return orderBy(\n items,\n [(session) => new Date(session.lastLoginDate).getTime()],\n ['desc'],\n );\n }\n\n private async showTerminateSuccessToast(): Promise<void> {\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n if (!showResult) {\n return;\n }\n\n this.toastService.show({\n color: 'success',\n title: await this.translationService.translateAsync('workflow.session-terminated'),\n content: await this.translationService.translateAsync('workflow.session-terminated-body'),\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n}\n","import { AXPAuthStrategyRegistryService, AXPSessionService, storeSessionLimitPendingTenant, traceAuthGuard } from '@acorex-platform/framework-client/auth';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router';\nimport { isSessionLimitBindError } from '../session-limit/session-limit.navigation';\n\n//#region ----- Tenant chooser guard -----\n\nexport const canActivateTenantChooser: CanActivateFn = async (\n _route: ActivatedRouteSnapshot,\n _state: RouterStateSnapshot,\n) => {\n const sessionService = inject(AXPSessionService);\n const authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n const router = inject(Router);\n const strategyName = sessionService.getSessionData()?.strategy;\n const strategy = authStrategyRegistry.get(strategyName!);\n\n if (!sessionService.user?.id) {\n traceAuthGuard('Tenant chooser → login (no user)');\n return router.createUrlTree(['/auth/login']);\n }\n\n if (!sessionService.hasSessionCredentials()) {\n traceAuthGuard('Tenant chooser → login (no credentials)');\n return router.createUrlTree(['/auth/login']);\n }\n\n // Shared session cache — same ListTenants as tenants$ / chooser list.\n const tenants = await sessionService.getTenantsList();\n traceAuthGuard('Tenant chooser catalog', () => ({ count: tenants.length }));\n\n if (tenants.length === 0) {\n traceAuthGuard('Tenant chooser → waiting room (no tenants)');\n return router.createUrlTree(['/auth/account/waiting-room']);\n }\n if (tenants.length === 1) {\n if (strategy && typeof strategy.updateToken === 'function') {\n try {\n await sessionService.updateToken({\n user: sessionService.user,\n tenant: tenants[0],\n });\n traceAuthGuard('Tenant chooser auto-bound single tenant → app chooser');\n return router.createUrlTree(['/auth/account/app-chooser']);\n } catch (error) {\n if (isSessionLimitBindError(error)) {\n traceAuthGuard('Tenant chooser auto-bind blocked by max device sessions');\n storeSessionLimitPendingTenant(tenants[0]);\n return router.createUrlTree(['/auth/account/session-limit']);\n }\n throw error;\n }\n }\n return true;\n }\n return true;\n};\n\n//#endregion\n","import {\n AXPAuthStrategyRegistryService,\n AXPSessionService,\n traceAuthGuard,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPHomePageService } from '@acorex-platform/framework-client/common';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router';\n\n//#region ----- App chooser guard -----\n\nexport const canActivateAppChooser: CanActivateFn = async (\n _route: ActivatedRouteSnapshot,\n _state: RouterStateSnapshot,\n) => {\n const sessionService = inject(AXPSessionService);\n const authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n const homePageService = inject(AXPHomePageService);\n const router = inject(Router);\n const strategyName = sessionService.getSessionData()?.strategy;\n const strategy = authStrategyRegistry.get(strategyName!);\n\n if (!sessionService.tenant?.id) {\n traceAuthGuard('App chooser → tenant chooser (no tenant)');\n return router.createUrlTree(['/auth/account/tenant-chooser']);\n }\n\n if (!sessionService.hasSessionCredentials()) {\n traceAuthGuard('App chooser → login (no credentials)');\n return router.createUrlTree(['/auth/login']);\n }\n\n // Shared session cache — same ListApplications as applications$ / chooser list.\n const apps = await sessionService.getApplicationsList();\n traceAuthGuard('App chooser catalog', () => ({ count: apps.length }));\n\n if (apps.length === 0) {\n // Show the chooser empty state instead of cancelling navigation (return false sticks on login).\n return true;\n }\n\n if (apps.length === 1) {\n const tenantId = sessionService.tenant?.id;\n if (!tenantId) {\n throw new Error('Tenant ID is missing. Please contact support.');\n }\n if (strategy && typeof strategy.updateToken === 'function') {\n await sessionService.updateToken({\n user: sessionService.user,\n tenant: sessionService.tenant,\n application: apps[0],\n });\n\n // Return UrlTree — never await router.navigate inside canActivate (deadlocks).\n traceAuthGuard('App chooser auto-bound single app → home');\n return homePageService.resolveAuthorizedHomeUrlTree();\n }\n return true;\n }\n\n // Stale application from a prior session must not mark the user Authorized on this screen.\n sessionService.clearApplicationSelection();\n traceAuthGuard('App chooser showing multi-app UI');\n\n return true;\n};\n\n//#endregion\n","//#region ----- Types -----\n\nimport { AXPAuthSettings } from '@acorex-platform/module-auth-client/contracts';\n\n/** Hook key for modules/apps to contribute welcome wizard steps. */\nexport const ONBOARDING_STEPS_HOOK = 'onboarding.steps';\n\n/** User-scoped settings key for welcome onboarding progress blob. */\nexport const ONBOARDING_WELCOME_SETTING_KEY = AXPAuthSettings.OnboardingWelcome;\n\nexport type AXPOnboardingStepScope = 'user' | 'tenant' | 'application';\n\n/** Optional action button rendered on a welcome step (regular-user safe commands only). */\nexport interface AXPOnboardingStepAction {\n /** i18n key */\n text: string;\n icon?: string;\n command: { name: string; options?: Record<string, unknown> };\n}\n\nexport interface AXPOnboardingStep {\n id: string;\n scope: AXPOnboardingStepScope;\n /** i18n key */\n title: string;\n description?: string;\n icon?: string;\n priority: number;\n /**\n * User setting definition keys rendered as editors on this step\n * (same definitions as Settings → User).\n */\n settingKeys?: string[];\n /** Self-service or navigate actions; never admin-only setup fields. */\n actions?: AXPOnboardingStepAction[];\n}\n\nexport interface AXPOnboardingStepsPayload {\n context: { userId: string; tenantId: string; applicationId: string };\n steps: AXPOnboardingStep[];\n}\n\nexport interface AXPOnboardingStepProgress {\n status: 'completed' | 'skipped';\n at: string;\n scope: AXPOnboardingStepScope;\n tenantId?: string;\n applicationId?: string;\n}\n\nexport interface AXPOnboardingProgressState {\n steps: Record<string, AXPOnboardingStepProgress>;\n remindLaterUntil?: string | null;\n dismissedPlanAt?: string | null;\n}\n\nexport interface AXPOnboardingContext {\n userId: string;\n tenantId: string;\n applicationId: string;\n}\n\n//#endregion\n","import { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\nimport {\n ONBOARDING_WELCOME_SETTING_KEY,\n type AXPOnboardingContext,\n type AXPOnboardingProgressState,\n type AXPOnboardingStep,\n type AXPOnboardingStepProgress,\n} from './onboarding.types';\n\n//#region ----- Progress service -----\n\nconst EMPTY_PROGRESS: AXPOnboardingProgressState = { steps: {} };\n\n@Injectable({ providedIn: 'root' })\nexport class AXPOnboardingProgressService {\n //#region ----- Services & Dependencies -----\n\n private readonly settingsService = inject(AXPSettingsService);\n\n //#endregion\n\n //#region ----- Public API -----\n\n async getProgress(): Promise<AXPOnboardingProgressState> {\n const raw = await this.settingsService\n .scope(AXPPlatformScope.User)\n .get<AXPOnboardingProgressState | null>(ONBOARDING_WELCOME_SETTING_KEY);\n\n if (!raw || typeof raw !== 'object') {\n return { ...EMPTY_PROGRESS, steps: {} };\n }\n\n return {\n steps: raw.steps && typeof raw.steps === 'object' ? { ...raw.steps } : {},\n remindLaterUntil: raw.remindLaterUntil ?? null,\n dismissedPlanAt: raw.dismissedPlanAt ?? null,\n };\n }\n\n async setProgress(progress: AXPOnboardingProgressState): Promise<void> {\n await this.settingsService.scope(AXPPlatformScope.User).set(ONBOARDING_WELCOME_SETTING_KEY, progress, {\n flush: true,\n });\n }\n\n isStepComplete(\n step: AXPOnboardingStep,\n progress: AXPOnboardingProgressState,\n context: AXPOnboardingContext,\n ): boolean {\n const entry = progress.steps[this.progressKey(step, context)];\n if (!entry || (entry.status !== 'completed' && entry.status !== 'skipped')) {\n return false;\n }\n\n switch (step.scope) {\n case 'user':\n return true;\n case 'tenant':\n return entry.tenantId === context.tenantId;\n case 'application':\n return entry.tenantId === context.tenantId && entry.applicationId === context.applicationId;\n default:\n return false;\n }\n }\n\n async markComplete(\n step: AXPOnboardingStep,\n context: AXPOnboardingContext,\n progress?: AXPOnboardingProgressState,\n ): Promise<AXPOnboardingProgressState> {\n return this.markStatus(step, context, 'completed', progress);\n }\n\n async markSkipped(\n step: AXPOnboardingStep,\n context: AXPOnboardingContext,\n progress?: AXPOnboardingProgressState,\n ): Promise<AXPOnboardingProgressState> {\n return this.markStatus(step, context, 'skipped', progress);\n }\n\n async setRemindLater(untilIso: string): Promise<AXPOnboardingProgressState> {\n const progress = await this.getProgress();\n const next: AXPOnboardingProgressState = {\n ...progress,\n remindLaterUntil: untilIso,\n };\n await this.setProgress(next);\n return next;\n }\n\n isSnoozed(progress: AXPOnboardingProgressState, now = new Date()): boolean {\n const until = progress.remindLaterUntil;\n if (!until) {\n return false;\n }\n const untilMs = Date.parse(until);\n if (Number.isNaN(untilMs)) {\n return false;\n }\n return now.getTime() < untilMs;\n }\n\n //#endregion\n\n //#region ----- Private helpers -----\n\n /** Stable progress map key so tenant/app completions do not overwrite each other. */\n private progressKey(step: AXPOnboardingStep, context: AXPOnboardingContext): string {\n switch (step.scope) {\n case 'tenant':\n return `${step.id}:${context.tenantId}`;\n case 'application':\n return `${step.id}:${context.tenantId}:${context.applicationId}`;\n case 'user':\n default:\n return step.id;\n }\n }\n\n private async markStatus(\n step: AXPOnboardingStep,\n context: AXPOnboardingContext,\n status: AXPOnboardingStepProgress['status'],\n progress?: AXPOnboardingProgressState,\n ): Promise<AXPOnboardingProgressState> {\n const current = progress ?? (await this.getProgress());\n const entry: AXPOnboardingStepProgress = {\n status,\n at: new Date().toISOString(),\n scope: step.scope,\n };\n\n if (step.scope === 'tenant' || step.scope === 'application') {\n entry.tenantId = context.tenantId;\n }\n if (step.scope === 'application') {\n entry.applicationId = context.applicationId;\n }\n\n const next: AXPOnboardingProgressState = {\n ...current,\n steps: {\n ...current.steps,\n [this.progressKey(step, context)]: entry,\n },\n remindLaterUntil: null,\n };\n\n await this.setProgress(next);\n return next;\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPHookService } from '@acorex-platform/framework-client/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPOnboardingProgressService } from './onboarding-progress.service';\nimport {\n ONBOARDING_STEPS_HOOK,\n type AXPOnboardingContext,\n type AXPOnboardingStep,\n type AXPOnboardingStepsPayload,\n} from './onboarding.types';\n\n//#region ----- Plan service -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPOnboardingPlanService {\n //#region ----- Services & Dependencies -----\n\n private readonly hooks = inject(AXPHookService);\n private readonly progressService = inject(AXPOnboardingProgressService);\n\n //#endregion\n\n //#region ----- Public API -----\n\n /**\n * Runs the onboarding.steps hook waterfall and returns all contributed steps\n * sorted by priority (including already completed ones).\n */\n async assembleFullPlan(context: AXPOnboardingContext): Promise<AXPOnboardingStep[]> {\n const payload = await this.hooks.runAsync<AXPOnboardingStepsPayload>(ONBOARDING_STEPS_HOOK, {\n context,\n steps: [],\n });\n\n const steps = Array.isArray(payload.steps) ? [...payload.steps] : [];\n return steps.sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Runs the onboarding.steps hook waterfall, sorts by priority, and returns\n * only steps that are still incomplete for the given session context.\n */\n async assembleIncompletePlan(context: AXPOnboardingContext): Promise<AXPOnboardingStep[]> {\n const steps = await this.assembleFullPlan(context);\n const progress = await this.progressService.getProgress();\n return steps.filter((step) => !this.progressService.isStepComplete(step, progress, context));\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonSettings,\n AXPSettingDefinitionProviderService,\n AXPSettingsService,\n type AXPSettingDefinition,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPLayoutBuilderService,\n type IFlexContainerBuilder,\n} from '@acorex-platform/framework-client/layout/builder';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPThemeLayoutSetting } from '@acorex-platform/framework-client/themes/shared';\nimport { AXPPlatformScope, AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPOnboardingPlanService } from './onboarding-plan.service';\nimport { AXPOnboardingProgressService } from './onboarding-progress.service';\nimport type { AXPOnboardingContext, AXPOnboardingStep } from './onboarding.types';\n\n//#region ----- Constants -----\n\nexport const WELCOME_ONBOARDING_ROUTE = '/auth/account/welcome-onboarding';\n\nexport const REMIND_LATER_HOURS = 24;\n\n/** User preference keys rendered on welcome preference steps. */\nexport const WELCOME_PREFERENCE_SETTING_KEYS: string[] = [\n AXPRegionalSetting.Language,\n AXPRegionalSetting.TimeZone,\n AXPThemeLayoutSetting.Mode,\n AXPThemeLayoutSetting.Palette,\n AXPThemeLayoutSetting.MenuOrientation,\n AXPThemeLayoutSetting.MenuVerticalMode,\n AXPThemeLayoutSetting.MenuBadgeVisible,\n AXPThemeLayoutSetting.MenuLookWithLine,\n AXPThemeLayoutSetting.MenuDensity,\n AXPThemeLayoutSetting.MenuDark,\n AXPThemeLayoutSetting.HeaderAppearance,\n AXPCommonSettings.NavigationMode,\n AXPCommonSettings.MaxOpenTabs,\n AXPThemeLayoutSetting.Font,\n AXPThemeLayoutSetting.FontSize,\n];\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type WelcomeOnboardingPendingEvaluation = {\n context: AXPOnboardingContext;\n steps: AXPOnboardingStep[];\n};\n\n//#endregion\n\n//#region ----- Welcome onboarding flow -----\n\n/** Loads plan/preferences and builds per-step layout nodes for the welcome page. */\n@Injectable({ providedIn: 'root' })\nexport class AXPWelcomeOnboardingFlowService {\n //#region ----- Services & Dependencies -----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly planService = inject(AXPOnboardingPlanService);\n private readonly progressService = inject(AXPOnboardingProgressService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly settingDefinitions = inject(AXPSettingDefinitionProviderService);\n\n //#endregion\n\n //#region ----- State -----\n\n preferenceSettings: AXPSettingDefinition[] = [];\n\n private resumeContextKey: string | null = null;\n private resumeStepId: string | null = null;\n\n //#endregion\n\n //#region ----- Session & plan -----\n\n resolveContext(): AXPOnboardingContext | null {\n const userId = this.sessionService.user?.id;\n const tenantId = this.sessionService.tenant?.id;\n const applicationId = this.sessionService.application?.id;\n if (!userId || !tenantId || !applicationId) {\n return null;\n }\n return { userId, tenantId, applicationId };\n }\n\n async evaluatePending(force: boolean): Promise<WelcomeOnboardingPendingEvaluation | null> {\n const context = this.resolveContext();\n if (!context) {\n return null;\n }\n\n const progress = await this.progressService.getProgress();\n if (!force && this.progressService.isSnoozed(progress)) {\n return null;\n }\n\n const steps = await this.planService.assembleFullPlan(context);\n if (steps.length === 0) {\n return null;\n }\n\n const hasIncomplete = steps.some(\n (step) => !this.progressService.isStepComplete(step, progress, context),\n );\n if (!force && !hasIncomplete) {\n return null;\n }\n\n return { context, steps };\n }\n\n /** Index of the first step that is not completed/skipped for this session. */\n resolveFirstIncompleteStepIndex(\n steps: AXPOnboardingStep[],\n context: AXPOnboardingContext,\n progress: Awaited<ReturnType<AXPOnboardingProgressService['getProgress']>>,\n ): number {\n const index = steps.findIndex(\n (step) => !this.progressService.isStepComplete(step, progress, context),\n );\n return index >= 0 ? index : 0;\n }\n\n //#endregion\n\n //#region ----- Preferences -----\n\n async loadPreferenceContext(): Promise<Record<string, unknown>> {\n this.preferenceSettings = await this.settingDefinitions.collectSettingsByKeys(\n AXPPlatformScope.User,\n WELCOME_PREFERENCE_SETTING_KEYS,\n );\n\n const inheritedDefaults = await this.settingsService.defaultValues(AXPPlatformScope.User);\n const context: Record<string, unknown> = { ...inheritedDefaults };\n\n for (const setting of this.preferenceSettings) {\n const value = await this.settingsService.get(setting.name);\n if (value !== undefined && value !== null) {\n context[setting.name] = value;\n }\n }\n\n return context;\n }\n\n async savePreferences(formContext: Record<string, unknown> | null | undefined): Promise<void> {\n if (!formContext || this.preferenceSettings.length === 0) {\n return;\n }\n\n const values: Record<string, unknown> = {};\n for (const setting of this.preferenceSettings) {\n if (Object.prototype.hasOwnProperty.call(formContext, setting.name)) {\n values[setting.name] = formContext[setting.name];\n }\n }\n\n if (Object.keys(values).length === 0) {\n return;\n }\n\n await this.settingsService.scope(AXPPlatformScope.User).set(values, { flush: true });\n }\n\n //#endregion\n\n //#region ----- Resume (sub-flows e.g. change photo) -----\n\n private contextKey(context: AXPOnboardingContext): string {\n return `${context.userId}:${context.tenantId}:${context.applicationId}`;\n }\n\n setResumeState(context: AXPOnboardingContext, stepId: string): void {\n this.resumeContextKey = this.contextKey(context);\n this.resumeStepId = stepId;\n }\n\n resolveResumeStepIndex(context: AXPOnboardingContext, steps: AXPOnboardingStep[]): number {\n if (this.resumeContextKey !== this.contextKey(context) || !this.resumeStepId) {\n return 0;\n }\n\n const index = steps.findIndex((step) => step.id === this.resumeStepId);\n return index >= 0 ? index : 0;\n }\n\n clearResumeState(): void {\n this.resumeContextKey = null;\n this.resumeStepId = null;\n }\n\n hasActiveResumeState(): boolean {\n return this.resumeContextKey != null && this.resumeStepId != null;\n }\n\n //#endregion\n\n //#region ----- Progress -----\n\n async markStep(\n step: AXPOnboardingStep,\n context: AXPOnboardingContext,\n status: 'completed' | 'skipped',\n ): Promise<void> {\n if (status === 'completed') {\n await this.progressService.markComplete(step, context);\n return;\n }\n await this.progressService.markSkipped(step, context);\n }\n\n async markSteps(\n steps: AXPOnboardingStep[],\n context: AXPOnboardingContext,\n status: 'completed' | 'skipped',\n ): Promise<void> {\n let progress = await this.progressService.getProgress();\n for (const step of steps) {\n progress =\n status === 'completed'\n ? await this.progressService.markComplete(step, context, progress)\n : await this.progressService.markSkipped(step, context, progress);\n }\n }\n\n async persistAll(\n steps: AXPOnboardingStep[],\n context: AXPOnboardingContext,\n status: 'completed' | 'skipped',\n ): Promise<void> {\n let progress = await this.progressService.getProgress();\n for (const step of steps) {\n progress =\n status === 'completed'\n ? await this.progressService.markComplete(step, context, progress)\n : await this.progressService.markSkipped(step, context, progress);\n }\n }\n\n async setRemindLater(): Promise<void> {\n const until = new Date(Date.now() + REMIND_LATER_HOURS * 60 * 60 * 1000).toISOString();\n await this.progressService.setRemindLater(until);\n }\n\n //#endregion\n\n //#region ----- Step layout -----\n\n buildStepLayout(step: AXPOnboardingStep): AXPWidgetNode {\n const builder = this.layoutBuilder.create();\n\n builder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .setAlignItems('stretch')\n .setJustifyContent('flex-start');\n\n const settingKeys = step.settingKeys ?? [];\n if (settingKeys.length > 0) {\n this.appendPreferenceFields(flex, settingKeys);\n }\n\n const actions = step.actions ?? [];\n if (actions.length > 0) {\n flex.flex((row) => {\n row.setDirection('row').setGap('8px').setWrap('wrap');\n for (const action of actions) {\n row.customWidget('button-action', {\n text: action.text,\n icon: action.icon,\n look: { id: 'outline' },\n color: { id: 'primary' },\n command: action.command,\n });\n }\n });\n }\n });\n\n return builder.build();\n }\n\n private appendPreferenceFields(flex: IFlexContainerBuilder, settingKeys: string[]): void {\n const settings = this.preferenceSettings.filter((setting) => settingKeys.includes(setting.name));\n for (const setting of settings) {\n flex.formField(setting.title, (formField) => {\n formField.path(setting.name);\n\n if (setting.description) {\n formField.setOptions({\n hint: setting.description,\n hintDisplayMode: 'note',\n });\n }\n\n const widgetOptions = { ...(setting.widget.options ?? {}) };\n const visibilityExpr = widgetOptions['visibility'];\n if (typeof visibilityExpr === 'string') {\n formField.visible(visibilityExpr);\n delete widgetOptions['visibility'];\n }\n\n formField.customWidget(setting.widget.type, {\n ...widgetOptions,\n ...(setting.isRequired ? { validations: [{ rule: 'required' }] } : {}),\n });\n });\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPHomePageService } from '@acorex-platform/framework-client/common';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { AXPWelcomeOnboardingFlowService } from '../../../onboarding/welcome-onboarding-flow.service';\n\n//#region ----- Welcome onboarding route guard -----\n\nexport const canActivateWelcomeOnboarding: CanActivateFn = async (route: ActivatedRouteSnapshot) => {\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n const flowService = inject(AXPWelcomeOnboardingFlowService);\n const homePageService = inject(AXPHomePageService);\n\n if (!sessionService.hasSessionCredentials()) {\n return router.createUrlTree(['/auth/login']);\n }\n\n if (!sessionService.tenant?.id) {\n return router.createUrlTree(['/auth/account/tenant-chooser']);\n }\n\n if (!sessionService.application?.id) {\n return router.createUrlTree(['/auth/account/app-chooser']);\n }\n\n const force =\n route.queryParamMap.get('force') === '1' || route.queryParamMap.get('force') === 'true';\n\n const pending = await flowService.evaluatePending(force);\n if (!pending) {\n if (flowService.hasActiveResumeState()) {\n return true;\n }\n return await homePageService.resolveAuthorizedHomeUrlTree();\n }\n\n return true;\n};\n\n//#endregion\n","import { AXPAuthGuard, AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPHomePageService } from '@acorex-platform/framework-client/common';\nimport { AXPComponentSlotModule } from '@acorex-platform/framework-client/core';\nimport { NgModule, inject } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivateFn,\n ROUTES,\n Router,\n RouterStateSnapshot,\n Routes,\n} from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\nimport { AXMAppChooserSlotComponent } from './app-chooser/app-chooser-slot.component';\nimport { AXMAuthProfileSlotComponent } from './profile/profile-slot.component';\nimport { AXMUserProfileCardSlotComponent } from './user-profile-card/user-profile-card.component';\nimport { AXMPwaInstallPromptComponent } from '../install/pwa-install-prompt.component';\nimport { AXMUserDeviceSessionsService, AXMUserDeviceSessionsServiceImp } from './user-sessions/user-sessions.service';\nimport { canActivateTenantChooser } from './tenant-chooser/tenant-chooser.guard';\nimport { canActivateAppChooser } from './app-chooser/app-chooser.guard';\nimport { canActivateWelcomeOnboarding } from './welcome-onboarding/welcome-onboarding.guard';\n\nfunction routesFacory() {\n let routes: Routes = [];\n routes = [\n {\n path: 'tenant-chooser',\n loadComponent: () =>\n import('./tenant-chooser/tenant-chooser.component').then((c) => c.AXPAuthTenantChooserComponent),\n canActivate: [AXPAuthGuard, canActivateTenantChooser],\n },\n {\n path: 'waiting-room',\n loadComponent: () =>\n import('./waiting-room/waiting-room.component').then((c) => c.AXPAuthWaitingRoomComponent),\n canActivate: [AXPAuthGuard],\n },\n {\n path: 'session-limit',\n loadComponent: () =>\n import('./session-limit/session-limit.component').then((c) => c.AXPAuthSessionLimitComponent),\n canActivate: [AXPAuthGuard],\n },\n {\n path: 'app-chooser',\n loadComponent: () => import('./app-chooser/app-chooser.component').then((c) => c.AXPAuthAppChooserComponent),\n canActivate: [AXPAuthGuard, canActivateAppChooser],\n },\n {\n path: 'welcome-onboarding',\n loadComponent: () =>\n import('./welcome-onboarding/welcome-onboarding-page.component').then(\n (c) => c.AXPAuthWelcomeOnboardingPageComponent,\n ),\n canActivate: [AXPAuthGuard, canActivateWelcomeOnboarding],\n },\n ];\n return routes;\n}\n\n@NgModule({\n declarations: [],\n imports: [\n AXPComponentSlotModule.forChild({\n 'root-side-menu-header': [\n {\n priority: 1,\n name: 'user-card',\n component: AXMUserProfileCardSlotComponent,\n },\n ],\n 'root-footer-end': [\n {\n priority: 20,\n name: 'pwa-install-prompt',\n component: AXMPwaInstallPromptComponent,\n },\n ],\n 'root-layout-overlay': [\n {\n priority: 10,\n name: 'pwa-install-prompt',\n component: AXMPwaInstallPromptComponent,\n },\n ],\n 'root-header-end': [\n {\n priority: 98,\n name: 'app-choser',\n component: AXMAppChooserSlotComponent,\n },\n {\n priority: 99,\n name: 'profile',\n component: AXMAuthProfileSlotComponent,\n },\n ],\n }),\n ],\n exports: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n {\n provide: AXMUserDeviceSessionsService,\n useClass: AXMUserDeviceSessionsServiceImp,\n },\n ],\n})\nexport class AXPAccountModule {}\n","import { AXOverlayRef, AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXPSessionService, AXPSessionStatus } from '@acorex-platform/framework-client/auth';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { verifyPassword } from '@acorex-platform/framework-shared/core';\nimport { DestroyRef, Injectable, Injector, afterNextRender, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { defaultTo, get, isEmpty, isNil } from 'lodash';\nimport { filter, firstValueFrom, take } from 'rxjs';\n\nimport { AXPAuthSettings } from '@acorex-platform/module-auth-client/contracts';\n\n//#region ---- Idle lock service ----\n\nconst IDLE_CHECK_INTERVAL_MS = 1_000;\nconst MOUSE_MOVE_THROTTLE_MS = 1_000;\nconst DEFAULT_LOCK_WHEN_IDLE_MINUTES = 15;\nconst SECURITY_MANAGEMENT_MODULE = 'SecurityManagement';\nconst SECURITY_MANAGEMENT_USER_ENTITY = 'User';\n\nconst LOCK_WHEN_IDLE_SETTING_KEYS = [AXPAuthSettings.LockWhenIdleEnabled, AXPAuthSettings.LockWhenIdleMinutes] as const;\n\n/**\n * Tracks user inactivity and locks the session overlay when idle threshold is exceeded.\n * Requires the Lock When Idle setting to be enabled; unlock uses PIN when configured, otherwise password.\n * Locked state is stored on {@link AXPSessionService.SESSION_KEY} and survives page refresh and browser restart.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPIdleLockService {\n //#region ---- State ----\n\n readonly locked = signal(false);\n\n private readonly idleTimeoutMs = signal(DEFAULT_LOCK_WHEN_IDLE_MINUTES * 60_000);\n private readonly enabled = signal(false);\n\n /** Whether manual or idle lock is available (Lock When Idle setting is enabled). */\n readonly canLock = this.enabled.asReadonly();\n\n private readonly storedPinCode = signal('');\n\n private lastActivityAt = Date.now();\n private lastMouseMoveAt = 0;\n private idleCheckTimerId: ReturnType<typeof setInterval> | null = null;\n private overlayRef: AXOverlayRef<unknown> | null = null;\n private overlayOpening = false;\n private enableTask: Promise<void> = Promise.resolve();\n private pendingLockScreenOffer = false;\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly entityService = inject(AXPEntityService);\n private readonly overlayService = inject(AXOverlayService);\n private readonly platform = inject(AXPlatform);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n this.sessionService.status$\n .pipe(\n filter(\n (status) =>\n status === AXPSessionStatus.Authorized ||\n status === AXPSessionStatus.SignedOut ||\n status === AXPSessionStatus.Expired,\n ),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((status) => {\n if (status === AXPSessionStatus.Authorized) {\n void this.scheduleEnable();\n return;\n }\n\n void this.handleInactiveSession(status);\n });\n\n afterNextRender(\n () => {\n if (this.sessionService.isLocked() && this.sessionService.isAuthorized) {\n void this.scheduleEnable();\n }\n },\n { injector: this.injector },\n );\n\n this.settingsService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (!LOCK_WHEN_IDLE_SETTING_KEYS.some((key) => event.keys.includes(key))) {\n return;\n }\n\n void this.applyLockWhenIdleSettingChange();\n });\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n hasPinCode(): boolean {\n return !isEmpty(this.storedPinCode());\n }\n\n verifyPin(pin: string): boolean {\n const expected = this.storedPinCode();\n return !isEmpty(expected) && pin === expected;\n }\n\n async verifyPassword(password: string): Promise<boolean> {\n const userId = this.sessionService.user?.id;\n if (isNil(userId) || isEmpty(password) || !this.canLoadUserSecurityFields()) {\n return false;\n }\n\n try {\n const user = await this.entityService\n .withEntity(SECURITY_MANAGEMENT_MODULE, SECURITY_MANAGEMENT_USER_ENTITY)\n .data<string>()\n .byKey(userId);\n\n return await verifyPassword(password, get(user, 'password'));\n } catch (error) {\n console.error('Failed to verify password for session unlock', error);\n return false;\n }\n }\n\n unlock(): void {\n this.locked.set(false);\n this.sessionService.setLocked(false);\n this.closeLockOverlay();\n this.lastActivityAt = Date.now();\n }\n\n /** Locks the session overlay when Lock When Idle is enabled. */\n lockScreen(): void {\n this.lock();\n }\n\n /** Marks that PIN setup succeeded so the caller can offer lock-screen activation. */\n requestLockScreenOffer(): void {\n this.pendingLockScreenOffer = true;\n }\n\n /** Returns whether PIN setup requested a lock-screen offer, then clears the flag. */\n consumeLockScreenOffer(): boolean {\n const pending = this.pendingLockScreenOffer;\n this.pendingLockScreenOffer = false;\n return pending;\n }\n\n async refreshPinState(): Promise<void> {\n if (!this.isOperational()) {\n this.storedPinCode.set('');\n return;\n }\n\n if (!this.canLoadUserSecurityFields()) {\n this.storedPinCode.set('');\n return;\n }\n\n const userId = this.sessionService.user?.id;\n if (isNil(userId)) {\n this.storedPinCode.set('');\n return;\n }\n\n try {\n const user = await this.entityService\n .withEntity(SECURITY_MANAGEMENT_MODULE, SECURITY_MANAGEMENT_USER_ENTITY)\n .data<string>()\n .byKey(userId);\n\n const pinCode = defaultTo(get(user, 'pinCode'), '');\n this.storedPinCode.set(pinCode);\n } catch (error) {\n console.error('Failed to load security PIN for idle lock', error);\n this.storedPinCode.set('');\n }\n }\n\n /** Refreshes lock-when-idle settings only (no User entity fetch). Used by profile menu hooks. */\n async refreshLockMenuState(): Promise<void> {\n await this.refreshConfiguration();\n }\n\n /** Refreshes lock settings and PIN state for menu/commands. */\n async refreshLockState(): Promise<void> {\n await this.refreshConfiguration();\n\n if (!this.isOperational()) {\n return;\n }\n\n await this.ensurePinStateLoaded();\n }\n\n /** Restores the lock overlay when the persisted session is locked. */\n restoreFromPersistedSession(): Promise<void> {\n if (!this.sessionService.isLocked()) {\n return Promise.resolve();\n }\n\n return this.scheduleEnable();\n }\n\n /** Re-evaluates idle lock after the user sets or changes their security PIN. */\n async notifyPinChanged(): Promise<void> {\n await this.refreshConfiguration();\n\n if (!this.isOperational()) {\n return;\n }\n\n const status = await firstValueFrom(this.sessionService.status$);\n if (status === AXPSessionStatus.Authorized) {\n await this.scheduleEnable();\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /** PIN/password entity reads require a fully authorized app context, except when restoring a lock overlay. */\n private canLoadUserSecurityFields(): boolean {\n return this.sessionService.isReadyForAppScopedApi || this.sessionService.isLocked();\n }\n\n private async ensurePinStateLoaded(): Promise<void> {\n if (!this.isOperational()) {\n this.storedPinCode.set('');\n return;\n }\n\n if (!this.canLoadUserSecurityFields()) {\n await firstValueFrom(\n this.sessionService.isReadyForAppScopedApi$.pipe(\n filter((ready) => ready),\n take(1),\n ),\n );\n }\n\n await this.refreshPinState();\n }\n\n private scheduleEnable(): Promise<void> {\n this.enableTask = this.enableTask.then(() => this.runEnable());\n return this.enableTask;\n }\n\n private async runEnable(): Promise<void> {\n await this.refreshConfiguration();\n\n if (this.sessionService.isLocked()) {\n await this.ensurePinStateLoaded();\n this.restoreLockedSession();\n return;\n }\n\n if (!this.enabled()) {\n this.disable(false);\n return;\n }\n\n await this.ensurePinStateLoaded();\n this.resetUnlockedRuntimeState();\n this.attachActivityListeners();\n this.startIdleCheck();\n }\n\n /** Idle lock is active when enabled, or when a persisted lock must be restored/unlocked. */\n private isOperational(): boolean {\n return this.enabled() || this.sessionService.isLocked();\n }\n\n private restoreLockedSession(): void {\n this.locked.set(true);\n\n if (!this.overlayRef && !this.overlayOpening) {\n void this.openLockOverlay();\n }\n\n if (this.enabled()) {\n this.attachActivityListeners();\n this.startIdleCheck();\n }\n }\n\n private async handleInactiveSession(status: AXPSessionStatus): Promise<void> {\n if (status !== AXPSessionStatus.SignedOut && status !== AXPSessionStatus.Expired) {\n return;\n }\n\n const isLoading = await firstValueFrom(this.sessionService.isLoading$);\n if (isLoading) {\n return;\n }\n\n this.disable(true);\n }\n\n private disable(clearPersistedLock = false): void {\n const preserveLockedSession = this.sessionService.isLocked() && !clearPersistedLock;\n\n this.enabled.set(false);\n\n if (!preserveLockedSession) {\n this.locked.set(false);\n this.closeLockOverlay();\n }\n\n if (clearPersistedLock) {\n this.sessionService.setLocked(false);\n }\n\n this.detachActivityListeners();\n this.stopIdleCheck();\n }\n\n private async refreshConfiguration(): Promise<void> {\n const lockWhenIdleEnabled = await this.settingsService.get<boolean>(AXPAuthSettings.LockWhenIdleEnabled);\n const minutes = await this.settingsService.get<number>(AXPAuthSettings.LockWhenIdleMinutes);\n const resolvedMinutes = typeof minutes === 'number' && minutes > 0 ? minutes : DEFAULT_LOCK_WHEN_IDLE_MINUTES;\n\n this.enabled.set(lockWhenIdleEnabled === true);\n this.idleTimeoutMs.set(resolvedMinutes * 60_000);\n }\n\n private async applyLockWhenIdleSettingChange(): Promise<void> {\n const status = await firstValueFrom(this.sessionService.status$);\n if (status !== AXPSessionStatus.Authorized) {\n return;\n }\n\n await this.scheduleEnable();\n }\n\n private recordActivity(): void {\n if (!this.enabled() || this.locked()) {\n return;\n }\n\n this.lastActivityAt = Date.now();\n }\n\n private lock(): void {\n if (!this.enabled() || this.locked()) {\n return;\n }\n\n this.locked.set(true);\n this.sessionService.setLocked(true);\n void this.openLockOverlay();\n }\n\n private openLockOverlay(): void {\n if (this.overlayRef || this.overlayOpening || !this.shouldShowLockOverlay()) {\n return;\n }\n\n afterNextRender(\n () => {\n void this.createLockOverlay();\n },\n { injector: this.injector },\n );\n }\n\n private shouldShowLockOverlay(): boolean {\n return this.locked() || this.sessionService.isLocked();\n }\n\n private async createLockOverlay(): Promise<void> {\n if (this.overlayRef || this.overlayOpening || !this.shouldShowLockOverlay()) {\n return;\n }\n\n this.overlayOpening = true;\n this.locked.set(true);\n\n try {\n const { AXMSessionLockOverlayComponent: overlayComponent } =\n await import('../../features/session-lock/session-lock-overlay.component');\n\n const panelClasses = ['axm-session-lock-overlay-shell'];\n if (this.platform.isDark()) {\n panelClasses.push('ax-dark');\n }\n\n const ref = await this.overlayService.create(overlayComponent, {\n centered: false,\n width: '100%',\n panelClass: panelClasses,\n backdrop: {\n enabled: false,\n background: false,\n closeOnClick: false,\n },\n onDispose: () => {\n this.overlayRef = null;\n },\n });\n\n if (!this.shouldShowLockOverlay()) {\n ref.dispose();\n return;\n }\n\n this.locked.set(true);\n this.overlayRef = ref;\n } catch (error) {\n console.error('Failed to open session lock overlay', error);\n\n if (this.shouldShowLockOverlay()) {\n window.setTimeout(() => this.openLockOverlay(), 250);\n }\n } finally {\n this.overlayOpening = false;\n }\n }\n\n private closeLockOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private startIdleCheck(): void {\n this.stopIdleCheck();\n this.idleCheckTimerId = setInterval(() => {\n if (!this.enabled() || this.locked()) {\n return;\n }\n\n if (Date.now() - this.lastActivityAt >= this.idleTimeoutMs()) {\n this.lock();\n }\n }, IDLE_CHECK_INTERVAL_MS);\n }\n\n private stopIdleCheck(): void {\n if (!isNil(this.idleCheckTimerId)) {\n clearInterval(this.idleCheckTimerId);\n this.idleCheckTimerId = null;\n }\n }\n\n private resetUnlockedRuntimeState(): void {\n this.locked.set(false);\n this.closeLockOverlay();\n this.lastActivityAt = Date.now();\n }\n\n //#region ---- Activity listeners ----\n\n private readonly onActivity = (): void => {\n this.recordActivity();\n };\n\n private readonly onMouseMove = (): void => {\n const now = Date.now();\n if (now - this.lastMouseMoveAt < MOUSE_MOVE_THROTTLE_MS) {\n return;\n }\n\n this.lastMouseMoveAt = now;\n this.recordActivity();\n };\n\n private attachActivityListeners(): void {\n this.detachActivityListeners();\n const events: Array<keyof DocumentEventMap> = ['mousedown', 'keydown', 'wheel', 'touchstart', 'scroll', 'click'];\n events.forEach((eventName) => document.addEventListener(eventName, this.onActivity, true));\n document.addEventListener('mousemove', this.onMouseMove, true);\n }\n\n private detachActivityListeners(): void {\n const events: Array<keyof DocumentEventMap> = ['mousedown', 'keydown', 'wheel', 'touchstart', 'scroll', 'click'];\n events.forEach((eventName) => document.removeEventListener(eventName, this.onActivity, true));\n document.removeEventListener('mousemove', this.onMouseMove, true);\n }\n\n //#endregion\n}\n\n//#endregion\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityLogoRegistrationService } from '@acorex-platform/framework-client/core';\nimport { combineLatest, distinctUntilChanged, EMPTY, firstValueFrom, from, switchMap } from 'rxjs';\n\n//#region ---- Entity logo sync ----\n\n/** Registers tenant/application logo providers when the session is authorized. */\n@Injectable({ providedIn: 'root' })\nexport class AXPLogoEntitySyncService {\n private readonly session = inject(AXPSessionService);\n private readonly logoRegistration = inject(AXPEntityLogoRegistrationService);\n private readonly destroyRef = inject(DestroyRef);\n private syncGeneration = 0;\n\n constructor() {\n combineLatest([this.session.isAuthorized$, this.session.tenant$])\n .pipe(\n distinctUntilChanged(\n ([authorized, tenant], [previousAuthorized, previousTenant]) =>\n authorized === previousAuthorized && tenant?.id === previousTenant?.id,\n ),\n switchMap(([authorized, tenant]) => {\n if (!authorized || !tenant?.id || !this.session.getToken()) {\n this.syncGeneration++;\n return EMPTY;\n }\n const generation = this.syncGeneration;\n return from(this.syncEntityLogos(generation));\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n async syncEntityLogos(generation: number): Promise<void> {\n if (!this.canSyncLogos() || generation !== this.syncGeneration) {\n return;\n }\n\n const tenants = await firstValueFrom(this.session.tenants$);\n if (generation !== this.syncGeneration || !this.canSyncLogos()) {\n return;\n }\n\n this.logoRegistration.registerTenants(\n tenants.map((tenant) => ({\n id: tenant.id,\n title: tenant.title,\n logo: tenant.logo,\n })),\n );\n\n if (!this.session.tenant?.id) {\n return;\n }\n\n const applications = await firstValueFrom(this.session.applications$);\n if (generation !== this.syncGeneration || !this.canSyncLogos()) {\n return;\n }\n\n this.logoRegistration.registerApplications(\n applications.map((application) => ({\n id: application.id,\n title: application.title,\n logoUrl: application.logoUrl,\n })),\n );\n }\n\n private canSyncLogos(): boolean {\n return this.session.isAuthorized && !!this.session.getToken() && !!this.session.tenant?.id;\n }\n}\n\n//#endregion\n","//#region ---- Profile page component keys ----\n\n/** Full-tab activity heatmap on the profile Activity group. */\nexport const PROFILE_ACTIVITY_CHART_COMPONENT_KEY = 'auth.profile-activity-chart';\n\n/** Danger-zone block for the delete-account profile section. */\nexport const PROFILE_DELETE_ACCOUNT_DANGER_ZONE_COMPONENT_KEY = 'auth.profile-delete-account-danger-zone';\n\n//#endregion\n","import { AXPExecuteCommand } from '@acorex-platform/framework-shared/core';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\r\nimport { AXPSecurityManagementFeatureKeys } from '@acorex-platform/module-security-management-client/contracts';\r\nimport {\r\n AXPUserProfileGroupsPayload,\r\n AXPUserProfileSection,\r\n AXPUserProfileSectionsPayload,\r\n PROFILE_PAGE_GROUPS_HOOK,\r\n PROFILE_PAGE_SECTIONS_HOOK,\r\n} from './profile-page.types';\r\nimport {\r\n PROFILE_ACTIVITY_CHART_COMPONENT_KEY,\r\n PROFILE_DELETE_ACCOUNT_DANGER_ZONE_COMPONENT_KEY,\r\n} from './profile-page.component-keys';\r\n\r\n//#region ---- Helpers ----\r\n\r\nconst comingSoon = (messageKey: string): AXPExecuteCommand => ({\r\n name: AXMAuthCommandKeys.Profile.ComingSoon,\r\n options: { messageKey },\r\n});\r\n\r\n//#endregion\r\n\r\n//#region ---- Core profile groups ----\r\n\r\n/** Registers built-in profile page tab groups. */\r\nexport const CoreProfileGroupsHookProvider: AXPHookProvider<\r\n AXPUserProfileGroupsPayload,\r\n AXPUserProfileGroupsPayload\r\n> = {\r\n key: PROFILE_PAGE_GROUPS_HOOK,\r\n priority: 0,\r\n execute: (payload) => ({\r\n ...payload,\r\n groups: [\r\n ...payload.groups,\r\n {\r\n id: 'account',\r\n title: '@auth:profile-page.groups.account.title',\r\n icon: 'far fa-user',\r\n priority: 10,\r\n },\r\n {\r\n id: 'security',\r\n title: '@auth:profile-page.groups.security.title',\r\n icon: 'far fa-shield-halved',\r\n priority: 20,\r\n },\r\n {\r\n id: 'requests',\r\n title: '@auth:profile-page.groups.requests.title',\r\n icon: 'far fa-inbox',\r\n priority: 30,\r\n },\r\n {\r\n id: 'activity',\r\n title: '@auth:profile-page.groups.activity.title',\r\n icon: 'far fa-clock-rotate-left',\r\n priority: 40,\r\n content: {\r\n mode: 'component',\r\n componentKey: PROFILE_ACTIVITY_CHART_COMPONENT_KEY,\r\n },\r\n },\r\n ],\r\n }),\r\n};\r\n\r\n//#endregion\r\n\r\n//#region ---- Core profile sections ----\r\n\r\n/** Registers built-in profile hub section cards and actions. */\r\nexport const CoreProfileSectionsHookProvider: AXPHookProvider<\r\n AXPUserProfileSectionsPayload,\r\n AXPUserProfileSectionsPayload\r\n> = {\r\n key: PROFILE_PAGE_SECTIONS_HOOK,\r\n priority: 0,\r\n execute: (payload) => {\r\n const contributed: AXPUserProfileSection[] = [\r\n {\r\n id: 'welcome-onboarding',\r\n groupId: 'account',\r\n title: '@auth:welcome-onboarding.profile.resume-section.title',\r\n description: '@auth:welcome-onboarding.profile.resume-section.description',\r\n icon: 'far fa-hand-wave',\r\n priority: 5,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'resume-welcome',\r\n title: '@auth:welcome-onboarding.profile.resume-action',\r\n icon: 'far fa-play',\r\n command: {\r\n name: AXMAuthCommandKeys.Onboarding.Welcome,\r\n options: { force: true },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: 'basic-info',\r\n groupId: 'account',\r\n title: '@auth:profile-page.sections.basic-info.title',\r\n description: '@auth:profile-page.sections.basic-info.description',\r\n icon: 'far fa-address-card',\r\n priority: 10,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'edit-basic-info',\r\n title: '@auth:profile-page.sections.basic-info.actions.edit',\r\n icon: 'far fa-pen',\r\n command: { name: AXMAuthCommandKeys.Profile.EditAccountInfo },\r\n },\r\n ],\r\n },\r\n {\r\n id: 'profile-photo',\r\n groupId: 'account',\r\n title: '@auth:profile-page.sections.profile-photo.title',\r\n description: '@auth:profile-page.sections.profile-photo.description',\r\n icon: 'far fa-camera',\r\n priority: 15,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'change-profile-photo',\r\n title: '@auth:profile-page.sections.profile-photo.actions.manage',\r\n icon: 'far fa-pen',\r\n command: { name: AXMAuthCommandKeys.Profile.ChangePhoto },\r\n },\r\n ],\r\n },\r\n {\r\n id: 'change-password',\r\n groupId: 'security',\r\n title: '@auth:profile-page.sections.change-password.title',\r\n description: '@auth:profile-page.sections.change-password.description',\r\n icon: 'far fa-key',\r\n priority: 10,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'change-password',\r\n title: '@auth:profile-page.sections.change-password.actions.manage',\r\n icon: 'far fa-pen',\r\n command: { name: AXMAuthCommandKeys.Security.ChangePassword },\r\n },\r\n ],\r\n },\r\n {\r\n id: 'security-pin',\r\n groupId: 'security',\r\n title: '@auth:profile-page.sections.security-pin.title',\r\n description: '@auth:profile-page.sections.security-pin.description',\r\n icon: 'far fa-lock',\r\n priority: 15,\r\n layout: { colSpan: 6 },\r\n },\r\n {\r\n id: 'active-sessions',\r\n groupId: 'security',\r\n title: '@auth:profile-page.sections.active-sessions.title',\r\n description: '@auth:profile-page.sections.active-sessions.description',\r\n icon: 'far fa-laptop-mobile',\r\n priority: 20,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'active-sessions',\r\n title: '@auth:profile-page.sections.active-sessions.actions.manage',\r\n icon: 'far fa-arrow-right',\r\n command: { name: AXMAuthCommandKeys.Session.OpenSessions },\r\n },\r\n ],\r\n },\r\n {\r\n id: 'two-factor',\r\n groupId: 'security',\r\n title: '@auth:profile-page.sections.two-factor.title',\r\n description: '@auth:profile-page.sections.two-factor.description',\r\n icon: 'far fa-shield-keyhole',\r\n priority: 30,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'manage-two-factor',\r\n title: '@auth:profile-page.sections.two-factor.actions.manage',\r\n icon: 'far fa-pen',\r\n command: { name: AXMAuthCommandKeys.Security.ManageTwoFactor }, // auth:manage-two-factor\r\n },\r\n ],\r\n },\r\n {\r\n id: 'login-history',\r\n groupId: 'security',\r\n title: '@auth:profile-page.sections.login-history.title',\r\n description: '@auth:profile-page.sections.login-history.description',\r\n icon: 'far fa-right-to-bracket',\r\n priority: 40,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'view-login-history',\r\n title: '@auth:profile-page.sections.login-history.actions.manage',\r\n icon: 'far fa-arrow-right',\r\n command: { name: AXMAuthCommandKeys.Security.ViewLoginHistory },\r\n },\r\n ],\r\n },\r\n {\r\n id: 'delete-account',\r\n groupId: 'account',\r\n priority: 100,\r\n feature: AXPSecurityManagementFeatureKeys.DeleteAccount,\r\n content: {\r\n mode: 'component',\r\n componentKey: PROFILE_DELETE_ACCOUNT_DANGER_ZONE_COMPONENT_KEY,\r\n },\r\n layout: { colSpan: 12 },\r\n },\r\n ];\r\n\r\n const matching = payload.groupId\r\n ? contributed.filter((section) => section.groupId === payload.groupId)\r\n : contributed;\r\n\r\n return {\r\n ...payload,\r\n sections: [...payload.sections, ...matching],\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { inject } from '@angular/core';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\r\nimport {\r\n RootConfig as SecurityManagementRootConfig,\r\n} from '@acorex-platform/module-security-management-client/contracts';\r\nimport { defaultTo, get, isEmpty, isNil } from 'lodash';\r\n\r\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\r\nimport { AXPUserProfileSectionsPayload, PROFILE_PAGE_SECTIONS_HOOK, isUserProfileSectionsGroupRequested } from './profile-page.types';\r\n\r\n//#region ---- Security PIN section hook ----\r\n\r\nconst SECURITY_PIN_SECTION_ID = 'security-pin';\r\n\r\n/** Enriches the security PIN section with change/remove actions when a PIN exists. */\r\nexport const SecurityPinSectionHookProvider: AXPHookProvider<\r\n AXPUserProfileSectionsPayload,\r\n AXPUserProfileSectionsPayload\r\n> = {\r\n key: PROFILE_PAGE_SECTIONS_HOOK,\r\n priority: 10,\r\n execute: async (payload) => {\r\n if (!isUserProfileSectionsGroupRequested(payload, 'security')) {\r\n return payload;\r\n }\r\n\r\n const hasPinCode = await loadHasPinCode();\r\n\r\n return {\r\n ...payload,\r\n sections: payload.sections.map((section) => {\r\n if (section.id !== SECURITY_PIN_SECTION_ID) {\r\n return section;\r\n }\r\n\r\n return {\r\n ...section,\r\n actions: [\r\n {\r\n name: 'set-pin-code',\r\n title: hasPinCode\r\n ? '@auth:profile-page.sections.security-pin.actions.change'\r\n : '@auth:profile-page.sections.security-pin.actions.manage',\r\n icon: 'far fa-pen',\r\n default: true,\r\n command: { name: AXMAuthCommandKeys.Security.SetPinCode },\r\n },\r\n ...(hasPinCode\r\n ? [\r\n {\r\n name: 'remove-pin-code',\r\n title: '@auth:profile-page.sections.security-pin.actions.remove',\r\n icon: 'far fa-trash-can',\r\n color: 'danger' as const,\r\n command: { name: AXMAuthCommandKeys.Security.RemovePinCode },\r\n },\r\n ]\r\n : []),\r\n ],\r\n };\r\n }),\r\n };\r\n },\r\n};\r\n\r\nasync function loadHasPinCode(): Promise<boolean> {\r\n const sessionService = inject(AXPSessionService);\r\n const entityService = inject(AXPEntityService);\r\n const userId = sessionService.user?.id;\r\n\r\n if (isNil(userId)) {\r\n return false;\r\n }\r\n\r\n try {\r\n const user = await entityService\r\n .withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.users.name)\r\n .data<string>()\r\n .byKey(userId);\r\n\r\n return !isEmpty(defaultTo(get(user, 'pinCode'), ''));\r\n } catch (error) {\r\n console.error('Failed to load security PIN for profile section', error);\r\n return false;\r\n }\r\n}\r\n\r\n//#endregion\r\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { Injectable, inject } from '@angular/core';\nimport { isNil } from 'lodash';\n\n//#region ---- Password change tracking service ----\n\nconst STORAGE_KEY_PREFIX = 'axp-auth:last-password-change-at:';\n\n/** Persists the last self-service password change timestamp per user (client-side). */\n@Injectable({ providedIn: 'root' })\nexport class AXPAuthPasswordChangeTrackingService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n getLastChangedAt(userId?: string): Date | undefined {\n const id = userId ?? this.sessionService.user?.id;\n if (isNil(id)) {\n return undefined;\n }\n\n const raw = localStorage.getItem(this.buildStorageKey(id));\n if (!raw) {\n return undefined;\n }\n\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n\n recordChange(userId?: string, changedAt: Date = new Date()): void {\n const id = userId ?? this.sessionService.user?.id;\n if (isNil(id)) {\n return;\n }\n\n localStorage.setItem(this.buildStorageKey(id), changedAt.toISOString());\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private buildStorageKey(userId: string): string {\n return `${STORAGE_KEY_PREFIX}${userId}`;\n }\n\n //#endregion\n}\n\n//#endregion\n","import type { AXPUserProfileSectionInsight } from './profile-page.types';\n\n//#region ----- Constants -----\n\nexport const CHANGE_PASSWORD_SECTION_ID = 'change-password';\n\nexport const PROFILE_SECTION_INSIGHTS_PATCH_METADATA_KEY = 'profileSectionInsightsPatch';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type AXPUserProfileSectionInsightsPatch = {\n sectionId: string;\n insights: AXPUserProfileSectionInsight[];\n};\n\n//#endregion\n\n//#region ----- Password insight -----\n\n/** Builds the last-changed insight shown on the Change Password profile card. */\nexport function buildPasswordLastChangedInsights(lastChangedAt: Date): AXPUserProfileSectionInsight[] {\n return [\n {\n id: 'last-password-change',\n icon: 'fa-light fa-fw fa-clock',\n date: lastChangedAt,\n datePrefix: '@auth:profile-page.sections.change-password.insights.last-changed',\n },\n ];\n}\n\n//#endregion\n","import type { AXPUserProfileSectionInsight } from './profile-page.types';\n\n//#region ----- Constants -----\n\nexport const TWO_FACTOR_SECTION_ID = 'two-factor';\n\n//#endregion\n\n//#region ----- Two-factor insight -----\n\n/** Builds the enabled/disabled insight shown on the Two-Factor profile card. */\nexport function buildTwoFactorStatusInsights(enabled: boolean): AXPUserProfileSectionInsight[] {\n return [\n {\n id: 'two-factor-status',\n icon: enabled ? 'fa-light fa-fw fa-shield-check' : 'fa-light fa-fw fa-shield',\n text: enabled\n ? '@auth:profile-page.sections.two-factor.insights.enabled'\n : '@auth:profile-page.sections.two-factor.insights.disabled',\n },\n ];\n}\n\n//#endregion\n","import {\n AXMSecurityManagementDeviceSessionsEntityModel,\n AXMSecurityManagementUsersEntityModel,\n AXMSecurityManagementServerCommands,\n type AXMGetTwoFactorStatusResult,\n RootConfig as SecurityManagementRootConfig,\n} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { runtimeCommandPayloadData } from '@acorex-platform/framework-shared/core';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, get, isEmpty, isNil, orderBy } from 'lodash';\n\nimport { AXPAuthPasswordChangeTrackingService } from '../../../shared/services/password-change-tracking.service';\nimport {\n CHANGE_PASSWORD_SECTION_ID,\n buildPasswordLastChangedInsights,\n} from './profile-password-insight.util';\nimport { buildTwoFactorStatusInsights } from './profile-two-factor-insight.util';\nimport { AXPUserProfileSectionInsight } from './profile-page.types';\n\n//#region ---- Section ids ----\n\nconst BASIC_INFO_SECTION_ID = 'basic-info';\nconst SECURITY_PIN_SECTION_ID = 'security-pin';\nconst ACTIVE_SESSIONS_SECTION_ID = 'active-sessions';\nconst LOGIN_HISTORY_SECTION_ID = 'login-history';\nconst TWO_FACTOR_SECTION_ID = 'two-factor';\n\n//#endregion\n\n//#region ---- Profile page security insights service ----\n\n/** Loads contextual security insights for profile section cards. */\n@Injectable({ providedIn: 'root' })\nexport class AXPUserProfileSecurityInsightsService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly entityService = inject(AXPEntityService);\n private readonly commandService = inject(AXPCommandService);\n private readonly translateService = inject(AXTranslationService);\n private readonly passwordChangeTrackingService = inject(AXPAuthPasswordChangeTrackingService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** Account-tab insights (email on Basic Information). */\n async loadAccountBySectionId(): Promise<Record<string, AXPUserProfileSectionInsight[]>> {\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return {};\n }\n\n const user = await this.loadCurrentUser(userId);\n const basicInfoInsights = this.buildBasicInfoInsights(user);\n if (isEmpty(basicInfoInsights)) {\n return {};\n }\n\n return { [BASIC_INFO_SECTION_ID]: basicInfoInsights };\n }\n\n async loadBySectionId(): Promise<Record<string, AXPUserProfileSectionInsight[]>> {\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return {};\n }\n\n const [sessions, user, twoFactorStatus] = await Promise.all([\n this.loadUserSessions(userId),\n this.loadCurrentUser(userId),\n this.loadTwoFactorStatus(),\n ]);\n\n const insightsBySectionId: Record<string, AXPUserProfileSectionInsight[]> = {};\n\n const passwordInsights = this.buildPasswordInsights(userId, user);\n if (!isEmpty(passwordInsights)) {\n insightsBySectionId[CHANGE_PASSWORD_SECTION_ID] = passwordInsights;\n }\n\n const pinInsights = this.buildPinInsights(user);\n if (!isEmpty(pinInsights)) {\n insightsBySectionId[SECURITY_PIN_SECTION_ID] = pinInsights;\n }\n\n insightsBySectionId[TWO_FACTOR_SECTION_ID] = buildTwoFactorStatusInsights(\n twoFactorStatus?.enabled === true || twoFactorStatus?.enrolled === true,\n );\n\n const activeSessionInsights = await this.buildActiveSessionInsights(sessions);\n if (!isEmpty(activeSessionInsights)) {\n insightsBySectionId[ACTIVE_SESSIONS_SECTION_ID] = activeSessionInsights;\n }\n\n const loginHistoryInsights = this.buildLoginHistoryInsights(sessions);\n if (!isEmpty(loginHistoryInsights)) {\n insightsBySectionId[LOGIN_HISTORY_SECTION_ID] = loginHistoryInsights;\n }\n\n return insightsBySectionId;\n }\n\n //#endregion\n\n //#region ---- Insight builders ----\n\n private buildBasicInfoInsights(\n user: AXMSecurityManagementUsersEntityModel | null,\n ): AXPUserProfileSectionInsight[] {\n const email = defaultTo(user?.email, '').trim();\n return [\n {\n id: 'email',\n icon: 'fa-light fa-fw fa-envelope',\n title: '@general:terms.communication.email',\n text: isEmpty(email)\n ? '@auth:profile-page.sections.basic-info.insights.email-not-set'\n : email,\n },\n ];\n }\n\n private buildPasswordInsights(\n userId: string,\n user: AXMSecurityManagementUsersEntityModel | null,\n ): AXPUserProfileSectionInsight[] {\n const lastChangedAt =\n this.parseValidDate(user?.passwordChangedAt) ??\n this.passwordChangeTrackingService.getLastChangedAt(userId);\n\n if (lastChangedAt) {\n return buildPasswordLastChangedInsights(lastChangedAt);\n }\n\n return [\n {\n id: 'last-password-change',\n icon: 'fa-light fa-fw fa-clock',\n text: '@auth:profile-page.sections.change-password.insights.never-changed',\n },\n ];\n }\n\n private buildPinInsights(user: AXMSecurityManagementUsersEntityModel | null): AXPUserProfileSectionInsight[] {\n const lastChangedAt = this.parseValidDate(user?.pinChangedAt);\n if (lastChangedAt) {\n return [\n {\n id: 'last-pin-change',\n icon: 'fa-light fa-fw fa-clock',\n date: lastChangedAt,\n datePrefix: '@auth:profile-page.sections.security-pin.insights.last-changed',\n },\n ];\n }\n\n const hasPin = !isEmpty(defaultTo(get(user, 'pinCode'), ''));\n return [\n {\n id: 'last-pin-change',\n icon: 'fa-light fa-fw fa-clock',\n text: hasPin\n ? '@auth:profile-page.sections.security-pin.insights.never-changed'\n : '@auth:profile-page.sections.security-pin.insights.not-set',\n },\n ];\n }\n\n private async buildActiveSessionInsights(\n sessions: AXMSecurityManagementDeviceSessionsEntityModel[],\n ): Promise<AXPUserProfileSectionInsight[]> {\n const activeSessions = sessions.filter((session) => String(session.status).toLowerCase() === 'active');\n const flaggedCurrent = activeSessions.filter((session) => session.isActiveSession === true);\n const currentSession =\n (flaggedCurrent.length === 1 ? flaggedCurrent[0] : undefined) ??\n orderBy(\n activeSessions,\n [(session) => this.parseValidDate(session.lastLoginDate)?.getTime() ?? 0],\n ['desc'],\n )[0];\n\n if (isNil(currentSession)) {\n return [];\n }\n\n const deviceSummary = this.formatSessionSummary(currentSession);\n if (isEmpty(deviceSummary)) {\n return [];\n }\n\n const otherActiveCount = activeSessions.filter((session) => session.id !== currentSession.id).length;\n const insights: AXPUserProfileSectionInsight[] = [\n {\n id: 'current-session',\n icon: 'fa-light fa-fw fa-laptop',\n text: deviceSummary,\n },\n ];\n\n if (otherActiveCount > 0) {\n insights.push({\n id: 'other-sessions',\n icon: 'fa-light fa-fw fa-mobile-screen',\n text: await this.translateService.translateAsync(\n '@auth:profile-page.sections.active-sessions.insights.other-devices-value',\n { params: { count: otherActiveCount } },\n ),\n });\n }\n\n return insights;\n }\n\n private buildLoginHistoryInsights(\n sessions: AXMSecurityManagementDeviceSessionsEntityModel[],\n ): AXPUserProfileSectionInsight[] {\n const latestSession = orderBy(\n sessions,\n [(session) => this.parseValidDate(session.lastLoginDate)?.getTime() ?? 0],\n ['desc'],\n )[0];\n\n if (isNil(latestSession)) {\n return [];\n }\n\n const insights: AXPUserProfileSectionInsight[] = [];\n const lastLoginDate = this.parseValidDate(latestSession.lastLoginDate);\n\n if (lastLoginDate) {\n insights.push({\n id: 'last-login',\n icon: 'fa-light fa-fw fa-clock-rotate-left',\n date: lastLoginDate,\n datePrefix: '@auth:profile-page.sections.login-history.insights.last-sign-in',\n });\n }\n\n const location = this.formatLoginLocation(latestSession);\n if (!isEmpty(location)) {\n insights.push({\n id: 'last-login-location',\n icon: 'fa-light fa-fw fa-location-dot',\n text: location,\n });\n }\n\n return insights;\n }\n\n //#endregion\n\n //#region ---- Data loading ----\n\n private async loadCurrentUser(userId: string): Promise<AXMSecurityManagementUsersEntityModel | null> {\n try {\n return await this.entityService\n .withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.users.name)\n .data<string, AXMSecurityManagementUsersEntityModel>()\n .byKey(userId);\n } catch (error) {\n console.error('Failed to load user for profile security insights', error);\n return null;\n }\n }\n\n private async loadUserSessions(userId: string): Promise<AXMSecurityManagementDeviceSessionsEntityModel[]> {\n const response = await this.entityService\n .withEntity(\n SecurityManagementRootConfig.module.name,\n SecurityManagementRootConfig.entities.deviceSessions.name,\n )\n .data<string, AXMSecurityManagementDeviceSessionsEntityModel>()\n .query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{ field: 'userId', operator: { type: 'equal' }, value: userId }],\n },\n });\n\n return response.items ?? [];\n }\n\n private async loadTwoFactorStatus(): Promise<AXMGetTwoFactorStatusResult | null> {\n try {\n const result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.GetTwoFactorStatus,\n {},\n );\n if (!result?.success) {\n return null;\n }\n\n return (runtimeCommandPayloadData(result) as AXMGetTwoFactorStatusResult | undefined) ?? null;\n } catch (error) {\n console.error('Failed to load two-factor status for profile security insights', error);\n return null;\n }\n }\n\n //#endregion\n\n //#region ---- Formatting ----\n\n private parseValidDate(value: unknown): Date | undefined {\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? undefined : value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n\n return undefined;\n }\n\n private formatSessionSummary(session: AXMSecurityManagementDeviceSessionsEntityModel): string {\n const parts = [session.deviceName, session.browser, session.location]\n .map((part) => defaultTo(part, '').trim())\n .filter(Boolean);\n\n return parts.join(' · ');\n }\n\n private formatLoginLocation(session: AXMSecurityManagementDeviceSessionsEntityModel): string {\n const parts = [session.location, session.ipAddress]\n .map((part) => defaultTo(part, '').trim())\n .filter(Boolean);\n\n return parts.join(' · ');\n }\n\n //#endregion\n}\n\n//#endregion\n","import { inject } from '@angular/core';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport { AXPUserProfileSecurityInsightsService } from './profile-page-security-insights.service';\r\nimport {\r\n AXPUserProfileSectionInsight,\r\n AXPUserProfileSectionsPayload,\r\n PROFILE_PAGE_SECTIONS_HOOK,\r\n isUserProfileSectionsGroupRequested,\r\n} from './profile-page.types';\r\n\r\n//#region ---- Security sections insights hook ----\r\n\r\n/** Adds account + security context (email, sessions, login, password, PIN) to profile section cards. */\r\nexport const SecuritySectionsInsightsHookProvider: AXPHookProvider<\r\n AXPUserProfileSectionsPayload,\r\n AXPUserProfileSectionsPayload\r\n> = {\r\n key: PROFILE_PAGE_SECTIONS_HOOK,\r\n priority: 15,\r\n execute: async (payload) => {\r\n const wantAccount = isUserProfileSectionsGroupRequested(payload, 'account');\r\n const wantSecurity = isUserProfileSectionsGroupRequested(payload, 'security');\r\n if (!wantAccount && !wantSecurity) {\r\n return payload;\r\n }\r\n\r\n const insightsService = inject(AXPUserProfileSecurityInsightsService);\r\n const insightsBySectionId: Record<string, AXPUserProfileSectionInsight[]> = {\r\n ...(wantAccount ? await insightsService.loadAccountBySectionId() : {}),\r\n ...(wantSecurity ? await insightsService.loadBySectionId() : {}),\r\n };\r\n\r\n return {\r\n ...payload,\r\n sections: payload.sections.map((section) => {\r\n const insights = insightsBySectionId[section.id];\r\n if (isEmpty(insights)) {\r\n return section;\r\n }\r\n\r\n return {\r\n ...section,\r\n insights,\r\n };\r\n }),\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\r\nimport {\r\n AXPProfileSlotMenuItemsPayload,\r\n PROFILE_SLOT_MENU_ITEMS_HOOK,\r\n} from './profile-slot-menu.types';\r\n\r\n//#region ---- Profile slot logout menu hook ----\r\n\r\n/** Registers the sign-out entry in the profile dropdown. */\r\nexport const ProfileSlotLogoutMenuHookProvider: AXPHookProvider<\r\n AXPProfileSlotMenuItemsPayload,\r\n AXPProfileSlotMenuItemsPayload\r\n> = {\r\n key: PROFILE_SLOT_MENU_ITEMS_HOOK,\r\n priority: 100,\r\n execute: (payload) => ({\r\n ...payload,\r\n items: [\r\n ...payload.items,\r\n {\r\n name: 'logout',\r\n title: '@auth:profile.logout',\r\n icon: 'fa-light fa-arrow-right-from-bracket',\r\n color: 'danger',\r\n shortcuts: [{ keys: 'ctrl+shift+q', allowInEditableFields: true }],\r\n command: { name: AXMAuthCommandKeys.Session.Signout },\r\n } satisfies AXPActionMenuItem,\r\n ],\r\n }),\r\n};\r\n\r\n//#endregion\r\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\r\nimport { inject } from '@angular/core';\r\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { AXPProfileSlotMenuItemsPayload, PROFILE_SLOT_MENU_ITEMS_HOOK } from './profile-slot-menu.types';\r\n\r\n//#region ---- Profile slot my profile menu hook ----\r\n\r\n/** Registers the My Profile entry in the profile dropdown. */\r\nexport const ProfileSlotMyProfileMenuHookProvider: AXPHookProvider<\r\n AXPProfileSlotMenuItemsPayload,\r\n AXPProfileSlotMenuItemsPayload\r\n> = {\r\n key: PROFILE_SLOT_MENU_ITEMS_HOOK,\r\n priority: -10,\r\n execute: (payload) => {\r\n const sessionService = inject(AXPSessionService);\r\n const appName = sessionService.application?.name;\r\n\r\n if (!appName) {\r\n return payload;\r\n }\r\n\r\n return {\r\n ...payload,\r\n items: [\r\n ...payload.items,\r\n {\r\n name: 'my-profile',\r\n title: '@auth:profile-page.profile-slot.my-profile',\r\n icon: 'fa-light fa-user',\r\n shortcuts: [{ keys: 'ctrl+shift+p', allowInEditableFields: true }],\r\n command: {\r\n name: 'navigate',\r\n options: {\r\n path: `/${appName}/profile`,\r\n },\r\n },\r\n } satisfies AXPActionMenuItem,\r\n ],\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { inject } from '@angular/core';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\r\nimport { AXPIdleLockService } from '../../../shared/services/idle-lock.service';\r\nimport {\r\n AXPProfileSlotMenuItem,\r\n AXPProfileSlotMenuItemsPayload,\r\n PROFILE_SLOT_MENU_ITEMS_HOOK,\r\n} from './profile-slot-menu.types';\r\n\r\n//#region ---- Profile slot lock menu hook ----\r\n\r\n/** Registers the manual lock entry when Lock When Idle is enabled. Profile menu reloads on {@link AXPAuthSettings.LockWhenIdleEnabled} changes. */\r\nexport const ProfileSlotLockMenuHookProvider: AXPHookProvider<\r\n AXPProfileSlotMenuItemsPayload,\r\n AXPProfileSlotMenuItemsPayload\r\n> = {\r\n key: PROFILE_SLOT_MENU_ITEMS_HOOK,\r\n priority: 50,\r\n execute: async (payload) => {\r\n const idleLockService = inject(AXPIdleLockService);\r\n await idleLockService.refreshLockMenuState();\r\n\r\n if (!idleLockService.canLock()) {\r\n return payload;\r\n }\r\n\r\n return {\r\n ...payload,\r\n items: [\r\n ...payload.items,\r\n {\r\n name: 'lock-screen',\r\n title: '@auth:profile.lock',\r\n icon: 'fa-light fa-lock',\r\n break: { before: true },\r\n shortcuts: [{ keys: 'ctrl+alt+l', allowInEditableFields: true }],\r\n command: { name: AXMAuthCommandKeys.Session.LockScreen },\r\n } satisfies AXPProfileSlotMenuItem,\r\n ],\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { PRESENCE_SET_AVAILABILITY } from '@acorex-platform/framework-shared/runtime';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport {\r\n AXPProfileSlotMenuItem,\r\n AXPProfileSlotMenuItemsPayload,\r\n PROFILE_SLOT_MENU_ITEMS_HOOK,\r\n} from './profile-slot-menu.types';\r\n\r\n//#region ---- Profile slot presence menu hook ----\r\n\r\n/** Registers Available / Away / Busy entries in the profile dropdown. */\r\nexport const ProfileSlotPresenceMenuHookProvider: AXPHookProvider<\r\n AXPProfileSlotMenuItemsPayload,\r\n AXPProfileSlotMenuItemsPayload\r\n> = {\r\n key: PROFILE_SLOT_MENU_ITEMS_HOOK,\r\n priority: 40,\r\n execute: (payload) => ({\r\n ...payload,\r\n items: [\r\n ...payload.items,\r\n {\r\n name: 'presence-available',\r\n title: '@auth:profile.presence-available',\r\n icon: 'fa-solid fa-circle text-success',\r\n break: { before: true },\r\n command: { name: PRESENCE_SET_AVAILABILITY, options: { status: 'online' } },\r\n } satisfies AXPProfileSlotMenuItem,\r\n {\r\n name: 'presence-away',\r\n title: '@auth:profile.presence-away',\r\n icon: 'fa-solid fa-circle text-warning',\r\n command: { name: PRESENCE_SET_AVAILABILITY, options: { status: 'away' } },\r\n } satisfies AXPProfileSlotMenuItem,\r\n {\r\n name: 'presence-busy',\r\n title: '@auth:profile.presence-busy',\r\n icon: 'fa-solid fa-circle text-danger',\r\n break: { after: true },\r\n command: { name: PRESENCE_SET_AVAILABILITY, options: { status: 'busy' } },\r\n } satisfies AXPProfileSlotMenuItem,\r\n ],\r\n }),\r\n};\r\n\r\n//#endregion\r\n","import { inject } from '@angular/core';\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport { AXPPwaInstallService } from '../../install/pwa-install.service';\nimport {\n AXPProfileSlotMenuItem,\n AXPProfileSlotMenuItemsPayload,\n PROFILE_SLOT_MENU_ITEMS_HOOK,\n} from './profile-slot-menu.types';\n\n//#region ---- Profile slot install app menu hook ----\n\n/** Registers Install App in the profile dropdown while this device is not in standalone mode. */\nexport const ProfileSlotInstallAppMenuHookProvider: AXPHookProvider<\n AXPProfileSlotMenuItemsPayload,\n AXPProfileSlotMenuItemsPayload\n> = {\n key: PROFILE_SLOT_MENU_ITEMS_HOOK,\n priority: 5,\n execute: (payload) => {\n const pwaInstall = inject(AXPPwaInstallService);\n\n return {\n ...payload,\n items: [\n ...payload.items,\n {\n name: 'install-app',\n title: '@auth:pwa-install.link',\n icon: 'fa-light fa-download',\n visible: pwaInstall.offerInProfile(),\n command: {\n name: 'navigate',\n options: {\n path: '/auth/install',\n },\n },\n } satisfies AXPProfileSlotMenuItem,\n ],\n };\n },\n};\n\n//#endregion\n","import { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport { AXPThemeLayoutSetting } from '@acorex-platform/framework-client/themes/shared';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport {\n ONBOARDING_STEPS_HOOK,\n type AXPOnboardingStepsPayload,\n} from '../onboarding.types';\n\n//#region ----- Welcome preference steps hook -----\n\n/**\n * Core welcome preference steps, ordered for first-run UX:\n * language first (so later steps are readable), then appearance.\n * Editors use the same setting definitions as Settings → User.\n */\nexport const WelcomeIntroOnboardingHookProvider: AXPHookProvider<\n AXPOnboardingStepsPayload,\n AXPOnboardingStepsPayload\n> = {\n key: ONBOARDING_STEPS_HOOK,\n priority: 0,\n execute: (payload) => ({\n ...payload,\n steps: [\n ...payload.steps,\n {\n id: 'welcome-intro',\n scope: 'user',\n title: '@auth:welcome-onboarding.steps.welcome-intro.title',\n description: '@auth:welcome-onboarding.steps.welcome-intro.description',\n icon: 'fa-solid fa-earth-americas',\n priority: 10,\n settingKeys: [AXPRegionalSetting.Language, AXPRegionalSetting.TimeZone],\n },\n {\n id: 'welcome-appearance',\n scope: 'user',\n title: '@auth:welcome-onboarding.steps.welcome-appearance.title',\n description: '@auth:welcome-onboarding.steps.welcome-appearance.description',\n icon: 'far fa-palette',\n priority: 15,\n settingKeys: [\n AXPThemeLayoutSetting.Mode,\n AXPThemeLayoutSetting.Palette,\n AXPThemeLayoutSetting.MenuOrientation,\n AXPThemeLayoutSetting.MenuVerticalMode,\n AXPThemeLayoutSetting.HeaderAppearance,\n ],\n },\n ],\n }),\n};\n\n//#endregion\n","import { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\nimport {\n ONBOARDING_STEPS_HOOK,\n type AXPOnboardingStepsPayload,\n} from '../onboarding.types';\nimport { WELCOME_ONBOARDING_ROUTE } from '../welcome-onboarding-flow.service';\n\n//#region ----- Profile basics step hook -----\n\nconst welcomeSubFlowReturn = { subFlowReturnUrl: WELCOME_ONBOARDING_ROUTE } as const;\n\n/**\n * User-scoped profile basics step (priority 20).\n * Self-service display name + photo only — no position/org assignment.\n */\nexport const ProfileBasicsOnboardingHookProvider: AXPHookProvider<\n AXPOnboardingStepsPayload,\n AXPOnboardingStepsPayload\n> = {\n key: ONBOARDING_STEPS_HOOK,\n priority: 0,\n execute: (payload) => ({\n ...payload,\n steps: [\n ...payload.steps,\n {\n id: 'profile-basics',\n scope: 'user',\n title: '@auth:welcome-onboarding.steps.profile-basics.title',\n description: '@auth:welcome-onboarding.steps.profile-basics.description',\n icon: 'far fa-user',\n priority: 20,\n actions: [\n {\n text: '@auth:welcome-onboarding.steps.profile-basics.edit-account',\n icon: 'fa-regular fa-pen',\n command: { name: AXMAuthCommandKeys.Profile.EditAccountInfo, options: welcomeSubFlowReturn },\n },\n {\n text: '@auth:welcome-onboarding.steps.profile-basics.change-photo',\n icon: 'fa-regular fa-camera',\n command: { name: AXMAuthCommandKeys.Profile.ChangePhoto, options: welcomeSubFlowReturn },\n },\n ],\n },\n ],\n }),\n};\n\n//#endregion\n","import { AXPCommonSettings } from '@acorex-platform/framework-client/common';\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport { AXPThemeLayoutSetting } from '@acorex-platform/framework-client/themes/shared';\nimport {\n ONBOARDING_STEPS_HOOK,\n type AXPOnboardingStepsPayload,\n} from '../onboarding.types';\n\n//#region ----- Navigation & typography welcome steps -----\n\n/** User preference steps: typography (with appearance), then navigation. */\nexport const WelcomeNavigationTypographyOnboardingHookProvider: AXPHookProvider<\n AXPOnboardingStepsPayload,\n AXPOnboardingStepsPayload\n> = {\n key: ONBOARDING_STEPS_HOOK,\n priority: 5,\n execute: (payload) => ({\n ...payload,\n steps: [\n ...payload.steps,\n {\n id: 'welcome-typography',\n scope: 'user',\n title: '@auth:welcome-onboarding.steps.welcome-typography.title',\n description: '@auth:welcome-onboarding.steps.welcome-typography.description',\n icon: 'fa-solid fa-font',\n priority: 16,\n settingKeys: [AXPThemeLayoutSetting.Font, AXPThemeLayoutSetting.FontSize],\n },\n {\n id: 'welcome-navigation',\n scope: 'user',\n title: '@auth:welcome-onboarding.steps.welcome-navigation.title',\n description: '@auth:welcome-onboarding.steps.welcome-navigation.description',\n icon: 'fa-solid fa-table-columns',\n priority: 17,\n settingKeys: [AXPCommonSettings.NavigationMode, AXPCommonSettings.MaxOpenTabs],\n },\n ],\n }),\n};\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXP_APP_STARTUP_PRIORITY, AXPAppStartUpService } from '@acorex-platform/framework-client/core';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPWelcomeOnboardingFlowService } from './welcome-onboarding-flow.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { combineLatest, distinctUntilChanged, EMPTY, from, switchMap } from 'rxjs';\n\n//#region ----- Welcome onboarding trigger -----\n\nconst WELCOME_TRIGGER_DELAY_MS = 600;\n\n/** Opens the welcome wizard after terms when the assembled plan is incomplete and not snoozed. */\n@Injectable()\nexport class AXPWelcomeOnboardingTriggerService {\n //#region ----- Services & Dependencies -----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly appInitService = inject(AXPAppStartUpService);\n private readonly flowService = inject(AXPWelcomeOnboardingFlowService);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- State -----\n\n private triggerGeneration = 0;\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n this.appInitService.registerTask({\n name: 'welcome-onboarding',\n // Silent — no splash status text\n priority: AXP_APP_STARTUP_PRIORITY.terms + 1,\n run: async () => {\n // Evaluated reactively once the session is authorized with an application.\n },\n });\n\n combineLatest([this.sessionService.isAuthorized$, this.sessionService.application$])\n .pipe(\n distinctUntilChanged(\n ([authorized, app], [previousAuthorized, previousApp]) =>\n authorized === previousAuthorized && app?.id === previousApp?.id,\n ),\n switchMap(([authorized, app]) => {\n if (!authorized || !app || !this.sessionService.hasSessionCredentials()) {\n this.triggerGeneration++;\n return EMPTY;\n }\n const generation = this.triggerGeneration;\n return from(this.evaluateWelcomePlan(generation));\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n //#endregion\n\n //#region ----- Evaluation -----\n\n private async evaluateWelcomePlan(generation: number): Promise<void> {\n if (!this.canTrigger() || generation !== this.triggerGeneration) {\n return;\n }\n\n const pending = await this.flowService.evaluatePending(false);\n if (generation !== this.triggerGeneration || !this.canTrigger() || !pending) {\n return;\n }\n\n setTimeout(() => {\n if (generation !== this.triggerGeneration || !this.canTrigger()) {\n return;\n }\n const url = this.router.url;\n if (url.includes('/auth/account/welcome-onboarding')) {\n return;\n }\n void this.router.navigate(['/auth/account/welcome-onboarding']);\n }, WELCOME_TRIGGER_DELAY_MS);\n }\n\n private canTrigger(): boolean {\n return this.sessionService.isReadyForAppScopedApi;\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXPEntityStorageMiddleware,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig as SecurityManagementRootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { inject } from '@angular/core';\nimport { get } from 'lodash';\n\nimport { AXPUserAvatarSyncService } from '../shared/services/user-avatar-sync.service';\nimport { normalizeAvatarRef } from '../shared/utils/avatar-storage.util';\n\n//#region ---- User avatar client middleware ----\n\nconst USER_ENTITY = `${SecurityManagementRootConfig.module.name}.${SecurityManagementRootConfig.entities.users.name}`;\n\n/** Refreshes avatar cache/session after user detail saves avatar. */\nexport const userAvatarCacheRefreshMiddleware: AXPEntityStorageMiddleware = {\n target: { ops: ['update'], order: 95 },\n execute: async (ctx, next) => {\n const avatarSync = inject(AXPUserAvatarSyncService);\n\n if (ctx.entityName !== USER_ENTITY) {\n await next();\n return;\n }\n\n const data = (ctx.data ?? {}) as Record<string, unknown>;\n const avatarTouched = Object.prototype.hasOwnProperty.call(data, 'avatar');\n await next();\n\n if (!avatarTouched) {\n return;\n }\n\n const userId = (ctx.id ?? get(ctx.result, 'id')) as string | undefined;\n if (!userId) {\n return;\n }\n\n const avatar = normalizeAvatarRef(get(ctx.result, 'avatar') ?? data['avatar']);\n await avatarSync.notifyAvatarChanged(userId, avatar);\n },\n};\n\n//#endregion\n","import { inject, NgZone, type Provider } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_REALTIME_TOPIC_AUTH_SECURITY_ALERT,\n AXP_REALTIME_TOPIC_HANDLER,\n type AXPRealtimeAuthSecurityAlertPayload,\n type AXPRealtimeEnvelope,\n} from '@acorex-platform/framework-client/realtime';\nimport { firstValueFrom } from 'rxjs';\n\n//#region ---- Auth security alert realtime ----\n\ntype AuthSecurityAlertKind = AXPRealtimeAuthSecurityAlertPayload['kind'];\n\nconst TITLE_KEYS: Record<Exclude<AuthSecurityAlertKind, 'session_terminated'>, string> = {\n login_success: '@auth:security-alert.login-success.title',\n login_failed: '@auth:security-alert.login-failed.title',\n account_locked: '@auth:security-alert.account-locked.title',\n logout: '@auth:security-alert.logout.title',\n two_factor_enabled: '@auth:security-alert.two-factor-enabled.title',\n two_factor_disabled: '@auth:security-alert.two-factor-disabled.title',\n two_factor_admin_reset: '@auth:security-alert.two-factor-admin-reset.title',\n two_factor_recovery_codes_regenerated: '@auth:security-alert.two-factor-recovery-codes-regenerated.title',\n};\n\nconst CONTENT_KEYS: Record<Exclude<AuthSecurityAlertKind, 'session_terminated'>, string> = {\n login_success: '@auth:security-alert.login-success.content',\n login_failed: '@auth:security-alert.login-failed.content',\n account_locked: '@auth:security-alert.account-locked.content',\n logout: '@auth:security-alert.logout.content',\n two_factor_enabled: '@auth:security-alert.two-factor-enabled.content',\n two_factor_disabled: '@auth:security-alert.two-factor-disabled.content',\n two_factor_admin_reset: '@auth:security-alert.two-factor-admin-reset.content',\n two_factor_recovery_codes_regenerated: '@auth:security-alert.two-factor-recovery-codes-regenerated.content',\n};\n\nconst CONTENT_WITH_DETAIL_KEYS: Record<Exclude<AuthSecurityAlertKind, 'session_terminated'>, string> = {\n login_success: '@auth:security-alert.login-success.content-with-detail',\n login_failed: '@auth:security-alert.login-failed.content-with-detail',\n account_locked: '@auth:security-alert.account-locked.content-with-detail',\n logout: '@auth:security-alert.logout.content-with-detail',\n two_factor_enabled: '@auth:security-alert.two-factor-enabled.content-with-detail',\n two_factor_disabled: '@auth:security-alert.two-factor-disabled.content-with-detail',\n two_factor_admin_reset: '@auth:security-alert.two-factor-admin-reset.content-with-detail',\n two_factor_recovery_codes_regenerated:\n '@auth:security-alert.two-factor-recovery-codes-regenerated.content-with-detail',\n};\n\n/** True while handling remote terminate (suppresses duplicate dialog + logout toast). */\nlet remoteTerminateDialogOpen = false;\n\nasync function showAuthSecurityAlertToast(\n envelope: AXPRealtimeEnvelope,\n toast: AXToastService,\n translate: AXTranslationService,\n sessionService?: AXPSessionService,\n): Promise<void> {\n const payload = (envelope.payload ?? {}) as AXPRealtimeAuthSecurityAlertPayload;\n if (!payload.kind || payload.kind === 'session_terminated' || !TITLE_KEYS[payload.kind]) {\n return;\n }\n\n // \"Signed Out Elsewhere\" is for other devices only — never toast on the signing-out browser.\n if (payload.kind === 'logout' && sessionService) {\n const [stillAuthenticated, loading] = await Promise.all([\n firstValueFrom(sessionService.isAuthenticated$),\n firstValueFrom(sessionService.isLoading$),\n ]);\n if (!stillAuthenticated || loading) {\n return;\n }\n }\n\n const detail =\n [payload.deviceSummary, payload.ipAddress]\n .map((part) => (part ?? '').trim())\n .filter(Boolean)\n .join(' · ') || undefined;\n\n // Toast template runs `| translate` — pass @scope keys for title.\n // Content with {{detail}} must be resolved first (pipe has no params).\n const title = TITLE_KEYS[payload.kind];\n const content = detail\n ? await translate.translateAsync(CONTENT_WITH_DETAIL_KEYS[payload.kind], {\n params: { detail },\n })\n : CONTENT_KEYS[payload.kind];\n\n const color =\n payload.kind === 'login_success' ||\n payload.kind === 'logout' ||\n payload.kind === 'two_factor_enabled' ||\n payload.kind === 'two_factor_disabled' ||\n payload.kind === 'two_factor_recovery_codes_regenerated'\n ? 'warning'\n : 'danger';\n toast.show({ color, title, content, closeButton: true, timeOut: 8000 });\n}\n\nasync function handleRemoteSessionTerminated(\n sessionService: AXPSessionService,\n dialog: AXDialogService,\n router: Router,\n): Promise<void> {\n if (remoteTerminateDialogOpen) {\n return;\n }\n\n // Set before any await so a concurrent logout envelope skips its toast.\n remoteTerminateDialogOpen = true;\n try {\n const [stillAuthenticated, loading] = await Promise.all([\n firstValueFrom(sessionService.isAuthenticated$),\n firstValueFrom(sessionService.isLoading$),\n ]);\n // Skip while local sign-out / session bind is in flight (avoids dialog on self-logout).\n if (!stillAuthenticated || loading) {\n return;\n }\n\n // Backdrop click is disabled by AXDialogService.open — only Okay closes.\n await dialog.alert(\n '@auth:security-alert.session-terminated.title',\n '@auth:security-alert.session-terminated.content',\n 'danger',\n 'horizontal',\n );\n\n const authenticatedAfterAck = await firstValueFrom(sessionService.isAuthenticated$);\n if (authenticatedAfterAck) {\n await sessionService.signout();\n await router.navigate(['/auth/login']);\n }\n } finally {\n remoteTerminateDialogOpen = false;\n }\n}\n\n/**\n * Registers toast + remote-terminate handlers via {@link AXP_REALTIME_TOPIC_HANDLER}\n * so they are wired when the dispatcher is constructed (before Socket.IO connect).\n */\nexport function provideAuthSecurityAlertRealtime(): Provider[] {\n return [\n {\n provide: AXP_REALTIME_TOPIC_HANDLER,\n multi: true,\n useFactory: () => {\n const toast = inject(AXToastService);\n const translate = inject(AXTranslationService);\n const dialog = inject(AXDialogService);\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n const zone = inject(NgZone);\n\n return {\n topic: AXP_REALTIME_TOPIC_AUTH_SECURITY_ALERT,\n handle: (envelope: AXPRealtimeEnvelope) => {\n // Socket.IO callbacks run outside Angular; dialog/toast need the zone.\n void zone.run(async () => {\n const payload = (envelope.payload ?? {}) as AXPRealtimeAuthSecurityAlertPayload;\n if (payload.kind === 'session_terminated') {\n await handleRemoteSessionTerminated(sessionService, dialog, router);\n return;\n }\n // Logout often arrives with session_terminated on the same socket — dialog only.\n if (payload.kind === 'logout' && remoteTerminateDialogOpen) {\n return;\n }\n await showAuthSecurityAlertToast(envelope, toast, translate, sessionService);\n });\n },\n };\n },\n },\n ];\n}\n\n//#endregion\n","import {\r\n AXP_MENU_PROVIDER,\r\n AXP_PROTECTED_ROUTE_GUARDS,\r\n AXP_SETTING_DEFINITION_PROVIDER,\r\n AXPCommonModule,\r\n AXPPlatformSettingsLoadState,\r\n AXPPlatformSettingsOfflineBootstrapService,\r\n} from '@acorex-platform/framework-client/common';\r\nimport { AXMAuthValidationRulesModule } from './validations/auth-validation-rules.module';\r\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\r\nimport { AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';\r\nimport {\r\n AXP_APP_STARTUP_PRIORITY,\r\n AXP_HOOK_PROVIDER,\r\n provideAppStartUpTask,\r\n provideLazyProvider,\r\n} from '@acorex-platform/framework-client/core';\r\nimport { provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\r\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\r\nimport { CommonModule, Location } from '@angular/common';\r\nimport { ApplicationRef, inject, NgModule } from '@angular/core';\r\nimport { NavigationStart, Router, RouterModule, Routes, ROUTES } from '@angular/router';\r\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { filter, firstValueFrom, take, timeout } from 'rxjs';\r\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\r\nimport { routes } from './auth.routes';\r\nimport { AXMAuthErrorHandler } from './error-handler';\r\nimport { AXPAccountModule } from './pages/account/account.module';\r\nimport { AXPIdleLockService } from './shared/services/idle-lock.service';\r\nimport { AXPPwaInstallService } from './pages/install/pwa-install.service';\r\nimport { AXPLogoEntitySyncService } from './shared/services/logo-entity-sync.service';\r\nimport {\r\n CoreProfileGroupsHookProvider,\r\n CoreProfileSectionsHookProvider,\r\n} from './pages/account/profile-page/core-profile-sections.hook';\r\nimport { SecurityPinSectionHookProvider } from './pages/account/profile-page/security-pin-section.hook';\r\nimport { SecuritySectionsInsightsHookProvider } from './pages/account/profile-page/security-sections-insights.hook';\r\nimport { ProfileSlotLogoutMenuHookProvider } from './pages/account/profile/profile-slot-logout-menu.hook';\r\nimport { ProfileSlotMyProfileMenuHookProvider } from './pages/account/profile/profile-slot-my-profile-menu.hook';\r\nimport { ProfileSlotLockMenuHookProvider } from './pages/account/profile/profile-slot-lock-menu.hook';\r\nimport { ProfileSlotPresenceMenuHookProvider } from './pages/account/profile/profile-slot-presence-menu.hook';\r\nimport { ProfileSlotInstallAppMenuHookProvider } from './pages/account/profile/profile-slot-install-app-menu.hook';\r\nimport { WelcomeIntroOnboardingHookProvider } from './onboarding/hooks/welcome-intro.hook';\r\nimport { ProfileBasicsOnboardingHookProvider } from './onboarding/hooks/profile-basics.hook';\r\nimport { WelcomeNavigationTypographyOnboardingHookProvider } from './onboarding/hooks/welcome-navigation-typography.hook';\r\nimport { AXPWelcomeOnboardingTriggerService } from './onboarding/welcome-onboarding-trigger.service';\r\nimport { userAvatarCacheRefreshMiddleware } from './middlewares/user-avatar.middleware';\r\nimport { provideAuthSecurityAlertRealtime } from './realtime/auth-security-alert-realtime.providers';\r\n\r\nfunction profileRoutesFactory(): Routes {\r\n const loadProfilePage = () =>\r\n import('./pages/account/profile-page/profile-page.component').then((c) => c.AXMUserProfilePageComponent);\r\n\r\n return [\r\n {\r\n path: ':app/profile',\r\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\r\n data: { tab: true, rootLayout: true },\r\n loadComponent: () => AXPRootLayoutComponent,\r\n children: [\r\n {\r\n path: '',\r\n loadComponent: loadProfilePage,\r\n data: { reuse: true },\r\n },\r\n {\r\n path: ':groupId',\r\n loadComponent: loadProfilePage,\r\n data: { reuse: true },\r\n },\r\n ],\r\n },\r\n ];\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n AXPCommonModule.forChild({ errorHandlers: [AXMAuthErrorHandler] }),\r\n RouterModule.forChild(routes),\r\n AXPAccountModule,\r\n AXMAuthValidationRulesModule,\r\n ],\r\n providers: [\r\n ...provideAuthSecurityAlertRealtime(),\r\n provideAppStartUpTask(() => {\r\n const pwaInstall = inject(AXPPwaInstallService);\r\n return {\r\n name: 'pwa-install-prompt',\r\n priority: AXP_APP_STARTUP_PRIORITY.terms,\r\n run: async () => {\r\n pwaInstall.start();\r\n },\r\n };\r\n }),\r\n provideAppStartUpTask(() => {\r\n const sessionService = inject(AXPSessionService);\r\n const idleLockService = inject(AXPIdleLockService);\r\n\r\n return {\r\n name: 'idle-lock-restore',\r\n priority: AXP_APP_STARTUP_PRIORITY.idleLockRestore,\r\n run: async () => {\r\n await firstValueFrom(sessionService.isLoading$.pipe(filter((loading) => !loading)));\r\n\r\n if (sessionService.isLocked() && sessionService.isAuthorized) {\r\n await idleLockService.restoreFromPersistedSession();\r\n }\r\n },\r\n };\r\n }),\r\n provideAppStartUpTask(() => {\r\n const loadState = inject(AXPPlatformSettingsLoadState);\r\n const offlineBootstrap = inject(AXPPlatformSettingsOfflineBootstrapService);\r\n const router = inject(Router);\r\n const location = inject(Location);\r\n const appRef = inject(ApplicationRef);\r\n\r\n return {\r\n name: 'platform-settings-failure-redirect',\r\n priority: AXP_APP_STARTUP_PRIORITY.platformSettingsFailureRedirect,\r\n run: async () => {\r\n if (!loadState.hasFailure() && !loadState.hasPendingOfflineContinue()) {\r\n return;\r\n }\r\n\r\n const goUnavailable = () => {\r\n if (!loadState.hasFailure()) {\r\n return;\r\n }\r\n if (router.url.startsWith('/auth/unavailable')) {\r\n return;\r\n }\r\n void router.navigateByUrl('/auth/unavailable', { replaceUrl: true });\r\n };\r\n\r\n const whenStable = () =>\r\n firstValueFrom(\r\n appRef.isStable.pipe(\r\n filter((stable) => stable),\r\n take(1),\r\n timeout({ first: 10_000 }),\r\n ),\r\n ).catch(() => undefined);\r\n\r\n // Never await router.navigate during APP_INITIALIZER — it does not resolve and freezes splash.\r\n if (loadState.hasFailure()) {\r\n location.replaceState('/auth/unavailable');\r\n\r\n const navGuard = router.events\r\n .pipe(filter((event): event is NavigationStart => event instanceof NavigationStart))\r\n .subscribe((event) => {\r\n if (!loadState.hasFailure()) {\r\n navGuard.unsubscribe();\r\n return;\r\n }\r\n if (!event.url.startsWith('/auth/unavailable')) {\r\n goUnavailable();\r\n }\r\n });\r\n\r\n queueMicrotask(goUnavailable);\r\n void whenStable().then(() => {\r\n navGuard.unsubscribe();\r\n goUnavailable();\r\n });\r\n return;\r\n }\r\n\r\n // Offline confirm needs the root ViewContainerRef — confirmAndContinueOffline waits for that\r\n // (not full isStable, which delays the dialog while the zone stays busy).\r\n queueMicrotask(() => {\r\n void (async () => {\r\n if (!loadState.hasPendingOfflineContinue()) {\r\n return;\r\n }\r\n let continued = false;\r\n try {\r\n continued = await offlineBootstrap.confirmAndContinueOffline();\r\n } catch (error) {\r\n console.error('Offline continue confirm failed', error);\r\n }\r\n if (!continued) {\r\n loadState.setFailure(\r\n loadState.consumePendingBootstrapError() ?? 'Platform settings unavailable',\r\n );\r\n location.replaceState('/auth/unavailable');\r\n goUnavailable();\r\n }\r\n })();\r\n });\r\n },\r\n };\r\n }),\r\n AXMAuthErrorHandler,\r\n provideLazyProvider(\r\n AXP_MENU_PROVIDER,\r\n () => import('./menu.provider').then(m => m.AXMSecurityManagementModuleMenuProvider),\r\n ),\r\n provideLazyProvider(\r\n AXP_SETTING_DEFINITION_PROVIDER,\r\n () => import('./settings.provider').then(m => m.AXMSettingProvider),\r\n ),\r\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\r\n import('./pages/account/profile-page/profile-page-component.provider').then(\r\n (module) => module.AXMProfilePageComponentProvider,\r\n ),\r\n ),\r\n provideQuerySetups([\r\n {\r\n key: 'Auth:GetUserActivity',\r\n loader: () =>\r\n import('./features/queries/get-user-activity.query').then((c) => c.AXMGetUserActivityQuery),\r\n },\r\n ]),\r\n {\r\n provide: ROUTES,\r\n multi: true,\r\n useFactory: profileRoutesFactory,\r\n },\r\n {\r\n provide: AXP_ENTITY_STORAGE_MIDDLEWARE,\r\n multi: true,\r\n useValue: userAvatarCacheRefreshMiddleware,\r\n },\r\n provideCommandSetups([\r\n {\r\n key: AXMAuthCommandKeys.Profile.Show,\r\n command: () => import('./commands/show-profile-command').then((c) => c.AXPShowProfileCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Session.Signout,\r\n command: () => import('./commands/signout-command').then((c) => c.AXPSignoutCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Session.OpenSessions,\r\n command: () => import('./commands/open-sessions.command').then((c) => c.AXPOpenSessionsCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Session.LockScreen,\r\n command: () => import('./commands/lock-screen.command').then((c) => c.AXPLockScreenCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Profile.ChangePhoto,\r\n command: () => import('./commands/change-photo.command').then((c) => c.AXPChangePhotoCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Profile.EditAccountInfo,\r\n command: () => import('./commands/edit-account-info.command').then((c) => c.AXPEditAccountInfoCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Security.ChangePassword,\r\n command: () => import('./commands/change-password.command').then((c) => c.AXPChangePasswordCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Security.ManageTwoFactor,\r\n command: () => import('./commands/manage-two-factor.command').then((c) => c.AXPManageTwoFactorCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Security.SetPinCode,\r\n command: () => import('./commands/set-pin-code.command').then((c) => c.AXPSetPinCodeCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Security.RemovePinCode,\r\n command: () => import('./commands/remove-pin-code.command').then((c) => c.AXPRemovePinCodeCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Security.ViewLoginHistory,\r\n command: () => import('./commands/view-login-history.command').then((c) => c.AXPViewLoginHistoryCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Security.EditSignature,\r\n command: () => import('./commands/edit-signature.command').then((c) => c.AXPEditSignatureCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Profile.ComingSoon,\r\n command: () => import('./commands/profile-coming-soon.command').then((c) => c.AXPProfileComingSoonCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Onboarding.Welcome,\r\n command: () =>\r\n import('./commands/welcome-onboarding.command').then((c) => c.AXPWelcomeOnboardingCommand),\r\n },\r\n {\r\n key: AXMAuthCommandKeys.Account.OpenWaitingRoom,\r\n command: () =>\r\n import('./commands/open-waiting-room.command').then((c) => c.AXPOpenWaitingRoomCommand),\r\n },\r\n ]),\r\n AXPWelcomeOnboardingTriggerService,\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileSlotLogoutMenuHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileSlotMyProfileMenuHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileSlotInstallAppMenuHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileSlotLockMenuHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileSlotPresenceMenuHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: CoreProfileGroupsHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: CoreProfileSectionsHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: SecurityPinSectionHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: SecuritySectionsInsightsHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: WelcomeIntroOnboardingHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileBasicsOnboardingHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: WelcomeNavigationTypographyOnboardingHookProvider,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AXMAuthModule {\r\n constructor() {\r\n inject(AXPIdleLockService);\r\n inject(AXPLogoEntitySyncService);\r\n inject(AXPWelcomeOnboardingTriggerService);\r\n }\r\n}\r\n","//#region ---- Login external provider slot ----\n\n/** Slot name for optional extension-provided login buttons (e.g. Google platform login). */\nexport const AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT = 'auth-login-external-providers';\n\n//#endregion\n","import {\n AXPComponentSlotDirective,\n AXPComponentSlotModule,\n} from '@acorex-platform/framework-client/core';\nimport { Component, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT } from './login-external-providers.slot';\n\n@Component({\n selector: 'axm-login-external-providers',\n templateUrl: './login-external-providers.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [AXPComponentSlotModule],\n})\nexport class AXPLoginExternalProvidersComponent {\n protected readonly slotName = AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT;\n\n private readonly slot = viewChild(AXPComponentSlotDirective);\n\n hasContent(): boolean {\n const slot = this.slot();\n return !!slot && !slot.isEmpty();\n }\n}\n","<axp-component-slot\n class=\"flex flex-col gap-2 w-full mt-0 lg:mt-2\"\n #slot=\"slot\"\n [name]=\"slotName\"\n [host]=\"this\"\n></axp-component-slot>\n","import {AXMSecurityManagementDeviceSessionsEntityModel} from '@acorex-platform/module-security-management-client/contracts'\nimport {RootConfig as SecurityManagementRootConfig} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { orderBy } from 'lodash';\n\n//#region ---- Login history entry ----\n\nexport interface AXPLoginHistoryEntry {\n id: string;\n device: string;\n location: string;\n ipAddress: string;\n browser: string;\n status: string;\n lastLoginDate: Date | string;\n}\n\n//#endregion\n\n//#region ---- Login history service ----\n\n/** Loads sign-in records for the current user from device session storage. */\n@Injectable({ providedIn: 'root' })\nexport class AXPLoginHistoryService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async getEntries(): Promise<AXPLoginHistoryEntry[]> {\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return [];\n }\n\n const response = await this.entityService\n .withEntity(\n SecurityManagementRootConfig.module.name,\n SecurityManagementRootConfig.entities.deviceSessions.name,\n )\n .data<string, AXMSecurityManagementDeviceSessionsEntityModel>()\n .query({ skip: 0, take: 1000 });\n\n const items = response.items ?? [];\n\n return orderBy(\n items\n .filter((item) => item.userId === userId)\n .map((item) => ({\n id: item.id,\n device: item.deviceName ?? item.operatingSystem ?? '—',\n location: item.location ?? '—',\n ipAddress: item.ipAddress ?? '—',\n browser: item.browser ?? '—',\n status: String(item.status ?? 'unknown').toLowerCase(),\n lastLoginDate: item.lastLoginDate,\n })),\n [(entry) => new Date(entry.lastLoginDate).getTime()],\n ['desc'],\n );\n }\n\n //#endregion\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SecurityManagementRootConfig","RootConfig","i1","i5","i6","i2","i3","i4","i7","i8","i9","SECURITY_PIN_SECTION_ID","TWO_FACTOR_SECTION_ID"],"mappings":"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"}