@everymatrix/user-login 1.87.26 → 1.87.28

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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-9f641387.js');
5
+ const index = require('./index-7c1c14d6.js');
6
6
 
7
7
  const DEFAULT_LANGUAGE = 'en';
8
8
  const TRANSLATIONS = {
@@ -32,7 +32,8 @@ const TRANSLATIONS = {
32
32
  "Forbidden_UserAccount_SELFEXCLUDED": "It’s not possible to access your account due to an active self-exclusion. Please contact Customer Services for more information.",
33
33
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "It’s not possible to access your account due to an active self-exclusion. Please contact Customer Services for more information.",
34
34
  "GmErr_Forbidden_UserAccount_NotActive": "It appears that you have not yet confirmed your email address. To complete your registration and access your account, please check your email inbox for a confirmation message. If you haven't received the email, please also check your spam folder. If you need assistance, you can request help via the customer service.",
35
- "Forbidden_UserAccount_NotActive": "It appears that you have not yet confirmed your email address. To complete your registration and access your account, please check your email inbox for a confirmation message. If you haven't received the email, please also check your spam folder. If you need assistance, you can request help via the customer service."
35
+ "Forbidden_UserAccount_NotActive": "It appears that you have not yet confirmed your email address. To complete your registration and access your account, please check your email inbox for a confirmation message. If you haven't received the email, please also check your spam folder. If you need assistance, you can request help via the customer service.",
36
+ "biometricLogin": "Login with FaceID/Fingerprint",
36
37
  },
37
38
  "tr": {
38
39
  "invalidField": "Üzgünüz, bu kullanıcı adı/e-posta adresi ve/veya şifre tanınmadı.",
@@ -60,7 +61,8 @@ const TRANSLATIONS = {
60
61
  "Forbidden_UserAccount_SELFEXCLUDED": "Aktif bir kendini dışlama nedeniyle hesabınıza erişim mümkün değil. Daha fazla bilgi için lütfen Müşteri Hizmetleri ile iletişime geçin.",
61
62
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Aktif bir kendini dışlama nedeniyle hesabınıza erişim mümkün değil. Daha fazla bilgi için lütfen Müşteri Hizmetleri ile iletişime geçin.",
62
63
  "GmErr_Forbidden_UserAccount_NotActive": "E-posta adresinizi henüz onaylamadığınız anlaşılıyor. Kayıt işleminizi tamamlamak ve hesabınıza erişmek için lütfen e-posta gelen kutunuzu onay mesajı için kontrol edin. E-postayı almadıysanız, lütfen spam klasörünüzü de kontrol edin. Yardıma ihtiyacınız olursa, müşteri hizmetleri aracılığıyla destek talep edebilirsiniz.",
63
- "Forbidden_UserAccount_NotActive": "E-posta adresinizi henüz onaylamadığınız anlaşılıyor. Kayıt işleminizi tamamlamak ve hesabınıza erişmek için lütfen e-posta gelen kutunuzu onay mesajı için kontrol edin. E-postayı almadıysanız, lütfen spam klasörünüzü de kontrol edin. Yardıma ihtiyacınız olursa, müşteri hizmetleri aracılığıyla destek talep edebilirsiniz."
64
+ "Forbidden_UserAccount_NotActive": "E-posta adresinizi henüz onaylamadığınız anlaşılıyor. Kayıt işleminizi tamamlamak ve hesabınıza erişmek için lütfen e-posta gelen kutunuzu onay mesajı için kontrol edin. E-postayı almadıysanız, lütfen spam klasörünüzü de kontrol edin. Yardıma ihtiyacınız olursa, müşteri hizmetleri aracılığıyla destek talep edebilirsiniz.",
65
+ "biometricLogin": "Login with FaceID/Fingerprint",
64
66
  },
65
67
  "en-us": {
66
68
  "invalidField": "Sorry, that username/email address and/or password has not been recognized.",
@@ -88,7 +90,8 @@ const TRANSLATIONS = {
88
90
  "Forbidden_UserAccount_SELFEXCLUDED": "It’s not possible to access your account due to an active self-exclusion. Please contact Customer Services for more information.",
89
91
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "It’s not possible to access your account due to an active self-exclusion. Please contact Customer Services for more information.",
90
92
  "GmErr_Forbidden_UserAccount_NotActive": "It appears that you have not yet confirmed your email address. To complete your registration and access your account, please check your email inbox for a confirmation message. If you haven't received the email, please also check your spam folder. If you need assistance, you can request help via the customer service.",
91
- "Forbidden_UserAccount_NotActive": "It appears that you have not yet confirmed your email address. To complete your registration and access your account, please check your email inbox for a confirmation message. If you haven't received the email, please also check your spam folder. If you need assistance, you can request help via the customer service."
93
+ "Forbidden_UserAccount_NotActive": "It appears that you have not yet confirmed your email address. To complete your registration and access your account, please check your email inbox for a confirmation message. If you haven't received the email, please also check your spam folder. If you need assistance, you can request help via the customer service.",
94
+ "biometricLogin": "Login with FaceID/Fingerprint",
92
95
  },
93
96
  "ro": {
94
97
  "invalidField": "Ne pare rău, acest nume de utilizator/adresă de e-mail și/sau parolă nu a fost recunoscut.",
@@ -116,7 +119,8 @@ const TRANSLATIONS = {
116
119
  "Forbidden_UserAccount_SELFEXCLUDED": "Accesul la contul dumneavoastră nu este posibil din cauza unei autoexcluderi active. Vă rugăm să contactați Serviciul Clienți pentru mai multe informații.",
117
120
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Accesul la contul dumneavoastră nu este posibil din cauza unei autoexcluderi active. Vă rugăm să contactați Serviciul Clienți pentru mai multe informații.",
118
121
  "GmErr_Forbidden_UserAccount_NotActive": "Se pare că nu v-ați confirmat încă adresa de email. Pentru a finaliza înregistrarea și a accesa contul, vă rugăm să verificați inbox-ul de email pentru un mesaj de confirmare. Dacă nu ați primit emailul, verificați și folderul de spam. Dacă aveți nevoie de asistență, puteți solicita ajutor prin serviciul clienți.",
119
- "Forbidden_UserAccount_NotActive": "Se pare că nu v-ați confirmat încă adresa de email. Pentru a finaliza înregistrarea și a accesa contul, vă rugăm să verificați inbox-ul de email pentru un mesaj de confirmare. Dacă nu ați primit emailul, verificați și folderul de spam. Dacă aveți nevoie de asistență, puteți solicita ajutor prin serviciul clienți."
122
+ "Forbidden_UserAccount_NotActive": "Se pare că nu v-ați confirmat încă adresa de email. Pentru a finaliza înregistrarea și a accesa contul, vă rugăm să verificați inbox-ul de email pentru un mesaj de confirmare. Dacă nu ați primit emailul, verificați și folderul de spam. Dacă aveți nevoie de asistență, puteți solicita ajutor prin serviciul clienți.",
123
+ "biometricLogin": "Login with FaceID/Fingerprint",
120
124
  },
121
125
  "hr": {
122
126
  "invalidField": "Žao nam je, to korisničko ime/adresa e-pošte i/ili lozinka nisu prepoznati.",
@@ -144,7 +148,8 @@ const TRANSLATIONS = {
144
148
  "Forbidden_UserAccount_SELFEXCLUDED": "Nije moguće pristupiti vašem računu zbog aktivne samoisključenosti. Za više informacija kontaktirajte Službu za korisnike.",
145
149
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Nije moguće pristupiti vašem računu zbog aktivne samoisključenosti. Za više informacija kontaktirajte Službu za korisnike.",
146
150
  "GmErr_Forbidden_UserAccount_NotActive": "Čini se da još niste potvrdili svoju e-mail adresu. Za dovršetak registracije i pristup vašem računu, molimo provjerite svoj inbox za poruku za potvrdu. Ako niste primili e-mail, provjerite i mapu neželjene pošte. Ako trebate pomoć, možete zatražiti podršku putem korisničke službe.",
147
- "Forbidden_UserAccount_NotActive": "Čini se da još niste potvrdili svoju e-mail adresu. Za dovršetak registracije i pristup vašem računu, molimo provjerite svoj inbox za poruku za potvrdu. Ako niste primili e-mail, provjerite i mapu neželjene pošte. Ako trebate pomoć, možete zatražiti podršku putem korisničke službe."
151
+ "Forbidden_UserAccount_NotActive": "Čini se da još niste potvrdili svoju e-mail adresu. Za dovršetak registracije i pristup vašem računu, molimo provjerite svoj inbox za poruku za potvrdu. Ako niste primili e-mail, provjerite i mapu neželjene pošte. Ako trebate pomoć, možete zatražiti podršku putem korisničke službe.",
152
+ "biometricLogin": "Login with FaceID/Fingerprint",
148
153
  },
149
154
  "fr": {
150
155
  "invalidField": "Désolé, ce nom d'utilisateur/adresse e-mail et/ou mot de passe n'a pas été reconnu.",
@@ -172,7 +177,8 @@ const TRANSLATIONS = {
172
177
  "Forbidden_UserAccount_SELFEXCLUDED": "Il n'est pas possible d'accéder à votre compte en raison d'une auto-exclusion active. Veuillez contacter le service client pour plus d'informations.",
173
178
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Il n'est pas possible d'accéder à votre compte en raison d'une auto-exclusion active. Veuillez contacter le service client pour plus d'informations.",
174
179
  "GmErr_Forbidden_UserAccount_NotActive": "Il semble que vous n’ayez pas encore confirmé votre adresse e-mail. Pour finaliser votre inscription et accéder à votre compte, veuillez vérifier votre boîte de réception pour un message de confirmation. Si vous n’avez pas reçu l’e-mail, veuillez également vérifier votre dossier spam. Si vous avez besoin d’assistance, vous pouvez demander de l’aide via le service client.",
175
- "Forbidden_UserAccount_NotActive": "Il semble que vous n’ayez pas encore confirmé votre adresse e-mail. Pour finaliser votre inscription et accéder à votre compte, veuillez vérifier votre boîte de réception pour un message de confirmation. Si vous n’avez pas reçu l’e-mail, veuillez également vérifier votre dossier spam. Si vous avez besoin d’assistance, vous pouvez demander de l’aide via le service client."
180
+ "Forbidden_UserAccount_NotActive": "Il semble que vous n’ayez pas encore confirmé votre adresse e-mail. Pour finaliser votre inscription et accéder à votre compte, veuillez vérifier votre boîte de réception pour un message de confirmation. Si vous n’avez pas reçu l’e-mail, veuillez également vérifier votre dossier spam. Si vous avez besoin d’assistance, vous pouvez demander de l’aide via le service client.",
181
+ "biometricLogin": "Login with FaceID/Fingerprint",
176
182
  },
177
183
  "cs": {
178
184
  "invalidField": "Omlouváme se, toto uživatelské jméno/e-mailová adresa a/nebo heslo nebyly rozpoznány.",
@@ -200,7 +206,8 @@ const TRANSLATIONS = {
200
206
  "Forbidden_UserAccount_SELFEXCLUDED": "Váš účet není přístupný kvůli aktivní sebevyloučení. Pro více informací kontaktujte zákaznický servis.",
201
207
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Váš účet není přístupný kvůli aktivní sebevyloučení. Pro více informací kontaktujte zákaznický servis.",
202
208
  "GmErr_Forbidden_UserAccount_NotActive": "Zdá se, že jste dosud nepotvrdili svou e-mailovou adresu. Chcete-li dokončit registraci a získat přístup ke svému účtu, zkontrolujte prosím svoji e-mailovou schránku pro potvrzovací zprávu. Pokud e-mail nedorazil, zkontrolujte také složku se spamem. Pokud potřebujete pomoc, můžete požádat o podporu prostřednictvím zákaznického servisu.",
203
- "Forbidden_UserAccount_NotActive": "Zdá se, že jste dosud nepotvrdili svou e-mailovou adresu. Chcete-li dokončit registraci a získat přístup ke svému účtu, zkontrolujte prosím svoji e-mailovou schránku pro potvrzovací zprávu. Pokud e-mail nedorazil, zkontrolujte také složku se spamem. Pokud potřebujete pomoc, můžete požádat o podporu prostřednictvím zákaznického servisu."
209
+ "Forbidden_UserAccount_NotActive": "Zdá se, že jste dosud nepotvrdili svou e-mailovou adresu. Chcete-li dokončit registraci a získat přístup ke svému účtu, zkontrolujte prosím svoji e-mailovou schránku pro potvrzovací zprávu. Pokud e-mail nedorazil, zkontrolujte také složku se spamem. Pokud potřebujete pomoc, můžete požádat o podporu prostřednictvím zákaznického servisu.",
210
+ "biometricLogin": "Login with FaceID/Fingerprint",
204
211
  },
205
212
  "de": {
206
213
  "invalidField": "Entschuldigung, dieser Benutzername/diese E-Mail-Adresse und/oder dieses Passwort wurde nicht erkannt.",
@@ -228,7 +235,8 @@ const TRANSLATIONS = {
228
235
  "Forbidden_UserAccount_SELFEXCLUDED": "Der Zugriff auf Ihr Konto ist aufgrund einer aktiven Selbstausschlussregelung nicht möglich. Bitte wenden Sie sich für weitere Informationen an den Kundenservice.",
229
236
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Der Zugriff auf Ihr Konto ist aufgrund einer aktiven Selbstausschlussregelung nicht möglich. Bitte wenden Sie sich für weitere Informationen an den Kundenservice.",
230
237
  "GmErr_Forbidden_UserAccount_NotActive": "Es scheint, dass Sie Ihre E-Mail-Adresse noch nicht bestätigt haben. Um Ihre Registrierung abzuschließen und auf Ihr Konto zuzugreifen, überprüfen Sie bitte Ihren E-Mail-Posteingang auf eine Bestätigungsnachricht. Falls Sie die E-Mail nicht erhalten haben, prüfen Sie bitte auch Ihren Spam-Ordner. Wenn Sie Hilfe benötigen, können Sie den Kundendienst um Unterstützung bitten.",
231
- "Forbidden_UserAccount_NotActive": "Es scheint, dass Sie Ihre E-Mail-Adresse noch nicht bestätigt haben. Um Ihre Registrierung abzuschließen und auf Ihr Konto zuzugreifen, überprüfen Sie bitte Ihren E-Mail-Posteingang auf eine Bestätigungsnachricht. Falls Sie die E-Mail nicht erhalten haben, prüfen Sie bitte auch Ihren Spam-Ordner. Wenn Sie Hilfe benötigen, können Sie den Kundendienst um Unterstützung bitten."
238
+ "Forbidden_UserAccount_NotActive": "Es scheint, dass Sie Ihre E-Mail-Adresse noch nicht bestätigt haben. Um Ihre Registrierung abzuschließen und auf Ihr Konto zuzugreifen, überprüfen Sie bitte Ihren E-Mail-Posteingang auf eine Bestätigungsnachricht. Falls Sie die E-Mail nicht erhalten haben, prüfen Sie bitte auch Ihren Spam-Ordner. Wenn Sie Hilfe benötigen, können Sie den Kundendienst um Unterstützung bitten.",
239
+ "biometricLogin": "Login with FaceID/Fingerprint",
232
240
  },
233
241
  "pt-br": {
234
242
  "invalidField": "Desculpe, esse nome de usuário/endereço de e-mail e/ou senha não foram reconhecidos.",
@@ -256,7 +264,8 @@ const TRANSLATIONS = {
256
264
  "Forbidden_UserAccount_SELFEXCLUDED": "Não é possível acessar sua conta devido a uma autoexclusão ativa. Por favor, entre em contato com o Atendimento ao Cliente para mais informações.",
257
265
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Não é possível acessar sua conta devido a uma autoexclusão ativa. Por favor, entre em contato com o Atendimento ao Cliente para mais informações.",
258
266
  "GmErr_Forbidden_UserAccount_NotActive": "Parece que você ainda não confirmou seu endereço de e-mail. Para concluir seu cadastro e acessar sua conta, verifique a caixa de entrada do seu e-mail para uma mensagem de confirmação. Se você não recebeu o e-mail, verifique também a pasta de spam. Se precisar de ajuda, você pode solicitar suporte através do atendimento ao cliente.",
259
- "Forbidden_UserAccount_NotActive": "Parece que você ainda não confirmou seu endereço de e-mail. Para concluir seu cadastro e acessar sua conta, verifique a caixa de entrada do seu e-mail para uma mensagem de confirmação. Se você não recebeu o e-mail, verifique também a pasta de spam. Se precisar de ajuda, você pode solicitar suporte através do atendimento ao cliente."
267
+ "Forbidden_UserAccount_NotActive": "Parece que você ainda não confirmou seu endereço de e-mail. Para concluir seu cadastro e acessar sua conta, verifique a caixa de entrada do seu e-mail para uma mensagem de confirmação. Se você não recebeu o e-mail, verifique também a pasta de spam. Se precisar de ajuda, você pode solicitar suporte através do atendimento ao cliente.",
268
+ "biometricLogin": "Login with FaceID/Fingerprint",
260
269
  },
261
270
  "es-mx": {
262
271
  "invalidField": "Lo siento, ese nombre de usuario/dirección de correo electrónico y/o contraseña no ha sido reconocido.",
@@ -284,7 +293,8 @@ const TRANSLATIONS = {
284
293
  "Forbidden_UserAccount_SELFEXCLUDED": "No es posible acceder a tu cuenta debido a una autoexclusión activa. Por favor, contacta al Servicio al Cliente para más información.",
285
294
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "No es posible acceder a tu cuenta debido a una autoexclusión activa. Por favor, contacta al Servicio al Cliente para más información.",
286
295
  "GmErr_Forbidden_UserAccount_NotActive": "Parece que aún no has confirmado tu dirección de correo electrónico. Para completar tu registro y acceder a tu cuenta, revisa tu bandeja de entrada en busca de un mensaje de confirmación. Si no has recibido el correo electrónico, también revisa la carpeta de spam. Si necesitas ayuda, puedes solicitar asistencia a través del servicio al cliente.",
287
- "Forbidden_UserAccount_NotActive": "Parece que aún no has confirmado tu dirección de correo electrónico. Para completar tu registro y acceder a tu cuenta, revisa tu bandeja de entrada en busca de un mensaje de confirmación. Si no has recibido el correo electrónico, también revisa la carpeta de spam. Si necesitas ayuda, puedes solicitar asistencia a través del servicio al cliente."
296
+ "Forbidden_UserAccount_NotActive": "Parece que aún no has confirmado tu dirección de correo electrónico. Para completar tu registro y acceder a tu cuenta, revisa tu bandeja de entrada en busca de un mensaje de confirmación. Si no has recibido el correo electrónico, también revisa la carpeta de spam. Si necesitas ayuda, puedes solicitar asistencia a través del servicio al cliente.",
297
+ "biometricLogin": "Login with FaceID/Fingerprint",
288
298
  },
289
299
  "es": {
290
300
  "invalidField": "Lo siento, ese nombre de usuario/dirección de correo electrónico y/o contraseña no ha sido reconocido.",
@@ -312,7 +322,8 @@ const TRANSLATIONS = {
312
322
  "Forbidden_UserAccount_SELFEXCLUDED": "No es posible acceder a tu cuenta debido a una autoexclusión activa. Por favor, contacta con el Servicio de Atención al Cliente para más información.",
313
323
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "No es posible acceder a tu cuenta debido a una autoexclusión activa. Por favor, contacta con el Servicio de Atención al Cliente para más información.",
314
324
  "GmErr_Forbidden_UserAccount_NotActive": "Parece que aún no has confirmado tu dirección de correo electrónico. Para completar tu registro y acceder a tu cuenta, revisa tu bandeja de entrada en busca de un mensaje de confirmación. Si no has recibido el correo electrónico, también revisa la carpeta de spam. Si necesitas ayuda, puedes solicitar asistencia a través del servicio al cliente.",
315
- "Forbidden_UserAccount_NotActive": "Parece que aún no has confirmado tu dirección de correo electrónico. Para completar tu registro y acceder a tu cuenta, revisa tu bandeja de entrada en busca de un mensaje de confirmación. Si no has recibido el correo electrónico, también revisa la carpeta de spam. Si necesitas ayuda, puedes solicitar asistencia a través del servicio al cliente."
325
+ "Forbidden_UserAccount_NotActive": "Parece que aún no has confirmado tu dirección de correo electrónico. Para completar tu registro y acceder a tu cuenta, revisa tu bandeja de entrada en busca de un mensaje de confirmación. Si no has recibido el correo electrónico, también revisa la carpeta de spam. Si necesitas ayuda, puedes solicitar asistencia a través del servicio al cliente.",
326
+ "biometricLogin": "Login with FaceID/Fingerprint",
316
327
  },
317
328
  "pt": {
318
329
  "invalidField": "Desculpe, esse nome de usuário/endereço de e-mail e/ou senha não foram reconhecidos.",
@@ -340,7 +351,8 @@ const TRANSLATIONS = {
340
351
  "Forbidden_UserAccount_SELFEXCLUDED": "Não é possível aceder à sua conta devido a uma autoexclusão ativa. Por favor, contacte o Serviço de Apoio ao Cliente para mais informações.",
341
352
  "GmErr_Forbidden_UserAccount_SELFEXCLUDED": "Não é possível aceder à sua conta devido a uma autoexclusão ativa. Por favor, contacte o Serviço de Apoio ao Cliente para mais informações.",
342
353
  "GmErr_Forbidden_UserAccount_NotActive": "Parece que ainda não confirmou o seu endereço de e-mail. Para concluir o seu registo e aceder à sua conta, verifique a caixa de entrada do seu e-mail para uma mensagem de confirmação. Se não recebeu o e-mail, verifique também a pasta de spam. Se precisar de ajuda, pode solicitar assistência através do serviço de apoio ao cliente.",
343
- "Forbidden_UserAccount_NotActive": "Parece que ainda não confirmou o seu endereço de e-mail. Para concluir o seu registo e aceder à sua conta, verifique a caixa de entrada do seu e-mail para uma mensagem de confirmação. Se não recebeu o e-mail, verifique também a pasta de spam. Se precisar de ajuda, pode solicitar assistência através do serviço de apoio ao cliente."
354
+ "Forbidden_UserAccount_NotActive": "Parece que ainda não confirmou o seu endereço de e-mail. Para concluir o seu registo e aceder à sua conta, verifique a caixa de entrada do seu e-mail para uma mensagem de confirmação. Se não recebeu o e-mail, verifique também a pasta de spam. Se precisar de ajuda, pode solicitar assistência através do serviço de apoio ao cliente.",
355
+ "biometricLogin": "Login with FaceID/Fingerprint",
344
356
  }
345
357
  };
346
358
  const getTranslations = (url) => {
@@ -372,6 +384,8 @@ const translate = (key, customLang, values) => {
372
384
  return translation;
373
385
  };
374
386
 
387
+ const StyleCacheKey = '__WIDGET_GLOBAL_STYLE_CACHE__';
388
+
375
389
  /**
376
390
  * @name setClientStyling
377
391
  * @description Method used to create and append to the passed element of the widget a style element with the content received
@@ -417,18 +431,75 @@ function setClientStylingURL(stylingContainer, clientStylingUrl) {
417
431
  * @param {HTMLElement} stylingContainer The highest element of the widget
418
432
  * @param {string} domain The domain from where the content should be fetched (e.g. 'Casino.Style', 'App.Style', 'casino-footer.style', etc.)
419
433
  * @param {ref} subscription A reference to a variable where the subscription should be saved for unsubscribing when no longer needed
434
+ * @param {boolean} useAdoptedStyleSheets A flag to gradually enable testing of adoptedStyleSheets
420
435
  */
421
- function setStreamStyling(stylingContainer, domain, subscription) {
422
- if (window.emMessageBus) {
423
- const sheet = document.createElement('style');
436
+ function setStreamStyling(stylingContainer, domain, subscription, useAdoptedStyleSheets = false) {
437
+ if (!window.emMessageBus) return;
424
438
 
425
- window.emMessageBus.subscribe(domain, (data) => {
426
- sheet.innerHTML = data;
427
- if (stylingContainer) {
428
- stylingContainer.appendChild(sheet);
429
- }
430
- });
439
+ const supportAdoptStyle = 'adoptedStyleSheets' in Document.prototype;
440
+
441
+ if (!supportAdoptStyle || !useAdoptedStyleSheets) {
442
+ subscription = getStyleTagSubscription(stylingContainer, domain);
443
+
444
+ return subscription;
431
445
  }
446
+
447
+ if (!window[StyleCacheKey]) {
448
+ window[StyleCacheKey] = {};
449
+ }
450
+ subscription = getAdoptStyleSubscription(stylingContainer, domain);
451
+
452
+ const originalUnsubscribe = subscription.unsubscribe.bind(subscription);
453
+ const wrappedUnsubscribe = () => {
454
+ if (window[StyleCacheKey][domain]) {
455
+ const cachedObject = window[StyleCacheKey][domain];
456
+ cachedObject.refCount > 1
457
+ ? (cachedObject.refCount = cachedObject.refCount - 1)
458
+ : delete window[StyleCacheKey][domain];
459
+ }
460
+
461
+ originalUnsubscribe();
462
+ };
463
+ subscription.unsubscribe = wrappedUnsubscribe;
464
+
465
+ return subscription;
466
+ }
467
+
468
+ function getStyleTagSubscription(stylingContainer, domain) {
469
+ const sheet = document.createElement('style');
470
+
471
+ return window.emMessageBus.subscribe(domain, (data) => {
472
+ if (stylingContainer) {
473
+ sheet.innerHTML = data;
474
+ stylingContainer.appendChild(sheet);
475
+ }
476
+ });
477
+ }
478
+
479
+ function getAdoptStyleSubscription(stylingContainer, domain) {
480
+ return window.emMessageBus.subscribe(domain, (data) => {
481
+ if (!stylingContainer) return;
482
+
483
+ const shadowRoot = stylingContainer.getRootNode();
484
+ const cacheStyleObject = window[StyleCacheKey];
485
+ let cachedStyle = cacheStyleObject[domain]?.sheet;
486
+
487
+ if (!cachedStyle) {
488
+ cachedStyle = new CSSStyleSheet();
489
+ cachedStyle.replaceSync(data);
490
+ cacheStyleObject[domain] = {
491
+ sheet: cachedStyle,
492
+ refCount: 1
493
+ };
494
+ } else {
495
+ cacheStyleObject[domain].refCount = cacheStyleObject[domain].refCount + 1;
496
+ }
497
+
498
+ const currentSheets = shadowRoot.adoptedStyleSheets || [];
499
+ if (!currentSheets.includes(cachedStyle)) {
500
+ shadowRoot.adoptedStyleSheets = [...currentSheets, cachedStyle];
501
+ }
502
+ });
432
503
  }
433
504
 
434
505
  /**
@@ -7110,13 +7181,26 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
7110
7181
  <div on-click="_scrollForward" part="forward-button" aria-hidden="true"></div>
7111
7182
  `}static get is(){return "vaadin-tabs"}}v(vh);
7112
7183
 
7113
- const userLoginCss = ":host{display:block;font-family:\"Roboto\", sans-serif}section{height:100%;width:100%;background-position:center;background-size:cover}.FormValue{width:100%}.FormBox{height:100%;display:flex;position:relative;background:none;border:none;justify-content:center;align-items:center}.InputBox{position:relative;margin:30px 0;width:100%;border-bottom:2px solid var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E))}.InputBox .PhoneInputBox{display:flex;flex-direction:row}.InputBox .PhoneInputBox .PhoneBox{position:relative;width:100%}.InputBox .PhoneInputBox .PrefixBox{position:relative;width:fit-content}.InputBox .PhoneInputBox .PrefixBox .UneditablePrefix{height:100%;width:100px;padding:0 0 0 5px;align-content:center;background:var(--emw--color-gray-100, #e6e6e6);border-radius:var(--emw--border-radius-medium, 10px)}.InputBox.InputInvalidBox .PasswordVisibilityIcon{fill:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}.InputBox.InputInvalidBox input{color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}.InputBox.InputInvalidBox::after{content:\"\";height:2px;width:100%;transition:width 0.6s linear;background:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}.InputBox::after{content:\"\";display:block;width:0;height:2px;position:relative;top:2px}.InputBox .PasswordVisibilityIcon{fill:var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E))}.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:var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E));font-size:var(--emw--font-size-medium, 16px);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:var(--emw--font-size-medium, 16px);padding:0 35px 0 5px;color:var(--emw--registration-typography, var(--emw--color-typography, #000000));box-sizing:border-box}input:focus~label,label.FieldFilledIn{top:-10px;font-size:var(--emw--font-size-x-small, 16px)}vaadin-combo-box:focus-within~label,label.FieldFilledIn{top:-10px;font-size:var(--emw--font-size-x-small, 16px)}.ForgotPassword button{margin:-10px 0 17px;font-size:var(--emw--font-size-medium, 16px);color:var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E));display:flex;justify-content:space-between;background-color:transparent;padding:0;height:unset;border:0;cursor:pointer}.SubmitCredentials{display:block;margin:0 auto;outline:none;cursor:pointer;background:var(--emw--color-primary, #0E5924);border-radius:var(--emw--button-border-radius, 10px);padding:10px 20px;font-size:var(--emw--font-size-large, 20px);font-family:var(--emw--button-typography);color:var(--emw--button-text-color, #FFFFFF)}.SubmitCredentials:disabled{background:var(--emw--color-primary, #0E5924);opacity:0.4;cursor:default}.Register{font-size:var(--emw--font-size-medium, 16px);color:var(--emw--registration-typography, var(--emw--color-typography, #FFFFFF));text-align:center;margin:25px 0 10px}.Register p a{text-decoration:none;font-weight:600}.Register p a:hover{text-decoration:underline}.InvalidField{position:absolute;color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839));font-size:var(--emw--font-size-x-small, 12px)}.SubmitCredentials{margin-bottom:20px}.CredentialsError{color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839));font-size:var(--emw--font-size-x-small, 12px);padding:0 0 20px 0;margin:0}.CredentialsError input{color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}@media screen and (max-width: 480px){.FormBox{width:100%;border-radius:0px}}";
7184
+ const userLoginCss = ":host{display:block;font-family:\"Roboto\", sans-serif}section{height:100%;width:100%;background-position:center;background-size:cover}.FormValue{width:100%}.FormBox{height:100%;display:flex;position:relative;background:none;border:none;justify-content:center;align-items:center}.InputBox{position:relative;margin:30px 0;width:100%;border-bottom:2px solid var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E))}.InputBox .PhoneInputBox{display:flex;flex-direction:row}.InputBox .PhoneInputBox .PhoneBox{position:relative;width:100%}.InputBox .PhoneInputBox .PrefixBox{position:relative;width:fit-content}.InputBox .PhoneInputBox .PrefixBox .UneditablePrefix{height:100%;width:100px;padding:0 0 0 5px;align-content:center;background:var(--emw--color-gray-100, #e6e6e6);border-radius:var(--emw--border-radius-medium, 10px)}.InputBox.InputInvalidBox .PasswordVisibilityIcon{fill:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}.InputBox.InputInvalidBox input{color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}.InputBox.InputInvalidBox::after{content:\"\";height:2px;width:100%;transition:width 0.6s linear;background:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}.InputBox::after{content:\"\";display:block;width:0;height:2px;position:relative;top:2px}.InputBox .PasswordVisibilityIcon{fill:var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E))}.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:var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E));font-size:var(--emw--font-size-medium, 16px);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:var(--emw--font-size-medium, 16px);padding:0 35px 0 5px;color:var(--emw--registration-typography, var(--emw--color-typography, #000000));box-sizing:border-box}input:focus~label,label.FieldFilledIn{top:-10px;font-size:var(--emw--font-size-x-small, 16px)}vaadin-combo-box:focus-within~label,label.FieldFilledIn{top:-10px;font-size:var(--emw--font-size-x-small, 16px)}.ForgotPassword button{margin:-10px 0 17px;font-size:var(--emw--font-size-medium, 16px);color:var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E));display:flex;justify-content:space-between;background-color:transparent;padding:0;height:unset;border:0;cursor:pointer}.SubmitCredentials{display:block;margin:0 auto;outline:none;cursor:pointer;background:var(--emw--color-primary, #0E5924);border-radius:var(--emw--button-border-radius, 10px);padding:10px 20px;font-size:var(--emw--font-size-large, 20px);font-family:var(--emw--button-typography);color:var(--emw--button-text-color, #FFFFFF)}.SubmitCredentials:disabled{background:var(--emw--color-primary, #0E5924);opacity:0.4;cursor:default}.Register{font-size:var(--emw--font-size-medium, 16px);color:var(--emw--registration-typography, var(--emw--color-typography, #FFFFFF));text-align:center;margin:25px 0 10px}.Register p a{text-decoration:none;font-weight:600}.Register p a:hover{text-decoration:underline}.InvalidField{position:absolute;color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839));font-size:var(--emw--font-size-x-small, 12px)}.SubmitCredentials{margin-bottom:20px}.CredentialsError{color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839));font-size:var(--emw--font-size-x-small, 12px);padding:0 0 20px 0;margin:0}.CredentialsError input{color:var(--emfw-w-color-error, var(--emw--color-red, #FD2839))}.PlayerBiometricsContainer .PlayerBiometrics{margin:30px 0 40px;font-size:var(--emw--font-size-medium, 16px);color:var(--emw--registration-typography, var(--emw--color-typography, #000));display:flex;justify-content:space-between;background-color:transparent}@media screen and (max-width: 480px){.FormBox{width:100%;border-radius:0px}}";
7114
7185
  const UserLoginStyle0 = userLoginCss;
7115
7186
 
7116
7187
  const UserLogin = class {
7117
7188
  constructor(hostRef) {
7118
7189
  index.registerInstance(this, hostRef);
7119
7190
  this.errorCode = '';
7191
+ this.messageHandler = async (e) => {
7192
+ var _a;
7193
+ if (((_a = e.data) === null || _a === void 0 ? void 0 : _a.type) === 'NativeAppReady') {
7194
+ this.isNativeApp = true;
7195
+ if (!this.biometricsLoaded) {
7196
+ await Promise.resolve().then(function () { return require('./player-account-biometrics-action-5aaf0b8d.js'); });
7197
+ this.biometricsLoaded = true;
7198
+ }
7199
+ }
7200
+ };
7201
+ this.checkNativeApp = () => {
7202
+ window.postMessage({ type: 'CheckNativeApp' });
7203
+ };
7120
7204
  /**
7121
7205
  * Fetch phone prefixes from the API
7122
7206
  */
@@ -7414,6 +7498,9 @@ const UserLogin = class {
7414
7498
  this.defaultPrefix = undefined;
7415
7499
  this.isPrefixEditable = 'true';
7416
7500
  this.mbSource = undefined;
7501
+ this.biometricEnabled = 'false';
7502
+ this.biometricactionmode = 'switch';
7503
+ this.isFromLogin = true;
7417
7504
  this.userNameEmail = '';
7418
7505
  this.userPassword = '';
7419
7506
  this.isValidUserEmail = true;
@@ -7433,6 +7520,8 @@ const UserLogin = class {
7433
7520
  provider: '',
7434
7521
  siteKey: ''
7435
7522
  };
7523
+ this.isNativeApp = false;
7524
+ this.biometricsLoaded = false;
7436
7525
  }
7437
7526
  /**
7438
7527
  * Watch for changes in the translation URL and fetch new translations
@@ -7510,6 +7599,11 @@ const UserLogin = class {
7510
7599
  this.sendErrorNotification(this.errorMessage);
7511
7600
  });
7512
7601
  }
7602
+ // If biometric login is enabled, start listening for native app messages
7603
+ if (this.biometricEnabled === 'true') {
7604
+ window.addEventListener('message', this.messageHandler);
7605
+ this.checkNativeApp();
7606
+ }
7513
7607
  }
7514
7608
  /**
7515
7609
  * Lifecycle method: Set up event listeners after the component is rendered
@@ -7517,7 +7611,7 @@ const UserLogin = class {
7517
7611
  componentDidLoad() {
7518
7612
  if (this.stylingContainer) {
7519
7613
  if (window.emMessageBus != undefined) {
7520
- setStreamStyling(this.stylingContainer, `${this.mbSource}.Style`);
7614
+ setStreamStyling(this.stylingContainer, `${this.mbSource}.Style`, this.stylingSubscription);
7521
7615
  }
7522
7616
  else {
7523
7617
  if (this.clientStyling)
@@ -7621,6 +7715,7 @@ const UserLogin = class {
7621
7715
  disconnectedCallback() {
7622
7716
  this.stylingSubscription && this.stylingSubscription.unsubscribe();
7623
7717
  window.removeEventListener('LoginCredentials', this.autofillCredentialsHandler);
7718
+ window.removeEventListener('message', this.messageHandler);
7624
7719
  }
7625
7720
  /**
7626
7721
  * Send error notification as a post message
@@ -7690,7 +7785,8 @@ const UserLogin = class {
7690
7785
  index.h("p", { class: "CredentialsError" }, translate('userPhoneError', this.lang)))))
7691
7786
  : index.h("div", { class: (!this.isValidUserEmail && this.errorForFields['user']) ? 'InputBox InputInvalidBox' : 'InputBox' }, index.h("input", { type: "text", placeholder: '', value: this.userNameEmail, onInput: this.handleInputChangePartial('user'), autocapitalize: "none", required: true }), index.h("label", { class: (this.userNameEmail ? 'FieldFilledIn' : '') + ' ' + (!this.isValidUserEmail && this.errorForFields['user'] ? 'FieldInvalid' : '') }, translate('userEmail', this.lang)), !this.isValidUserEmail && this.errorForFields['user'] &&
7692
7787
  index.h("p", { class: "CredentialsError" }, translate('userEmailError', this.lang))), index.h("div", { class: (!this.isValidPassword && this.errorForFields['password']) ? 'InputBox InputInvalidBox' : 'InputBox' }, this.renderVisibilityIcon(), index.h("input", { type: this.isPasswordVisible ? "text" : "password", placeholder: '', value: this.userPassword, onInput: this.handleInputChangePartial('password'), autocapitalize: "none", required: true }), index.h("label", { class: (this.userPassword ? 'FieldFilledIn' : '') + ' ' + (!this.isValidPassword && this.errorForFields['password'] ? 'FieldInvalid' : '') }, translate('password', this.lang)), !this.isValidPassword && this.errorForFields['password'] &&
7693
- index.h("p", { class: "CredentialsError" }, translate('userPasswordError', this.lang))), this.passwordReset == 'true' &&
7788
+ index.h("p", { class: "CredentialsError" }, translate('userPasswordError', this.lang))), this.biometricEnabled === 'true' && this.isNativeApp &&
7789
+ index.h("div", { class: "PlayerBiometricsContainer" }, index.h("div", { class: "PlayerBiometrics" }, index.h("span", null, translate('biometricLogin')), index.h("player-account-biometrics-action", { mode: this.biometricactionmode, isFromLogin: this.isFromLogin, isNativeApp: this.isNativeApp, lang: this.lang, translationurl: this.translationUrl, clientstyling: this.clientStyling, clientstylingurl: this.clientStylingUrl, mbsource: this.mbSource, isLoading: this.isLoginLoading }))), this.passwordReset == 'true' &&
7694
7790
  index.h("div", { class: "ForgotPassword" }, index.h("button", { onClick: this.resetPassword }, translate('forgotPassword', this.lang))), this.captchaData.isEnabled && this.captchaData.provider === 'cloudflare' &&
7695
7791
  index.h("slot", { name: "turnstile" }), this.captchaData.isEnabled && this.captchaData.provider === 'google' &&
7696
7792
  index.h("slot", { name: "google" }), index.h("button", { disabled: this.checkIsDisabled(), class: "SubmitCredentials", onClick: this.handleLogin }, translate('login', this.lang)), this.hasError &&
@@ -7700,7 +7796,7 @@ const UserLogin = class {
7700
7796
  * Render function
7701
7797
  */
7702
7798
  render() {
7703
- return index.h("section", { key: '7ac7aaee8d984d1d70c59dd32d05d27468167415', ref: el => this.stylingContainer = el }, this.renderUserIdentification());
7799
+ return index.h("section", { key: 'b60d626ea01f0804e83efba865234667b9828090', ref: el => this.stylingContainer = el }, this.renderUserIdentification());
7704
7800
  }
7705
7801
  static get watchers() { return {
7706
7802
  "translationUrl": ["handleNewTranslations"],
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-9f641387.js');
5
+ const index = require('./index-7c1c14d6.js');
6
6
  const appGlobals = require('./app-globals-3a1e7e63.js');
7
7
 
8
8
  /*
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["user-login.cjs",[[1,"user-login",{"endpoint":[513],"minPassLength":[514,"min-pass-length"],"lang":[1537],"clientStyling":[513,"client-styling"],"clientStylingUrl":[513,"client-styling-url"],"translationUrl":[513,"translation-url"],"passwordReset":[513,"password-reset"],"userEmailRegex":[513,"user-email-regex"],"userEmailRegexOptions":[513,"user-email-regex-options"],"userPhoneRegex":[513,"user-phone-regex"],"userPhoneRegexOptions":[513,"user-phone-regex-options"],"passwordRegex":[513,"password-regex"],"passwordRegexOptions":[513,"password-regex-options"],"version":[513],"loginByPhoneNumber":[513,"login-by-phone-number"],"defaultPrefix":[513,"default-prefix"],"isPrefixEditable":[513,"is-prefix-editable"],"mbSource":[513,"mb-source"],"userNameEmail":[32],"userPassword":[32],"isValidUserEmail":[32],"userPhone":[32],"userPrefix":[32],"isValidPassword":[32],"isValidUserPhone":[32],"isPasswordVisible":[32],"errorMessage":[32],"errorForFields":[32],"hasError":[32],"phoneCodes":[32],"isLoginLoading":[32],"captchaData":[32],"autofillCredentials":[64]},null,{"translationUrl":["handleNewTranslations"],"clientStyling":["handleClientStylingChange"],"clientStylingUrl":["handleClientStylingUrlChange"]}]]]], options);
22
+ return index.bootstrapLazy([["user-login.cjs",[[1,"user-login",{"endpoint":[513],"minPassLength":[514,"min-pass-length"],"lang":[1537],"clientStyling":[513,"client-styling"],"clientStylingUrl":[513,"client-styling-url"],"translationUrl":[513,"translation-url"],"passwordReset":[513,"password-reset"],"userEmailRegex":[513,"user-email-regex"],"userEmailRegexOptions":[513,"user-email-regex-options"],"userPhoneRegex":[513,"user-phone-regex"],"userPhoneRegexOptions":[513,"user-phone-regex-options"],"passwordRegex":[513,"password-regex"],"passwordRegexOptions":[513,"password-regex-options"],"version":[513],"loginByPhoneNumber":[513,"login-by-phone-number"],"defaultPrefix":[513,"default-prefix"],"isPrefixEditable":[513,"is-prefix-editable"],"mbSource":[513,"mb-source"],"biometricEnabled":[513,"biometric-enabled"],"biometricactionmode":[1],"isFromLogin":[4,"is-from-login"],"userNameEmail":[32],"userPassword":[32],"isValidUserEmail":[32],"userPhone":[32],"userPrefix":[32],"isValidPassword":[32],"isValidUserPhone":[32],"isPasswordVisible":[32],"errorMessage":[32],"errorForFields":[32],"hasError":[32],"phoneCodes":[32],"isLoginLoading":[32],"captchaData":[32],"isNativeApp":[32],"biometricsLoaded":[32],"autofillCredentials":[64]},null,{"translationUrl":["handleNewTranslations"],"clientStyling":["handleClientStylingChange"],"clientStylingUrl":["handleClientStylingUrlChange"]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
@@ -187,6 +187,15 @@ label.FieldFilledIn {
187
187
  color: var(--emfw-w-color-error, var(--emw--color-red, #FD2839));
188
188
  }
189
189
 
190
+ .PlayerBiometricsContainer .PlayerBiometrics {
191
+ margin: 30px 0 40px;
192
+ font-size: var(--emw--font-size-medium, 16px);
193
+ color: var(--emw--registration-typography, var(--emw--color-typography, #000));
194
+ display: flex;
195
+ justify-content: space-between;
196
+ background-color: transparent;
197
+ }
198
+
190
199
  /* Responsiveness:Start */
191
200
  @media screen and (max-width: 480px) {
192
201
  .FormBox {
@@ -6,6 +6,19 @@ import "../../../../../../../libs/vaadin-facade/index";
6
6
  export class UserLogin {
7
7
  constructor() {
8
8
  this.errorCode = '';
9
+ this.messageHandler = async (e) => {
10
+ var _a;
11
+ if (((_a = e.data) === null || _a === void 0 ? void 0 : _a.type) === 'NativeAppReady') {
12
+ this.isNativeApp = true;
13
+ if (!this.biometricsLoaded) {
14
+ await import('@everymatrix/player-account-biometrics-action/dist');
15
+ this.biometricsLoaded = true;
16
+ }
17
+ }
18
+ };
19
+ this.checkNativeApp = () => {
20
+ window.postMessage({ type: 'CheckNativeApp' });
21
+ };
9
22
  /**
10
23
  * Fetch phone prefixes from the API
11
24
  */
@@ -303,6 +316,9 @@ export class UserLogin {
303
316
  this.defaultPrefix = undefined;
304
317
  this.isPrefixEditable = 'true';
305
318
  this.mbSource = undefined;
319
+ this.biometricEnabled = 'false';
320
+ this.biometricactionmode = 'switch';
321
+ this.isFromLogin = true;
306
322
  this.userNameEmail = '';
307
323
  this.userPassword = '';
308
324
  this.isValidUserEmail = true;
@@ -322,6 +338,8 @@ export class UserLogin {
322
338
  provider: '',
323
339
  siteKey: ''
324
340
  };
341
+ this.isNativeApp = false;
342
+ this.biometricsLoaded = false;
325
343
  }
326
344
  /**
327
345
  * Watch for changes in the translation URL and fetch new translations
@@ -399,6 +417,11 @@ export class UserLogin {
399
417
  this.sendErrorNotification(this.errorMessage);
400
418
  });
401
419
  }
420
+ // If biometric login is enabled, start listening for native app messages
421
+ if (this.biometricEnabled === 'true') {
422
+ window.addEventListener('message', this.messageHandler);
423
+ this.checkNativeApp();
424
+ }
402
425
  }
403
426
  /**
404
427
  * Lifecycle method: Set up event listeners after the component is rendered
@@ -510,6 +533,7 @@ export class UserLogin {
510
533
  disconnectedCallback() {
511
534
  this.stylingSubscription && this.stylingSubscription.unsubscribe();
512
535
  window.removeEventListener('LoginCredentials', this.autofillCredentialsHandler);
536
+ window.removeEventListener('message', this.messageHandler);
513
537
  }
514
538
  /**
515
539
  * Send error notification as a post message
@@ -579,7 +603,8 @@ export class UserLogin {
579
603
  h("p", { class: "CredentialsError" }, translate('userPhoneError', this.lang)))))
580
604
  : h("div", { class: (!this.isValidUserEmail && this.errorForFields['user']) ? 'InputBox InputInvalidBox' : 'InputBox' }, h("input", { type: "text", placeholder: '', value: this.userNameEmail, onInput: this.handleInputChangePartial('user'), autocapitalize: "none", required: true }), h("label", { class: (this.userNameEmail ? 'FieldFilledIn' : '') + ' ' + (!this.isValidUserEmail && this.errorForFields['user'] ? 'FieldInvalid' : '') }, translate('userEmail', this.lang)), !this.isValidUserEmail && this.errorForFields['user'] &&
581
605
  h("p", { class: "CredentialsError" }, translate('userEmailError', this.lang))), h("div", { class: (!this.isValidPassword && this.errorForFields['password']) ? 'InputBox InputInvalidBox' : 'InputBox' }, this.renderVisibilityIcon(), h("input", { type: this.isPasswordVisible ? "text" : "password", placeholder: '', value: this.userPassword, onInput: this.handleInputChangePartial('password'), autocapitalize: "none", required: true }), h("label", { class: (this.userPassword ? 'FieldFilledIn' : '') + ' ' + (!this.isValidPassword && this.errorForFields['password'] ? 'FieldInvalid' : '') }, translate('password', this.lang)), !this.isValidPassword && this.errorForFields['password'] &&
582
- h("p", { class: "CredentialsError" }, translate('userPasswordError', this.lang))), this.passwordReset == 'true' &&
606
+ h("p", { class: "CredentialsError" }, translate('userPasswordError', this.lang))), this.biometricEnabled === 'true' && this.isNativeApp &&
607
+ h("div", { class: "PlayerBiometricsContainer" }, h("div", { class: "PlayerBiometrics" }, h("span", null, translate('biometricLogin')), h("player-account-biometrics-action", { mode: this.biometricactionmode, isFromLogin: this.isFromLogin, isNativeApp: this.isNativeApp, lang: this.lang, translationurl: this.translationUrl, clientstyling: this.clientStyling, clientstylingurl: this.clientStylingUrl, mbsource: this.mbSource, isLoading: this.isLoginLoading }))), this.passwordReset == 'true' &&
583
608
  h("div", { class: "ForgotPassword" }, h("button", { onClick: this.resetPassword }, translate('forgotPassword', this.lang))), this.captchaData.isEnabled && this.captchaData.provider === 'cloudflare' &&
584
609
  h("slot", { name: "turnstile" }), this.captchaData.isEnabled && this.captchaData.provider === 'google' &&
585
610
  h("slot", { name: "google" }), h("button", { disabled: this.checkIsDisabled(), class: "SubmitCredentials", onClick: this.handleLogin }, translate('login', this.lang)), this.hasError &&
@@ -589,7 +614,7 @@ export class UserLogin {
589
614
  * Render function
590
615
  */
591
616
  render() {
592
- return h("section", { key: '7ac7aaee8d984d1d70c59dd32d05d27468167415', ref: el => this.stylingContainer = el }, this.renderUserIdentification());
617
+ return h("section", { key: 'b60d626ea01f0804e83efba865234667b9828090', ref: el => this.stylingContainer = el }, this.renderUserIdentification());
593
618
  }
594
619
  static get is() { return "user-login"; }
595
620
  static get encapsulation() { return "shadow"; }
@@ -923,6 +948,60 @@ export class UserLogin {
923
948
  },
924
949
  "attribute": "mb-source",
925
950
  "reflect": true
951
+ },
952
+ "biometricEnabled": {
953
+ "type": "string",
954
+ "mutable": false,
955
+ "complexType": {
956
+ "original": "string",
957
+ "resolved": "string",
958
+ "references": {}
959
+ },
960
+ "required": false,
961
+ "optional": false,
962
+ "docs": {
963
+ "tags": [],
964
+ "text": "Flag for enabling biometric login on native apps only."
965
+ },
966
+ "attribute": "biometric-enabled",
967
+ "reflect": true,
968
+ "defaultValue": "'false'"
969
+ },
970
+ "biometricactionmode": {
971
+ "type": "string",
972
+ "mutable": false,
973
+ "complexType": {
974
+ "original": "'button' | 'switch'",
975
+ "resolved": "\"button\" | \"switch\"",
976
+ "references": {}
977
+ },
978
+ "required": false,
979
+ "optional": false,
980
+ "docs": {
981
+ "tags": [],
982
+ "text": "Display mode for biometric toggle."
983
+ },
984
+ "attribute": "biometricactionmode",
985
+ "reflect": false,
986
+ "defaultValue": "'switch'"
987
+ },
988
+ "isFromLogin": {
989
+ "type": "boolean",
990
+ "mutable": false,
991
+ "complexType": {
992
+ "original": "boolean",
993
+ "resolved": "boolean",
994
+ "references": {}
995
+ },
996
+ "required": false,
997
+ "optional": false,
998
+ "docs": {
999
+ "tags": [],
1000
+ "text": "Flag indicating whether the component is rendered from the login flow"
1001
+ },
1002
+ "attribute": "is-from-login",
1003
+ "reflect": false,
1004
+ "defaultValue": "true"
926
1005
  }
927
1006
  };
928
1007
  }
@@ -941,7 +1020,9 @@ export class UserLogin {
941
1020
  "hasError": {},
942
1021
  "phoneCodes": {},
943
1022
  "isLoginLoading": {},
944
- "captchaData": {}
1023
+ "captchaData": {},
1024
+ "isNativeApp": {},
1025
+ "biometricsLoaded": {}
945
1026
  };
946
1027
  }
947
1028
  static get methods() {