@acorex-platform/module-auth-client 0.0.61 → 0.0.63
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-acorex-platform-module-auth-client-DINrCCAx.mjs → acorex-platform-module-auth-client-acorex-platform-module-auth-client-CN5vRSEZ.mjs} +32 -32
- package/fesm2022/{acorex-platform-module-auth-client-acorex-platform-module-auth-client-DINrCCAx.mjs.map → acorex-platform-module-auth-client-acorex-platform-module-auth-client-CN5vRSEZ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-C1fUi_Mp.mjs → acorex-platform-module-auth-client-app-chooser.component-CNR-t2OL.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-C1fUi_Mp.mjs.map → acorex-platform-module-auth-client-app-chooser.component-CNR-t2OL.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-UvBqwF9V.mjs → acorex-platform-module-auth-client-change-password.command-D7oHp3Tk.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-UvBqwF9V.mjs.map → acorex-platform-module-auth-client-change-password.command-D7oHp3Tk.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-2e7ZjiEf.mjs → acorex-platform-module-auth-client-change-photo.command-D_n3Ahmj.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-2e7ZjiEf.mjs.map → acorex-platform-module-auth-client-change-photo.command-D_n3Ahmj.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-BGOYJ4FC.mjs → acorex-platform-module-auth-client-get-user-activity.query-BBCDko_I.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-BGOYJ4FC.mjs.map → acorex-platform-module-auth-client-get-user-activity.query-BBCDko_I.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-BOKKr6WW.mjs → acorex-platform-module-auth-client-lock-screen.command-DNQRcNVK.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-BOKKr6WW.mjs.map → acorex-platform-module-auth-client-lock-screen.command-DNQRcNVK.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-login.module-gi6wea8m.mjs → acorex-platform-module-auth-client-login.module-qkXYibtr.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-login.module-gi6wea8m.mjs.map → acorex-platform-module-auth-client-login.module-qkXYibtr.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-manage-two-factor.command-DRsNZWZF.mjs → acorex-platform-module-auth-client-manage-two-factor.command-C3T0gPHl.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-manage-two-factor.command-DRsNZWZF.mjs.map → acorex-platform-module-auth-client-manage-two-factor.command-C3T0gPHl.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-CwWtPiTG.mjs → acorex-platform-module-auth-client-open-sessions.command-D_YqoYjt.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-CwWtPiTG.mjs.map → acorex-platform-module-auth-client-open-sessions.command-D_YqoYjt.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-password.component-CAZ3tVPG.mjs → acorex-platform-module-auth-client-password.component-Lvsez0-1.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-password.component-CAZ3tVPG.mjs.map → acorex-platform-module-auth-client-password.component-Lvsez0-1.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-BcbVLmZo.mjs → acorex-platform-module-auth-client-profile-activity-chart.component-LpyJFXl9.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-BcbVLmZo.mjs.map → acorex-platform-module-auth-client-profile-activity-chart.component-LpyJFXl9.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-DEVBmVKd.mjs → acorex-platform-module-auth-client-profile-page-component.provider-DzESXOAt.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-DEVBmVKd.mjs.map → acorex-platform-module-auth-client-profile-page-component.provider-DzESXOAt.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-BNYoh2IL.mjs → acorex-platform-module-auth-client-profile-page.component-MatsNuqc.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-BNYoh2IL.mjs.map → acorex-platform-module-auth-client-profile-page.component-MatsNuqc.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-DArLfswX.mjs → acorex-platform-module-auth-client-register-password.component-CqOsT6I6.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-DArLfswX.mjs.map → acorex-platform-module-auth-client-register-password.component-CqOsT6I6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register.module-BXMV9tp3.mjs → acorex-platform-module-auth-client-register.module-Izk6-GRU.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-register.module-BXMV9tp3.mjs.map → acorex-platform-module-auth-client-register.module-Izk6-GRU.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-D9uLV6je.mjs → acorex-platform-module-auth-client-remove-pin-code.command-Cq9FMrtP.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-D9uLV6je.mjs.map → acorex-platform-module-auth-client-remove-pin-code.command-Cq9FMrtP.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-D_IKdJl8.mjs → acorex-platform-module-auth-client-session-lock-overlay.component-BGujfU4G.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-D_IKdJl8.mjs.map → acorex-platform-module-auth-client-session-lock-overlay.component-BGujfU4G.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-DRLTGXEF.mjs → acorex-platform-module-auth-client-set-pin-code.command-CoGcZIPV.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-DRLTGXEF.mjs.map → acorex-platform-module-auth-client-set-pin-code.command-CoGcZIPV.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-m7SwyaZH.mjs → acorex-platform-module-auth-client-set-pin-code.component-CoW81kSQ.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-m7SwyaZH.mjs.map → acorex-platform-module-auth-client-set-pin-code.component-CoW81kSQ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CdqBeKVw.mjs → acorex-platform-module-auth-client-tenant-chooser.component-CK4ZArN-.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CdqBeKVw.mjs.map → acorex-platform-module-auth-client-tenant-chooser.component-CK4ZArN-.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-two-factor-code.component-B1334bPg.mjs → acorex-platform-module-auth-client-two-factor-code.component-3oy2lQAi.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-two-factor-code.component-B1334bPg.mjs.map → acorex-platform-module-auth-client-two-factor-code.component-3oy2lQAi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-C0mkbR4X.mjs → acorex-platform-module-auth-client-two-factor.module-CRx6T5H5.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-C0mkbR4X.mjs.map → acorex-platform-module-auth-client-two-factor.module-CRx6T5H5.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-CerhsvHF.mjs → acorex-platform-module-auth-client-view-login-history.command-BmjD2Aqv.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-CerhsvHF.mjs.map → acorex-platform-module-auth-client-view-login-history.command-BmjD2Aqv.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-waiting-room.component-Wu8iPiTm.mjs → acorex-platform-module-auth-client-waiting-room.component-C0VyZQdV.mjs} +3 -3
- package/fesm2022/acorex-platform-module-auth-client-waiting-room.component-C0VyZQdV.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding-page.component-BKqHYkv2.mjs → acorex-platform-module-auth-client-welcome-onboarding-page.component-BwVu2fzw.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding-page.component-BKqHYkv2.mjs.map → acorex-platform-module-auth-client-welcome-onboarding-page.component-BwVu2fzw.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding.command--Rr0duJS.mjs → acorex-platform-module-auth-client-welcome-onboarding.command-D-o9nga7.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-welcome-onboarding.command--Rr0duJS.mjs.map → acorex-platform-module-auth-client-welcome-onboarding.command-D-o9nga7.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client.mjs +1 -1
- package/package.json +3 -3
- package/fesm2022/acorex-platform-module-auth-client-waiting-room.component-Wu8iPiTm.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-welcome-onboarding-page.component-BKqHYkv2.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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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-welcome-onboarding-page.component-BwVu2fzw.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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"}
|
|
@@ -4,7 +4,7 @@ import { AXTranslationService } from '@acorex/core/translation';
|
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
5
|
import { inject, Injectable } from '@angular/core';
|
|
6
6
|
import { Router } from '@angular/router';
|
|
7
|
-
import { u as AXPWelcomeOnboardingFlowService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
7
|
+
import { u as AXPWelcomeOnboardingFlowService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-CN5vRSEZ.mjs';
|
|
8
8
|
|
|
9
9
|
//#endregion
|
|
10
10
|
//#region ----- Welcome onboarding command -----
|
|
@@ -56,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
56
56
|
}] });
|
|
57
57
|
|
|
58
58
|
export { AXPWelcomeOnboardingCommand };
|
|
59
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-welcome-onboarding.command
|
|
59
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-welcome-onboarding.command-D-o9nga7.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-welcome-onboarding.command
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-welcome-onboarding.command-D-o9nga7.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 { H as AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, I as AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS, J as AUTH_USER_ACTIVITY_DEFAULT_WEEKS, K as AUTH_USER_ACTIVITY_WEEK_PRESETS, L as AXMAuthErrorHandler, M as AXMAuthModule, x as AXMAuthPlatformSettingsService, G as AXMAuthenticationTypes, N as AXMDefaultAuthConfigs, O as AXM_AUTH_CONFIG_TOKEN, w as AXM_LOGIN_GUARD_TOKEN, Q as AXPAuthMasterLayoutComponent, m as AXPAuthPasswordChangeTrackingService, j as AXPIdleLockService, F 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 PROFILE_SLOT_MENU_ITEMS_HOOK, V as aggregateDailySessionCounts, W as aggregateHourlySessionCounts, i as buildUserActivityDataSourceItem, X as buildUserActivityHours, Y as buildUserActivityWeeks, Z as canActivateLogin, _ as computeUserActivityStats, $ as configAuthModule, a0 as countToActivityLevel, a1 as extractUserActivityEndDate, a2 as extractUserActivityStartDate, a3 as extractUserActivityUserId, E as formatCompactActivityCount, a4 as hasProfileSlotMenuBreakAfter, a5 as hasProfileSlotMenuBreakBefore, a6 as isUserProfileGroupComponent, a7 as isUserProfileSectionsGroupRequested, a8 as parseAuthCredentialType, a9 as resolveDayDateRange, g as resolveDefaultUserActivityDateRange, r as resolveDefaultUserProfileSectionAction, h as resolveSmartUserActivityDateRange, aa as resolveUserActivityHeatmapLayout, c as resolveUserProfileSectionContent, v as visibleUserProfileSectionActions } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
1
|
+
export { H as AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, I as AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS, J as AUTH_USER_ACTIVITY_DEFAULT_WEEKS, K as AUTH_USER_ACTIVITY_WEEK_PRESETS, L as AXMAuthErrorHandler, M as AXMAuthModule, x as AXMAuthPlatformSettingsService, G as AXMAuthenticationTypes, N as AXMDefaultAuthConfigs, O as AXM_AUTH_CONFIG_TOKEN, w as AXM_LOGIN_GUARD_TOKEN, Q as AXPAuthMasterLayoutComponent, m as AXPAuthPasswordChangeTrackingService, j as AXPIdleLockService, F 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 PROFILE_SLOT_MENU_ITEMS_HOOK, V as aggregateDailySessionCounts, W as aggregateHourlySessionCounts, i as buildUserActivityDataSourceItem, X as buildUserActivityHours, Y as buildUserActivityWeeks, Z as canActivateLogin, _ as computeUserActivityStats, $ as configAuthModule, a0 as countToActivityLevel, a1 as extractUserActivityEndDate, a2 as extractUserActivityStartDate, a3 as extractUserActivityUserId, E as formatCompactActivityCount, a4 as hasProfileSlotMenuBreakAfter, a5 as hasProfileSlotMenuBreakBefore, a6 as isUserProfileGroupComponent, a7 as isUserProfileSectionsGroupRequested, a8 as parseAuthCredentialType, a9 as resolveDayDateRange, g as resolveDefaultUserActivityDateRange, r as resolveDefaultUserProfileSectionAction, h as resolveSmartUserActivityDateRange, aa as resolveUserActivityHeatmapLayout, c as resolveUserProfileSectionContent, v as visibleUserProfileSectionActions } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-CN5vRSEZ.mjs';
|
|
2
2
|
//# sourceMappingURL=acorex-platform-module-auth-client.mjs.map
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex-platform/module-auth-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.63",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@acorex-platform/module-security-management-client": "0.0.
|
|
7
|
-
"@acorex-platform/module-tenant-management-client": "0.0.
|
|
6
|
+
"@acorex-platform/module-security-management-client": "0.0.63",
|
|
7
|
+
"@acorex-platform/module-tenant-management-client": "0.0.63",
|
|
8
8
|
"@angular/common": "^21.0.0 || ^22.0.0",
|
|
9
9
|
"@angular/core": "^21.0.0 || ^22.0.0"
|
|
10
10
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-waiting-room.component-Wu8iPiTm.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/account/waiting-room/waiting-room.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/waiting-room/waiting-room.component.html"],"sourcesContent":["import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPPlatformBrandingService, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport {\n AXPEntityLogoRegistrationService,\n AXPLogoComponent,\n axpExtractLogoUrl,\n axpTenantLogoKey,\n} from '@acorex-platform/framework-client/core';\nimport { AXPUserAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport {\n AXM_JOIN_REQUEST_ERROR_CODES,\n AXM_MEMBERSHIP_INVITE_WAITING_ROOM_SOURCE,\n AXMSecurityManagementServerCommands,\n type AXMJoinRequestItem,\n type AXMPendingInvitationItem,\n} from '@acorex-platform/module-security-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\n\n//#region ----- Types -----\n\ninterface WaitingRoomInvitation extends AXMPendingInvitationItem {\n expiresAtLabel: string;\n}\n\ninterface WaitingRoomJoinRequest extends AXMJoinRequestItem {\n expiresAtLabel: string;\n}\n\n//#endregion\n\n//#region ----- Waiting room -----\n\n@Component({\n selector: 'axp-auth-waiting-room',\n templateUrl: './waiting-room.component.html',\n styleUrls: ['../shared/auth-chooser.layout.css', './waiting-room.component.css'],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXSkeletonModule,\n AXTextBoxModule,\n AXTranslationModule,\n AXPLogoComponent,\n AXPUserAvatarComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPAuthWaitingRoomComponent implements OnInit {\n //#region ----- Services & Dependencies -----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly commandService = inject(AXPCommandService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly platformBranding = inject(AXPPlatformBrandingService);\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly logoRegistration = inject(AXPEntityLogoRegistrationService);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly platformTitle = signal('');\n protected readonly loading = signal(true);\n protected readonly busyId = signal<string | null>(null);\n protected readonly invitations = signal<WaitingRoomInvitation[]>([]);\n protected readonly joinRequests = signal<WaitingRoomJoinRequest[]>([]);\n /** True when opened from membership-invite notification or user already has other tenants. */\n protected readonly membershipContext = signal(false);\n protected readonly uniqueName = signal('');\n protected readonly submitBusy = signal(false);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly titleKey = computed(() =>\n this.membershipContext()\n ? '@auth:waiting-room.membership-invite.title'\n : '@auth:waiting-room.title',\n );\n\n protected readonly descriptionKey = computed(() =>\n this.membershipContext()\n ? '@auth:waiting-room.membership-invite.description'\n : '@auth:waiting-room.description',\n );\n\n protected readonly canSubmitJoinRequest = computed(\n () => this.uniqueName().trim().length > 0 && !this.submitBusy(),\n );\n\n protected get user() {\n return this.sessionService.user;\n }\n\n protected tenantLogoKey(tenantId: string): string {\n return axpTenantLogoKey(tenantId);\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 // After admin approves a join request, a refresh must leave the waiting room.\n if (await this.redirectIfMembershipAvailable()) {\n return;\n }\n\n const source = String(this.route.snapshot.queryParamMap.get('source') ?? '').trim();\n const fromInvite = source === AXM_MEMBERSHIP_INVITE_WAITING_ROOM_SOURCE;\n this.membershipContext.set(fromInvite);\n\n await this.reloadLists();\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n /**\n * Refresh clears the in-memory tenants catalog cache (hard navigation), then the\n * tenant-chooser guard sends the user back here only when still without membership.\n */\n protected async reload(): Promise<void> {\n if (typeof window !== 'undefined') {\n window.location.assign('/auth/account/tenant-chooser');\n return;\n }\n if (await this.redirectIfMembershipAvailable()) {\n return;\n }\n await this.reloadLists();\n }\n\n protected onUniqueNameChange(event: AXValueChangedEvent): void {\n const next = typeof event?.value === 'string' ? event.value : String(event?.value ?? '');\n this.uniqueName.set(next);\n }\n\n protected async submitJoinRequest(): Promise<void> {\n const uniqueName = this.uniqueName().trim();\n if (!uniqueName || this.submitBusy()) {\n return;\n }\n this.submitBusy.set(true);\n try {\n const result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.RequestTenantMembership,\n { uniqueName },\n );\n if (!result?.success) {\n const text = await this.joinRequestErrorText(result);\n this.toastService.show({ color: 'danger', content: text, timeOut: 4000 });\n return;\n }\n const ok = await this.translationService\n .translateAsync('@auth:waiting-room.join-request.submit-success')\n .catch(() => 'Membership request sent. An administrator will review it.');\n this.toastService.show({ color: 'success', content: ok, timeOut: 3000 });\n this.uniqueName.set('');\n await this.reloadJoinRequests();\n } finally {\n this.submitBusy.set(false);\n }\n }\n\n protected async cancelJoinRequest(item: AXMJoinRequestItem): Promise<void> {\n this.busyId.set(item.tenantUserId);\n try {\n const result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.CancelMyJoinRequest,\n { tenantUserId: item.tenantUserId },\n );\n if (!result?.success) {\n const text = await this.joinRequestErrorText(result);\n this.toastService.show({ color: 'danger', content: text, timeOut: 4000 });\n return;\n }\n await this.reloadJoinRequests();\n } finally {\n this.busyId.set(null);\n }\n }\n\n protected async accept(item: AXMPendingInvitationItem): Promise<void> {\n this.busyId.set(item.tenantUserId);\n try {\n let newPassword: string | undefined;\n // First attempt without password; if server requires one, prompt once.\n let result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.AcceptMyInvitation,\n { tenantUserId: item.tenantUserId },\n );\n const needsPassword =\n !result?.success &&\n typeof result?.message?.text === 'string' &&\n result.message.text.toLowerCase().includes('password');\n if (needsPassword) {\n const promptTitle = await this.translationService\n .translateAsync('@auth:waiting-room.set-password-title')\n .catch(() => 'Set Password');\n const promptMessage = await this.translationService\n .translateAsync('@auth:waiting-room.set-password-message')\n .catch(() => 'Choose a password to activate your account (min 6 characters).');\n newPassword = window.prompt(`${promptTitle}\\n${promptMessage}`) ?? undefined;\n if (!newPassword || newPassword.length < 6) {\n return;\n }\n result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.AcceptMyInvitation,\n { tenantUserId: item.tenantUserId, newPassword },\n );\n }\n if (!result?.success) {\n const fallback = await this.translationService\n .translateAsync('@auth:waiting-room.accept-failed')\n .catch(() => 'Could not accept the invitation.');\n const text =\n (typeof result?.message?.text === 'string' && result.message.text) || fallback;\n this.toastService.show({ color: 'danger', title: text, content: text, timeOut: 4000 });\n return;\n }\n const ok = await this.translationService\n .translateAsync('@auth:waiting-room.accept-success')\n .catch(() => 'Invitation accepted. Choose a tenant to continue.');\n this.toastService.show({ color: 'success', title: ok, content: ok, timeOut: 3000 });\n // Hard reload clears the in-memory tenants catalog cache so the chooser\n // sees the newly activated membership (no public invalidate API yet).\n if (typeof window !== 'undefined') {\n window.location.assign('/auth/account/tenant-chooser');\n return;\n }\n await this.router.navigate(['/auth/account/tenant-chooser']);\n } finally {\n this.busyId.set(null);\n }\n }\n\n protected async decline(item: AXMPendingInvitationItem): Promise<void> {\n this.busyId.set(item.tenantUserId);\n try {\n const result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.DeclineInvitation,\n { tenantUserId: item.tenantUserId },\n );\n if (!result?.success) {\n const fallback = await this.translationService\n .translateAsync('@auth:waiting-room.decline-failed')\n .catch(() => 'Could not decline the invitation.');\n const text =\n (typeof result?.message?.text === 'string' && result.message.text) || fallback;\n this.toastService.show({ color: 'danger', title: text, content: text, timeOut: 4000 });\n return;\n }\n await this.reloadLists();\n } finally {\n this.busyId.set(null);\n }\n }\n\n protected async signOut(): Promise<void> {\n await this.sessionService.signout().catch(() => undefined);\n await this.router.navigate(['/auth/login']);\n }\n\n protected async goBack(): Promise<void> {\n await this.router.navigate(['/auth/account/tenant-chooser']);\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n /** Returns true when navigation away from the waiting room was started. */\n private async redirectIfMembershipAvailable(): Promise<boolean> {\n const tenants = await this.sessionService.getTenantsList().catch(() => []);\n if (!Array.isArray(tenants) || tenants.length === 0) {\n return false;\n }\n await this.router.navigate(['/auth/account/tenant-chooser']);\n return true;\n }\n\n private async reloadLists(): Promise<void> {\n this.loading.set(true);\n try {\n await Promise.all([this.reloadInvitations(), this.reloadJoinRequests()]);\n } finally {\n this.loading.set(false);\n }\n }\n\n private async reloadInvitations(): Promise<void> {\n const result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.ListMyPendingInvitations,\n {},\n );\n const items =\n ((result as { data?: { items?: AXMPendingInvitationItem[] } })?.data?.items as\n | AXMPendingInvitationItem[]\n | undefined) ?? [];\n const rows = Array.isArray(items) ? items : [];\n this.registerTenantLogos(rows);\n this.invitations.set(\n await Promise.all(\n rows.map(async (item) => ({\n ...item,\n expiresAtLabel: await this.formatExpiresAt(item.expiresAt),\n })),\n ),\n );\n }\n\n private async reloadJoinRequests(): Promise<void> {\n try {\n const result = await this.commandService.execute(\n AXMSecurityManagementServerCommands.ListMyJoinRequests,\n {},\n );\n const items =\n ((result as { data?: { items?: AXMJoinRequestItem[] } })?.data?.items as\n | AXMJoinRequestItem[]\n | undefined) ?? [];\n const rows = Array.isArray(items) ? items : [];\n this.registerTenantLogos(rows);\n this.joinRequests.set(\n await Promise.all(\n rows.map(async (item) => ({\n ...item,\n expiresAtLabel: await this.formatExpiresAt(item.expiresAt),\n })),\n ),\n );\n } catch {\n this.joinRequests.set([]);\n }\n }\n\n private registerTenantLogos(\n rows: Array<{ tenantId?: string; tenantLogo?: string; tenantTitle?: string }>,\n ): void {\n for (const row of rows) {\n const tenantId = typeof row.tenantId === 'string' ? row.tenantId.trim() : '';\n if (!tenantId) {\n continue;\n }\n this.logoRegistration.registerTenant({\n id: tenantId,\n title: row.tenantTitle,\n logo: axpExtractLogoUrl(row.tenantLogo) ?? row.tenantLogo,\n });\n }\n }\n\n //#endregion\n\n //#region ----- Display -----\n\n private async joinRequestErrorText(\n result: { message?: { code?: string } } | null | undefined,\n ): Promise<string> {\n const code = typeof result?.message?.code === 'string' ? result.message.code : '';\n const keyByCode: Record<string, string> = {\n [AXM_JOIN_REQUEST_ERROR_CODES.AlreadyMember]:\n '@auth:waiting-room.join-request.errors.already-member',\n [AXM_JOIN_REQUEST_ERROR_CODES.InvitePending]:\n '@auth:waiting-room.join-request.errors.invite-pending',\n [AXM_JOIN_REQUEST_ERROR_CODES.TenantNotFound]:\n '@auth:waiting-room.join-request.errors.not-found',\n [AXM_JOIN_REQUEST_ERROR_CODES.NotPending]:\n '@auth:waiting-room.join-request.errors.not-pending',\n };\n const key = keyByCode[code] ?? '@auth:waiting-room.join-request.submit-failed';\n return this.translationService.translateAsync(key).catch(() => 'Could not send the request.');\n }\n\n private async formatExpiresAt(iso: string | undefined): Promise<string> {\n const parsed = iso ? Date.parse(iso) : Number.NaN;\n if (!Number.isFinite(parsed)) {\n return '';\n }\n const dateFormat = await this.settingsService.get(AXPRegionalSetting.ShortDate);\n const timeFormat = await this.settingsService.get(AXPRegionalSetting.ShortTime);\n const format = `${dateFormat} ${timeFormat}`.trim();\n return String(this.formatService.format(new Date(parsed), 'datetime', { format }) ?? '');\n }\n\n //#endregion\n}\n\n//#endregion\n","<main class=\"axp-auth-chooser\">\n <div class=\"axp-auth-chooser__inner\">\n <section class=\"axp-auth-chooser__brand\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"260\"\n [attr.alt]=\"platformTitle()\"\n ></axp-logo>\n </section>\n\n <section class=\"axp-auth-chooser__card-wrap\">\n <div class=\"axp-auth-chooser__card\">\n <!-- ----- Loading skeleton while invitations are fetched ----- -->\n @if (loading()) {\n <ax-skeleton [animated]=\"true\" class=\"size-[72px] rounded-full shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"h-6 w-56 max-w-full\"></ax-skeleton>\n }\n <!-- ----- Signed-in identity for the waiting room ----- -->\n @else {\n <axp-user-avatar\n [size]=\"72\"\n [userId]=\"user?.id!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n <h2 class=\"md:text-lg font-medium\">\n {{ titleKey() | translate | async }}\n </h2>\n <p class=\"text-neutral-500 text-sm md:text-base font-medium\">\n {{ descriptionKey() | translate | async }}\n </p>\n <p class=\"text-sm text-neutral-600 m-0\">\n {{ user?.title || user?.name }}\n </p>\n }\n\n <div class=\"mt-4 w-full flex flex-col gap-3 text-start\">\n <!-- ----- Request membership by unique tenant name ----- -->\n <h3 class=\"text-sm font-semibold m-0\">\n {{ '@auth:waiting-room.join-request.heading' | translate | async }}\n </h3>\n <p class=\"text-sm text-neutral-500 m-0\">\n {{ '@auth:waiting-room.join-request.help' | translate | async }}\n </p>\n <div class=\"flex flex-col gap-1\">\n <span class=\"text-xs text-neutral-500\">\n {{ '@auth:waiting-room.join-request.unique-name' | translate | async }}\n </span>\n <ax-text-box\n [ngModel]=\"uniqueName()\"\n (onValueChanged)=\"onUniqueNameChange($event)\"\n [placeholder]=\"('@auth:waiting-room.join-request.placeholder' | translate | async) ?? ''\"\n ></ax-text-box>\n </div>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@auth:waiting-room.join-request.submit' | translate | async\"\n [disabled]=\"!canSubmitJoinRequest()\"\n (onClick)=\"submitJoinRequest()\"\n ></ax-button>\n\n <!-- ----- Pending join requests waiting for admin review ----- -->\n @if (joinRequests().length > 0) {\n <h3 class=\"text-sm font-semibold m-0 mt-2\">\n {{ '@auth:waiting-room.join-request.pending-heading' | translate | async }}\n </h3>\n @for (item of joinRequests(); track item.tenantUserId) {\n <div\n class=\"flex flex-col gap-2 p-3 rounded-md border border-neutral-100 dark:border-neutral-800\"\n [class.opacity-50]=\"busyId() === item.tenantUserId\"\n >\n <div class=\"flex items-center gap-3\">\n <div class=\"shrink-0 size-9 overflow-hidden rounded-md grid place-items-center\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item.tenantId)\"\n appearance=\"colored\"\n [size]=\"36\"\n class=\"size-9 overflow-hidden\"\n ></axp-logo>\n </div>\n <div class=\"font-medium\">\n {{ item.tenantTitle || item.tenantName || item.tenantId }}\n </div>\n </div>\n <!-- ----- Show request expiry when present ----- -->\n @if (item.expiresAtLabel) {\n <div class=\"text-xs text-neutral-500\">\n {{\n '@auth:waiting-room.expires-at'\n | translate: { params: { datetime: item.expiresAtLabel } }\n | async\n }}\n </div>\n }\n <ax-button\n look=\"outline\"\n color=\"default\"\n [text]=\"'@auth:waiting-room.join-request.cancel' | translate | async\"\n [disabled]=\"!!busyId() || submitBusy()\"\n (onClick)=\"cancelJoinRequest(item)\"\n ></ax-button>\n </div>\n }\n }\n\n <h3 class=\"text-sm font-semibold m-0\">\n {{ '@auth:waiting-room.invitations-heading' | translate | async }}\n </h3>\n\n <!-- ----- Invitation list loading placeholders ----- -->\n @if (loading()) {\n @for (n of [1, 2]; track n) {\n <ax-skeleton [animated]=\"true\" class=\"h-16 w-full rounded-md\"></ax-skeleton>\n }\n }\n <!-- ----- Empty state when there are no pending invitations ----- -->\n @else if (invitations().length === 0) {\n <p class=\"text-sm text-neutral-500 m-0\">\n {{ '@auth:waiting-room.empty' | translate | async }}\n </p>\n }\n <!-- ----- Pending invitation cards with accept / decline ----- -->\n @else {\n @for (item of invitations(); track item.tenantUserId) {\n <div\n class=\"flex flex-col gap-2 p-3 rounded-md border border-neutral-100 dark:border-neutral-800\"\n [class.opacity-50]=\"busyId() === item.tenantUserId\"\n >\n <div class=\"flex items-center gap-3\">\n <div class=\"shrink-0 size-9 overflow-hidden rounded-md grid place-items-center\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item.tenantId)\"\n appearance=\"colored\"\n [size]=\"36\"\n class=\"size-9 overflow-hidden\"\n ></axp-logo>\n </div>\n <div class=\"font-medium\">\n {{ item.tenantTitle || item.tenantId }}\n </div>\n </div>\n <!-- ----- Show invitation expiry when present ----- -->\n @if (item.expiresAtLabel) {\n <div class=\"text-xs text-neutral-500\">\n {{\n '@auth:waiting-room.expires-at'\n | translate: { params: { datetime: item.expiresAtLabel } }\n | async\n }}\n </div>\n }\n <div class=\"flex gap-2 flex-wrap\">\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@auth:waiting-room.actions.accept' | translate | async\"\n [disabled]=\"!!busyId()\"\n (onClick)=\"accept(item)\"\n ></ax-button>\n <ax-button\n look=\"outline\"\n color=\"default\"\n [text]=\"'@auth:waiting-room.actions.decline' | translate | async\"\n [disabled]=\"!!busyId()\"\n (onClick)=\"decline(item)\"\n ></ax-button>\n </div>\n </div>\n }\n }\n </div>\n\n <div class=\"mt-4 flex gap-2 flex-wrap justify-center\">\n @if (membershipContext()) {\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@auth:waiting-room.actions.back' | translate | async\"\n (onClick)=\"goBack()\"\n ></ax-button>\n }\n <ax-button\n look=\"outline\"\n color=\"default\"\n [text]=\"'@auth:waiting-room.actions.sign-out' | translate | async\"\n (onClick)=\"signOut()\"\n ></ax-button>\n <ax-button\n look=\"outline\"\n color=\"default\"\n [text]=\"'@auth:waiting-room.actions.refresh' | translate | async\"\n (onClick)=\"reload()\"\n ></ax-button>\n </div>\n </div>\n </section>\n </div>\n</main>\n"],"names":["i2","i6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA;AAEA;MAsBa,2BAA2B,CAAA;AApBxC,IAAA,WAAA,GAAA;;AAuBmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACrD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AAC3D,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;;;QAM5B,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,EAAE;0FAAC;QAC1B,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,IAAI;oFAAC;QACtB,IAAA,CAAA,MAAM,GAAG,MAAM,CAAgB,IAAI;mFAAC;QACpC,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,EAAE;wFAAC;QACjD,IAAA,CAAA,YAAY,GAAG,MAAM,CAA2B,EAAE;yFAAC;;QAEnD,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK;8FAAC;QACjC,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,EAAE;uFAAC;QACvB,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK;uFAAC;;;QAM1B,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,iBAAiB;AACpB,cAAE;AACF,cAAE,0BAA0B;qFAC/B;QAEkB,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAC3C,IAAI,CAAC,iBAAiB;AACpB,cAAE;AACF,cAAE,gCAAgC;2FACrC;QAEkB,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAChD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;iGAChE;AA+SF,IAAA;AA7SC,IAAA,IAAc,IAAI,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI;IACjC;AAEU,IAAA,aAAa,CAAC,QAAgB,EAAA;AACtC,QAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC;;;AAMA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC;;AAGzC,QAAA,IAAI,MAAM,IAAI,CAAC,6BAA6B,EAAE,EAAE;YAC9C;QACF;QAEA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACnF,QAAA,MAAM,UAAU,GAAG,MAAM,KAAK,yCAAyC;AACvE,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;AAEtC,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;IAC1B;;;AAMA;;;AAGG;AACO,IAAA,MAAM,MAAM,GAAA;AACpB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC;YACtD;QACF;AACA,QAAA,IAAI,MAAM,IAAI,CAAC,6BAA6B,EAAE,EAAE;YAC9C;QACF;AACA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;IAC1B;AAEU,IAAA,kBAAkB,CAAC,KAA0B,EAAA;QACrD,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEU,IAAA,MAAM,iBAAiB,GAAA;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QAC3C,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACpC;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,mCAAmC,CAAC,uBAAuB,EAC3D,EAAE,UAAU,EAAE,CACf;AACD,YAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;gBACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AACpD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACzE;YACF;AACA,YAAA,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC;iBACnB,cAAc,CAAC,gDAAgD;AAC/D,iBAAA,KAAK,CAAC,MAAM,2DAA2D,CAAC;AAC3E,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;QACjC;gBAAU;AACR,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B;IACF;IAEU,MAAM,iBAAiB,CAAC,IAAwB,EAAA;QACxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAClC,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,mCAAmC,CAAC,mBAAmB,EACvD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CACpC;AACD,YAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;gBACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AACpD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACzE;YACF;AACA,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;QACjC;gBAAU;AACR,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;IACF;IAEU,MAAM,MAAM,CAAC,IAA8B,EAAA;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAClC,QAAA,IAAI;AACF,YAAA,IAAI,WAA+B;;YAEnC,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC5C,mCAAmC,CAAC,kBAAkB,EACtD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CACpC;AACD,YAAA,MAAM,aAAa,GACjB,CAAC,MAAM,EAAE,OAAO;AAChB,gBAAA,OAAO,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,QAAQ;AACzC,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACxD,IAAI,aAAa,EAAE;AACjB,gBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;qBAC5B,cAAc,CAAC,uCAAuC;AACtD,qBAAA,KAAK,CAAC,MAAM,cAAc,CAAC;AAC9B,gBAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;qBAC9B,cAAc,CAAC,yCAAyC;AACxD,qBAAA,KAAK,CAAC,MAAM,gEAAgE,CAAC;AAChF,gBAAA,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA,EAAG,WAAW,CAAA,EAAA,EAAK,aAAa,CAAA,CAAE,CAAC,IAAI,SAAS;gBAC5E,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC1C;gBACF;gBACA,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CACxC,mCAAmC,CAAC,kBAAkB,EACtD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CACjD;YACH;AACA,YAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACpB,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;qBACzB,cAAc,CAAC,kCAAkC;AACjD,qBAAA,KAAK,CAAC,MAAM,kCAAkC,CAAC;gBAClD,MAAM,IAAI,GACR,CAAC,OAAO,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAChF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACtF;YACF;AACA,YAAA,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC;iBACnB,cAAc,CAAC,mCAAmC;AAClD,iBAAA,KAAK,CAAC,MAAM,mDAAmD,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;;AAGnF,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC;gBACtD;YACF;YACA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAC9D;gBAAU;AACR,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;IACF;IAEU,MAAM,OAAO,CAAC,IAA8B,EAAA;QACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAClC,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,mCAAmC,CAAC,iBAAiB,EACrD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CACpC;AACD,YAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACpB,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;qBACzB,cAAc,CAAC,mCAAmC;AAClD,qBAAA,KAAK,CAAC,MAAM,mCAAmC,CAAC;gBACnD,MAAM,IAAI,GACR,CAAC,OAAO,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAChF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACtF;YACF;AACA,YAAA,MAAM,IAAI,CAAC,WAAW,EAAE;QAC1B;gBAAU;AACR,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;IACF;AAEU,IAAA,MAAM,OAAO,GAAA;AACrB,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;QAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC;IAC7C;AAEU,IAAA,MAAM,MAAM,GAAA;QACpB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8BAA8B,CAAC,CAAC;IAC9D;;;;AAOQ,IAAA,MAAM,6BAA6B,GAAA;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC1E,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,YAAA,OAAO,KAAK;QACd;QACA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8BAA8B,CAAC,CAAC;AAC5D,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC1E;gBAAU;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB;IACF;AAEQ,IAAA,MAAM,iBAAiB,GAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,mCAAmC,CAAC,wBAAwB,EAC5D,EAAE,CACH;QACD,MAAM,KAAK,GACP,MAA4D,EAAE,IAAI,EAAE,KAExD,IAAI,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM;AACxB,YAAA,GAAG,IAAI;YACP,cAAc,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;SAC3D,CAAC,CAAC,CACJ,CACF;IACH;AAEQ,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC9C,mCAAmC,CAAC,kBAAkB,EACtD,EAAE,CACH;YACD,MAAM,KAAK,GACP,MAAsD,EAAE,IAAI,EAAE,KAElD,IAAI,EAAE;AACtB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC9C,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM;AACxB,gBAAA,GAAG,IAAI;gBACP,cAAc,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;aAC3D,CAAC,CAAC,CACJ,CACF;QACH;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B;IACF;AAEQ,IAAA,mBAAmB,CACzB,IAA6E,EAAA;AAE7E,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;YAC5E,IAAI,CAAC,QAAQ,EAAE;gBACb;YACF;AACA,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;AACnC,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,GAAG,CAAC,WAAW;gBACtB,IAAI,EAAE,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU;AAC1D,aAAA,CAAC;QACJ;IACF;;;IAMQ,MAAM,oBAAoB,CAChC,MAA0D,EAAA;QAE1D,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE;AACjF,QAAA,MAAM,SAAS,GAA2B;AACxC,YAAA,CAAC,4BAA4B,CAAC,aAAa,GACzC,uDAAuD;AACzD,YAAA,CAAC,4BAA4B,CAAC,aAAa,GACzC,uDAAuD;AACzD,YAAA,CAAC,4BAA4B,CAAC,cAAc,GAC1C,kDAAkD;AACpD,YAAA,CAAC,4BAA4B,CAAC,UAAU,GACtC,oDAAoD;SACvD;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,+CAA+C;AAC9E,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,6BAA6B,CAAC;IAC/F;IAEQ,MAAM,eAAe,CAAC,GAAuB,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG;QACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAC/E,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC;QAC/E,MAAM,MAAM,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC,IAAI,EAAE;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1F;8GA1VW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1ExC,6wQAwMA,EAAA,MAAA,EAAA,CAAA,4yIAAA,EAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7II,YAAY,8BACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,qdACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKb,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBApBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EAGxB;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,cAAc;wBACd,iBAAiB;wBACjB,eAAe;wBACf,gBAAgB;wBAChB,eAAe;wBACf,mBAAmB;wBACnB,gBAAgB;wBAChB,sBAAsB;AACvB,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,6wQAAA,EAAA,MAAA,EAAA,CAAA,4yIAAA,CAAA,EAAA;;;"}
|