@sambath999/localize-token 19.1.8 → 19.1.10
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.
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { HttpClient } from "@angular/common/http";
|
|
2
1
|
import { ChangeDetectorRef, Injector, OnDestroy, OnInit } from "@angular/core";
|
|
3
2
|
import { MessageService } from "primeng/api";
|
|
4
3
|
import { DynamicDialogConfig, DynamicDialogRef } from "primeng/dynamicdialog";
|
|
@@ -11,35 +10,24 @@ export declare class LocalizeTokenLoginDialogComponent implements OnInit, OnDest
|
|
|
11
10
|
private readonly cdt;
|
|
12
11
|
private readonly dlgRef;
|
|
13
12
|
private readonly dlgConfig;
|
|
14
|
-
private readonly httpClient;
|
|
15
13
|
private readonly sanitizer;
|
|
16
14
|
private readonly injector;
|
|
17
15
|
readonly messageKey = "$login-dlg";
|
|
18
16
|
password: any;
|
|
19
17
|
readonly decodeToken: JwtPayload | null;
|
|
20
|
-
loading: boolean;
|
|
21
|
-
success: boolean;
|
|
22
|
-
private get config();
|
|
18
|
+
get loading(): boolean;
|
|
19
|
+
get success(): boolean;
|
|
23
20
|
private readonly loginConfig;
|
|
24
|
-
private logout?;
|
|
25
|
-
private loginUrl?;
|
|
21
|
+
private readonly logout?;
|
|
26
22
|
readonly properties: ILoginDialogProperties;
|
|
27
|
-
private readonly
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
private readonly tokenService;
|
|
31
|
-
private readonly broadcastService;
|
|
32
|
-
private readonly apiService;
|
|
33
|
-
constructor(messageService: MessageService, cdt: ChangeDetectorRef, dlgRef: DynamicDialogRef, dlgConfig: DynamicDialogConfig, httpClient: HttpClient, sanitizer: DomSanitizer, injector: Injector);
|
|
23
|
+
private readonly apiLoginService;
|
|
24
|
+
constructor(messageService: MessageService, cdt: ChangeDetectorRef, dlgRef: DynamicDialogRef, dlgConfig: DynamicDialogConfig, sanitizer: DomSanitizer, injector: Injector);
|
|
25
|
+
private configure;
|
|
34
26
|
ngOnInit(): void;
|
|
35
27
|
ngAfterViewInit(): void;
|
|
36
28
|
private loginSuccess;
|
|
37
29
|
clickLogin(): Promise<void>;
|
|
38
|
-
|
|
39
|
-
private login;
|
|
40
|
-
private getHeaders;
|
|
41
|
-
get isValidPassword(): boolean;
|
|
42
|
-
clickLogout: () => any;
|
|
30
|
+
clickLogout(): void;
|
|
43
31
|
private showMessage;
|
|
44
32
|
get sanitizedTitle(): import("@angular/platform-browser").SafeHtml;
|
|
45
33
|
ngOnDestroy(): void;
|
|
@@ -3,99 +3,74 @@ import { Component, ViewEncapsulation, Injectable, NgModule, CUSTOM_ELEMENTS_SCH
|
|
|
3
3
|
import * as i1 from 'primeng/api';
|
|
4
4
|
import { MessageService } from 'primeng/api';
|
|
5
5
|
import * as i1$1 from '@sambath999/localize-api';
|
|
6
|
-
import {
|
|
6
|
+
import { LocalizeApiLoginService, waitFor } from '@sambath999/localize-api';
|
|
7
7
|
import * as i2 from 'primeng/dynamicdialog';
|
|
8
8
|
import { DialogService } from 'primeng/dynamicdialog';
|
|
9
|
-
import * as i3 from '@angular/
|
|
10
|
-
import * as i4 from '@angular/platform-browser';
|
|
9
|
+
import * as i3 from '@angular/platform-browser';
|
|
11
10
|
import { BrowserModule } from '@angular/platform-browser';
|
|
12
|
-
import * as
|
|
11
|
+
import * as i4 from '@angular/common';
|
|
13
12
|
import { CommonModule } from '@angular/common';
|
|
14
|
-
import * as
|
|
13
|
+
import * as i5 from 'primeng/toast';
|
|
15
14
|
import { ToastModule } from 'primeng/toast';
|
|
16
|
-
import * as
|
|
15
|
+
import * as i6 from 'primeng/inputtext';
|
|
17
16
|
import { InputTextModule } from 'primeng/inputtext';
|
|
18
|
-
import * as
|
|
17
|
+
import * as i7 from '@angular/forms';
|
|
19
18
|
import { FormsModule } from '@angular/forms';
|
|
20
|
-
import * as
|
|
19
|
+
import * as i8 from 'primeng/button';
|
|
21
20
|
import { ButtonModule } from 'primeng/button';
|
|
22
|
-
import * as
|
|
21
|
+
import * as i9 from 'primeng/inputgroup';
|
|
23
22
|
import { InputGroupModule } from 'primeng/inputgroup';
|
|
24
|
-
import * as
|
|
23
|
+
import * as i10 from 'primeng/inputgroupaddon';
|
|
25
24
|
import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
|
|
26
25
|
|
|
27
|
-
var ELoginState;
|
|
28
|
-
(function (ELoginState) {
|
|
29
|
-
ELoginState[ELoginState["Requesting"] = 0] = "Requesting";
|
|
30
|
-
ELoginState[ELoginState["Success"] = 1] = "Success";
|
|
31
|
-
ELoginState[ELoginState["Error"] = 2] = "Error";
|
|
32
|
-
})(ELoginState || (ELoginState = {}));
|
|
33
26
|
class LocalizeTokenLoginDialogComponent {
|
|
34
27
|
messageService;
|
|
35
28
|
cdt;
|
|
36
29
|
dlgRef;
|
|
37
30
|
dlgConfig;
|
|
38
|
-
httpClient;
|
|
39
31
|
sanitizer;
|
|
40
32
|
injector;
|
|
41
33
|
messageKey = "$login-dlg";
|
|
42
34
|
password;
|
|
43
35
|
decodeToken;
|
|
44
|
-
loading
|
|
45
|
-
success
|
|
46
|
-
get config() { return this.tokenService.config; }
|
|
36
|
+
get loading() { return this.apiLoginService.isLoading; }
|
|
37
|
+
get success() { return this.apiLoginService.isSuccess; }
|
|
47
38
|
loginConfig;
|
|
48
39
|
logout;
|
|
49
|
-
loginUrl;
|
|
50
40
|
properties;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
sourceId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
54
|
-
tokenService;
|
|
55
|
-
broadcastService;
|
|
56
|
-
apiService;
|
|
57
|
-
constructor(messageService, cdt, dlgRef, dlgConfig, httpClient, sanitizer, injector) {
|
|
41
|
+
apiLoginService;
|
|
42
|
+
constructor(messageService, cdt, dlgRef, dlgConfig, sanitizer, injector) {
|
|
58
43
|
this.messageService = messageService;
|
|
59
44
|
this.cdt = cdt;
|
|
60
45
|
this.dlgRef = dlgRef;
|
|
61
46
|
this.dlgConfig = dlgConfig;
|
|
62
|
-
this.httpClient = httpClient;
|
|
63
47
|
this.sanitizer = sanitizer;
|
|
64
48
|
this.injector = injector;
|
|
65
|
-
this.tokenService = this.injector.get(LocalizeApiTokenService);
|
|
66
|
-
this.broadcastService = this.injector.get(LocalizeApiBroadcastService);
|
|
67
|
-
this.apiService = this.injector.get(LocalizeApiService);
|
|
68
|
-
this.decodeToken = this.tokenService.decodeRefreshToken;
|
|
69
49
|
this.loginConfig = this.dlgConfig.data.loginConfig;
|
|
50
|
+
this.apiLoginService = this.injector.get(LocalizeApiLoginService);
|
|
70
51
|
this.properties = this.loginConfig.properties;
|
|
71
|
-
this.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
switch (payload.state) {
|
|
77
|
-
case ELoginState.Requesting:
|
|
78
|
-
this.loading = true;
|
|
79
|
-
this.success = false;
|
|
80
|
-
break;
|
|
81
|
-
case ELoginState.Success:
|
|
82
|
-
this.apiService.clearRequiredLoginStateAfterLogin();
|
|
83
|
-
this.loginSuccess();
|
|
84
|
-
break;
|
|
85
|
-
case ELoginState.Error:
|
|
86
|
-
this.showMessage("error", payload.message ?? "Login failed");
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
});
|
|
52
|
+
this.decodeToken = this.apiLoginService.decodedToken;
|
|
53
|
+
this.logout = this.loginConfig.logoutFunc;
|
|
54
|
+
this.configure();
|
|
90
55
|
}
|
|
91
|
-
|
|
56
|
+
configure() {
|
|
92
57
|
this.dlgConfig.closable = false;
|
|
93
58
|
this.dlgConfig.dismissableMask = false;
|
|
94
59
|
this.dlgConfig.modal = true;
|
|
95
|
-
this.
|
|
96
|
-
|
|
60
|
+
this.apiLoginService.configure({
|
|
61
|
+
loginUrl: this.loginConfig.loginUrl,
|
|
62
|
+
onSuccess: this.loginSuccess.bind(this),
|
|
63
|
+
onFailure: (msg) => this.showMessage("error", msg),
|
|
64
|
+
onError: (msg) => this.showMessage("error", msg),
|
|
65
|
+
loginFunction: this.loginConfig.loginFunction,
|
|
66
|
+
refreshTokenTtl: this.loginConfig.expire,
|
|
67
|
+
passwordResolver: () => this.password,
|
|
68
|
+
passwordValidator: this.loginConfig.properties?.passwordValidator?.bind(this),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
ngOnInit() {
|
|
97
72
|
if (!this.decodeToken) {
|
|
98
|
-
this.showMessage("error", "Token
|
|
73
|
+
this.showMessage("error", "Invalid Token. Please login again.");
|
|
99
74
|
setTimeout(() => this.logout?.(), 2000);
|
|
100
75
|
}
|
|
101
76
|
}
|
|
@@ -103,78 +78,25 @@ class LocalizeTokenLoginDialogComponent {
|
|
|
103
78
|
this.cdt.detectChanges();
|
|
104
79
|
}
|
|
105
80
|
async loginSuccess() {
|
|
106
|
-
this.success = true;
|
|
107
81
|
await waitFor(2000);
|
|
108
82
|
this.dlgRef.close(true);
|
|
109
83
|
}
|
|
110
84
|
async clickLogin() {
|
|
111
|
-
|
|
112
|
-
return this.showMessage("error", "Password is required and must be at least 6 characters");
|
|
113
|
-
}
|
|
114
|
-
this.publishLoginState(ELoginState.Requesting);
|
|
115
|
-
await waitFor(300);
|
|
116
|
-
this.loading = true;
|
|
117
|
-
const loginRes = await this.login();
|
|
118
|
-
if (!loginRes?.status) {
|
|
119
|
-
const message = loginRes?.message ?? "An error occurred";
|
|
120
|
-
this.publishLoginState(ELoginState.Error, message);
|
|
121
|
-
return this.showMessage("error", message);
|
|
122
|
-
}
|
|
123
|
-
this.tokenService.accessToken = loginRes.tokens.accessToken;
|
|
124
|
-
const cookieOptions = { expires: this.loginConfig.expire ?? 365 };
|
|
125
|
-
LocalizeApiToken.storage.set(this.config.refreshToken?.name || '', loginRes.tokens.refreshToken, cookieOptions);
|
|
126
|
-
this.apiService.clearRequiredLoginStateAfterLogin();
|
|
127
|
-
this.publishLoginState(ELoginState.Success);
|
|
128
|
-
this.loginSuccess();
|
|
129
|
-
}
|
|
130
|
-
publishLoginState(state, message) {
|
|
131
|
-
this.broadcastService.publish(this.loginBroadcastChannel, {
|
|
132
|
-
state,
|
|
133
|
-
sourceId: this.sourceId,
|
|
134
|
-
message,
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
async login() {
|
|
138
|
-
if (!this.loginUrl?.trim().length) {
|
|
139
|
-
this.showMessage("error", "Login url is required");
|
|
140
|
-
throw new Error("Login url is required");
|
|
141
|
-
}
|
|
142
|
-
try {
|
|
143
|
-
if (this.loginConfig.loginFunction) {
|
|
144
|
-
console.log("Using custom login function");
|
|
145
|
-
return await this.loginConfig.loginFunction(this.decodeToken?.email ?? '', this.password.trim(), this.getHeaders());
|
|
146
|
-
}
|
|
147
|
-
return await new Promise((resolve, reject) => this.httpClient.post(this.loginUrl, { password: this.password.trim() }, { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));
|
|
148
|
-
}
|
|
149
|
-
catch (e) {
|
|
150
|
-
this.showMessage("error", e.message);
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
getHeaders() {
|
|
155
|
-
return {
|
|
156
|
-
[LocalizeApiToken.httpHeaders.X_REFRESH_TOKEN]: this.tokenService.refreshToken ?? "",
|
|
157
|
-
[LocalizeApiToken.httpHeaders.X_TENANT]: this.tokenService.tenantToken ?? "",
|
|
158
|
-
};
|
|
85
|
+
await this.apiLoginService.clickLogin();
|
|
159
86
|
}
|
|
160
|
-
|
|
161
|
-
this.
|
|
162
|
-
return this.properties.passwordValidator
|
|
163
|
-
? this.properties.passwordValidator(this.password)
|
|
164
|
-
: this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;
|
|
87
|
+
clickLogout() {
|
|
88
|
+
this.logout?.();
|
|
165
89
|
}
|
|
166
|
-
clickLogout = () => this.logout?.();
|
|
167
90
|
showMessage(severity, summary) {
|
|
168
91
|
this.messageService.add({ key: this.messageKey, severity, summary });
|
|
169
|
-
this.loading = false;
|
|
170
92
|
}
|
|
171
93
|
get sanitizedTitle() {
|
|
172
94
|
return this.sanitizer.bypassSecurityTrustHtml(this.properties.title ?? '');
|
|
173
95
|
}
|
|
174
96
|
ngOnDestroy() {
|
|
175
|
-
this.
|
|
97
|
+
this.apiLoginService.unConfigure();
|
|
176
98
|
}
|
|
177
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LocalizeTokenLoginDialogComponent, deps: [{ token: i1.MessageService }, { token: i0.ChangeDetectorRef }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: i3.
|
|
99
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LocalizeTokenLoginDialogComponent, deps: [{ token: i1.MessageService }, { token: i0.ChangeDetectorRef }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: i3.DomSanitizer }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
178
100
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: LocalizeTokenLoginDialogComponent, isStandalone: false, selector: "app-localize-logindlg", providers: [MessageService], ngImport: i0, template: `<p-toast key="$login-dlg" position="top-center"></p-toast>
|
|
179
101
|
<div id="login-dlg-wrap">
|
|
180
102
|
<div id="login-dlg-header">
|
|
@@ -234,7 +156,7 @@ class LocalizeTokenLoginDialogComponent {
|
|
|
234
156
|
</div>
|
|
235
157
|
</ng-container>
|
|
236
158
|
</div>
|
|
237
|
-
</div>`, isInline: true, styles: ["#login-dlg-wrap{width:100%;max-width:400px;margin:0 auto;padding:30px;height:100%}.login-dlg-elm{margin-top:1rem}.login-dlg-elm.login-dlg-suggest{display:flex;align-items:center;-webkit-user-select:none;user-select:none;border-bottom:solid 1px #ddd;border-radius:5px;padding:5px 10px;background:#f9f9f9;box-shadow:1px 5px 10px -12px #000}#login-dlg-header{display:flex;flex-direction:column;align-items:center;justify-content:center}#login-dlg-header h3{font-weight:700;font-size:.9rem;color:orange;text-align:center}#login-logo{height:55px;width:55px;background-size:contain!important}#login-dlg-content .p-inputgroup{height:45px}#login-dlg-content .p-inputgroup .p-inputgroup-addon{height:45px;border-radius:15px 0 0 15px;width:50px}#login-dlg-content *{font-size:.9rem}#login-dlg-content .p-inputgroup .p-inputgroup-addon *{font-size:1rem}#login-dlg-content .p-inputgroup input{height:45px;border-radius:0 15px 15px 0}#login-dlg-content button{height:45px;border-radius:15px}.check-animation-wrap{top:0;left:0;position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:calc(100% - 200px);min-height:400px}.check-main-container{width:100%;height:100vh;display:flex;flex-flow:column;justify-content:center;align-items:center}.check-container{width:6.25rem;height:7.5rem;display:flex;flex-flow:column;align-items:center;justify-content:space-between}.check-container .check-background{width:100%;height:calc(100% - 1.25rem);background:linear-gradient(to bottom right,#5de593,#41d67c);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset;transform:scale(.84);border-radius:50%;animation:animateContainer .75s ease-out forwards .75s;display:flex;align-items:center;justify-content:center;opacity:0}.check-container .check-background svg{width:65%;transform:translateY(.25rem);stroke-dasharray:80;stroke-dashoffset:80;animation:animateCheck .35s forwards 1.25s ease-out;min-width:auto!important}.check-container .check-shadow{bottom:calc(-15% - 5px);left:0;border-radius:50%;background:radial-gradient(closest-side,rgba(73,218,131,1),transparent);animation:animateShadow .75s ease-out forwards .75s}@keyframes animateContainer{0%{opacity:0;transform:scale(0);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}25%{opacity:1;transform:scale(.9);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}43.75%{transform:scale(1.15);box-shadow:0 0 0 43.334px #ffffff40 inset,0 0 0 65px #ffffff40 inset}62.5%{transform:scale(1);box-shadow:0 0 #ffffff40 inset,0 0 0 21.667px #ffffff40 inset}81.25%{box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}to{opacity:1;box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}}@keyframes animateCheck{0%{stroke-dashoffset:80}to{stroke-dashoffset:0}}@keyframes animateShadow{0%{opacity:0;width:100%;height:15%}25%{opacity:.25}43.75%{width:40%;height:7%;opacity:.35}to{width:85%;height:15%;opacity:.25}}#login-dlg-wrap .loader-wrap{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:absolute;top:0;left:0;z-index:100;background:#ffffff42;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}#login-dlg-wrap .login-dlg-loader{border:15px solid #e7e7e7;border-top:15px solid #52dba1;border-radius:50%;width:100px;height:100px;animation:spinloader 2s linear infinite}#login-dlg-wrap .loader-wrap:before{content:\"\";position:absolute;width:70px;height:70px;transform:translate(-50%,-50%);z-index:1;border:15px solid #e7e7e700;border-top:15px solid #52dba1c9;border-radius:50%;animation:spinloader .75s linear infinite}@keyframes spinloader{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type:
|
|
159
|
+
</div>`, isInline: true, styles: ["#login-dlg-wrap{width:100%;max-width:400px;margin:0 auto;padding:30px;height:100%}.login-dlg-elm{margin-top:1rem}.login-dlg-elm.login-dlg-suggest{display:flex;align-items:center;-webkit-user-select:none;user-select:none;border-bottom:solid 1px #ddd;border-radius:5px;padding:5px 10px;background:#f9f9f9;box-shadow:1px 5px 10px -12px #000}#login-dlg-header{display:flex;flex-direction:column;align-items:center;justify-content:center}#login-dlg-header h3{font-weight:700;font-size:.9rem;color:orange;text-align:center}#login-logo{height:55px;width:55px;background-size:contain!important}#login-dlg-content .p-inputgroup{height:45px}#login-dlg-content .p-inputgroup .p-inputgroup-addon{height:45px;border-radius:15px 0 0 15px;width:50px}#login-dlg-content *{font-size:.9rem}#login-dlg-content .p-inputgroup .p-inputgroup-addon *{font-size:1rem}#login-dlg-content .p-inputgroup input{height:45px;border-radius:0 15px 15px 0}#login-dlg-content button{height:45px;border-radius:15px}.check-animation-wrap{top:0;left:0;position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:calc(100% - 200px);min-height:400px}.check-main-container{width:100%;height:100vh;display:flex;flex-flow:column;justify-content:center;align-items:center}.check-container{width:6.25rem;height:7.5rem;display:flex;flex-flow:column;align-items:center;justify-content:space-between}.check-container .check-background{width:100%;height:calc(100% - 1.25rem);background:linear-gradient(to bottom right,#5de593,#41d67c);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset;transform:scale(.84);border-radius:50%;animation:animateContainer .75s ease-out forwards .75s;display:flex;align-items:center;justify-content:center;opacity:0}.check-container .check-background svg{width:65%;transform:translateY(.25rem);stroke-dasharray:80;stroke-dashoffset:80;animation:animateCheck .35s forwards 1.25s ease-out;min-width:auto!important}.check-container .check-shadow{bottom:calc(-15% - 5px);left:0;border-radius:50%;background:radial-gradient(closest-side,rgba(73,218,131,1),transparent);animation:animateShadow .75s ease-out forwards .75s}@keyframes animateContainer{0%{opacity:0;transform:scale(0);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}25%{opacity:1;transform:scale(.9);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}43.75%{transform:scale(1.15);box-shadow:0 0 0 43.334px #ffffff40 inset,0 0 0 65px #ffffff40 inset}62.5%{transform:scale(1);box-shadow:0 0 #ffffff40 inset,0 0 0 21.667px #ffffff40 inset}81.25%{box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}to{opacity:1;box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}}@keyframes animateCheck{0%{stroke-dashoffset:80}to{stroke-dashoffset:0}}@keyframes animateShadow{0%{opacity:0;width:100%;height:15%}25%{opacity:.25}43.75%{width:40%;height:7%;opacity:.35}to{width:85%;height:15%;opacity:.25}}#login-dlg-wrap .loader-wrap{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:absolute;top:0;left:0;z-index:100;background:#ffffff42;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}#login-dlg-wrap .login-dlg-loader{border:15px solid #e7e7e7;border-top:15px solid #52dba1;border-radius:50%;width:100px;height:100px;animation:spinloader 2s linear infinite}#login-dlg-wrap .loader-wrap:before{content:\"\";position:absolute;width:70px;height:70px;transform:translate(-50%,-50%);z-index:1;border:15px solid #e7e7e700;border-top:15px solid #52dba1c9;border-radius:50%;animation:spinloader .75s linear infinite}@keyframes spinloader{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i9.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["style", "styleClass"] }, { kind: "component", type: i10.InputGroupAddon, selector: "p-inputgroup-addon, p-inputGroupAddon", inputs: ["style", "styleClass"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
238
160
|
}
|
|
239
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LocalizeTokenLoginDialogComponent, decorators: [{
|
|
240
162
|
type: Component,
|
|
@@ -298,7 +220,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
298
220
|
</ng-container>
|
|
299
221
|
</div>
|
|
300
222
|
</div>`, selector: "app-localize-logindlg", providers: [MessageService], encapsulation: ViewEncapsulation.None, styles: ["#login-dlg-wrap{width:100%;max-width:400px;margin:0 auto;padding:30px;height:100%}.login-dlg-elm{margin-top:1rem}.login-dlg-elm.login-dlg-suggest{display:flex;align-items:center;-webkit-user-select:none;user-select:none;border-bottom:solid 1px #ddd;border-radius:5px;padding:5px 10px;background:#f9f9f9;box-shadow:1px 5px 10px -12px #000}#login-dlg-header{display:flex;flex-direction:column;align-items:center;justify-content:center}#login-dlg-header h3{font-weight:700;font-size:.9rem;color:orange;text-align:center}#login-logo{height:55px;width:55px;background-size:contain!important}#login-dlg-content .p-inputgroup{height:45px}#login-dlg-content .p-inputgroup .p-inputgroup-addon{height:45px;border-radius:15px 0 0 15px;width:50px}#login-dlg-content *{font-size:.9rem}#login-dlg-content .p-inputgroup .p-inputgroup-addon *{font-size:1rem}#login-dlg-content .p-inputgroup input{height:45px;border-radius:0 15px 15px 0}#login-dlg-content button{height:45px;border-radius:15px}.check-animation-wrap{top:0;left:0;position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:calc(100% - 200px);min-height:400px}.check-main-container{width:100%;height:100vh;display:flex;flex-flow:column;justify-content:center;align-items:center}.check-container{width:6.25rem;height:7.5rem;display:flex;flex-flow:column;align-items:center;justify-content:space-between}.check-container .check-background{width:100%;height:calc(100% - 1.25rem);background:linear-gradient(to bottom right,#5de593,#41d67c);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset;transform:scale(.84);border-radius:50%;animation:animateContainer .75s ease-out forwards .75s;display:flex;align-items:center;justify-content:center;opacity:0}.check-container .check-background svg{width:65%;transform:translateY(.25rem);stroke-dasharray:80;stroke-dashoffset:80;animation:animateCheck .35s forwards 1.25s ease-out;min-width:auto!important}.check-container .check-shadow{bottom:calc(-15% - 5px);left:0;border-radius:50%;background:radial-gradient(closest-side,rgba(73,218,131,1),transparent);animation:animateShadow .75s ease-out forwards .75s}@keyframes animateContainer{0%{opacity:0;transform:scale(0);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}25%{opacity:1;transform:scale(.9);box-shadow:0 0 0 65px #ffffff40 inset,0 0 0 65px #ffffff40 inset}43.75%{transform:scale(1.15);box-shadow:0 0 0 43.334px #ffffff40 inset,0 0 0 65px #ffffff40 inset}62.5%{transform:scale(1);box-shadow:0 0 #ffffff40 inset,0 0 0 21.667px #ffffff40 inset}81.25%{box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}to{opacity:1;box-shadow:0 0 #ffffff40 inset,0 0 #ffffff40 inset}}@keyframes animateCheck{0%{stroke-dashoffset:80}to{stroke-dashoffset:0}}@keyframes animateShadow{0%{opacity:0;width:100%;height:15%}25%{opacity:.25}43.75%{width:40%;height:7%;opacity:.35}to{width:85%;height:15%;opacity:.25}}#login-dlg-wrap .loader-wrap{display:flex;justify-content:center;align-items:center;height:100%;width:100%;position:absolute;top:0;left:0;z-index:100;background:#ffffff42;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}#login-dlg-wrap .login-dlg-loader{border:15px solid #e7e7e7;border-top:15px solid #52dba1;border-radius:50%;width:100px;height:100px;animation:spinloader 2s linear infinite}#login-dlg-wrap .loader-wrap:before{content:\"\";position:absolute;width:70px;height:70px;transform:translate(-50%,-50%);z-index:1;border:15px solid #e7e7e700;border-top:15px solid #52dba1c9;border-radius:50%;animation:spinloader .75s linear infinite}@keyframes spinloader{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
301
|
-
}], ctorParameters: () => [{ type: i1.MessageService }, { type: i0.ChangeDetectorRef }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: i3.
|
|
223
|
+
}], ctorParameters: () => [{ type: i1.MessageService }, { type: i0.ChangeDetectorRef }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: i3.DomSanitizer }, { type: i0.Injector }] });
|
|
302
224
|
|
|
303
225
|
class LocalizeTokenDialogService {
|
|
304
226
|
injector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sambath999-localize-token.mjs","sources":["../../src/package/components/localize-token-login-dialog.component.ts","../../src/package/services/localize-token-dialog.service.ts","../../src/package/models/localize-token.module.ts","../../src/package/services/localize-token-configure.service.ts","../../src/package/public-api.ts","../../src/package/sambath999-localize-token.ts"],"sourcesContent":["import { HttpClient } from \"@angular/common/http\";\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { ILoginDialogConfig, ILoginDialogProperties } from \"../models/localize-token-models\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { JwtPayload, LocalizeApiService, LocalizeApiBroadcastService, LocalizeApiToken, LocalizeApiTokenService, waitFor } from \"@sambath999/localize-api\";\r\n\r\n\r\nenum ELoginState {\r\n Requesting,\r\n Success,\r\n Error\r\n}\r\n\r\ninterface ILoginBroadcastMessage {\r\n state: ELoginState;\r\n sourceId: string;\r\n requestId?: string;\r\n emittedAt?: number;\r\n message?: string;\r\n}\r\n\r\n@Component({\r\n standalone: false,\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n height: 100%;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n\r\n .login-dlg-elm.login-dlg-suggest {\r\n display: flex ;\r\n align-items: center;\r\n user-select: none;\r\n border-bottom: solid 1px #ddd;\r\n border-radius: 5px;\r\n padding: 5px 10px;\r\n background: #f9f9f9;\r\n box-shadow: 1px 5px 10px -12px #000;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 55px;\r\n width: 55px;\r\n /* background: url(\"/assets/images/logo-300px.png\") no-repeat; */\r\n background-size: contain !important;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n #login-dlg-content *{\r\n font-size: .9rem;\r\n /* font-family: 'Lexend', 'Roboto', sans-serif, 'material-icons-round'; */\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\" style=\"background: url('{{properties.logoImage}}') no-repeat\"></div>\r\n <h3 *ngIf=\"!success\" [innerHTML]=\"sanitizedTitle\"></h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">{{properties.loginSuccessMessage}}</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <p-inputgroup>\r\n <p-inputgroup-addon>\r\n <i class=\"material-icons-round\">person</i>\r\n </p-inputgroup-addon>\r\n <input disabled pInputText type=\"text\" placeholder=\"{{properties.username?.placeHolder}}\" [value]=\"decodeToken?.email\" />\r\n </p-inputgroup>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <p-inputgroup>\r\n <p-inputgroup-addon>\r\n <i class=\"material-icons-round\">lock</i>\r\n </p-inputgroup-addon>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" \r\n placeholder=\"{{properties.password?.placeHolder}}\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </p-inputgroup>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"{{properties.loginButton?.placeHolder}}\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm login-dlg-suggest\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>{{properties.logoutButton?.message}}</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"{{properties.logoutButton?.placeHolder}}\" \r\n (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeTokenLoginDialogComponent implements OnInit, OnDestroy {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n loading = false;\r\n success = false;\r\n private get config() { return this.tokenService.config; }\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private logout?: () => any\r\n private loginUrl?: string;\r\n readonly properties: ILoginDialogProperties;\r\n private readonly removeLoginListener?: () => void;\r\n private readonly loginBroadcastChannel = \"bc-localize-login\";\r\n private readonly sourceId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;\r\n private readonly tokenService: LocalizeApiTokenService;\r\n private readonly broadcastService: LocalizeApiBroadcastService;\r\n private readonly apiService: LocalizeApiService;\r\n\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly httpClient: HttpClient,\r\n private readonly sanitizer: DomSanitizer,\r\n private readonly injector: Injector\r\n ) {\r\n this.tokenService = this.injector.get(LocalizeApiTokenService);\r\n this.broadcastService = this.injector.get(LocalizeApiBroadcastService);\r\n this.apiService = this.injector.get(LocalizeApiService);\r\n this.decodeToken = this.tokenService.decodeRefreshToken;\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n this.properties = this.loginConfig.properties!;\r\n\r\n this.removeLoginListener = this.broadcastService.listen<ILoginBroadcastMessage>(this.loginBroadcastChannel, (payload) => {\r\n if (!payload || payload.sourceId === this.sourceId) {\r\n console.warn('Ignoring login state message with invalid payload or from same source', payload);\r\n return;\r\n }\r\n\r\n switch (payload.state) {\r\n case ELoginState.Requesting:\r\n this.loading = true;\r\n this.success = false;\r\n break;\r\n case ELoginState.Success:\r\n this.apiService.clearRequiredLoginStateAfterLogin();\r\n this.loginSuccess();\r\n break;\r\n case ELoginState.Error:\r\n this.showMessage(\"error\", payload.message ?? \"Login failed\");\r\n break;\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dlgConfig.closable = false;\r\n this.dlgConfig.dismissableMask = false;\r\n this.dlgConfig.modal = true;\r\n\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.loginUrl = this.loginConfig.loginUrl\r\n\r\n if (!this.decodeToken) {\r\n this.showMessage(\"error\", \"Token is invalid\");\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n private async loginSuccess() {\r\n this.success = true;\r\n await waitFor(2000);\r\n this.dlgRef.close(true);\r\n }\r\n\r\n async clickLogin() {\r\n if (!this.isValidPassword) {\r\n return this.showMessage(\"error\", \"Password is required and must be at least 6 characters\");\r\n }\r\n\r\n this.publishLoginState(ELoginState.Requesting);\r\n await waitFor(300);\r\n this.loading = true;\r\n const loginRes = await this.login();\r\n if (!loginRes?.status) {\r\n const message = loginRes?.message ?? \"An error occurred\";\r\n this.publishLoginState(ELoginState.Error, message);\r\n return this.showMessage(\"error\", message);\r\n }\r\n\r\n this.tokenService.accessToken = loginRes.tokens.accessToken;\r\n const cookieOptions = { expires: this.loginConfig.expire ?? 365 }\r\n LocalizeApiToken.storage.set(this.config.refreshToken?.name || '', loginRes.tokens.refreshToken, cookieOptions);\r\n this.apiService.clearRequiredLoginStateAfterLogin();\r\n\r\n this.publishLoginState(ELoginState.Success);\r\n this.loginSuccess();\r\n }\r\n\r\n private publishLoginState(state: ELoginState, message?: string): void {\r\n this.broadcastService.publish<ILoginBroadcastMessage>(this.loginBroadcastChannel, {\r\n state,\r\n sourceId: this.sourceId,\r\n message,\r\n });\r\n }\r\n\r\n private async login() {\r\n if (!this.loginUrl?.trim().length) {\r\n this.showMessage(\"error\", \"Login url is required\");\r\n throw new Error(\"Login url is required\");\r\n }\r\n\r\n try {\r\n\r\n if (this.loginConfig.loginFunction) {\r\n console.log(\"Using custom login function\");\r\n return await this.loginConfig.loginFunction(this.decodeToken?.email ?? '', this.password.trim(), this.getHeaders());\r\n }\r\n\r\n return await new Promise<any>((resolve, reject) =>\r\n this.httpClient.post(this.loginUrl!,\r\n { password: this.password.trim() },\r\n { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));\r\n\r\n } catch (e: any) {\r\n this.showMessage(\"error\", e.message);\r\n return null;\r\n }\r\n }\r\n\r\n private getHeaders() {\r\n return {\r\n [LocalizeApiToken.httpHeaders.X_REFRESH_TOKEN]: this.tokenService.refreshToken ?? \"\",\r\n [LocalizeApiToken.httpHeaders.X_TENANT]: this.tokenService.tenantToken ?? \"\",\r\n };\r\n }\r\n\r\n get isValidPassword(): boolean {\r\n this.loading = false;\r\n return this.properties.passwordValidator\r\n ? this.properties.passwordValidator(this.password)\r\n : this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;\r\n }\r\n\r\n clickLogout = () => this.logout?.();\r\n\r\n private showMessage(severity: string, summary: string) {\r\n this.messageService.add({ key: this.messageKey, severity, summary });\r\n this.loading = false;\r\n }\r\n\r\n get sanitizedTitle() {\r\n return this.sanitizer.bypassSecurityTrustHtml(this.properties.title ?? '');\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeLoginListener?.();\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\r\nimport { LocalizeTokenLoginDialogComponent } from '../components/localize-token-login-dialog.component';\r\nimport { ILoginDialogConfig } from '../models/localize-token-models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeTokenDialogService {\r\n\r\n constructor(private readonly injector: Injector) { }\r\n\r\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\r\n\r\n config = this.intercepDialogConfig(config);\r\n this.initConfig(loginConfig);\r\n\r\n config.data = { ...(config.data || {}), ...{ loginConfig } };\r\n\r\n const dialogService = this.injector.get(DialogService);\r\n const dialog = dialogService.open(LocalizeTokenLoginDialogComponent, config);\r\n\r\n await new Promise<void>((resolve) =>\r\n dialog.onClose.subscribe(res => {\r\n if (res) {\r\n resolve();\r\n }\r\n }));\r\n }\r\n\r\n private intercepDialogConfig(config?: DynamicDialogConfig) {\r\n config ??= {\r\n header: 'Login',\r\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\r\n modal: true,\r\n closable: false,\r\n showHeader: false,\r\n }\r\n\r\n config = {\r\n ...config, ...{\r\n contentStyle: { 'height': '100%', 'border-radius': '20px' }\r\n }\r\n }\r\n config.style = { ...config.style, ...{ 'border-radius': '20px' } };\r\n return config;\r\n }\r\n\r\n\r\n private initConfig(loginConfig: ILoginDialogConfig) {\r\n loginConfig ??= {}\r\n loginConfig.properties ??= {\r\n title: 'Your session is expired!<br/> Please login again to continue.',\r\n loginSuccessMessage: 'You have successfully logged in.',\r\n logoImage: '/assets/images/logo-300px.png',\r\n username: { placeHolder: 'Username' },\r\n password: { placeHolder: 'Password' },\r\n loginButton: { placeHolder: 'Login' },\r\n logoutButton: {\r\n message: 'No, I want to login with another user.',\r\n placeHolder: 'Logout'\r\n }\r\n }\r\n }\r\n}\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { LocalizeTokenLoginDialogComponent } from \"../components/localize-token-login-dialog.component\";\r\nimport { ToastModule } from \"primeng/toast\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LocalizeTokenDialogService } from \"../services/localize-token-dialog.service\";\r\nimport { BrowserModule } from \"@angular/platform-browser\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n@NgModule({\r\n declarations: [LocalizeTokenLoginDialogComponent],\r\n exports: [LocalizeTokenLoginDialogComponent],\r\n imports: [\r\n CommonModule,\r\n ToastModule,\r\n InputTextModule,\r\n BrowserModule,\r\n FormsModule,\r\n ButtonModule,\r\n InputGroupModule,\r\n InputGroupAddonModule\r\n ],\r\n providers: [LocalizeTokenDialogService],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class LocalizeTokenModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { LocalizeTokenDialogService } from './localize-token-dialog.service';\r\nimport { LocalizeApiService, LocalizeApiTokenService, ILocalizeTokenConfig, ILocalizeApiConfigs } from '@sambath999/localize-api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeTokenConfigureService {\r\n readonly api: LocalizeApiService;\r\n readonly token: LocalizeApiTokenService;\r\n readonly loginDialog: LocalizeTokenDialogService;\r\n\r\n constructor(tokenService: LocalizeApiTokenService,\r\n apiService: LocalizeApiService,\r\n loginDialogService: LocalizeTokenDialogService) {\r\n this.api = apiService;\r\n this.token = tokenService;\r\n this.loginDialog = loginDialogService;\r\n }\r\n\r\n initialize(tokenConfig: ILocalizeTokenConfig, apiConfig: ILocalizeApiConfigs) {\r\n // Initialize the LocalizeApiTokenService with the provided token configuration\r\n this.token.init(tokenConfig);\r\n\r\n // Initialize the LocalizeApiService with the provided API configuration\r\n this.api.init(apiConfig);\r\n\r\n console.log('LocalizeTokenConfigureService initialized with token and API configurations.');\r\n\r\n }\r\n}\r\n","//#region login dialog\r\nexport * from './components/localize-token-login-dialog.component';\r\nexport * from './models/localize-token.module';\r\nexport * from './services/localize-token-dialog.service';\r\n\r\n\r\n//#region localize api token\r\nexport * from './services/localize-token-configure.service';\r\nexport * from './models/localize-token.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.LocalizeTokenDialogService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sambath999-localize-token.mjs","sources":["../../src/package/components/localize-token-login-dialog.component.ts","../../src/package/services/localize-token-dialog.service.ts","../../src/package/models/localize-token.module.ts","../../src/package/services/localize-token-configure.service.ts","../../src/package/public-api.ts","../../src/package/sambath999-localize-token.ts"],"sourcesContent":["import {\r\n ChangeDetectorRef,\r\n Component,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { DynamicDialogConfig, DynamicDialogRef } from \"primeng/dynamicdialog\";\r\nimport { ILoginDialogConfig, ILoginDialogProperties } from \"../models/localize-token-models\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { JwtPayload, LocalizeApiLoginService, waitFor } from \"@sambath999/localize-api\";\r\n\r\n@Component({\r\n standalone: false,\r\n styles: [`\r\n #login-dlg-wrap {\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n padding: 30px;\r\n height: 100%;\r\n }\r\n \r\n .login-dlg-elm {\r\n margin-top: 1rem;\r\n }\r\n\r\n .login-dlg-elm.login-dlg-suggest {\r\n display: flex ;\r\n align-items: center;\r\n user-select: none;\r\n border-bottom: solid 1px #ddd;\r\n border-radius: 5px;\r\n padding: 5px 10px;\r\n background: #f9f9f9;\r\n box-shadow: 1px 5px 10px -12px #000;\r\n }\r\n \r\n #login-dlg-header {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n #login-dlg-header h3 {\r\n font-weight: bold;\r\n font-size: 0.9rem;\r\n color: orange;\r\n text-align: center;\r\n }\r\n \r\n #login-logo {\r\n height: 55px;\r\n width: 55px;\r\n /* background: url(\"/assets/images/logo-300px.png\") no-repeat; */\r\n background-size: contain !important;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup {\r\n height: 45px;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon {\r\n height: 45px;\r\n border-radius: 15px 0 0 15px;\r\n width: 50px;\r\n }\r\n #login-dlg-content *{\r\n font-size: .9rem;\r\n /* font-family: 'Lexend', 'Roboto', sans-serif, 'material-icons-round'; */\r\n }\r\n \r\n #login-dlg-content .p-inputgroup .p-inputgroup-addon * {\r\n font-size: 1rem;\r\n }\r\n \r\n #login-dlg-content .p-inputgroup input {\r\n height: 45px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n \r\n #login-dlg-content button {\r\n height: 45px;\r\n border-radius: 15px;\r\n }\r\n \r\n /*check animation block*/\r\n \r\n .check-animation-wrap {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: calc(100% - 200px);\r\n min-height: 400px;\r\n }\r\n \r\n .check-main-container {\r\n width: 100%;\r\n height: 100vh;\r\n display: flex;\r\n flex-flow: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n \r\n .check-container {\r\n width: 6.25rem;\r\n height: 7.5rem;\r\n display: flex;\r\n flex-flow: column;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n \r\n .check-container .check-background {\r\n width: 100%;\r\n height: calc(100% - 1.25rem);\r\n background: linear-gradient(to bottom right, #5de593, #41d67c);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n transform: scale(0.84);\r\n border-radius: 50%;\r\n animation: animateContainer 0.75s ease-out forwards 0.75s;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n }\r\n \r\n .check-container .check-background svg {\r\n width: 65%;\r\n transform: translateY(0.25rem);\r\n stroke-dasharray: 80;\r\n stroke-dashoffset: 80;\r\n animation: animateCheck 0.35s forwards 1.25s ease-out;\r\n min-width: auto !important;\r\n }\r\n \r\n .check-container .check-shadow {\r\n bottom: calc(-15% - 5px);\r\n left: 0;\r\n border-radius: 50%;\r\n background: radial-gradient(closest-side, rgba(73, 218, 131, 1), transparent);\r\n animation: animateShadow 0.75s ease-out forwards 0.75s;\r\n }\r\n \r\n @keyframes animateContainer {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 25% {\r\n opacity: 1;\r\n transform: scale(0.9);\r\n box-shadow: 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 43.75% {\r\n transform: scale(1.15);\r\n box-shadow: 0px 0px 0px 43.334px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 65px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 62.5% {\r\n transform: scale(1);\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 21.667px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 81.25% {\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n \r\n 100% {\r\n opacity: 1;\r\n box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset, 0px 0px 0px 0px rgba(255, 255, 255, 0.25) inset;\r\n }\r\n }\r\n \r\n @keyframes animateCheck {\r\n from {\r\n stroke-dashoffset: 80;\r\n }\r\n \r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n }\r\n \r\n @keyframes animateShadow {\r\n 0% {\r\n opacity: 0;\r\n width: 100%;\r\n height: 15%;\r\n }\r\n \r\n 25% {\r\n opacity: 0.25;\r\n }\r\n \r\n 43.75% {\r\n width: 40%;\r\n height: 7%;\r\n opacity: 0.35;\r\n }\r\n \r\n 100% {\r\n width: 85%;\r\n height: 15%;\r\n opacity: 0.25;\r\n }\r\n }\r\n #login-dlg-wrap .loader-wrap {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height:100%;\r\n width:100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 100;\r\n background: #ffffff42;\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n #login-dlg-wrap .login-dlg-loader {\r\n border: 15px solid #e7e7e7;\r\n border-top: 15px solid #52dba1;\r\n border-radius: 50%;\r\n width: 100px;\r\n height: 100px;\r\n animation: spinloader 2s linear infinite;\r\n }\r\n\r\n #login-dlg-wrap .loader-wrap::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 70px;\r\n height: 70px;\r\n transform: translate(-50%, -50%);\r\n z-index: 1;\r\n border: 15px solid #e7e7e700;\r\n border-top: 15px solid #52dba1c9;\r\n border-radius: 50%;\r\n animation: spinloader .75s linear infinite;\r\n }\r\n\r\n @keyframes spinloader {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `],\r\n template: `<p-toast key=\"$login-dlg\" position=\"top-center\"></p-toast>\r\n <div id=\"login-dlg-wrap\">\r\n <div id=\"login-dlg-header\">\r\n <div id=\"login-logo\" class=\"p-mb-2\" style=\"background: url('{{properties.logoImage}}') no-repeat\"></div>\r\n <h3 *ngIf=\"!success\" [innerHTML]=\"sanitizedTitle\"></h3>\r\n <h3 *ngIf=\"success\" style=\"color:green !important;\">{{properties.loginSuccessMessage}}</h3>\r\n </div>\r\n <div id=\"login-dlg-content\">\r\n <ng-container *ngIf=\"!success\">\r\n <div *ngIf=\"loading\" class=\"loader-wrap\">\r\n <div class=\"login-dlg-loader\"></div>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <p-inputgroup>\r\n <p-inputgroup-addon>\r\n <i class=\"material-icons-round\">person</i>\r\n </p-inputgroup-addon>\r\n <input disabled pInputText type=\"text\" placeholder=\"{{properties.username?.placeHolder}}\" [value]=\"decodeToken?.email\" />\r\n </p-inputgroup>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm\">\r\n <p-inputgroup>\r\n <p-inputgroup-addon>\r\n <i class=\"material-icons-round\">lock</i>\r\n </p-inputgroup-addon>\r\n <input [disabled]=\"loading\" (keydown.enter)=\"clickLogin()\" pInputText type=\"password\" \r\n placeholder=\"{{properties.password?.placeHolder}}\" [(ngModel)]=\"password\"\r\n autofocus />\r\n </p-inputgroup>\r\n </div>\r\n <div class=\"login-dlg-elm\">\r\n <button style=\"width: 100%;\" pButton type=\"button\" label=\"{{properties.loginButton?.placeHolder}}\" (click)=\"clickLogin()\"\r\n [disabled]=\"!password || loading\"></button>\r\n </div>\r\n \r\n <div class=\"login-dlg-elm login-dlg-suggest\" style=\"display:flex;align-items: center;user-select: none;\">\r\n <span>{{properties.logoutButton?.message}}</span>\r\n <button class=\"p-button-text\" pButton type=\"button\" label=\"{{properties.logoutButton?.placeHolder}}\" \r\n (click)=\"clickLogout()\"></button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"success\">\r\n <div style=\"margin-top:35px;\"></div>\r\n <div class=\"check-animation-wrap\">\r\n <div class=\"check-main-container\">\r\n <div class=\"check-container\">\r\n <div class=\"check-background\">\r\n <svg viewBox=\"0 0 65 51\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M7 25L27.3077 44L58.5 7\" stroke=\"white\" stroke-width=\"13\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>`,\r\n selector: \"app-localize-logindlg\",\r\n providers: [MessageService],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocalizeTokenLoginDialogComponent implements OnInit, OnDestroy {\r\n readonly messageKey = \"$login-dlg\";\r\n password: any;\r\n readonly decodeToken: JwtPayload | null;\r\n get loading() { return this.apiLoginService.isLoading; }\r\n get success() { return this.apiLoginService.isSuccess; }\r\n private readonly loginConfig: ILoginDialogConfig\r\n\r\n private readonly logout?: () => any\r\n readonly properties: ILoginDialogProperties;\r\n private readonly apiLoginService: LocalizeApiLoginService;\r\n\r\n constructor(\r\n private readonly messageService: MessageService,\r\n private readonly cdt: ChangeDetectorRef,\r\n private readonly dlgRef: DynamicDialogRef,\r\n private readonly dlgConfig: DynamicDialogConfig,\r\n private readonly sanitizer: DomSanitizer,\r\n private readonly injector: Injector\r\n ) {\r\n this.loginConfig = this.dlgConfig.data.loginConfig;\r\n this.apiLoginService = this.injector.get(LocalizeApiLoginService);\r\n this.properties = this.loginConfig.properties!;\r\n this.decodeToken = this.apiLoginService.decodedToken;\r\n\r\n this.logout = this.loginConfig.logoutFunc;\r\n this.configure();\r\n }\r\n\r\n private configure() {\r\n this.dlgConfig.closable = false;\r\n this.dlgConfig.dismissableMask = false;\r\n this.dlgConfig.modal = true;\r\n\r\n this.apiLoginService.configure({\r\n loginUrl: this.loginConfig.loginUrl,\r\n onSuccess: this.loginSuccess.bind(this),\r\n onFailure: (msg) => this.showMessage(\"error\", msg),\r\n onError: (msg) => this.showMessage(\"error\", msg),\r\n loginFunction: this.loginConfig.loginFunction,\r\n refreshTokenTtl: this.loginConfig.expire,\r\n passwordResolver: () => this.password,\r\n passwordValidator: this.loginConfig.properties?.passwordValidator?.bind(this),\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.decodeToken) {\r\n this.showMessage(\"error\", \"Invalid Token. Please login again.\");\r\n setTimeout(() => this.logout?.(), 2000);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdt.detectChanges();\r\n }\r\n\r\n private async loginSuccess() {\r\n await waitFor(2000);\r\n this.dlgRef.close(true);\r\n }\r\n\r\n async clickLogin() {\r\n await this.apiLoginService.clickLogin();\r\n }\r\n\r\n clickLogout() {\r\n this.logout?.();\r\n }\r\n\r\n private showMessage(severity: string, summary: string) {\r\n this.messageService.add({ key: this.messageKey, severity, summary });\r\n }\r\n\r\n get sanitizedTitle() {\r\n return this.sanitizer.bypassSecurityTrustHtml(this.properties.title ?? '');\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.apiLoginService.unConfigure();\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { DialogService, DynamicDialogConfig } from 'primeng/dynamicdialog';\r\nimport { LocalizeTokenLoginDialogComponent } from '../components/localize-token-login-dialog.component';\r\nimport { ILoginDialogConfig } from '../models/localize-token-models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeTokenDialogService {\r\n\r\n constructor(private readonly injector: Injector) { }\r\n\r\n async openLoginDialog(loginConfig: ILoginDialogConfig, config?: DynamicDialogConfig) {\r\n\r\n config = this.intercepDialogConfig(config);\r\n this.initConfig(loginConfig);\r\n\r\n config.data = { ...(config.data || {}), ...{ loginConfig } };\r\n\r\n const dialogService = this.injector.get(DialogService);\r\n const dialog = dialogService.open(LocalizeTokenLoginDialogComponent, config);\r\n\r\n await new Promise<void>((resolve) =>\r\n dialog.onClose.subscribe(res => {\r\n if (res) {\r\n resolve();\r\n }\r\n }));\r\n }\r\n\r\n private intercepDialogConfig(config?: DynamicDialogConfig) {\r\n config ??= {\r\n header: 'Login',\r\n style: { 'max-width': '400px', width: '100%', 'height': '650px' },\r\n modal: true,\r\n closable: false,\r\n showHeader: false,\r\n }\r\n\r\n config = {\r\n ...config, ...{\r\n contentStyle: { 'height': '100%', 'border-radius': '20px' }\r\n }\r\n }\r\n config.style = { ...config.style, ...{ 'border-radius': '20px' } };\r\n return config;\r\n }\r\n\r\n\r\n private initConfig(loginConfig: ILoginDialogConfig) {\r\n loginConfig ??= {}\r\n loginConfig.properties ??= {\r\n title: 'Your session is expired!<br/> Please login again to continue.',\r\n loginSuccessMessage: 'You have successfully logged in.',\r\n logoImage: '/assets/images/logo-300px.png',\r\n username: { placeHolder: 'Username' },\r\n password: { placeHolder: 'Password' },\r\n loginButton: { placeHolder: 'Login' },\r\n logoutButton: {\r\n message: 'No, I want to login with another user.',\r\n placeHolder: 'Logout'\r\n }\r\n }\r\n }\r\n}\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { LocalizeTokenLoginDialogComponent } from \"../components/localize-token-login-dialog.component\";\r\nimport { ToastModule } from \"primeng/toast\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LocalizeTokenDialogService } from \"../services/localize-token-dialog.service\";\r\nimport { BrowserModule } from \"@angular/platform-browser\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n@NgModule({\r\n declarations: [LocalizeTokenLoginDialogComponent],\r\n exports: [LocalizeTokenLoginDialogComponent],\r\n imports: [\r\n CommonModule,\r\n ToastModule,\r\n InputTextModule,\r\n BrowserModule,\r\n FormsModule,\r\n ButtonModule,\r\n InputGroupModule,\r\n InputGroupAddonModule\r\n ],\r\n providers: [LocalizeTokenDialogService],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class LocalizeTokenModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { LocalizeTokenDialogService } from './localize-token-dialog.service';\r\nimport { LocalizeApiService, LocalizeApiTokenService, ILocalizeTokenConfig, ILocalizeApiConfigs } from '@sambath999/localize-api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeTokenConfigureService {\r\n readonly api: LocalizeApiService;\r\n readonly token: LocalizeApiTokenService;\r\n readonly loginDialog: LocalizeTokenDialogService;\r\n\r\n constructor(tokenService: LocalizeApiTokenService,\r\n apiService: LocalizeApiService,\r\n loginDialogService: LocalizeTokenDialogService) {\r\n this.api = apiService;\r\n this.token = tokenService;\r\n this.loginDialog = loginDialogService;\r\n }\r\n\r\n initialize(tokenConfig: ILocalizeTokenConfig, apiConfig: ILocalizeApiConfigs) {\r\n // Initialize the LocalizeApiTokenService with the provided token configuration\r\n this.token.init(tokenConfig);\r\n\r\n // Initialize the LocalizeApiService with the provided API configuration\r\n this.api.init(apiConfig);\r\n\r\n console.log('LocalizeTokenConfigureService initialized with token and API configurations.');\r\n\r\n }\r\n}\r\n","//#region login dialog\r\nexport * from './components/localize-token-login-dialog.component';\r\nexport * from './models/localize-token.module';\r\nexport * from './services/localize-token-dialog.service';\r\n\r\n\r\n//#region localize api token\r\nexport * from './services/localize-token-configure.service';\r\nexport * from './models/localize-token.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.LocalizeTokenDialogService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAoUa,iCAAiC,CAAA;AAazB,IAAA,cAAA;AACA,IAAA,GAAA;AACA,IAAA,MAAA;AACA,IAAA,SAAA;AACA,IAAA,SAAA;AACA,IAAA,QAAA;IAjBV,UAAU,GAAG,YAAY;AAClC,IAAA,QAAQ;AACC,IAAA,WAAW;IACpB,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;IACtD,IAAI,OAAO,GAAK,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACrC,IAAA,WAAW;AAEX,IAAA,MAAM;AACd,IAAA,UAAU;AACF,IAAA,eAAe;IAEhC,WACmB,CAAA,cAA8B,EAC9B,GAAsB,EACtB,MAAwB,EACxB,SAA8B,EAC9B,SAAuB,EACvB,QAAkB,EAAA;QALlB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAG,CAAA,GAAA,GAAH,GAAG;QACH,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAEzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW;QAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAW;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY;QAEpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;QACzC,IAAI,CAAC,SAAS,EAAE;;IAGV,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI;AAE3B,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;YACnC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,YAAA,SAAS,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC;AAClD,YAAA,OAAO,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC;AAChD,YAAA,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa;AAC7C,YAAA,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AACxC,YAAA,gBAAgB,EAAE,MAAM,IAAI,CAAC,QAAQ;AACrC,YAAA,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC;AAC9E,SAAA,CAAC;;IAGJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,oCAAoC,CAAC;AAC/D,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC;;;IAI3C,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAGlB,IAAA,MAAM,YAAY,GAAA;AACxB,QAAA,MAAM,OAAO,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;;AAGzB,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;;IAGzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,IAAI;;IAGT,WAAW,CAAC,QAAgB,EAAE,OAAe,EAAA;AACnD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;;AAGtE,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;;IAG5E,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;;uGA/EzB,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAHjC,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,CAAC,cAAc,CAAC,EA7DjB,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mkHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKI,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAtT7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,KAAK,EAqPP,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA2DH,EACG,QAAA,EAAA,uBAAuB,aACtB,CAAC,cAAc,CAAC,EACZ,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,mkHAAA,CAAA,EAAA;;;MC1T1B,0BAA0B,CAAA;AAER,IAAA,QAAA;AAA7B,IAAA,WAAA,CAA6B,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;AAErC,IAAA,MAAM,eAAe,CAAC,WAA+B,EAAE,MAA4B,EAAA;AAEjF,QAAA,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AAE5B,QAAA,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;QAE5D,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;QACtD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC;AAE5E,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAC9B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAG;YAC7B,IAAI,GAAG,EAAE;AACP,gBAAA,OAAO,EAAE;;SAEZ,CAAC,CAAC;;AAGC,IAAA,oBAAoB,CAAC,MAA4B,EAAA;AACvD,QAAA,MAAM,KAAK;AACT,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;AACjE,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,KAAK;SAClB;AAED,QAAA,MAAM,GAAG;YACP,GAAG,MAAM,EAAE,GAAG;gBACZ,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;AAC1D;SACF;AACD,QAAA,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE;AAClE,QAAA,OAAO,MAAM;;AAIP,IAAA,UAAU,CAAC,WAA+B,EAAA;QAChD,WAAW,KAAK,EAAE;QAClB,WAAW,CAAC,UAAU,KAAK;AACzB,YAAA,KAAK,EAAE,+DAA+D;AACtE,YAAA,mBAAmB,EAAE,kCAAkC;AACvD,YAAA,SAAS,EAAE,+BAA+B;AAC1C,YAAA,QAAQ,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;AACrC,YAAA,QAAQ,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;AACrC,YAAA,WAAW,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;AACrC,YAAA,YAAY,EAAE;AACZ,gBAAA,OAAO,EAAE,wCAAwC;AACjD,gBAAA,WAAW,EAAE;AACd;SACF;;uGAtDQ,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA;;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCqBY,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAnB,mBAAmB,EAAA,YAAA,EAAA,CAff,iCAAiC,CAAA,EAAA,OAAA,EAAA,CAG9C,YAAY;YACZ,WAAW;YACX,eAAe;YACf,aAAa;YACb,WAAW;YACX,YAAY;YACZ,gBAAgB;AAChB,YAAA,qBAAqB,aATb,iCAAiC,CAAA,EAAA,CAAA;AAchC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAHnB,SAAA,EAAA,CAAC,0BAA0B,CAAC,YATrC,YAAY;YACZ,WAAW;YACX,eAAe;YACf,aAAa;YACb,WAAW;YACX,YAAY;YACZ,gBAAgB;YAChB,qBAAqB,CAAA,EAAA,CAAA;;2FAKZ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhB/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,iCAAiC,CAAC;oBACjD,OAAO,EAAE,CAAC,iCAAiC,CAAC;AAC5C,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,eAAe;wBACf,aAAa;wBACb,WAAW;wBACX,YAAY;wBACZ,gBAAgB;wBAChB;AACD,qBAAA;oBACD,SAAS,EAAE,CAAC,0BAA0B,CAAC;oBACvC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;MCpBY,6BAA6B,CAAA;AAC/B,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,WAAW;AAEpB,IAAA,WAAA,CAAY,YAAqC,EAC/C,UAA8B,EAC9B,kBAA8C,EAAA;AAC9C,QAAA,IAAI,CAAC,GAAG,GAAG,UAAU;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,YAAY;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,kBAAkB;;IAGvC,UAAU,CAAC,WAAiC,EAAE,SAA8B,EAAA;;AAE1E,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;AAG5B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AAExB,QAAA,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC;;uGApBlF,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA;;2FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;ACAA;;AAEG;;;;"}
|
|
@@ -30,7 +30,7 @@ export interface ILoginDialogProperties {
|
|
|
30
30
|
* @param password
|
|
31
31
|
* @returns
|
|
32
32
|
*/
|
|
33
|
-
passwordValidator?: (password: string) => boolean;
|
|
33
|
+
passwordValidator?: (password: string | undefined) => boolean;
|
|
34
34
|
}
|
|
35
35
|
export interface ILoginDialogConfig {
|
|
36
36
|
loginUrl?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sambath999/localize-token",
|
|
3
|
-
"version": "19.1.
|
|
3
|
+
"version": "19.1.10",
|
|
4
4
|
"description": "localize token client app",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"primeflex": "3.1.3",
|
|
27
27
|
"primeng": "19.0.5",
|
|
28
28
|
"rxjs": "7.8.1",
|
|
29
|
-
"@sambath999/localize-api": "1.0.
|
|
29
|
+
"@sambath999/localize-api": "1.0.5",
|
|
30
30
|
"tslib": "^2.3.0"
|
|
31
31
|
},
|
|
32
32
|
"module": "fesm2022/sambath999-localize-token.mjs",
|