@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 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-change-photo.command-CYGqrJV0.mjs","sources":["../../../../libs/modules/auth/client/src/lib/commands/change-photo.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPRuntimeCommandResult,\n type AXPRuntimeMessage,\n} from '@acorex-platform/framework-shared/core';\nimport { extractRequestErrorInfo, platformErrorI18nKey } from '@acorex-platform/framework-client/common';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPImageEditorService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\nimport { AXFileService } from '@acorex/core/file';\n\nimport { inject, Injectable } from '@angular/core';\nimport { isNil } from 'lodash';\n\nimport { AXPUserAvatarSyncService } from '../shared/services/user-avatar-sync.service';\n\n//#region ---- Change photo command ----\n\nexport type AXPChangePhotoCommandMode = 'upload' | 'manage';\n\nexport type AXPChangePhotoCommandInput = {\n mode?: AXPChangePhotoCommandMode;\n};\n\nconst PROFILE_PHOTO_DIALOG_PREVIEW_SIZE = {\n small: { width: '100%', height: 'auto' },\n large: { width: '100%', height: 'auto' },\n} as const;\n\n/** Self-service profile photo upload, replace, and removal backed by file storage. */\n@Injectable({ providedIn: 'root' })\nexport class AXPChangePhotoCommand implements AXPCommand<AXPChangePhotoCommandInput, void> {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly fileService = inject(AXFileService);\n private readonly imageEditor = inject(AXPImageEditorService);\n private readonly avatarSync = inject(AXPUserAvatarSyncService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(input: AXPChangePhotoCommandInput = {}): AXPCommandExecuteResultPromise<void> {\n const userId = this.sessionService.user?.id;\n if (isNil(userId)) {\n return {\n success: false,\n message: {\n text: '@auth:profile-page.commands.change-photo.messages.not-signed-in',\n },\n };\n }\n\n const mode = input.mode;\n if (mode === 'upload') {\n return this.executeUploadFlow(userId);\n }\n\n return this.executeManageFlow(userId);\n }\n\n private async executeUploadFlow(userId: string): AXPCommandExecuteResultPromise<void> {\n const editedFile = await this.pickAndEditPhoto();\n if (!editedFile) {\n return { success: false };\n }\n\n return this.uploadAvatarAndNotify(userId, editedFile);\n }\n\n private async executeManageFlow(userId: string): AXPCommandExecuteResultPromise<void> {\n const previewUrl = await this.resolveDialogPreviewUrl(userId);\n if (!previewUrl) {\n return this.executeUploadFlow(userId);\n }\n\n try {\n const result = await this.layoutBuilder\n .create()\n .dialog<AXPRuntimeCommandResult<void>>((dialog) => {\n dialog\n .setTitle('@auth:profile-page.commands.change-photo.dialog.title')\n .setSize('sm')\n .setCloseButton(true)\n .setContext({ previewUrl })\n .content((layout) => {\n layout.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('1rem')\n .setAlignItems('center')\n .setJustifyContent('center')\n .setOptions({ width: '100%', maxWidth: '100%', overflowX: 'hidden' });\n flex.customWidget('image', {\n path: 'previewUrl',\n type: 'profile-photo',\n readonly: true,\n enablePreviewClick: false,\n responsiveSize: PROFILE_PHOTO_DIALOG_PREVIEW_SIZE,\n });\n });\n })\n .setActions((actions) => {\n actions.custom({\n title: '@auth:profile-page.commands.change-photo.actions.remove',\n color: 'danger',\n position: 'prefix',\n command: { name: 'remove' },\n });\n actions.custom({\n title: '@auth:profile-page.commands.change-photo.actions.change',\n color: 'primary',\n command: { name: 'change' },\n });\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n\n if (action === 'remove') {\n dialogRef.setLoading(true);\n try {\n await this.avatarSync.removeAvatar(userId);\n return {\n success: true,\n kind: 'object',\n data: undefined,\n message: {\n type: 'success',\n text: '@auth:profile-page.commands.change-photo.messages.removed',\n },\n };\n } catch (error) {\n const info = extractRequestErrorInfo(error);\n return {\n success: false,\n keepDialogOpen: true,\n message: {\n type: 'error',\n code: info?.code,\n text:\n platformErrorI18nKey(info?.code) ??\n '@auth:profile-page.commands.change-photo.messages.failed',\n details: info?.details,\n },\n };\n } finally {\n dialogRef.setLoading(false);\n }\n }\n\n if (action === 'change') {\n const editedFile = await this.pickAndEditPhoto();\n if (!editedFile) {\n return { success: false, keepDialogOpen: true };\n }\n\n dialogRef.setLoading(true);\n try {\n const uploadResult = await this.uploadAvatarAndNotify(userId, editedFile);\n if (!uploadResult.success) {\n // Dialog stays open — toast middleware has not finished execute yet.\n await this.toastCommandMessage(uploadResult.message);\n return { ...uploadResult, keepDialogOpen: true };\n }\n return uploadResult;\n } finally {\n dialogRef.setLoading(false);\n }\n }\n\n return { success: false, keepDialogOpen: true };\n });\n })\n .show();\n\n return result ?? { success: false };\n } finally {\n if (previewUrl?.startsWith('blob:')) {\n URL.revokeObjectURL(previewUrl);\n }\n }\n }\n\n private async resolveDialogPreviewUrl(userId: string): Promise<string | null> {\n try {\n const blob = await this.avatarSync.getCurrentAvatarBlob(userId);\n if (!blob) {\n return null;\n }\n return URL.createObjectURL(blob);\n } catch {\n return null;\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async uploadAvatarAndNotify(\n userId: string,\n file: File,\n ): AXPCommandExecuteResultPromise<void> {\n try {\n await this.avatarSync.uploadAndSetAvatar(userId, file);\n return { success: true, kind: 'object', data: undefined, message: {\n type: 'success',\n text: '@auth:profile-page.commands.change-photo.messages.success',\n },\n };\n } catch (error) {\n const info = extractRequestErrorInfo(error);\n return {\n success: false,\n message: {\n type: 'error',\n code: info?.code,\n text:\n platformErrorI18nKey(info?.code) ??\n '@auth:profile-page.commands.change-photo.messages.failed',\n details: info?.details,\n },\n };\n }\n }\n\n private async toastCommandMessage(message: AXPRuntimeMessage | undefined): Promise<void> {\n const text = message?.text;\n let content: string | null = null;\n if (typeof text === 'string' && text.trim()) {\n content = text.startsWith('@')\n ? await this.translateService.translateAsync(text)\n : text;\n } else if (text && typeof text === 'object') {\n content = this.translateService.resolve(text);\n } else {\n const codeKey = platformErrorI18nKey(message?.code);\n if (codeKey) {\n content = await this.translateService.translateAsync(codeKey);\n }\n }\n if (!content) {\n return;\n }\n const title = await this.translateService.translateAsync(\n message?.type === 'success'\n ? '@general:messages.generic.success.title'\n : '@general:messages.generic.error.title',\n );\n this.toastService.show({\n color: message?.type === 'success' ? 'success' : 'danger',\n title,\n content,\n });\n }\n\n private async pickAndEditPhoto(): Promise<File | null> {\n const files = await this.fileService.choose({ accept: 'image/png, image/jpeg, image/webp' });\n const picked = files[0];\n if (!picked) {\n return null;\n }\n\n const editedBlob = await this.imageEditor.open({\n image: picked,\n title: '@auth:profile-page.commands.change-photo.dialog.editor-title',\n look: 'blank',\n aspectRatio: '1',\n });\n\n if (!editedBlob) {\n return null;\n }\n\n return new File([editedBlob], picked.name || 'profile-photo.png', {\n type: editedBlob.type || 'image/png',\n });\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -21,19 +21,21 @@ const AXMAuthCommandKeys = {
21
21
  };
