@everymatrix/general-player-register-form-nd 1.37.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,613 @@
1
+ <svelte:options tag={null} />
2
+
3
+ <script lang="ts">
4
+ import { getDevice } from 'rvhelper';
5
+ import { onMount } from "svelte";
6
+ import { _, addNewMessages, setLocale, setupI18n } from './i18n';
7
+ import { TRANSLATIONS } from './translations';
8
+
9
+ import '@everymatrix/general-player-register-form-nd-step1';
10
+ import '@everymatrix/general-player-register-form-nd-step2';
11
+ import '@everymatrix/general-player-register-form-nd-step3';
12
+ import '@everymatrix/general-player-sms-verification-form';
13
+
14
+ export let endpoint:string = '';
15
+ export let cmsendpoint:string = '';
16
+ export let env:string = '';
17
+ export let session:string = '';
18
+ export let trackedanalyticsdata:string = '';
19
+ export let captchakey:string = '';
20
+ export let lang:string = 'en';
21
+ export let licenseyears:string = '';
22
+ export let disabledfields:string = '';
23
+ export let defaultoptions:string = '';
24
+ export let dummydata:string = '';
25
+ export let smsverification = 'false';
26
+ export let simplepasswordvalidation:string = 'false';
27
+ export let userroles:string = '';
28
+ export let clientstyling:string = '';
29
+ export let clientstylingurl:string = '';
30
+ export let translationurl:string = '';
31
+ export let savecredentials:string = '';
32
+ export let custominputtextswitch:string = 'false';
33
+ export let personalidlength:string = '13';
34
+
35
+ let customStylingContainer:HTMLElement;
36
+ let displayNone:boolean = false;
37
+
38
+ let isLoading:boolean = false;
39
+
40
+ let disabledFieldsList:Array<string> = [];
41
+ let defaultOptionsList:Array<string> = [];
42
+
43
+ let playerid:string = '';
44
+ let showRegisterStepOne:boolean = true;
45
+ let showRegisterStepTwo:boolean = false;
46
+ let showRegisterStepThree:boolean = false;
47
+ let showSmsVerification: boolean = false;
48
+ let showConfirmation:boolean = false;
49
+ let cmsData:any;
50
+ let showError:boolean = false;
51
+
52
+ let accountCreationTitle:string = '';
53
+ let accountCreationSubTitle:string = '';
54
+ let accountCreationMessage:string = '';
55
+ let image:Object = {};
56
+
57
+ let userAgent:string = window.navigator.userAgent;
58
+ let isMobile:boolean = (getDevice(userAgent) === 'PC') ? false : true;
59
+
60
+ // @TODO typescript model type for userData
61
+ let userData:any = {};
62
+ let stepTwoVisited:boolean = false;
63
+ let stepThreeVisited:boolean = false;
64
+ let userconsentsexist:string = 'false';
65
+ let termsconditions:string = 'false';
66
+ let smsoffers:string = 'false';
67
+ let emailmarketing:string = 'false';
68
+ let error:string = '';
69
+ let smsTemplate: string = 'Please use this code {0} to activate your account';
70
+ let smstokenid;
71
+ let smsSendApiFailed = false;
72
+ let number;
73
+
74
+ let scrollSteps:HTMLElement;
75
+
76
+ // @TODO typescript model for loginFields
77
+ let loginFields:any = {
78
+ username: '',
79
+ password: '',
80
+ };
81
+
82
+ setupI18n({ withLocale: 'en', translations: {}});
83
+
84
+ const setTranslationUrl = ():void => {
85
+ let url:string = translationurl;
86
+
87
+ fetch(url).then((res:any) => res.json())
88
+ .then((res) => {
89
+ Object.keys(res).forEach((item:any):void => {
90
+ addNewMessages(item, res[item]);
91
+ });
92
+ }).catch((err:any) => {
93
+ console.log(err);
94
+ });
95
+ }
96
+
97
+ Object.keys(TRANSLATIONS).forEach((item:any) => {
98
+ addNewMessages(item, TRANSLATIONS[item]);
99
+ });
100
+
101
+ const verifyUserConsents = ():void => {
102
+ fetch(`${endpoint}/v1/player/consentRequirements`)
103
+ .then((res:any) => res.json())
104
+ .then(data => {
105
+ if(data.items.length > 0) {
106
+ userconsentsexist = 'true';
107
+ data.items.forEach((item) => {
108
+ switch(item.tagCode) {
109
+ case 'termsandconditions':
110
+ termsconditions = 'true';
111
+ break;
112
+
113
+ case 'sms':
114
+ smsoffers = 'true';
115
+ break;
116
+
117
+ case 'emailmarketing':
118
+ emailmarketing = 'true';
119
+ break;
120
+ }
121
+ });
122
+ } else {
123
+ userconsentsexist = 'false';
124
+ }
125
+ });
126
+ }
127
+
128
+ const getCmsData = ():void => {
129
+ let url:URL = new URL(`${cmsendpoint}/${lang}/login-register-content?env=${env}`);
130
+
131
+ let device = getDevice(userAgent)
132
+
133
+ if(device){
134
+ if(device === 'PC'){
135
+ url.searchParams.append('device', 'dk')
136
+ } else if(device === 'iPad' || device === 'iPhone') {
137
+ url.searchParams.append('device', 'mtWeb'); // replace with ios when we will have a native ios up for this
138
+ } else {
139
+ url.searchParams.append('device', 'mtWeb')
140
+ }
141
+ }
142
+
143
+ fetch(url.href)
144
+ .then((res: any) => res.json())
145
+ .then((data: any) => {
146
+ cmsData = data.registerData;
147
+
148
+ accountCreationTitle = cmsData.title;
149
+ accountCreationSubTitle = cmsData.subtitle;
150
+ accountCreationMessage = cmsData.content;
151
+
152
+ })
153
+ .catch((err: any) => {
154
+ console.error(err);
155
+ });
156
+ };
157
+
158
+ const scrollTop = ():void => {
159
+ scrollSteps.scrollIntoView();
160
+ }
161
+
162
+ const retrieveDefaultData = (field: string) => {
163
+ let result;
164
+ defaultOptionsList.forEach(e => {
165
+ if(e.includes(field)) {
166
+ result = e.split(':')[1].toString();
167
+ }
168
+ });
169
+ return result;
170
+ }
171
+
172
+
173
+ // @TODO data typescript
174
+ const createData = (step:string, data:any):void => {
175
+ defaultOptionsList = defaultoptions.split(',');
176
+
177
+ if (step === 'RegisterStepOne') {
178
+ userData.email = disabledFieldsList.indexOf('email') >= 0 ? retrieveDefaultData('email') ?? 'dummy@dummy.com' : data.userEmail;
179
+ userData.username = disabledFieldsList.indexOf('username') >= 0 ? retrieveDefaultData('username') ?? 'dummyUsername' : data.userValue;
180
+ userData.password = disabledFieldsList.indexOf('password') >= 0 ? retrieveDefaultData('password') ?? 'dummyPassword01!' : data.userPassword;
181
+ userData.securityQuestion = disabledFieldsList.indexOf('securityQuestion') >= 0 ? retrieveDefaultData('securityQuestion') ?? 'dummy question' : data.securityQuestion;
182
+ userData.securityAnswer = disabledFieldsList.indexOf('securityAnswer') >= 0 ? retrieveDefaultData('securityAnswer') ?? 'dummy answer' : data.securityAnswer;
183
+ userData.promoCode = disabledFieldsList.indexOf('promoCode') >= 0 ? retrieveDefaultData('promoCode') ?? '' : data.promoCode;
184
+ }
185
+ if (step === 'RegisterStepTwo') {
186
+ userData.title = data.userTitleSelected;
187
+ userData.firstname = disabledFieldsList.indexOf('firstName') >= 0 ? retrieveDefaultData('firstName') ?? 'dummy first name' : data.userFirstName;
188
+ userData.lastname = disabledFieldsList.indexOf('lastName') >= 0 ? retrieveDefaultData('lastName') ?? 'dummy last name' : data.userLastName;
189
+ if (disabledFieldsList.indexOf('birthDate') >= 0) {
190
+ userData.birth = {
191
+ day: 1,
192
+ month: 1,
193
+ year: 2000
194
+ };
195
+ } else {
196
+ userData.birth = {};
197
+ userData.birth.day = data.birthDaySelected;
198
+ userData.birth.month = data.birthMonthSelected;
199
+ userData.birth.year = data.birthYearSelected;
200
+ }
201
+ userData.birthPlace = disabledFieldsList.indexOf('birthPlace') >= 0 ? retrieveDefaultData('birthPlace') ?? 'ngenge' : data.birthPlace;
202
+ userData.currency = retrieveDefaultData('currency') ?? data.currencySelected;
203
+ if (!(disabledFieldsList?.indexOf('personalId') >= 0)) {
204
+ userData.personalId = data.personalId ?? retrieveDefaultData('personalId') ?? 'dummy personal id';
205
+ }
206
+ }
207
+ if (step === 'RegisterStepThree') {
208
+ userData.address1 = disabledFieldsList.indexOf('address') >= 0 ? retrieveDefaultData('address') ?? 'dummy address' : data.address;
209
+ userData.postalCode = disabledFieldsList.indexOf('postalCode') >= 0 ? retrieveDefaultData('postalCode') ?? '000000' : data.postalCode;
210
+ userData.city = disabledFieldsList.indexOf('city') >= 0 ? retrieveDefaultData('city') ?? 'dummy city' : data.city;
211
+ userData.country = disabledFieldsList.indexOf('country') >= 0 ? retrieveDefaultData('country') ?? 'dummy country' : data.countrySelected;
212
+ userData.nationality = disabledFieldsList.indexOf('nationality') >= 0 ? retrieveDefaultData('nationality') ?? 'dummy nationality' : data.nationalitySelected;
213
+ if (disabledFieldsList.indexOf('mobile') >= 0) {
214
+ userData.mobile = {
215
+ prefix: retrieveDefaultData('phonePrefix') ?? '0040',
216
+ number: '1234123412'
217
+ };
218
+ } else {
219
+ userData.mobile = {};
220
+ userData.mobile.prefix = retrieveDefaultData('phonePrefix') ?? data.mobilePrefixSelected;
221
+ userData.mobile.number = data.mobile;
222
+ number = `${data.mobilePrefixSelected}${data.mobile}`
223
+ }
224
+
225
+ userData.userConsents = {};
226
+ // analytics data
227
+ userData.affiliateMarker = userData.promoCode ? userData.promoCode : trackedanalyticsdata ?? '';
228
+
229
+ if (userconsentsexist == 'true') {
230
+ userData.userConsents.sms = data.consentOffersSms;
231
+ userData.userConsents.emailmarketing = data.consentOffersEmail;
232
+ userData.userConsents.termsandconditions = data.consentTerms;
233
+ }
234
+
235
+ userData.token = data.token;
236
+ }
237
+ }
238
+
239
+ const messageHandler = (e:any):void => {
240
+ if (e.data) {
241
+ switch(e.data.type) {
242
+ case 'RegisterStepOne':
243
+ createData('RegisterStepOne', e.data.registerStepOneData);
244
+ scrollTop();
245
+ showRegisterStepOne = false;
246
+ showRegisterStepTwo = true;
247
+ if (stepTwoVisited == false) {
248
+ stepTwoVisited = true;
249
+ } else {
250
+ window.postMessage({ type: 'StepTwoDataBackup', userData }, window.location.href);
251
+ }
252
+ break;
253
+
254
+ case 'RegisterStepTwo':
255
+ createData('RegisterStepTwo', e.data.registerStepTwoData);
256
+ scrollTop();
257
+ showRegisterStepTwo = false;
258
+ showRegisterStepThree = true;
259
+ if (stepThreeVisited == false) {
260
+ stepThreeVisited = true;
261
+ } else {
262
+ window.postMessage({ type: 'StepThreeDataBackup', userData }, window.location.href);
263
+ }
264
+ break;
265
+
266
+ case 'RegisterStepThree':
267
+ createData('RegisterStepThree', e.data.registerStepThreeData);
268
+ sendData(userData);
269
+ break;
270
+
271
+ case 'SmsHasBeenValidated':
272
+ showConfirmation = true;
273
+ showSmsVerification = false;
274
+ break;
275
+
276
+ case 'GoBackStepTwo':
277
+ createData('RegisterStepTwo', e.data.registerStepTwoData);
278
+ scrollTop();
279
+ showRegisterStepOne = true;
280
+ showRegisterStepTwo = false;
281
+ window.postMessage({ type: 'StepOneDataBackup', userData }, window.location.href);
282
+ break;
283
+
284
+ case 'GoBackStepThree':
285
+ createData('RegisterStepThree', e.data.registerStepThreeData);
286
+ scrollTop();
287
+ showRegisterStepTwo = true;
288
+ showRegisterStepThree = false;
289
+ window.postMessage({ type: 'StepTwoDataBackup', userData }, window.location.href);
290
+ break;
291
+
292
+ default:
293
+ // do nothing
294
+ break;
295
+ }
296
+ }
297
+ }
298
+
299
+ const handlePostRegister = ():void => {
300
+ //Analytics event
301
+ if(typeof gtag == 'function'){
302
+ gtag('event', 'Register', {
303
+ 'context': 'GeneralPlayerRegisterForm'
304
+ });
305
+ }
306
+ }
307
+
308
+ // @TODO typescript data model for userData
309
+ const sendData = async (userData:any):Promise<any> => {
310
+ userData.language = lang;
311
+
312
+ let sendRegistrationData = {
313
+ method: "PUT",
314
+ headers: {
315
+ 'g-recaptcha-response': userData.token,
316
+ 'Content-Type': "application/json",
317
+ 'Accept': 'application/json',
318
+ },
319
+ body: JSON.stringify(userData)
320
+ };
321
+
322
+ let response:any = await fetch(`${endpoint}/v1/player/register`, sendRegistrationData);
323
+ let data:any = await response.json();
324
+
325
+ if (response.ok) {
326
+ showRegisterStepThree = false;
327
+ if(smsverification === 'false') {
328
+ showConfirmation = true;
329
+ } else {
330
+ playerid = data.id;
331
+ sendSmsToken(userData, data.id);
332
+ }
333
+
334
+ loginFields = {
335
+ username: userData.username,
336
+ password: userData.password
337
+ };
338
+
339
+ handlePostRegister();
340
+ } else {
341
+ // Parsing GMCore message 'cuz it's stupid and it doesn't know how to send error messages in 2021...2022 already ffs
342
+ // I really hope this piece of code won't survive long enough so that the years above will reach 2025 or something ... like, for real, please ... some real errors? plox ...
343
+ error = data.error.substring(data.error.indexOf('errorMessage') + 13, data.error.length);
344
+ showError = true;
345
+ window.postMessage({ type: "ShowRegistrationError", showError, error }, window.location.href);
346
+ }
347
+ }
348
+
349
+ const sendSmsToken = async (userData, playerId) => {
350
+ localStorage.setItem('smsTimer', JSON.stringify(Math.floor(Date.now() / 1000)));
351
+ try {
352
+ const res = await fetch(`${endpoint}/v1/player/sms/token`,{
353
+ method: 'POST',
354
+ headers: {
355
+ 'Content-Type': 'application/json',
356
+ accept: 'application/json',
357
+ },
358
+ body: JSON.stringify(
359
+ {
360
+ userId: playerId,
361
+ messageTemplate: smsTemplate,
362
+ destination: `${userData.mobile.prefix}${userData.mobile.number}`,
363
+ }
364
+ ),
365
+ });
366
+
367
+ const data = await res.json();
368
+
369
+ if(res.ok) {
370
+ smstokenid = data.id;
371
+ let smsMaxValidations = data.maxValidationAttempts;
372
+ showSmsVerification = true;
373
+ smsSendApiFailed = false;
374
+ } else {
375
+ smsSendApiFailed = true;
376
+ throw new Error("Failed to fetch");
377
+ }
378
+ } catch(err) {
379
+ smsSendApiFailed = true;
380
+ console.error(err);
381
+ }
382
+ }
383
+
384
+ const formatDisabledFields = ():void => {
385
+ disabledFieldsList = disabledfields.split(',');
386
+ }
387
+
388
+ const switchToLogin = ():void => {
389
+ window.postMessage({ type: "ToLogin" }, window.location.href);
390
+ }
391
+
392
+ const setActiveLanguage = ():void => {
393
+ setLocale(lang);
394
+ }
395
+
396
+ const setClientStyling = ():void => {
397
+ let sheet = document.createElement('style');
398
+ sheet.innerHTML = clientstyling;
399
+ customStylingContainer.appendChild(sheet);
400
+ }
401
+
402
+ const setClientStylingURL = ():void => {
403
+ displayNone = true;
404
+
405
+ let url:URL = new URL(clientstylingurl);
406
+ let cssFile:HTMLElement = document.createElement('style');
407
+
408
+ fetch(url.href)
409
+ .then((res:any) => res.text())
410
+ .then((data:any) => {
411
+ cssFile.innerHTML = data
412
+
413
+ setTimeout(() => { customStylingContainer.appendChild(cssFile) }, 1);
414
+ setTimeout(() => { displayNone = false; }, 500);
415
+ });
416
+ }
417
+
418
+ onMount(() => {
419
+ window.addEventListener('message', messageHandler, false);
420
+
421
+ return () => {
422
+ window.removeEventListener('message', messageHandler);
423
+ };
424
+ });
425
+
426
+ $: endpoint && verifyUserConsents();
427
+ $: cmsendpoint && lang && env && userroles && getCmsData();
428
+ $: playerid && session;
429
+ $: lang && setActiveLanguage();
430
+ $: disabledfields && formatDisabledFields();
431
+ $: clientstyling && customStylingContainer && setClientStyling();
432
+ $: clientstylingurl && customStylingContainer && setClientStylingURL();
433
+ $: translationurl && setTranslationUrl();
434
+ </script>
435
+ <div bind:this={customStylingContainer}>
436
+ {#if isLoading}
437
+ <div class="ModalLoader"></div>
438
+ {:else}
439
+ <div class="RegisterFormWrapper">
440
+ <div class="RegisterFormContainer {isMobile ? 'RegisterFormContainerMobile' : ''}">
441
+ {#if showRegisterStepOne || showRegisterStepTwo || showRegisterStepThree}
442
+ <div class="RegisterSteps" bind:this={scrollSteps}>
443
+ <div class="RegisterFirstStepDash {showRegisterStepOne || (!showRegisterStepOne && showRegisterStepTwo) || (!showRegisterStepOne && !showRegisterStepTwo && showRegisterStepThree) ? 'RegisterStepDashColor' : ''}"></div>
444
+ <div class="RegisterSecondStepDash {showRegisterStepTwo || (!showRegisterStepOne && !showRegisterStepTwo && showRegisterStepThree) ? 'RegisterStepDashColor' : ''}"></div>
445
+ <div class="RegisterThirdStepDash {showRegisterStepThree ? 'RegisterStepDashColor' : ''}"></div>
446
+ </div>
447
+ {/if}
448
+ {#if showRegisterStepOne}
449
+ <div class="RegisterFormStep1">
450
+ <general-player-register-form-nd-step1 {lang} {disabledfields} {defaultoptions} {dummydata} {custominputtextswitch} {simplepasswordvalidation} {clientstyling} {clientstylingurl} {savecredentials} {translationurl}/>
451
+ </div>
452
+ {/if}
453
+ {#if showRegisterStepTwo}
454
+ <div class="RegisterFormStep2">
455
+ <general-player-register-form-nd-step2 {endpoint} {lang} {licenseyears} {disabledfields} {defaultoptions} {dummydata} {personalidlength} {clientstyling} {clientstylingurl} {translationurl}/>
456
+ </div>
457
+ {/if}
458
+ {#if showRegisterStepThree}
459
+ <div class="RegisterFormStep3">
460
+ <general-player-register-form-nd-step3 {userconsentsexist} {termsconditions} {smsoffers} {emailmarketing} {endpoint} {captchakey} {lang} {defaultoptions} {disabledfields} {dummydata} {clientstyling} {clientstylingurl} {translationurl}/>
461
+ </div>
462
+ {/if}
463
+ {#if smsverification && showSmsVerification}
464
+ {#if !smsSendApiFailed}
465
+ <general-player-sms-verification-form
466
+ {endpoint}
467
+ {session}
468
+ {number}
469
+ {playerid}
470
+ tokenid={smstokenid}
471
+ {clientstyling}
472
+ {clientstylingurl}
473
+ >
474
+ </general-player-sms-verification-form>
475
+ {:else}
476
+ <p class="SMSErrorText">{$_('error')}</p>
477
+ {/if}
478
+ {:else if smsSendApiFailed}
479
+ <!-- this case is valid only until NW fixes the internal error on the /player/sms/token which reproduces aprox 1/5 cases. was added as to avoid empty screen due to untreated error -->
480
+ <p class="SMSErrorText">{$_('error')}</p>
481
+ {/if}
482
+ {#if showConfirmation}
483
+ <div class="RegisterConfirmation">
484
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.95 51"><defs><style>.a{fill:#var(--emw--color-valid, var(--emw--color-green, #48952a));}</style></defs><path class="a" d="M29.325,51,0,21.675l5.95-5.95,23.375,22.95L68,0l5.95,5.95Z"/></svg>
485
+ <h2 class="RegisterConfirmationTitle">{accountCreationTitle}</h2>
486
+ <p class="RegisterConfirmationSubtitle">{accountCreationSubTitle}</p>
487
+ <p class="RegisterConfirmationNote">{accountCreationMessage}</p>
488
+ <button class="RegisterConfirmationGoToLogin" on:click={switchToLogin}>{$_('goToLoginButton')}</button>
489
+ </div>
490
+ {/if}
491
+ </div>
492
+ </div>
493
+ {/if}
494
+ </div>
495
+
496
+ <style lang="scss">
497
+
498
+
499
+ .RegisterFormWrapper {
500
+ background: var(--emw--registration-color-bg, var(--emw--color-gray-50, #F9F8F8));
501
+ border-radius: 15px;
502
+ }
503
+
504
+ .RegisterFormContainer {
505
+ padding: 25px;
506
+ height: 404px;
507
+ overflow-y: auto;
508
+ scrollbar-color: var(--emw--color-gray-100, #E6E6E6) var(--emw--color-gray-50, #F9F8F8);
509
+ scrollbar-width: thin;
510
+ &.RegisterFormContainerMobile {
511
+ padding: 40px 20px;
512
+ height: 65vh;
513
+ overflow-y: scroll;
514
+ }
515
+ }
516
+
517
+ .RegisterFormContainer::-webkit-scrollbar {
518
+ width: 6px;
519
+ }
520
+
521
+ /* Track */
522
+ .RegisterFormContainer::-webkit-scrollbar-track {
523
+ background: var(--emw--color-gray-50, #F9F8F8);
524
+ }
525
+
526
+ /* Handle */
527
+ .RegisterFormContainer::-webkit-scrollbar-thumb {
528
+ background: var(--emw--color-gray-100, #E6E6E6);
529
+ }
530
+
531
+ .RegisterSteps {
532
+ display: flex;
533
+ gap: 10px;
534
+ padding: 20px 0 30px;
535
+ }
536
+
537
+ .RegisterFirstStepDash,
538
+ .RegisterSecondStepDash,
539
+ .RegisterThirdStepDash {
540
+ width: 50px;
541
+ height: 2px;
542
+ background-color: var(--emw--color-gray-100, #E6E6E6);
543
+ }
544
+
545
+ .RegisterStepDashColor {
546
+ background-color: var(--emw--registration-color-primary, var(--emw--color-primary, #22B04E));
547
+ }
548
+
549
+ .RegisterStepNext {
550
+ background-image: linear-gradient(to bottom, color-mix(in srgb, var(--emw--color-primary, #22B04E) 80%, black 20%), var(--emw--color-primary, #22B04E), color-mix(in srgb, var(--emw--color-primary, #22B04E) 80%, white 30%));
551
+ border: 2px solid var(--emw--button-border-color, #0E5924);
552
+ border-radius: var(--emw--button-border-radius, 50px);
553
+ color: var(--emfe-w-button-typography, var(--emw--button-text-color, #FFFFFF));
554
+ font-family: var(--emw--button-typography);
555
+ width: 100%;
556
+ height: 60px;
557
+ padding: 0;
558
+ text-transform: uppercase;
559
+ font-size: var(--emw--font-size-medium, 16px);
560
+ cursor: pointer;
561
+ margin-top: 24px;
562
+ }
563
+
564
+ .SMSErrorText {
565
+ height: 80%;
566
+ display: flex;
567
+ align-items: center;
568
+ }
569
+
570
+ .RegisterConfirmation {
571
+ display: flex;
572
+ flex-direction: column;
573
+ align-items: center;
574
+ justify-content: center;
575
+ text-align: center;
576
+ margin-top: 60px;
577
+ svg {
578
+ width: 74px;
579
+ }
580
+ .RegisterConfirmationTitle {
581
+ color: var(--emw--color-valid, var(--emw--color-valid, #48952a));
582
+ font-size: 24px;
583
+ font-weight: var(--emw--font-weight-normal, 400);
584
+ text-transform: uppercase;
585
+ margin-bottom: 0;
586
+ }
587
+ .RegisterConfirmationSubtitle {
588
+ color: var(--emw--registration-contrast, var(--emw--color-typography-cotrast, #444444));
589
+ font-size: var(--emw--font-size-medium, 16px);
590
+ line-height: 19px;
591
+ margin-bottom: 24px;
592
+ }
593
+ .RegisterConfirmationNote {
594
+ color: var(--emw--registration-contrast, var(--emw--color-typography-cotrast, #444444));
595
+ font-size: var(--emw--font-size-medium, 16px);
596
+ line-height: 22px;
597
+ }
598
+ }
599
+
600
+ .RegisterConfirmationGoToLogin {
601
+ background-image: linear-gradient(to bottom, color-mix(in srgb, var(--emw--color-primary, #22B04E) 80%, black 20%), var(--emw--color-primary, #22B04E), color-mix(in srgb, var(--emw--color-primary, #22B04E) 80%, white 30%));
602
+ border: 2px solid var(--emw--button-border-color, #0E5924);
603
+ border-radius: var(--emw--button-border-radius, 50px);
604
+ color: var(--emfe-w-button-typography, var(--emw--button-text-color, #FFFFFF));
605
+ width: 100%;
606
+ height: 60px;
607
+ padding: 0;
608
+ text-transform: uppercase;
609
+ font-size: var(--emw--font-size-medium, 16px);
610
+ cursor: pointer;
611
+ margin-top: 24px;
612
+ }
613
+ </style>
package/src/i18n.js ADDED
@@ -0,0 +1,27 @@
1
+ import {
2
+ dictionary,
3
+ locale,
4
+ addMessages,
5
+ _
6
+ } from 'svelte-i18n';
7
+
8
+ function setupI18n({ withLocale: _locale, translations }) {
9
+ locale.subscribe((data) => {
10
+ if (data == null) {
11
+ dictionary.set(translations);
12
+ locale.set(_locale);
13
+ }
14
+ }); // maybe we will need this to make sure that the i18n is set up only once
15
+ /*dictionary.set(translations);
16
+ locale.set(_locale);*/
17
+ }
18
+
19
+ function addNewMessages(lang, dict) {
20
+ addMessages(lang, dict);
21
+ }
22
+
23
+ function setLocale(_locale) {
24
+ locale.set(_locale);
25
+ }
26
+
27
+ export { _, setupI18n, addNewMessages, setLocale };
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ import GeneralPlayerRegisterFormNd from './GeneralPlayerRegisterFormNd.svelte';
2
+
3
+ !customElements.get('general-player-register-form-nd') && customElements.define('general-player-register-form-nd', GeneralPlayerRegisterFormNd);
4
+ export default GeneralPlayerRegisterFormNd;
@@ -0,0 +1,42 @@
1
+ export const TRANSLATIONS = {
2
+ "en": {
3
+ "goToLoginButton": "Go To Login",
4
+ "error": "We encountered an issue. Please go to Login to receive your SMS code."
5
+ },
6
+ "zhs": {
7
+ "goToLoginButton": "去登錄",
8
+ "error": "我们遇到了一个问题。请转到登录以接收您的短信代码"
9
+ },
10
+ "fr": {
11
+ "goToLoginButton": "Aller à la connexion",
12
+ "error": "Nous avons rencontré un problème. Veuillez vous connecter pour recevoir votre code SMS."
13
+ },
14
+ "tr": {
15
+ "goToLoginButton": "Giriş Yap'a Git",
16
+ "error": "Bir sorunla karşılaştık. SMS kodunuzu almak için lütfen Giriş kısmına gidin."
17
+ },
18
+ "ro": {
19
+ "goToLoginButton": "Catre Autentificare",
20
+ "error": "Am întâmpinat o problemă. Vă rugăm să accesați Login pentru a primi codul SMS."
21
+ },
22
+ "es": {
23
+ "goToLoginButton": "Ir a Inicio de Sesión",
24
+ "error": "Encontramos un problema. Vaya a Iniciar sesión para recibir su código SMS."
25
+ },
26
+ "pt": {
27
+ "goToLoginButton": "Ir para o Login",
28
+ "error": "Encontramos um problema. Vá para Login para receber seu código SMS."
29
+ },
30
+ "hr": {
31
+ "goToLoginButton": "Idi na Prijava",
32
+ "error": "Naišli smo problem. Idite na Prijava kako biste primili svoj SMS kod."
33
+ },
34
+ "pt-br": {
35
+ "goToLoginButton": "Ir ao início da sessão",
36
+ "error": "Descobrimos um problema. Por favor, vá ao início da sessão para receber seu código SMS."
37
+ },
38
+ "es-mx": {
39
+ "goToLoginButton": "Ir a inicio de sesión",
40
+ "error": "Encontramos un problema. Por favor vaya al inicio de sesión para recibir su código SMS."
41
+ }
42
+ }