@acorex/modules 20.6.3 → 20.6.4
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-modules-auth-acorex-modules-auth-CAGlVzjD.mjs → acorex-modules-auth-acorex-modules-auth-D2RpP22p.mjs} +10 -10
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CAGlVzjD.mjs.map → acorex-modules-auth-acorex-modules-auth-D2RpP22p.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-app-chooser.component-BAoN8dn6.mjs → acorex-modules-auth-app-chooser.component-BI3wED24.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-BAoN8dn6.mjs.map → acorex-modules-auth-app-chooser.component-BI3wED24.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-CToi7k63.mjs → acorex-modules-auth-login.module-CceKXOOB.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-CToi7k63.mjs.map → acorex-modules-auth-login.module-CceKXOOB.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-YZfKfaoC.mjs → acorex-modules-auth-master.layout-knGLhLSY.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-YZfKfaoC.mjs.map → acorex-modules-auth-master.layout-knGLhLSY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-CKQh5Mpa.mjs → acorex-modules-auth-oauth-callback.component-BmxjkoNA.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-CKQh5Mpa.mjs.map → acorex-modules-auth-oauth-callback.component-BmxjkoNA.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-password.component-BMLK4drm.mjs +563 -0
- package/fesm2022/acorex-modules-auth-password.component-BMLK4drm.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-password.component-Jskc80kr.mjs → acorex-modules-auth-password.component-BhPfqSA_.mjs} +6 -6
- package/fesm2022/{acorex-modules-auth-password.component-Jskc80kr.mjs.map → acorex-modules-auth-password.component-BhPfqSA_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-BOofdLjr.mjs → acorex-modules-auth-routes-BtenIM-p.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-BOofdLjr.mjs.map → acorex-modules-auth-routes-BtenIM-p.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor-code.component-BmlUjtYC.mjs → acorex-modules-auth-two-factor-code.component-Bk0jHCv_.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-two-factor-code.component-BmlUjtYC.mjs.map → acorex-modules-auth-two-factor-code.component-Bk0jHCv_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-Bc39IBha.mjs → acorex-modules-auth-two-factor.module-BUSxDCwt.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-two-factor.module-Bc39IBha.mjs.map → acorex-modules-auth-two-factor.module-BUSxDCwt.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-user-sessions.component-BBX97AST.mjs → acorex-modules-auth-user-sessions.component-CbMB_YWS.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-user-sessions.component-BBX97AST.mjs.map → acorex-modules-auth-user-sessions.component-CbMB_YWS.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/package.json +2 -2
- package/fesm2022/acorex-modules-auth-password.component-Dqb6GBes.mjs +0 -226
- package/fesm2022/acorex-modules-auth-password.component-Dqb6GBes.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-auth-two-factor.module-
|
|
1
|
+
{"version":3,"file":"acorex-modules-auth-two-factor.module-BUSxDCwt.mjs","sources":["../tmp-esm2022/auth/lib/pages/two-factor/two-factor.module.js"],"sourcesContent":["import { inject, NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\nimport { AXM_AUTH_CONFIG_TOKEN } from '../../auth.config';\nimport * as i0 from \"@angular/core\";\nfunction routesFacory() {\n const val = inject(AXM_AUTH_CONFIG_TOKEN);\n let routes = [];\n routes = [\n {\n path: 'two-step',\n loadComponent: () => import('./two-factor-code/two-factor-code.component').then((c) => c.AXPAuthTwoFactorCodeComponent),\n },\n ];\n return routes;\n}\nexport class AXPTwoFactorModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPTwoFactorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPTwoFactorModule, imports: [RouterModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPTwoFactorModule, providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ], imports: [RouterModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPTwoFactorModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [],\n imports: [RouterModule],\n exports: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdvLWZhY3Rvci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXV0aC9zcmMvbGliL3BhZ2VzL3R3by1mYWN0b3IvdHdvLWZhY3Rvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFMUQsU0FBUyxZQUFZO0lBQ25CLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFDLElBQUksTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUN4QixNQUFNLEdBQUc7UUFDUDtZQUNFLElBQUksRUFBRSxVQUFVO1lBQ2hCLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FDbEIsTUFBTSxDQUFDLDZDQUE2QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7U0FDckc7S0FDRixDQUFDO0lBQ0YsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQWNELE1BQU0sT0FBTyxrQkFBa0I7K0dBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCLFlBVm5CLFlBQVk7Z0hBVVgsa0JBQWtCLGFBUmxCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsVUFBVSxFQUFFLFlBQVk7YUFDekI7U0FDRixZQVJTLFlBQVk7OzRGQVVYLGtCQUFrQjtrQkFaOUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUUsRUFBRTtvQkFDWCxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLE1BQU07NEJBQ2YsS0FBSyxFQUFFLElBQUk7NEJBQ1gsVUFBVSxFQUFFLFlBQVk7eUJBQ3pCO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBST1VURVMsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBWE1fQVVUSF9DT05GSUdfVE9LRU4gfSBmcm9tICcuLi8uLi9hdXRoLmNvbmZpZyc7XG5cbmZ1bmN0aW9uIHJvdXRlc0ZhY29yeSgpIHtcbiAgY29uc3QgdmFsID0gaW5qZWN0KEFYTV9BVVRIX0NPTkZJR19UT0tFTik7XG4gIGxldCByb3V0ZXM6IFJvdXRlcyA9IFtdO1xuICByb3V0ZXMgPSBbXG4gICAge1xuICAgICAgcGF0aDogJ3R3by1zdGVwJyxcbiAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICAgIGltcG9ydCgnLi90d28tZmFjdG9yLWNvZGUvdHdvLWZhY3Rvci1jb2RlLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQVhQQXV0aFR3b0ZhY3RvckNvZGVDb21wb25lbnQpLFxuICAgIH0sXG4gIF07XG4gIHJldHVybiByb3V0ZXM7XG59XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGVdLFxuICBleHBvcnRzOiBbXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUk9VVEVTLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VGYWN0b3J5OiByb3V0ZXNGYWNvcnksXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQVHdvRmFjdG9yTW9kdWxlIHt9XG4iXX0="],"names":[],"mappings":";;;;;AAIA,SAAS,YAAY,GAAG;AACxB,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC7C,IAAI,IAAI,MAAM,GAAG,EAAE;AACnB,IAAI,MAAM,GAAG;AACb,QAAQ;AACR,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,aAAa,EAAE,MAAM,OAAO,8DAA6C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,6BAA6B,CAAC;AACnI,SAAS;AACT,KAAK;AACL,IAAI,OAAO,MAAM;AACjB;AACO,MAAM,kBAAkB,CAAC;AAChC,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC/J,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE;AAC/I,YAAY;AACZ,gBAAgB,OAAO,EAAE,MAAM;AAC/B,gBAAgB,KAAK,EAAE,IAAI;AAC3B,gBAAgB,UAAU,EAAE,YAAY;AACxC,aAAa;AACb,SAAS,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACtC;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,YAAY,EAAE,EAAE;AACpC,oBAAoB,OAAO,EAAE,CAAC,YAAY,CAAC;AAC3C,oBAAoB,OAAO,EAAE,EAAE;AAC/B,oBAAoB,SAAS,EAAE;AAC/B,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,MAAM;AAC3C,4BAA4B,KAAK,EAAE,IAAI;AACvC,4BAA4B,UAAU,EAAE,YAAY;AACpD,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;;;"}
|
|
@@ -18,7 +18,7 @@ import * as i0 from '@angular/core';
|
|
|
18
18
|
import { signal, inject, ChangeDetectorRef, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
19
19
|
import * as i2 from '@angular/forms';
|
|
20
20
|
import { FormsModule } from '@angular/forms';
|
|
21
|
-
import { d as AXMUserDeviceSessionsService } from './acorex-modules-auth-acorex-modules-auth-
|
|
21
|
+
import { d as AXMUserDeviceSessionsService } from './acorex-modules-auth-acorex-modules-auth-D2RpP22p.mjs';
|
|
22
22
|
|
|
23
23
|
class AXMUserSessionsComponent {
|
|
24
24
|
constructor() {
|
|
@@ -134,4 +134,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
|
|
|
134
134
|
}], ctorParameters: () => [] });
|
|
135
135
|
|
|
136
136
|
export { AXMUserSessionsComponent };
|
|
137
|
-
//# sourceMappingURL=acorex-modules-auth-user-sessions.component-
|
|
137
|
+
//# sourceMappingURL=acorex-modules-auth-user-sessions.component-CbMB_YWS.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-auth-user-sessions.component-BBX97AST.mjs","sources":["../tmp-esm2022/auth/lib/pages/account/user-sessions/user-sessions.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPSettingService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXMUserDeviceSessionsService } from './user-sessions.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"@acorex/components/select-box\";\nimport * as i4 from \"@angular/common\";\nexport class AXMUserSessionsComponent {\n constructor() {\n this.AXPTokenExpirationDurations = {\n oneWeek: 'oneWeek',\n oneMonth: 'oneMonth',\n threeMonths: 'threeMonths',\n sixMonths: 'sixMonths',\n };\n this.items = signal([], ...(ngDevMode ? [{ debugName: \"items\" }] : []));\n this.activeSession = signal(undefined, ...(ngDevMode ? [{ debugName: \"activeSession\" }] : []));\n this.expireTime = signal(null, ...(ngDevMode ? [{ debugName: \"expireTime\" }] : []));\n this.expirationItems = [\n { name: 'Terminate in 1 week', id: this.AXPTokenExpirationDurations.oneWeek },\n { name: 'Terminate in 1 month', id: this.AXPTokenExpirationDurations.oneMonth },\n { name: 'Terminate in 3 month', id: this.AXPTokenExpirationDurations.threeMonths },\n { name: 'Terminate in 6 month', id: this.AXPTokenExpirationDurations.sixMonths },\n ];\n this.dataSource = new AXDataSource({\n pageSize: 10,\n key: 'id',\n load: async (e) => {\n let items = this.expirationItems;\n return {\n items,\n total: items.length,\n };\n },\n });\n this.userDeviceSessionsService = inject(AXMUserDeviceSessionsService);\n this.cdRef = inject(ChangeDetectorRef);\n this.popupService = inject(AXPopupService);\n this.platform = inject(AXPlatform);\n this.translateService = inject(AXTranslationService);\n this.sessionService = inject(AXPSessionService);\n this.settingService = inject(AXPSettingService);\n // ✅ Use a computed signal to update dynamically when items change\n this.itemsWithIcons = computed(() => this.items().map((item) => ({\n ...item,\n icon: this.getDeviceIcon(item.deviceName),\n })), ...(ngDevMode ? [{ debugName: \"itemsWithIcons\" }] : []));\n this.loadUserSessions();\n }\n async loadUserSessions() {\n try {\n let sessions = await this.userDeviceSessionsService.getSessions();\n this.items.set(sessions);\n try {\n const activeSession = await this.userDeviceSessionsService.getCurrentActiveSessions();\n this.activeSession.set(activeSession);\n }\n catch (error) {\n console.warn('No active session found:', error);\n this.activeSession.set(undefined);\n }\n const sessionTimeout = await this.settingService.scope(AXPPlatformScope.User).get('session-timeout');\n if (sessionTimeout && sessionTimeout.id in this.AXPTokenExpirationDurations) {\n let selectedItem = this.expirationItems.find((item) => item.id === sessionTimeout.id);\n if (selectedItem) {\n this.expireTime.set({ name: selectedItem.name, id: selectedItem.id });\n }\n }\n }\n catch (error) {\n console.error('Error loading user sessions', error);\n }\n }\n getDeviceIcon(deviceName) {\n if (!deviceName)\n return 'fa-solid fa-question'; // Default icon if no name is provided\n const lowerCaseName = deviceName.toLowerCase();\n if (lowerCaseName.includes('windows'))\n return 'fa-brands fa-windows';\n if (lowerCaseName.includes('macbook') || lowerCaseName.includes('mac'))\n return 'fa-brands fa-apple';\n if (lowerCaseName.includes('linux'))\n return 'fa-brands fa-linux';\n if (lowerCaseName.includes('android'))\n return 'fa-brands fa-android';\n if (lowerCaseName.includes('ios') || lowerCaseName.includes('iphone') || lowerCaseName.includes('ipad'))\n return 'fa-brands fa-apple';\n return 'fa-solid fa-desktop'; // Default icon for unknown devices\n }\n onChangeSessionExpireTime(e) {\n this.userDeviceSessionsService.setTokenLifetimeMinutes(e.component.selectedItems[0]);\n }\n async onTerminate(sessionId) {\n if (!sessionId) {\n console.error('No item to terminate');\n return;\n }\n await this.userDeviceSessionsService.terminateSession(sessionId);\n await this.loadUserSessions();\n }\n async onTerminateAll() {\n await this.userDeviceSessionsService.terminateAllSession();\n await this.loadUserSessions();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMUserSessionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMUserSessionsComponent, isStandalone: true, selector: \"ng-component\", ngImport: i0, template: \"<div class=\\\"ax-mx-auto ax-p-6 ax-w-full\\\">\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mb-4\\\">This Device</p>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-primary-200 ax-border ax-bg-primary-50 ax-rounded-lg\\\">\\n <i class=\\\"{{ getDeviceIcon(activeSession()?.deviceName) }} ax-text-primary-500 ax-m-3\\\"></i>\\n </div>\\n @if (activeSession()) {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ activeSession()?.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ activeSession()?.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ activeSession()?.location }} <span>\\n {{ activeSession()?.lastLoginDate ? (activeSession()?.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}\\n </span>\\n </p>\\n </div>\\n </div>\\n }\\n </div>\\n\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-danger-200 ax-border ax-bg-danger-50 ax-rounded-lg\\\">\\n <i class=\\\"ax-icon ax-icon-clear ax-text-danger-500 ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2 ax-cursor-pointer\\\" (click)=\\\"onTerminateAll()\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">Terminate All Other Sessions</div>\\n <p class=\\\"ax-font-normal ax-text-sm ax-subtitle-on-lightest\\\">Log out all devices exept for this one.</p>\\n </div>\\n </div>\\n }\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div>\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mt-4 ax-mb-4\\\">Active Devices</p>\\n @for (item of itemsWithIcons(); track item) {\\n <div>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-relative ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <i\\n class=\\\"ax-icon ax-icon-close ax-absolute ax-end-2 ax-top-2 ax-cursor-pointer\\\"\\n (click)=\\\"onTerminate(item.id)\\\"\\n ></i>\\n <div class=\\\"ax-border ax-rounded-lg\\\">\\n <i class=\\\"{{ item.icon }} ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ item.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ item.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ item.location }} <span>{{ item.lastLoginDate ? (item.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}</span>\\n </p>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n</div>\\n<ax-footer>\\n <div class=\\\"ax-flex-col ax-w-full\\\">\\n <div>\\n <p class=\\\"ax-text-danger-500 ax-font-medium ax-text-base\\\">Terminate Old Sessions</p>\\n </div>\\n <div>\\n <ax-suffix>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-mt-4\\\">\\n <div class=\\\"ax-font-normal ax-text-base ax-text-on-lightest\\\">If inactive for...</div>\\n <div class=\\\"ax-w-3/6\\\">\\n <ax-select-box\\n [ngModel]=\\\"expireTime()\\\"\\n (onValueChanged)=\\\"onChangeSessionExpireTime($event)\\\"\\n [dataSource]=\\\"dataSource\\\"\\n textField=\\\"name\\\"\\n valueField=\\\"id\\\"\\n placeholder=\\\"Choose...\\\"\\n >\\n </ax-select-box>\\n </div>\\n </div>\\n </ax-suffix>\\n </div>\\n </div>\\n</ax-footer>\\n\", dependencies: [{ kind: \"ngmodule\", type: AXButtonModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.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: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXSelectBoxModule }, { kind: \"component\", type: i3.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: AXDropdownModule }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"pipe\", type: i4.DatePipe, name: \"date\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMUserSessionsComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n AXButtonModule,\n AXDecoratorModule,\n CommonModule,\n FormsModule,\n AXSelectBoxModule,\n AXDropdownModule,\n AXPopoverModule,\n ], template: \"<div class=\\\"ax-mx-auto ax-p-6 ax-w-full\\\">\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mb-4\\\">This Device</p>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-primary-200 ax-border ax-bg-primary-50 ax-rounded-lg\\\">\\n <i class=\\\"{{ getDeviceIcon(activeSession()?.deviceName) }} ax-text-primary-500 ax-m-3\\\"></i>\\n </div>\\n @if (activeSession()) {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ activeSession()?.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ activeSession()?.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ activeSession()?.location }} <span>\\n {{ activeSession()?.lastLoginDate ? (activeSession()?.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}\\n </span>\\n </p>\\n </div>\\n </div>\\n }\\n </div>\\n\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-danger-200 ax-border ax-bg-danger-50 ax-rounded-lg\\\">\\n <i class=\\\"ax-icon ax-icon-clear ax-text-danger-500 ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2 ax-cursor-pointer\\\" (click)=\\\"onTerminateAll()\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">Terminate All Other Sessions</div>\\n <p class=\\\"ax-font-normal ax-text-sm ax-subtitle-on-lightest\\\">Log out all devices exept for this one.</p>\\n </div>\\n </div>\\n }\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div>\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mt-4 ax-mb-4\\\">Active Devices</p>\\n @for (item of itemsWithIcons(); track item) {\\n <div>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-relative ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <i\\n class=\\\"ax-icon ax-icon-close ax-absolute ax-end-2 ax-top-2 ax-cursor-pointer\\\"\\n (click)=\\\"onTerminate(item.id)\\\"\\n ></i>\\n <div class=\\\"ax-border ax-rounded-lg\\\">\\n <i class=\\\"{{ item.icon }} ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ item.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ item.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ item.location }} <span>{{ item.lastLoginDate ? (item.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}</span>\\n </p>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n</div>\\n<ax-footer>\\n <div class=\\\"ax-flex-col ax-w-full\\\">\\n <div>\\n <p class=\\\"ax-text-danger-500 ax-font-medium ax-text-base\\\">Terminate Old Sessions</p>\\n </div>\\n <div>\\n <ax-suffix>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-mt-4\\\">\\n <div class=\\\"ax-font-normal ax-text-base ax-text-on-lightest\\\">If inactive for...</div>\\n <div class=\\\"ax-w-3/6\\\">\\n <ax-select-box\\n [ngModel]=\\\"expireTime()\\\"\\n (onValueChanged)=\\\"onChangeSessionExpireTime($event)\\\"\\n [dataSource]=\\\"dataSource\\\"\\n textField=\\\"name\\\"\\n valueField=\\\"id\\\"\\n placeholder=\\\"Choose...\\\"\\n >\\n </ax-select-box>\\n </div>\\n </div>\\n </ax-suffix>\\n </div>\\n </div>\\n</ax-footer>\\n\" }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXNzaW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXV0aC9zcmMvbGliL3BhZ2VzL2FjY291bnQvdXNlci1zZXNzaW9ucy91c2VyLXNlc3Npb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hdXRoL3NyYy9saWIvcGFnZXMvYWNjb3VudC91c2VyLXNlc3Npb25zL3VzZXItc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9D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bUIsRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDaEMsQ0FBQzsrR0F4R1Usd0JBQXdCO21HQUF4Qix3QkFBd0Isd0VDOUJyQyxzOEhBeUZBLDJDRHBFSSxjQUFjLDhCQUNkLGlCQUFpQixxUEFDakIsWUFBWSw4QkFDWixXQUFXLDhWQUNYLGlCQUFpQixndUJBQ2pCLGdCQUFnQiw4QkFDaEIsZUFBZTs7NEZBR04sd0JBQXdCO2tCQWJwQyxTQUFTO3NDQUVTLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsZUFBZTtxQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEYXRhU291cmNlLCBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBBWFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgeyBBWFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQVhQU2V0dGluZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBQbGF0Zm9ybVNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFYTVVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItc2Vzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBBWE1TZWN1cml0eU1hbmFnZW1lbnREZXZpY2VTZXNzaW9uc0VudGl0eU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzL2RldmljZS1zZXNzaW9ucy50eXBlcyc7XG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBWFNlbGVjdEJveE1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNVXNlclNlc3Npb25zQ29tcG9uZW50IHtcbiAgQVhQVG9rZW5FeHBpcmF0aW9uRHVyYXRpb25zID0ge1xuICAgIG9uZVdlZWs6ICdvbmVXZWVrJyxcbiAgICBvbmVNb250aDogJ29uZU1vbnRoJyxcbiAgICB0aHJlZU1vbnRoczogJ3RocmVlTW9udGhzJyxcbiAgICBzaXhNb250aHM6ICdzaXhNb250aHMnLFxuICB9O1xuXG4gIGl0ZW1zID0gc2lnbmFsPEFYTVNlY3VyaXR5TWFuYWdlbWVudERldmljZVNlc3Npb25zRW50aXR5TW9kZWxbXT4oW10pO1xuICBhY3RpdmVTZXNzaW9uID0gc2lnbmFsPEFYTVNlY3VyaXR5TWFuYWdlbWVudERldmljZVNlc3Npb25zRW50aXR5TW9kZWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGV4cGlyZVRpbWUgPSBzaWduYWw8eyBuYW1lOiBzdHJpbmc7IGlkOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuXG4gIGV4cGlyYXRpb25JdGVtcyA9IFtcbiAgICB7IG5hbWU6ICdUZXJtaW5hdGUgaW4gMSB3ZWVrJywgaWQ6IHRoaXMuQVhQVG9rZW5FeHBpcmF0aW9uRHVyYXRpb25zLm9uZVdlZWsgfSxcbiAgICB7IG5hbWU6ICdUZXJtaW5hdGUgaW4gMSBtb250aCcsIGlkOiB0aGlzLkFYUFRva2VuRXhwaXJhdGlvbkR1cmF0aW9ucy5vbmVNb250aCB9LFxuICAgIHsgbmFtZTogJ1Rlcm1pbmF0ZSBpbiAzIG1vbnRoJywgaWQ6IHRoaXMuQVhQVG9rZW5FeHBpcmF0aW9uRHVyYXRpb25zLnRocmVlTW9udGhzIH0sXG4gICAgeyBuYW1lOiAnVGVybWluYXRlIGluIDYgbW9udGgnLCBpZDogdGhpcy5BWFBUb2tlbkV4cGlyYXRpb25EdXJhdGlvbnMuc2l4TW9udGhzIH0sXG4gIF07XG4gIHByb3RlY3RlZCBkYXRhU291cmNlID0gbmV3IEFYRGF0YVNvdXJjZTxhbnk+KHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAga2V5OiAnaWQnLFxuICAgIGxvYWQ6IGFzeW5jIChlKSA9PiB7XG4gICAgICBsZXQgaXRlbXMgPSB0aGlzLmV4cGlyYXRpb25JdGVtcztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0b3RhbDogaXRlbXMubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9LFxuICB9KTtcbiAgcHJpdmF0ZSB1c2VyRGV2aWNlU2Vzc2lvbnNTZXJ2aWNlID0gaW5qZWN0KEFYTVVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIGNkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICBwcml2YXRlIHBsYXRmb3JtID0gaW5qZWN0KEFYUGxhdGZvcm0pO1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzZXR0aW5nU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2FkVXNlclNlc3Npb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRVc2VyU2Vzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IHRoaXMudXNlckRldmljZVNlc3Npb25zU2VydmljZS5nZXRTZXNzaW9ucygpO1xuICAgICAgdGhpcy5pdGVtcy5zZXQoc2Vzc2lvbnMpO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhY3RpdmVTZXNzaW9uID0gYXdhaXQgdGhpcy51c2VyRGV2aWNlU2Vzc2lvbnNTZXJ2aWNlLmdldEN1cnJlbnRBY3RpdmVTZXNzaW9ucygpO1xuICAgICAgICB0aGlzLmFjdGl2ZVNlc3Npb24uc2V0KGFjdGl2ZVNlc3Npb24pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyBhY3RpdmUgc2Vzc2lvbiBmb3VuZDonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuYWN0aXZlU2Vzc2lvbi5zZXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3Qgc2Vzc2lvblRpbWVvdXQgPSBhd2FpdCB0aGlzLnNldHRpbmdTZXJ2aWNlLnNjb3BlKEFYUFBsYXRmb3JtU2NvcGUuVXNlcikuZ2V0KCdzZXNzaW9uLXRpbWVvdXQnKTtcbiAgICAgIGlmIChzZXNzaW9uVGltZW91dCAmJiBzZXNzaW9uVGltZW91dC5pZCBpbiB0aGlzLkFYUFRva2VuRXhwaXJhdGlvbkR1cmF0aW9ucykge1xuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtID0gdGhpcy5leHBpcmF0aW9uSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gc2Vzc2lvblRpbWVvdXQuaWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgdGhpcy5leHBpcmVUaW1lLnNldCh7IG5hbWU6IHNlbGVjdGVkSXRlbS5uYW1lLCBpZDogc2VsZWN0ZWRJdGVtLmlkIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgdXNlciBzZXNzaW9ucycsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyDinIUgVXNlIGEgY29tcHV0ZWQgc2lnbmFsIHRvIHVwZGF0ZSBkeW5hbWljYWxseSB3aGVuIGl0ZW1zIGNoYW5nZVxuICBpdGVtc1dpdGhJY29ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5pdGVtcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBpY29uOiB0aGlzLmdldERldmljZUljb24oaXRlbS5kZXZpY2VOYW1lKSxcbiAgICB9KSksXG4gICk7XG5cbiAgZ2V0RGV2aWNlSWNvbihkZXZpY2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghZGV2aWNlTmFtZSkgcmV0dXJuICdmYS1zb2xpZCBmYS1xdWVzdGlvbic7IC8vIERlZmF1bHQgaWNvbiBpZiBubyBuYW1lIGlzIHByb3ZpZGVkXG5cbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID0gZGV2aWNlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ3dpbmRvd3MnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtd2luZG93cyc7XG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ21hY2Jvb2snKSB8fCBsb3dlckNhc2VOYW1lLmluY2x1ZGVzKCdtYWMnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtYXBwbGUnO1xuICAgIGlmIChsb3dlckNhc2VOYW1lLmluY2x1ZGVzKCdsaW51eCcpKSByZXR1cm4gJ2ZhLWJyYW5kcyBmYS1saW51eCc7XG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2FuZHJvaWQnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtYW5kcm9pZCc7XG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2lvcycpIHx8IGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2lwaG9uZScpIHx8IGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2lwYWQnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtYXBwbGUnO1xuXG4gICAgcmV0dXJuICdmYS1zb2xpZCBmYS1kZXNrdG9wJzsgLy8gRGVmYXVsdCBpY29uIGZvciB1bmtub3duIGRldmljZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNoYW5nZVNlc3Npb25FeHBpcmVUaW1lKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLnVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2Uuc2V0VG9rZW5MaWZldGltZU1pbnV0ZXMoZS5jb21wb25lbnQuc2VsZWN0ZWRJdGVtc1swXSk7XG4gIH1cblxuICBhc3luYyBvblRlcm1pbmF0ZShzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBpdGVtIHRvIHRlcm1pbmF0ZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2UudGVybWluYXRlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgIGF3YWl0IHRoaXMubG9hZFVzZXJTZXNzaW9ucygpO1xuICB9XG5cbiAgYXN5bmMgb25UZXJtaW5hdGVBbGwoKSB7XG4gICAgYXdhaXQgdGhpcy51c2VyRGV2aWNlU2Vzc2lvbnNTZXJ2aWNlLnRlcm1pbmF0ZUFsbFNlc3Npb24oKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRVc2VyU2Vzc2lvbnMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LW14LWF1dG8gYXgtcC02IGF4LXctZnVsbFwiPlxuICA8cCBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3QgYXgtbWItNFwiPlRoaXMgRGV2aWNlPC9wPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJheC1mbGV4IGF4LWJvcmRlciBheC1pdGVtcy1jZW50ZXIgYXgtcm91bmRlZC1sZyBheC1ib3JkZXItbGlnaHRlc3QgYXgtYmctbGlnaHRlc3QgYXgtdGV4dC1vbi1saWdodGVzdCBheC1tYi0zIGF4LXAtM1wiXG4gICAgPlxuICAgIDxkaXYgY2xhc3M9XCJheC1ib3JkZXItcHJpbWFyeS0yMDAgYXgtYm9yZGVyIGF4LWJnLXByaW1hcnktNTAgYXgtcm91bmRlZC1sZ1wiPlxuICAgICAgPGkgY2xhc3M9XCJ7eyBnZXREZXZpY2VJY29uKGFjdGl2ZVNlc3Npb24oKT8uZGV2aWNlTmFtZSkgfX0gYXgtdGV4dC1wcmltYXJ5LTUwMCBheC1tLTNcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgQGlmIChhY3RpdmVTZXNzaW9uKCkpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW1sLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3RcIj57eyBhY3RpdmVTZXNzaW9uKCk/LmRldmljZU5hbWUgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1ub3JtYWwgYXgtdGV4dC1zbSBheC10ZXh0LW9uLWxpZ2h0ZXN0XCI+e3sgYWN0aXZlU2Vzc2lvbigpPy5vcGVyYXRpbmdTeXN0ZW0gfX08L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF4LWZvbnQtbm9ybWFsIGF4LXRleHQteHMgYXgtc3VidGl0bGUtb24tbGlnaHRlc3RcIj5cbiAgICAgICAgICAgIHt7IGFjdGl2ZVNlc3Npb24oKT8ubG9jYXRpb24gfX0gPHNwYW4+XG4gICAgICAgICAgICAgIHt7IGFjdGl2ZVNlc3Npb24oKT8ubGFzdExvZ2luRGF0ZSA/IChhY3RpdmVTZXNzaW9uKCk/Lmxhc3RMb2dpbkRhdGUgfCBkYXRlOiAneXl5eS9NTS9kZCBISDptbScpIDogJycgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICBAaWYgKGl0ZW1zV2l0aEljb25zKCkgJiYgaXRlbXNXaXRoSWNvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWJvcmRlciBheC1pdGVtcy1jZW50ZXIgYXgtcm91bmRlZC1sZyBheC1ib3JkZXItbGlnaHRlc3QgYXgtYmctbGlnaHRlc3QgYXgtdGV4dC1vbi1saWdodGVzdCBheC1tYi0zIGF4LXAtM1wiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtYm9yZGVyLWRhbmdlci0yMDAgYXgtYm9yZGVyIGF4LWJnLWRhbmdlci01MCBheC1yb3VuZGVkLWxnXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWNsZWFyIGF4LXRleHQtZGFuZ2VyLTUwMCBheC1tLTNcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW1sLTIgYXgtY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25UZXJtaW5hdGVBbGwoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3RcIj5UZXJtaW5hdGUgQWxsIE90aGVyIFNlc3Npb25zPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwiYXgtZm9udC1ub3JtYWwgYXgtdGV4dC1zbSBheC1zdWJ0aXRsZS1vbi1saWdodGVzdFwiPkxvZyBvdXQgYWxsIGRldmljZXMgZXhlcHQgZm9yIHRoaXMgb25lLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoaXRlbXNXaXRoSWNvbnMoKSAmJiBpdGVtc1dpdGhJY29ucygpLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2PlxuICAgICAgPHAgY2xhc3M9XCJheC1mb250LXNlbWlib2xkIGF4LXRleHQtYmFzZSBheC10ZXh0LW9uLWxpZ2h0ZXN0IGF4LW10LTQgYXgtbWItNFwiPkFjdGl2ZSBEZXZpY2VzPC9wPlxuICAgICAgQGZvciAoaXRlbSBvZiBpdGVtc1dpdGhJY29ucygpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWJvcmRlciBheC1pdGVtcy1jZW50ZXIgYXgtcmVsYXRpdmUgYXgtcm91bmRlZC1sZyBheC1ib3JkZXItbGlnaHRlc3QgYXgtYmctbGlnaHRlc3QgYXgtdGV4dC1vbi1saWdodGVzdCBheC1tYi0zIGF4LXAtM1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jbG9zZSBheC1hYnNvbHV0ZSBheC1lbmQtMiBheC10b3AtMiBheC1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblRlcm1pbmF0ZShpdGVtLmlkKVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWJvcmRlciBheC1yb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwie3sgaXRlbS5pY29uIH19IGF4LW0tM1wiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtbWwtMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3RcIj57eyBpdGVtLmRldmljZU5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZvbnQtbm9ybWFsIGF4LXRleHQtc20gYXgtdGV4dC1vbi1saWdodGVzdFwiPnt7IGl0ZW0ub3BlcmF0aW5nU3lzdGVtIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXgtZm9udC1ub3JtYWwgYXgtdGV4dC14cyBheC1zdWJ0aXRsZS1vbi1saWdodGVzdFwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubG9jYXRpb24gfX0gPHNwYW4+e3sgaXRlbS5sYXN0TG9naW5EYXRlID8gKGl0ZW0ubGFzdExvZ2luRGF0ZSB8IGRhdGU6ICd5eXl5L01NL2RkIEhIOm1tJykgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbjxheC1mb290ZXI+XG4gIDxkaXYgY2xhc3M9XCJheC1mbGV4LWNvbCBheC13LWZ1bGxcIj5cbiAgICA8ZGl2PlxuICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LWRhbmdlci01MDAgYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlXCI+VGVybWluYXRlIE9sZCBTZXNzaW9uczwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC1tdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZvbnQtbm9ybWFsIGF4LXRleHQtYmFzZSBheC10ZXh0LW9uLWxpZ2h0ZXN0XCI+SWYgaW5hY3RpdmUgZm9yLi4uPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXctMy82XCI+XG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJleHBpcmVUaW1lKClcIlxuICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwib25DaGFuZ2VTZXNzaW9uRXhwaXJlVGltZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNob29zZS4uLlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2F4LXN1ZmZpeD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2F4LWZvb3Rlcj5cbiJdfQ=="],"names":["i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-auth-user-sessions.component-CbMB_YWS.mjs","sources":["../tmp-esm2022/auth/lib/pages/account/user-sessions/user-sessions.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPSettingService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXMUserDeviceSessionsService } from './user-sessions.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"@acorex/components/select-box\";\nimport * as i4 from \"@angular/common\";\nexport class AXMUserSessionsComponent {\n constructor() {\n this.AXPTokenExpirationDurations = {\n oneWeek: 'oneWeek',\n oneMonth: 'oneMonth',\n threeMonths: 'threeMonths',\n sixMonths: 'sixMonths',\n };\n this.items = signal([], ...(ngDevMode ? [{ debugName: \"items\" }] : []));\n this.activeSession = signal(undefined, ...(ngDevMode ? [{ debugName: \"activeSession\" }] : []));\n this.expireTime = signal(null, ...(ngDevMode ? [{ debugName: \"expireTime\" }] : []));\n this.expirationItems = [\n { name: 'Terminate in 1 week', id: this.AXPTokenExpirationDurations.oneWeek },\n { name: 'Terminate in 1 month', id: this.AXPTokenExpirationDurations.oneMonth },\n { name: 'Terminate in 3 month', id: this.AXPTokenExpirationDurations.threeMonths },\n { name: 'Terminate in 6 month', id: this.AXPTokenExpirationDurations.sixMonths },\n ];\n this.dataSource = new AXDataSource({\n pageSize: 10,\n key: 'id',\n load: async (e) => {\n let items = this.expirationItems;\n return {\n items,\n total: items.length,\n };\n },\n });\n this.userDeviceSessionsService = inject(AXMUserDeviceSessionsService);\n this.cdRef = inject(ChangeDetectorRef);\n this.popupService = inject(AXPopupService);\n this.platform = inject(AXPlatform);\n this.translateService = inject(AXTranslationService);\n this.sessionService = inject(AXPSessionService);\n this.settingService = inject(AXPSettingService);\n // ✅ Use a computed signal to update dynamically when items change\n this.itemsWithIcons = computed(() => this.items().map((item) => ({\n ...item,\n icon: this.getDeviceIcon(item.deviceName),\n })), ...(ngDevMode ? [{ debugName: \"itemsWithIcons\" }] : []));\n this.loadUserSessions();\n }\n async loadUserSessions() {\n try {\n let sessions = await this.userDeviceSessionsService.getSessions();\n this.items.set(sessions);\n try {\n const activeSession = await this.userDeviceSessionsService.getCurrentActiveSessions();\n this.activeSession.set(activeSession);\n }\n catch (error) {\n console.warn('No active session found:', error);\n this.activeSession.set(undefined);\n }\n const sessionTimeout = await this.settingService.scope(AXPPlatformScope.User).get('session-timeout');\n if (sessionTimeout && sessionTimeout.id in this.AXPTokenExpirationDurations) {\n let selectedItem = this.expirationItems.find((item) => item.id === sessionTimeout.id);\n if (selectedItem) {\n this.expireTime.set({ name: selectedItem.name, id: selectedItem.id });\n }\n }\n }\n catch (error) {\n console.error('Error loading user sessions', error);\n }\n }\n getDeviceIcon(deviceName) {\n if (!deviceName)\n return 'fa-solid fa-question'; // Default icon if no name is provided\n const lowerCaseName = deviceName.toLowerCase();\n if (lowerCaseName.includes('windows'))\n return 'fa-brands fa-windows';\n if (lowerCaseName.includes('macbook') || lowerCaseName.includes('mac'))\n return 'fa-brands fa-apple';\n if (lowerCaseName.includes('linux'))\n return 'fa-brands fa-linux';\n if (lowerCaseName.includes('android'))\n return 'fa-brands fa-android';\n if (lowerCaseName.includes('ios') || lowerCaseName.includes('iphone') || lowerCaseName.includes('ipad'))\n return 'fa-brands fa-apple';\n return 'fa-solid fa-desktop'; // Default icon for unknown devices\n }\n onChangeSessionExpireTime(e) {\n this.userDeviceSessionsService.setTokenLifetimeMinutes(e.component.selectedItems[0]);\n }\n async onTerminate(sessionId) {\n if (!sessionId) {\n console.error('No item to terminate');\n return;\n }\n await this.userDeviceSessionsService.terminateSession(sessionId);\n await this.loadUserSessions();\n }\n async onTerminateAll() {\n await this.userDeviceSessionsService.terminateAllSession();\n await this.loadUserSessions();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMUserSessionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMUserSessionsComponent, isStandalone: true, selector: \"ng-component\", ngImport: i0, template: \"<div class=\\\"ax-mx-auto ax-p-6 ax-w-full\\\">\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mb-4\\\">This Device</p>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-primary-200 ax-border ax-bg-primary-50 ax-rounded-lg\\\">\\n <i class=\\\"{{ getDeviceIcon(activeSession()?.deviceName) }} ax-text-primary-500 ax-m-3\\\"></i>\\n </div>\\n @if (activeSession()) {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ activeSession()?.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ activeSession()?.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ activeSession()?.location }} <span>\\n {{ activeSession()?.lastLoginDate ? (activeSession()?.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}\\n </span>\\n </p>\\n </div>\\n </div>\\n }\\n </div>\\n\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-danger-200 ax-border ax-bg-danger-50 ax-rounded-lg\\\">\\n <i class=\\\"ax-icon ax-icon-clear ax-text-danger-500 ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2 ax-cursor-pointer\\\" (click)=\\\"onTerminateAll()\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">Terminate All Other Sessions</div>\\n <p class=\\\"ax-font-normal ax-text-sm ax-subtitle-on-lightest\\\">Log out all devices exept for this one.</p>\\n </div>\\n </div>\\n }\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div>\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mt-4 ax-mb-4\\\">Active Devices</p>\\n @for (item of itemsWithIcons(); track item) {\\n <div>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-relative ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <i\\n class=\\\"ax-icon ax-icon-close ax-absolute ax-end-2 ax-top-2 ax-cursor-pointer\\\"\\n (click)=\\\"onTerminate(item.id)\\\"\\n ></i>\\n <div class=\\\"ax-border ax-rounded-lg\\\">\\n <i class=\\\"{{ item.icon }} ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ item.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ item.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ item.location }} <span>{{ item.lastLoginDate ? (item.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}</span>\\n </p>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n</div>\\n<ax-footer>\\n <div class=\\\"ax-flex-col ax-w-full\\\">\\n <div>\\n <p class=\\\"ax-text-danger-500 ax-font-medium ax-text-base\\\">Terminate Old Sessions</p>\\n </div>\\n <div>\\n <ax-suffix>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-mt-4\\\">\\n <div class=\\\"ax-font-normal ax-text-base ax-text-on-lightest\\\">If inactive for...</div>\\n <div class=\\\"ax-w-3/6\\\">\\n <ax-select-box\\n [ngModel]=\\\"expireTime()\\\"\\n (onValueChanged)=\\\"onChangeSessionExpireTime($event)\\\"\\n [dataSource]=\\\"dataSource\\\"\\n textField=\\\"name\\\"\\n valueField=\\\"id\\\"\\n placeholder=\\\"Choose...\\\"\\n >\\n </ax-select-box>\\n </div>\\n </div>\\n </ax-suffix>\\n </div>\\n </div>\\n</ax-footer>\\n\", dependencies: [{ kind: \"ngmodule\", type: AXButtonModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.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: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXSelectBoxModule }, { kind: \"component\", type: i3.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: AXDropdownModule }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"pipe\", type: i4.DatePipe, name: \"date\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMUserSessionsComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n AXButtonModule,\n AXDecoratorModule,\n CommonModule,\n FormsModule,\n AXSelectBoxModule,\n AXDropdownModule,\n AXPopoverModule,\n ], template: \"<div class=\\\"ax-mx-auto ax-p-6 ax-w-full\\\">\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mb-4\\\">This Device</p>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-primary-200 ax-border ax-bg-primary-50 ax-rounded-lg\\\">\\n <i class=\\\"{{ getDeviceIcon(activeSession()?.deviceName) }} ax-text-primary-500 ax-m-3\\\"></i>\\n </div>\\n @if (activeSession()) {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ activeSession()?.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ activeSession()?.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ activeSession()?.location }} <span>\\n {{ activeSession()?.lastLoginDate ? (activeSession()?.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}\\n </span>\\n </p>\\n </div>\\n </div>\\n }\\n </div>\\n\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <div class=\\\"ax-border-danger-200 ax-border ax-bg-danger-50 ax-rounded-lg\\\">\\n <i class=\\\"ax-icon ax-icon-clear ax-text-danger-500 ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2 ax-cursor-pointer\\\" (click)=\\\"onTerminateAll()\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">Terminate All Other Sessions</div>\\n <p class=\\\"ax-font-normal ax-text-sm ax-subtitle-on-lightest\\\">Log out all devices exept for this one.</p>\\n </div>\\n </div>\\n }\\n @if (itemsWithIcons() && itemsWithIcons().length > 0) {\\n <div>\\n <p class=\\\"ax-font-semibold ax-text-base ax-text-on-lightest ax-mt-4 ax-mb-4\\\">Active Devices</p>\\n @for (item of itemsWithIcons(); track item) {\\n <div>\\n <div\\n class=\\\"ax-flex ax-border ax-items-center ax-relative ax-rounded-lg ax-border-lightest ax-bg-lightest ax-text-on-lightest ax-mb-3 ax-p-3\\\"\\n >\\n <i\\n class=\\\"ax-icon ax-icon-close ax-absolute ax-end-2 ax-top-2 ax-cursor-pointer\\\"\\n (click)=\\\"onTerminate(item.id)\\\"\\n ></i>\\n <div class=\\\"ax-border ax-rounded-lg\\\">\\n <i class=\\\"{{ item.icon }} ax-m-3\\\"></i>\\n </div>\\n <div class=\\\"ax-flex ax-flex-col ax-ml-2\\\">\\n <div class=\\\"ax-font-medium ax-text-base ax-text-on-lightest\\\">{{ item.deviceName }}</div>\\n <div class=\\\"ax-font-normal ax-text-sm ax-text-on-lightest\\\">{{ item.operatingSystem }}</div>\\n <p class=\\\"ax-font-normal ax-text-xs ax-subtitle-on-lightest\\\">\\n {{ item.location }} <span>{{ item.lastLoginDate ? (item.lastLoginDate | date: 'yyyy/MM/dd HH:mm') : '' }}</span>\\n </p>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n</div>\\n<ax-footer>\\n <div class=\\\"ax-flex-col ax-w-full\\\">\\n <div>\\n <p class=\\\"ax-text-danger-500 ax-font-medium ax-text-base\\\">Terminate Old Sessions</p>\\n </div>\\n <div>\\n <ax-suffix>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-mt-4\\\">\\n <div class=\\\"ax-font-normal ax-text-base ax-text-on-lightest\\\">If inactive for...</div>\\n <div class=\\\"ax-w-3/6\\\">\\n <ax-select-box\\n [ngModel]=\\\"expireTime()\\\"\\n (onValueChanged)=\\\"onChangeSessionExpireTime($event)\\\"\\n [dataSource]=\\\"dataSource\\\"\\n textField=\\\"name\\\"\\n valueField=\\\"id\\\"\\n placeholder=\\\"Choose...\\\"\\n >\\n </ax-select-box>\\n </div>\\n </div>\\n </ax-suffix>\\n </div>\\n </div>\\n</ax-footer>\\n\" }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXNzaW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXV0aC9zcmMvbGliL3BhZ2VzL2FjY291bnQvdXNlci1zZXNzaW9ucy91c2VyLXNlc3Npb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hdXRoL3NyYy9saWIvcGFnZXMvYWNjb3VudC91c2VyLXNlc3Npb25zL3VzZXItc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9D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bUIsRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDaEMsQ0FBQzsrR0F4R1Usd0JBQXdCO21HQUF4Qix3QkFBd0Isd0VDOUJyQyxzOEhBeUZBLDJDRHBFSSxjQUFjLDhCQUNkLGlCQUFpQixxUEFDakIsWUFBWSw4QkFDWixXQUFXLDhWQUNYLGlCQUFpQixndUJBQ2pCLGdCQUFnQiw4QkFDaEIsZUFBZTs7NEZBR04sd0JBQXdCO2tCQWJwQyxTQUFTO3NDQUVTLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsZUFBZTtxQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEYXRhU291cmNlLCBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBBWFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgeyBBWFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQVhQU2V0dGluZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBQbGF0Zm9ybVNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFYTVVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItc2Vzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBBWE1TZWN1cml0eU1hbmFnZW1lbnREZXZpY2VTZXNzaW9uc0VudGl0eU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzL2RldmljZS1zZXNzaW9ucy50eXBlcyc7XG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBWFNlbGVjdEJveE1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNVXNlclNlc3Npb25zQ29tcG9uZW50IHtcbiAgQVhQVG9rZW5FeHBpcmF0aW9uRHVyYXRpb25zID0ge1xuICAgIG9uZVdlZWs6ICdvbmVXZWVrJyxcbiAgICBvbmVNb250aDogJ29uZU1vbnRoJyxcbiAgICB0aHJlZU1vbnRoczogJ3RocmVlTW9udGhzJyxcbiAgICBzaXhNb250aHM6ICdzaXhNb250aHMnLFxuICB9O1xuXG4gIGl0ZW1zID0gc2lnbmFsPEFYTVNlY3VyaXR5TWFuYWdlbWVudERldmljZVNlc3Npb25zRW50aXR5TW9kZWxbXT4oW10pO1xuICBhY3RpdmVTZXNzaW9uID0gc2lnbmFsPEFYTVNlY3VyaXR5TWFuYWdlbWVudERldmljZVNlc3Npb25zRW50aXR5TW9kZWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGV4cGlyZVRpbWUgPSBzaWduYWw8eyBuYW1lOiBzdHJpbmc7IGlkOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuXG4gIGV4cGlyYXRpb25JdGVtcyA9IFtcbiAgICB7IG5hbWU6ICdUZXJtaW5hdGUgaW4gMSB3ZWVrJywgaWQ6IHRoaXMuQVhQVG9rZW5FeHBpcmF0aW9uRHVyYXRpb25zLm9uZVdlZWsgfSxcbiAgICB7IG5hbWU6ICdUZXJtaW5hdGUgaW4gMSBtb250aCcsIGlkOiB0aGlzLkFYUFRva2VuRXhwaXJhdGlvbkR1cmF0aW9ucy5vbmVNb250aCB9LFxuICAgIHsgbmFtZTogJ1Rlcm1pbmF0ZSBpbiAzIG1vbnRoJywgaWQ6IHRoaXMuQVhQVG9rZW5FeHBpcmF0aW9uRHVyYXRpb25zLnRocmVlTW9udGhzIH0sXG4gICAgeyBuYW1lOiAnVGVybWluYXRlIGluIDYgbW9udGgnLCBpZDogdGhpcy5BWFBUb2tlbkV4cGlyYXRpb25EdXJhdGlvbnMuc2l4TW9udGhzIH0sXG4gIF07XG4gIHByb3RlY3RlZCBkYXRhU291cmNlID0gbmV3IEFYRGF0YVNvdXJjZTxhbnk+KHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAga2V5OiAnaWQnLFxuICAgIGxvYWQ6IGFzeW5jIChlKSA9PiB7XG4gICAgICBsZXQgaXRlbXMgPSB0aGlzLmV4cGlyYXRpb25JdGVtcztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0b3RhbDogaXRlbXMubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9LFxuICB9KTtcbiAgcHJpdmF0ZSB1c2VyRGV2aWNlU2Vzc2lvbnNTZXJ2aWNlID0gaW5qZWN0KEFYTVVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIGNkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICBwcml2YXRlIHBsYXRmb3JtID0gaW5qZWN0KEFYUGxhdGZvcm0pO1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzZXR0aW5nU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2FkVXNlclNlc3Npb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRVc2VyU2Vzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IHRoaXMudXNlckRldmljZVNlc3Npb25zU2VydmljZS5nZXRTZXNzaW9ucygpO1xuICAgICAgdGhpcy5pdGVtcy5zZXQoc2Vzc2lvbnMpO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhY3RpdmVTZXNzaW9uID0gYXdhaXQgdGhpcy51c2VyRGV2aWNlU2Vzc2lvbnNTZXJ2aWNlLmdldEN1cnJlbnRBY3RpdmVTZXNzaW9ucygpO1xuICAgICAgICB0aGlzLmFjdGl2ZVNlc3Npb24uc2V0KGFjdGl2ZVNlc3Npb24pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyBhY3RpdmUgc2Vzc2lvbiBmb3VuZDonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuYWN0aXZlU2Vzc2lvbi5zZXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3Qgc2Vzc2lvblRpbWVvdXQgPSBhd2FpdCB0aGlzLnNldHRpbmdTZXJ2aWNlLnNjb3BlKEFYUFBsYXRmb3JtU2NvcGUuVXNlcikuZ2V0KCdzZXNzaW9uLXRpbWVvdXQnKTtcbiAgICAgIGlmIChzZXNzaW9uVGltZW91dCAmJiBzZXNzaW9uVGltZW91dC5pZCBpbiB0aGlzLkFYUFRva2VuRXhwaXJhdGlvbkR1cmF0aW9ucykge1xuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtID0gdGhpcy5leHBpcmF0aW9uSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gc2Vzc2lvblRpbWVvdXQuaWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgdGhpcy5leHBpcmVUaW1lLnNldCh7IG5hbWU6IHNlbGVjdGVkSXRlbS5uYW1lLCBpZDogc2VsZWN0ZWRJdGVtLmlkIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgdXNlciBzZXNzaW9ucycsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyDinIUgVXNlIGEgY29tcHV0ZWQgc2lnbmFsIHRvIHVwZGF0ZSBkeW5hbWljYWxseSB3aGVuIGl0ZW1zIGNoYW5nZVxuICBpdGVtc1dpdGhJY29ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5pdGVtcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBpY29uOiB0aGlzLmdldERldmljZUljb24oaXRlbS5kZXZpY2VOYW1lKSxcbiAgICB9KSksXG4gICk7XG5cbiAgZ2V0RGV2aWNlSWNvbihkZXZpY2VOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghZGV2aWNlTmFtZSkgcmV0dXJuICdmYS1zb2xpZCBmYS1xdWVzdGlvbic7IC8vIERlZmF1bHQgaWNvbiBpZiBubyBuYW1lIGlzIHByb3ZpZGVkXG5cbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID0gZGV2aWNlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ3dpbmRvd3MnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtd2luZG93cyc7XG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ21hY2Jvb2snKSB8fCBsb3dlckNhc2VOYW1lLmluY2x1ZGVzKCdtYWMnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtYXBwbGUnO1xuICAgIGlmIChsb3dlckNhc2VOYW1lLmluY2x1ZGVzKCdsaW51eCcpKSByZXR1cm4gJ2ZhLWJyYW5kcyBmYS1saW51eCc7XG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2FuZHJvaWQnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtYW5kcm9pZCc7XG4gICAgaWYgKGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2lvcycpIHx8IGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2lwaG9uZScpIHx8IGxvd2VyQ2FzZU5hbWUuaW5jbHVkZXMoJ2lwYWQnKSkgcmV0dXJuICdmYS1icmFuZHMgZmEtYXBwbGUnO1xuXG4gICAgcmV0dXJuICdmYS1zb2xpZCBmYS1kZXNrdG9wJzsgLy8gRGVmYXVsdCBpY29uIGZvciB1bmtub3duIGRldmljZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNoYW5nZVNlc3Npb25FeHBpcmVUaW1lKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLnVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2Uuc2V0VG9rZW5MaWZldGltZU1pbnV0ZXMoZS5jb21wb25lbnQuc2VsZWN0ZWRJdGVtc1swXSk7XG4gIH1cblxuICBhc3luYyBvblRlcm1pbmF0ZShzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBpdGVtIHRvIHRlcm1pbmF0ZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnVzZXJEZXZpY2VTZXNzaW9uc1NlcnZpY2UudGVybWluYXRlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgIGF3YWl0IHRoaXMubG9hZFVzZXJTZXNzaW9ucygpO1xuICB9XG5cbiAgYXN5bmMgb25UZXJtaW5hdGVBbGwoKSB7XG4gICAgYXdhaXQgdGhpcy51c2VyRGV2aWNlU2Vzc2lvbnNTZXJ2aWNlLnRlcm1pbmF0ZUFsbFNlc3Npb24oKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRVc2VyU2Vzc2lvbnMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LW14LWF1dG8gYXgtcC02IGF4LXctZnVsbFwiPlxuICA8cCBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3QgYXgtbWItNFwiPlRoaXMgRGV2aWNlPC9wPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJheC1mbGV4IGF4LWJvcmRlciBheC1pdGVtcy1jZW50ZXIgYXgtcm91bmRlZC1sZyBheC1ib3JkZXItbGlnaHRlc3QgYXgtYmctbGlnaHRlc3QgYXgtdGV4dC1vbi1saWdodGVzdCBheC1tYi0zIGF4LXAtM1wiXG4gICAgPlxuICAgIDxkaXYgY2xhc3M9XCJheC1ib3JkZXItcHJpbWFyeS0yMDAgYXgtYm9yZGVyIGF4LWJnLXByaW1hcnktNTAgYXgtcm91bmRlZC1sZ1wiPlxuICAgICAgPGkgY2xhc3M9XCJ7eyBnZXREZXZpY2VJY29uKGFjdGl2ZVNlc3Npb24oKT8uZGV2aWNlTmFtZSkgfX0gYXgtdGV4dC1wcmltYXJ5LTUwMCBheC1tLTNcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgQGlmIChhY3RpdmVTZXNzaW9uKCkpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW1sLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3RcIj57eyBhY3RpdmVTZXNzaW9uKCk/LmRldmljZU5hbWUgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1ub3JtYWwgYXgtdGV4dC1zbSBheC10ZXh0LW9uLWxpZ2h0ZXN0XCI+e3sgYWN0aXZlU2Vzc2lvbigpPy5vcGVyYXRpbmdTeXN0ZW0gfX08L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF4LWZvbnQtbm9ybWFsIGF4LXRleHQteHMgYXgtc3VidGl0bGUtb24tbGlnaHRlc3RcIj5cbiAgICAgICAgICAgIHt7IGFjdGl2ZVNlc3Npb24oKT8ubG9jYXRpb24gfX0gPHNwYW4+XG4gICAgICAgICAgICAgIHt7IGFjdGl2ZVNlc3Npb24oKT8ubGFzdExvZ2luRGF0ZSA/IChhY3RpdmVTZXNzaW9uKCk/Lmxhc3RMb2dpbkRhdGUgfCBkYXRlOiAneXl5eS9NTS9kZCBISDptbScpIDogJycgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICBAaWYgKGl0ZW1zV2l0aEljb25zKCkgJiYgaXRlbXNXaXRoSWNvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWJvcmRlciBheC1pdGVtcy1jZW50ZXIgYXgtcm91bmRlZC1sZyBheC1ib3JkZXItbGlnaHRlc3QgYXgtYmctbGlnaHRlc3QgYXgtdGV4dC1vbi1saWdodGVzdCBheC1tYi0zIGF4LXAtM1wiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtYm9yZGVyLWRhbmdlci0yMDAgYXgtYm9yZGVyIGF4LWJnLWRhbmdlci01MCBheC1yb3VuZGVkLWxnXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWNsZWFyIGF4LXRleHQtZGFuZ2VyLTUwMCBheC1tLTNcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW1sLTIgYXgtY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25UZXJtaW5hdGVBbGwoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3RcIj5UZXJtaW5hdGUgQWxsIE90aGVyIFNlc3Npb25zPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwiYXgtZm9udC1ub3JtYWwgYXgtdGV4dC1zbSBheC1zdWJ0aXRsZS1vbi1saWdodGVzdFwiPkxvZyBvdXQgYWxsIGRldmljZXMgZXhlcHQgZm9yIHRoaXMgb25lLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoaXRlbXNXaXRoSWNvbnMoKSAmJiBpdGVtc1dpdGhJY29ucygpLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2PlxuICAgICAgPHAgY2xhc3M9XCJheC1mb250LXNlbWlib2xkIGF4LXRleHQtYmFzZSBheC10ZXh0LW9uLWxpZ2h0ZXN0IGF4LW10LTQgYXgtbWItNFwiPkFjdGl2ZSBEZXZpY2VzPC9wPlxuICAgICAgQGZvciAoaXRlbSBvZiBpdGVtc1dpdGhJY29ucygpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWJvcmRlciBheC1pdGVtcy1jZW50ZXIgYXgtcmVsYXRpdmUgYXgtcm91bmRlZC1sZyBheC1ib3JkZXItbGlnaHRlc3QgYXgtYmctbGlnaHRlc3QgYXgtdGV4dC1vbi1saWdodGVzdCBheC1tYi0zIGF4LXAtM1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jbG9zZSBheC1hYnNvbHV0ZSBheC1lbmQtMiBheC10b3AtMiBheC1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblRlcm1pbmF0ZShpdGVtLmlkKVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWJvcmRlciBheC1yb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwie3sgaXRlbS5pY29uIH19IGF4LW0tM1wiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtbWwtMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlIGF4LXRleHQtb24tbGlnaHRlc3RcIj57eyBpdGVtLmRldmljZU5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZvbnQtbm9ybWFsIGF4LXRleHQtc20gYXgtdGV4dC1vbi1saWdodGVzdFwiPnt7IGl0ZW0ub3BlcmF0aW5nU3lzdGVtIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXgtZm9udC1ub3JtYWwgYXgtdGV4dC14cyBheC1zdWJ0aXRsZS1vbi1saWdodGVzdFwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubG9jYXRpb24gfX0gPHNwYW4+e3sgaXRlbS5sYXN0TG9naW5EYXRlID8gKGl0ZW0ubGFzdExvZ2luRGF0ZSB8IGRhdGU6ICd5eXl5L01NL2RkIEhIOm1tJykgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbjxheC1mb290ZXI+XG4gIDxkaXYgY2xhc3M9XCJheC1mbGV4LWNvbCBheC13LWZ1bGxcIj5cbiAgICA8ZGl2PlxuICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LWRhbmdlci01MDAgYXgtZm9udC1tZWRpdW0gYXgtdGV4dC1iYXNlXCI+VGVybWluYXRlIE9sZCBTZXNzaW9uczwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC1tdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZvbnQtbm9ybWFsIGF4LXRleHQtYmFzZSBheC10ZXh0LW9uLWxpZ2h0ZXN0XCI+SWYgaW5hY3RpdmUgZm9yLi4uPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXctMy82XCI+XG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJleHBpcmVUaW1lKClcIlxuICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwib25DaGFuZ2VTZXNzaW9uRXhwaXJlVGltZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cIm5hbWVcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNob29zZS4uLlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2F4LXN1ZmZpeD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2F4LWZvb3Rlcj5cbiJdfQ=="],"names":["i4"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { e as AXMAuthErrorHandler, h as AXMAuthModule, a as AXMAuthenticationTypes, f as AXMDefaultAuthConfigs, k as AXMDeviceSessionsService, l as AXMDeviceSessionsServiceImpl, i as AXMSessionStatusTypes, A as AXM_AUTH_CONFIG_TOKEN, j as AXPIdleService, g as configAuthModule } from './acorex-modules-auth-acorex-modules-auth-
|
|
1
|
+
export { e as AXMAuthErrorHandler, h as AXMAuthModule, a as AXMAuthenticationTypes, f as AXMDefaultAuthConfigs, k as AXMDeviceSessionsService, l as AXMDeviceSessionsServiceImpl, i as AXMSessionStatusTypes, A as AXM_AUTH_CONFIG_TOKEN, j as AXPIdleService, g as configAuthModule } from './acorex-modules-auth-acorex-modules-auth-D2RpP22p.mjs';
|
|
2
2
|
//# sourceMappingURL=acorex-modules-auth.mjs.map
|
package/package.json
CHANGED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import * as i2$1 from '@acorex/components/button';
|
|
2
|
-
import { AXButtonModule } from '@acorex/components/button';
|
|
3
|
-
import * as i9 from '@acorex/components/check-box';
|
|
4
|
-
import { AXCheckBoxModule } from '@acorex/components/check-box';
|
|
5
|
-
import * as i1$2 from '@acorex/components/decorators';
|
|
6
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
7
|
-
import { AXDialogService } from '@acorex/components/dialog';
|
|
8
|
-
import * as i1$1 from '@acorex/components/form';
|
|
9
|
-
import { AXFormModule, AXFormComponent } from '@acorex/components/form';
|
|
10
|
-
import * as i7 from '@acorex/components/label';
|
|
11
|
-
import { AXLabelModule } from '@acorex/components/label';
|
|
12
|
-
import * as i2$2 from '@acorex/components/loading';
|
|
13
|
-
import { AXLoadingModule } from '@acorex/components/loading';
|
|
14
|
-
import * as i5 from '@acorex/components/password-box';
|
|
15
|
-
import { AXPasswordBoxModule } from '@acorex/components/password-box';
|
|
16
|
-
import * as i4 from '@acorex/components/text-box';
|
|
17
|
-
import { AXTextBoxModule } from '@acorex/components/text-box';
|
|
18
|
-
import * as i5$1 from '@acorex/core/translation';
|
|
19
|
-
import { AXTranslationModule } from '@acorex/core/translation';
|
|
20
|
-
import * as i1 from '@angular/common';
|
|
21
|
-
import { CommonModule } from '@angular/common';
|
|
22
|
-
import * as i0 from '@angular/core';
|
|
23
|
-
import { inject, ViewChild, Component } from '@angular/core';
|
|
24
|
-
import { RouterModule, ActivatedRoute, Router } from '@angular/router';
|
|
25
|
-
import { AXToastService } from '@acorex/components/toast';
|
|
26
|
-
import { AXValidationModule } from '@acorex/core/validation';
|
|
27
|
-
import { AXPSessionService } from '@acorex/platform/auth';
|
|
28
|
-
import { AXPHomePageService } from '@acorex/platform/common';
|
|
29
|
-
import * as i2 from '@angular/forms';
|
|
30
|
-
import { FormsModule } from '@angular/forms';
|
|
31
|
-
import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
|
32
|
-
import { A as AXM_AUTH_CONFIG_TOKEN, a as AXMAuthenticationTypes } from './acorex-modules-auth-acorex-modules-auth-CAGlVzjD.mjs';
|
|
33
|
-
|
|
34
|
-
const MODULES = [
|
|
35
|
-
CommonModule,
|
|
36
|
-
FormsModule,
|
|
37
|
-
AXFormModule,
|
|
38
|
-
AXTextBoxModule,
|
|
39
|
-
AXPasswordBoxModule,
|
|
40
|
-
AXButtonModule,
|
|
41
|
-
AXLabelModule,
|
|
42
|
-
AXDecoratorModule,
|
|
43
|
-
AXCheckBoxModule,
|
|
44
|
-
AXTranslationModule,
|
|
45
|
-
AXTranslationModule,
|
|
46
|
-
AXLoadingModule,
|
|
47
|
-
RouterModule,
|
|
48
|
-
AXValidationModule,
|
|
49
|
-
];
|
|
50
|
-
class AXPLoginPasswordComponent {
|
|
51
|
-
constructor() {
|
|
52
|
-
this.configs = inject(AXM_AUTH_CONFIG_TOKEN);
|
|
53
|
-
this.v1 = '';
|
|
54
|
-
this.v2 = '';
|
|
55
|
-
this.isLoading$ = new BehaviorSubject(false);
|
|
56
|
-
this.isExternalLoading$ = new BehaviorSubject(false);
|
|
57
|
-
this.submitText = 'signin.submit';
|
|
58
|
-
this.dialogService = inject(AXDialogService);
|
|
59
|
-
this.sessionService = inject(AXPSessionService);
|
|
60
|
-
this.activateRoute = inject(ActivatedRoute);
|
|
61
|
-
this.homePageService = inject(AXPHomePageService);
|
|
62
|
-
this.toastService = inject(AXToastService);
|
|
63
|
-
this.router = inject(Router);
|
|
64
|
-
this.isKeepLogin = false;
|
|
65
|
-
}
|
|
66
|
-
// Computed property to check if external providers exist
|
|
67
|
-
get hasExternalProviders() {
|
|
68
|
-
return !!(this.configs?.externalProviders && Object.keys(this.configs.externalProviders).length > 0);
|
|
69
|
-
}
|
|
70
|
-
ngOnInit() {
|
|
71
|
-
this.l2 = 'password';
|
|
72
|
-
switch (this.configs.type) {
|
|
73
|
-
case AXMAuthenticationTypes.EmailPassword:
|
|
74
|
-
this.l1 = 'email';
|
|
75
|
-
break;
|
|
76
|
-
case AXMAuthenticationTypes.MobilePassword:
|
|
77
|
-
this.l1 = 'mobile';
|
|
78
|
-
break;
|
|
79
|
-
case AXMAuthenticationTypes.UsernameEmailPassword:
|
|
80
|
-
this.l1 = 'username-email';
|
|
81
|
-
break;
|
|
82
|
-
case AXMAuthenticationTypes.UsernamePassword:
|
|
83
|
-
default:
|
|
84
|
-
this.l1 = 'username';
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
handleForgotOnClick() {
|
|
88
|
-
this.router.navigate(['/auth/forgot']);
|
|
89
|
-
}
|
|
90
|
-
handleRegisterOnClick() {
|
|
91
|
-
this.router.navigate([this.configs.signup?.url || '/auth/register']);
|
|
92
|
-
}
|
|
93
|
-
handleLoginClick() {
|
|
94
|
-
this.sessionService.setStrategy(this.configs.defaultStrategyName || 'user-pass');
|
|
95
|
-
const redirectUrl = this.activateRoute.snapshot.queryParams['redirectUrl'];
|
|
96
|
-
this.form.validate().then(async (form) => {
|
|
97
|
-
console.log(this.configs.defaultStrategyName);
|
|
98
|
-
if (form.result) {
|
|
99
|
-
this.isLoading$.next(true);
|
|
100
|
-
this.submitText = 'processing';
|
|
101
|
-
this.submitText = 'redirecting';
|
|
102
|
-
try {
|
|
103
|
-
const strategy = this.sessionService.getSessionData()?.strategy;
|
|
104
|
-
if (!strategy) {
|
|
105
|
-
throw new Error('Strategy not found');
|
|
106
|
-
}
|
|
107
|
-
await this.sessionService.signin({
|
|
108
|
-
strategy: strategy,
|
|
109
|
-
username: this.v1,
|
|
110
|
-
password: this.v2,
|
|
111
|
-
});
|
|
112
|
-
await this.sessionService.signInComplete();
|
|
113
|
-
// Check authentication status before navigation
|
|
114
|
-
const isAuthenticated = await firstValueFrom(this.sessionService.isAuthenticated$);
|
|
115
|
-
if (!isAuthenticated) {
|
|
116
|
-
throw new Error('Authentication failed after signin');
|
|
117
|
-
}
|
|
118
|
-
const currentApplication = await firstValueFrom(this.sessionService.application$);
|
|
119
|
-
if (!currentApplication) {
|
|
120
|
-
if (this.sessionService.tenant?.id == null) {
|
|
121
|
-
this.router.navigate(['/auth/account/tenant-chooser']);
|
|
122
|
-
}
|
|
123
|
-
else if (this.sessionService.application?.id == null) {
|
|
124
|
-
this.router.navigate(['/auth/account/app-chooser']);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
else if (redirectUrl) {
|
|
128
|
-
this.router.navigate([redirectUrl]);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
await this.homePageService.navigateTo();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
let errorMsg = error?.error?.error_description ||
|
|
136
|
-
error?.error?.error ||
|
|
137
|
-
error?.message ||
|
|
138
|
-
'An error occurred during sign in.';
|
|
139
|
-
if (typeof errorMsg === 'object') {
|
|
140
|
-
// اگر شیء بود، سعی کن یک فیلد message یا description را نمایش بدهی
|
|
141
|
-
errorMsg = errorMsg.message || errorMsg.error_description || JSON.stringify(errorMsg);
|
|
142
|
-
}
|
|
143
|
-
this.toastService.show({
|
|
144
|
-
color: 'danger',
|
|
145
|
-
content: errorMsg,
|
|
146
|
-
timeOut: 5000,
|
|
147
|
-
});
|
|
148
|
-
console.log({ error });
|
|
149
|
-
this.submitText = 'signin.submit';
|
|
150
|
-
this.v2 = null;
|
|
151
|
-
this.isLoading$.next(false);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
async handleExternalSignIn(provider) {
|
|
157
|
-
this.sessionService.setStrategy(provider);
|
|
158
|
-
try {
|
|
159
|
-
this.isExternalLoading$.next(true);
|
|
160
|
-
// Get provider configuration (optional, for validation)
|
|
161
|
-
const providerConfig = this.configs?.externalProviders?.[provider];
|
|
162
|
-
if (!providerConfig) {
|
|
163
|
-
throw new Error(`Provider '${provider}' is not configured`);
|
|
164
|
-
}
|
|
165
|
-
await this.sessionService.signin({ strategy: provider });
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
console.error(`${provider} sign-in error:`, error);
|
|
169
|
-
// Optionally show an error message to the user here
|
|
170
|
-
}
|
|
171
|
-
finally {
|
|
172
|
-
this.isExternalLoading$.next(false);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Generates a code challenge for PKCE (Proof Key for Code Exchange)
|
|
177
|
-
*/
|
|
178
|
-
async generateCodeChallenge(codeVerifier) {
|
|
179
|
-
// Create SHA256 hash of the code verifier
|
|
180
|
-
const hash = await this.sha256(codeVerifier);
|
|
181
|
-
// Base64url encode the hash
|
|
182
|
-
return this.base64UrlEncode(hash);
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Generates a random string for code verifier
|
|
186
|
-
*/
|
|
187
|
-
generateRandomString(length) {
|
|
188
|
-
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
|
|
189
|
-
let text = '';
|
|
190
|
-
for (let i = 0; i < length; i++) {
|
|
191
|
-
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
|
192
|
-
}
|
|
193
|
-
return text;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Creates SHA256 hash of the input string using Web Crypto API
|
|
197
|
-
*/
|
|
198
|
-
async sha256(str) {
|
|
199
|
-
const encoder = new TextEncoder();
|
|
200
|
-
const data = encoder.encode(str);
|
|
201
|
-
return await crypto.subtle.digest('SHA-256', data);
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Base64url encodes an ArrayBuffer
|
|
205
|
-
*/
|
|
206
|
-
base64UrlEncode(buffer) {
|
|
207
|
-
const bytes = new Uint8Array(buffer);
|
|
208
|
-
let binary = '';
|
|
209
|
-
for (let i = 0; i < bytes.byteLength; i++) {
|
|
210
|
-
binary += String.fromCharCode(bytes[i]);
|
|
211
|
-
}
|
|
212
|
-
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
213
|
-
}
|
|
214
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPLoginPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
215
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPLoginPasswordComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true }], ngImport: i0, template: "<ng-container *translate=\"let t\">\n <div class=\"ax-text-center ax-mb-4\">\n <h1 class=\"ax-font-bold ax-text-xl ax-mb-2\">\n {{ '@auth:signin.title' | translate | async }}\n </h1>\n <p class=\"ax-text-base ax-text-neutral-600\">\n {{ '@auth:signin.hint' | translate | async }}\n </p>\n </div>\n <div class=\"ax-w-80 lg:ax-w-96\">\n <ax-form>\n <div class=\"ax-flex ax-flex-col ax-gap-6\">\n <ax-form-field>\n <ax-label>{{ '@auth:username-email' | translate | async }}</ax-label>\n <ax-text-box [name]=\"'username'\" id=\"username\" [autoComplete]=\"'username'\" [(value)]=\"v1\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-text-box>\n </ax-form-field>\n <ax-form-field>\n <ax-label>{{ '@auth:password' | translate | async }}</ax-label>\n <ax-password-box [name]=\"'password'\" id=\"password\" [autoComplete]=\"'current-password'\" [(value)]=\"v2\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-password-box>\n </ax-form-field>\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <ax-check-box [(ngModel)]=\"isKeepLogin\">\n <ax-label class=\"ax-mb-0\">{{ '@auth:signin.remember' | translate | async }}</ax-label>\n </ax-check-box>\n <ax-button\n color=\"primary\"\n class=\"ax-sm\"\n id=\"forgot-password\"\n [text]=\"'@auth:forgot.password' | translate | async\"\n look=\"blank\"\n (onClick)=\"handleForgotOnClick()\"\n >\n </ax-button>\n </div>\n </div>\n <ax-button\n color=\"primary\"\n class=\"ax-mt-6 ax-w-full\"\n id=\"submit-login\"\n [text]=\"'@auth:signin.submit' | translate | async\"\n (onClick)=\"handleLoginClick()\"\n [disabled]=\"isLoading$ | async\"\n [type]=\"'submit'\"\n >\n @if (isLoading$ | async) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n @if (hasExternalProviders || configs.signup?.enable) {\n <div class=\"ax-heading ax-heading-center !ax-my-8\">\n <span>{{ '@auth:signin.or' | translate | async }}</span>\n </div>\n }\n <div class=\"ax-flex ax-flex-col ax-gap-2 lg:ax-flex-row ax-justify-between ax-mt-6\">\n @if (configs.externalProviders?.['google']) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n text=\"{{ '@auth:authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n id=\"google\"\n (onClick)=\"handleExternalSignIn('google')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-google fa-lg ax-text-danger-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['apple']) {\n <ax-button\n text=\"{{ '@auth:authentication.with-apple' | translate | async }}\"\n [color]=\"'default'\"\n id=\"apple\"\n (onClick)=\"handleExternalSignIn('apple')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-apple fa-xl\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['microsoft']) {\n <ax-button\n text=\"{{ '@auth:authentication.with-microsoft' | translate | async }}\"\n [color]=\"'default'\"\n id=\"microsoft\"\n (onClick)=\"handleExternalSignIn('microsoft')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-microsoft fa-lg text-blue-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n </div>\n </ax-form>\n @if (configs.signup?.enable) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n id=\"register\"\n (onClick)=\"handleRegisterOnClick()\"\n text=\"{{ '@auth:register' | translate | async }}\"\n [color]=\"'default'\"\n >\n </ax-button>\n }\n </div>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i1$1.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i1$1.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "directive", type: i1$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i4.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXPasswordBoxModule }, { kind: "component", type: i5.AXPasswordBoxComponent, selector: "ax-password-box", inputs: ["readonly", "disabled", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "autoComplete", "showToggleButton", "class"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$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: AXLabelModule }, { kind: "component", type: i7.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$2.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: AXCheckBoxModule }, { kind: "component", type: i9.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5$1.AXTranslatorPipe, name: "translate" }] }); }
|
|
216
|
-
}
|
|
217
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPLoginPasswordComponent, decorators: [{
|
|
218
|
-
type: Component,
|
|
219
|
-
args: [{ imports: [...MODULES], template: "<ng-container *translate=\"let t\">\n <div class=\"ax-text-center ax-mb-4\">\n <h1 class=\"ax-font-bold ax-text-xl ax-mb-2\">\n {{ '@auth:signin.title' | translate | async }}\n </h1>\n <p class=\"ax-text-base ax-text-neutral-600\">\n {{ '@auth:signin.hint' | translate | async }}\n </p>\n </div>\n <div class=\"ax-w-80 lg:ax-w-96\">\n <ax-form>\n <div class=\"ax-flex ax-flex-col ax-gap-6\">\n <ax-form-field>\n <ax-label>{{ '@auth:username-email' | translate | async }}</ax-label>\n <ax-text-box [name]=\"'username'\" id=\"username\" [autoComplete]=\"'username'\" [(value)]=\"v1\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-text-box>\n </ax-form-field>\n <ax-form-field>\n <ax-label>{{ '@auth:password' | translate | async }}</ax-label>\n <ax-password-box [name]=\"'password'\" id=\"password\" [autoComplete]=\"'current-password'\" [(value)]=\"v2\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-password-box>\n </ax-form-field>\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <ax-check-box [(ngModel)]=\"isKeepLogin\">\n <ax-label class=\"ax-mb-0\">{{ '@auth:signin.remember' | translate | async }}</ax-label>\n </ax-check-box>\n <ax-button\n color=\"primary\"\n class=\"ax-sm\"\n id=\"forgot-password\"\n [text]=\"'@auth:forgot.password' | translate | async\"\n look=\"blank\"\n (onClick)=\"handleForgotOnClick()\"\n >\n </ax-button>\n </div>\n </div>\n <ax-button\n color=\"primary\"\n class=\"ax-mt-6 ax-w-full\"\n id=\"submit-login\"\n [text]=\"'@auth:signin.submit' | translate | async\"\n (onClick)=\"handleLoginClick()\"\n [disabled]=\"isLoading$ | async\"\n [type]=\"'submit'\"\n >\n @if (isLoading$ | async) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n @if (hasExternalProviders || configs.signup?.enable) {\n <div class=\"ax-heading ax-heading-center !ax-my-8\">\n <span>{{ '@auth:signin.or' | translate | async }}</span>\n </div>\n }\n <div class=\"ax-flex ax-flex-col ax-gap-2 lg:ax-flex-row ax-justify-between ax-mt-6\">\n @if (configs.externalProviders?.['google']) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n text=\"{{ '@auth:authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n id=\"google\"\n (onClick)=\"handleExternalSignIn('google')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-google fa-lg ax-text-danger-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['apple']) {\n <ax-button\n text=\"{{ '@auth:authentication.with-apple' | translate | async }}\"\n [color]=\"'default'\"\n id=\"apple\"\n (onClick)=\"handleExternalSignIn('apple')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-apple fa-xl\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['microsoft']) {\n <ax-button\n text=\"{{ '@auth:authentication.with-microsoft' | translate | async }}\"\n [color]=\"'default'\"\n id=\"microsoft\"\n (onClick)=\"handleExternalSignIn('microsoft')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-microsoft fa-lg text-blue-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n </div>\n </ax-form>\n @if (configs.signup?.enable) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n id=\"register\"\n (onClick)=\"handleRegisterOnClick()\"\n text=\"{{ '@auth:register' | translate | async }}\"\n [color]=\"'default'\"\n >\n </ax-button>\n }\n </div>\n</ng-container>\n" }]
|
|
220
|
-
}], propDecorators: { form: [{
|
|
221
|
-
type: ViewChild,
|
|
222
|
-
args: [AXFormComponent]
|
|
223
|
-
}] } });
|
|
224
|
-
|
|
225
|
-
export { AXPLoginPasswordComponent };
|
|
226
|
-
//# sourceMappingURL=acorex-modules-auth-password.component-Dqb6GBes.mjs.map
|