22
22
  //#endregion
23
23
 
24
- //#region ---- Datasource keys ----
25
- /** Auth module datasource registry names. */
26
- const AXMAuthDataSourceKeys = {
27
- UserActivity: 'auth-user-activity',
28
- };
29
- //#endregion
30
-
31
24
  const AXPAuthMenuKeys = {};
32
25
 
26
+ /**
27
+ * Auth stub — maps legacy Management to Administration Access.
28
+ * Prefer {@link AXPAdministrationPermissionKeys} from security-management contracts when wiring real checks.
29
+ */
30
+ const AXPAdministrationPermissionKeys = {
31
+ Access: 'Administration:Permission:Access',
32
+ };
33
+ /**
34
+ * @deprecated Prefer Administration Access / conceptual keys.
35
+ */
33
36
  const AXMPermissionsKeys = {
34
37
  Auth: {
35
- Management: 'Auth:Permission:Management',
36
- // TODO: Add permission keys when permissions are defined
38
+ Management: AXPAdministrationPermissionKeys.Access,
37
39
  },
38
40
  };
39
41
 
@@ -51,6 +53,7 @@ const RootConfig = {
51
53
  },
52
54
  };
53
55
 
56
+ //#region ----- Auth setting keys -----
54
57
  var AXPAuthSettings;
