@acorex-platform/module-auth-client 0.0.15 → 0.0.20

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 (123) hide show
  1. package/fesm2022/{acorex-platform-module-auth-client-acorex-platform-module-auth-client-B7tIKOw6.mjs → acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs} +941 -609
  2. package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-auth-client-app-chooser.component-BVbu-f8h.mjs +75 -0
  4. package/fesm2022/acorex-platform-module-auth-client-app-chooser.component-BVbu-f8h.mjs.map +1 -0
  5. package/fesm2022/{acorex-platform-module-auth-client-blank.layout-BRGgntib.mjs → acorex-platform-module-auth-client-blank.layout-BCXNPgrp.mjs} +6 -6
  6. package/fesm2022/acorex-platform-module-auth-client-blank.layout-BCXNPgrp.mjs.map +1 -0
  7. package/fesm2022/{acorex-platform-module-auth-client-change-password.command-ZyXAjUKw.mjs → acorex-platform-module-auth-client-change-password.command-DIM_d7RO.mjs} +51 -40
  8. package/fesm2022/acorex-platform-module-auth-client-change-password.command-DIM_d7RO.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-auth-client-change-photo.command-CYGqrJV0.mjs +257 -0
  10. package/fesm2022/acorex-platform-module-auth-client-change-photo.command-CYGqrJV0.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-auth-client-contracts.mjs +46 -10
  12. package/fesm2022/acorex-platform-module-auth-client-contracts.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-module-auth-client-edit-account-info.command-B-mVlXxg.mjs → acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs} +5 -5
  14. package/fesm2022/acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs.map +1 -0
  15. package/fesm2022/{acorex-platform-module-auth-client-edit-signature.command-CcTJJwAX.mjs → acorex-platform-module-auth-client-edit-signature.command-TjOLhvKL.mjs} +5 -5
  16. package/fesm2022/acorex-platform-module-auth-client-edit-signature.command-TjOLhvKL.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-auth-client-get-user-activity.query-BTpibxe9.mjs +80 -0
  18. package/fesm2022/acorex-platform-module-auth-client-get-user-activity.query-BTpibxe9.mjs.map +1 -0
  19. package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-41QnG1TQ.mjs → acorex-platform-module-auth-client-lock-screen.command-Br9O4b5c.mjs} +6 -6
  20. package/fesm2022/acorex-platform-module-auth-client-lock-screen.command-Br9O4b5c.mjs.map +1 -0
  21. package/fesm2022/{acorex-platform-module-auth-client-login.module-DYtNYzF6.mjs → acorex-platform-module-auth-client-login.module-DJVL3bAF.mjs} +8 -21
  22. package/fesm2022/acorex-platform-module-auth-client-login.module-DJVL3bAF.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-auth-client-master.layout-DZUYm22p.mjs +39 -0
  24. package/fesm2022/acorex-platform-module-auth-client-master.layout-DZUYm22p.mjs.map +1 -0
  25. package/fesm2022/{acorex-platform-module-auth-client-oauth-callback.component-BspBH4Ul.mjs → acorex-platform-module-auth-client-oauth-callback.component-DnQzPUxF.mjs} +11 -15
  26. package/fesm2022/acorex-platform-module-auth-client-oauth-callback.component-DnQzPUxF.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-auth-client-open-sessions.command-LZKM9fgo.mjs +200 -0
  28. package/fesm2022/acorex-platform-module-auth-client-open-sessions.command-LZKM9fgo.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-module-auth-client-password.component-Cihg82vM.mjs → acorex-platform-module-auth-client-password.component-CNKRWfuG.mjs} +86 -45
  30. package/fesm2022/acorex-platform-module-auth-client-password.component-CNKRWfuG.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-auth-client-password.component-CW0t9fEn.mjs +87 -0
  32. package/fesm2022/acorex-platform-module-auth-client-password.component-CW0t9fEn.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-auth-client-platform-settings-unavailable.component-BEVkQ3jh.mjs +47 -0
  34. package/fesm2022/acorex-platform-module-auth-client-platform-settings-unavailable.component-BEVkQ3jh.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-B8lBvZsA.mjs → acorex-platform-module-auth-client-profile-activity-chart.component-CtSrYARX.mjs} +38 -46
  36. package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-CtSrYARX.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-module-auth-client-profile-coming-soon.command-DBbFbzAx.mjs → acorex-platform-module-auth-client-profile-coming-soon.command-Crh2GsRA.mjs} +5 -5
  38. package/fesm2022/acorex-platform-module-auth-client-profile-coming-soon.command-Crh2GsRA.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-CtJho4ab.mjs → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-D0QS8joQ.mjs} +18 -13
  40. package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-CtJho4ab.mjs.map → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-D0QS8joQ.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-B-Qtd4_j.mjs → acorex-platform-module-auth-client-profile-page-component.provider-6lNx6bKI.mjs} +7 -7
  42. package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-B-Qtd4_j.mjs.map → acorex-platform-module-auth-client-profile-page-component.provider-6lNx6bKI.mjs.map} +1 -1
  43. package/fesm2022/acorex-platform-module-auth-client-profile-page.component-CdxseoJX.mjs +650 -0
  44. package/fesm2022/acorex-platform-module-auth-client-profile-page.component-CdxseoJX.mjs.map +1 -0
  45. package/fesm2022/{acorex-platform-module-auth-client-register-password.component-hSJyEA6Q.mjs → acorex-platform-module-auth-client-register-password.component-D-tBrCJv.mjs} +15 -14
  46. package/fesm2022/acorex-platform-module-auth-client-register-password.component-D-tBrCJv.mjs.map +1 -0
  47. package/fesm2022/{acorex-platform-module-auth-client-register.module-DXm6AQpo.mjs → acorex-platform-module-auth-client-register.module-BrXqva0B.mjs} +23 -23
  48. package/fesm2022/acorex-platform-module-auth-client-register.module-BrXqva0B.mjs.map +1 -0
  49. package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-zUZooOtv.mjs → acorex-platform-module-auth-client-remove-pin-code.command-uK04-h15.mjs} +7 -7
  50. package/fesm2022/acorex-platform-module-auth-client-remove-pin-code.command-uK04-h15.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-module-auth-client-reset-password.component-CcwDb6Wb.mjs +115 -0
  52. package/fesm2022/acorex-platform-module-auth-client-reset-password.component-CcwDb6Wb.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-module-auth-client-result.component-DYJaB-FD.mjs → acorex-platform-module-auth-client-result.component-DWv1hmQR.mjs} +6 -6
  54. package/fesm2022/acorex-platform-module-auth-client-result.component-DWv1hmQR.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-module-auth-client-routes-IX2qmeqU.mjs +13 -0
  56. package/fesm2022/acorex-platform-module-auth-client-routes-IX2qmeqU.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-module-auth-client-session-lock-overlay.component-BhsTAmVe.mjs +361 -0
  58. package/fesm2022/acorex-platform-module-auth-client-session-lock-overlay.component-BhsTAmVe.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-module-auth-client-set-pin-code.command-BJT7F-xz.mjs +116 -0
  60. package/fesm2022/acorex-platform-module-auth-client-set-pin-code.command-BJT7F-xz.mjs.map +1 -0
  61. package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-5TxB6aFi.mjs → acorex-platform-module-auth-client-set-pin-code.component-Cq4skm_3.mjs} +29 -20
  62. package/fesm2022/acorex-platform-module-auth-client-set-pin-code.component-Cq4skm_3.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-module-auth-client-settings.provider-n1qbs6e1.mjs → acorex-platform-module-auth-client-settings.provider-Yaoz8yp3.mjs} +139 -11
  64. package/fesm2022/acorex-platform-module-auth-client-settings.provider-Yaoz8yp3.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-module-auth-client-show-profile-command-CxMz1yy-.mjs → acorex-platform-module-auth-client-show-profile-command-BWoDxIdx.mjs} +5 -6
  66. package/fesm2022/acorex-platform-module-auth-client-show-profile-command-BWoDxIdx.mjs.map +1 -0
  67. package/fesm2022/{acorex-platform-module-auth-client-signout-command-DqqrP5pk.mjs → acorex-platform-module-auth-client-signout-command-B7n_Fn4P.mjs} +5 -5
  68. package/fesm2022/acorex-platform-module-auth-client-signout-command-B7n_Fn4P.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-module-auth-client-tenant-chooser.component-CHmg7D5H.mjs +67 -0
  70. package/fesm2022/acorex-platform-module-auth-client-tenant-chooser.component-CHmg7D5H.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-nsB4v25Z.mjs +40 -0
  72. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-nsB4v25Z.mjs.map +1 -0
  73. package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-BJqdeuAz.mjs → acorex-platform-module-auth-client-two-factor.module-_jYo6xXr.mjs} +8 -11
  74. package/fesm2022/acorex-platform-module-auth-client-two-factor.module-_jYo6xXr.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-Dl0os5lD.mjs → acorex-platform-module-auth-client-view-login-history.command-ovj5rdHL.mjs} +13 -11
  76. package/fesm2022/acorex-platform-module-auth-client-view-login-history.command-ovj5rdHL.mjs.map +1 -0
  77. package/fesm2022/acorex-platform-module-auth-client.mjs +1 -1
  78. package/package.json +1 -1
  79. package/types/acorex-platform-module-auth-client-contracts.d.ts +43 -9
  80. package/types/acorex-platform-module-auth-client.d.ts +63 -56
  81. package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-B7tIKOw6.mjs.map +0 -1
  82. package/fesm2022/acorex-platform-module-auth-client-app-chooser.component-Cm2ZagaI.mjs +0 -67
  83. package/fesm2022/acorex-platform-module-auth-client-app-chooser.component-Cm2ZagaI.mjs.map +0 -1
  84. package/fesm2022/acorex-platform-module-auth-client-blank.layout-BRGgntib.mjs.map +0 -1
  85. package/fesm2022/acorex-platform-module-auth-client-change-password.command-ZyXAjUKw.mjs.map +0 -1
  86. package/fesm2022/acorex-platform-module-auth-client-change-photo.command-BC8lw--F.mjs +0 -192
  87. package/fesm2022/acorex-platform-module-auth-client-change-photo.command-BC8lw--F.mjs.map +0 -1
  88. package/fesm2022/acorex-platform-module-auth-client-edit-account-info.command-B-mVlXxg.mjs.map +0 -1
  89. package/fesm2022/acorex-platform-module-auth-client-edit-signature.command-CcTJJwAX.mjs.map +0 -1
  90. package/fesm2022/acorex-platform-module-auth-client-lock-screen.command-41QnG1TQ.mjs.map +0 -1
  91. package/fesm2022/acorex-platform-module-auth-client-login.module-DYtNYzF6.mjs.map +0 -1
  92. package/fesm2022/acorex-platform-module-auth-client-master.layout-DpdD9kgk.mjs +0 -24
  93. package/fesm2022/acorex-platform-module-auth-client-master.layout-DpdD9kgk.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-module-auth-client-oauth-callback.component-BspBH4Ul.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-module-auth-client-open-sessions.command-CXSGuqYp.mjs +0 -196
  96. package/fesm2022/acorex-platform-module-auth-client-open-sessions.command-CXSGuqYp.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-module-auth-client-password.component-BuqUhET7.mjs +0 -59
  98. package/fesm2022/acorex-platform-module-auth-client-password.component-BuqUhET7.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-module-auth-client-password.component-Cihg82vM.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-B8lBvZsA.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-module-auth-client-profile-coming-soon.command-DBbFbzAx.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-module-auth-client-profile-page.component-tbhf7K0V.mjs +0 -446
  103. package/fesm2022/acorex-platform-module-auth-client-profile-page.component-tbhf7K0V.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-module-auth-client-register-password.component-hSJyEA6Q.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-module-auth-client-register.module-DXm6AQpo.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-module-auth-client-remove-pin-code.command-zUZooOtv.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-module-auth-client-result.component-DYJaB-FD.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-module-auth-client-routes-REjaWcqY.mjs +0 -9
  109. package/fesm2022/acorex-platform-module-auth-client-routes-REjaWcqY.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-module-auth-client-session-lock-overlay.component-DqXGuIgN.mjs +0 -346
  111. package/fesm2022/acorex-platform-module-auth-client-session-lock-overlay.component-DqXGuIgN.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-module-auth-client-set-pin-code.command-DXTVbrS0.mjs +0 -33
  113. package/fesm2022/acorex-platform-module-auth-client-set-pin-code.command-DXTVbrS0.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-module-auth-client-set-pin-code.component-5TxB6aFi.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-module-auth-client-settings.provider-n1qbs6e1.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-module-auth-client-show-profile-command-CxMz1yy-.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-module-auth-client-signout-command-DqqrP5pk.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-module-auth-client-tenant-chooser.component-ihsqCJKN.mjs +0 -59
  119. package/fesm2022/acorex-platform-module-auth-client-tenant-chooser.component-ihsqCJKN.mjs.map +0 -1
  120. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-CiENsIEh.mjs +0 -40
  121. package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-CiENsIEh.mjs.map +0 -1
  122. package/fesm2022/acorex-platform-module-auth-client-two-factor.module-BJqdeuAz.mjs.map +0 -1
  123. package/fesm2022/acorex-platform-module-auth-client-view-login-history.command-Dl0os5lD.mjs.map +0 -1
