@everymatrix/user-login 1.13.16

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.
Files changed (47) hide show
  1. package/dist/cjs/index-59191539.js +1231 -0
  2. package/dist/cjs/index.cjs.js +2 -0
  3. package/dist/cjs/loader.cjs.js +21 -0
  4. package/dist/cjs/user-login.cjs.entry.js +239 -0
  5. package/dist/cjs/user-login.cjs.js +19 -0
  6. package/dist/collection/collection-manifest.json +12 -0
  7. package/dist/collection/components/user-login/user-login.css +162 -0
  8. package/dist/collection/components/user-login/user-login.js +356 -0
  9. package/dist/collection/index.js +1 -0
  10. package/dist/collection/utils/locale.utils.js +65 -0
  11. package/dist/collection/utils/utils.js +3 -0
  12. package/dist/components/index.d.ts +26 -0
  13. package/dist/components/index.js +1 -0
  14. package/dist/components/user-login.d.ts +11 -0
  15. package/dist/components/user-login.js +270 -0
  16. package/dist/esm/index-58908c9a.js +1206 -0
  17. package/dist/esm/index.js +1 -0
  18. package/dist/esm/loader.js +17 -0
  19. package/dist/esm/polyfills/core-js.js +11 -0
  20. package/dist/esm/polyfills/css-shim.js +1 -0
  21. package/dist/esm/polyfills/dom.js +79 -0
  22. package/dist/esm/polyfills/es5-html-element.js +1 -0
  23. package/dist/esm/polyfills/index.js +34 -0
  24. package/dist/esm/polyfills/system.js +6 -0
  25. package/dist/esm/user-login.entry.js +235 -0
  26. package/dist/esm/user-login.js +17 -0
  27. package/dist/index.cjs.js +1 -0
  28. package/dist/index.js +1 -0
  29. package/dist/stencil.config.js +22 -0
  30. package/dist/types/Users/user/workspace/everymatrix/widgets-stencil/packages/user-login/.stencil/packages/user-login/stencil.config.d.ts +2 -0
  31. package/dist/types/components/user-login/user-login.d.ts +65 -0
  32. package/dist/types/components.d.ts +101 -0
  33. package/dist/types/index.d.ts +1 -0
  34. package/dist/types/stencil-public-runtime.d.ts +1565 -0
  35. package/dist/types/utils/locale.utils.d.ts +2 -0
  36. package/dist/types/utils/utils.d.ts +1 -0
  37. package/dist/user-login/index.esm.js +0 -0
  38. package/dist/user-login/p-5c2c28b2.js +1 -0
  39. package/dist/user-login/p-cd262cc8.entry.js +1 -0
  40. package/dist/user-login/user-login.esm.js +1 -0
  41. package/loader/cdn.js +3 -0
  42. package/loader/index.cjs.js +3 -0
  43. package/loader/index.d.ts +12 -0
  44. package/loader/index.es2017.js +3 -0
  45. package/loader/index.js +4 -0
  46. package/loader/package.json +10 -0
  47. package/package.json +19 -0