55
58
  (function (AXPAuthSettings) {
56
59
  AXPAuthSettings["TwoFactorAuth"] = "Auth:Setting:Authentication.TwoFactorAuth";
@@ -58,6 +61,16 @@ var AXPAuthSettings;
58
61
  AXPAuthSettings["PasswordExpiryDays"] = "Auth:Setting:Authentication.PasswordExpiryDays";
59
62
  AXPAuthSettings["MaxLoginAttempts"] = "Auth:Setting:Authentication.MaxLoginAttempts";
60
63
  AXPAuthSettings["LockoutDuration"] = "Auth:Setting:Authentication.LockoutDuration";
64
+ AXPAuthSettings["CaptchaAttemptThreshold"] = "Auth:Setting:Authentication.CaptchaAttemptThreshold";
65
+ /** Platform sign-in page branding (multi-language string). */
66
+ AXPAuthSettings["SignInPageSlogan"] = "Auth:Setting:SignInPage.Slogan";
67
+ AXPAuthSettings["SignInPageDescription"] = "Auth:Setting:SignInPage.Description";
68
+ /** Platform sign-up policy. */
69
+ AXPAuthSettings["SignUpEnabled"] = "Auth:Setting:SignUp.Enabled";
70
+ AXPAuthSettings["SignUpUrl"] = "Auth:Setting:SignUp.Url";
71
+ /** Platform sign-in credential UX + default strategy. */
72
+ AXPAuthSettings["SignInCredentialType"] = "Auth:Setting:SignIn.CredentialType";
73
+ AXPAuthSettings["SignInDefaultStrategy"] = "Auth:Setting:SignIn.DefaultStrategy";
61
74
  AXPAuthSettings["LockWhenIdleEnabled"] = "Auth:Setting:SessionManagement.LockWhenIdleEnabled";
62
75
  AXPAuthSettings["LockWhenIdleMinutes"] = "Auth:Setting:SessionManagement.LockWhenIdleMinutes";
63
76
  AXPAuthSettings["InactiveSessionTermination"] = "Auth:Setting:SessionManagement.InactiveSessionTermination";
@@ -68,6 +81,29 @@ const AXPAuthInactiveSessionTerminationOptions = {
68
81
  ThreeMonths: 'threeMonths',
69
82
  SixMonths: 'sixMonths',
70
83
  };
84
+ /** Stored values for {@link AXPAuthSettings.SignInCredentialType}. */
85
+ const AXPAuthCredentialTypeOptions = {
86
+ UsernamePassword: 'UsernamePassword',
87
+ UsernameEmailPassword: 'UsernameEmailPassword',
88
+ EmailPassword: 'EmailPassword',
89
+ MobilePassword: 'MobilePassword',
90
+ EmailCode: 'EmailCode',
91
+ MobileCode: 'MobileCode',
92
+ };
93
+ const AXP_AUTH_LOCKOUT_SETTING_DEFAULTS = {
94
+ [AXPAuthSettings.MaxLoginAttempts]: 5,
95
+ [AXPAuthSettings.LockoutDuration]: 3,
96
+ [AXPAuthSettings.CaptchaAttemptThreshold]: 3,
97
+ };
98
+ const AXP_AUTH_SIGN_IN_PAGE_SLOGAN_DEFAULT = {
99
+ 'en-US': 'Welcome',
100
+ 'fa-IR': 'خوش آمدید',
101
+ };
102
+ const AXP_AUTH_SIGN_IN_PAGE_DESCRIPTION_DEFAULT = {
103
+ 'en-US': 'Sign in to continue to your applications.',
104
+ 'fa-IR': 'برای ادامه به برنامه‌های خود وارد شوید.',
105
+ };
106
+ //#endregion
71
107
 
72
108
  //#region ---- Contracts barrel ----
73
109
  //#endregion
@@ -76,5 +112,5 @@ const AXPAuthInactiveSessionTerminationOptions = {
76
112
  * Generated bundle index. Do not edit.
77
113
  */
78
114
 
79
- export { AXMAuthCommandKeys, AXMAuthDataSourceKeys, AXMPermissionsKeys, AXPAuthInactiveSessionTerminationOptions, AXPAuthMenuKeys, AXPAuthSettings, RootConfig };
115
+ export { AXMAuthCommandKeys, AXMPermissionsKeys, AXPAdministrationPermissionKeys, AXPAuthCredentialTypeOptions, AXPAuthInactiveSessionTerminationOptions, AXPAuthMenuKeys, AXPAuthSettings, AXP_AUTH_LOCKOUT_SETTING_DEFAULTS, AXP_AUTH_SIGN_IN_PAGE_DESCRIPTION_DEFAULT, AXP_AUTH_SIGN_IN_PAGE_SLOGAN_DEFAULT, RootConfig };
80
116
  //# sourceMappingURL=acorex-platform-module-auth-client-contracts.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-auth-client-contracts.mjs","sources":["../../../../libs/modules/auth/client/contracts/src/commands.keys.ts","../../../../libs/modules/auth/client/contracts/src/datasource.keys.ts","../../../../libs/modules/auth/client/contracts/src/menu.keys.ts","../../../../libs/modules/auth/client/contracts/src/permission.keys.ts","../../../../libs/modules/auth/client/contracts/src/root-config.ts","../../../../libs/modules/auth/client/contracts/src/settings.keys.ts","../../../../libs/modules/auth/client/contracts/src/index.ts","../../../../libs/modules/auth/client/contracts/src/acorex-platform-module-auth-client-contracts.ts"],"sourcesContent":["//#region ---- Command keys ----\n\nexport const AXMAuthCommandKeys = {\n Profile: {\n Show: 'auth:profile',\n ChangePhoto: 'auth:change-photo',\n EditAccountInfo: 'auth:edit-account-info',\n ComingSoon: 'auth:profile-coming-soon',\n },\n Session: {\n Signout: 'auth:signout',\n OpenSessions: 'auth:open-sessions',\n LockScreen: 'auth:lock-screen',\n },\n Security: {\n ChangePassword: 'auth:change-password',\n SetPinCode: 'auth:set-pin-code',\n RemovePinCode: 'auth:remove-pin-code',\n ViewLoginHistory: 'auth:view-login-history',\n EditSignature: 'auth:edit-signature',\n },\n} as const;\n\n//#endregion\n","//#region ---- Datasource keys ----\n\n/** Auth module datasource registry names. */\nexport const AXMAuthDataSourceKeys = {\n UserActivity: 'auth-user-activity',\n} as const;\n\n//#endregion\n","export const AXPAuthMenuKeys = {} as const;\n\n","export const AXMPermissionsKeys = {\n Auth: {\n Management: 'Auth:Permission:Management',\n // TODO: Add permission keys when permissions are defined\n },\n};\n","const config = {\n i18n: 'auth',\n module: 'Auth',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'auth',\n name: config.module,\n title: '@auth:module.title',\n icon: 'fa-light fa-shield-keyhole',\n },\n} as const;\n","export enum AXPAuthSettings {\n TwoFactorAuth = 'Auth:Setting:Authentication.TwoFactorAuth',\n PasswordComplexity = 'Auth:Setting:Authentication.PasswordComplexity',\n PasswordExpiryDays = 'Auth:Setting:Authentication.PasswordExpiryDays',\n MaxLoginAttempts = 'Auth:Setting:Authentication.MaxLoginAttempts',\n LockoutDuration = 'Auth:Setting:Authentication.LockoutDuration',\n LockWhenIdleEnabled = 'Auth:Setting:SessionManagement.LockWhenIdleEnabled',\n LockWhenIdleMinutes = 'Auth:Setting:SessionManagement.LockWhenIdleMinutes',\n InactiveSessionTermination = 'Auth:Setting:SessionManagement.InactiveSessionTermination',\n}\n\nexport const AXPAuthInactiveSessionTerminationOptions = {\n OneWeek: 'oneWeek',\n OneMonth: 'oneMonth',\n ThreeMonths: 'threeMonths',\n SixMonths: 'sixMonths',\n} as const;\n\nexport type AXPAuthInactiveSessionTerminationValue =\n (typeof AXPAuthInactiveSessionTerminationOptions)[keyof typeof AXPAuthInactiveSessionTerminationOptions];\n\n","//#region ---- Contracts barrel ----\n\nexport * from './commands.keys';\nexport * from './datasource.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './root-config';\nexport * from './settings.keys';\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AAEO,MAAM,kBAAkB,GAAG;AAChC,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,WAAW,EAAE,mBAAmB;AAChC,QAAA,eAAe,EAAE,wBAAwB;AACzC,QAAA,UAAU,EAAE,0BAA0B;AACvC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,YAAY,EAAE,oBAAoB;AAClC,QAAA,UAAU,EAAE,kBAAkB;AAC/B,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,cAAc,EAAE,sBAAsB;AACtC,QAAA,UAAU,EAAE,mBAAmB;AAC/B,QAAA,aAAa,EAAE,sBAAsB;AACrC,QAAA,gBAAgB,EAAE,yBAAyB;AAC3C,QAAA,aAAa,EAAE,qBAAqB;AACrC,KAAA;;AAGH;;ACvBA;AAEA;AACO,MAAM,qBAAqB,GAAG;AACnC,IAAA,YAAY,EAAE,oBAAoB;;AAGpC;;ACPO,MAAM,eAAe,GAAG;;ACAxB,MAAM,kBAAkB,GAAG;AAChC,IAAA,IAAI,EAAE;AACJ,QAAA,UAAU,EAAE,4BAA4B;;AAEzC,KAAA;;;ACJH,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,MAAM;CACf;AAEM,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,MAAM,CAAC,MAAM;AACnB,QAAA,KAAK,EAAE,oBAAoB;AAC3B,QAAA,IAAI,EAAE,4BAA4B;AACnC,KAAA;;;ICZS;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,2CAA2D;AAC3D,IAAA,eAAA,CAAA,oBAAA,CAAA,GAAA,gDAAqE;AACrE,IAAA,eAAA,CAAA,oBAAA,CAAA,GAAA,gDAAqE;AACrE,IAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,8CAAiE;AACjE,IAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,6CAA+D;AAC/D,IAAA,eAAA,CAAA,qBAAA,CAAA,GAAA,oDAA0E;AAC1E,IAAA,eAAA,CAAA,qBAAA,CAAA,GAAA,oDAA0E;AAC1E,IAAA,eAAA,CAAA,4BAAA,CAAA,GAAA,2DAAwF;AAC1F,CAAC,EATW,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;AAWpB,MAAM,wCAAwC,GAAG;AACtD,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,SAAS,EAAE,WAAW;;;ACfxB;AASA;;ACTA;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-platform-module-auth-client-contracts.mjs","sources":["../../../../libs/modules/auth/contracts/src/commands.keys.ts","../../../../libs/modules/auth/contracts/src/menu.keys.ts","../../../../libs/modules/auth/contracts/src/permission.keys.ts","../../../../libs/modules/auth/contracts/src/root-config.ts","../../../../libs/modules/auth/contracts/src/settings.keys.ts","../../../../libs/modules/auth/contracts/src/index.ts","../../../../libs/modules/auth/contracts/src/acorex-platform-module-auth-client-contracts.ts"],"sourcesContent":["//#region ---- Command keys ----\n\nexport const AXMAuthCommandKeys = {\n Profile: {\n Show: 'auth:profile',\n ChangePhoto: 'auth:change-photo',\n EditAccountInfo: 'auth:edit-account-info',\n ComingSoon: 'auth:profile-coming-soon',\n },\n Session: {\n Signout: 'auth:signout',\n OpenSessions: 'auth:open-sessions',\n LockScreen: 'auth:lock-screen',\n },\n Security: {\n ChangePassword: 'auth:change-password',\n SetPinCode: 'auth:set-pin-code',\n RemovePinCode: 'auth:remove-pin-code',\n ViewLoginHistory: 'auth:view-login-history',\n EditSignature: 'auth:edit-signature',\n },\n} as const;\n\n//#endregion\n","export const AXPAuthMenuKeys = {} as const;\n\n","/**\n * Auth stub — maps legacy Management to Administration Access.\n * Prefer {@link AXPAdministrationPermissionKeys} from security-management contracts when wiring real checks.\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n} as const;\n\n/**\n * @deprecated Prefer Administration Access / conceptual keys.\n */\nexport const AXMPermissionsKeys = {\n Auth: {\n Management: AXPAdministrationPermissionKeys.Access,\n },\n} as const;\n","const config = {\n i18n: 'auth',\n module: 'Auth',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'auth',\n name: config.module,\n title: '@auth:module.title',\n icon: 'fa-light fa-shield-keyhole',\n },\n} as const;\n","import type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\n\n//#region ----- Auth setting keys -----\n\nexport enum AXPAuthSettings {\n TwoFactorAuth = 'Auth:Setting:Authentication.TwoFactorAuth',\n PasswordComplexity = 'Auth:Setting:Authentication.PasswordComplexity',\n PasswordExpiryDays = 'Auth:Setting:Authentication.PasswordExpiryDays',\n MaxLoginAttempts = 'Auth:Setting:Authentication.MaxLoginAttempts',\n LockoutDuration = 'Auth:Setting:Authentication.LockoutDuration',\n CaptchaAttemptThreshold = 'Auth:Setting:Authentication.CaptchaAttemptThreshold',\n\n /** Platform sign-in page branding (multi-language string). */\n SignInPageSlogan = 'Auth:Setting:SignInPage.Slogan',\n SignInPageDescription = 'Auth:Setting:SignInPage.Description',\n\n /** Platform sign-up policy. */\n SignUpEnabled = 'Auth:Setting:SignUp.Enabled',\n SignUpUrl = 'Auth:Setting:SignUp.Url',\n\n /** Platform sign-in credential UX + default strategy. */\n SignInCredentialType = 'Auth:Setting:SignIn.CredentialType',\n SignInDefaultStrategy = 'Auth:Setting:SignIn.DefaultStrategy',\n\n LockWhenIdleEnabled = 'Auth:Setting:SessionManagement.LockWhenIdleEnabled',\n LockWhenIdleMinutes = 'Auth:Setting:SessionManagement.LockWhenIdleMinutes',\n InactiveSessionTermination = 'Auth:Setting:SessionManagement.InactiveSessionTermination',\n}\n\nexport const AXPAuthInactiveSessionTerminationOptions = {\n OneWeek: 'oneWeek',\n OneMonth: 'oneMonth',\n ThreeMonths: 'threeMonths',\n SixMonths: 'sixMonths',\n} as const;\n\nexport type AXPAuthInactiveSessionTerminationValue =\n (typeof AXPAuthInactiveSessionTerminationOptions)[keyof typeof AXPAuthInactiveSessionTerminationOptions];\n\n/** Stored values for {@link AXPAuthSettings.SignInCredentialType}. */\nexport const AXPAuthCredentialTypeOptions = {\n UsernamePassword: 'UsernamePassword',\n UsernameEmailPassword: 'UsernameEmailPassword',\n EmailPassword: 'EmailPassword',\n MobilePassword: 'MobilePassword',\n EmailCode: 'EmailCode',\n MobileCode: 'MobileCode',\n} as const;\n\nexport type AXPAuthCredentialTypeValue =\n (typeof AXPAuthCredentialTypeOptions)[keyof typeof AXPAuthCredentialTypeOptions];\n\nexport const AXP_AUTH_LOCKOUT_SETTING_DEFAULTS = {\n [AXPAuthSettings.MaxLoginAttempts]: 5,\n [AXPAuthSettings.LockoutDuration]: 3,\n [AXPAuthSettings.CaptchaAttemptThreshold]: 3,\n} as const;\n\nexport const AXP_AUTH_SIGN_IN_PAGE_SLOGAN_DEFAULT: AXPMultiLanguageString = {\n 'en-US': 'Welcome',\n 'fa-IR': 'خوش آمدید',\n};\n\nexport const AXP_AUTH_SIGN_IN_PAGE_DESCRIPTION_DEFAULT: AXPMultiLanguageString = {\n 'en-US': 'Sign in to continue to your applications.',\n 'fa-IR': 'برای ادامه به برنامه‌های خود وارد شوید.',\n};\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './commands.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './root-config';\nexport * from './settings.keys';\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -100,7 +100,7 @@ class AXPEditAccountInfoCommand {
100
100
  const successTitle = await this.translateService.translateAsync('@auth:profile-page.commands.edit-account-info.messages.success');
101
101
  this.toastService.show({ color: 'success', title: successTitle });
102
102
  dialogRef.close();
103
- return { success: true };
103
+ return { success: true, kind: 'object', data: undefined };
104
104
  }
105
105
  finally {
106
106
  dialogRef.setLoading(false);
@@ -117,13 +117,13 @@ class AXPEditAccountInfoCommand {
117
117
  const title = await this.translateService.translateAsync('@general:messages.generic.error.title');
118
118
  this.toastService.show({ color: 'danger', title, content, closeButton: true });
119
119
  }
120
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEditAccountInfoCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
121
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEditAccountInfoCommand, providedIn: 'root' }); }
120
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEditAccountInfoCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
121
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEditAccountInfoCommand, providedIn: 'root' }); }
122
122
  }
