@acorex-platform/module-auth-client 0.0.38 → 0.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-module-auth-client-accept-invitation.component-Ct28GG3a.mjs +179 -0
- package/fesm2022/acorex-platform-module-auth-client-accept-invitation.component-Ct28GG3a.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-acorex-platform-module-auth-client-CRl74b8g.mjs → acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs} +1154 -107
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-CjWofUGR.mjs → acorex-platform-module-auth-client-app-chooser.component-CLKLwWW8.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-CjWofUGR.mjs.map → acorex-platform-module-auth-client-app-chooser.component-CLKLwWW8.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-blank.layout-BCXNPgrp.mjs → acorex-platform-module-auth-client-blank.layout-xSXPWxyw.mjs} +3 -3
- package/fesm2022/acorex-platform-module-auth-client-blank.layout-xSXPWxyw.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BqU3jYV9.mjs → acorex-platform-module-auth-client-change-password.command-CknYaMZD.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BqU3jYV9.mjs.map → acorex-platform-module-auth-client-change-password.command-CknYaMZD.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-CzO3A7OG.mjs → acorex-platform-module-auth-client-change-photo.command-CML784Lg.mjs} +71 -21
- package/fesm2022/acorex-platform-module-auth-client-change-photo.command-CML784Lg.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-auth-client-command-return-url.util-mBmtJ7T2.mjs +69 -0
- package/fesm2022/acorex-platform-module-auth-client-command-return-url.util-mBmtJ7T2.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-auth-client-contracts.mjs +12 -7
- package/fesm2022/acorex-platform-module-auth-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs → acorex-platform-module-auth-client-edit-account-info.command-DulLUfWs.mjs} +25 -4
- package/fesm2022/acorex-platform-module-auth-client-edit-account-info.command-DulLUfWs.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-B1bKcSVQ.mjs → acorex-platform-module-auth-client-get-user-activity.query-CV9mdOBi.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-B1bKcSVQ.mjs.map → acorex-platform-module-auth-client-get-user-activity.query-CV9mdOBi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-DKtlBzS7.mjs → acorex-platform-module-auth-client-lock-screen.command-BH3Q6lJE.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-DKtlBzS7.mjs.map → acorex-platform-module-auth-client-lock-screen.command-BH3Q6lJE.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-login.module-CXl61yOu.mjs → acorex-platform-module-auth-client-login.module-DtvnPpBH.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-login.module-CXl61yOu.mjs.map → acorex-platform-module-auth-client-login.module-DtvnPpBH.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-manage-two-factor.command-BAg2W20W.mjs +445 -0
- package/fesm2022/acorex-platform-module-auth-client-manage-two-factor.command-BAg2W20W.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-D7zUm7aL.mjs → acorex-platform-module-auth-client-master.layout-B3krDskY.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-D7zUm7aL.mjs.map → acorex-platform-module-auth-client-master.layout-B3krDskY.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-oauth-callback.component-fdWC08nA.mjs → acorex-platform-module-auth-client-oauth-callback.component-DWnljN18.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-oauth-callback.component-fdWC08nA.mjs.map → acorex-platform-module-auth-client-oauth-callback.component-DWnljN18.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-DKvyMkhl.mjs → acorex-platform-module-auth-client-open-sessions.command-CEpu6c7D.mjs} +6 -6
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-DKvyMkhl.mjs.map → acorex-platform-module-auth-client-open-sessions.command-CEpu6c7D.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-open-waiting-room.command-CR-_ppYd.mjs +28 -0
- package/fesm2022/acorex-platform-module-auth-client-open-waiting-room.command-CR-_ppYd.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-password.component-BE2JkYm_.mjs → acorex-platform-module-auth-client-password.component-Ci5Wy3rO.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-password.component-BE2JkYm_.mjs.map → acorex-platform-module-auth-client-password.component-Ci5Wy3rO.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-password.component-BoWDVby5.mjs → acorex-platform-module-auth-client-password.component-ddh-_0k3.mjs} +39 -9
- package/fesm2022/acorex-platform-module-auth-client-password.component-ddh-_0k3.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-platform-settings-unavailable.component-BJMtsa99.mjs → acorex-platform-module-auth-client-platform-settings-unavailable.component-LwuokJiZ.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-platform-settings-unavailable.component-BJMtsa99.mjs.map → acorex-platform-module-auth-client-platform-settings-unavailable.component-LwuokJiZ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-CFaRGMKu.mjs → acorex-platform-module-auth-client-profile-activity-chart.component-D4bqeKCd.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-CFaRGMKu.mjs.map → acorex-platform-module-auth-client-profile-activity-chart.component-D4bqeKCd.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-Dx2-o9XL.mjs → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DWNbDzDd.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-Dx2-o9XL.mjs.map → acorex-platform-module-auth-client-profile-delete-account-danger-zone.component-DWNbDzDd.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-1Spuexhb.mjs → acorex-platform-module-auth-client-profile-page-component.provider-DLTbTEe6.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-1Spuexhb.mjs.map → acorex-platform-module-auth-client-profile-page-component.provider-DLTbTEe6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-CGs24n0j.mjs → acorex-platform-module-auth-client-profile-page.component-BhmMsO3g.mjs} +9 -7
- package/fesm2022/acorex-platform-module-auth-client-profile-page.component-BhmMsO3g.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-auth-client-pwa-install.component-BJOvT0hW.mjs +84 -0
- package/fesm2022/acorex-platform-module-auth-client-pwa-install.component-BJOvT0hW.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-BlOn9609.mjs → acorex-platform-module-auth-client-register-password.component-M-ayP7oO.mjs} +7 -7
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-BlOn9609.mjs.map → acorex-platform-module-auth-client-register-password.component-M-ayP7oO.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register.module-CpoYf5uG.mjs → acorex-platform-module-auth-client-register.module-Qa3ovje0.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-auth-client-register.module-CpoYf5uG.mjs.map → acorex-platform-module-auth-client-register.module-Qa3ovje0.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-Da7ryul6.mjs → acorex-platform-module-auth-client-remove-pin-code.command-BenNCyt6.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-Da7ryul6.mjs.map → acorex-platform-module-auth-client-remove-pin-code.command-BenNCyt6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-reset-password.component-D0nxlhJm.mjs → acorex-platform-module-auth-client-reset-password.component-BQfKSqpW.mjs} +6 -6
- package/fesm2022/{acorex-platform-module-auth-client-reset-password.component-D0nxlhJm.mjs.map → acorex-platform-module-auth-client-reset-password.component-BQfKSqpW.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-result.component-Bo1QkwMu.mjs → acorex-platform-module-auth-client-result.component-PhPaEAgh.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-result.component-Bo1QkwMu.mjs.map → acorex-platform-module-auth-client-result.component-PhPaEAgh.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-routes-90eFjxx8.mjs +17 -0
- package/fesm2022/acorex-platform-module-auth-client-routes-90eFjxx8.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-session-limit.component-DH58dRba.mjs → acorex-platform-module-auth-client-session-limit.component-Dc6TIn-2.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-session-limit.component-DH58dRba.mjs.map → acorex-platform-module-auth-client-session-limit.component-Dc6TIn-2.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-cDCrwNRV.mjs → acorex-platform-module-auth-client-session-lock-overlay.component-ChigSAI-.mjs} +7 -7
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-cDCrwNRV.mjs.map → acorex-platform-module-auth-client-session-lock-overlay.component-ChigSAI-.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-FjM1kzUj.mjs → acorex-platform-module-auth-client-set-pin-code.command-CefSbJz8.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-FjM1kzUj.mjs.map → acorex-platform-module-auth-client-set-pin-code.command-CefSbJz8.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-BgEgdFxQ.mjs → acorex-platform-module-auth-client-set-pin-code.component-DqFW_4rM.mjs} +6 -6
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-BgEgdFxQ.mjs.map → acorex-platform-module-auth-client-set-pin-code.component-DqFW_4rM.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-settings.provider-DGiK-MmW.mjs → acorex-platform-module-auth-client-settings.provider-DsKsZrOC.mjs} +18 -13
- package/fesm2022/acorex-platform-module-auth-client-settings.provider-DsKsZrOC.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-signout-command-B7n_Fn4P.mjs → acorex-platform-module-auth-client-signout-command-D4Qgv7q2.mjs} +7 -1
- package/fesm2022/acorex-platform-module-auth-client-signout-command-D4Qgv7q2.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-B8CNqHx5.mjs → acorex-platform-module-auth-client-tenant-chooser.component-DCdRCf1m.mjs} +5 -5
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-B8CNqHx5.mjs.map → acorex-platform-module-auth-client-tenant-chooser.component-DCdRCf1m.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-two-factor-challenge.storage-mi0UD7Sc.mjs +48 -0
- package/fesm2022/acorex-platform-module-auth-client-two-factor-challenge.storage-mi0UD7Sc.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-CtSv3MQu.mjs +200 -0
- package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-CtSv3MQu.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-CI8KC5M_.mjs → acorex-platform-module-auth-client-two-factor.module-B7tETPbq.mjs} +10 -5
- package/fesm2022/acorex-platform-module-auth-client-two-factor.module-B7tETPbq.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-Cqb27L-l.mjs → acorex-platform-module-auth-client-view-login-history.command-CKPbyVWd.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-Cqb27L-l.mjs.map → acorex-platform-module-auth-client-view-login-history.command-CKPbyVWd.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-waiting-room.component-IAVIt1fY.mjs +165 -0
- package/fesm2022/acorex-platform-module-auth-client-waiting-room.component-IAVIt1fY.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding-page.component-C2WYgv4l.mjs +813 -0
- package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding-page.component-C2WYgv4l.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs +59 -0
- package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-auth-client.mjs +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-module-auth-client-contracts.d.ts +13 -3
- package/types/acorex-platform-module-auth-client.d.ts +60 -2
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-CRl74b8g.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-blank.layout-BCXNPgrp.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-change-photo.command-CzO3A7OG.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-edit-account-info.command-CD9IrimO.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-password.component-BoWDVby5.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-profile-page.component-CGs24n0j.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-routes-B6iJHJ60.mjs +0 -13
- package/fesm2022/acorex-platform-module-auth-client-routes-B6iJHJ60.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-settings.provider-DGiK-MmW.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-signout-command-B7n_Fn4P.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-BrqfaY8i.mjs +0 -40
- package/fesm2022/acorex-platform-module-auth-client-two-factor-code.component-BrqfaY8i.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-two-factor.module-CI8KC5M_.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-welcome-onboarding-page.component-C2WYgv4l.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/account/welcome-onboarding/welcome-onboarding-palette-scope.util.ts","../../../../libs/modules/auth/client/src/lib/pages/account/welcome-onboarding/welcome-onboarding-confetti.util.ts","../../../../libs/modules/auth/client/src/lib/pages/account/welcome-onboarding/welcome-onboarding-typography-preview.util.ts","../../../../libs/modules/auth/client/src/lib/pages/account/welcome-onboarding/welcome-onboarding-page.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/welcome-onboarding/welcome-onboarding-page.component.html"],"sourcesContent":["//#region ----- Scoped palette CSS -----\n\nconst WELCOME_PALETTE_SCOPE = '.axp-welcome-onboarding';\n\nfunction normalizeHexColor(value: string): string | undefined {\n const raw = value.trim();\n const withoutHash = raw.startsWith('#') ? raw.slice(1) : raw;\n if (/^[0-9a-fA-F]{3}$/.test(withoutHash)) {\n return withoutHash\n .split('')\n .map((char) => char + char)\n .join('')\n .toLowerCase();\n }\n if (/^[0-9a-fA-F]{6}$/.test(withoutHash)) {\n return withoutHash.toLowerCase();\n }\n return undefined;\n}\n\nfunction hexToRgb(hex: string): [number, number, number] {\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n}\n\nfunction rgbChannels([r, g, b]: [number, number, number]): string {\n return `${r}, ${g}, ${b}`;\n}\n\nfunction mixTowardWhite(hex: string, amount: number): [number, number, number] {\n const [r, g, b] = hexToRgb(hex);\n return [\n Math.round(r + (255 - r) * amount),\n Math.round(g + (255 - g) * amount),\n Math.round(b + (255 - b) * amount),\n ];\n}\n\nfunction mixTowardBlack(hex: string, amount: number): [number, number, number] {\n const [r, g, b] = hexToRgb(hex);\n const keep = 1 - amount;\n return [Math.round(r * keep), Math.round(g * keep), Math.round(b * keep)];\n}\n\nfunction relativeLuminance(hex: string): number {\n const [r, g, b] = hexToRgb(hex).map((channel) => {\n const scaled = channel / 255;\n return scaled <= 0.03928 ? scaled / 12.92 : Math.pow((scaled + 0.055) / 1.055, 2.4);\n });\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\nfunction rgbToHex([r, g, b]: [number, number, number]): string {\n const toByte = (channel: number) =>\n Math.max(0, Math.min(255, Math.round(channel)))\n .toString(16)\n .padStart(2, '0');\n return `${toByte(r)}${toByte(g)}${toByte(b)}`;\n}\n\nfunction contrastForegroundHex(backgroundHex: string): string {\n return relativeLuminance(backgroundHex) > 0.55 ? '171717' : 'ffffff';\n}\n\n/**\n * Maps palette primary hex to ax-sys primary tokens so ax-button and theme choosers\n * inside the welcome host follow the preview palette (not the global app theme).\n */\nexport function buildWelcomePaletteSysColorVars(primaryHex: string): Record<string, string> {\n const hex = normalizeHexColor(primaryHex);\n if (!hex) {\n return {};\n }\n\n const base = hexToRgb(hex);\n const lighter = mixTowardWhite(hex, 0.78);\n const lightest = mixTowardWhite(hex, 0.9);\n const darker = mixTowardBlack(hex, 0.14);\n const border = mixTowardBlack(hex, 0.1);\n const onPrimary = hexToRgb(contrastForegroundHex(hex));\n const onLighter = hexToRgb(contrastForegroundHex(rgbToHex(lighter)));\n\n const sys = {\n '--ax-sys-color-primary-500': rgbChannels(base),\n '--ax-sys-color-primary-600': rgbChannels(darker),\n '--ax-sys-color-primary-50': rgbChannels(lightest),\n '--ax-sys-color-primary-100': rgbChannels(lighter),\n '--ax-sys-color-primary-lighter-surface': rgbChannels(lighter),\n '--ax-sys-color-primary-surface': rgbChannels(base),\n '--ax-sys-color-on-primary-surface': rgbChannels(onPrimary),\n '--ax-sys-color-on-primary-lighter-surface': rgbChannels(onLighter),\n '--ax-sys-color-border-primary-surface': rgbChannels(border),\n '--ax-sys-color-border-primary-lighter-surface': rgbChannels(mixTowardWhite(hex, 0.45)),\n };\n\n /* ax-primary / primary-lighter-surface read --color-* aliases (often bound on :root). */\n const aliases = {\n '--color-primary': 'rgba(var(--ax-sys-color-primary-surface))',\n '--color-on-primary': 'rgba(var(--ax-sys-color-on-primary-surface))',\n '--color-border-primary': 'rgba(var(--ax-sys-color-border-primary-surface))',\n '--color-primary-lighter': 'rgba(var(--ax-sys-color-primary-lighter-surface))',\n '--color-on-primary-lighter': 'rgba(var(--ax-sys-color-on-primary-lighter-surface))',\n '--color-border-primary-lighter': 'rgba(var(--ax-sys-color-border-primary-lighter-surface))',\n };\n\n return { ...sys, ...aliases };\n}\n\n/**\n * Rewrites palette asset selectors so tokens apply under the welcome page host only.\n */\nexport function scopeWelcomePaletteCss(css: string): string {\n return css.replace(/:root/g, WELCOME_PALETTE_SCOPE);\n}\n\nexport function welcomePaletteCssUrl(paletteName: string): string {\n const safeName = paletteName.trim().length > 0 ? paletteName.trim() : 'default';\n return `/assets/themes/palettes/css/${safeName}.css`;\n}\n\n//#endregion\n","//#region ----- Welcome confetti (canvas, no external package) -----\n\ntype ConfettiPiece = {\n x: number;\n y: number;\n w: number;\n h: number;\n vx: number;\n vy: number;\n rotation: number;\n spin: number;\n color: string;\n opacity: number;\n};\n\nconst CONFETTI_COLORS = [\n '#7c3aed',\n '#2563eb',\n '#0d9488',\n '#eab308',\n '#f97316',\n '#ec4899',\n '#22c55e',\n];\n\nconst DURATION_MS = 4200;\n\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** Runs a one-shot top-to-bottom confetti burst inside `host`. Returns a cleanup function. */\nexport function runWelcomeOnboardingConfetti(host: HTMLElement): () => void {\n if (prefersReducedMotion()) {\n return () => undefined;\n }\n\n const canvas = document.createElement('canvas');\n canvas.className = 'axp-welcome-onboarding__confetti-canvas';\n canvas.setAttribute('aria-hidden', 'true');\n host.appendChild(canvas);\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n canvas.remove();\n return () => undefined;\n }\n\n let width = 0;\n let height = 0;\n let rafId = 0;\n let running = true;\n const startedAt = performance.now();\n\n const resize = (): void => {\n const rect = host.getBoundingClientRect();\n width = Math.max(1, Math.floor(rect.width));\n height = Math.max(1, Math.floor(rect.height));\n canvas.width = width;\n canvas.height = height;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n };\n\n resize();\n const onResize = (): void => resize();\n window.addEventListener('resize', onResize);\n\n const pieces: ConfettiPiece[] = [];\n const count = Math.min(160, Math.max(80, Math.floor(width / 6)));\n for (let i = 0; i < count; i += 1) {\n pieces.push({\n x: Math.random() * width,\n y: -20 - Math.random() * height * 0.35,\n w: 6 + Math.random() * 6,\n h: 10 + Math.random() * 8,\n vx: (Math.random() - 0.5) * 2.4,\n vy: 2.2 + Math.random() * 3.8,\n rotation: Math.random() * Math.PI * 2,\n spin: (Math.random() - 0.5) * 0.18,\n color: CONFETTI_COLORS[i % CONFETTI_COLORS.length] ?? '#7c3aed',\n opacity: 0.85 + Math.random() * 0.15,\n });\n }\n\n const tick = (now: number): void => {\n if (!running) {\n return;\n }\n\n const elapsed = now - startedAt;\n ctx.clearRect(0, 0, width, height);\n\n for (const piece of pieces) {\n piece.x += piece.vx;\n piece.y += piece.vy;\n piece.vy += 0.06;\n piece.vx *= 0.995;\n piece.rotation += piece.spin;\n\n const fade =\n elapsed > DURATION_MS - 900 ? Math.max(0, (DURATION_MS - elapsed) / 900) : piece.opacity;\n\n ctx.save();\n ctx.globalAlpha = fade * piece.opacity;\n ctx.translate(piece.x, piece.y);\n ctx.rotate(piece.rotation);\n ctx.fillStyle = piece.color;\n ctx.fillRect(-piece.w / 2, -piece.h / 2, piece.w, piece.h);\n ctx.restore();\n }\n\n if (elapsed >= DURATION_MS) {\n running = false;\n cleanup();\n return;\n }\n\n rafId = requestAnimationFrame(tick);\n };\n\n const cleanup = (): void => {\n running = false;\n if (rafId) {\n cancelAnimationFrame(rafId);\n }\n window.removeEventListener('resize', onResize);\n canvas.remove();\n };\n\n rafId = requestAnimationFrame(tick);\n return cleanup;\n}\n\n//#endregion\n","import { getRegionalFontStylesheet } from '@acorex-platform/framework-client/themes/shared';\n\n//#region ----- Constants -----\n\nconst FONT_SIZE_KEYWORDS = new Set(['small', 'medium', 'large', 'x-large']);\nconst DEFAULT_FONT_FAMILY = 'system-ui';\nconst DEFAULT_FONT_SIZE = 'medium';\nconst FONT_FALLBACK = 'Tahoma, system-ui, sans-serif';\n\n//#endregion\n\n//#region ----- Helpers -----\n\nexport function resolveWelcomePreviewFontFamily(value: unknown): string {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : DEFAULT_FONT_FAMILY;\n}\n\nexport function resolveWelcomePreviewFontSize(value: unknown): string {\n return typeof value === 'string' && FONT_SIZE_KEYWORDS.has(value) ? value : DEFAULT_FONT_SIZE;\n}\n\n/** Same CSS family contract as theme.service (`resolveFontCssFamily`). */\nfunction resolveWelcomeFontCssFamily(fontId: string): string {\n if (fontId === 'system-ui') {\n return `system-ui, ${FONT_FALLBACK}`;\n }\n if (fontId === 'tahoma') {\n return 'Tahoma, system-ui, sans-serif';\n }\n return `\"${fontId}\", ${FONT_FALLBACK}`;\n}\n\nfunction resolveWelcomeFontVariationSettings(fontId: string): string | undefined {\n if (fontId === 'iranyekanx') {\n return '\"dots\" 1';\n }\n return undefined;\n}\n\nexport function buildWelcomeTypographyStyle(\n fontId: string,\n fontSize: string,\n): Record<string, string> {\n const variation = resolveWelcomeFontVariationSettings(fontId);\n const style: Record<string, string> = {\n fontFamily: resolveWelcomeFontCssFamily(fontId),\n fontSize,\n };\n if (variation) {\n style['fontVariationSettings'] = variation;\n }\n return style;\n}\n\nexport function ensureWelcomeFontStylesLoaded(fontId: string): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const href = getRegionalFontStylesheet(fontId);\n if (!href) {\n return;\n }\n\n const selector = `link[data-axp-regional-font=\"${href}\"]`;\n if (document.head.querySelector(selector)) {\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.setAttribute('data-axp-regional-font', href);\n document.head.appendChild(link);\n}\n\nexport function applyWelcomeTypographyToHtml(fontId: string, fontSize: string): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const html = document.documentElement;\n html.style.fontFamily = resolveWelcomeFontCssFamily(fontId);\n html.style.fontVariationSettings = resolveWelcomeFontVariationSettings(fontId) ?? '';\n html.style.fontSize = fontSize;\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPHomePageService, AXPPlatformBrandingService } from '@acorex-platform/framework-client/common';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AXPLayoutRendererComponent } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPUserAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_THEME_PALETTE_PROVIDER,\n AXPLayoutThemeService,\n AXPMenuOrientation,\n AXPMenuVerticalMode,\n AXPThemeLayoutSetting,\n AXPThemeMode,\n type AXPThemePalette,\n} from '@acorex-platform/framework-client/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnInit,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport type { AXPOnboardingContext, AXPOnboardingStep } from '../../../onboarding/onboarding.types';\nimport { AXPOnboardingProgressService } from '../../../onboarding/onboarding-progress.service';\nimport { AXPWelcomeOnboardingFlowService } from '../../../onboarding/welcome-onboarding-flow.service';\nimport {\n buildWelcomePaletteSysColorVars,\n scopeWelcomePaletteCss,\n welcomePaletteCssUrl,\n} from './welcome-onboarding-palette-scope.util';\nimport { runWelcomeOnboardingConfetti } from './welcome-onboarding-confetti.util';\nimport {\n applyWelcomeTypographyToHtml,\n buildWelcomeTypographyStyle,\n ensureWelcomeFontStylesLoaded,\n resolveWelcomePreviewFontFamily,\n resolveWelcomePreviewFontSize,\n} from './welcome-onboarding-typography-preview.util';\n\n//#region ----- Types -----\n\ntype WelcomeFinishOutcome = 'completed' | 'skipped' | 'deferred' | null;\n\n//#endregion\n\n//#region ----- Welcome onboarding page -----\n\n@Component({\n selector: 'axp-auth-welcome-onboarding-page',\n templateUrl: './welcome-onboarding-page.component.html',\n styleUrls: ['./welcome-onboarding-page.component.css'],\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXPLogoComponent,\n AXPUserAvatarComponent,\n AXPLayoutRendererComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPAuthWelcomeOnboardingPageComponent implements OnInit {\n //#region ----- Services & Dependencies -----\n\n private readonly flowService = inject(AXPWelcomeOnboardingFlowService);\n private readonly progressService = inject(AXPOnboardingProgressService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly homePageService = inject(AXPHomePageService);\n private readonly platformBranding = inject(AXPPlatformBrandingService);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly paletteProvider = inject(AXP_THEME_PALETTE_PROVIDER);\n private readonly themeService = inject(AXPLayoutThemeService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly palettes = signal<AXPThemePalette[]>([]);\n protected readonly systemPrefersDark = signal(false);\n protected readonly loading = signal(true);\n protected readonly platformTitle = signal('ACoreX');\n protected readonly steps = signal<AXPOnboardingStep[]>([]);\n protected readonly stepIndex = signal(0);\n protected readonly formContext = signal<Record<string, unknown>>({});\n protected readonly finishOutcome = signal<WelcomeFinishOutcome>(null);\n protected readonly busy = signal(false);\n protected readonly backdropLayerA = signal<Record<string, string>>({});\n protected readonly backdropLayerB = signal<Record<string, string>>({});\n protected readonly activeBackdropLayer = signal<'a' | 'b'>('a');\n protected readonly previewTaskSkeletonRows = [0, 1, 2];\n\n private readonly formScrollHost = viewChild<ElementRef<HTMLElement>>('formScrollHost');\n private readonly confettiHost = viewChild<ElementRef<HTMLElement>>('confettiHost');\n\n private sessionContext: AXPOnboardingContext | null = null;\n private forcePlan = false;\n private backdropCrossfadeKey = '';\n private paletteStyleEl: HTMLStyleElement | null = null;\n private paletteLoadToken = 0;\n private confettiRanForOutcome: WelcomeFinishOutcome = null;\n private stopConfetti: (() => void) | null = null;\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly currentStep = computed(() => {\n const list = this.steps();\n const index = this.stepIndex();\n return list[index] ?? null;\n });\n\n protected readonly isFirstStep = computed(() => this.stepIndex() === 0);\n\n protected readonly isLastStep = computed(() => {\n const list = this.steps();\n return list.length > 0 && this.stepIndex() === list.length - 1;\n });\n\n protected readonly stepLayout = computed((): AXPWidgetNode | undefined => {\n const step = this.currentStep();\n if (!step || this.finishOutcome()) {\n return undefined;\n }\n return this.flowService.buildStepLayout(step);\n });\n\n protected readonly showAppearancePreview = computed(\n () => this.currentStep()?.id === 'welcome-appearance',\n );\n\n protected readonly showTypographyPreview = computed(\n () => this.currentStep()?.id === 'welcome-typography',\n );\n\n protected readonly showProfileAvatar = computed(() => this.currentStep()?.id === 'profile-basics');\n\n protected readonly previewOrganizationTitle = computed((): string => {\n const tenant = this.sessionService.tenant;\n const locale = this.translationService.getActiveLang();\n const fromTitle = tenant?.title\n ? resolveMultiLanguageString(tenant.title, locale).trim()\n : '';\n if (fromTitle.length > 0) {\n return fromTitle;\n }\n const name = tenant?.name?.trim();\n if (name) {\n return name;\n }\n return this.platformTitle();\n });\n\n protected readonly orbIconClass = computed((): string => {\n switch (this.currentStep()?.id) {\n case 'welcome-intro':\n return 'fa-solid fa-earth-americas';\n case 'welcome-appearance':\n return 'fa-solid fa-palette';\n case 'welcome-navigation':\n return 'fa-solid fa-table-columns';\n case 'welcome-typography':\n return 'fa-solid fa-font';\n case 'profile-basics':\n return 'fa-solid fa-user';\n case 'whs-orientation':\n return 'fa-solid fa-shield-check';\n default:\n return 'fa-solid fa-sparkles';\n }\n });\n\n protected readonly doneOrbIconClass = 'fa-solid fa-check';\n\n protected readonly previewPaletteName = computed(() => {\n const palette = this.formContext()[AXPThemeLayoutSetting.Palette];\n return typeof palette === 'string' && palette.length > 0 ? palette : 'default';\n });\n\n protected readonly previewResolvedDark = computed(() => {\n const mode = this.formContext()[AXPThemeLayoutSetting.Mode];\n if (mode === AXPThemeMode.Dark) {\n return true;\n }\n if (mode === AXPThemeMode.Light) {\n return false;\n }\n return this.systemPrefersDark();\n });\n\n protected readonly previewSurfaceStyle = computed(() => {\n const name = this.previewPaletteName();\n const list = this.palettes();\n const match =\n list.find((item) => item.name === name) ??\n list.find((item) => item.name === 'default') ??\n list[0];\n const colors = match?.colors;\n const isDark = this.previewResolvedDark();\n\n const primary = colors?.primary ?? '#237f6a';\n const secondary = colors?.secondary ?? '#4b9e8f';\n const accent = colors?.accents?.[0] ?? secondary ?? '#7fc6b5';\n const lightSurface = colors?.light ?? '#f2f5f7';\n const darkSurface = colors?.dark ?? '#1a1f1e';\n const surface = isDark ? darkSurface : lightSurface;\n\n return {\n ...buildWelcomePaletteSysColorVars(primary),\n '--axp-welcome-preview-primary': primary,\n '--axp-welcome-preview-secondary': secondary,\n '--axp-welcome-preview-surface': surface,\n '--axp-welcome-preview-accent': accent,\n '--axp-welcome-preview-panel': isDark\n ? `color-mix(in srgb, ${surface} 88%, white 6%)`\n : '#ffffff',\n '--axp-welcome-preview-card': isDark\n ? `color-mix(in srgb, ${surface} 72%, white 12%)`\n : '#ffffff',\n '--axp-welcome-preview-text': isDark ? '#e3eee9' : `color-mix(in srgb, ${primary} 70%, black)`,\n '--axp-welcome-preview-muted': isDark ? '#b5c7bf' : '#64736f',\n '--axp-welcome-preview-border': isDark\n ? `color-mix(in srgb, ${surface} 55%, white 14%)`\n : '#fdfdfd',\n '--axp-welcome-page-glow-start': isDark\n ? `color-mix(in srgb, ${accent} 38%, ${surface} 62%)`\n : `color-mix(in srgb, ${accent} 52%, white 48%)`,\n '--axp-welcome-page-glow-end': isDark\n ? `color-mix(in srgb, ${secondary} 42%, ${surface} 58%)`\n : `color-mix(in srgb, ${secondary} 38%, white 62%)`,\n '--axp-welcome-page-base': isDark\n ? `color-mix(in srgb, ${surface} 94%, black 6%)`\n : `color-mix(in srgb, ${lightSurface} 86%, ${accent} 14%)`,\n };\n });\n\n protected readonly previewFontFamily = computed(() =>\n resolveWelcomePreviewFontFamily(this.formContext()[AXPThemeLayoutSetting.Font]),\n );\n\n protected readonly previewFontSize = computed(() =>\n resolveWelcomePreviewFontSize(this.formContext()[AXPThemeLayoutSetting.FontSize]),\n );\n\n protected readonly previewTypographyStyle = computed(() =>\n buildWelcomeTypographyStyle(this.previewFontFamily(), this.previewFontSize()),\n );\n\n protected readonly previewHostStyle = computed(() => ({\n ...this.previewSurfaceStyle(),\n ...this.previewTypographyStyle(),\n }));\n\n //#region ----- Confetti (completion) -----\n\n private readonly completionConfettiEffect = effect(() => {\n const outcome = this.finishOutcome();\n if (!outcome || outcome !== 'completed') {\n return;\n }\n if (this.confettiRanForOutcome === outcome) {\n return;\n }\n\n queueMicrotask(() => {\n const host = this.confettiHost()?.nativeElement;\n if (!host || this.confettiRanForOutcome === 'completed') {\n return;\n }\n this.confettiRanForOutcome = outcome;\n this.stopConfetti?.();\n this.stopConfetti = runWelcomeOnboardingConfetti(host);\n });\n });\n\n //#endregion\n\n //#region ----- Live typography (font + size) -----\n\n private readonly typographyPreviewEffect = effect(() => {\n if (this.loading()) {\n return;\n }\n\n const family = this.previewFontFamily();\n const size = this.previewFontSize();\n ensureWelcomeFontStylesLoaded(family);\n applyWelcomeTypographyToHtml(family, size);\n });\n\n //#endregion\n\n //#region ----- Scoped palette (buttons + surfaces) -----\n\n private readonly scopedPaletteEffect = effect(() => {\n const name = this.previewPaletteName();\n const token = ++this.paletteLoadToken;\n void this.loadScopedPaletteCss(name, token);\n });\n\n //#endregion\n\n //#region ----- Backdrop crossfade -----\n\n private readonly backdropCrossfadeEffect = effect(() => {\n const style = this.previewSurfaceStyle();\n const key = JSON.stringify(style);\n if (key === this.backdropCrossfadeKey) {\n return;\n }\n\n if (!this.backdropCrossfadeKey) {\n this.backdropCrossfadeKey = key;\n this.backdropLayerA.set(style);\n this.backdropLayerB.set(style);\n this.activeBackdropLayer.set('a');\n return;\n }\n\n this.backdropCrossfadeKey = key;\n if (this.activeBackdropLayer() === 'a') {\n this.backdropLayerB.set(style);\n this.activeBackdropLayer.set('b');\n return;\n }\n\n this.backdropLayerA.set(style);\n this.activeBackdropLayer.set('a');\n });\n\n //#endregion\n\n protected readonly previewMenuHorizontal = computed(() => {\n const value = this.formContext()[AXPThemeLayoutSetting.MenuOrientation];\n return value === AXPMenuOrientation.Horizontal;\n });\n\n protected readonly previewMenuCompact = computed(() => {\n const value = this.formContext()[AXPThemeLayoutSetting.MenuVerticalMode];\n return value === AXPMenuVerticalMode.Compact;\n });\n\n protected readonly previewHeaderColored = computed(() => {\n const value = this.formContext()[AXPThemeLayoutSetting.HeaderAppearance];\n return value !== 'simple';\n });\n\n protected get user() {\n return this.sessionService.user;\n }\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n async ngOnInit(): Promise<void> {\n const title = await this.platformBranding.resolvePlatformTitle().catch(() => '');\n this.platformTitle.set(title || 'ACoreX');\n\n this.forcePlan =\n this.route.snapshot.queryParamMap.get('force') === '1' ||\n this.route.snapshot.queryParamMap.get('force') === 'true';\n\n const provider = await this.paletteProvider;\n this.palettes.set(await provider.getList());\n\n this.bindSystemColorSchemeListener();\n\n this.destroyRef.onDestroy(() => {\n this.paletteStyleEl?.remove();\n this.paletteStyleEl = null;\n this.stopConfetti?.();\n this.stopConfetti = null;\n void this.themeService.loadSettings();\n\n const step = this.currentStep();\n if (step && this.sessionContext && !this.finishOutcome()) {\n this.flowService.setResumeState(this.sessionContext, step.id);\n }\n });\n\n await this.bootstrap();\n }\n\n //#endregion\n\n //#region ----- Palette CSS loading -----\n\n private async loadScopedPaletteCss(paletteName: string, token: number): Promise<void> {\n const candidates = [paletteName, 'default'].filter(\n (name, index, list) => name.trim().length > 0 && list.indexOf(name) === index,\n );\n\n let cssText: string | null = null;\n for (const name of candidates) {\n try {\n const response = await fetch(welcomePaletteCssUrl(name));\n if (response.ok) {\n cssText = await response.text();\n break;\n }\n } catch {\n /* try next candidate */\n }\n }\n\n if (token !== this.paletteLoadToken || !cssText) {\n return;\n }\n\n if (!this.paletteStyleEl) {\n this.paletteStyleEl = document.createElement('style');\n this.paletteStyleEl.setAttribute('data-welcome-onboarding-palette', '');\n document.head.appendChild(this.paletteStyleEl);\n }\n\n this.paletteStyleEl.setAttribute('data-welcome-onboarding-palette', paletteName);\n this.paletteStyleEl.textContent = scopeWelcomePaletteCss(cssText);\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onFormContextChange(next: Record<string, unknown>): void {\n const host = this.formScrollHost()?.nativeElement;\n const scrollTop = host?.scrollTop ?? 0;\n this.formContext.set(next);\n if (!host) {\n return;\n }\n const restoreScroll = (): void => {\n host.scrollTop = scrollTop;\n };\n queueMicrotask(restoreScroll);\n requestAnimationFrame(restoreScroll);\n }\n\n protected async goToStep(index: number): Promise<void> {\n const list = this.steps();\n if (index < 0 || index >= list.length) {\n return;\n }\n this.stepIndex.set(index);\n const step = list[index];\n if (step && this.sessionContext) {\n this.flowService.setResumeState(this.sessionContext, step.id);\n }\n }\n\n protected async previous(): Promise<void> {\n if (this.isFirstStep()) {\n return;\n }\n this.stepIndex.update((i) => i - 1);\n }\n\n protected async next(): Promise<void> {\n const step = this.currentStep();\n if (!step || !this.sessionContext || this.busy()) {\n return;\n }\n\n if (this.isLastStep()) {\n await this.complete('completed');\n return;\n }\n\n this.busy.set(true);\n try {\n await this.flowService.savePreferences(this.formContext());\n await this.flowService.markStep(step, this.sessionContext, 'completed');\n\n const nextIndex = this.stepIndex() + 1;\n this.stepIndex.set(nextIndex);\n\n const nextStep = this.steps()[nextIndex];\n if (nextStep) {\n this.flowService.setResumeState(this.sessionContext, nextStep.id);\n }\n } finally {\n this.busy.set(false);\n }\n }\n\n protected async skipAll(): Promise<void> {\n if (this.busy() || !this.sessionContext) {\n return;\n }\n this.busy.set(true);\n try {\n await this.flowService.savePreferences(this.formContext());\n await this.flowService.markSteps(this.steps(), this.sessionContext, 'skipped');\n this.flowService.clearResumeState();\n await this.enterWorkspace();\n } finally {\n this.busy.set(false);\n }\n }\n\n protected async remindLater(): Promise<void> {\n if (this.busy()) {\n return;\n }\n this.busy.set(true);\n try {\n await this.flowService.savePreferences(this.formContext());\n await this.flowService.setRemindLater();\n await this.enterWorkspace();\n } finally {\n this.busy.set(false);\n }\n }\n\n protected async enterWorkspace(): Promise<void> {\n const urlTree = await this.homePageService.resolveAuthorizedHomeUrlTree();\n await this.router.navigateByUrl(urlTree);\n }\n\n protected async reviewSettings(): Promise<void> {\n this.finishOutcome.set(null);\n this.stepIndex.set(0);\n }\n\n protected stepArtCaptionKey(step: AXPOnboardingStep | null): string {\n if (!step) {\n return '@auth:welcome-onboarding.page.art.default-caption';\n }\n return `@auth:welcome-onboarding.page.art.${step.id}`;\n }\n\n //#endregion\n\n //#region ----- Private logic -----\n\n private bindSystemColorSchemeListener(): void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n this.systemPrefersDark.set(media.matches);\n\n const onChange = (event: MediaQueryListEvent) => {\n this.systemPrefersDark.set(event.matches);\n };\n\n media.addEventListener('change', onChange);\n this.destroyRef.onDestroy(() => media.removeEventListener('change', onChange));\n }\n\n private async bootstrap(): Promise<void> {\n this.loading.set(true);\n try {\n let pending = await this.flowService.evaluatePending(this.forcePlan);\n if (!pending && this.flowService.hasActiveResumeState()) {\n pending = await this.flowService.evaluatePending(true);\n }\n if (!pending) {\n await this.enterWorkspace();\n return;\n }\n\n this.sessionContext = pending.context;\n this.steps.set(pending.steps);\n const preferences = await this.flowService.loadPreferenceContext();\n this.formContext.set(preferences);\n\n const progress = await this.progressService.getProgress();\n let startIndex = 0;\n if (this.flowService.hasActiveResumeState()) {\n startIndex = this.flowService.resolveResumeStepIndex(pending.context, pending.steps);\n } else if (this.forcePlan) {\n startIndex = 0;\n } else {\n startIndex = this.flowService.resolveFirstIncompleteStepIndex(\n pending.steps,\n pending.context,\n progress,\n );\n }\n\n this.stepIndex.set(startIndex);\n const resumeStep = pending.steps[startIndex];\n if (resumeStep) {\n this.flowService.setResumeState(pending.context, resumeStep.id);\n }\n } finally {\n this.loading.set(false);\n }\n }\n\n private async complete(status: 'completed'): Promise<void> {\n if (this.busy() || !this.sessionContext) {\n return;\n }\n this.busy.set(true);\n try {\n await this.flowService.savePreferences(this.formContext());\n\n const step = this.currentStep();\n if (step) {\n await this.flowService.markStep(step, this.sessionContext, 'completed');\n }\n\n this.flowService.clearResumeState();\n this.finishOutcome.set(status);\n } finally {\n this.busy.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<div\n class=\"axp-welcome-onboarding\"\n [class.ax-light]=\"!previewResolvedDark()\"\n [class.ax-dark]=\"previewResolvedDark()\"\n [ngStyle]=\"previewHostStyle()\"\n>\n <div class=\"axp-welcome-onboarding__backdrop-stack\" aria-hidden=\"true\">\n <div\n class=\"axp-welcome-onboarding__backdrop\"\n [class.axp-welcome-onboarding__backdrop--active]=\"activeBackdropLayer() === 'a'\"\n [ngStyle]=\"backdropLayerA()\"\n ></div>\n <div\n class=\"axp-welcome-onboarding__backdrop\"\n [class.axp-welcome-onboarding__backdrop--active]=\"activeBackdropLayer() === 'b'\"\n [ngStyle]=\"backdropLayerB()\"\n ></div>\n </div>\n\n <div class=\"axp-welcome-onboarding__content\" #confettiHost>\n <!-- ----- Full-page loading state ----- -->\n @if (loading()) {\n <div class=\"axp-welcome-onboarding__loading\">\n <ax-loading></ax-loading>\n </div>\n }\n <!-- ----- Main onboarding shell ----- -->\n @else {\n <div\n class=\"axp-welcome-onboarding__shell\"\n [class.axp-welcome-onboarding__shell--appearance]=\"showAppearancePreview()\"\n [class.axp-welcome-onboarding__shell--typography]=\"showTypographyPreview()\"\n [ngStyle]=\"previewHostStyle()\"\n >\n <header class=\"axp-welcome-onboarding__header\">\n <div class=\"axp-welcome-onboarding__brand\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"220\"\n [attr.alt]=\"platformTitle()\"\n ></axp-logo>\n </div>\n <div class=\"axp-welcome-onboarding__step-counter\">\n <!-- ----- Step counter in the header ----- -->\n @if (!finishOutcome() && currentStep(); as step) {\n <span>\n {{\n '@auth:welcome-onboarding.page.step-counter'\n | translate: { params: { current: stepIndex() + 1, total: steps().length } }\n | async\n }}\n · {{ step.title | translate | async }}\n </span>\n }\n <!-- ----- Ready message after completion ----- -->\n @else if (finishOutcome()) {\n {{ '@auth:welcome-onboarding.page.ready-counter' | translate | async }}\n }\n </div>\n </header>\n\n <main class=\"axp-welcome-onboarding__main\">\n <!-- ----- Completion screen ----- -->\n @if (finishOutcome(); as outcome) {\n <section class=\"axp-welcome-onboarding__done axp-welcome-onboarding__animate\">\n <div\n class=\"axp-welcome-onboarding__orb axp-welcome-onboarding__done-orb\"\n [ngStyle]=\"previewSurfaceStyle()\"\n aria-hidden=\"true\"\n >\n <i class=\"axp-welcome-onboarding__orb-icon\" [class]=\"doneOrbIconClass\"></i>\n </div>\n <h1 class=\"axp-welcome-onboarding__title\">\n {{\n ('@auth:welcome-onboarding.page.done.' + outcome + '.title') | translate | async\n }}\n </h1>\n <p class=\"axp-welcome-onboarding__lead\">\n {{\n ('@auth:welcome-onboarding.page.done.' + outcome + '.description') | translate | async\n }}\n </p>\n <div class=\"axp-welcome-onboarding__done-actions\">\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@auth:welcome-onboarding.page.actions.enter-workspace' | translate | async\"\n [disabled]=\"busy()\"\n (onClick)=\"enterWorkspace()\"\n ></ax-button>\n <!-- ----- Review settings after skip or defer ----- -->\n @if (outcome !== 'completed') {\n <ax-button\n look=\"outline\"\n color=\"default\"\n [text]=\"'@auth:welcome-onboarding.page.actions.review-settings' | translate | async\"\n [disabled]=\"busy()\"\n (onClick)=\"reviewSettings()\"\n ></ax-button>\n }\n </div>\n </section>\n }\n <!-- ----- Active step: form + art panel ----- -->\n @else {\n <section\n #formScrollHost\n class=\"axp-welcome-onboarding__form axp-welcome-onboarding__animate\"\n [class.axp-welcome-onboarding__form--appearance]=\"showAppearancePreview()\"\n [class.axp-welcome-onboarding__form--typography]=\"showTypographyPreview()\"\n [class.axp-welcome-onboarding__form--menu-horizontal]=\"\n showAppearancePreview() && previewMenuHorizontal()\n \"\n >\n <!-- ----- Step form content when a step is active ----- -->\n @if (currentStep(); as step) {\n <h1 class=\"axp-welcome-onboarding__title\">\n {{ ('@auth:welcome-onboarding.page.steps.' + step.id + '.headline') | translate | async }}\n </h1>\n <p class=\"axp-welcome-onboarding__lead\">\n {{ ('@auth:welcome-onboarding.page.steps.' + step.id + '.lead') | translate | async }}\n </p>\n\n <!-- ----- Profile avatar on profile basics step ----- -->\n @if (showProfileAvatar()) {\n <div class=\"axp-welcome-onboarding__profile-row\">\n <axp-user-avatar\n [size]=\"74\"\n [userId]=\"user?.id!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n </div>\n }\n\n @if (stepLayout(); as layout) {\n <axp-layout-renderer\n class=\"axp-welcome-onboarding__fields\"\n [layout]=\"layout\"\n [context]=\"formContext()\"\n (contextChange)=\"onFormContextChange($event)\"\n ></axp-layout-renderer>\n }\n\n <p class=\"axp-welcome-onboarding__notice\">\n {{ ('@auth:welcome-onboarding.page.steps.' + step.id + '.notice') | translate | async }}\n </p>\n }\n </section>\n\n <aside\n class=\"axp-welcome-onboarding__art axp-welcome-onboarding__animate\"\n [class.axp-welcome-onboarding__art--appearance]=\"showAppearancePreview()\"\n [class.axp-welcome-onboarding__art--typography]=\"showTypographyPreview()\"\n [ngStyle]=\"previewHostStyle()\"\n aria-hidden=\"false\"\n >\n <div class=\"axp-welcome-onboarding__art-inner\">\n <div class=\"axp-welcome-onboarding__art-visual\">\n <!-- ----- Theme preview on appearance step ----- -->\n @if (showAppearancePreview()) {\n <div\n class=\"axp-welcome-onboarding__preview\"\n [class.axp-welcome-onboarding__preview--dark]=\"previewResolvedDark()\"\n [ngStyle]=\"previewSurfaceStyle()\"\n >\n <div\n class=\"axp-welcome-onboarding__preview-head\"\n [class.axp-welcome-onboarding__preview-head--colored]=\"previewHeaderColored()\"\n >\n ● ● ● {{ previewOrganizationTitle() }}\n </div>\n <div\n class=\"axp-welcome-onboarding__preview-body\"\n [class.axp-welcome-onboarding__preview-body--horizontal]=\"previewMenuHorizontal()\"\n >\n <!-- ----- Horizontal root menu skeleton ----- -->\n @if (previewMenuHorizontal()) {\n <div class=\"axp-welcome-onboarding__preview-hmenu\">\n <span class=\"axp-welcome-onboarding__preview-hmenu-brand\"></span>\n <span class=\"axp-welcome-onboarding__preview-hmenu-item\"></span>\n <span class=\"axp-welcome-onboarding__preview-hmenu-item\"></span>\n <span class=\"axp-welcome-onboarding__preview-hmenu-item axp-welcome-onboarding__preview-hmenu-item--short\"></span>\n </div>\n }\n <!-- ----- Vertical root menu skeleton ----- -->\n @else {\n <div\n class=\"axp-welcome-onboarding__preview-sidebar\"\n [class.axp-welcome-onboarding__preview-sidebar--compact]=\"previewMenuCompact()\"\n ></div>\n }\n <div class=\"axp-welcome-onboarding__preview-blocks\">\n <strong>{{ previewOrganizationTitle() }}</strong>\n <div class=\"axp-welcome-onboarding__preview-dashboard\">\n <div class=\"axp-welcome-onboarding__preview-widget-row\">\n <div class=\"axp-welcome-onboarding__preview-widget axp-welcome-onboarding__preview-widget--clock\">\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--clock\"></span>\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--line-lg\"></span>\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--line-sm\"></span>\n </div>\n <div class=\"axp-welcome-onboarding__preview-mini-cards\">\n <span class=\"axp-welcome-onboarding__preview-mini-card\">\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--dot\"></span>\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--line-xs\"></span>\n </span>\n <span class=\"axp-welcome-onboarding__preview-mini-card\">\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--dot\"></span>\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--line-xs\"></span>\n </span>\n <span class=\"axp-welcome-onboarding__preview-mini-card axp-welcome-onboarding__preview-mini-card--wide\">\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--line-xs\"></span>\n </span>\n </div>\n </div>\n <div class=\"axp-welcome-onboarding__preview-tasks\">\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--title\"></span>\n @for (row of previewTaskSkeletonRows; track row) {\n <div class=\"axp-welcome-onboarding__preview-task-row\">\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--check\"></span>\n <span class=\"axp-welcome-onboarding__preview-skel axp-welcome-onboarding__preview-skel--line\"></span>\n </div>\n }\n </div>\n <div class=\"axp-welcome-onboarding__preview-chart\"></div>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- ----- Live type specimen on typography step ----- -->\n @else if (showTypographyPreview()) {\n <div\n class=\"axp-welcome-onboarding__type-preview\"\n [ngStyle]=\"previewHostStyle()\"\n >\n <span class=\"axp-welcome-onboarding__type-preview-sample\">\n {{ '@auth:welcome-onboarding.page.typography-preview.sample' | translate | async }}\n </span>\n <strong class=\"axp-welcome-onboarding__type-preview-heading\">\n {{ '@auth:welcome-onboarding.page.typography-preview.heading' | translate | async }}\n </strong>\n <p class=\"axp-welcome-onboarding__type-preview-body\">\n {{ '@auth:welcome-onboarding.page.typography-preview.body' | translate | async }}\n </p>\n </div>\n }\n <!-- ----- Decorative orb on other steps ----- -->\n @else {\n <div class=\"axp-welcome-onboarding__orb\" [ngStyle]=\"previewSurfaceStyle()\">\n <i class=\"axp-welcome-onboarding__orb-icon\" [class]=\"orbIconClass()\" aria-hidden=\"true\"></i>\n </div>\n }\n </div>\n\n <div class=\"axp-welcome-onboarding__art-caption\">\n <strong>{{ stepArtCaptionKey(currentStep()) | translate | async }}</strong>\n </div>\n\n <div class=\"axp-welcome-onboarding__dots\" role=\"tablist\">\n @for (step of steps(); track step.id; let i = $index) {\n <button\n type=\"button\"\n class=\"axp-welcome-onboarding__dot\"\n [class.axp-welcome-onboarding__dot--on]=\"stepIndex() === i\"\n [attr.aria-label]=\"step.title | translate | async\"\n [attr.aria-selected]=\"stepIndex() === i\"\n (click)=\"goToStep(i)\"\n ></button>\n }\n </div>\n </div>\n </aside>\n }\n </main>\n\n <!-- ----- Footer actions while steps are active ----- -->\n @if (!finishOutcome()) {\n <footer class=\"axp-welcome-onboarding__footer\">\n <div class=\"axp-welcome-onboarding__footer-start\">\n <ax-button\n look=\"twotone\"\n color=\"default\"\n [text]=\"'@auth:welcome-onboarding.actions.skip-all' | translate | async\"\n [disabled]=\"busy()\"\n (onClick)=\"skipAll()\"\n ></ax-button>\n <ax-button\n look=\"twotone\"\n color=\"default\"\n [text]=\"'@auth:welcome-onboarding.actions.remind-later' | translate | async\"\n [disabled]=\"busy()\"\n (onClick)=\"remindLater()\"\n ></ax-button>\n </div>\n <div class=\"axp-welcome-onboarding__footer-end\">\n <!-- ----- Previous step ----- -->\n @if (!isFirstStep()) {\n <ax-button\n look=\"blank\"\n color=\"default\"\n [text]=\"'@auth:welcome-onboarding.actions.previous' | translate | async\"\n [disabled]=\"busy()\"\n (onClick)=\"previous()\"\n ></ax-button>\n }\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"\n (isLastStep()\n ? '@auth:welcome-onboarding.actions.finish'\n : '@auth:welcome-onboarding.actions.next'\n )\n | translate\n | async\n \"\n [disabled]=\"busy()\"\n (onClick)=\"next()\"\n ></ax-button>\n </div>\n </footer>\n }\n </div>\n }\n </div>\n</div>\n"],"names":["i1","i2","i4"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AXPHomePageService } from '@acorex-platform/framework-client/common';
|
|
2
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
3
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
import { inject, Injectable } from '@angular/core';
|
|
6
|
+
import { Router } from '@angular/router';
|
|
7
|
+
import { u as AXPWelcomeOnboardingFlowService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs';
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region ----- Welcome onboarding command -----
|
|
11
|
+
/** Navigates to the full-page welcome onboarding flow (replaces the legacy dialog). */
|
|
12
|
+
class AXPWelcomeOnboardingCommand {
|
|
13
|
+
constructor() {
|
|
14
|
+
//#region ----- Services & Dependencies -----
|
|
15
|
+
this.router = inject(Router);
|
|
16
|
+
this.flowService = inject(AXPWelcomeOnboardingFlowService);
|
|
17
|
+
this.homePageService = inject(AXPHomePageService);
|
|
18
|
+
this.toastService = inject(AXToastService);
|
|
19
|
+
this.translateService = inject(AXTranslationService);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region ----- Command -----
|
|
23
|
+
async execute(options) {
|
|
24
|
+
if (!this.flowService.resolveContext()) {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
message: {
|
|
28
|
+
text: await this.translateService.translateAsync('@auth:welcome-onboarding.messages.not-ready'),
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const force = options?.force === true;
|
|
33
|
+
const pending = await this.flowService.evaluatePending(force);
|
|
34
|
+
if (!pending) {
|
|
35
|
+
if (force) {
|
|
36
|
+
const title = await this.translateService.translateAsync('@auth:welcome-onboarding.messages.all-set.title');
|
|
37
|
+
const content = await this.translateService.translateAsync('@auth:welcome-onboarding.messages.all-set.description');
|
|
38
|
+
this.toastService.show({ color: 'success', title, content });
|
|
39
|
+
return { success: true, kind: 'object', data: { outcome: 'all-set' } };
|
|
40
|
+
}
|
|
41
|
+
const urlTree = await this.homePageService.resolveAuthorizedHomeUrlTree();
|
|
42
|
+
await this.router.navigateByUrl(urlTree);
|
|
43
|
+
return { success: true, kind: 'object', data: { outcome: 'navigated' } };
|
|
44
|
+
}
|
|
45
|
+
await this.router.navigate(['/auth/account/welcome-onboarding'], {
|
|
46
|
+
queryParams: force ? { force: '1' } : {},
|
|
47
|
+
});
|
|
48
|
+
return { success: true, kind: 'object', data: { outcome: 'navigated' } };
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWelcomeOnboardingCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
51
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWelcomeOnboardingCommand, providedIn: 'root' }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWelcomeOnboardingCommand, decorators: [{
|
|
54
|
+
type: Injectable,
|
|
55
|
+
args: [{ providedIn: 'root' }]
|
|
56
|
+
}] });
|
|
57
|
+
|
|
58
|
+
export { AXPWelcomeOnboardingCommand };
|
|
59
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs.map
|
package/fesm2022/acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-welcome-onboarding.command-Ck1A26BI.mjs","sources":["../../../../libs/modules/auth/client/src/lib/commands/welcome-onboarding.command.ts"],"sourcesContent":["import { AXPHomePageService } from '@acorex-platform/framework-client/common';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPWelcomeOnboardingFlowService } from '../onboarding/welcome-onboarding-flow.service';\n\n//#region ----- Types -----\n\ntype WelcomeOnboardingCommandOptions = {\n force?: boolean;\n};\n\ntype WelcomeDialogOutcome = {\n outcome: 'finished' | 'skipped' | 'snoozed' | 'cancelled' | 'all-set' | 'navigated';\n};\n\n//#endregion\n\n//#region ----- Welcome onboarding command -----\n\n/** Navigates to the full-page welcome onboarding flow (replaces the legacy dialog). */\n@Injectable({ providedIn: 'root' })\nexport class AXPWelcomeOnboardingCommand\n implements AXPCommand<WelcomeOnboardingCommandOptions | undefined, WelcomeDialogOutcome>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly router = inject(Router);\n private readonly flowService = inject(AXPWelcomeOnboardingFlowService);\n private readonly homePageService = inject(AXPHomePageService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Command -----\n\n async execute(\n options?: WelcomeOnboardingCommandOptions,\n ): AXPCommandExecuteResultPromise<WelcomeDialogOutcome> {\n if (!this.flowService.resolveContext()) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@auth:welcome-onboarding.messages.not-ready',\n ),\n },\n };\n }\n\n const force = options?.force === true;\n const pending = await this.flowService.evaluatePending(force);\n\n if (!pending) {\n if (force) {\n const title = await this.translateService.translateAsync(\n '@auth:welcome-onboarding.messages.all-set.title',\n );\n const content = await this.translateService.translateAsync(\n '@auth:welcome-onboarding.messages.all-set.description',\n );\n this.toastService.show({ color: 'success', title, content });\n return { success: true, kind: 'object', data: { outcome: 'all-set' } };\n }\n\n const urlTree = await this.homePageService.resolveAuthorizedHomeUrlTree();\n await this.router.navigateByUrl(urlTree);\n return { success: true, kind: 'object', data: { outcome: 'navigated' } };\n }\n\n await this.router.navigate(['/auth/account/welcome-onboarding'], {\n queryParams: force ? { force: '1' } : {},\n });\n\n return { success: true, kind: 'object', data: { outcome: 'navigated' } };\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;;;AAkBA;AAEA;AAEA;MAEa,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,+BAA+B,CAAC;AACrD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAgDjE,IAAA;;;IA1CC,MAAM,OAAO,CACX,OAAyC,EAAA;QAEzC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE;YACtC,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAC9C,6CAA6C,CAC9C;AACF,iBAAA;aACF;QACH;AAEA,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,KAAK,IAAI;QACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;QAE7D,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,KAAK,EAAE;gBACT,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACtD,iDAAiD,CAClD;gBACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACxD,uDAAuD,CACxD;AACD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5D,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;YACxE;YAEA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,4BAA4B,EAAE;YACzE,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;AACxC,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;QAC1E;QAEA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,kCAAkC,CAAC,EAAE;AAC/D,YAAA,WAAW,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;AACzC,SAAA,CAAC;AAEF,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC1E;8GAtDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,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,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { I as AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, J as AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS, K as AUTH_USER_ACTIVITY_DEFAULT_WEEKS, L as AUTH_USER_ACTIVITY_WEEK_PRESETS, M as AXMAuthErrorHandler, N as AXMAuthModule, w as AXMAuthPlatformSettingsService, H as AXMAuthenticationTypes, O as AXMDefaultAuthConfigs, Q as AXM_AUTH_CONFIG_TOKEN, y as AXM_LOGIN_GUARD_TOKEN, m as AXPAuthPasswordChangeTrackingService, j as AXPIdleLockService, G as AXPLoginExternalProvidersComponent, t as AXPLoginHistoryService, k as AXPUserAvatarSyncService, R as ONBOARDING_STEPS_HOOK, S as ONBOARDING_WELCOME_SETTING_KEY, P as PROFILE_PAGE_GROUPS_HOOK, b as PROFILE_PAGE_HEADER_META_HOOK, a as PROFILE_PAGE_SECTIONS_HOOK, U as aggregateDailySessionCounts, V as aggregateHourlySessionCounts, i as buildUserActivityDataSourceItem, W as buildUserActivityHours, X as buildUserActivityWeeks, Y as canActivateLogin, Z as computeUserActivityStats, _ as configAuthModule, $ as countToActivityLevel, a0 as extractUserActivityEndDate, a1 as extractUserActivityStartDate, a2 as extractUserActivityUserId, F as formatCompactActivityCount, a3 as isUserProfileGroupComponent, a4 as isUserProfileSectionsGroupRequested, a5 as parseAuthCredentialType, a6 as resolveDayDateRange, g as resolveDefaultUserActivityDateRange, r as resolveDefaultUserProfileSectionAction, h as resolveSmartUserActivityDateRange, a7 as resolveUserActivityHeatmapLayout, c as resolveUserProfileSectionContent, v as visibleUserProfileSectionActions } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-C1oSPf12.mjs';
|
|
2
2
|
//# sourceMappingURL=acorex-platform-module-auth-client.mjs.map
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex-platform/module-auth-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.48",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@acorex-platform/module-security-management-client": "0.0.
|
|
6
|
+
"@acorex-platform/module-security-management-client": "0.0.48",
|
|
7
7
|
"@angular/common": "^21.0.0 || ^22.0.0",
|
|
8
8
|
"@angular/core": "^21.0.0 || ^22.0.0"
|
|
9
9
|
},
|
|
@@ -14,11 +14,19 @@ declare const AXMAuthCommandKeys: {
|
|
|
14
14
|
};
|
|
15
15
|
readonly Security: {
|
|
16
16
|
readonly ChangePassword: "auth:change-password";
|
|
17
|
+
readonly ManageTwoFactor: "auth:manage-two-factor";
|
|
17
18
|
readonly SetPinCode: "auth:set-pin-code";
|
|
18
19
|
readonly RemovePinCode: "auth:remove-pin-code";
|
|
19
20
|
readonly ViewLoginHistory: "auth:view-login-history";
|
|
20
21
|
readonly EditSignature: "auth:edit-signature";
|
|
21
22
|
};
|
|
23
|
+
readonly Onboarding: {
|
|
24
|
+
readonly Welcome: "auth:welcome-onboarding";
|
|
25
|
+
};
|
|
26
|
+
readonly Account: {
|
|
27
|
+
/** Opens `/auth/account/waiting-room` (e.g. from membership-invite inbox action). */
|
|
28
|
+
readonly OpenWaitingRoom: "auth:open-waiting-room";
|
|
29
|
+
};
|
|
22
30
|
};
|
|
23
31
|
/** Scheduled purge of DeviceSessions idle past the InactiveSessionTermination setting. */
|
|
24
32
|
declare const AXM_AUTH_INACTIVE_SESSION_TERMINATION_PURGE_COMMAND_KEY: "auth.inactive-session.terminate";
|
|
@@ -64,7 +72,8 @@ declare const RootConfig: {
|
|
|
64
72
|
};
|
|
65
73
|
|
|
66
74
|
declare enum AXPAuthSettings {
|
|
67
|
-
|
|
75
|
+
/** User-scoped: login requires verified authenticator enrollment when true. */
|
|
76
|
+
UserTwoFactorEnabled = "Auth:Setting:User.TwoFactor.Enabled",
|
|
68
77
|
PasswordComplexity = "Auth:Setting:Authentication.PasswordComplexity",
|
|
69
78
|
PasswordExpiryDays = "Auth:Setting:Authentication.PasswordExpiryDays",
|
|
70
79
|
MaxLoginAttempts = "Auth:Setting:Authentication.MaxLoginAttempts",
|
|
@@ -82,10 +91,11 @@ declare enum AXPAuthSettings {
|
|
|
82
91
|
LockWhenIdleEnabled = "Auth:Setting:SessionManagement.LockWhenIdleEnabled",
|
|
83
92
|
LockWhenIdleMinutes = "Auth:Setting:SessionManagement.LockWhenIdleMinutes",
|
|
84
93
|
InactiveSessionTermination = "Auth:Setting:SessionManagement.InactiveSessionTermination",
|
|
85
|
-
MaxActiveDeviceSessions = "Auth:Setting:SessionManagement.MaxActiveDeviceSessions"
|
|
94
|
+
MaxActiveDeviceSessions = "Auth:Setting:SessionManagement.MaxActiveDeviceSessions",
|
|
95
|
+
/** User-scoped welcome onboarding progress blob. */
|
|
96
|
+
OnboardingWelcome = "Auth:Setting:Onboarding.Welcome"
|
|
86
97
|
}
|
|
87
98
|
declare const AXPAuthInactiveSessionTerminationOptions: {
|
|
88
|
-
readonly OneMinute: "oneMinute";
|
|
89
99
|
readonly OneWeek: "oneWeek";
|
|
90
100
|
readonly OneMonth: "oneMonth";
|
|
91
101
|
readonly ThreeMonths: "threeMonths";
|
|
@@ -10,6 +10,7 @@ import { CanActivateFn } from '@angular/router';
|
|
|
10
10
|
import * as i1$2 from '@angular/common';
|
|
11
11
|
import * as i1 from '@acorex-platform/framework-client/core';
|
|
12
12
|
import * as i1$1 from '@acorex/core/validation';
|
|
13
|
+
import { AXPAuthSettings } from '@acorex-platform/module-auth-client/contracts';
|
|
13
14
|
|
|
14
15
|
declare const PROFILE_PAGE_GROUPS_HOOK = "profile-page.groups";
|
|
15
16
|
declare const PROFILE_PAGE_SECTIONS_HOOK = "profile-page.sections";
|
|
@@ -423,5 +424,62 @@ declare class AXPAuthPasswordChangeTrackingService {
|
|
|
423
424
|
static ɵprov: i0.ɵɵInjectableDeclaration<AXPAuthPasswordChangeTrackingService>;
|
|
424
425
|
}
|
|
425
426
|
|
|
426
|
-
|
|
427
|
-
|
|
427
|
+
/** Hook key for modules/apps to contribute welcome wizard steps. */
|
|
428
|
+
declare const ONBOARDING_STEPS_HOOK = "onboarding.steps";
|
|
429
|
+
/** User-scoped settings key for welcome onboarding progress blob. */
|
|
430
|
+
declare const ONBOARDING_WELCOME_SETTING_KEY = AXPAuthSettings.OnboardingWelcome;
|
|
431
|
+
type AXPOnboardingStepScope = 'user' | 'tenant' | 'application';
|
|
432
|
+
/** Optional action button rendered on a welcome step (regular-user safe commands only). */
|
|
433
|
+
interface AXPOnboardingStepAction {
|
|
434
|
+
/** i18n key */
|
|
435
|
+
text: string;
|
|
436
|
+
icon?: string;
|
|
437
|
+
command: {
|
|
438
|
+
name: string;
|
|
439
|
+
options?: Record<string, unknown>;
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
interface AXPOnboardingStep {
|
|
443
|
+
id: string;
|
|
444
|
+
scope: AXPOnboardingStepScope;
|
|
445
|
+
/** i18n key */
|
|
446
|
+
title: string;
|
|
447
|
+
description?: string;
|
|
448
|
+
icon?: string;
|
|
449
|
+
priority: number;
|
|
450
|
+
/**
|
|
451
|
+
* User setting definition keys rendered as editors on this step
|
|
452
|
+
* (same definitions as Settings → User).
|
|
453
|
+
*/
|
|
454
|
+
settingKeys?: string[];
|
|
455
|
+
/** Self-service or navigate actions; never admin-only setup fields. */
|
|
456
|
+
actions?: AXPOnboardingStepAction[];
|
|
457
|
+
}
|
|
458
|
+
interface AXPOnboardingStepsPayload {
|
|
459
|
+
context: {
|
|
460
|
+
userId: string;
|
|
461
|
+
tenantId: string;
|
|
462
|
+
applicationId: string;
|
|
463
|
+
};
|
|
464
|
+
steps: AXPOnboardingStep[];
|
|
465
|
+
}
|
|
466
|
+
interface AXPOnboardingStepProgress {
|
|
467
|
+
status: 'completed' | 'skipped';
|
|
468
|
+
at: string;
|
|
469
|
+
scope: AXPOnboardingStepScope;
|
|
470
|
+
tenantId?: string;
|
|
471
|
+
applicationId?: string;
|
|
472
|
+
}
|
|
473
|
+
interface AXPOnboardingProgressState {
|
|
474
|
+
steps: Record<string, AXPOnboardingStepProgress>;
|
|
475
|
+
remindLaterUntil?: string | null;
|
|
476
|
+
dismissedPlanAt?: string | null;
|
|
477
|
+
}
|
|
478
|
+
interface AXPOnboardingContext {
|
|
479
|
+
userId: string;
|
|
480
|
+
tenantId: string;
|
|
481
|
+
applicationId: string;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
export { AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS, AUTH_USER_ACTIVITY_DEFAULT_WEEKS, AUTH_USER_ACTIVITY_WEEK_PRESETS, AXMAuthErrorHandler, AXMAuthModule, AXMAuthPlatformSettingsService, AXMAuthenticationTypes, AXMDefaultAuthConfigs, AXM_AUTH_CONFIG_TOKEN, AXM_LOGIN_GUARD_TOKEN, AXPAuthPasswordChangeTrackingService, AXPIdleLockService, AXPLoginExternalProvidersComponent, AXPLoginHistoryService, AXPUserAvatarSyncService, ONBOARDING_STEPS_HOOK, ONBOARDING_WELCOME_SETTING_KEY, PROFILE_PAGE_GROUPS_HOOK, PROFILE_PAGE_HEADER_META_HOOK, PROFILE_PAGE_SECTIONS_HOOK, aggregateDailySessionCounts, aggregateHourlySessionCounts, buildUserActivityDataSourceItem, buildUserActivityHours, buildUserActivityWeeks, canActivateLogin, computeUserActivityStats, configAuthModule, countToActivityLevel, extractUserActivityEndDate, extractUserActivityStartDate, extractUserActivityUserId, formatCompactActivityCount, isUserProfileGroupComponent, isUserProfileSectionsGroupRequested, parseAuthCredentialType, resolveDayDateRange, resolveDefaultUserActivityDateRange, resolveDefaultUserProfileSectionAction, resolveSmartUserActivityDateRange, resolveUserActivityHeatmapLayout, resolveUserProfileSectionContent, visibleUserProfileSectionActions };
|
|
485
|
+
export type { AXMAuthClientConfig, AXMAuthConfigs, AXPLoginHistoryEntry, AXPOnboardingContext, AXPOnboardingProgressState, AXPOnboardingStep, AXPOnboardingStepAction, AXPOnboardingStepProgress, AXPOnboardingStepScope, AXPOnboardingStepsPayload, AXPUserActivityDataSourceItem, AXPUserActivityDay, AXPUserActivityHeatmapLayout, AXPUserActivityHour, AXPUserActivityLevel, AXPUserActivityLoadParams, AXPUserActivityStats, AXPUserActivityWeek, AXPUserProfileGroup, AXPUserProfileGroupComponentContent, AXPUserProfileGroupContent, AXPUserProfileGroupSectionsContent, AXPUserProfileGroupsPayload, AXPUserProfileHeaderMetaItem, AXPUserProfileHeaderMetaPayload, AXPUserProfileSection, AXPUserProfileSectionAction, AXPUserProfileSectionCardContent, AXPUserProfileSectionComponentContent, AXPUserProfileSectionContent, AXPUserProfileSectionInsight, AXPUserProfileSectionLayout, AXPUserProfileSectionsPayload };
|