@@ -0,0 +1,270 @@
1
+ import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
2
+
3
+ const DEFAULT_LANGUAGE = 'en';
4
+ const SUPPORTED_LANGUAGES = ['ro', 'en', 'cz', 'de'];
5
+ const TRANSLATIONS = {
6
+ en: {
7
+ invalidField: 'This field is invalid',
8
+ forgotPassword: 'Forgot Password',
9
+ userEmail: 'Username or Email',
10
+ password: 'Password',
11
+ login: 'Login'
12
+ },
13
+ ro: {
14
+ invalidField: 'This field is invalid',
15
+ forgotPassword: 'Forgot Password',
16
+ userEmail: 'Username or Email',
17
+ password: 'Password',
18
+ login: 'Login'
19
+ },
20
+ fr: {
21
+ invalidField: 'This field is invalid',
22
+ forgotPassword: 'Forgot Password',
23
+ userEmail: 'Username or Email',
24
+ password: 'Password',
25
+ login: 'Login'
26
+ },
27
+ cs: {
28
+ invalidField: 'Ovo polje je nevažeće.',
29
+ forgotPassword: 'Zaboravio sam lozinku ',
30
+ userEmail: 'Korisničko ime ili email',
31
+ password: 'Lozinka',
32
+ login: 'Prijava'
33
+ },
34
+ de: {
35
+ invalidField: 'This field is invalid',
36
+ forgotPassword: 'Forgot Password',
37
+ userEmail: 'Username or Email',
38
+ password: 'Password',
39
+ login: 'Login'
40
+ },
41
+ };
42
+ const getTranslations = (url) => {
43
+ // fetch url, get the data, replace the TRANSLATIONS content
44
+ return new Promise((resolve) => {
45
+ fetch(url)
46
+ .then((res) => res.json())
47
+ .then((data) => {
48
+ Object.keys(data).forEach((item) => {
49
+ for (let key in data[item]) {
50
+ TRANSLATIONS[item][key] = data[item][key];
51
+ }
52
+ });
53
+ resolve(true);
54
+ });
55
+ });
56
+ };
57
+ const translate = (key, customLang, values) => {
58
+ const lang = customLang;
59
+ let translation = TRANSLATIONS[lang !== undefined && SUPPORTED_LANGUAGES.includes(lang) ? lang : DEFAULT_LANGUAGE][key];
60
+ if (values !== undefined) {
61
+ for (const [key, value] of Object.entries(values.values)) {
62
+ const regex = new RegExp(`{${key}}`, 'g');
63
+ translation = translation.replace(regex, value);
64
+ }
65
+ }
66
+ return translation;
67
+ };
68
+
69
+ const userLoginCss = ":host{display:block;font-family:\"Roboto\", sans-serif}section{min-height:100vh;width:100%;background-position:center;background-size:cover}.FormBox{height:100vh;display:flex;position:relative;background:#082649;border:none;backdrop-filter:blur(15px) brightness(80%);justify-content:center;align-items:center}.InputBox{position:relative;margin:30px 0;width:310px;border-bottom:2px solid #0797B9}.InputBox.InputInvalidBox::after{content:\"\";height:2px;width:100%;transition:width 0.6s linear;background:#C23135}.InputBox::after{content:\"\";display:block;width:0;height:2px;position:relative;top:2px}.InputBox .PasswordVisibilityIcon{fill:#0797B9}.InputBox .InputIcon .TogglePasswordVisibility{cursor:pointer;position:absolute;top:18px;right:0}.InputBox .InputIcon .TogglePasswordVisibility.PasswordVisible{top:19.5px}.InputBox label{position:absolute;top:50%;left:5px;transform:translateY(-50%);color:#0797B9;font-size:1em;pointer-events:none;transition:0.5s}.InputBox label.FieldInvalid{color:#C23135}.InputBox input{width:100%;height:50px;background:transparent;border:none;outline:none;font-size:1em;padding:0 35px 0 5px;color:#fff;box-sizing:border-box}input:focus~label,label.FieldFilledIn{top:-3px;font-size:0.7em}.ForgotPassword button{margin:-10px 0 17px;font-size:0.9em;color:#0797B9;display:flex;justify-content:space-between;background-color:transparent;padding:0;height:unset;border:0;cursor:pointer}.ForgotPassword button:hover{color:#fff}.SubmitCredentials{display:block;margin:0 auto;padding:10px 20px;border-radius:5px;color:#fff;background:linear-gradient(to right, #EA0C66, #77318F);border:none;outline:none;cursor:pointer;font-size:1em}.SubmitCredentials:disabled{background:#707070}.Register{font-size:0.9em;color:#fff;text-align:center;margin:25px 0 10px}.Register p a{text-decoration:none;color:#fff;font-weight:600}.Register p a:hover{text-decoration:underline}.InvalidField{position:absolute;top:45px;color:#C23135;font-size:0.7em}.SubmitCredentials{margin-bottom:20px}.CredentialsError{color:#C23135;font-size:0.7em;padding:0 0 20px 0;margin:0}@media screen and (max-width: 480px){.FormBox{width:100%;border-radius:0px}}";
70
+
71
+ const UserLogin$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
72
+ constructor() {
73
+ super();
74
+ this.__registerHost();
75
+ this.__attachShadow();
76
+ /**
77
+ * Endpoint
78
+ */
79
+ this.endpoint = '';
80
+ /**
81
+ * Language
82
+ */
83
+ this.lang = 'en';
84
+ /**
85
+ * Client styling
86
+ */
87
+ this.clientStyling = '';
88
+ /**
89
+ * Client styling by url
90
+ */
91
+ this.clientStylingUrl = '';
92
+ /**
93
+ * Translation url
94
+ */
95
+ this.translationUrl = '';
96
+ /**
97
+ * Endpoint
98
+ */
99
+ this.passwordReset = false;
100
+ /**
101
+ * Endpoint
102
+ */
103
+ this.userEmailRegex = '^(?:[A-Z0-9][A-Z0-9._%@+-]{5,30}|[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})$';
104
+ /**
105
+ * Endpoint
106
+ */
107
+ this.passwordRegex = '^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\\w\\s]).{8,20}$';
108
+ /**
109
+ * Username
110
+ */
111
+ this.userNameEmail = '';
112
+ /**
113
+ * Password
114
+ */
115
+ this.userPassword = '';
116
+ this.isValidUserEmail = true;
117
+ this.isValidPassword = true;
118
+ this.isPasswordVisible = false;
119
+ this.limitStylingAppends = false;
120
+ this.errorMessage = '';
121
+ this.checkValid = true;
122
+ this.userLogin = async ({ username, password }) => {
123
+ let headers = {
124
+ 'Content-Type': 'application/json'
125
+ };
126
+ let bodyData = {
127
+ username,
128
+ password
129
+ };
130
+ let options = {
131
+ method: 'POST',
132
+ headers,
133
+ body: JSON.stringify(bodyData),
134
+ };
135
+ fetch(`${this.endpoint}/player/legislation/login`, options)
136
+ .then((res) => {
137
+ return res.json();
138
+ }).then((data) => {
139
+ var _a;
140
+ if (data.sessionId) {
141
+ window.postMessage({ type: 'UserSessionID', session: data.sessionID, userid: data.universalID }, window.location.href);
142
+ this.isFormValid(this.errorMessage = '');
143
+ }
144
+ else {
145
+ let error = (_a = data === null || data === void 0 ? void 0 : data.thirdPartyResponse) === null || _a === void 0 ? void 0 : _a.message;
146
+ this.errorMessage = error;
147
+ this.isFormValid(this.errorMessage);
148
+ window.postMessage({ type: "HasError", error }, window.location.href);
149
+ window.postMessage({ type: 'WidgetNotification', data: {
150
+ type: 'error',
151
+ message: error
152
+ } }, window.location.href);
153
+ }
154
+ });
155
+ };
156
+ this.isFormValid = (error) => {
157
+ this.checkValid = (error === '');
158
+ };
159
+ this.setClientStyling = () => {
160
+ let sheet = document.createElement('style');
161
+ sheet.innerHTML = this.clientStyling;
162
+ this.stylingContainer.appendChild(sheet);
163
+ };
164
+ this.setClientStylingURL = () => {
165
+ let url = new URL(this.clientStylingUrl);
166
+ let cssFile = document.createElement('style');
167
+ fetch(url.href)
168
+ .then((res) => res.text())
169
+ .then((data) => {
170
+ cssFile.innerHTML = data;
171
+ setTimeout(() => { this.stylingContainer.appendChild(cssFile); }, 1);
172
+ });
173
+ };
174
+ this.handleInputChange = (event, location) => {
175
+ this.checkValid = true;
176
+ const inputValue = event.target.value;
177
+ if (location === 'user') {
178
+ this.userNameEmail = inputValue;
179
+ this.isValidUserEmail = this.userEmailValidation(this.userNameEmail);
180
+ }
181
+ else {
182
+ this.userPassword = inputValue;
183
+ this.isValidPassword = this.passwordValidation(inputValue);
184
+ }
185
+ };
186
+ this.userEmailValidation = (input) => {
187
+ const regex = new RegExp(this.userEmailRegex, "i");
188
+ return regex.test(input);
189
+ };
190
+ this.passwordValidation = (input) => {
191
+ const regex = new RegExp(this.passwordRegex, '');
192
+ return regex.test(input);
193
+ };
194
+ this.togglePassword = () => {
195
+ this.isPasswordVisible = !this.isPasswordVisible;
196
+ };
197
+ this.resetPassword = () => {
198
+ window.postMessage({ type: "ResetPassword" }, window.location.href);
199
+ };
200
+ }
201
+ handleNewTranslations() {
202
+ getTranslations(this.translationUrl);
203
+ }
204
+ async componentWillLoad() {
205
+ if (this.translationUrl.length > 2) {
206
+ await getTranslations(this.translationUrl);
207
+ }
208
+ }
209
+ componentDidRender() {
210
+ // start custom styling area
211
+ if (!this.limitStylingAppends && this.stylingContainer) {
212
+ if (this.clientStyling)
213
+ this.setClientStyling();
214
+ if (this.clientStylingUrl)
215
+ this.setClientStylingURL();
216
+ this.limitStylingAppends = true;
217
+ }
218
+ // end custom styling area
219
+ }
220
+ render() {
221
+ let visibilityIcon = h("span", { class: "InputIcon" }, this.isPasswordVisible &&
222
+ h("svg", { onClick: () => this.togglePassword(), class: "TogglePasswordVisibility", part: "TogglePasswordVisibility", xmlns: "http://www.w3.org/2000/svg", width: "18.844", height: "12.887", viewBox: "0 0 18.844 12.887" }, h("g", { transform: "translate(-110.856 -23.242)" }, h("circle", { class: "PasswordVisibilityIcon", cx: "0.05", cy: "0.05", r: "0.05", transform: "translate(121.017 31.148)" }), h("g", { transform: "translate(117.499 27.37)" }, h("path", { class: "PasswordVisibilityIcon", d: "M147.413,43.174a2.774,2.774,0,0,0-3.229-3.943Z", transform: "translate(-142.164 -39.123)" }), h("path", { class: "PasswordVisibilityIcon", d: "M137.031,43.1a2.778,2.778,0,0,0,3.447,4.209Z", transform: "translate(-136.413 -42.068)" })), h("g", { transform: "translate(110.856 24.899)" }, h("path", { class: "PasswordVisibilityIcon", d: "M122.538,42.061a7.043,7.043,0,0,1-2.325.53,10.373,10.373,0,0,1-4.393-1.482,36.509,36.509,0,0,1-3.873-2.391.13.13,0,0,1,0-.208,44.141,44.141,0,0,1,3.873-2.651c.394-.233.768-.437,1.13-.622l-.686-.838c-.322.167-.651.347-.99.55a37.989,37.989,0,0,0-3.977,2.729,1.21,1.21,0,0,0-.442.962,1.1,1.1,0,0,0,.494.936,34.416,34.416,0,0,0,3.977,2.469,11.468,11.468,0,0,0,4.886,1.611,8.427,8.427,0,0,0,3.039-.725Z", transform: "translate(-110.856 -33.157)" }), h("path", { class: "PasswordVisibilityIcon", d: "M149.119,34.14a45.875,45.875,0,0,0-4.055-2.729,20.541,20.541,0,0,0-2.547-1.248,5.6,5.6,0,0,0-4.79-.017l.7.856a5.254,5.254,0,0,1,1.672-.346,10.072,10.072,0,0,1,4.445,1.663,34.132,34.132,0,0,1,3.925,2.651.13.13,0,0,1,0,.208,40.2,40.2,0,0,1-3.925,2.391c-.179.092-.352.176-.525.26l.684.835c.1-.054.2-.1.309-.159a36.356,36.356,0,0,0,4.055-2.469,1.067,1.067,0,0,0,.52-.936A1.159,1.159,0,0,0,149.119,34.14Z", transform: "translate(-130.743 -29.617)" })), h("rect", { class: "PasswordVisibilityIcon", width: "0.972", height: "15.861", rx: "0.486", transform: "translate(114.827 23.858) rotate(-39.315)" }))), !this.isPasswordVisible &&
223
+ h("svg", { onClick: () => this.togglePassword(), class: "TogglePasswordVisibility PasswordVisible", part: "TogglePasswordVisibility", xmlns: "http://www.w3.org/2000/svg", width: "18.843", height: "10.5", viewBox: "0 0 18.843 10.5" }, h("g", { transform: "translate(-14.185 -27.832)" }, h("path", { class: "PasswordVisibilityIcon", d: "M23.541,38.332a11.467,11.467,0,0,1-4.886-1.611,34.413,34.413,0,0,1-3.976-2.469,1.1,1.1,0,0,1-.494-.936,1.21,1.21,0,0,1,.442-.962A37.986,37.986,0,0,1,18.6,29.625a16.06,16.06,0,0,1,2.521-1.248,6.862,6.862,0,0,1,2.417-.546,6.862,6.862,0,0,1,2.417.546,20.541,20.541,0,0,1,2.547,1.248,45.872,45.872,0,0,1,4.054,2.729,1.159,1.159,0,0,1,.468.962,1.067,1.067,0,0,1-.52.936,36.353,36.353,0,0,1-4.054,2.469A11.2,11.2,0,0,1,23.541,38.332Zm0-9.46a9.813,9.813,0,0,0-4.392,1.663,44.138,44.138,0,0,0-3.873,2.651.13.13,0,0,0,0,.208,36.5,36.5,0,0,0,3.873,2.391,10.372,10.372,0,0,0,4.392,1.481,11.051,11.051,0,0,0,4.444-1.481,40.2,40.2,0,0,0,3.925-2.391.13.13,0,0,0,0-.208h0a34.132,34.132,0,0,0-3.925-2.651A10.072,10.072,0,0,0,23.541,28.872Z", transform: "translate(0)" }), h("circle", { class: "PasswordVisibilityIcon", cx: "2.779", cy: "2.779", r: "2.779", transform: "translate(20.827 30.303)" }))));
224
+ let userIdentification = h("div", { class: "FormBox", ref: el => this.stylingContainer = el }, h("div", { class: "FormValue" }, h("div", { class: (!this.isValidUserEmail || !this.checkValid) ? 'InputBox InputInvalidBox' : 'InputBox' }, h("input", { type: "text", placeholder: '', value: this.userNameEmail, onFocus: (event) => this.handleInputChange(event, 'user'), onInput: (event) => this.handleInputChange(event, 'user'), required: true }), h("label", { class: (this.userNameEmail ? 'FieldFilledIn' : '') + ' ' + (!this.isValidUserEmail || !this.checkValid ? 'FieldInvalid' : '') }, translate('userEmail', this.lang)), !this.isValidUserEmail &&
225
+ h("p", { class: "InvalidField" }, translate('invalidField', this.lang))), h("div", { class: (!this.isValidPassword || !this.checkValid) ? 'InputBox InputInvalidBox' : 'InputBox' }, visibilityIcon, h("input", { type: this.isPasswordVisible ? "text" : "password", placeholder: '', value: this.userPassword, onFocus: (event) => this.handleInputChange(event, 'password'), onInput: (event) => this.handleInputChange(event, 'password'), required: true }), h("label", { class: (this.userPassword ? 'FieldFilledIn' : '') + ' ' + (!this.isValidPassword || !this.checkValid ? 'FieldInvalid' : '') }, translate('password', this.lang)), !this.isValidPassword &&
226
+ h("p", { class: "InvalidField" }, translate('invalidField', this.lang))), this.passwordReset &&
227
+ h("div", { class: "ForgotPassword" }, h("button", { onClick: () => this.resetPassword() }, translate('forgotPassword', this.lang))), h("button", { disabled: (!this.isValidUserEmail || !this.isValidPassword || !this.userNameEmail || !this.userPassword), class: "SubmitCredentials", onClick: () => this.userLogin({ username: this.userNameEmail, password: this.userPassword }) }, translate('login', this.lang)), this.errorMessage &&
228
+ h("p", { class: "CredentialsError" }, this.errorMessage)));
229
+ return h("section", null, userIdentification);
230
+ }
231
+ static get watchers() { return {
232
+ "translationUrl": ["handleNewTranslations"]
233
+ }; }
234
+ static get style() { return userLoginCss; }
235
+ }, [1, "user-login", {
236
+ "endpoint": [513],
237
+ "lang": [1537],
238
+ "clientStyling": [513, "client-styling"],
239
+ "clientStylingUrl": [513, "client-styling-url"],
240
+ "translationUrl": [513, "translation-url"],
241
+ "passwordReset": [516, "password-reset"],
242
+ "userEmailRegex": [513, "user-email-regex"],
243
+ "passwordRegex": [513, "password-regex"],
244
+ "userNameEmail": [32],
245
+ "userPassword": [32],
246
+ "isValidUserEmail": [32],
247
+ "isValidPassword": [32],
248
+ "isPasswordVisible": [32],
249
+ "limitStylingAppends": [32],
250
+ "errorMessage": [32],
251
+ "checkValid": [32]
252
+ }]);
253
+ function defineCustomElement$1() {
254
+ if (typeof customElements === "undefined") {
255
+ return;
256
+ }
257
+ const components = ["user-login"];
258
+ components.forEach(tagName => { switch (tagName) {
259
+ case "user-login":
260
+ if (!customElements.get(tagName)) {
261
+ customElements.define(tagName, UserLogin$1);
262
+ }
263
+ break;
264
+ } });
265
+ }
266
+
267
+ const UserLogin = UserLogin$1;
268
+ const defineCustomElement = defineCustomElement$1;
269
+
270
+ export { UserLogin, defineCustomElement };