123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEditAccountInfoCommand, decorators: [{
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEditAccountInfoCommand, decorators: [{
124
124
  type: Injectable,
125
125
  args: [{ providedIn: 'root' }]
126
126
  }] });
127
127
 
128
128
  export { AXPEditAccountInfoCommand };
129
- //# sourceMappingURL=acorex-platform-module-auth-client-edit-account-info.command-B-mVlXxg.mjs.map
129
+ //# sourceMappingURL=acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs","sources":["../../../../libs/modules/auth/client/src/lib/commands/edit-account-info.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {RootConfig as SecurityManagementRootConfig} from '@acorex-platform/module-security-management-client/contracts'\nimport {AXMSecurityManagementUsersEntityModel} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSessionService, AXPUserProfileIdentityService } from '@acorex-platform/framework-client/auth';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, isEmpty, isNil, trim } from 'lodash';\n\n//#region ---- Edit account info command ----\n\n/** Opens a self-service dialog for users without an employee record (display name editable; username read-only). */\n@Injectable({ providedIn: 'root' })\nexport class AXPEditAccountInfoCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly identityService = inject(AXPUserProfileIdentityService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): AXPCommandExecuteResultPromise<void> {\n const userId = this.sessionService.user?.id;\n if (isNil(userId)) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@auth:profile-page.commands.edit-account-info.messages.not-signed-in',\n ),\n },\n };\n }\n\n const userData = this.entityService\n .withEntity(\n SecurityManagementRootConfig.module.name,\n SecurityManagementRootConfig.entities.users.name,\n )\n .data<string, AXMSecurityManagementUsersEntityModel>();\n\n const user = await userData.byKey(userId);\n if (isNil(user)) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@auth:profile-page.commands.edit-account-info.messages.user-not-found',\n ),\n },\n };\n }\n\n const dialogTitle = await this.translateService.translateAsync(\n '@auth:profile-page.commands.edit-account-info.dialog.title',\n );\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXPRuntimeCommandResult<void>>((dialog) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n username: defaultTo(user.username, ''),\n displayName: defaultTo(user.displayName, ''),\n })\n .content((layout) => {\n layout.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('1rem')\n .formField('@general:terms.contact.username', (field) => {\n field.path('username');\n field.disabled(true);\n field.textBox({\n placeholder: '@general:terms.contact.username',\n });\n })\n .formField('@general:terms.common.display-name', (field) => {\n field.path('displayName');\n field.textBox({\n placeholder: '@general:terms.common.display-name',\n validations: [{ rule: 'required' }],\n });\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return { success: false };\n }\n\n const form = dialogRef.context() as { username?: string; displayName?: string };\n const displayName = trim(defaultTo(form.displayName, ''));\n\n if (isEmpty(displayName)) {\n await this.showError('@auth:profile-page.commands.edit-account-info.messages.required-fields');\n throw new Error('Display name is required');\n }\n\n dialogRef.setLoading(true);\n try {\n await userData.update(userId, { displayName });\n\n await this.identityService.applySessionPatch({\n title: displayName,\n });\n\n const successTitle = await this.translateService.translateAsync(\n '@auth:profile-page.commands.edit-account-info.messages.success',\n );\n this.toastService.show({ color: 'success', title: successTitle });\n dialogRef.close();\n return { success: true, kind: 'object', data: undefined };\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n\n return result ?? { success: false };\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async showError(messageKey: string): Promise<void> {\n const content = await this.translateService.translateAsync(messageKey);\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"],"names":["SecurityManagementRootConfig"],"mappings":"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"}
@@ -18,15 +18,15 @@ class AXPEditSignatureCommand {
18
18
  async execute() {
19
19
  const text = await this.translateService.translateAsync('@auth:profile-page.commands.edit-signature.coming-soon');
20
20
  this.toastService.show({ color: 'primary', title: text });
21
- return { success: true };
21
+ return { success: true, kind: 'object', data: undefined };
22
22
  }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEditSignatureCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEditSignatureCommand, providedIn: 'root' }); }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEditSignatureCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEditSignatureCommand, providedIn: 'root' }); }
