@acorex-platform/module-auth-client 0.0.30 → 0.0.33
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-CTf7qxkQ.mjs} +199 -60
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-CTf7qxkQ.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-TPCkYJej.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-TPCkYJej.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BiAjSn5C.mjs → acorex-platform-module-auth-client-change-password.command-DHwnPkUO.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-BiAjSn5C.mjs.map → acorex-platform-module-auth-client-change-password.command-DHwnPkUO.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-BrQVX8wA.mjs → acorex-platform-module-auth-client-change-photo.command-BZK_W29M.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-BrQVX8wA.mjs.map → acorex-platform-module-auth-client-change-photo.command-BZK_W29M.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-DBdELID4.mjs} +16 -6
- package/fesm2022/acorex-platform-module-auth-client-get-user-activity.query-DBdELID4.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-tuEnmBqT.mjs → acorex-platform-module-auth-client-lock-screen.command-BADSRZxj.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-tuEnmBqT.mjs.map → acorex-platform-module-auth-client-lock-screen.command-BADSRZxj.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-login.module-CXYUlOPx.mjs → acorex-platform-module-auth-client-login.module-DushGqH6.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-login.module-CXYUlOPx.mjs.map → acorex-platform-module-auth-client-login.module-DushGqH6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-WlPLf7po.mjs → acorex-platform-module-auth-client-master.layout-BLUWyFTY.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-WlPLf7po.mjs.map → acorex-platform-module-auth-client-master.layout-BLUWyFTY.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-BHAf7500.mjs} +13 -23
- package/fesm2022/acorex-platform-module-auth-client-open-sessions.command-BHAf7500.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-password.component-DPPz48en.mjs → acorex-platform-module-auth-client-password.component-D5QDAaKY.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-password.component-DPPz48en.mjs.map → acorex-platform-module-auth-client-password.component-D5QDAaKY.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-o7Eq3zuR.mjs +229 -0
- package/fesm2022/acorex-platform-module-auth-client-profile-activity-chart.component-o7Eq3zuR.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-CfQySdD8.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-CfQySdD8.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-jhc0ZSSB.mjs → acorex-platform-module-auth-client-profile-page.component-CPHQXCpS.mjs} +7 -3
- package/fesm2022/acorex-platform-module-auth-client-profile-page.component-CPHQXCpS.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-BMHOG5m4.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-BMHOG5m4.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register.module-ht9ZxSLU.mjs → acorex-platform-module-auth-client-register.module-CFIHZOYj.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-register.module-ht9ZxSLU.mjs.map → acorex-platform-module-auth-client-register.module-CFIHZOYj.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-CdlJF48g.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-CdlJF48g.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-CcGFA6Op.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-CcGFA6Op.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-BSZhRCN7.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-BSZhRCN7.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-Bm32dRFz.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-Bm32dRFz.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs → acorex-platform-module-auth-client-tenant-chooser.component-DKTvZ1-I.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs.map → acorex-platform-module-auth-client-tenant-chooser.component-DKTvZ1-I.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-CWmD9wNM.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-CWmD9wNM.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-open-sessions.command-DcMF_kGc.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';
|
|
@@ -29,21 +29,20 @@ import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
|
29
29
|
import * as i2$1 from '@acorex/components/popover';
|
|
30
30
|
import { AXPopoverModule } from '@acorex/components/popover';
|
|
31
31
|
import { RootConfig as RootConfig$1 } from '@acorex-platform/module-application-management-client/contracts';
|
|
32
|
-
import * as
|
|
32
|
+
import * as i4 from '@acorex/cdk/list-navigation';
|
|
33
33
|
import { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';
|
|
34
|
-
import
|
|
35
|
-
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
|
36
|
-
import * as i4 from '@acorex/components/select-box';
|
|
37
|
-
import { AXSelectBoxModule } from '@acorex/components/select-box';
|
|
34
|
+
import { AXLookupComponent } from '@acorex/components/lookup';
|
|
38
35
|
import * as i2 from '@acorex/components/loading';
|
|
39
36
|
import { AXLoadingModule } from '@acorex/components/loading';
|
|
40
37
|
import * as i1$2 from '@acorex/components/skeleton';
|
|
41
38
|
import { AXSkeletonModule } from '@acorex/components/skeleton';
|
|
42
|
-
import * as i5
|
|
39
|
+
import * as i5 from '@acorex/core/translation';
|
|
43
40
|
import { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
|
|
44
41
|
import { AXAvatarModule } from '@acorex/components/avatar';
|
|
45
42
|
import { AXImageModule } from '@acorex/components/image';
|
|
46
43
|
import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
44
|
+
import * as i6 from '@acorex/components/search-box';
|
|
45
|
+
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
|
47
46
|
import * as i1$3 from '@angular/forms';
|
|
48
47
|
import { FormsModule } from '@angular/forms';
|
|
49
48
|
import { AXToastService } from '@acorex/components/toast';
|
|
@@ -267,12 +266,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
267
266
|
//#region ---- User activity helpers ----
|
|
268
267
|
//#region ---- Constants ----
|
|
269
268
|
const AUTH_USER_ACTIVITY_DEFAULT_WEEKS = 53;
|
|
269
|
+
/** Ignore an older sign-in cluster when the gap to the next newer day exceeds this. */
|
|
270
|
+
const AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS = 14;
|
|
271
|
+
/** Week / month / quarter / year heatmap windows, smallest first. */
|
|
272
|
+
const AUTH_USER_ACTIVITY_WEEK_PRESETS = [1, 2, 5, 13, 53];
|
|
270
273
|
const LEVEL_THRESHOLDS = [0, 3, 8, 15, 30];
|
|
274
|
+
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
271
275
|
//#endregion
|
|
272
276
|
//#region ---- Date range ----
|
|
277
|
+
function startOfLocalDay(date) {
|
|
278
|
+
const value = new Date(date);
|
|
279
|
+
value.setHours(0, 0, 0, 0);
|
|
280
|
+
return value;
|
|
281
|
+
}
|
|
282
|
+
function calendarDaysBetween(newer, older) {
|
|
283
|
+
return Math.round((startOfLocalDay(newer).getTime() - startOfLocalDay(older).getTime()) / MS_PER_DAY);
|
|
284
|
+
}
|
|
273
285
|
function resolveDefaultUserActivityDateRange(weeksToShow = AUTH_USER_ACTIVITY_DEFAULT_WEEKS, referenceDate = new Date()) {
|
|
274
|
-
const today =
|
|
275
|
-
today.setHours(0, 0, 0, 0);
|
|
286
|
+
const today = startOfLocalDay(referenceDate);
|
|
276
287
|
const endSunday = new Date(today);
|
|
277
288
|
endSunday.setDate(today.getDate() + (6 - today.getDay()));
|
|
278
289
|
const startDate = new Date(endSunday);
|
|
@@ -280,6 +291,80 @@ function resolveDefaultUserActivityDateRange(weeksToShow = AUTH_USER_ACTIVITY_DE
|
|
|
280
291
|
startDate.setHours(0, 0, 0, 0);
|
|
281
292
|
return { startDate, endDate: endSunday };
|
|
282
293
|
}
|
|
294
|
+
function collectUserSignInDays(sessions, userId, lookbackStart, lookbackEnd) {
|
|
295
|
+
const days = new Map();
|
|
296
|
+
const rangeStart = startOfLocalDay(lookbackStart);
|
|
297
|
+
const rangeEnd = startOfLocalDay(lookbackEnd);
|
|
298
|
+
for (const session of sessions) {
|
|
299
|
+
if (session.userId !== userId || session.lastLoginDate == null) {
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
const day = startOfLocalDay(new Date(session.lastLoginDate));
|
|
303
|
+
if (Number.isNaN(day.getTime()) || day < rangeStart || day > rangeEnd) {
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
days.set(day.getTime(), day);
|
|
307
|
+
}
|
|
308
|
+
return [...days.values()].sort((left, right) => right.getTime() - left.getTime());
|
|
309
|
+
}
|
|
310
|
+
function resolveRecentSignInCluster(activityDaysNewestFirst, gapDays) {
|
|
311
|
+
if (activityDaysNewestFirst.length === 0) {
|
|
312
|
+
return [];
|
|
313
|
+
}
|
|
314
|
+
const cluster = [activityDaysNewestFirst[0]];
|
|
315
|
+
for (let index = 1; index < activityDaysNewestFirst.length; index += 1) {
|
|
316
|
+
const newer = activityDaysNewestFirst[index - 1];
|
|
317
|
+
const older = activityDaysNewestFirst[index];
|
|
318
|
+
if (calendarDaysBetween(newer, older) > gapDays) {
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
cluster.push(older);
|
|
322
|
+
}
|
|
323
|
+
return cluster;
|
|
324
|
+
}
|
|
325
|
+
function pickWeeksToCoverCluster(oldestDay, referenceDate) {
|
|
326
|
+
const oldest = startOfLocalDay(oldestDay);
|
|
327
|
+
for (const weeks of AUTH_USER_ACTIVITY_WEEK_PRESETS) {
|
|
328
|
+
const { startDate } = resolveDefaultUserActivityDateRange(weeks, referenceDate);
|
|
329
|
+
if (startDate <= oldest) {
|
|
330
|
+
return weeks;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return AUTH_USER_ACTIVITY_DEFAULT_WEEKS;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Auto heatmap window from recent sign-in days.
|
|
337
|
+
* Walks backward from the latest sign-in and drops an older cluster when the gap
|
|
338
|
+
* exceeds {@link AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS}. Empty users get one week.
|
|
339
|
+
*/
|
|
340
|
+
function resolveSmartUserActivityDateRange(sessions, userId, referenceDate = new Date()) {
|
|
341
|
+
const lookback = resolveDefaultUserActivityDateRange(AUTH_USER_ACTIVITY_DEFAULT_WEEKS, referenceDate);
|
|
342
|
+
const activityDays = collectUserSignInDays(sessions, userId, lookback.startDate, lookback.endDate);
|
|
343
|
+
const cluster = resolveRecentSignInCluster(activityDays, AUTH_USER_ACTIVITY_CLUSTER_GAP_DAYS);
|
|
344
|
+
if (cluster.length === 0) {
|
|
345
|
+
return resolveDefaultUserActivityDateRange(1, referenceDate);
|
|
346
|
+
}
|
|
347
|
+
if (cluster.length === 1) {
|
|
348
|
+
return resolveDayDateRange(cluster[0]);
|
|
349
|
+
}
|
|
350
|
+
const oldest = cluster[cluster.length - 1];
|
|
351
|
+
return resolveDefaultUserActivityDateRange(pickWeeksToCoverCluster(oldest, referenceDate), referenceDate);
|
|
352
|
+
}
|
|
353
|
+
function resolveDayDateRange(day) {
|
|
354
|
+
const startDate = startOfLocalDay(day);
|
|
355
|
+
return { startDate, endDate: new Date(startDate) };
|
|
356
|
+
}
|
|
357
|
+
function resolveUserActivityHeatmapLayout(startDate, endDate) {
|
|
358
|
+
const { rangeStart, rangeEnd } = normalizeDateRange(startDate, endDate);
|
|
359
|
+
const spanDays = calendarDaysBetween(rangeEnd, rangeStart) + 1;
|
|
360
|
+
if (spanDays <= 1) {
|
|
361
|
+
return 'hours';
|
|
362
|
+
}
|
|
363
|
+
if (spanDays <= 35) {
|
|
364
|
+
return 'days';
|
|
365
|
+
}
|
|
366
|
+
return 'calendar';
|
|
367
|
+
}
|
|
283
368
|
//#endregion
|
|
284
369
|
//#region ---- Session aggregation ----
|
|
285
370
|
function normalizeDateRange(startDate, endDate) {
|
|
@@ -320,6 +405,33 @@ function aggregateDailySessionCounts(sessions, params) {
|
|
|
320
405
|
}
|
|
321
406
|
return counts;
|
|
322
407
|
}
|
|
408
|
+
/** Counts sign-in events per local hour from device session rows. */
|
|
409
|
+
function aggregateHourlySessionCounts(sessions, params) {
|
|
410
|
+
const { rangeStart, rangeEnd } = normalizeDateRange(params.startDate, params.endDate);
|
|
411
|
+
const counts = Array.from({ length: 24 }, () => 0);
|
|
412
|
+
for (const session of sessions) {
|
|
413
|
+
if (session.userId !== params.userId || session.lastLoginDate == null) {
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
416
|
+
const login = new Date(session.lastLoginDate);
|
|
417
|
+
if (Number.isNaN(login.getTime())) {
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
420
|
+
const day = startOfLocalDay(login);
|
|
421
|
+
if (day < rangeStart || day > rangeEnd) {
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
counts[login.getHours()] += 1;
|
|
425
|
+
}
|
|
426
|
+
return counts;
|
|
427
|
+
}
|
|
428
|
+
function buildUserActivityHours(hourlyCounts) {
|
|
429
|
+
return hourlyCounts.map((count, hour) => ({
|
|
430
|
+
hour,
|
|
431
|
+
count,
|
|
432
|
+
level: countToActivityLevel(count),
|
|
433
|
+
}));
|
|
434
|
+
}
|
|
323
435
|
//#endregion
|
|
324
436
|
//#region ---- Week grid ----
|
|
325
437
|
function countToActivityLevel(count) {
|
|
@@ -395,12 +507,16 @@ function computeUserActivityStats(weeks) {
|
|
|
395
507
|
function buildUserActivityDataSourceItem(params, sessions) {
|
|
396
508
|
const dailyCounts = aggregateDailySessionCounts(sessions, params);
|
|
397
509
|
const weeks = buildUserActivityWeeks(params, dailyCounts);
|
|
510
|
+
const layout = resolveUserActivityHeatmapLayout(params.startDate, params.endDate);
|
|
511
|
+
const hours = layout === 'hours' ? buildUserActivityHours(aggregateHourlySessionCounts(sessions, params)) : [];
|
|
398
512
|
return {
|
|
399
513
|
id: `${params.userId}:${toIsoDate(params.startDate)}:${toIsoDate(params.endDate)}`,
|
|
400
514
|
userId: params.userId,
|
|
401
515
|
startDate: toIsoDate(params.startDate),
|
|
402
516
|
endDate: toIsoDate(params.endDate),
|
|
517
|
+
layout,
|
|
403
518
|
weeks,
|
|
519
|
+
hours,
|
|
404
520
|
stats: computeUserActivityStats(weeks),
|
|
405
521
|
};
|
|
406
522
|
}
|
|
@@ -877,17 +993,17 @@ const routes = [
|
|
|
877
993
|
},
|
|
878
994
|
{
|
|
879
995
|
path: '',
|
|
880
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
881
|
-
loadChildren: () => import('./acorex-platform-module-auth-client-login.module-
|
|
996
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-BLUWyFTY.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
997
|
+
loadChildren: () => import('./acorex-platform-module-auth-client-login.module-DushGqH6.mjs').then((c) => c.AXPSignInModule),
|
|
882
998
|
},
|
|
883
999
|
{
|
|
884
1000
|
path: '',
|
|
885
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
1001
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-BLUWyFTY.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
886
1002
|
loadChildren: () => import('./acorex-platform-module-auth-client-two-factor.module-BnH72Bob.mjs').then((c) => c.AXPTwoFactorModule),
|
|
887
1003
|
},
|
|
888
1004
|
{
|
|
889
1005
|
path: '',
|
|
890
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
1006
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-BLUWyFTY.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
891
1007
|
loadChildren: () => import('./acorex-platform-module-auth-client-routes-IX2qmeqU.mjs').then((c) => c),
|
|
892
1008
|
},
|
|
893
1009
|
{
|
|
@@ -901,8 +1017,8 @@ const routes = [
|
|
|
901
1017
|
},
|
|
902
1018
|
{
|
|
903
1019
|
path: '',
|
|
904
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-
|
|
905
|
-
loadChildren: () => import('./acorex-platform-module-auth-client-register.module-
|
|
1020
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-master.layout-BLUWyFTY.mjs').then((c) => c.AXPAuthMasterLayoutComponent),
|
|
1021
|
+
loadChildren: () => import('./acorex-platform-module-auth-client-register.module-CFIHZOYj.mjs').then((c) => c.AXPRegisterModule),
|
|
906
1022
|
},
|
|
907
1023
|
],
|
|
908
1024
|
},
|
|
@@ -983,11 +1099,13 @@ class AXPAppChooserListComponent {
|
|
|
983
1099
|
}
|
|
984
1100
|
//#endregion
|
|
985
1101
|
//#region ---- UI Handlers ----
|
|
1102
|
+
handleApplicationSelectionChanged(event) {
|
|
1103
|
+
this.selectedApplication.set(event.items?.[0] ?? null);
|
|
1104
|
+
}
|
|
986
1105
|
handleApplicationSelect(event) {
|
|
987
1106
|
if (!event.isUserInteraction) {
|
|
988
1107
|
return;
|
|
989
1108
|
}
|
|
990
|
-
this.selectedApplication.set(event.component.selectedItems[0] ?? null);
|
|
991
1109
|
}
|
|
992
1110
|
handleListItemKeyDown(event, application) {
|
|
993
1111
|
if (event.key === 'Enter' || event.key === ' ') {
|
|
@@ -1083,7 +1201,7 @@ class AXPAppChooserListComponent {
|
|
|
1083
1201
|
}
|
|
1084
1202
|
}
|
|
1085
1203
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAppChooserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1086
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { applicationChosen: "applicationChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-
|
|
1204
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPAppChooserListComponent, isStandalone: true, selector: "axp-app-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { applicationChosen: "applicationChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedApplication()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n [selectedTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleApplicationSelect($event)\"\n (onSelectionChanged)=\"handleApplicationSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (application of allApplications(); track application.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isApplicationSelected(application)\"\n [attr.aria-busy]=\"choosingId() === application.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isApplicationSelected(application)\"\n [class.dark:bg-primary-darker]=\"isApplicationSelected(application)\"\n [class.text-primary-on-lighter]=\"isApplicationSelected(application)\"\n [class.dark:text-primary-on-darker]=\"isApplicationSelected(application)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== application.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseApplication(application)\"\n (keydown)=\"handleListItemKeyDown($event, application)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(application)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(application.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 min-w-0 text-start md:text-base text-sm break-words md:truncate\">{{\n application.title | translate | async\n }}</span>\n @if (application.edition?.title) {\n <span class=\"text-muted text-xs shrink-0\">{{\n application.edition?.title | translate | async\n }}</span>\n }\n </div>\n @if (choosingId() === application.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #applicationItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n @if (item.edition?.title) {\n <span class=\"text-muted text-xs\">{{ item.edition.title | translate | async }}</span>\n }\n </div>\n</ng-template>\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: AXDecoratorModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i4.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i4.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1087
1205
|
}
|
|
1088
1206
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPAppChooserListComponent, decorators: [{
|
|
1089
1207
|
type: Component,
|
|
@@ -1093,17 +1211,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1093
1211
|
AXDecoratorModule,
|
|
1094
1212
|
AXLoadingModule,
|
|
1095
1213
|
AXSkeletonModule,
|
|
1096
|
-
|
|
1097
|
-
AXSearchBoxModule,
|
|
1214
|
+
AXLookupComponent,
|
|
1098
1215
|
AXListNavigationModule,
|
|
1099
1216
|
AXTranslationModule,
|
|
1100
1217
|
AXPLogoComponent,
|
|
1101
|
-
], template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-
|
|
1218
|
+
], template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-10 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"w-16 h-4 rounded-md shrink-0\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allApplications()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedApplication()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:application-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"applicationItemTemplate\"\n [selectedTemplate]=\"applicationItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleApplicationSelect($event)\"\n (onSelectionChanged)=\"handleApplicationSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (application of allApplications(); track application.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isApplicationSelected(application)\"\n [attr.aria-busy]=\"choosingId() === application.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isApplicationSelected(application)\"\n [class.dark:bg-primary-darker]=\"isApplicationSelected(application)\"\n [class.text-primary-on-lighter]=\"isApplicationSelected(application)\"\n [class.dark:text-primary-on-darker]=\"isApplicationSelected(application)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== application.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseApplication(application)\"\n (keydown)=\"handleListItemKeyDown($event, application)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(application)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(application.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 min-w-0 text-start md:text-base text-sm break-words md:truncate\">{{\n application.title | translate | async\n }}</span>\n @if (application.edition?.title) {\n <span class=\"text-muted text-xs shrink-0\">{{\n application.edition?.title | translate | async\n }}</span>\n }\n </div>\n @if (choosingId() === application.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n}\n\n<ng-template #applicationItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"applicationLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n @if (item.edition?.title) {\n <span class=\"text-muted text-xs\">{{ item.edition.title | translate | async }}</span>\n }\n </div>\n</ng-template>\n" }]
|
|
1102
1219
|
}], ctorParameters: () => [], propDecorators: { simple: [{ type: i0.Input, args: [{ isSignal: true, alias: "simple", required: false }] }], applicationChosen: [{ type: i0.Output, args: ["applicationChosen"] }], loadingChange: [{ type: i0.Output, args: ["loadingChange"] }], listNav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], listItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
|
|
1103
1220
|
|
|
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 {
|
|
@@ -1224,11 +1342,13 @@ class AXPTenantChooserListComponent {
|
|
|
1224
1342
|
showAllTenants() {
|
|
1225
1343
|
this.showAll.update((value) => !value);
|
|
1226
1344
|
}
|
|
1345
|
+
handleTenantSelectionChanged(event) {
|
|
1346
|
+
this.selectedTenant.set(event.items?.[0] ?? null);
|
|
1347
|
+
}
|
|
1227
1348
|
handleTenantSelect(event) {
|
|
1228
1349
|
if (!event.isUserInteraction) {
|
|
1229
1350
|
return;
|
|
1230
1351
|
}
|
|
1231
|
-
this.selectedTenant.set(event.component.selectedItems[0] ?? null);
|
|
1232
1352
|
}
|
|
1233
1353
|
handleListItemKeyDown(event, tenant) {
|
|
1234
1354
|
if (event.key === 'Enter' || event.key === ' ') {
|
|
@@ -1295,7 +1415,7 @@ class AXPTenantChooserListComponent {
|
|
|
1295
1415
|
}
|
|
1296
1416
|
}
|
|
1297
1417
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1298
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserListComponent, isStandalone: true, selector: "axp-tenant-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChosen: "tenantChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] pe-2 flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 justify-between py-3 items-center cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center font-medium min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-select-box\n class=\"w-full\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()\"\n [itemHeight]=\"56\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n >\n <ax-search-box look=\"fill\"></ax-search-box>\n </ax-select-box>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n @if (showSearchAndViewAll()) {\n <ax-search-box\n [placeholder]=\"'@general:search.title' | translate | async\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearch($event)\"\n class=\"w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n }\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of displayedTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isTenantSelected(tenant)\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.text-primary-on-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:text-primary-on-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n @if (showSearchAndViewAll()) {\n <div class=\"mt-6 w-full flex justify-center\">\n <ax-button\n (onClick)=\"showAllTenants()\"\n class=\"w-full\"\n look=\"outline\"\n [disabled]=\"isChoosing()\"\n [text]=\"\n showAll()\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"\n ></ax-button>\n </div>\n }\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item.data)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.data.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"text-start md:text-base text-sm\">{{ item.data.title | translate | async }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i4.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i6.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i6.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1418
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTenantChooserListComponent, isStandalone: true, selector: "axp-tenant-chooser-list", inputs: { simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChosen: "tenantChosen", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "listNav", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] pe-2 flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 justify-between py-3 items-center cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center font-medium min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n [selectedTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n (onSelectionChanged)=\"handleTenantSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n @if (showSearchAndViewAll()) {\n <ax-search-box\n [placeholder]=\"'@general:search.title' | translate | async\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearch($event)\"\n class=\"w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n }\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of displayedTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isTenantSelected(tenant)\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.text-primary-on-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:text-primary-on-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n @if (showSearchAndViewAll()) {\n <div class=\"mt-6 w-full flex justify-center\">\n <ax-button\n (onClick)=\"showAllTenants()\"\n class=\"w-full\"\n look=\"outline\"\n [disabled]=\"isChoosing()\"\n [text]=\"\n showAll()\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"\n ></ax-button>\n </div>\n }\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: AXDecoratorModule }, { kind: "component", type: i3$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i4.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i4.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1299
1419
|
}
|
|
1300
1420
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserListComponent, decorators: [{
|
|
1301
1421
|
type: Component,
|
|
@@ -1307,17 +1427,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1307
1427
|
AXDecoratorModule,
|
|
1308
1428
|
AXLoadingModule,
|
|
1309
1429
|
AXSkeletonModule,
|
|
1310
|
-
|
|
1430
|
+
AXLookupComponent,
|
|
1311
1431
|
AXSearchBoxModule,
|
|
1312
1432
|
AXListNavigationModule,
|
|
1313
1433
|
AXPLogoComponent,
|
|
1314
|
-
], template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] pe-2 flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 justify-between py-3 items-center cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center font-medium min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-
|
|
1434
|
+
], template: "@if (isLoading()) {\n <div class=\"w-full flex flex-col gap-3\">\n @for (item of skeletonItems; track item) {\n <div class=\"flex gap-3 items-center p-2\">\n <ax-skeleton [animated]=\"true\" class=\"size-12 rounded-lg shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"flex-1 h-5 rounded-md\"></ax-skeleton>\n </div>\n }\n </div>\n} @else if (simple()) {\n <div\n class=\"w-full overflow-auto max-h-[300px] pe-2 flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of allTenants(); track tenant.id) {\n <div\n class=\"flex gap-2 justify-between py-3 items-center cursor-pointer rounded-md transition-colors hover:bg-primary-lightest hover:dark:bg-primary-dark\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n (click)=\"chooseTenant(tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center font-medium min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n} @else if (useSelectBox()) {\n <div\n class=\"w-full flex flex-col gap-4\"\n [class.pointer-events-none]=\"isChoosing()\"\n [class.opacity-60]=\"isChoosing()\"\n (keydown.capture)=\"handleSelectBoxKeyDown($event)\"\n >\n <ax-lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n [dataSource]=\"allTenants()\"\n textField=\"title\"\n valueField=\"id\"\n [value]=\"selectedTenant()?.id\"\n [itemHeight]=\"56\"\n [searchable]=\"true\"\n [placeholder]=\"('@auth:tenant-chooser.select-placeholder' | translate | async) ?? ''\"\n [itemTemplate]=\"tenantItemTemplate\"\n [selectedTemplate]=\"tenantItemTemplate\"\n (onOpened)=\"isSelectBoxOpen.set(true)\"\n (onClosed)=\"isSelectBoxOpen.set(false)\"\n (onValueChanged)=\"handleTenantSelect($event)\"\n (onSelectionChanged)=\"handleTenantSelectionChanged($event)\"\n >\n </ax-lookup>\n <ax-button\n class=\"w-full\"\n color=\"primary\"\n [disabled]=\"!canApply() || isChoosing()\"\n [text]=\"('@general:actions.apply.title' | translate | async) ?? ''\"\n (onClick)=\"applySelection()\"\n >\n @if (isChoosing()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n} @else {\n @if (showSearchAndViewAll()) {\n <ax-search-box\n [placeholder]=\"'@general:search.title' | translate | async\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearch($event)\"\n class=\"w-full\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n }\n <div\n axListNavigation\n #listNav=\"axListNavigation\"\n class=\"w-full overflow-auto max-h-[300px] flex flex-col divide-y divide-neutral-100 dark:divide-neutral-800\"\n role=\"listbox\"\n [class.pointer-events-none]=\"isChoosing()\"\n >\n @for (tenant of displayedTenants(); track tenant.id) {\n <div\n axListNavigationItem\n #navItem=\"axListNavigationItem\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"isTenantSelected(tenant)\"\n [attr.aria-busy]=\"choosingId() === tenant.id\"\n class=\"flex gap-2 items-center p-2 cursor-pointer rounded-md transition-colors outline-none hover:bg-primary-lightest hover:dark:bg-primary-dark focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary\"\n [class.bg-primary-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:bg-primary-darker]=\"isTenantSelected(tenant)\"\n [class.text-primary-on-lighter]=\"isTenantSelected(tenant)\"\n [class.dark:text-primary-on-darker]=\"isTenantSelected(tenant)\"\n [class.opacity-50]=\"isChoosing() && choosingId() !== tenant.id\"\n [class.cursor-wait]=\"isChoosing()\"\n (click)=\"chooseTenant(tenant)\"\n (keydown)=\"handleListItemKeyDown($event, tenant)\"\n >\n <div class=\"flex flex-1 gap-3 items-center min-w-0\">\n <div class=\"shrink-0 size-12 overflow-hidden rounded-lg\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(tenant)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(tenant.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"flex-1 truncate text-start md:text-base text-sm\">{{\n tenant.title | translate | async\n }}</span>\n </div>\n @if (choosingId() === tenant.id) {\n <ax-loading class=\"shrink-0\"></ax-loading>\n }\n </div>\n }\n </div>\n @if (showSearchAndViewAll()) {\n <div class=\"mt-6 w-full flex justify-center\">\n <ax-button\n (onClick)=\"showAllTenants()\"\n class=\"w-full\"\n look=\"outline\"\n [disabled]=\"isChoosing()\"\n [text]=\"\n showAll()\n ? ('@general:actions.view-less.title' | translate | async)\n : ('@general:actions.view-all.title' | translate | async)\n \"\n ></ax-button>\n </div>\n }\n}\n\n<ng-template #tenantItemTemplate let-item>\n <div class=\"flex gap-3 items-center p-2\">\n <div class=\"size-12 overflow-hidden rounded-lg shrink-0\">\n <axp-logo\n [logoKey]=\"tenantLogoKey(item)\"\n appearance=\"colored\"\n [size]=\"42\"\n [attr.alt]=\"(item.title | translate | async) ?? ''\"\n class=\"size-12 overflow-hidden rounded-lg\"\n ></axp-logo>\n </div>\n <span class=\"text-start md:text-base text-sm\">{{ item.title | translate | async }}</span>\n </div>\n</ng-template>\n" }]
|
|
1315
1435
|
}], ctorParameters: () => [], propDecorators: { simple: [{ type: i0.Input, args: [{ isSignal: true, alias: "simple", required: false }] }], tenantChosen: [{ type: i0.Output, args: ["tenantChosen"] }], loadingChange: [{ type: i0.Output, args: ["loadingChange"] }], listNav: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], listItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
|
|
1316
1436
|
|
|
1317
1437
|
class AXPTenantChooserDropdownComponent {
|
|
1318
1438
|
constructor() {
|
|
1319
1439
|
//#region ----- Services & Dependencies -----
|
|
1320
1440
|
this.sessionService = inject(AXPSessionService);
|
|
1441
|
+
this.router = inject(Router);
|
|
1321
1442
|
//#endregion
|
|
1322
1443
|
//#region ----- State Signals -----
|
|
1323
1444
|
this.tenants$ = this.sessionService.tenants$;
|
|
@@ -1326,6 +1447,13 @@ class AXPTenantChooserDropdownComponent {
|
|
|
1326
1447
|
...(ngDevMode ? [{ debugName: "tenantsLoading" }] : /* istanbul ignore next */ []));
|
|
1327
1448
|
this.tenantPopover = viewChild('tenantPopover', /* @ts-ignore */
|
|
1328
1449
|
...(ngDevMode ? [{ debugName: "tenantPopover" }] : /* istanbul ignore next */ []));
|
|
1450
|
+
//#endregion
|
|
1451
|
+
//#region ----- Inputs -----
|
|
1452
|
+
/**
|
|
1453
|
+
* When true, renders a plain inline tenant text (no popover).
|
|
1454
|
+
* When multiple tenants are available, the text is clickable.
|
|
1455
|
+
*/
|
|
1456
|
+
this.inline = false;
|
|
1329
1457
|
}
|
|
1330
1458
|
//#endregion
|
|
1331
1459
|
//#region ----- Lifecycle -----
|
|
@@ -1339,8 +1467,12 @@ class AXPTenantChooserDropdownComponent {
|
|
|
1339
1467
|
closePopover() {
|
|
1340
1468
|
this.tenantPopover()?.close();
|
|
1341
1469
|
}
|
|
1470
|
+
openTenantChooser() {
|
|
1471
|
+
// Route registered in `AXPAccountModule` as `/auth/account/tenant-chooser`.
|
|
1472
|
+
void this.router.navigate(['/auth/account/tenant-chooser']);
|
|
1473
|
+
}
|
|
1342
1474
|
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
|
|
1475
|
+
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.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
|
|
1344
1476
|
}
|
|
1345
1477
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTenantChooserDropdownComponent, decorators: [{
|
|
1346
1478
|
type: Component,
|
|
@@ -1352,8 +1484,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1352
1484
|
AXDecoratorModule,
|
|
1353
1485
|
AXSkeletonModule,
|
|
1354
1486
|
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 }] }]
|
|
1487
|
+
], 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" }]
|
|
1488
|
+
}], propDecorators: { tenantPopover: [{ type: i0.ViewChild, args: ['tenantPopover', { isSignal: true }] }], inline: [{
|
|
1489
|
+
type: Input
|
|
1490
|
+
}] } });
|
|
1357
1491
|
|
|
1358
1492
|
//#region ---- Profile slot menu hook ----
|
|
1359
1493
|
const PROFILE_SLOT_MENU_ITEMS_HOOK = 'profile-slot.menu-items';
|
|
@@ -1486,7 +1620,7 @@ class AXMAuthProfileSlotComponent {
|
|
|
1486
1620
|
// AXKBDItemComponent,
|
|
1487
1621
|
AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "component", type:
|
|
1488
1622
|
//
|
|
1489
|
-
AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5
|
|
1623
|
+
AXPTenantChooserDropdownComponent, selector: "axp-tenant-chooser-dropdown", inputs: ["inline"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1490
1624
|
}
|
|
1491
1625
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMAuthProfileSlotComponent, decorators: [{
|
|
1492
1626
|
type: Component,
|
|
@@ -1521,6 +1655,10 @@ class AXMUserProfileCardSlotComponent {
|
|
|
1521
1655
|
return this.themeStore.effectiveMenuVerticalMode() === AXPMenuVerticalMode.Compact;
|
|
1522
1656
|
}, /* @ts-ignore */
|
|
1523
1657
|
...(ngDevMode ? [{ debugName: "isCompactMode" }] : /* istanbul ignore next */ []));
|
|
1658
|
+
this.isMenuDark = computed(() => this.themeStore.menuDarkEnabled() ||
|
|
1659
|
+
(this.themeStore.menuAppearance() === 'brand-light' &&
|
|
1660
|
+
this.themeStore.isDarkMode()), /* @ts-ignore */
|
|
1661
|
+
...(ngDevMode ? [{ debugName: "isMenuDark" }] : /* istanbul ignore next */ []));
|
|
1524
1662
|
this.hasPicture = signal(true, /* @ts-ignore */
|
|
1525
1663
|
...(ngDevMode ? [{ debugName: "hasPicture" }] : /* istanbul ignore next */ []));
|
|
1526
1664
|
this.avatarText = signal('', /* @ts-ignore */
|
|
@@ -1532,8 +1670,8 @@ class AXMUserProfileCardSlotComponent {
|
|
|
1532
1670
|
this.getAvatarText = () => {
|
|
1533
1671
|
this.user$.pipe(first()).subscribe((user) => {
|
|
1534
1672
|
const names = user?.title.split(' ');
|
|
1535
|
-
if (names?.length && names?.
|
|
1536
|
-
this.avatarText.set(
|
|
1673
|
+
if (names?.length && names[0]?.[0]) {
|
|
1674
|
+
this.avatarText.set(names[0][0].toUpperCase());
|
|
1537
1675
|
}
|
|
1538
1676
|
else
|
|
1539
1677
|
return this.avatarText.set('AC');
|
|
@@ -1578,11 +1716,11 @@ class AXMUserProfileCardSlotComponent {
|
|
|
1578
1716
|
}
|
|
1579
1717
|
}
|
|
1580
1718
|
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
|
|
1719
|
+
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
1720
|
//
|
|
1583
1721
|
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
1722
|
//
|
|
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 }); }
|
|
1723
|
+
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
1724
|
}
|
|
1587
1725
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMUserProfileCardSlotComponent, decorators: [{
|
|
1588
1726
|
type: Component,
|
|
@@ -1600,7 +1738,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1600
1738
|
AXPTenantChooserDropdownComponent,
|
|
1601
1739
|
AsyncPipe,
|
|
1602
1740
|
AXPUserAvatarComponent,
|
|
1603
|
-
], template: "@if((isAuthenticated$ | async)) {\n<div
|
|
1741
|
+
], 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
1742
|
}], ctorParameters: () => [], propDecorators: { profilePopover: [{
|
|
1605
1743
|
type: ViewChild,
|
|
1606
1744
|
args: ['profilePopover']
|
|
@@ -1778,12 +1916,12 @@ function routesFacory() {
|
|
|
1778
1916
|
routes = [
|
|
1779
1917
|
{
|
|
1780
1918
|
path: 'tenant-chooser',
|
|
1781
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-tenant-chooser.component-
|
|
1919
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-tenant-chooser.component-DKTvZ1-I.mjs').then((c) => c.AXPAuthTenantChooserComponent),
|
|
1782
1920
|
canActivate: [AXPAuthGuard, canActivateTenantChooser],
|
|
1783
1921
|
},
|
|
1784
1922
|
{
|
|
1785
1923
|
path: 'app-chooser',
|
|
1786
|
-
loadComponent: () => import('./acorex-platform-module-auth-client-app-chooser.component-
|
|
1924
|
+
loadComponent: () => import('./acorex-platform-module-auth-client-app-chooser.component-TPCkYJej.mjs').then((c) => c.AXPAuthAppChooserComponent),
|
|
1787
1925
|
canActivate: [AXPAuthGuard, canActivateAppChooser],
|
|
1788
1926
|
},
|
|
1789
1927
|
];
|
|
@@ -2171,7 +2309,7 @@ class AXPIdleLockService {
|
|
|
2171
2309
|
this.overlayOpening = true;
|
|
2172
2310
|
this.locked.set(true);
|
|
2173
2311
|
try {
|
|
2174
|
-
const { AXMSessionLockOverlayComponent: overlayComponent } = await import('./acorex-platform-module-auth-client-session-lock-overlay.component-
|
|
2312
|
+
const { AXMSessionLockOverlayComponent: overlayComponent } = await import('./acorex-platform-module-auth-client-session-lock-overlay.component-CcGFA6Op.mjs');
|
|
2175
2313
|
const panelClasses = ['axm-session-lock-overlay-shell'];
|
|
2176
2314
|
if (this.platform.isDark()) {
|
|
2177
2315
|
panelClasses.push('ax-dark');
|
|
@@ -2485,6 +2623,7 @@ const CoreProfileSectionsHookProvider = {
|
|
|
2485
2623
|
id: 'delete-account',
|
|
2486
2624
|
groupId: 'account',
|
|
2487
2625
|
priority: 100,
|
|
2626
|
+
feature: AXPSecurityManagementFeatureKeys.DeleteAccount,
|
|
2488
2627
|
content: {
|
|
2489
2628
|
mode: 'component',
|
|
2490
2629
|
componentKey: PROFILE_DELETE_ACCOUNT_DANGER_ZONE_COMPONENT_KEY,
|
|
@@ -2994,7 +3133,7 @@ const userAvatarCacheRefreshMiddleware = {
|
|
|
2994
3133
|
//#endregion
|
|
2995
3134
|
|
|
2996
3135
|
function profileRoutesFactory() {
|
|
2997
|
-
const loadProfilePage = () => import('./acorex-platform-module-auth-client-profile-page.component-
|
|
3136
|
+
const loadProfilePage = () => import('./acorex-platform-module-auth-client-profile-page.component-CPHQXCpS.mjs').then((c) => c.AXMUserProfilePageComponent);
|
|
2998
3137
|
return [
|
|
2999
3138
|
{
|
|
3000
3139
|
path: ':app/profile',
|
|
@@ -3110,11 +3249,11 @@ class AXMAuthModule {
|
|
|
3110
3249
|
AXMAuthErrorHandler,
|
|
3111
3250
|
provideLazyProvider(AXP_MENU_PROVIDER, () => import('./acorex-platform-module-auth-client-menu.provider-Bz-kRip4.mjs').then(m => m.AXMSecurityManagementModuleMenuProvider)),
|
|
3112
3251
|
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-
|
|
3252
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-CfQySdD8.mjs').then((module) => module.AXMProfilePageComponentProvider)),
|
|
3114
3253
|
provideQuerySetups([
|
|
3115
3254
|
{
|
|
3116
3255
|
key: 'Auth:GetUserActivity',
|
|
3117
|
-
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-
|
|
3256
|
+
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-DBdELID4.mjs').then((c) => c.AXMGetUserActivityQuery),
|
|
3118
3257
|
},
|
|
3119
3258
|
]),
|
|
3120
3259
|
{
|
|
@@ -3138,15 +3277,15 @@ class AXMAuthModule {
|
|
|
3138
3277
|
},
|
|
3139
3278
|
{
|
|
3140
3279
|
key: AXMAuthCommandKeys.Session.OpenSessions,
|
|
3141
|
-
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-
|
|
3280
|
+
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-BHAf7500.mjs').then((c) => c.AXPOpenSessionsCommand),
|
|
3142
3281
|
},
|
|
3143
3282
|
{
|
|
3144
3283
|
key: AXMAuthCommandKeys.Session.LockScreen,
|
|
3145
|
-
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-
|
|
3284
|
+
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-BADSRZxj.mjs').then((c) => c.AXPLockScreenCommand),
|
|
3146
3285
|
},
|
|
3147
3286
|
{
|
|
3148
3287
|
key: AXMAuthCommandKeys.Profile.ChangePhoto,
|
|
3149
|
-
command: () => import('./acorex-platform-module-auth-client-change-photo.command-
|
|
3288
|
+
command: () => import('./acorex-platform-module-auth-client-change-photo.command-BZK_W29M.mjs').then((c) => c.AXPChangePhotoCommand),
|
|
3150
3289
|
},
|
|
3151
3290
|
{
|
|
3152
3291
|
key: AXMAuthCommandKeys.Profile.EditAccountInfo,
|
|
@@ -3154,19 +3293,19 @@ class AXMAuthModule {
|
|
|
3154
3293
|
},
|
|
3155
3294
|
{
|
|
3156
3295
|
key: AXMAuthCommandKeys.Security.ChangePassword,
|
|
3157
|
-
command: () => import('./acorex-platform-module-auth-client-change-password.command-
|
|
3296
|
+
command: () => import('./acorex-platform-module-auth-client-change-password.command-DHwnPkUO.mjs').then((c) => c.AXPChangePasswordCommand),
|
|
3158
3297
|
},
|
|
3159
3298
|
{
|
|
3160
3299
|
key: AXMAuthCommandKeys.Security.SetPinCode,
|
|
3161
|
-
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-
|
|
3300
|
+
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-BSZhRCN7.mjs').then((c) => c.AXPSetPinCodeCommand),
|
|
3162
3301
|
},
|
|
3163
3302
|
{
|
|
3164
3303
|
key: AXMAuthCommandKeys.Security.RemovePinCode,
|
|
3165
|
-
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-
|
|
3304
|
+
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-CdlJF48g.mjs').then((c) => c.AXPRemovePinCodeCommand),
|
|
3166
3305
|
},
|
|
3167
3306
|
{
|
|
3168
3307
|
key: AXMAuthCommandKeys.Security.ViewLoginHistory,
|
|
3169
|
-
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-
|
|
3308
|
+
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-CWmD9wNM.mjs').then((c) => c.AXPViewLoginHistoryCommand),
|
|
3170
3309
|
},
|
|
3171
3310
|
{
|
|
3172
3311
|
key: AXMAuthCommandKeys.Security.EditSignature,
|
|
@@ -3319,11 +3458,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3319
3458
|
AXMAuthErrorHandler,
|
|
3320
3459
|
provideLazyProvider(AXP_MENU_PROVIDER, () => import('./acorex-platform-module-auth-client-menu.provider-Bz-kRip4.mjs').then(m => m.AXMSecurityManagementModuleMenuProvider)),
|
|
3321
3460
|
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-
|
|
3461
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-platform-module-auth-client-profile-page-component.provider-CfQySdD8.mjs').then((module) => module.AXMProfilePageComponentProvider)),
|
|
3323
3462
|
provideQuerySetups([
|
|
3324
3463
|
{
|
|
3325
3464
|
key: 'Auth:GetUserActivity',
|
|
3326
|
-
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-
|
|
3465
|
+
loader: () => import('./acorex-platform-module-auth-client-get-user-activity.query-DBdELID4.mjs').then((c) => c.AXMGetUserActivityQuery),
|
|
3327
3466
|
},
|
|
3328
3467
|
]),
|
|
3329
3468
|
{
|
|
@@ -3347,15 +3486,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3347
3486
|
},
|
|
3348
3487
|
{
|
|
3349
3488
|
key: AXMAuthCommandKeys.Session.OpenSessions,
|
|
3350
|
-
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-
|
|
3489
|
+
command: () => import('./acorex-platform-module-auth-client-open-sessions.command-BHAf7500.mjs').then((c) => c.AXPOpenSessionsCommand),
|
|
3351
3490
|
},
|
|
3352
3491
|
{
|
|
3353
3492
|
key: AXMAuthCommandKeys.Session.LockScreen,
|
|
3354
|
-
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-
|
|
3493
|
+
command: () => import('./acorex-platform-module-auth-client-lock-screen.command-BADSRZxj.mjs').then((c) => c.AXPLockScreenCommand),
|
|
3355
3494
|
},
|
|
3356
3495
|
{
|
|
3357
3496
|
key: AXMAuthCommandKeys.Profile.ChangePhoto,
|
|
3358
|
-
command: () => import('./acorex-platform-module-auth-client-change-photo.command-
|
|
3497
|
+
command: () => import('./acorex-platform-module-auth-client-change-photo.command-BZK_W29M.mjs').then((c) => c.AXPChangePhotoCommand),
|
|
3359
3498
|
},
|
|
3360
3499
|
{
|
|
3361
3500
|
key: AXMAuthCommandKeys.Profile.EditAccountInfo,
|
|
@@ -3363,19 +3502,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3363
3502
|
},
|
|
3364
3503
|
{
|
|
3365
3504
|
key: AXMAuthCommandKeys.Security.ChangePassword,
|
|
3366
|
-
command: () => import('./acorex-platform-module-auth-client-change-password.command-
|
|
3505
|
+
command: () => import('./acorex-platform-module-auth-client-change-password.command-DHwnPkUO.mjs').then((c) => c.AXPChangePasswordCommand),
|
|
3367
3506
|
},
|
|
3368
3507
|
{
|
|
3369
3508
|
key: AXMAuthCommandKeys.Security.SetPinCode,
|
|
3370
|
-
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-
|
|
3509
|
+
command: () => import('./acorex-platform-module-auth-client-set-pin-code.command-BSZhRCN7.mjs').then((c) => c.AXPSetPinCodeCommand),
|
|
3371
3510
|
},
|
|
3372
3511
|
{
|
|
3373
3512
|
key: AXMAuthCommandKeys.Security.RemovePinCode,
|
|
3374
|
-
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-
|
|
3513
|
+
command: () => import('./acorex-platform-module-auth-client-remove-pin-code.command-CdlJF48g.mjs').then((c) => c.AXPRemovePinCodeCommand),
|
|
3375
3514
|
},
|
|
3376
3515
|
{
|
|
3377
3516
|
key: AXMAuthCommandKeys.Security.ViewLoginHistory,
|
|
3378
|
-
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-
|
|
3517
|
+
command: () => import('./acorex-platform-module-auth-client-view-login-history.command-CWmD9wNM.mjs').then((c) => c.AXPViewLoginHistoryCommand),
|
|
3379
3518
|
},
|
|
3380
3519
|
{
|
|
3381
3520
|
key: AXMAuthCommandKeys.Security.EditSignature,
|
|
@@ -3498,5 +3637,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3498
3637
|
* Generated bundle index. Do not edit.
|
|
3499
3638
|
*/
|
|
3500
3639
|
|
|
3501
|
-
export { AXMUserDeviceSessionsService as A,
|
|
3502
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
3640
|
+
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 };
|
|
3641
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-acorex-platform-module-auth-client-CTf7qxkQ.mjs.map
|