@@ -0,0 +1,361 @@
1
+ import { AXFocusTrapDirective } from '@acorex/cdk/focus-trap';
2
+ import * as i1$1 from '@acorex/components/button';
3
+ import { AXButtonModule } from '@acorex/components/button';
4
+ import * as i3 from '@acorex/components/decorators';
5
+ import { AXDecoratorModule } from '@acorex/components/decorators';
6
+ import * as i4 from '@acorex/components/otp';
7
+ import { AXOtpComponent, AXOtpModule } from '@acorex/components/otp';
8
+ import * as i4$1 from '@acorex/components/password-box';
9
+ import { AXPasswordBoxComponent, AXPasswordBoxModule } from '@acorex/components/password-box';
10
+ import { AXToastService } from '@acorex/components/toast';
11
+ import * as i5 from '@acorex/core/translation';
12
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
13
+ import { AXPSessionService } from '@acorex-platform/framework-client/auth';
14
+ import { AXPDeviceService } from '@acorex-platform/framework-client/core';
15
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
16
+ import { AXPUserAvatarComponent, AXPVirtualKeypadComponent } from '@acorex-platform/framework-client/layout/components';
17
+ import * as i3$1 from '@angular/common';
18
+ import { CommonModule } from '@angular/common';
19
+ import * as i0 from '@angular/core';
20
+ import { signal, computed, viewChild, inject, Injector, DestroyRef, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
21
+ import * as i1 from '@angular/forms';
22
+ import { FormsModule } from '@angular/forms';
23
+ import { defaultTo, get, first } from 'lodash';
24
+ import { A as AXP_AUTH_PIN_CODE_LENGTH, a as AXP_AUTH_PIN_CODE_PATTERN } from './acorex-platform-module-auth-client-pin-code.constants-CRsFG7fg.mjs';
25
+ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
26
+ import { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';
27
+ import { i as AXPIdleLockService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs';
28
+
29
+ const SECURITY_MANAGEMENT_MODULE = 'SecurityManagement';
30
+ const SECURITY_MANAGEMENT_USER_ENTITY = 'User';
31
+ class AXMSessionLockOverlayComponent {
32
+ constructor() {
33
+ //#region ---- Constants ----
34
+ this.pinLength = AXP_AUTH_PIN_CODE_LENGTH;
35
+ //#endregion
36
+ //#region ---- State ----
37
+ this.pinInput = signal('', /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "pinInput" }] : /* istanbul ignore next */ []));
39
+ this.passwordInput = signal('', /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "passwordInput" }] : /* istanbul ignore next */ []));
41
+ this.pinError = signal(false, /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "pinError" }] : /* istanbul ignore next */ []));
43
+ this.passwordError = signal(false, /* @ts-ignore */
44
+ ...(ngDevMode ? [{ debugName: "passwordError" }] : /* istanbul ignore next */ []));
45
+ this.isVerifying = signal(false, /* @ts-ignore */
46
+ ...(ngDevMode ? [{ debugName: "isVerifying" }] : /* istanbul ignore next */ []));
47
+ this.unlockMode = signal('pin', /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "unlockMode" }] : /* istanbul ignore next */ []));
49
+ this.userRoleTitle = signal('', /* @ts-ignore */
50
+ ...(ngDevMode ? [{ debugName: "userRoleTitle" }] : /* istanbul ignore next */ []));
51
+ this.hasPinCode = computed(() => this.idleLockService.hasPinCode(), /* @ts-ignore */
52
+ ...(ngDevMode ? [{ debugName: "hasPinCode" }] : /* istanbul ignore next */ []));
53
+ this.useDeviceKeyboard = computed(() => !this.deviceService.isDesktopDevice(), /* @ts-ignore */
54
+ ...(ngDevMode ? [{ debugName: "useDeviceKeyboard" }] : /* istanbul ignore next */ []));
55
+ this.displayName = computed(() => defaultTo(this.sessionService.user?.title, ''), /* @ts-ignore */
56
+ ...(ngDevMode ? [{ debugName: "displayName" }] : /* istanbul ignore next */ []));
57
+ this.userId = computed(() => this.sessionService.user?.id ?? '', /* @ts-ignore */
58
+ ...(ngDevMode ? [{ debugName: "userId" }] : /* istanbul ignore next */ []));
59
+ this.applicationBadge = computed(() => {
60
+ const application = this.sessionService.application;
61
+ return application?.title ?? application?.name ?? '';
62
+ }, /* @ts-ignore */
63
+ ...(ngDevMode ? [{ debugName: "applicationBadge" }] : /* istanbul ignore next */ []));
64
+ this.otpState = computed(() => (this.pinError() ? 'error' : 'clear'), /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "otpState" }] : /* istanbul ignore next */ []));
66
+ //#endregion
67
+ //#region ---- View children ----
68
+ this.otpInput = viewChild(AXOtpComponent, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "otpInput" }] : /* istanbul ignore next */ []));
70
+ this.passwordBox = viewChild(AXPasswordBoxComponent, /* @ts-ignore */
71
+ ...(ngDevMode ? [{ debugName: "passwordBox" }] : /* istanbul ignore next */ []));
72
+ //#endregion
73
+ //#region ---- Services & Dependencies ----
74
+ this.idleLockService = inject(AXPIdleLockService);
75
+ this.sessionService = inject(AXPSessionService);
76
+ this.deviceService = inject(AXPDeviceService);
77
+ this.entityService = inject(AXPEntityService);
78
+ this.toastService = inject(AXToastService);
79
+ this.translateService = inject(AXTranslationService);
80
+ this.commandService = inject(AXPCommandService);
81
+ this.injector = inject(Injector);
82
+ this.destroyRef = inject(DestroyRef);
83
+ }
84
+ //#endregion
85
+ //#region ---- Lifecycle Methods ----
86
+ ngOnInit() {
87
+ void this.initializeUnlockMode();
88
+ void this.loadUserRoleTitle();
89
+ this.bindRefocusOnInteraction();
90
+ }
91
+ //#endregion
92
+ //#region ---- UI Handlers ----
93
+ onOverlayClick() {
94
+ if (!this.isUnlockEntryFocused()) {
95
+ this.focusUnlockEntry();
96
+ }
97
+ }
98
+ onDesktopPinChange(value) {
99
+ const normalized = defaultTo(value, '');
100
+ if (this.pinError() && normalized.length > 0) {
101
+ this.pinError.set(false);
102
+ }
103
+ this.pinInput.set(normalized);
104
+ }
105
+ onDesktopPinCompleted(event) {
106
+ if (!event.isCompleted || this.isVerifying()) {
107
+ return;
108
+ }
109
+ this.pinInput.set(defaultTo(event.value, ''));
110
+ void this.submitPin();
111
+ }
112
+ onMobilePinDigit(digit) {
113
+ if (this.isVerifying()) {
114
+ return;
115
+ }
116
+ const current = this.pinInput();
117
+ if (current.length >= AXP_AUTH_PIN_CODE_LENGTH) {
118
+ return;
119
+ }
120
+ const next = `${current}${digit}`;
121
+ if (this.pinError() && next.length > 0) {
122
+ this.pinError.set(false);
123
+ }
124
+ this.pinInput.set(next);
125
+ if (next.length === AXP_AUTH_PIN_CODE_LENGTH) {
126
+ void this.submitPin();
127
+ }
128
+ }
129
+ onMobilePinBackspace() {
130
+ if (this.isVerifying()) {
131
+ return;
132
+ }
133
+ const current = this.pinInput();
134
+ if (!current.length) {
135
+ return;
136
+ }
137
+ const next = current.slice(0, -1);
138
+ if (this.pinError() && next.length > 0) {
139
+ this.pinError.set(false);
140
+ }
141
+ this.pinInput.set(next);
142
+ }
143
+ onPasswordChange(value) {
144
+ this.passwordInput.set(defaultTo(value, ''));
145
+ this.passwordError.set(false);
146
+ }
147
+ showPasswordUnlock(event) {
148
+ event?.nativeEvent.stopPropagation();
149
+ this.unlockMode.set('password');
150
+ this.resetPinInput();
151
+ this.focusUnlockEntry();
152
+ }
153
+ showPinUnlock(event) {
154
+ event?.nativeEvent.stopPropagation();
155
+ if (!this.hasPinCode()) {
156
+ return;
157
+ }
158
+ this.unlockMode.set('pin');
159
+ this.passwordInput.set('');
160
+ this.passwordError.set(false);
161
+ this.focusUnlockEntry();
162
+ }
163
+ submitPassword() {
164
+ void this.verifyPasswordAndUnlock();
165
+ }
166
+ signOut(event) {
167
+ event?.nativeEvent.stopPropagation();
168
+ void this.commandService.execute(AXMAuthCommandKeys.Session.Signout, {});
169
+ }
170
+ //#endregion
171
+ //#region ---- Private Methods ----
172
+ async initializeUnlockMode() {
173
+ await this.idleLockService.refreshPinState();
174
+ this.resetUnlockState();
175
+ this.focusUnlockEntry();
176
+ }
177
+ getDefaultUnlockMode() {
178
+ return this.idleLockService.hasPinCode() ? 'pin' : 'password';
179
+ }
180
+ async loadUserRoleTitle() {
181
+ const userId = this.sessionService.user?.id;
182
+ if (!userId || !this.sessionService.isReadyForAppScopedApi) {
183
+ this.userRoleTitle.set('');
184
+ return;
185
+ }
186
+ try {
187
+ const user = await this.entityService
188
+ .withEntity(SECURITY_MANAGEMENT_MODULE, SECURITY_MANAGEMENT_USER_ENTITY)
189
+ .data()
190
+ .byKey(userId);
191
+ const roleTitle = defaultTo(get(first(get(user, 'roles', [])), 'title'), '');
192
+ this.userRoleTitle.set(roleTitle);
193
+ }
194
+ catch (error) {
195
+ console.error('Failed to load user role for session lock overlay', error);
196
+ this.userRoleTitle.set('');
197
+ }
198
+ }
199
+ async submitPin() {
200
+ if (this.isVerifying()) {
201
+ return;
202
+ }
203
+ const pin = this.pinInput();
204
+ if (!AXP_AUTH_PIN_CODE_PATTERN.test(pin)) {
205
+ return;
206
+ }
207
+ this.isVerifying.set(true);
208
+ try {
209
+ if (this.idleLockService.verifyPin(pin)) {
210
+ this.idleLockService.unlock();
211
+ this.resetUnlockState();
212
+ return;
213
+ }
214
+ await this.showIncorrectPinError();
215
+ this.applyPinValidationError();
216
+ }
217
+ finally {
218
+ this.isVerifying.set(false);
219
+ }
220
+ }
221
+ async verifyPasswordAndUnlock() {
222
+ if (this.isVerifying() || !this.passwordInput()) {
223
+ return;
224
+ }
225
+ this.isVerifying.set(true);
226
+ try {
227
+ if (await this.idleLockService.verifyPassword(this.passwordInput())) {
228
+ this.idleLockService.unlock();
229
+ this.resetUnlockState();
230
+ return;
231
+ }
232
+ await this.showIncorrectPasswordError();
233
+ this.triggerPasswordError();
234
+ this.passwordInput.set('');
235
+ this.focusUnlockEntry();
236
+ }
237
+ finally {
238
+ this.isVerifying.set(false);
239
+ }
240
+ }
241
+ resetUnlockState() {
242
+ this.unlockMode.set(this.getDefaultUnlockMode());
243
+ this.resetPinInput();
244
+ this.passwordInput.set('');
245
+ this.passwordError.set(false);
246
+ this.pinError.set(false);
247
+ }
248
+ resetPinInput(clearError = true) {
249
+ if (clearError) {
250
+ this.pinError.set(false);
251
+ }
252
+ this.pinInput.set('');
253
+ this.otpInput()?.reset();
254
+ }
255
+ applyPinValidationError() {
256
+ this.resetPinInput(false);
257
+ afterNextRender(() => {
258
+ this.pinError.set(true);
259
+ this.syncOtpErrorState();
260
+ if (!this.useDeviceKeyboard()) {
261
+ this.otpInput()?.focus();
262
+ }
263
+ }, { injector: this.injector });
264
+ }
265
+ syncOtpErrorState() {
266
+ const otp = this.otpInput();
267
+ if (otp) {
268
+ otp.state = 'error';
269
+ }
270
+ }
271
+ focusUnlockEntry() {
272
+ afterNextRender(() => {
273
+ if (this.unlockMode() === 'password') {
274
+ this.focusPasswordInput();
275
+ return;
276
+ }
277
+ if (!this.useDeviceKeyboard()) {
278
+ this.otpInput()?.focus();
279
+ }
280
+ }, { injector: this.injector });
281
+ }
282
+ focusPasswordInput() {
283
+ const attemptFocus = () => {
284
+ const passwordBox = this.passwordBox();
285
+ if (!passwordBox) {
286
+ return false;
287
+ }
288
+ passwordBox.focus();
289
+ requestAnimationFrame(() => {
290
+ if (!this.isUnlockEntryFocused()) {
291
+ passwordBox.focus();
292
+ }
293
+ });
294
+ return true;
295
+ };
296
+ if (!attemptFocus()) {
297
+ afterNextRender(() => attemptFocus(), { injector: this.injector });
298
+ }
299
+ }
300
+ bindRefocusOnInteraction() {
301
+ const onKeydown = (event) => {
302
+ if (this.isUnlockEntryFocused() || event.defaultPrevented) {
303
+ return;
304
+ }
305
+ this.focusUnlockEntry();
306
+ };
307
+ document.addEventListener('keydown', onKeydown, true);
308
+ this.destroyRef.onDestroy(() => {
309
+ document.removeEventListener('keydown', onKeydown, true);
310
+ });
311
+ }
312
+ isUnlockEntryFocused() {
313
+ const active = document.activeElement;
314
+ if (!(active instanceof HTMLElement)) {
315
+ return false;
316
+ }
317
+ if (this.unlockMode() === 'password') {
318
+ return active.closest('ax-password-box') !== null;
319
+ }
320
+ if (this.useDeviceKeyboard()) {
321
+ return active.closest('axp-virtual-keypad') !== null;
322
+ }
323
+ return active.closest('ax-otp') !== null;
324
+ }
325
+ triggerPasswordError() {
326
+ this.passwordError.set(true);
327
+ setTimeout(() => this.passwordError.set(false), 450);
328
+ }
329
+ async showIncorrectPinError() {
330
+ const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-pin');
331
+ const title = await this.translateService.translateAsync('@general:messages.generic.error.title');
332
+ this.toastService.show({ color: 'danger', title, content, closeButton: true });
333
+ }
334
+ async showIncorrectPasswordError() {
335
+ const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-password');
336
+ const title = await this.translateService.translateAsync('@general:messages.generic.error.title');
337
+ this.toastService.show({ color: 'danger', title, content, closeButton: true });
338
+ }
339
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSessionLockOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
340
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMSessionLockOverlayComponent, isStandalone: true, selector: "axm-session-lock-overlay", host: { classAttribute: "axm-session-lock-overlay-host" }, viewQueries: [{ propertyName: "otpInput", first: true, predicate: AXOtpComponent, descendants: true, isSignal: true }, { propertyName: "passwordBox", first: true, predicate: AXPasswordBoxComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"axm-session-lock-overlay\" [class.axm-session-lock-overlay--desktop]=\"!useDeviceKeyboard()\"\n [class.axm-session-lock-overlay--mobile]=\"useDeviceKeyboard()\" (click)=\"onOverlayClick()\">\n <div class=\"axm-session-lock-overlay__panel\" axFocusTrap tabindex=\"-1\" (click)=\"$event.stopPropagation()\">\n <div class=\"axm-session-lock-overlay__profile\">\n <div class=\"axm-session-lock-overlay__avatar-wrap\">\n @if (userId(); as resolvedUserId) {\n <axp-user-avatar [size]=\"useDeviceKeyboard() ? 64 : 80\" [userId]=\"resolvedUserId\"></axp-user-avatar>\n }\n </div>\n\n @if (displayName()) {\n <p class=\"axm-session-lock-overlay__name m-0\">\n {{ displayName() }}\n </p>\n }\n\n <!-- @if (userRoleTitle()) {\n <p class=\"axm-session-lock-overlay__role m-0\">\n {{ userRoleTitle() }}\n </p>\n } -->\n\n @if (applicationBadge()) {\n <div class=\"axm-session-lock-overlay__user-badge\">\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n <span>{{ applicationBadge() | translate | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__divider\" aria-hidden=\"true\"></div>\n\n <div class=\"axm-session-lock-overlay__body\">\n <div class=\"axm-session-lock-overlay__body-main\">\n <div class=\"axm-session-lock-overlay__lock-badge\" aria-hidden=\"true\">\n <i class=\"fa-light fa-lock\"></i>\n </div>\n\n <h2 class=\"axm-session-lock-overlay__title m-0\">\n {{ '@auth:session-lock.title' | translate | async }}\n </h2>\n\n @if (unlockMode() === 'pin' && hasPinCode()) {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.pin-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__otp\" [class.axm-session-lock-overlay__otp--error]=\"pinError()\">\n <ax-otp class=\"w-full block\" [type]=\"'number'\" [mode]=\"'star'\" [length]=\"pinLength\" [state]=\"otpState()\"\n [readonly]=\"useDeviceKeyboard()\" [disabled]=\"isVerifying()\" [ngModel]=\"pinInput()\"\n (ngModelChange)=\"onDesktopPinChange($event)\" (onCompleted)=\"onDesktopPinCompleted($event)\"></ax-otp>\n </div>\n } @else {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.password-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__password\"\n [class.axm-session-lock-overlay__password--error]=\"passwordError()\">\n <ax-password-box class=\"axm-session-lock-overlay__password-input w-full\" look=\"outline\"\n [disabled]=\"isVerifying()\" [ngModel]=\"passwordInput()\" (ngModelChange)=\"onPasswordChange($event)\"\n (keydown.enter)=\"submitPassword()\" [placeholder]=\"'@auth:password' | translate | async\"></ax-password-box>\n </div>\n\n <div class=\"axm-session-lock-overlay__actions\">\n <ax-button class=\"axm-session-lock-overlay__action w-full rounded-lg\" look=\"solid\" color=\"primary\"\n [disabled]=\"isVerifying() || !passwordInput()\" [text]=\"'@auth:session-lock.unlock' | translate | async\"\n (onClick)=\"submitPassword()\"></ax-button>\n </div>\n }\n </div>\n\n @if (useDeviceKeyboard() && unlockMode() === 'pin' && hasPinCode()) {\n <axp-virtual-keypad class=\"axm-session-lock-overlay__keypad\" look=\"solid\" [disabled]=\"isVerifying()\"\n (digitPress)=\"onMobilePinDigit($event)\" (backspace)=\"onMobilePinBackspace()\">\n </axp-virtual-keypad>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer\">\n <div class=\"axm-session-lock-overlay__footer-actions\">\n @if (hasPinCode()) {\n <div class=\"axm-session-lock-overlay__footer-action\">\n @if (unlockMode() === 'pin') {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-password-instead' | translate | async\"\n (onClick)=\"showPasswordUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-pin-instead' | translate | async\" (onClick)=\"showPinUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer-divider\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"axm-session-lock-overlay__footer-action\">\n <ax-button class=\"w-full\" look=\"blank\" color=\"danger\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.sign-out' | translate | async\" (onClick)=\"signOut($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-arrow-right-from-bracket\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: ["@layer properties;.axm-session-lock-overlay-host{display:contents}.axm-session-lock-overlay-shell{pointer-events:auto;position:fixed;box-sizing:border-box;inset:0;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important}.axm-session-lock-overlay-shell .overlay-pane{--tw-border-style: none;border-style:none;background-color:transparent;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important}.axm-session-lock-overlay{position:fixed;inset:0;box-sizing:border-box;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 6);--axm-lock-divider-color: rgb(var(--ax-sys-color-border-lightest-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__panel{display:flex;width:100%;max-width:30rem;flex-direction:column;overflow:hidden;text-align:center;--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style: none;outline-style:none;border-radius:1.5rem;border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);animation:axm-axm-session-lock-overlay-enter .28s cubic-bezier(.22,1,.36,1)}.axm-session-lock-overlay .axm-session-lock-overlay__profile{display:flex;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 9);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-session-lock-overlay .axm-session-lock-overlay__avatar-wrap{margin-bottom:calc(var(--spacing, .25rem) * 3);display:flex;align-items:center;justify-content:center}.axm-session-lock-overlay .axm-session-lock-overlay__user-badge{margin-bottom:calc(var(--spacing, .25rem) * 4);display:inline-flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;padding-inline:calc(var(--spacing, .25rem) * 3.5);padding-block:calc(var(--spacing, .25rem) * 1.5);background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: calc(var(--spacing, .25rem) * 4);line-height:calc(var(--spacing, .25rem) * 4);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.axm-session-lock-overlay .axm-session-lock-overlay__name{margin-bottom:calc(var(--spacing, .25rem) * 4);font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);--tw-tracking: var(--tracking-tight, -.025em);letter-spacing:var(--tracking-tight, -.025em);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__divider{margin-inline:calc(var(--spacing, .25rem) * 8);border:none;border-top:1px solid var(--axm-lock-divider-color)}.axm-session-lock-overlay .axm-session-lock-overlay__body{display:flex;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 6);padding-bottom:calc(var(--spacing, .25rem) * 8)}.axm-session-lock-overlay .axm-session-lock-overlay__body-main{display:flex;width:100%;flex-direction:column;align-items:center}.axm-session-lock-overlay .axm-session-lock-overlay__lock-badge{margin-bottom:calc(var(--spacing, .25rem) * 3);display:flex;width:calc(var(--spacing, .25rem) * 9);height:calc(var(--spacing, .25rem) * 9);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:rgba(var(--ax-sys-color-primary-600));font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-primary-dark-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__title{margin-bottom:calc(var(--spacing, .25rem) * 1.5);font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__instruction{margin-bottom:calc(var(--spacing, .25rem) * 6);max-width:19rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);color:rgba(var(--ax-sys-color-on-lighter-surface));opacity:70%}.axm-session-lock-overlay .axm-session-lock-overlay__keypad{margin-bottom:calc(var(--spacing, .25rem) * 2);width:100%}.axm-session-lock-overlay .axm-session-lock-overlay__otp{margin-bottom:calc(var(--spacing, .25rem) * 6);width:100%;max-width:15rem}.axm-session-lock-overlay .axm-session-lock-overlay__otp .input{border-color:rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__otp .input:focus{border-color:rgb(var(--ax-sys-color-primary-600));box-shadow:none;outline:none}.axm-session-lock-overlay .axm-session-lock-overlay__otp--error{animation:axm-axm-session-lock-overlay-shake .42s ease}.axm-session-lock-overlay .axm-session-lock-overlay__otp--error .input{border-color:rgba(var(--ax-sys-color-danger-500))!important}.axm-session-lock-overlay .axm-session-lock-overlay__password{margin-bottom:calc(var(--spacing, .25rem) * 3);width:100%}.axm-session-lock-overlay .axm-session-lock-overlay__password--error{animation:axm-axm-session-lock-overlay-shake .42s ease}.axm-session-lock-overlay .axm-session-lock-overlay__password-input .input,.axm-session-lock-overlay .axm-session-lock-overlay__password-input input{min-height:2.75rem;border-radius:var(--radius-lg, .5rem);background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);color:rgba(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:is(.axm-session-lock-overlay .axm-session-lock-overlay__password-input .input,.axm-session-lock-overlay .axm-session-lock-overlay__password-input input):focus{border-color:rgb(var(--ax-sys-color-primary-600));box-shadow:none;outline:none}.axm-session-lock-overlay .axm-session-lock-overlay__actions{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3)}.axm-session-lock-overlay .axm-session-lock-overlay__action{position:relative;z-index:1;margin-top:calc(var(--spacing, .25rem) * 3)}.axm-session-lock-overlay .axm-session-lock-overlay__footer{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);padding-inline:calc(var(--spacing, .25rem) * 8);padding-block:calc(var(--spacing, .25rem) * 4);border:none;border-top:1px solid var(--axm-lock-divider-color)}.axm-session-lock-overlay .axm-session-lock-overlay__footer-actions{display:flex;width:100%;align-items:center;justify-content:center;gap:var(--spacing, .25rem)}.axm-session-lock-overlay .axm-session-lock-overlay__footer-action{display:flex;min-width:0px;flex:1;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 2)}.axm-session-lock-overlay .axm-session-lock-overlay__footer-action ax-button{justify-content:center}.axm-session-lock-overlay .axm-session-lock-overlay__footer-divider{margin-inline:calc(var(--spacing, .25rem) * 2);height:calc(var(--spacing, .25rem) * 4);width:1px;flex-shrink:0;background-color:var(--axm-lock-divider-color)}.axm-session-lock-overlay.axm-session-lock-overlay--desktop{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);background-color:rgb(var(--ax-sys-color-darkest-surface) / .14);backdrop-filter:blur(10px) saturate(1.02)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile{align-items:stretch;justify-content:stretch;padding:0;background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;--axm-lock-divider-color: rgb(var(--ax-sys-color-primary-lightest-surface));--axm-lock-panel-gradient-start: var(--ax-sys-color-lightest-surface);--axm-lock-panel-gradient-mid: var(--ax-sys-color-primary-50);--axm-lock-panel-gradient-end: var(--ax-sys-color-primary-50);--axm-lock-mobile-inline-padding: clamp(1rem, 4vw, 1.5rem);--axm-lock-mobile-divider-gap: clamp(1rem, 2.5vh, 1.5rem);--axm-lock-mobile-key-gap: clamp(.375rem, 1.2vh, .75rem);--axm-lock-mobile-key-size: min( 4.75rem, calc( ( 100vw - (var(--axm-lock-mobile-inline-padding) * 2) - (var(--axm-lock-mobile-key-gap) * 2) ) / 3 ) )}@supports (color: color-mix(in lab,red,red)){.axm-session-lock-overlay.axm-session-lock-overlay--mobile{--axm-lock-divider-color: color-mix( in srgb, rgb(var(--ax-sys-color-primary-lightest-surface)) 90%, rgb(var(--ax-sys-color-lightest-surface)) )}}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__panel{display:flex;height:100dvh;min-height:100dvh;max-width:none;flex-direction:column;border-radius:0;border-style:var(--tw-border-style);border-width:0px;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background:linear-gradient(180deg,rgb(var(--axm-lock-panel-gradient-start)),rgb(var(--axm-lock-panel-gradient-mid)) 65%,rgb(var(--axm-lock-panel-gradient-end)))}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__profile{flex-shrink:0;padding:clamp(1rem,3.5vh,1.5rem) var(--axm-lock-mobile-inline-padding) var(--axm-lock-mobile-divider-gap)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__avatar-wrap{margin-bottom:calc(var(--spacing, .25rem) * 2)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__name{margin-bottom:calc(var(--spacing, .25rem) * 2);font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__user-badge{margin-bottom:0}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__divider{margin:0;flex-shrink:0;margin-inline:var(--axm-lock-mobile-inline-padding);border:none;border-top:1px solid var(--axm-lock-divider-color)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__body{display:flex;min-height:0px;flex:1;flex-direction:column;justify-content:space-between;padding:var(--axm-lock-mobile-divider-gap) var(--axm-lock-mobile-inline-padding) var(--axm-lock-mobile-divider-gap)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__body:not(:has(.axm-session-lock-overlay__keypad)){justify-content:center}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__body-main{display:flex;width:100%;flex-shrink:0;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 4);padding-inline:clamp(.75rem,3vw,1.25rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__lock-badge{margin-bottom:0;width:clamp(2.25rem,6vh,2.75rem);height:clamp(2.25rem,6vh,2.75rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__title{margin-bottom:0}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__instruction{margin-bottom:0;max-width:20rem;padding-inline:clamp(.5rem,2vw,1rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__otp{margin-bottom:0;min-height:0px;max-width:min(15rem,100%);padding-top:clamp(.25rem,1vh,.75rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad{display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:center;--axp-keypad-key-size: var(--axm-lock-mobile-key-size);--axp-keypad-gap: var(--axm-lock-mobile-key-gap)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad .axp-virtual-keypad .__digit{font-size:clamp(1.625rem,5.5vw,2rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad .axp-virtual-keypad .__letters{font-size:clamp(.625rem,2vw,.75rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad .axp-virtual-keypad .__key--action i{font-size:clamp(1.375rem,4.5vw,1.625rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__footer{margin-top:0;flex-shrink:0;background-color:transparent;border:none;border-top:1px solid var(--axm-lock-divider-color);padding:var(--axm-lock-mobile-divider-gap) var(--axm-lock-mobile-inline-padding) max(var(--axm-lock-mobile-divider-gap),env(safe-area-inset-bottom,0px))}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__footer-divider{background-color:var(--axm-lock-divider-color)}.dark .axm-session-lock-overlay--desktop{--axm-lock-divider-color: rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-darkest-surface) / .55)}.dark .axm-session-lock-overlay--mobile{--axm-lock-divider-color: rgb(var(--ax-sys-color-border-primary-lightest-surface));--axm-lock-panel-gradient-end: var(--ax-sys-color-lighter-surface);--axm-lock-panel-gradient-mid: var(--ax-sys-color-darkest-surface);--axm-lock-panel-gradient-start: var(--ax-sys-color-primary-darker-surface)}@supports (color: color-mix(in lab,red,red)){.dark .axm-session-lock-overlay--mobile{--axm-lock-divider-color: color-mix( in srgb, rgb(var(--ax-sys-color-border-primary-lightest-surface)) 28%, rgb(var(--ax-sys-color-lighter-surface)) )}}.dark .axm-session-lock-overlay__otp .input{border-color:rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface))}.dark .axm-session-lock-overlay__otp .input:focus{border-color:rgb(var(--ax-sys-color-primary-400))}.dark .axm-session-lock-overlay__password-input .input,.dark .axm-session-lock-overlay__password-input input{border-color:rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface))}:is(.dark .axm-session-lock-overlay__password-input .input,.dark .axm-session-lock-overlay__password-input input):focus{border-color:rgb(var(--ax-sys-color-primary-400))}.dark .axm-session-lock-overlay__panel{border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker);--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .axm-session-lock-overlay__footer{border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker)}@keyframes axm-axm-session-lock-overlay-enter{0%{opacity:0;transform:translateY(.75rem) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes axm-axm-session-lock-overlay-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-.35rem)}40%,80%{transform:translate(.35rem)}}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-tracking{syntax: \"*\"; inherits: false;}@property --tw-backdrop-blur{syntax: \"*\"; inherits: false;}@property --tw-backdrop-brightness{syntax: \"*\"; inherits: false;}@property --tw-backdrop-contrast{syntax: \"*\"; inherits: false;}@property --tw-backdrop-grayscale{syntax: \"*\"; inherits: false;}@property --tw-backdrop-hue-rotate{syntax: \"*\"; inherits: false;}@property --tw-backdrop-invert{syntax: \"*\"; inherits: false;}@property --tw-backdrop-opacity{syntax: \"*\"; inherits: false;}@property --tw-backdrop-saturate{syntax: \"*\"; inherits: false;}@property --tw-backdrop-sepia{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: initial;--tw-backdrop-blur: initial;--tw-backdrop-brightness: initial;--tw-backdrop-contrast: initial;--tw-backdrop-grayscale: initial;--tw-backdrop-hue-rotate: initial;--tw-backdrop-invert: initial;--tw-backdrop-opacity: initial;--tw-backdrop-saturate: initial;--tw-backdrop-sepia: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXOtpModule }, { kind: "component", type: i4.AXOtpComponent, selector: "ax-otp", inputs: ["state", "disabled", "readonly", "look", "name", "type", "mode", "length"], outputs: ["stateChange", "disabledChange", "lengthChange", "onCompleted"] }, { kind: "ngmodule", type: AXPasswordBoxModule }, { kind: "component", type: i4$1.AXPasswordBoxComponent, selector: "ax-password-box", inputs: ["readonly", "disabled", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "autoComplete", "showToggleButton", "class"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "component", type: AXPVirtualKeypadComponent, selector: "axp-virtual-keypad", inputs: ["disabled", "showLetterHints", "look"], outputs: ["digitPress", "backspace", "keyPress"] }, { kind: "directive", type: AXFocusTrapDirective, selector: "[axFocusTrap]", inputs: ["axFocusTrapArrowNavigation"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
341
+ }
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMSessionLockOverlayComponent, decorators: [{
343
+ type: Component,
344
+ args: [{ selector: 'axm-session-lock-overlay', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
345
+ CommonModule,
346
+ FormsModule,
347
+ AXButtonModule,
348
+ AXDecoratorModule,
349
+ AXOtpModule,
350
+ AXPasswordBoxModule,
351
+ AXTranslationModule,
352
+ AXPUserAvatarComponent,
353
+ AXPVirtualKeypadComponent,
354
+ AXFocusTrapDirective,
355
+ ], host: {
356
+ class: 'axm-session-lock-overlay-host',
357
+ }, template: "<div class=\"axm-session-lock-overlay\" [class.axm-session-lock-overlay--desktop]=\"!useDeviceKeyboard()\"\n [class.axm-session-lock-overlay--mobile]=\"useDeviceKeyboard()\" (click)=\"onOverlayClick()\">\n <div class=\"axm-session-lock-overlay__panel\" axFocusTrap tabindex=\"-1\" (click)=\"$event.stopPropagation()\">\n <div class=\"axm-session-lock-overlay__profile\">\n <div class=\"axm-session-lock-overlay__avatar-wrap\">\n @if (userId(); as resolvedUserId) {\n <axp-user-avatar [size]=\"useDeviceKeyboard() ? 64 : 80\" [userId]=\"resolvedUserId\"></axp-user-avatar>\n }\n </div>\n\n @if (displayName()) {\n <p class=\"axm-session-lock-overlay__name m-0\">\n {{ displayName() }}\n </p>\n }\n\n <!-- @if (userRoleTitle()) {\n <p class=\"axm-session-lock-overlay__role m-0\">\n {{ userRoleTitle() }}\n </p>\n } -->\n\n @if (applicationBadge()) {\n <div class=\"axm-session-lock-overlay__user-badge\">\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n <span>{{ applicationBadge() | translate | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__divider\" aria-hidden=\"true\"></div>\n\n <div class=\"axm-session-lock-overlay__body\">\n <div class=\"axm-session-lock-overlay__body-main\">\n <div class=\"axm-session-lock-overlay__lock-badge\" aria-hidden=\"true\">\n <i class=\"fa-light fa-lock\"></i>\n </div>\n\n <h2 class=\"axm-session-lock-overlay__title m-0\">\n {{ '@auth:session-lock.title' | translate | async }}\n </h2>\n\n @if (unlockMode() === 'pin' && hasPinCode()) {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.pin-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__otp\" [class.axm-session-lock-overlay__otp--error]=\"pinError()\">\n <ax-otp class=\"w-full block\" [type]=\"'number'\" [mode]=\"'star'\" [length]=\"pinLength\" [state]=\"otpState()\"\n [readonly]=\"useDeviceKeyboard()\" [disabled]=\"isVerifying()\" [ngModel]=\"pinInput()\"\n (ngModelChange)=\"onDesktopPinChange($event)\" (onCompleted)=\"onDesktopPinCompleted($event)\"></ax-otp>\n </div>\n } @else {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.password-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__password\"\n [class.axm-session-lock-overlay__password--error]=\"passwordError()\">\n <ax-password-box class=\"axm-session-lock-overlay__password-input w-full\" look=\"outline\"\n [disabled]=\"isVerifying()\" [ngModel]=\"passwordInput()\" (ngModelChange)=\"onPasswordChange($event)\"\n (keydown.enter)=\"submitPassword()\" [placeholder]=\"'@auth:password' | translate | async\"></ax-password-box>\n </div>\n\n <div class=\"axm-session-lock-overlay__actions\">\n <ax-button class=\"axm-session-lock-overlay__action w-full rounded-lg\" look=\"solid\" color=\"primary\"\n [disabled]=\"isVerifying() || !passwordInput()\" [text]=\"'@auth:session-lock.unlock' | translate | async\"\n (onClick)=\"submitPassword()\"></ax-button>\n </div>\n }\n </div>\n\n @if (useDeviceKeyboard() && unlockMode() === 'pin' && hasPinCode()) {\n <axp-virtual-keypad class=\"axm-session-lock-overlay__keypad\" look=\"solid\" [disabled]=\"isVerifying()\"\n (digitPress)=\"onMobilePinDigit($event)\" (backspace)=\"onMobilePinBackspace()\">\n </axp-virtual-keypad>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer\">\n <div class=\"axm-session-lock-overlay__footer-actions\">\n @if (hasPinCode()) {\n <div class=\"axm-session-lock-overlay__footer-action\">\n @if (unlockMode() === 'pin') {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-password-instead' | translate | async\"\n (onClick)=\"showPasswordUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-pin-instead' | translate | async\" (onClick)=\"showPinUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer-divider\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"axm-session-lock-overlay__footer-action\">\n <ax-button class=\"w-full\" look=\"blank\" color=\"danger\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.sign-out' | translate | async\" (onClick)=\"signOut($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-arrow-right-from-bracket\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: ["@layer properties;.axm-session-lock-overlay-host{display:contents}.axm-session-lock-overlay-shell{pointer-events:auto;position:fixed;box-sizing:border-box;inset:0;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important}.axm-session-lock-overlay-shell .overlay-pane{--tw-border-style: none;border-style:none;background-color:transparent;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important}.axm-session-lock-overlay{position:fixed;inset:0;box-sizing:border-box;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 6);--axm-lock-divider-color: rgb(var(--ax-sys-color-border-lightest-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__panel{display:flex;width:100%;max-width:30rem;flex-direction:column;overflow:hidden;text-align:center;--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style: none;outline-style:none;border-radius:1.5rem;border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);animation:axm-axm-session-lock-overlay-enter .28s cubic-bezier(.22,1,.36,1)}.axm-session-lock-overlay .axm-session-lock-overlay__profile{display:flex;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 9);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-session-lock-overlay .axm-session-lock-overlay__avatar-wrap{margin-bottom:calc(var(--spacing, .25rem) * 3);display:flex;align-items:center;justify-content:center}.axm-session-lock-overlay .axm-session-lock-overlay__user-badge{margin-bottom:calc(var(--spacing, .25rem) * 4);display:inline-flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;padding-inline:calc(var(--spacing, .25rem) * 3.5);padding-block:calc(var(--spacing, .25rem) * 1.5);background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: calc(var(--spacing, .25rem) * 4);line-height:calc(var(--spacing, .25rem) * 4);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.axm-session-lock-overlay .axm-session-lock-overlay__name{margin-bottom:calc(var(--spacing, .25rem) * 4);font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);--tw-tracking: var(--tracking-tight, -.025em);letter-spacing:var(--tracking-tight, -.025em);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__divider{margin-inline:calc(var(--spacing, .25rem) * 8);border:none;border-top:1px solid var(--axm-lock-divider-color)}.axm-session-lock-overlay .axm-session-lock-overlay__body{display:flex;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 6);padding-bottom:calc(var(--spacing, .25rem) * 8)}.axm-session-lock-overlay .axm-session-lock-overlay__body-main{display:flex;width:100%;flex-direction:column;align-items:center}.axm-session-lock-overlay .axm-session-lock-overlay__lock-badge{margin-bottom:calc(var(--spacing, .25rem) * 3);display:flex;width:calc(var(--spacing, .25rem) * 9);height:calc(var(--spacing, .25rem) * 9);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:rgba(var(--ax-sys-color-primary-600));font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-primary-dark-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__title{margin-bottom:calc(var(--spacing, .25rem) * 1.5);font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__instruction{margin-bottom:calc(var(--spacing, .25rem) * 6);max-width:19rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);color:rgba(var(--ax-sys-color-on-lighter-surface));opacity:70%}.axm-session-lock-overlay .axm-session-lock-overlay__keypad{margin-bottom:calc(var(--spacing, .25rem) * 2);width:100%}.axm-session-lock-overlay .axm-session-lock-overlay__otp{margin-bottom:calc(var(--spacing, .25rem) * 6);width:100%;max-width:15rem}.axm-session-lock-overlay .axm-session-lock-overlay__otp .input{border-color:rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface))}.axm-session-lock-overlay .axm-session-lock-overlay__otp .input:focus{border-color:rgb(var(--ax-sys-color-primary-600));box-shadow:none;outline:none}.axm-session-lock-overlay .axm-session-lock-overlay__otp--error{animation:axm-axm-session-lock-overlay-shake .42s ease}.axm-session-lock-overlay .axm-session-lock-overlay__otp--error .input{border-color:rgba(var(--ax-sys-color-danger-500))!important}.axm-session-lock-overlay .axm-session-lock-overlay__password{margin-bottom:calc(var(--spacing, .25rem) * 3);width:100%}.axm-session-lock-overlay .axm-session-lock-overlay__password--error{animation:axm-axm-session-lock-overlay-shake .42s ease}.axm-session-lock-overlay .axm-session-lock-overlay__password-input .input,.axm-session-lock-overlay .axm-session-lock-overlay__password-input input{min-height:2.75rem;border-radius:var(--radius-lg, .5rem);background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);color:rgba(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:is(.axm-session-lock-overlay .axm-session-lock-overlay__password-input .input,.axm-session-lock-overlay .axm-session-lock-overlay__password-input input):focus{border-color:rgb(var(--ax-sys-color-primary-600));box-shadow:none;outline:none}.axm-session-lock-overlay .axm-session-lock-overlay__actions{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3)}.axm-session-lock-overlay .axm-session-lock-overlay__action{position:relative;z-index:1;margin-top:calc(var(--spacing, .25rem) * 3)}.axm-session-lock-overlay .axm-session-lock-overlay__footer{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);padding-inline:calc(var(--spacing, .25rem) * 8);padding-block:calc(var(--spacing, .25rem) * 4);border:none;border-top:1px solid var(--axm-lock-divider-color)}.axm-session-lock-overlay .axm-session-lock-overlay__footer-actions{display:flex;width:100%;align-items:center;justify-content:center;gap:var(--spacing, .25rem)}.axm-session-lock-overlay .axm-session-lock-overlay__footer-action{display:flex;min-width:0px;flex:1;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 2)}.axm-session-lock-overlay .axm-session-lock-overlay__footer-action ax-button{justify-content:center}.axm-session-lock-overlay .axm-session-lock-overlay__footer-divider{margin-inline:calc(var(--spacing, .25rem) * 2);height:calc(var(--spacing, .25rem) * 4);width:1px;flex-shrink:0;background-color:var(--axm-lock-divider-color)}.axm-session-lock-overlay.axm-session-lock-overlay--desktop{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);background-color:rgb(var(--ax-sys-color-darkest-surface) / .14);backdrop-filter:blur(10px) saturate(1.02)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile{align-items:stretch;justify-content:stretch;padding:0;background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;--axm-lock-divider-color: rgb(var(--ax-sys-color-primary-lightest-surface));--axm-lock-panel-gradient-start: var(--ax-sys-color-lightest-surface);--axm-lock-panel-gradient-mid: var(--ax-sys-color-primary-50);--axm-lock-panel-gradient-end: var(--ax-sys-color-primary-50);--axm-lock-mobile-inline-padding: clamp(1rem, 4vw, 1.5rem);--axm-lock-mobile-divider-gap: clamp(1rem, 2.5vh, 1.5rem);--axm-lock-mobile-key-gap: clamp(.375rem, 1.2vh, .75rem);--axm-lock-mobile-key-size: min( 4.75rem, calc( ( 100vw - (var(--axm-lock-mobile-inline-padding) * 2) - (var(--axm-lock-mobile-key-gap) * 2) ) / 3 ) )}@supports (color: color-mix(in lab,red,red)){.axm-session-lock-overlay.axm-session-lock-overlay--mobile{--axm-lock-divider-color: color-mix( in srgb, rgb(var(--ax-sys-color-primary-lightest-surface)) 90%, rgb(var(--ax-sys-color-lightest-surface)) )}}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__panel{display:flex;height:100dvh;min-height:100dvh;max-width:none;flex-direction:column;border-radius:0;border-style:var(--tw-border-style);border-width:0px;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background:linear-gradient(180deg,rgb(var(--axm-lock-panel-gradient-start)),rgb(var(--axm-lock-panel-gradient-mid)) 65%,rgb(var(--axm-lock-panel-gradient-end)))}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__profile{flex-shrink:0;padding:clamp(1rem,3.5vh,1.5rem) var(--axm-lock-mobile-inline-padding) var(--axm-lock-mobile-divider-gap)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__avatar-wrap{margin-bottom:calc(var(--spacing, .25rem) * 2)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__name{margin-bottom:calc(var(--spacing, .25rem) * 2);font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__user-badge{margin-bottom:0}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__divider{margin:0;flex-shrink:0;margin-inline:var(--axm-lock-mobile-inline-padding);border:none;border-top:1px solid var(--axm-lock-divider-color)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__body{display:flex;min-height:0px;flex:1;flex-direction:column;justify-content:space-between;padding:var(--axm-lock-mobile-divider-gap) var(--axm-lock-mobile-inline-padding) var(--axm-lock-mobile-divider-gap)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__body:not(:has(.axm-session-lock-overlay__keypad)){justify-content:center}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__body-main{display:flex;width:100%;flex-shrink:0;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 4);padding-inline:clamp(.75rem,3vw,1.25rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__lock-badge{margin-bottom:0;width:clamp(2.25rem,6vh,2.75rem);height:clamp(2.25rem,6vh,2.75rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__title{margin-bottom:0}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__instruction{margin-bottom:0;max-width:20rem;padding-inline:clamp(.5rem,2vw,1rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__otp{margin-bottom:0;min-height:0px;max-width:min(15rem,100%);padding-top:clamp(.25rem,1vh,.75rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad{display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:center;--axp-keypad-key-size: var(--axm-lock-mobile-key-size);--axp-keypad-gap: var(--axm-lock-mobile-key-gap)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad .axp-virtual-keypad .__digit{font-size:clamp(1.625rem,5.5vw,2rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad .axp-virtual-keypad .__letters{font-size:clamp(.625rem,2vw,.75rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__keypad .axp-virtual-keypad .__key--action i{font-size:clamp(1.375rem,4.5vw,1.625rem)}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__footer{margin-top:0;flex-shrink:0;background-color:transparent;border:none;border-top:1px solid var(--axm-lock-divider-color);padding:var(--axm-lock-mobile-divider-gap) var(--axm-lock-mobile-inline-padding) max(var(--axm-lock-mobile-divider-gap),env(safe-area-inset-bottom,0px))}.axm-session-lock-overlay.axm-session-lock-overlay--mobile .axm-session-lock-overlay__footer-divider{background-color:var(--axm-lock-divider-color)}.dark .axm-session-lock-overlay--desktop{--axm-lock-divider-color: rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-darkest-surface) / .55)}.dark .axm-session-lock-overlay--mobile{--axm-lock-divider-color: rgb(var(--ax-sys-color-border-primary-lightest-surface));--axm-lock-panel-gradient-end: var(--ax-sys-color-lighter-surface);--axm-lock-panel-gradient-mid: var(--ax-sys-color-darkest-surface);--axm-lock-panel-gradient-start: var(--ax-sys-color-primary-darker-surface)}@supports (color: color-mix(in lab,red,red)){.dark .axm-session-lock-overlay--mobile{--axm-lock-divider-color: color-mix( in srgb, rgb(var(--ax-sys-color-border-primary-lightest-surface)) 28%, rgb(var(--ax-sys-color-lighter-surface)) )}}.dark .axm-session-lock-overlay__otp .input{border-color:rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface))}.dark .axm-session-lock-overlay__otp .input:focus{border-color:rgb(var(--ax-sys-color-primary-400))}.dark .axm-session-lock-overlay__password-input .input,.dark .axm-session-lock-overlay__password-input input{border-color:rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface))}:is(.dark .axm-session-lock-overlay__password-input .input,.dark .axm-session-lock-overlay__password-input input):focus{border-color:rgb(var(--ax-sys-color-primary-400))}.dark .axm-session-lock-overlay__panel{border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker);--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .axm-session-lock-overlay__footer{border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker)}@keyframes axm-axm-session-lock-overlay-enter{0%{opacity:0;transform:translateY(.75rem) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes axm-axm-session-lock-overlay-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-.35rem)}40%,80%{transform:translate(.35rem)}}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-tracking{syntax: \"*\"; inherits: false;}@property --tw-backdrop-blur{syntax: \"*\"; inherits: false;}@property --tw-backdrop-brightness{syntax: \"*\"; inherits: false;}@property --tw-backdrop-contrast{syntax: \"*\"; inherits: false;}@property --tw-backdrop-grayscale{syntax: \"*\"; inherits: false;}@property --tw-backdrop-hue-rotate{syntax: \"*\"; inherits: false;}@property --tw-backdrop-invert{syntax: \"*\"; inherits: false;}@property --tw-backdrop-opacity{syntax: \"*\"; inherits: false;}@property --tw-backdrop-saturate{syntax: \"*\"; inherits: false;}@property --tw-backdrop-sepia{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: initial;--tw-backdrop-blur: initial;--tw-backdrop-brightness: initial;--tw-backdrop-contrast: initial;--tw-backdrop-grayscale: initial;--tw-backdrop-hue-rotate: initial;--tw-backdrop-invert: initial;--tw-backdrop-opacity: initial;--tw-backdrop-saturate: initial;--tw-backdrop-sepia: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
358
+ }], propDecorators: { otpInput: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXOtpComponent), { isSignal: true }] }], passwordBox: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPasswordBoxComponent), { isSignal: true }] }] } });
359
+
360
+ export { AXMSessionLockOverlayComponent };
361
+ //# sourceMappingURL=acorex-platform-module-auth-client-session-lock-overlay.component-BhsTAmVe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-session-lock-overlay.component-BhsTAmVe.mjs","sources":["../../../../libs/modules/auth/client/src/lib/features/session-lock/session-lock-overlay.component.ts","../../../../libs/modules/auth/client/src/lib/features/session-lock/session-lock-overlay.component.html"],"sourcesContent":["import { AXFocusTrapDirective } from '@acorex/cdk/focus-trap';\nimport { AXClickEvent, AXComponentState } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXOtpCompletedEvent, AXOtpComponent, AXOtpModule } from '@acorex/components/otp';\nimport { AXPasswordBoxComponent, AXPasswordBoxModule } from '@acorex/components/password-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPUserAvatarComponent, AXPVirtualKeypadComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n Injector,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { defaultTo, first, get } from 'lodash';\nimport { AXP_AUTH_PIN_CODE_LENGTH, AXP_AUTH_PIN_CODE_PATTERN } from '../../shared/constants/pin-code.constants';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\nimport { AXPIdleLockService } from '../../shared/services/idle-lock.service';\n\n//#region ---- Session lock overlay ----\n\ntype AXMSessionLockUnlockMode = 'pin' | 'password';\n\nconst SECURITY_MANAGEMENT_MODULE = 'SecurityManagement';\nconst SECURITY_MANAGEMENT_USER_ENTITY = 'User';\n\n@Component({\n selector: 'axm-session-lock-overlay',\n templateUrl: './session-lock-overlay.component.html',\n styleUrl: './session-lock-overlay.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXOtpModule,\n AXPasswordBoxModule,\n AXTranslationModule,\n AXPUserAvatarComponent,\n AXPVirtualKeypadComponent,\n AXFocusTrapDirective,\n ],\n host: {\n class: 'axm-session-lock-overlay-host',\n },\n})\nexport class AXMSessionLockOverlayComponent implements OnInit {\n //#region ---- Constants ----\n\n protected readonly pinLength = AXP_AUTH_PIN_CODE_LENGTH;\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly pinInput = signal('');\n protected readonly passwordInput = signal('');\n protected readonly pinError = signal(false);\n protected readonly passwordError = signal(false);\n protected readonly isVerifying = signal(false);\n protected readonly unlockMode = signal<AXMSessionLockUnlockMode>('pin');\n protected readonly userRoleTitle = signal('');\n\n protected readonly hasPinCode = computed(() => this.idleLockService.hasPinCode());\n\n protected readonly useDeviceKeyboard = computed(() => !this.deviceService.isDesktopDevice());\n protected readonly displayName = computed(() => defaultTo(this.sessionService.user?.title, ''));\n protected readonly userId = computed(() => this.sessionService.user?.id ?? '');\n protected readonly applicationBadge = computed(() => {\n const application = this.sessionService.application;\n return application?.title ?? application?.name ?? '';\n });\n protected readonly otpState = computed((): AXComponentState => (this.pinError() ? 'error' : 'clear'));\n\n //#endregion\n\n //#region ---- View children ----\n\n private readonly otpInput = viewChild(AXOtpComponent);\n private readonly passwordBox = viewChild(AXPasswordBoxComponent);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly idleLockService = inject(AXPIdleLockService);\n protected readonly sessionService = inject(AXPSessionService);\n private readonly deviceService = inject(AXPDeviceService);\n private readonly entityService = inject(AXPEntityService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n private readonly commandService = inject(AXPCommandService);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n void this.initializeUnlockMode();\n void this.loadUserRoleTitle();\n this.bindRefocusOnInteraction();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onOverlayClick(): void {\n if (!this.isUnlockEntryFocused()) {\n this.focusUnlockEntry();\n }\n }\n\n protected onDesktopPinChange(value: string): void {\n const normalized = defaultTo(value, '');\n\n if (this.pinError() && normalized.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(normalized);\n }\n\n protected onDesktopPinCompleted(event: AXOtpCompletedEvent): void {\n if (!event.isCompleted || this.isVerifying()) {\n return;\n }\n\n this.pinInput.set(defaultTo(event.value, ''));\n void this.submitPin();\n }\n\n protected onMobilePinDigit(digit: number): void {\n if (this.isVerifying()) {\n return;\n }\n\n const current = this.pinInput();\n if (current.length >= AXP_AUTH_PIN_CODE_LENGTH) {\n return;\n }\n\n const next = `${current}${digit}`;\n\n if (this.pinError() && next.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(next);\n\n if (next.length === AXP_AUTH_PIN_CODE_LENGTH) {\n void this.submitPin();\n }\n }\n\n protected onMobilePinBackspace(): void {\n if (this.isVerifying()) {\n return;\n }\n\n const current = this.pinInput();\n if (!current.length) {\n return;\n }\n\n const next = current.slice(0, -1);\n\n if (this.pinError() && next.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(next);\n }\n\n protected onPasswordChange(value: string): void {\n this.passwordInput.set(defaultTo(value, ''));\n this.passwordError.set(false);\n }\n\n protected showPasswordUnlock(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n this.unlockMode.set('password');\n this.resetPinInput();\n this.focusUnlockEntry();\n }\n\n protected showPinUnlock(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n\n if (!this.hasPinCode()) {\n return;\n }\n\n this.unlockMode.set('pin');\n this.passwordInput.set('');\n this.passwordError.set(false);\n this.focusUnlockEntry();\n }\n\n protected submitPassword(): void {\n void this.verifyPasswordAndUnlock();\n }\n\n protected signOut(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n void this.commandService.execute(AXMAuthCommandKeys.Session.Signout, {});\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async initializeUnlockMode(): Promise<void> {\n await this.idleLockService.refreshPinState();\n this.resetUnlockState();\n this.focusUnlockEntry();\n }\n\n private getDefaultUnlockMode(): AXMSessionLockUnlockMode {\n return this.idleLockService.hasPinCode() ? 'pin' : 'password';\n }\n\n private async loadUserRoleTitle(): Promise<void> {\n const userId = this.sessionService.user?.id;\n if (!userId || !this.sessionService.isReadyForAppScopedApi) {\n this.userRoleTitle.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 roleTitle = defaultTo(get(first(get(user, 'roles', [])), 'title'), '');\n this.userRoleTitle.set(roleTitle);\n } catch (error) {\n console.error('Failed to load user role for session lock overlay', error);\n this.userRoleTitle.set('');\n }\n }\n\n private async submitPin(): Promise<void> {\n if (this.isVerifying()) {\n return;\n }\n\n const pin = this.pinInput();\n if (!AXP_AUTH_PIN_CODE_PATTERN.test(pin)) {\n return;\n }\n\n this.isVerifying.set(true);\n try {\n if (this.idleLockService.verifyPin(pin)) {\n this.idleLockService.unlock();\n this.resetUnlockState();\n return;\n }\n\n await this.showIncorrectPinError();\n this.applyPinValidationError();\n } finally {\n this.isVerifying.set(false);\n }\n }\n\n private async verifyPasswordAndUnlock(): Promise<void> {\n if (this.isVerifying() || !this.passwordInput()) {\n return;\n }\n\n this.isVerifying.set(true);\n try {\n if (await this.idleLockService.verifyPassword(this.passwordInput())) {\n this.idleLockService.unlock();\n this.resetUnlockState();\n return;\n }\n\n await this.showIncorrectPasswordError();\n this.triggerPasswordError();\n this.passwordInput.set('');\n this.focusUnlockEntry();\n } finally {\n this.isVerifying.set(false);\n }\n }\n\n private resetUnlockState(): void {\n this.unlockMode.set(this.getDefaultUnlockMode());\n this.resetPinInput();\n this.passwordInput.set('');\n this.passwordError.set(false);\n this.pinError.set(false);\n }\n\n private resetPinInput(clearError = true): void {\n if (clearError) {\n this.pinError.set(false);\n }\n\n this.pinInput.set('');\n this.otpInput()?.reset();\n }\n\n private applyPinValidationError(): void {\n this.resetPinInput(false);\n\n afterNextRender(\n () => {\n this.pinError.set(true);\n this.syncOtpErrorState();\n\n if (!this.useDeviceKeyboard()) {\n this.otpInput()?.focus();\n }\n },\n { injector: this.injector },\n );\n }\n\n private syncOtpErrorState(): void {\n const otp = this.otpInput();\n if (otp) {\n otp.state = 'error';\n }\n }\n\n private focusUnlockEntry(): void {\n afterNextRender(\n () => {\n if (this.unlockMode() === 'password') {\n this.focusPasswordInput();\n return;\n }\n\n if (!this.useDeviceKeyboard()) {\n this.otpInput()?.focus();\n }\n },\n { injector: this.injector },\n );\n }\n\n private focusPasswordInput(): void {\n const attemptFocus = (): boolean => {\n const passwordBox = this.passwordBox();\n if (!passwordBox) {\n return false;\n }\n\n passwordBox.focus();\n\n requestAnimationFrame(() => {\n if (!this.isUnlockEntryFocused()) {\n passwordBox.focus();\n }\n });\n\n return true;\n };\n\n if (!attemptFocus()) {\n afterNextRender(() => attemptFocus(), { injector: this.injector });\n }\n }\n\n private bindRefocusOnInteraction(): void {\n const onKeydown = (event: KeyboardEvent): void => {\n if (this.isUnlockEntryFocused() || event.defaultPrevented) {\n return;\n }\n\n this.focusUnlockEntry();\n };\n\n document.addEventListener('keydown', onKeydown, true);\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('keydown', onKeydown, true);\n });\n }\n\n private isUnlockEntryFocused(): boolean {\n const active = document.activeElement;\n if (!(active instanceof HTMLElement)) {\n return false;\n }\n\n if (this.unlockMode() === 'password') {\n return active.closest('ax-password-box') !== null;\n }\n\n if (this.useDeviceKeyboard()) {\n return active.closest('axp-virtual-keypad') !== null;\n }\n\n return active.closest('ax-otp') !== null;\n }\n\n private triggerPasswordError(): void {\n this.passwordError.set(true);\n setTimeout(() => this.passwordError.set(false), 450);\n }\n\n private async showIncorrectPinError(): Promise<void> {\n const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-pin');\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n private async showIncorrectPasswordError(): Promise<void> {\n const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-password');\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-session-lock-overlay\" [class.axm-session-lock-overlay--desktop]=\"!useDeviceKeyboard()\"\n [class.axm-session-lock-overlay--mobile]=\"useDeviceKeyboard()\" (click)=\"onOverlayClick()\">\n <div class=\"axm-session-lock-overlay__panel\" axFocusTrap tabindex=\"-1\" (click)=\"$event.stopPropagation()\">\n <div class=\"axm-session-lock-overlay__profile\">\n <div class=\"axm-session-lock-overlay__avatar-wrap\">\n @if (userId(); as resolvedUserId) {\n <axp-user-avatar [size]=\"useDeviceKeyboard() ? 64 : 80\" [userId]=\"resolvedUserId\"></axp-user-avatar>\n }\n </div>\n\n @if (displayName()) {\n <p class=\"axm-session-lock-overlay__name m-0\">\n {{ displayName() }}\n </p>\n }\n\n <!-- @if (userRoleTitle()) {\n <p class=\"axm-session-lock-overlay__role m-0\">\n {{ userRoleTitle() }}\n </p>\n } -->\n\n @if (applicationBadge()) {\n <div class=\"axm-session-lock-overlay__user-badge\">\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n <span>{{ applicationBadge() | translate | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__divider\" aria-hidden=\"true\"></div>\n\n <div class=\"axm-session-lock-overlay__body\">\n <div class=\"axm-session-lock-overlay__body-main\">\n <div class=\"axm-session-lock-overlay__lock-badge\" aria-hidden=\"true\">\n <i class=\"fa-light fa-lock\"></i>\n </div>\n\n <h2 class=\"axm-session-lock-overlay__title m-0\">\n {{ '@auth:session-lock.title' | translate | async }}\n </h2>\n\n @if (unlockMode() === 'pin' && hasPinCode()) {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.pin-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__otp\" [class.axm-session-lock-overlay__otp--error]=\"pinError()\">\n <ax-otp class=\"w-full block\" [type]=\"'number'\" [mode]=\"'star'\" [length]=\"pinLength\" [state]=\"otpState()\"\n [readonly]=\"useDeviceKeyboard()\" [disabled]=\"isVerifying()\" [ngModel]=\"pinInput()\"\n (ngModelChange)=\"onDesktopPinChange($event)\" (onCompleted)=\"onDesktopPinCompleted($event)\"></ax-otp>\n </div>\n } @else {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.password-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__password\"\n [class.axm-session-lock-overlay__password--error]=\"passwordError()\">\n <ax-password-box class=\"axm-session-lock-overlay__password-input w-full\" look=\"outline\"\n [disabled]=\"isVerifying()\" [ngModel]=\"passwordInput()\" (ngModelChange)=\"onPasswordChange($event)\"\n (keydown.enter)=\"submitPassword()\" [placeholder]=\"'@auth:password' | translate | async\"></ax-password-box>\n </div>\n\n <div class=\"axm-session-lock-overlay__actions\">\n <ax-button class=\"axm-session-lock-overlay__action w-full rounded-lg\" look=\"solid\" color=\"primary\"\n [disabled]=\"isVerifying() || !passwordInput()\" [text]=\"'@auth:session-lock.unlock' | translate | async\"\n (onClick)=\"submitPassword()\"></ax-button>\n </div>\n }\n </div>\n\n @if (useDeviceKeyboard() && unlockMode() === 'pin' && hasPinCode()) {\n <axp-virtual-keypad class=\"axm-session-lock-overlay__keypad\" look=\"solid\" [disabled]=\"isVerifying()\"\n (digitPress)=\"onMobilePinDigit($event)\" (backspace)=\"onMobilePinBackspace()\">\n </axp-virtual-keypad>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer\">\n <div class=\"axm-session-lock-overlay__footer-actions\">\n @if (hasPinCode()) {\n <div class=\"axm-session-lock-overlay__footer-action\">\n @if (unlockMode() === 'pin') {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-password-instead' | translate | async\"\n (onClick)=\"showPasswordUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-pin-instead' | translate | async\" (onClick)=\"showPinUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer-divider\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"axm-session-lock-overlay__footer-action\">\n <ax-button class=\"w-full\" look=\"blank\" color=\"danger\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.sign-out' | translate | async\" (onClick)=\"signOut($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-arrow-right-from-bracket\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n </div>\n</div>"],"names":["i5","i6","i7"],"mappings":"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"}