25
25
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPEditSignatureCommand, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEditSignatureCommand, decorators: [{
27
27
  type: Injectable,
28
28
  args: [{ providedIn: 'root' }]
29
29
  }] });
30
30
 
31
31
  export { AXPEditSignatureCommand };
32
- //# sourceMappingURL=acorex-platform-module-auth-client-edit-signature.command-CcTJJwAX.mjs.map
32
+ //# sourceMappingURL=acorex-platform-module-auth-client-edit-signature.command-TjOLhvKL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-edit-signature.command-TjOLhvKL.mjs","sources":["../../../../libs/modules/auth/client/src/lib/commands/edit-signature.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { inject, Injectable } from '@angular/core';\n\n//#region ---- Edit signature command (stub) ----\n\n/**\n * Opens the signature editor for the current user. Full flow will be added in a follow-up iteration.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPEditSignatureCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): AXPCommandExecuteResultPromise<void> {\n const text = await this.translateService.translateAsync('@auth:profile-page.commands.edit-signature.coming-soon');\n this.toastService.show({ color: 'primary', title: text });\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;AAOA;AAEA;;AAEG;MAEU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAajE,IAAA;;;AAPC,IAAA,MAAM,OAAO,GAAA;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,wDAAwD,CAAC;AACjH,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzD,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAdW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -0,0 +1,80 @@
1
+ import { runtimeQuerySuccessObject, runtimeQueryFailure } from '@acorex-platform/framework-shared/core';
2
+ import { RootConfig } from '@acorex-platform/module-security-management-client/contracts';
3
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
4
+ import * as i0 from '@angular/core';
5
+ import { inject, Injectable } from '@angular/core';
6
+ import { isEmpty } from 'lodash';
7
+ import { g as resolveDefaultUserActivityDateRange, h as buildUserActivityDataSourceItem } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs';
8
+
9
+ //#endregion
10
+ //#region ---- Helpers ----
11
+ function coerceDate(value, fallback) {
12
+ if (value instanceof Date && !Number.isNaN(value.getTime())) {
13
+ return value;
14
+ }
15
+ if (typeof value === 'string' && value.trim()) {
16
+ const parsed = new Date(value);
17
+ if (!Number.isNaN(parsed.getTime())) {
18
+ return parsed;
19
+ }
20
+ }
21
+ return fallback;
22
+ }
23
+ //#endregion
24
+ //#region ---- Query ----
25
+ /**
26
+ * User activity heatmap — replaces the `auth-user-activity` DI data source.
27
+ */
28
+ class AXMGetUserActivityQuery {
29
+ constructor() {
30
+ //#region ---- Services & Dependencies ----
31
+ this.entityService = inject(AXPEntityService);
32
+ }
33
+ //#endregion
34
+ //#region ---- Query Execution ----
35
+ async fetch(input) {
36
+ try {
37
+ if (isEmpty(input?.userId)) {
38
+ return runtimeQuerySuccessObject(null);
39
+ }
40
+ const defaultRange = resolveDefaultUserActivityDateRange();
41
+ const params = {
42
+ userId: input.userId,
43
+ startDate: coerceDate(input?.startDate, defaultRange.startDate),
44
+ endDate: coerceDate(input?.endDate, defaultRange.endDate),
45
+ };
46
+ const sessions = await this.loadUserSessions(params.userId);
47
+ const item = buildUserActivityDataSourceItem(params, sessions);
48
+ return runtimeQuerySuccessObject(item);
49
+ }
50
+ catch (error) {
51
+ return runtimeQueryFailure(error instanceof Error ? error.message : 'Unknown error occurred');
52
+ }
53
+ }
54
+ //#endregion
55
+ //#region ---- Private Methods ----
56
+ async loadUserSessions(userId) {
57
+ const response = await this.entityService
58
+ .withEntity(RootConfig.module.name, RootConfig.entities.deviceSessions.name)
59
+ .data()
60
+ .query({
61
+ skip: 0,
62
+ take: 1000,
63
+ filter: {
64
+ field: 'userId',
65
+ operator: { type: 'equal' },
66
+ value: userId,
67
+ },
68
+ });
69
+ return response.items ?? [];
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMGetUserActivityQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
72
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMGetUserActivityQuery, providedIn: 'root' }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMGetUserActivityQuery, decorators: [{
75
+ type: Injectable,
76
+ args: [{ providedIn: 'root' }]
77
+ }] });
78
+
79
+ export { AXMGetUserActivityQuery };
80
+ //# sourceMappingURL=acorex-platform-module-auth-client-get-user-activity.query-BTpibxe9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-get-user-activity.query-BTpibxe9.mjs","sources":["../../../../libs/modules/auth/client/src/lib/features/queries/get-user-activity.query.ts"],"sourcesContent":["import {\n runtimeQueryFailure,\n runtimeQuerySuccessObject,\n} from '@acorex-platform/framework-shared/core';\nimport type { AXPQuery, AXPQueryFetchResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport {\n AXMSecurityManagementDeviceSessionsEntityModel,\n RootConfig as SecurityManagementRootConfig,\n} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n\nimport { Injectable, inject } from '@angular/core';\nimport { isEmpty } from 'lodash';\n\nimport {\n AXPUserActivityDataSourceItem,\n AXPUserActivityLoadParams,\n} from '../../shared/datasources/user-activity/user-activity.types';\nimport {\n buildUserActivityDataSourceItem,\n resolveDefaultUserActivityDateRange,\n} from '../../shared/datasources/user-activity/user-activity.utils';\n\n//#region ---- Types ----\n\nexport interface AXMGetUserActivityQueryInput {\n userId: string;\n startDate?: string | Date;\n endDate?: string | Date;\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction coerceDate(value: string | Date | undefined, fallback: Date): Date {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return value;\n }\n if (typeof value === 'string' && value.trim()) {\n const parsed = new Date(value);\n if (!Number.isNaN(parsed.getTime())) {\n return parsed;\n }\n }\n return fallback;\n}\n\n//#endregion\n\n//#region ---- Query ----\n\n/**\n * User activity heatmap — replaces the `auth-user-activity` DI data source.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMGetUserActivityQuery\n implements AXPQuery<AXMGetUserActivityQueryInput, AXPUserActivityDataSourceItem | null>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Query Execution ----\n\n async fetch(\n input?: AXMGetUserActivityQueryInput | null,\n ): AXPQueryFetchResultPromise<AXPUserActivityDataSourceItem | null> {\n try {\n if (isEmpty(input?.userId)) {\n return runtimeQuerySuccessObject(null);\n }\n\n const defaultRange = resolveDefaultUserActivityDateRange();\n const params: AXPUserActivityLoadParams = {\n userId: input!.userId,\n startDate: coerceDate(input?.startDate, defaultRange.startDate),\n endDate: coerceDate(input?.endDate, defaultRange.endDate),\n };\n\n const sessions = await this.loadUserSessions(params.userId);\n const item = buildUserActivityDataSourceItem(params, sessions);\n return runtimeQuerySuccessObject(item);\n } catch (error) {\n return runtimeQueryFailure(\n error instanceof Error ? error.message : 'Unknown error occurred',\n );\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async loadUserSessions(\n userId: string,\n ): Promise<AXMSecurityManagementDeviceSessionsEntityModel[]> {\n const response = await this.entityService\n .withEntity(\n SecurityManagementRootConfig.module.name,\n SecurityManagementRootConfig.entities.deviceSessions.name,\n )\n .data<string, AXMSecurityManagementDeviceSessionsEntityModel>()\n .query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'userId',\n operator: { type: 'equal' },\n value: userId,\n } as AXDataSourceFilterOption,\n });\n\n return response.items ?? [];\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["SecurityManagementRootConfig"],"mappings":";;;;;;;;AAgCA;AAEA;AAEA,SAAS,UAAU,CAAC,KAAgC,EAAE,QAAc,EAAA;AAClE,IAAA,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;AAC3D,QAAA,OAAO,KAAK;IACd;IACA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;AACnC,YAAA,OAAO,MAAM;QACf;IACF;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA;AAEA;AAEA;;AAEG;MAEU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA0D1D,IAAA;;;IApDC,MAAM,KAAK,CACT,KAA2C,EAAA;AAE3C,QAAA,IAAI;AACF,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AAC1B,gBAAA,OAAO,yBAAyB,CAAC,IAAI,CAAC;YACxC;AAEA,YAAA,MAAM,YAAY,GAAG,mCAAmC,EAAE;AAC1D,YAAA,MAAM,MAAM,GAA8B;gBACxC,MAAM,EAAE,KAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC;gBAC/D,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;aAC1D;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3D,MAAM,IAAI,GAAG,+BAA+B,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC9D,YAAA,OAAO,yBAAyB,CAAC,IAAI,CAAC;QACxC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,mBAAmB,CACxB,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,wBAAwB,CAClE;QACH;IACF;;;IAMQ,MAAM,gBAAgB,CAC5B,MAAc,EAAA;AAEd,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AACzB,aAAA,UAAU,CACTA,UAA4B,CAAC,MAAM,CAAC,IAAI,EACxCA,UAA4B,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI;AAE1D,aAAA,IAAI;AACJ,aAAA,KAAK,CAAC;AACL,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACN,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,gBAAA,KAAK,EAAE,MAAM;AACc,aAAA;AAC9B,SAAA,CAAC;AAEJ,QAAA,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;IAC7B;8GA5DW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { f as AXPIdleLockService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-B7tIKOw6.mjs';
3
+ import { i as AXPIdleLockService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs';
4
4
 
5
5
  //#region ---- Lock screen command ----
6
6
  /** Locks the session overlay when Lock When Idle is enabled. */
@@ -16,15 +16,15 @@ class AXPLockScreenCommand {
16
16
  if (this.idleLockService.canLock()) {
17
17
  this.idleLockService.lockScreen();
18
18
  }
19
- return { success: true };
19
+ return { success: true, kind: 'object', data: undefined };
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLockScreenCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLockScreenCommand, providedIn: 'root' }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLockScreenCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLockScreenCommand, providedIn: 'root' }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLockScreenCommand, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLockScreenCommand, decorators: [{
25
25
  type: Injectable,
26
26
  args: [{ providedIn: 'root' }]
27
27
  }] });
