@acorex-platform/module-auth-client 0.0.30 → 0.0.32
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-BJduAePW.mjs → acorex-platform-module-auth-client-acorex-platform-module-auth-client-CPmffSrQ.mjs} +182 -45
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-CPmffSrQ.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-BeXTcP-B.mjs → acorex-platform-module-auth-client-app-chooser.component-BfOgjNxw.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-BeXTcP-B.mjs.map → acorex-platform-module-auth-client-app-chooser.component-BfOgjNxw.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BiAjSn5C.mjs → acorex-platform-module-auth-client-change-password.command-BcBbN5hX.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BiAjSn5C.mjs.map → acorex-platform-module-auth-client-change-password.command-BcBbN5hX.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-BrQVX8wA.mjs → acorex-platform-module-auth-client-change-photo.command-DfHUPj7p.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-BrQVX8wA.mjs.map → acorex-platform-module-auth-client-change-photo.command-DfHUPj7p.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-ChzxVhRM.mjs → acorex-platform-module-auth-client-get-user-activity.query-D9fyLuBy.mjs} +16 -6
- package/fesm2022/acorex-platform-module-auth-client-get-user-activity.query-D9fyLuBy.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-tuEnmBqT.mjs → acorex-platform-module-auth-client-lock-screen.command-DUZ255VK.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-tuEnmBqT.mjs.map → acorex-platform-module-auth-client-lock-screen.command-DUZ255VK.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-login.module-CXYUlOPx.mjs → acorex-platform-module-auth-client-login.module-uRv9Gwea.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-login.module-CXYUlOPx.mjs.map → acorex-platform-module-auth-client-login.module-uRv9Gwea.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-WlPLf7po.mjs → acorex-platform-module-auth-client-master.layout-Cu8mQN9B.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-WlPLf7po.mjs.map → acorex-platform-module-auth-client-master.layout-Cu8mQN9B.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-DcMF_kGc.mjs → acorex-platform-module-auth-client-open-sessions.command-BlPxfa3v.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-DcMF_kGc.mjs.map → acorex-platform-module-auth-client-open-sessions.command-BlPxfa3v.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-password.component-DPPz48en.mjs → acorex-platform-module-auth-client-password.component-5-0kaY5J.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-password.component-DPPz48en.mjs.map → acorex-platform-module-auth-client-password.component-5-0kaY5J.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-kBmoYwRh.mjs +229 -0
- package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-kBmoYwRh.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-BkR63GX0.mjs → acorex-platform-module-auth-client-profile-page-component.provider-Bz1mdVCM.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-BkR63GX0.mjs.map → acorex-platform-module-auth-client-profile-page-component.provider-Bz1mdVCM.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-jhc0ZSSB.mjs → acorex-platform-module-auth-client-profile-page.component-w2SYmCyc.mjs} +7 -3
- package/fesm2022/acorex-platform-module-auth-client-profile-page.component-w2SYmCyc.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-p_aNCzTQ.mjs → acorex-platform-module-auth-client-register-password.component-BtDgEnmo.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-p_aNCzTQ.mjs.map → acorex-platform-module-auth-client-register-password.component-BtDgEnmo.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register.module-ht9ZxSLU.mjs → acorex-platform-module-auth-client-register.module-DCWoPb0u.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-register.module-ht9ZxSLU.mjs.map → acorex-platform-module-auth-client-register.module-DCWoPb0u.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-BHIn0igt.mjs → acorex-platform-module-auth-client-remove-pin-code.command-DJeSHCLL.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-BHIn0igt.mjs.map → acorex-platform-module-auth-client-remove-pin-code.command-DJeSHCLL.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-Dy21tFJ1.mjs → acorex-platform-module-auth-client-session-lock-overlay.component-3HJEmCYI.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-Dy21tFJ1.mjs.map → acorex-platform-module-auth-client-session-lock-overlay.component-3HJEmCYI.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-CHEfCVZU.mjs → acorex-platform-module-auth-client-set-pin-code.command-C2kCGuQW.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-CHEfCVZU.mjs.map → acorex-platform-module-auth-client-set-pin-code.command-C2kCGuQW.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-CrYXfzCf.mjs → acorex-platform-module-auth-client-set-pin-code.component-Dpdgw4KT.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-CrYXfzCf.mjs.map → acorex-platform-module-auth-client-set-pin-code.component-Dpdgw4KT.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs → acorex-platform-module-auth-client-tenant-chooser.component-1Kv-LGZc.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs.map → acorex-platform-module-auth-client-tenant-chooser.component-1Kv-LGZc.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-BnGwRAd-.mjs → acorex-platform-module-auth-client-view-login-history.command-C_T4l61M.mjs} +2 -5
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-BnGwRAd-.mjs.map → acorex-platform-module-auth-client-view-login-history.command-C_T4l61M.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client.mjs +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-module-auth-client.d.ts +32 -2
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-get-user-activity.query-ChzxVhRM.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-BPcaNq3h.mjs +0 -150
- package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-BPcaNq3h.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-profile-page.component-jhc0ZSSB.mjs.map +0 -1
|
@@ -3,10 +3,10 @@ import { AXPFileStorageService, AXPHomePageService, AXPPlatformSettingsLoadState
|
|
|
3
3
|
import { AXPSessionService, AXPUnauthorizedError, AXPUnauthenticatedError, AXPAuthStrategyRegistryService, traceAuthGuard, AXPAuthGuard, AXPSessionStatus } from '@acorex-platform/framework-client/auth';
|
|
4
4
|
import { AXPUserAvatarService, AXPUserAvatarComponent, AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';
|
|
5
5
|
import { AXPFileStorageStatus, coerceUnknownToTrimmedString, AXPPlatformScope, AXPKeyboardShortcutPriority, verifyPassword } from '@acorex-platform/framework-shared/core';
|
|
6
|
-
import { RootConfig } from '@acorex-platform/module-security-management-client/contracts';
|
|
6
|
+
import { RootConfig, AXPSecurityManagementFeatureKeys } from '@acorex-platform/module-security-management-client/contracts';
|
|
7
7
|
import { AXPEntityService, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';
|
|
8
8
|
import * as i0 from '@angular/core';
|
|
9
|
-
import { inject, Injectable, isDevMode, InjectionToken, NgModule, input, output, viewChild, viewChildren, signal, computed, effect, ChangeDetectionStrategy, Component, DestroyRef, ViewEncapsulation, ViewChild, Injector, afterNextRender, ApplicationRef } from '@angular/core';
|
|
9
|
+
import { inject, Injectable, isDevMode, InjectionToken, NgModule, input, output, viewChild, viewChildren, signal, computed, effect, ChangeDetectionStrategy, Component, Input, DestroyRef, ViewEncapsulation, ViewChild, Injector, afterNextRender, ApplicationRef } from '@angular/core';
|
|
10
10
|
import { AXPLayoutThemeService, AXPMenuVerticalMode } from '@acorex-platform/framework-client/themes/shared';
|
|
11
11
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
12
12
|
import * as i1$6 from '@angular/router';
|
|
@@ -267,12 +267,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
267
267
|
//#region ---- User activity helpers ----
|
|
268
268
|
//#region ---- Constants ----
|
|
269
269
|
const AUTH_USER_ACTIVITY_DEFAULT_WEEKS = 53;
|
|
270
|
+
/** Ignore an older sign-in cluster when the gap to the next newer day exceeds this. */
|
|
271
|
+
const AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS = 14;
|
|
272
|
+
/** Week / month / quarter / year heatmap windows, smallest first. */
|
|
273
|
+
const AUTH_USER_ACTIVITY_WEEK_PRESETS = [1, 2, 5, 13, 53];
|
|
270
274
|
const LEVEL_THRESHOLDS = [0, 3, 8, 15, 30];
|
|
275
|
+
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
271
276
|
//#endregion
|
|
272
277
|
//#region ---- Date range ----
|
|
278
|
+
function startOfLocalDay(date) {
|
|
279
|
+
const value = new Date(date);
|
|
280
|
+
value.setHours(0, 0, 0, 0);
|
|
281
|
+
return value;
|
|
282
|
+
}
|
|
283
|
+
function calendarDaysBetween(newer, older) {
|
|
284
|
+
return Math.round((startOfLocalDay(newer).getTime() - startOfLocalDay(older).getTime()) / MS_PER_DAY);
|
|
285
|
+
}
|
|
273
286
|
function resolveDefaultUserActivityDateRange(weeksToShow = AUTH_USER_ACTIVITY_DEFAULT_WEEKS, referenceDate = new Date()) {
|
|
274
|
-
const today =
|
|
275
|
-
today.setHours(0, 0, 0, 0);
|
|
287
|
+
const today = startOfLocalDay(referenceDate);
|
|
276
288
|
const endSunday = new Date(today);
|
|
277
289
|
endSunday.setDate(today.getDate() + (6 - today.getDay()));
|
|
278
290
|
const startDate = new Date(endSunday);
|
|
@@ -280,6 +292,80 @@ function resolveDefaultUserActivityDateRange(weeksToShow = AUTH_USER_ACTIVITY_DE
|
|
|
280
292
|
startDate.setHours(0, 0, 0, 0);
|
|
281
293
|
return { startDate, endDate: endSunday };
|
|
282
294
|
}
|
|
295
|
+
function collectUserSignInDays(sessions, userId, lookbackStart, lookbackEnd) {
|
|
296
|
+
const days = new Map();
|
|
297
|
+
const rangeStart = startOfLocalDay(lookbackStart);
|
|
298
|
+
const rangeEnd = startOfLocalDay(lookbackEnd);
|
|
299
|
+
for (const session of sessions) {
|
|
300
|
+
if (session.userId !== userId || session.lastLoginDate == null) {
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
const day = startOfLocalDay(new Date(session.lastLoginDate));
|
|
304
|
+
if (Number.isNaN(day.getTime()) || day < rangeStart || day > rangeEnd) {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
days.set(day.getTime(), day);
|
|
308
|
+
}
|
|
309
|
+
return [...days.values()].sort((left, right) => right.getTime() - left.getTime());
|
|
310
|
+
}
|
|
311
|
+
function resolveRecentSignInCluster(activityDaysNewestFirst, gapDays) {
|
|
312
|
+
if (activityDaysNewestFirst.length === 0) {
|
|
313
|
+
return [];
|
|
314
|
+
}
|
|
315
|
+
const cluster = [activityDaysNewestFirst[0]];
|
|
316
|
+
for (let index = 1; index < activityDaysNewestFirst.length; index += 1) {
|
|
317
|
+
const newer = activityDaysNewestFirst[index - 1];
|
|
318
|
+
const older = activityDaysNewestFirst[index];
|
|
319
|
+
if (calendarDaysBetween(newer, older) > gapDays) {
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
cluster.push(older);
|
|
323
|
+
}
|
|
324
|
+
return cluster;
|
|
325
|
+
}
|
|
326
|
+
function pickWeeksToCoverCluster(oldestDay, referenceDate) {
|
|
327
|
+
const oldest = startOfLocalDay(oldestDay);
|
|
328
|
+
for (const weeks of AUTH_USER_ACTIVITY_WEEK_PRESETS) {
|
|
329
|
+
const { startDate } = resolveDefaultUserActivityDateRange(weeks, referenceDate);
|
|
330
|
+
if (startDate <= oldest) {
|
|
331
|
+
return weeks;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return AUTH_USER_ACTIVITY_DEFAULT_WEEKS;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Auto heatmap window from recent sign-in days.
|
|
338
|
+
* Walks backward from the latest sign-in and drops an older cluster when the gap
|
|
339
|
+
* exceeds {@link AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS}. Empty users get one week.
|
|
340
|
+
*/
|
|
341
|
+
function resolveSmartUserActivityDateRange(sessions, userId, referenceDate = new Date()) {
|
|
342
|
+
const lookback = resolveDefaultUserActivityDateRange(AUTH_USER_ACTIVITY_DEFAULT_WEEKS, referenceDate);
|
|
343
|
+
const activityDays = collectUserSignInDays(sessions, userId, lookback.startDate, lookback.endDate);
|
|
344
|
+
const cluster = resolveRecentSignInCluster(activityDays, AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS);
|
|
345
|
+
if (cluster.length === 0) {
|
|
346
|
+
return resolveDefaultUserActivityDateRange(1, referenceDate);
|
|
347
|
+
}
|
|
348
|
+
if (cluster.length === 1) {
|
|
349
|
+
return resolveDayDateRange(cluster[0]);
|
|
350
|
+
}
|
|
351
|
+
const oldest = cluster[cluster.length - 1];
|
|
352
|
+
return resolveDefaultUserActivityDateRange(pickWeeksToCoverCluster(oldest, referenceDate), referenceDate);
|
|
353
|
+
}
|
|
354
|
+
function resolveDayDateRange(day) {
|
|
355
|
+
const startDate = startOfLocalDay(day);
|
|
356
|
+
return { startDate, endDate: new Date(startDate) };
|
|
357
|
+
}
|
|
358
|
+
function resolveUserActivityHeatmapLayout(startDate, endDate) {
|
|
359
|
+
const { rangeStart, rangeEnd } = normalizeDateRange(startDate, endDate);
|
|
360
|
+
const spanDays = calendarDaysBetween(rangeEnd, rangeStart) + 1;
|
|
361
|
+
if (spanDays <= 1) {
|
|
362
|
+
return 'hours';
|
|
363
|
+
}
|
|
364
|
+
if (spanDays <= 35) {
|
|
365
|
+
return 'days';
|
|
366
|
+
}
|
|
367
|
+
return 'calendar';
|
|
368
|
+
}
|
|
283
369
|
//#endregion
|
|
284
370
|
//#region ---- Session aggregation ----
|
|
285
371
|
function normalizeDateRange(startDate, endDate) {
|
|
@@ -320,6 +406,33 @@ function aggregateDailySessionCounts(sessions, params) {
|
|
|
320
406
|
}
|
|
321
407
|
return counts;
|
|
322
408
|
}
|
|
409
|
+
/** Counts sign-in events per local hour from device session rows. */
|
|
410
|
+
function aggregateHourlySessionCounts(sessions, params) {
|
|
411
|
+
const { rangeStart, rangeEnd } = normalizeDateRange(params.startDate, params.endDate);
|
|
412
|
+
const counts = Array.from({ length: 24 }, () => 0);
|
|
413
|
+
for (const session of sessions) {
|
|
414
|
+
if (session.userId !== params.userId || session.lastLoginDate == null) {
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
const login = new Date(session.lastLoginDate);
|
|
418
|
+
if (Number.isNaN(login.getTime())) {
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
const day = startOfLocalDay(login);
|
|
422
|
+
if (day < rangeStart || day > rangeEnd) {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
counts[login.getHours()] += 1;
|
|
426
|
+
}
|
|
427
|
+
return counts;
|
|
428
|
+
}
|
|
429
|
+
function buildUserActivityHours(hourlyCounts) {
|
|
430
|
+
return hourlyCounts.map((count, hour) => ({
|
|
431
|
+
hour,
|
|
432
|
+
count,
|
|
433
|
+
level: countToActivityLevel(count),
|
|
434
|
+
}));
|
|
435
|
+
}
|
|
323
436
|
//#endregion
|
|
324
437
|
//#region ---- Week grid ----
|
|
325
438
|
function countToActivityLevel(count) {
|
|
@@ -395,12 +508,16 @@ function computeUserActivityStats(weeks) {
|
|
|
395
508
|
function buildUserActivityDataSourceItem(params, sessions) {
|
|
396
509
|
const dailyCounts = aggregateDailySessionCounts(sessions, params);
|
|
397
510
|
const weeks = buildUserActivityWeeks(params, dailyCounts);
|
|
511
|
+
const layout = resolveUserActivityHeatmapLayout(params.startDate, params.endDate);
|
|
512
|
+
const hours = layout === 'hours' ? buildUserActivityHours(aggregateHourlySessionCounts(sessions, params)) : [];
|
|
398
513
|
return {
|
|
399
514
|
id: `${params.userId}:${toIsoDate(params.startDate)}:${toIsoDate(params.endDate)}`,
|
|
400
515
|
userId: params.userId,
|
|
401
516
|
startDate: toIsoDate(params.startDate),
|
|
402
517
|
endDate: toIsoDate(params.endDate),
|
|
518
|
+
layout,
|
|
403
519
|
weeks,
|
|
520
|
+
hours,
|
|
404
521
|
stats: computeUserActivityStats(weeks),
|
|
405
522
|
};
|
|
406
523
|
}
|
|
@@ -877,17 +994,17 @@ const routes = [
|
|
|
877
994
|
},
|
|
878
995
|
{
|
|
879
996
|
path: '',
|
|
880
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
881
|
-
loadChildren: () => import('./acorex-platform-module-auth-client-login.module-
|
|
997
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-Cu8mQN9B.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
998
|
+
loadChildren: () => import('./acorex-platform-module-auth-client-login.module-uRv9Gwea.mjs').then((c) => c.AXPSignInModule),
|
|
882
999
|
},
|
|
883
1000
|
{
|
|
884
1001
|
path: '',
|
|
885
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
1002
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-Cu8mQN9B.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
886
1003
|
loadChildren: () => import('./acorex-platform-module-auth-client-two-factor.module-BnH72Bob.mjs').then((c) => c.AXPTwoFactorModule),
|
|
887
1004
|
},
|
|
888
1005
|
{
|
|
889
1006
|
path: '',
|
|
890
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
1007
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-Cu8mQN9B.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
891
1008
|
loadChildren: () => import('./acorex-platform-module-auth-client-routes-IX2qmeqU.mjs').then((c) => c),
|
|
892
1009
|
},
|
|
893
1010
|
{
|
|
@@ -901,8 +1018,8 @@ const routes = [
|
|
|
901
1018
|
},
|
|
902
1019
|
{
|
|
903
1020
|
path: '',
|
|
904
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
905
|
-
loadChildren: () => import('./acorex-platform-module-auth-client-register.module-
|
|
1021
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-Cu8mQN9B.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
1022
|
+
loadChildren: () => import('./acorex-platform-module-auth-client-register.module-DCWoPb0u.mjs').then((c) => c.AXPRegisterModule),
|
|
906
1023
|
},
|
|
907
1024
|
],
|
|
908
1025
|
},
|
|
@@ -1104,6 +1221,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1104
1221
|
class AXMAppChooserSlotComponent {
|
|
1105
1222
|
constructor() {
|
|
1106
1223
|
this.sessionService = inject(AXPSessionService);
|
|
1224
|
+
this.themeStore = inject(AXPLayoutThemeService);
|
|
1107
1225
|
this.applications$ = this.sessionService.applications$;
|
|
1108
1226
|
this.appPopover = viewChild('appPopover', /* @ts-ignore */
|
|
1109
1227
|
...(ngDevMode ? [{ debugName: "appPopover" }] : /* istanbul ignore next */ []));
|
|
@@ -1112,11 +1230,11 @@ class AXMAppChooserSlotComponent {
|
|
|
1112
1230
|
this.appPopover()?.close();
|
|
1113
1231
|
}
|
|
1114
1232
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAppChooserSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1115
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "appPopover", first: true, predicate: ["appPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (applications$ | async; as applications) {\n @if (applications.length > 1) {\n <ax-button color=\"
|
|
1233
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMAppChooserSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "appPopover", first: true, predicate: ["appPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (applications$ | async; as applications) {\n @if (applications.length > 1) {\n <ax-button [color]=\"themeStore.headerButtonColor()\" [look]=\"themeStore.headerButtonLook()\" #appChooser>\n <ax-icon class=\"fa-regular fa-grid-2\"> </ax-icon>\n </ax-button>\n <ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #appPopover>\n <div class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\">\n <axp-app-chooser-list [simple]=\"true\" (applicationChosen)=\"closePopover()\"></axp-app-chooser-list>\n </div>\n </ax-popover>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPAppChooserListComponent, selector: "axp-app-chooser-list", inputs: ["simple"], outputs: ["applicationChosen", "loadingChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1116
1234
|
}
|
|
1117
1235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAppChooserSlotComponent, decorators: [{
|
|
1118
1236
|
type: Component,
|
|
1119
|
-
args: [{ changeDetection: ChangeDetectionStrategy.Eager, imports: [CommonModule, AXButtonModule, AXPopoverModule, AXDecoratorModule, AXPAppChooserListComponent], template: "@if (applications$ | async; as applications) {\n @if (applications.length > 1) {\n <ax-button color=\"
|
|
1237
|
+
args: [{ changeDetection: ChangeDetectionStrategy.Eager, imports: [CommonModule, AXButtonModule, AXPopoverModule, AXDecoratorModule, AXPAppChooserListComponent], template: "@if (applications$ | async; as applications) {\n @if (applications.length > 1) {\n <ax-button [color]=\"themeStore.headerButtonColor()\" [look]=\"themeStore.headerButtonLook()\" #appChooser>\n <ax-icon class=\"fa-regular fa-grid-2\"> </ax-icon>\n </ax-button>\n <ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" #appPopover>\n <div class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\">\n <axp-app-chooser-list [simple]=\"true\" (applicationChosen)=\"closePopover()\"></axp-app-chooser-list>\n </div>\n </ax-popover>\n }\n}\n" }]
|
|
1120
1238
|
}], propDecorators: { appPopover: [{ type: i0.ViewChild, args: ['appPopover', { isSignal: true }] }] } });
|
|
1121
1239
|
|
|
1122
1240
|
class AXPTenantChooserListComponent {
|
|
@@ -1318,6 +1436,7 @@ class AXPTenantChooserDropdownComponent {
|
|
|
1318
1436
|
constructor() {
|
|
1319
1437
|
//#region ----- Services & Dependencies -----
|
|
1320
1438
|
this.sessionService = inject(AXPSessionService);
|
|
1439
|
+
this.router = inject(Router);
|
|
1321
1440
|
//#endregion
|
|
1322
1441
|
//#region ----- State Signals -----
|
|
1323
1442
|
this.tenants$ = this.sessionService.tenants$;
|
|
@@ -1326,6 +1445,13 @@ class AXPTenantChooserDropdownComponent {
|
|
|
1326
1445
|
...(ngDevMode ? [{ debugName: "tenantsLoading" }] : /* istanbul ignore next */ []));
|
|
1327
1446
|
this.tenantPopover = viewChild('tenantPopover', /* @ts-ignore */
|
|
1328
1447
|
...(ngDevMode ? [{ debugName: "tenantPopover" }] : /* istanbul ignore next */ []));
|
|
1448
|
+
//#endregion
|
|
1449
|
+
//#region ----- Inputs -----
|
|
1450
|
+
/**
|
|
1451
|
+
* When true, renders a plain inline tenant text (no popover).
|
|
1452
|
+
* When multiple tenants are available, the text is clickable.
|
|
1453
|
+
*/
|
|
1454
|
+
this.inline = false;
|
|
1329
1455
|
}
|
|
1330
1456
|
//#endregion
|
|
1331
1457
|
//#region ----- Lifecycle -----
|
|
@@ -1339,8 +1465,12 @@ class AXPTenantChooserDropdownComponent {
|
|
|
1339
1465
|
closePopover() {
|
|
1340
1466
|
this.tenantPopover()?.close();
|
|
1341
1467
|
}
|
|
1468
|
+
openTenantChooser() {
|
|
1469
|
+
// Route registered in `AXPAccountModule` as `/auth/account/tenant-chooser`.
|
|
1470
|
+
void this.router.navigate(['/auth/account/tenant-chooser']);
|
|
1471
|
+
}
|
|
1342
1472
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1343
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", viewQueries: [{ propertyName: "tenantPopover", first: true, predicate: ["tenantPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tenantsLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"h-5 w-32 max-w-full\"></ax-skeleton>\n} @else if (tenants$ | async; as tenants) {\n @if (tenants.length > 1) {\n <ax-button\n
|
|
1473
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserDropdownComponent, isStandalone: true, selector: "axp-tenant-chooser-dropdown", inputs: { inline: "inline" }, viewQueries: [{ propertyName: "tenantPopover", first: true, predicate: ["tenantPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tenantsLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"h-5 w-32 max-w-full\"></ax-skeleton>\n} @else if (tenants$ | async; as tenants) {\n @if (inline) {\n @if (tenants.length > 1) {\n <!-- ----- Inline dropdown for multi-tenant ----- -->\n <span\n class=\"text-xs font-medium px-3 cursor-pointer inline-flex items-center gap-1\"\n #inlineTenantTrigger\n >\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n <i class=\"fa-solid fa-caret-down text-2xs opacity-60\"></i>\n </span>\n <ax-popover\n [target]=\"inlineTenantTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div\n class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\"\n >\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <!-- ----- Plain text for single tenant ----- -->\n <span class=\"text-xs font-medium px-3\">\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n </span>\n }\n } @else {\n @if (tenants.length > 1) {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n class=\"ax-sm\"\n look=\"blank\"\n #tenantChooser\n >\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n <ax-popover\n [target]=\"tenantChooser\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div\n class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\"\n >\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n class=\"ax-sm\"\n look=\"blank\"\n ></ax-button>\n }\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXPTenantChooserListComponent, selector: "axp-tenant-chooser-list", inputs: ["simple"], outputs: ["tenantChosen", "loadingChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1344
1474
|
}
|
|
1345
1475
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserDropdownComponent, decorators: [{
|
|
1346
1476
|
type: Component,
|
|
@@ -1352,8 +1482,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1352
1482
|
AXDecoratorModule,
|
|
1353
1483
|
AXSkeletonModule,
|
|
1354
1484
|
AXPTenantChooserListComponent,
|
|
1355
|
-
], template: "@if (tenantsLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"h-5 w-32 max-w-full\"></ax-skeleton>\n} @else if (tenants$ | async; as tenants) {\n @if (tenants.length > 1) {\n <ax-button\n
|
|
1356
|
-
}], propDecorators: { tenantPopover: [{ type: i0.ViewChild, args: ['tenantPopover', { isSignal: true }] }]
|
|
1485
|
+
], template: "@if (tenantsLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"h-5 w-32 max-w-full\"></ax-skeleton>\n} @else if (tenants$ | async; as tenants) {\n @if (inline) {\n @if (tenants.length > 1) {\n <!-- ----- Inline dropdown for multi-tenant ----- -->\n <span\n class=\"text-xs font-medium px-3 cursor-pointer inline-flex items-center gap-1\"\n #inlineTenantTrigger\n >\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n <i class=\"fa-solid fa-caret-down text-2xs opacity-60\"></i>\n </span>\n <ax-popover\n [target]=\"inlineTenantTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div\n class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\"\n >\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <!-- ----- Plain text for single tenant ----- -->\n <span class=\"text-xs font-medium px-3\">\n {{ ((tenant$ | async)?.title | translate | async) ?? '' }}\n </span>\n }\n } @else {\n @if (tenants.length > 1) {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n class=\"ax-sm\"\n look=\"blank\"\n #tenantChooser\n >\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n <ax-popover\n [target]=\"tenantChooser\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n #tenantPopover\n >\n <div\n class=\"bg-lightest border overflow-hidden rounded-md shadow-md w-full min-w-64 p-1\"\n >\n <axp-tenant-chooser-list\n [simple]=\"true\"\n (tenantChosen)=\"closePopover()\"\n ></axp-tenant-chooser-list>\n </div>\n </ax-popover>\n } @else {\n <ax-button\n [text]=\"((tenant$ | async)?.title | translate | async) ?? ''\"\n class=\"ax-sm\"\n look=\"blank\"\n ></ax-button>\n }\n }\n}\n" }]
|
|
1486
|
+
}], propDecorators: { tenantPopover: [{ type: i0.ViewChild, args: ['tenantPopover', { isSignal: true }] }], inline: [{
|
|
1487
|
+
type: Input
|
|
1488
|
+
}] } });
|
|
1357
1489
|
|
|
1358
1490
|
//#region ---- Profile slot menu hook ----
|
|
1359
1491
|
const PROFILE_SLOT_MENU_ITEMS_HOOK = 'profile-slot.menu-items';
|
|
@@ -1486,7 +1618,7 @@ class AXMAuthProfileSlotComponent {
|
|
|
1486
1618
|
// AXKBDItemComponent,
|
|
1487
1619
|
AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "component", type:
|
|
1488
1620
|
//
|
|
1489
|
-
AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1621
|
+
AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown", inputs: ["inline"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1490
1622
|
}
|
|
1491
1623
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAuthProfileSlotComponent, decorators: [{
|
|
1492
1624
|
type: Component,
|
|
@@ -1521,6 +1653,10 @@ class AXMUserProfileCardSlotComponent {
|
|
|
1521
1653
|
return this.themeStore.effectiveMenuVerticalMode() === AXPMenuVerticalMode.Compact;
|
|
1522
1654
|
}, /* @ts-ignore */
|
|
1523
1655
|
...(ngDevMode ? [{ debugName: "isCompactMode" }] : /* istanbul ignore next */ []));
|
|
1656
|
+
this.isMenuDark = computed(() => this.themeStore.menuDarkEnabled() ||
|
|
1657
|
+
(this.themeStore.menuAppearance() === 'brand-light' &&
|
|
1658
|
+
this.themeStore.isDarkMode()), /* @ts-ignore */
|
|
1659
|
+
...(ngDevMode ? [{ debugName: "isMenuDark" }] : /* istanbul ignore next */ []));
|
|
1524
1660
|
this.hasPicture = signal(true, /* @ts-ignore */
|
|
1525
1661
|
...(ngDevMode ? [{ debugName: "hasPicture" }] : /* istanbul ignore next */ []));
|
|
1526
1662
|
this.avatarText = signal('', /* @ts-ignore */
|
|
@@ -1532,8 +1668,8 @@ class AXMUserProfileCardSlotComponent {
|
|
|
1532
1668
|
this.getAvatarText = () => {
|
|
1533
1669
|
this.user$.pipe(first()).subscribe((user) => {
|
|
1534
1670
|
const names = user?.title.split(' ');
|
|
1535
|
-
if (names?.length && names?.
|
|
1536
|
-
this.avatarText.set(
|
|
1671
|
+
if (names?.length && names[0]?.[0]) {
|
|
1672
|
+
this.avatarText.set(names[0][0].toUpperCase());
|
|
1537
1673
|
}
|
|
1538
1674
|
else
|
|
1539
1675
|
return this.avatarText.set('AC');
|
|
@@ -1578,11 +1714,11 @@ class AXMUserProfileCardSlotComponent {
|
|
|
1578
1714
|
}
|
|
1579
1715
|
}
|
|
1580
1716
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMUserProfileCardSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1581
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMUserProfileCardSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "profilePopover", first: true, predicate: ["profilePopover"], descendants: true }], ngImport: i0, template: "@if((isAuthenticated$ | async)) {\n<div
|
|
1717
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMUserProfileCardSlotComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "profilePopover", first: true, predicate: ["profilePopover"], descendants: true }], ngImport: i0, template: "@if((isAuthenticated$ | async)) {\n<div\n class=\"p-3 flex items-center gap-1 border-b\"\n [class.border-white/7]=\"isMenuDark()\"\n [class.border-black/7]=\"!isMenuDark()\"\n [class.justify-center]=\"isCompactMode()\"\n>\n <div #avatar>\n <axp-user-avatar\n [size]=\"48\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n </div>\n @if (!isCompactMode()) {\n <div class=\"flex flex-col\">\n <ax-title class=\"text-sm font-medium px-3\">{{ (user$ | async)?.title }}</ax-title>\n <axp-tenant-chooser-dropdown [inline]=\"true\" />\n </div>\n }\n</div>\n}\n", dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
|
|
1582
1718
|
//
|
|
1583
1719
|
AXImageModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type:
|
|
1584
1720
|
//
|
|
1585
|
-
AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1721
|
+
AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown", inputs: ["inline"] }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1586
1722
|
}
|
|
1587
1723
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMUserProfileCardSlotComponent, decorators: [{
|
|
1588
1724
|
type: Component,
|
|
@@ -1600,7 +1736,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1600
1736
|
AXPTenantChooserDropdownComponent,
|
|
1601
1737
|
AsyncPipe,
|
|
1602
1738
|
AXPUserAvatarComponent,
|
|
1603
|
-
], template: "@if((isAuthenticated$ | async)) {\n<div
|
|
1739
|
+
], template: "@if((isAuthenticated$ | async)) {\n<div\n class=\"p-3 flex items-center gap-1 border-b\"\n [class.border-white/7]=\"isMenuDark()\"\n [class.border-black/7]=\"!isMenuDark()\"\n [class.justify-center]=\"isCompactMode()\"\n>\n <div #avatar>\n <axp-user-avatar\n [size]=\"48\"\n [userId]=\"$safeNavigationMigration((user$ | async)?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n </div>\n @if (!isCompactMode()) {\n <div class=\"flex flex-col\">\n <ax-title class=\"text-sm font-medium px-3\">{{ (user$ | async)?.title }}</ax-title>\n <axp-tenant-chooser-dropdown [inline]=\"true\" />\n </div>\n }\n</div>\n}\n" }]
|
|
1604
1740
|
}], ctorParameters: () => [], propDecorators: { profilePopover: [{
|
|
1605
1741
|
type: ViewChild,
|
|
1606
1742
|
args: ['profilePopover']
|
|
@@ -1778,12 +1914,12 @@ function routesFacory() {
|
|
|
1778
1914
|
routes = [
|
|
1779
1915
|
{
|
|
1780
1916
|
path: 'tenant-chooser',
|
|
1781
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-tenant-chooser.component-
|
|
1917
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-tenant-chooser.component-1Kv-LGZc.mjs').then((c) => c.AXPAuthTenantChooserComponent),
|
|
1782
1918
|
canActivate: [AXPAuthGuard, canActivateTenantChooser],
|
|
1783
1919
|
},
|
|
1784
1920
|
{
|
|
1785
1921
|
path: 'app-chooser',
|
|
1786
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-app-chooser.component-
|
|
1922
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-app-chooser.component-BfOgjNxw.mjs').then((c) => c.AXPAuthAppChooserComponent),
|
|
1787
1923
|
canActivate: [AXPAuthGuard, canActivateAppChooser],
|
|
1788
1924
|
},
|
|
1789
1925
|
];
|
|
@@ -2171,7 +2307,7 @@ class AXPIdleLockService {
|
|
|
2171
2307
|
this.overlayOpening = true;
|
|
2172
2308
|
this.locked.set(true);
|
|
2173
2309
|
try {
|
|
2174
|
-
const { AXMSessionLockOverlayComponent: overlayComponent } = await import('./acorex-platform-module-auth-client-session-lock-overlay.component-
|
|
2310
|
+
const { AXMSessionLockOverlayComponent: overlayComponent } = await import('./acorex-platform-module-auth-client-session-lock-overlay.component-3HJEmCYI.mjs');
|
|
2175
2311
|
const panelClasses = ['axm-session-lock-overlay-shell'];
|
|
2176
2312
|
if (this.platform.isDark()) {
|
|
2177
2313
|
panelClasses.push('ax-dark');
|
|
@@ -2485,6 +2621,7 @@ const CoreProfileSectionsHookProvider = {
|
|
|
2485
2621
|
id: 'delete-account',
|
|
2486
2622
|
groupId: 'account',
|
|
2487
2623
|
priority: 100,
|
|
2624
|
+
feature: AXPSecurityManagementFeatureKeys.DeleteAccount,
|
|
2488
2625
|
content: {
|
|
2489
2626
|
mode: 'component',
|
|
2490
2627
|
componentKey: PROFILE_DELETE_ACCOUNT_DANGER_ZONE_COMPONENT_KEY,
|
|
@@ -2994,7 +3131,7 @@ const userAvatarCacheRefreshMiddleware = {
|
|
|
2994
3131
|
//#endregion
|
|
2995
3132
|
|
|
2996
3133
|
function profileRoutesFactory() {
|
|
2997
|
-
const loadProfilePage = () => import('./acorex-platform-module-auth-client-profile-page.component-
|
|
3134
|
+
const loadProfilePage = () => import('./acorex-platform-module-auth-client-profile-page.component-w2SYmCyc.mjs').then((c) => c.AXMUserProfilePageComponent);
|
|
2998
3135
|
return [
|
|
2999
3136
|
{
|
|
3000
3137
|
path: ':app/profile',
|
|
@@ -3110,11 +3247,11 @@ class AXMAuthModule {
|
|
|
3110
3247
|
AXMAuthErrorHandler,
|
|
3111
3248
|
provideLazyProvider(AXP_MENU_PROVIDER, () => import('./acorex-platform-module-auth-client-menu.provider-Bz-kRip4.mjs').then(m => m.AXMSecurityManagementModuleMenuProvider)),
|
|
3112
3249
|
provideLazyProvider(AXP_SETTING_DEFINITION_PROVIDER, () => import('./acorex-platform-module-auth-client-settings.provider-Yaoz8yp3.mjs').then(m => m.AXMSettingProvider)),
|
|
3113
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-
|
|
3250
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-Bz1mdVCM.mjs').then((module) => module.AXMProfilePageComponentProvider)),
|
|
3114
3251
|
provideQuerySetups([
|
|
3115
3252
|
{
|
|
3116
3253
|
key: 'Auth:GetUserActivity',
|
|
3117
|
-
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-
|
|
3254
|
+
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-D9fyLuBy.mjs').then((c) => c.AXMGetUserActivityQuery),
|
|
3118
3255
|
},
|
|
3119
3256
|
]),
|
|
3120
3257
|
{
|
|
@@ -3138,15 +3275,15 @@ class AXMAuthModule {
|
|
|
3138
3275
|
},
|
|
3139
3276
|
{
|
|
3140
3277
|
key: AXMAuthCommandKeys.Session.OpenSessions,
|
|
3141
|
-
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-
|
|
3278
|
+
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-BlPxfa3v.mjs').then((c) => c.AXPOpenSessionsCommand),
|
|
3142
3279
|
},
|
|
3143
3280
|
{
|
|
3144
3281
|
key: AXMAuthCommandKeys.Session.LockScreen,
|
|
3145
|
-
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-
|
|
3282
|
+
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-DUZ255VK.mjs').then((c) => c.AXPLockScreenCommand),
|
|
3146
3283
|
},
|
|
3147
3284
|
{
|
|
3148
3285
|
key: AXMAuthCommandKeys.Profile.ChangePhoto,
|
|
3149
|
-
command: () => import('./acorex-platform-module-auth-client-change-photo.command-
|
|
3286
|
+
command: () => import('./acorex-platform-module-auth-client-change-photo.command-DfHUPj7p.mjs').then((c) => c.AXPChangePhotoCommand),
|
|
3150
3287
|
},
|
|
3151
3288
|
{
|
|
3152
3289
|
key: AXMAuthCommandKeys.Profile.EditAccountInfo,
|
|
@@ -3154,19 +3291,19 @@ class AXMAuthModule {
|
|
|
3154
3291
|
},
|
|
3155
3292
|
{
|
|
3156
3293
|
key: AXMAuthCommandKeys.Security.ChangePassword,
|
|
3157
|
-
command: () => import('./acorex-platform-module-auth-client-change-password.command-
|
|
3294
|
+
command: () => import('./acorex-platform-module-auth-client-change-password.command-BcBbN5hX.mjs').then((c) => c.AXPChangePasswordCommand),
|
|
3158
3295
|
},
|
|
3159
3296
|
{
|
|
3160
3297
|
key: AXMAuthCommandKeys.Security.SetPinCode,
|
|
3161
|
-
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-
|
|
3298
|
+
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-C2kCGuQW.mjs').then((c) => c.AXPSetPinCodeCommand),
|
|
3162
3299
|
},
|
|
3163
3300
|
{
|
|
3164
3301
|
key: AXMAuthCommandKeys.Security.RemovePinCode,
|
|
3165
|
-
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-
|
|
3302
|
+
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-DJeSHCLL.mjs').then((c) => c.AXPRemovePinCodeCommand),
|
|
3166
3303
|
},
|
|
3167
3304
|
{
|
|
3168
3305
|
key: AXMAuthCommandKeys.Security.ViewLoginHistory,
|
|
3169
|
-
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-
|
|
3306
|
+
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-C_T4l61M.mjs').then((c) => c.AXPViewLoginHistoryCommand),
|
|
3170
3307
|
},
|
|
3171
3308
|
{
|
|
3172
3309
|
key: AXMAuthCommandKeys.Security.EditSignature,
|
|
@@ -3319,11 +3456,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3319
3456
|
AXMAuthErrorHandler,
|
|
3320
3457
|
provideLazyProvider(AXP_MENU_PROVIDER, () => import('./acorex-platform-module-auth-client-menu.provider-Bz-kRip4.mjs').then(m => m.AXMSecurityManagementModuleMenuProvider)),
|
|
3321
3458
|
provideLazyProvider(AXP_SETTING_DEFINITION_PROVIDER, () => import('./acorex-platform-module-auth-client-settings.provider-Yaoz8yp3.mjs').then(m => m.AXMSettingProvider)),
|
|
3322
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-
|
|
3459
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-Bz1mdVCM.mjs').then((module) => module.AXMProfilePageComponentProvider)),
|
|
3323
3460
|
provideQuerySetups([
|
|
3324
3461
|
{
|
|
3325
3462
|
key: 'Auth:GetUserActivity',
|
|
3326
|
-
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-
|
|
3463
|
+
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-D9fyLuBy.mjs').then((c) => c.AXMGetUserActivityQuery),
|
|
3327
3464
|
},
|
|
3328
3465
|
]),
|
|
3329
3466
|
{
|
|
@@ -3347,15 +3484,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3347
3484
|
},
|
|
3348
3485
|
{
|
|
3349
3486
|
key: AXMAuthCommandKeys.Session.OpenSessions,
|
|
3350
|
-
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-
|
|
3487
|
+
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-BlPxfa3v.mjs').then((c) => c.AXPOpenSessionsCommand),
|
|
3351
3488
|
},
|
|
3352
3489
|
{
|
|
3353
3490
|
key: AXMAuthCommandKeys.Session.LockScreen,
|
|
3354
|
-
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-
|
|
3491
|
+
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-DUZ255VK.mjs').then((c) => c.AXPLockScreenCommand),
|
|
3355
3492
|
},
|
|
3356
3493
|
{
|
|
3357
3494
|
key: AXMAuthCommandKeys.Profile.ChangePhoto,
|
|
3358
|
-
command: () => import('./acorex-platform-module-auth-client-change-photo.command-
|
|
3495
|
+
command: () => import('./acorex-platform-module-auth-client-change-photo.command-DfHUPj7p.mjs').then((c) => c.AXPChangePhotoCommand),
|
|
3359
3496
|
},
|
|
3360
3497
|
{
|
|
3361
3498
|
key: AXMAuthCommandKeys.Profile.EditAccountInfo,
|
|
@@ -3363,19 +3500,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3363
3500
|
},
|
|
3364
3501
|
{
|
|
3365
3502
|
key: AXMAuthCommandKeys.Security.ChangePassword,
|
|
3366
|
-
command: () => import('./acorex-platform-module-auth-client-change-password.command-
|
|
3503
|
+
command: () => import('./acorex-platform-module-auth-client-change-password.command-BcBbN5hX.mjs').then((c) => c.AXPChangePasswordCommand),
|
|
3367
3504
|
},
|
|
3368
3505
|
{
|
|
3369
3506
|
key: AXMAuthCommandKeys.Security.SetPinCode,
|
|
3370
|
-
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-
|
|
3507
|
+
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-C2kCGuQW.mjs').then((c) => c.AXPSetPinCodeCommand),
|
|
3371
3508
|
},
|
|
3372
3509
|
{
|
|
3373
3510
|
key: AXMAuthCommandKeys.Security.RemovePinCode,
|
|
3374
|
-
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-
|
|
3511
|
+
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-DJeSHCLL.mjs').then((c) => c.AXPRemovePinCodeCommand),
|
|
3375
3512
|
},
|
|
3376
3513
|
{
|
|
3377
3514
|
key: AXMAuthCommandKeys.Security.ViewLoginHistory,
|
|
3378
|
-
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-
|
|
3515
|
+
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-C_T4l61M.mjs').then((c) => c.AXPViewLoginHistoryCommand),
|
|
3379
3516
|
},
|
|
3380
3517
|
{
|
|
3381
3518
|
key: AXMAuthCommandKeys.Security.EditSignature,
|
|
@@ -3498,5 +3635,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3498
3635
|
* Generated bundle index. Do not edit.
|
|
3499
3636
|
*/
|
|
3500
3637
|
|
|
3501
|
-
export { AXMUserDeviceSessionsService as A,
|
|
3502
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
3638
|
+
export { resolveDayDateRange as $, AXMUserDeviceSessionsService as A, AXPLoginExternalProvidersComponent as B, CHANGE_PASSWORD_SECTION_ID as C, AXMAuthenticationTypes as D, AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT as E, AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS as F, AUTH_USER_ACTIVITY_DEFAULT_WEEKS as G, AUTH_USER_ACTIVITY_WEEK_PRESETS as H, AXMAuthErrorHandler as I, AXMAuthModule as J, AXMDefaultAuthConfigs as K, AXM_AUTH_CONFIG_TOKEN as L, aggregateDailySessionCounts as M, aggregateHourlySessionCounts as N, buildUserActivityHours as O, PROFILE_PAGE_GROUPS_HOOK as P, buildUserActivityWeeks as Q, canActivateLogin as R, computeUserActivityStats as S, configAuthModule as T, countToActivityLevel as U, extractUserActivityEndDate as V, extractUserActivityStartDate as W, extractUserActivityUserId as X, isUserProfileGroupComponent as Y, isUserProfileSectionsGroupRequested as Z, parseAuthCredentialType as _, PROFILE_PAGE_SECTIONS_HOOK as a, resolveUserActivityHeatmapLayout as a0, PROFILE_PAGE_HEADER_META_HOOK as b, resolveUserProfileSectionContent as c, PROFILE_SECTION_INSIGHTS_PATCH_METADATA_KEY as d, PROFILE_ACTIVITY_CHART_COMPONENT_KEY as e, PROFILE_DELETE_ACCOUNT_DANGER_ZONE_COMPONENT_KEY as f, resolveDefaultUserActivityDateRange as g, resolveSmartUserActivityDateRange as h, buildUserActivityDataSourceItem as i, AXPIdleLockService as j, AXPUserAvatarSyncService as k, AXPAuthPasswordComplexityService as l, AXPAuthPasswordChangeTrackingService as m, getPasswordComplexityHintKey as n, getPasswordComplexityValidationMessageKey as o, validatePasswordAgainstComplexity as p, buildPasswordLastChangedInsights as q, resolveDefaultUserProfileSectionAction as r, AXPLoginHistoryService as s, AXMAuthPlatformSettingsService as t, AXM_LOGIN_GUARD_TOKEN as u, visibleUserProfileSectionActions as v, AXPTenantChooserListComponent as w, AXPTenantChooserDropdownComponent as x, AXPAppChooserListComponent as y, formatCompactActivityCount as z };
|
|
3639
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-acorex-platform-module-auth-client-CPmffSrQ.mjs.map
|