28
28
 
29
29
  export { AXPLockScreenCommand };
30
- //# sourceMappingURL=acorex-platform-module-auth-client-lock-screen.command-41QnG1TQ.mjs.map
30
+ //# sourceMappingURL=acorex-platform-module-auth-client-lock-screen.command-Br9O4b5c.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-lock-screen.command-Br9O4b5c.mjs","sources":["../../../../libs/modules/auth/client/src/lib/commands/lock-screen.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPIdleLockService } from '../shared/services/idle-lock.service';\n\n//#region ---- Lock screen command ----\n\n/** Locks the session overlay when Lock When Idle is enabled. */\n@Injectable({ providedIn: 'root' })\nexport class AXPLockScreenCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly idleLockService = inject(AXPIdleLockService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): AXPCommandExecuteResultPromise<void> {\n await this.idleLockService.refreshLockState();\n\n if (this.idleLockService.canLock()) {\n this.idleLockService.lockScreen();\n }\n\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAMA;AAEA;MAEa,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAiB9D,IAAA;;;AAXC,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;AAE7C,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE;AAClC,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;QACnC;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAjBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -1,36 +1,23 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, NgModule } from '@angular/core';
3
3
  import { RouterModule, ROUTES } from '@angular/router';
4
- import { n as AXM_AUTH_CONFIG_TOKEN, o as AXM_LOGIN_GUARD_TOKEN, p as AXMAuthenticationTypes } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-B7tIKOw6.mjs';
4
+ import { t as AXM_LOGIN_GUARD_TOKEN } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs';
5
5
 
6
6
  function routesFacory() {
7
- const val = inject(AXM_AUTH_CONFIG_TOKEN);
8
7
  const loginGuard = inject(AXM_LOGIN_GUARD_TOKEN);
9
- let routes = [];
10
- routes = [
8
+ const routes = [
11
9
  {
12
10
  path: 'login',
13
11
  canActivate: [loginGuard],
14
- loadComponent: () => {
15
- if ([
16
- AXMAuthenticationTypes.UsernamePassword,
17
- AXMAuthenticationTypes.EmailPassword,
18
- AXMAuthenticationTypes.MobilePassword,
19
- ].includes(val.type)) {
20
- return import('./acorex-platform-module-auth-client-password.component-Cihg82vM.mjs').then((c) => c.AXPLoginPasswordComponent);
21
- }
22
- else {
23
- return import('./acorex-platform-module-auth-client-password.component-Cihg82vM.mjs').then((c) => c.AXPLoginPasswordComponent);
24
- }
25
- },
12
+ loadComponent: () => import('./acorex-platform-module-auth-client-password.component-CNKRWfuG.mjs').then((c) => c.AXPLoginPasswordComponent),
26
13
  },
27
14
  ];
28
15
  return routes;
29
16
  }
30
17
  class AXPSignInModule {
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignInModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
32
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXPSignInModule, imports: [RouterModule] }); }
33
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignInModule, providers: [
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSignInModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXPSignInModule, imports: [RouterModule] }); }
20
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSignInModule, providers: [
34
21
  {
35
22
  provide: ROUTES,
36
23
  multi: true,
@@ -38,7 +25,7 @@ class AXPSignInModule {
38
25
  },
39
26
  ], imports: [RouterModule] }); }
40
27
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignInModule, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSignInModule, decorators: [{
42
29
  type: NgModule,
43
30
  args: [{
44
31
  imports: [RouterModule],
@@ -54,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
54
41
  }] });
55
42
 
56
43
  export { AXPSignInModule };
57
- //# sourceMappingURL=acorex-platform-module-auth-client-login.module-DYtNYzF6.mjs.map
44
+ //# sourceMappingURL=acorex-platform-module-auth-client-login.module-DJVL3bAF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-login.module-DJVL3bAF.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/login/login.module.ts"],"sourcesContent":["import { NgModule, inject } from '@angular/core';\nimport { ROUTES, RouterModule, Routes } from '@angular/router';\nimport { AXM_LOGIN_GUARD_TOKEN } from '../../auth.config';\n\nfunction routesFacory() {\n const loginGuard = inject(AXM_LOGIN_GUARD_TOKEN);\n const routes: Routes = [\n {\n path: 'login',\n canActivate: [loginGuard],\n loadComponent: () =>\n import('./password/password.component').then((c) => c.AXPLoginPasswordComponent),\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [RouterModule],\n exports: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ],\n})\nexport class AXPSignInModule {}\n"],"names":[],"mappings":";;;;;AAIA,SAAS,YAAY,GAAA;AACnB,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAChD,IAAA,MAAM,MAAM,GAAW;AACrB,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,CAAC,UAAU,CAAC;AACzB,YAAA,aAAa,EAAE,MACb,OAAO,sEAA+B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,yBAAyB,CAAC;AACnF,SAAA;KACF;AACD,IAAA,OAAO,MAAM;AACf;MAaa,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAVhB,YAAY,CAAA,EAAA,CAAA,CAAA;AAUX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,SAAA,EARf;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,YAAY;AACzB,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CARS,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAUX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,YAAY;AACzB,yBAAA;AACF,qBAAA;AACF,iBAAA;;;;;"}
@@ -0,0 +1,39 @@
1
+ import * as i5 from '@acorex/core/translation';
2
+ import { AXTranslationModule } from '@acorex/core/translation';
3
+ import { AXPPlatformBrandingService } from '@acorex-platform/framework-client/common';
4
+ import * as i1$1 from '@acorex-platform/framework-client/core';
5
+ import { AXPLogoComponent, AXPComponentSlotModule, AXPContextStore } from '@acorex-platform/framework-client/core';
6
+ import { AsyncPipe } from '@angular/common';
7
+ import * as i0 from '@angular/core';
8
+ import { inject, signal, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
9
+ import * as i1 from '@angular/router';
10
+ import { RouterModule } from '@angular/router';
11
+ import { s as AXMAuthPlatformSettingsService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs';
12
+
13
+ //#region ----- Auth master layout -----
14
+ class AXPAuthMasterLayoutComponent {
15
+ //#endregion
16
+ //#region ----- Lifecycle -----
17
+ constructor() {
18
+ //#region ----- Services & Dependencies -----
19
+ this.authPlatformSettings = inject(AXMAuthPlatformSettingsService);
20
+ this.platformBranding = inject(AXPPlatformBrandingService);
21
+ this.platformTitle = signal('', /* @ts-ignore */
22
+ ...(ngDevMode ? [{ debugName: "platformTitle" }] : /* istanbul ignore next */ []));
23
+ //#endregion
24
+ //#region ----- Computed Properties -----
25
+ /** Plain string or MLS map — rendered via translate pipe. */
26
+ this.slogan = this.authPlatformSettings.slogan();
27
+ this.description = this.authPlatformSettings.description();
28
+ void this.platformBranding.resolvePlatformTitle().then((title) => this.platformTitle.set(title));
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAuthMasterLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPAuthMasterLayoutComponent, isStandalone: true, selector: "ng-component", providers: [AXPContextStore], ngImport: i0, template: "<div class=\"w-full h-full flex overflow-hidden\">\n <div\n class=\"axp-auth-master__form-pane flex-1 min-h-0 lightest-surface dark:darker-surface overflow-y-auto px-6 sm:px-8 md:px-10 lg:px-0\"\n >\n <!-- ----- Stack: logo + form vertically centered; footer pinned below ----- -->\n <div\n class=\"axp-auth-master__stack w-full min-h-full flex flex-col items-center\"\n >\n <div\n class=\"axp-auth-master__main w-full grow flex flex-col items-center justify-center gap-5 pt-6 pb-4 sm:pt-8 lg:pt-0 lg:gap-0\"\n >\n <!-- ----- Platform branding on viewports without the side panel ----- -->\n <div class=\"axp-auth-master__brand lg:hidden shrink-0 w-full flex justify-center\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"240\"\n [attr.alt]=\"platformTitle()\"\n class=\"axp-auth-master__logo\"\n ></axp-logo>\n </div>\n <div class=\"axp-auth-master__form-body w-full flex flex-col items-center\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <div class=\"flex justify-between shrink-0 pt-2 pb-1\">\n <div class=\"auth-footer-links\">\n <axp-component-slot name=\"auth-footer-links\"></axp-component-slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"hidden lg:flex bg-primary-500 flex-1 axp-auth-bk text-white\">\n <div class=\"flex w-full flex-col justify-between px-48 py-20 text-center \">\n <div>\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onDark\"\n format=\"full\"\n [size]=\"280\"\n [attr.alt]=\"platformTitle()\"\n class=\"w-[280px] max-w-full mx-auto\"\n ></axp-logo>\n </div>\n <div>\n <p class=\"font-black text-4xl mb-4\">{{ slogan | translate | async }}</p>\n <p>{{ description | translate | async }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;.axp-auth-master__form-pane{-webkit-overflow-scrolling:touch;padding-top:max(1.75rem,calc(env(safe-area-inset-top,0px) + 1.25rem));padding-bottom:max(1.5rem,env(safe-area-inset-bottom,0px))}@media(min-width:1024px){.axp-auth-master__form-pane{padding-top:3rem;padding-bottom:3rem}}.axp-auth-master__brand{padding-top:.5rem;margin-bottom:.25rem}.axp-auth-master__logo{width:min(15rem,85vw);max-width:100%}@media(min-width:640px){.axp-auth-master__logo{width:min(16.25rem,90vw)}}.axp-auth-master__form-body>*:not(router-outlet){display:block;width:100%}.auth-footer-links{gap:calc(var(--spacing, .25rem) * 5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.auth-footer-links a{background-color:transparent;color:var(--ax-comp-bg,var(--color-on-surface))}.auth-footer-links a.ax-state-selected{color:var(--ax-comp-bg-darker,var(--color-on-surface))}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "directive", type: i1$1.AXPComponentSlotDirective, selector: "axp-component-slot", inputs: ["name", "host", "context"], exportAs: ["slot"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAuthMasterLayoutComponent, decorators: [{
34
+ type: Component,
35
+ args: [{ imports: [RouterModule, AXPLogoComponent, AXPComponentSlotModule, AXTranslationModule, AsyncPipe], providers: [AXPContextStore], changeDetection: ChangeDetectionStrategy.Eager, encapsulation: ViewEncapsulation.None, template: "<div class=\"w-full h-full flex overflow-hidden\">\n <div\n class=\"axp-auth-master__form-pane flex-1 min-h-0 lightest-surface dark:darker-surface overflow-y-auto px-6 sm:px-8 md:px-10 lg:px-0\"\n >\n <!-- ----- Stack: logo + form vertically centered; footer pinned below ----- -->\n <div\n class=\"axp-auth-master__stack w-full min-h-full flex flex-col items-center\"\n >\n <div\n class=\"axp-auth-master__main w-full grow flex flex-col items-center justify-center gap-5 pt-6 pb-4 sm:pt-8 lg:pt-0 lg:gap-0\"\n >\n <!-- ----- Platform branding on viewports without the side panel ----- -->\n <div class=\"axp-auth-master__brand lg:hidden shrink-0 w-full flex justify-center\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"240\"\n [attr.alt]=\"platformTitle()\"\n class=\"axp-auth-master__logo\"\n ></axp-logo>\n </div>\n <div class=\"axp-auth-master__form-body w-full flex flex-col items-center\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <div class=\"flex justify-between shrink-0 pt-2 pb-1\">\n <div class=\"auth-footer-links\">\n <axp-component-slot name=\"auth-footer-links\"></axp-component-slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"hidden lg:flex bg-primary-500 flex-1 axp-auth-bk text-white\">\n <div class=\"flex w-full flex-col justify-between px-48 py-20 text-center \">\n <div>\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onDark\"\n format=\"full\"\n [size]=\"280\"\n [attr.alt]=\"platformTitle()\"\n class=\"w-[280px] max-w-full mx-auto\"\n ></axp-logo>\n </div>\n <div>\n <p class=\"font-black text-4xl mb-4\">{{ slogan | translate | async }}</p>\n <p>{{ description | translate | async }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;.axp-auth-master__form-pane{-webkit-overflow-scrolling:touch;padding-top:max(1.75rem,calc(env(safe-area-inset-top,0px) + 1.25rem));padding-bottom:max(1.5rem,env(safe-area-inset-bottom,0px))}@media(min-width:1024px){.axp-auth-master__form-pane{padding-top:3rem;padding-bottom:3rem}}.axp-auth-master__brand{padding-top:.5rem;margin-bottom:.25rem}.axp-auth-master__logo{width:min(15rem,85vw);max-width:100%}@media(min-width:640px){.axp-auth-master__logo{width:min(16.25rem,90vw)}}.axp-auth-master__form-body>*:not(router-outlet){display:block;width:100%}.auth-footer-links{gap:calc(var(--spacing, .25rem) * 5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.auth-footer-links a{background-color:transparent;color:var(--ax-comp-bg,var(--color-on-surface))}.auth-footer-links a.ax-state-selected{color:var(--ax-comp-bg-darker,var(--color-on-surface))}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
36
+ }], ctorParameters: () => [] });
37
+
38
+ export { AXPAuthMasterLayoutComponent };
39
+ //# sourceMappingURL=acorex-platform-module-auth-client-master.layout-DZUYm22p.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-auth-client-master.layout-DZUYm22p.mjs","sources":["../../../../libs/modules/auth/client/src/lib/shared/layouts/master/master.layout.ts","../../../../libs/modules/auth/client/src/lib/shared/layouts/master/master.layout.html"],"sourcesContent":["import { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPlatformBrandingService } from '@acorex-platform/framework-client/common';\nimport { AXPComponentSlotModule, AXPContextStore, AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, inject, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AXMAuthPlatformSettingsService } from '../../../auth-platform-settings.service';\n\n//#region ----- Auth master layout -----\n\n@Component({\n templateUrl: 'master.layout.html',\n styleUrls: ['master.layout.css'],\n imports: [RouterModule, AXPLogoComponent, AXPComponentSlotModule, AXTranslationModule, AsyncPipe],\n providers: [AXPContextStore],\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPAuthMasterLayoutComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly authPlatformSettings = inject(AXMAuthPlatformSettingsService);\n private readonly platformBranding = inject(AXPPlatformBrandingService);\n\n protected readonly platformTitle = signal('');\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n void this.platformBranding.resolvePlatformTitle().then((title) => this.platformTitle.set(title));\n }\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n /** Plain string or MLS map — rendered via translate pipe. */\n protected readonly slogan = this.authPlatformSettings.slogan();\n protected readonly description = this.authPlatformSettings.description();\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"w-full h-full flex overflow-hidden\">\n <div\n class=\"axp-auth-master__form-pane flex-1 min-h-0 lightest-surface dark:darker-surface overflow-y-auto px-6 sm:px-8 md:px-10 lg:px-0\"\n >\n <!-- ----- Stack: logo + form vertically centered; footer pinned below ----- -->\n <div\n class=\"axp-auth-master__stack w-full min-h-full flex flex-col items-center\"\n >\n <div\n class=\"axp-auth-master__main w-full grow flex flex-col items-center justify-center gap-5 pt-6 pb-4 sm:pt-8 lg:pt-0 lg:gap-0\"\n >\n <!-- ----- Platform branding on viewports without the side panel ----- -->\n <div class=\"axp-auth-master__brand lg:hidden shrink-0 w-full flex justify-center\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"240\"\n [attr.alt]=\"platformTitle()\"\n class=\"axp-auth-master__logo\"\n ></axp-logo>\n </div>\n <div class=\"axp-auth-master__form-body w-full flex flex-col items-center\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <div class=\"flex justify-between shrink-0 pt-2 pb-1\">\n <div class=\"auth-footer-links\">\n <axp-component-slot name=\"auth-footer-links\"></axp-component-slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"hidden lg:flex bg-primary-500 flex-1 axp-auth-bk text-white\">\n <div class=\"flex w-full flex-col justify-between px-48 py-20 text-center \">\n <div>\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onDark\"\n format=\"full\"\n [size]=\"280\"\n [attr.alt]=\"platformTitle()\"\n class=\"w-[280px] max-w-full mx-auto\"\n ></axp-logo>\n </div>\n <div>\n <p class=\"font-black text-4xl mb-4\">{{ slogan | translate | async }}</p>\n <p>{{ description | translate | async }}</p>\n </div>\n </div>\n </div>\n</div>\n"],"names":["i2"],"mappings":";;;;;;;;;;;;AAQA;MAUa,4BAA4B,CAAA;;;AAYvC,IAAA,WAAA,GAAA;;AATiB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,8BAA8B,CAAC;AAC7D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,0BAA0B,CAAC;QAEnD,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,EAAE;0FAAC;;;;AAe1B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;AAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;QATtE,KAAK,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClG;8GAdW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAJ5B,CAAC,eAAe,CAAC,0BCd9B,u/DAoDA,EAAA,MAAA,EAAA,CAAA,k1CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvCY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,0FAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKrF,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBARxC,SAAS;8BAGC,CAAC,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,SAAS,CAAC,aACtF,CAAC,eAAe,CAAC,EAAA,eAAA,EACX,uBAAuB,CAAC,KAAK,EAAA,aAAA,EAC/B,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,u/DAAA,EAAA,MAAA,EAAA,CAAA,k1CAAA,CAAA,EAAA;;;;;"}