@everymatrix/casino-footer 1.44.0 → 1.45.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,752 +0,0 @@
1
- <svelte:options tag={null} />
2
-
3
- <script lang="ts">
4
- import '@everymatrix/casino-footer-section';
5
- import '@everymatrix/player-panic-button';
6
-
7
- import moment from 'moment';
8
- import { onMount } from 'svelte';
9
- import { checkSession, getDevice } from 'rvhelper';
10
- import { _, addNewMessages, setLocale } from './i18n';
11
- import { TRANSLATIONS } from './translations.js'
12
-
13
- export let endpoint:string = '';
14
- export let lang:string = 'en';
15
- export let env:string = '';
16
- export let clientstyling:string = '';
17
- export let clientstylingurl:string = '';
18
- export let translationurl:string = '';
19
- // Clock exposed attributes - If the clock is enabled, all attributes should be given a value, otherwise they can be ignored safely
20
- export let clockenabled:string = ''; // "true" to enable, anything to disable
21
- export let clocksecondsenabled:string = ''; // "true" to display seconds in our default format and to refresh the clock every 1000ms
22
- export let clockcustomformat:string = ''; // "false" for defaulting to our format
23
- export let clocktext:string = 'Time'; // string preceding clock
24
-
25
- export let languageselectorenabled = 'true';
26
- export let languageslist:string = 'en, ro';
27
- export let languagedisplaytype = 'name';
28
- export let session:string = '';
29
- export let userid:string = '';
30
- export let userendpoint:string = '';
31
- export let userroles:string = '';
32
-
33
- export let panicbuttonenabled:string = 'true';
34
-
35
- export let sessiontimerenabled = 'true'; // 'true' to enable, anything to disable
36
- export let baseurl:string = '';
37
-
38
- let gameVendorsLinksTitle:string = '';
39
- let gameVendorsRepeater:Array<Object> = [];
40
- let paymentLinksTitle:string = '';
41
- let paymentMethodsRepeater:Array<Object> = [];
42
- let sponsorsLinksTitle:string = '';
43
- let sponsorsRepeater:Array<Object> = [];
44
- let helpLinksTitle:string = '';
45
- let helpLinksRepeater:Array<Object> = [];
46
- let licensesLinksTitle:string = '';
47
- let licensesRepeater:Array<Object> = [];
48
- let socialLinksTitle:string = '';
49
- let socialLinksRepeater:Array<Object> = [];
50
- let copyright:string = '';
51
- let licenseDesc:string = '';
52
- let hasErrors:boolean = false;
53
- let isLoading:boolean = false;
54
- let receivedFooterData:any;
55
- let headScript:boolean = false;
56
- let licenseScriptSrc:string = '';
57
- let licenseScript:string = '';
58
- let isLoggedIn:boolean = false;
59
- let sessionID:string = '';
60
- let playerID:string = '';
61
- let selectedLanguage:string = 'hr';
62
- let languages:Array<object> = [];
63
- let userAgent = window.navigator.userAgent;
64
-
65
- let time:string;
66
- let refreshRate: number;
67
-
68
- let languagesArray:Array<string> = [];
69
- let languageDrawer: HTMLElement;
70
- let languageDisplayName:string = '';
71
- let currentLanguageFlag:string = '';
72
- let languagePackLoaded:boolean = false;
73
-
74
- let timeString:string = '';
75
-
76
- const setTranslationUrl = ():void => {
77
- let url:string = translationurl;
78
-
79
- fetch(url).then((res:any) => res.json())
80
- .then((res) => {
81
- Object.keys(res).forEach((item:any):void => {
82
- addNewMessages(item, res[item]);
83
- });
84
- }).catch((err:any) => {
85
- console.log(err);
86
- });
87
- }
88
-
89
- let customStylingContainer:HTMLElement;
90
- let displayNoneCustomStyling:Boolean = false;
91
-
92
- Object.keys(TRANSLATIONS).forEach((item:any) => {
93
- addNewMessages(item, TRANSLATIONS[item]);
94
- });
95
-
96
- // needed for session timer
97
- const setSession = ():void => {
98
- checkSession(userendpoint, session).then((res:any) => {
99
- sessionID = res.Guid;
100
- playerID = res.UserID;
101
- isLoggedIn = true;
102
- }, (err:any) => {
103
- isLoggedIn = false;
104
- console.error('Error while checking the session - ', err)
105
- });
106
- }
107
-
108
- const setSessionTimer = ():void => {
109
- // using Date instead of moment because they recommend in their docs to stop using it for new projects
110
- const sessionData = JSON.parse(localStorage.session);
111
- const loginTime = new Date(sessionData.Login);
112
- const timezoneOffsetHours = new Date().getTimezoneOffset() / 60;
113
- let currentTime = new Date();
114
- let milisecondDifference = currentTime.getTime() - loginTime.getTime();
115
-
116
- let hours = Math.floor(milisecondDifference / 3600000) + timezoneOffsetHours;
117
- let minutes = Math.floor(milisecondDifference % 3600000 / 60000);
118
- let seconds = Math.floor(milisecondDifference % 60000 / 1000);
119
-
120
- setInterval(() => {
121
- hours = Math.floor(milisecondDifference / 3600000) + timezoneOffsetHours;
122
- minutes = Math.floor(milisecondDifference % 3600000 / 60000);
123
- seconds = Math.floor(milisecondDifference % 60000 / 1000);
124
-
125
- timeString = `${hours > 9 ? hours : '0' + hours}:${minutes > 9 ? minutes : '0' + minutes}:${seconds > 9 ? seconds : '0' + seconds}`;
126
-
127
- milisecondDifference += 1000;
128
- },1000);
129
- }
130
-
131
- const refreshClock = () => {
132
- setInterval(() => {
133
- clockDisplay();
134
- }, refreshRate);
135
- }
136
-
137
- const clockDisplay = ():void => {
138
- const format = clockcustomformat != 'false' ? clockcustomformat : `hh:mm${clocksecondsenabled === "true" ? ':ss' : ''} (UTC Z)`;
139
- time = moment().format(format);
140
- }
141
-
142
- const getCmsData = () => {
143
- let url:URL = new URL(`${endpoint}/${lang}/footer-raw-data?env=${env}`);
144
-
145
- let device = getDevice(userAgent);
146
-
147
- url.searchParams.append('userRoles', userroles);
148
-
149
- if(device){
150
- if(device === 'PC'){
151
- url.searchParams.append('device', 'dk')
152
- } else if(device === 'iPad' || device === 'iPhone') {
153
- url.searchParams.append('device', 'mtWeb'); // replace with ios when we will have a native ios up for this
154
- } else {
155
- url.searchParams.append('device', 'mtWeb')
156
- }
157
- }
158
-
159
- hasErrors = false;
160
- isLoading = true;
161
- fetch(url)
162
- .then((res:any) => res.json())
163
- .then((data:any) => {
164
- isLoading = false;
165
-
166
- receivedFooterData = data;
167
- let licenseHeadScriptSrc,
168
- licenseScriptBody,
169
- licenseEvent;
170
-
171
- ({
172
- gameVendorsLinksTitle,
173
- gameVendorsRepeater,
174
- paymentLinksTitle,
175
- paymentMethodsRepeater,
176
- sponsorsLinksTitle,
177
- sponsorsRepeater,
178
- helpLinksTitle,
179
- helpLinksRepeater,
180
- licensesLinksTitle,
181
- licensesRepeater,
182
- socialLinksTitle,
183
- socialLinksRepeater,
184
- copyright,
185
- licenseDesc,
186
- licenseHeadScriptSrc,
187
- licenseScriptBody,
188
- licenseEvent,
189
- language : languages
190
- } = receivedFooterData);
191
-
192
- if (languages) {
193
- languagePackLoaded = true;
194
- updateLanguageDisplayName();
195
- }
196
-
197
- if (licenseHeadScriptSrc?.length > 0) {
198
- headScript = true;
199
- licenseScriptSrc = licenseHeadScriptSrc;
200
- }
201
-
202
- if (licenseScriptBody?.length > 0) {
203
- licenseScript = licenseScriptBody;
204
- }
205
-
206
- window.postMessage({ type: licenseEvent }, window.location.href);
207
-
208
- window.postMessage({
209
- type: 'FooterData',
210
- gameVendorsRepeater,
211
- paymentMethodsRepeater,
212
- sponsorsRepeater,
213
- helpLinksRepeater,
214
- licensesRepeater,
215
- socialLinksRepeater
216
- }, window.location.href);
217
- }).catch((err:any) => {
218
- hasErrors = true;
219
- isLoading = false;
220
-
221
- console.error(err);
222
- });
223
- }
224
-
225
- const setContent = (element:HTMLElement, content:any) => {
226
- let htmlContent = document.createElement("div");
227
- htmlContent.innerHTML = content;
228
- element.append(htmlContent);
229
- }
230
-
231
- const changeLanguage = () => {
232
- window.postMessage({type: 'LanguageChanged', selectedLanguage}, window.location.href);
233
- };
234
-
235
- const toggleLanguageDrawer = () => {
236
- languageDrawer.classList.toggle('hidden');
237
- }
238
-
239
- const overlayOptionTrigger = (e) => {
240
- let option = e.target.closest('.overlayLanguageOption');
241
- selectedLanguage = option.getAttribute('data-lang');
242
- changeLanguage();
243
- updateLanguageDisplayName();
244
- languageDrawer.classList.toggle('hidden');
245
- };
246
-
247
- const updateLanguageDisplayName = ():void => {
248
- let matchFound = false;
249
- languages.forEach((l, i) => {
250
- if (l.code == selectedLanguage.toLowerCase()) {
251
- matchFound = true;
252
- let langName:string = '';
253
- currentLanguageFlag = l.flag_icon_editable;
254
- switch (languagedisplaytype) {
255
- case 'name':
256
- langName = l.name;
257
- break;
258
-
259
- case 'translatedName':
260
- langName = l.translated_name;
261
- break;
262
-
263
- default:
264
- langName = l.code;
265
- break;
266
- }
267
- languageDisplayName = langName;
268
- }
269
- });
270
-
271
- if (!matchFound) {
272
- languageDisplayName = selectedLanguage;
273
- }
274
- }
275
-
276
- const setClientStyling = ():void => {
277
- let sheet = document.createElement('style');
278
- sheet.innerHTML = clientstyling;
279
- customStylingContainer.appendChild(sheet);
280
- }
281
-
282
- const setClientStylingURL = ():void => {
283
- displayNoneCustomStyling = true;
284
-
285
- let url:URL = new URL(clientstylingurl);
286
- let cssFile:HTMLElement = document.createElement('style');
287
-
288
- fetch(url.href)
289
- .then((res:any) => res.text())
290
- .then((data:any) => {
291
- cssFile.innerHTML = data;
292
-
293
- // after the first call is made for the custom styling file, save the css inside clientstyling in order to avoid multiple fetches inside subwidgets
294
- clientstyling = clientstyling ? clientstyling + data : data;
295
-
296
- setTimeout(() => { customStylingContainer.appendChild(cssFile) }, 1);
297
- setTimeout(() => { displayNoneCustomStyling = false; }, 500);
298
- });
299
- }
300
-
301
- onMount(() => {
302
- languagesArray = languageslist.replace(/ /g,'').split(',');
303
- languagesArray = languagesArray.map((language:string) => language.toUpperCase());
304
- });
305
-
306
- $: lang && setLocale(lang);
307
- $: session && userid && endpoint && setSession();
308
- $: isLoggedIn && lang && setSessionTimer();
309
- $: clientstyling && customStylingContainer && setClientStyling();
310
- $: clientstylingurl && customStylingContainer && setClientStylingURL();
311
- $: endpoint && lang && env && userroles && getCmsData();
312
- $: translationurl && setTranslationUrl();
313
- $: clockenabled !== 'false' && clocksecondsenabled && clockcustomformat && clockDisplay();
314
- $: clockenabled !== 'false' && clocksecondsenabled && (refreshRate = clocksecondsenabled == "true" ? 1000 : 60000) && refreshClock();
315
- $: lang && (selectedLanguage = lang) && languages && (languages.length > 0) && updateLanguageDisplayName();
316
-
317
- </script>
318
-
319
- <svelte:head>
320
- {#if headScript}
321
- <script src={licenseScriptSrc}></script>
322
- {/if}
323
- </svelte:head>
324
-
325
- <div bind:this={customStylingContainer}>
326
- {#if hasErrors}
327
- <p class="SearchLoading" part="SearchLoading">500 Error - Internal Server Error</p>
328
- {:else}
329
- {#if isLoading}
330
- <p class="SearchLoading" part="SearchLoading">Loading ...</p>
331
- {:else}
332
- <div class="FooterGrid {sponsorsRepeater ? '' : 'NoSponsorSpacing'}" part="FooterGrid {sponsorsRepeater ? '' : 'NoSponsorSpacing'}">
333
- <!-- start optionals section -->
334
- {#if (clockenabled==="true" || languageselectorenabled==="true" || panicbuttonenabled==="true")}
335
- <div class="GridRow ProvisionalRow" part="GridRow">
336
- {#if clockenabled==="true"}
337
- <div class="ClockContainer">
338
- <span class="ClockText">{clocktext}:</span>
339
- <span class="ClockTime">{time}</span>
340
- </div>
341
- {/if}
342
-
343
- {#if panicbuttonenabled==="true"}
344
- <player-panic-button
345
- lang={lang}
346
- ></player-panic-button>
347
- {/if}
348
-
349
- {#if (languageselectorenabled==="true" && languagePackLoaded && selectedLanguage)}
350
- <div class="languageSelectorContainer">
351
- <!-- traditional dropdown option for screenreader users. Works the same way as the old language selector. Display: none -->
352
- <select bind:value={selectedLanguage} class="Item ItemLanguage" part="Item ItemLanguage" on:change={()=>changeLanguage()}>
353
- {#each languagesArray as operatorLanguage}
354
- <option value={operatorLanguage} selected>{operatorLanguage}</option>
355
- {/each}
356
- </select>
357
-
358
- <!-- Custom dropdown in order to be able to display country flags -->
359
- <div class="languageSelectorOverlay">
360
- <button class="drawerButton" value="{selectedLanguage}" on:click={toggleLanguageDrawer}><img class="languageFlag" src={currentLanguageFlag}>{languageDisplayName}<img class="downwardChevron" src="https://upload.wikimedia.org/wikipedia/commons/2/24/White_arrow_down.svg"></button>
361
- <div bind:this={languageDrawer} class="languageDrawer hidden">
362
- <ul id="languageList">
363
- {#each languages as language}
364
- <li class="overlayLanguageOption" data-lang={language.code} on:click={overlayOptionTrigger}><img class="languageFlag" src={language.flag_icon_editable}><a href="javascript:void(0)"><span>{language.name}</span></a></li>
365
- {/each}
366
- </ul>
367
- </div>
368
- </div>
369
- </div>
370
- {/if}
371
- </div>
372
- {/if}
373
-
374
- {#if (sessiontimerenabled === 'true') && localStorage.session}
375
- <div class="GridRow ProvisionalRow" part="GridRow">
376
- <div class="sessionTimerContainer">
377
- <span class="SessionText">{$_('sessionTimer')} {timeString}</span>
378
- </div>
379
- </div>
380
- {/if}
381
- <!-- end optionals section -->
382
- {#if sponsorsRepeater}
383
- <div class="GridRow" part="GridRow">
384
- <!-- start sponsors section -->
385
- {#if sponsorsRepeater}
386
- <div class="GridCol" part="GridCol">
387
- {#if sponsorsLinksTitle}
388
- <p class="FooterTitle" part="FooterTitle">{sponsorsLinksTitle}</p>
389
- {/if}
390
- <casino-footer-section
391
- class="FooterSection"
392
- part="FooterSection"
393
- sponsorflag="1"
394
- {clientstyling}
395
- {baseurl}
396
- {lang}
397
- footertype="footerprimary">
398
- </casino-footer-section>
399
- </div>
400
- {/if}
401
- <!-- end sponsors section -->
402
- </div>
403
- {/if}
404
- {#if paymentMethodsRepeater || gameVendorsRepeater}
405
- <div class="GridRow {(paymentMethodsRepeater && gameVendorsRepeater) ? 'SplitRow': ''}" part="GridRow {(paymentMethodsRepeater && gameVendorsRepeater) ? 'SplitRow': ''}">
406
- <!-- start payments section -->
407
- {#if paymentMethodsRepeater}
408
- <div class="GridCol" part="GridCol">
409
- {#if paymentLinksTitle}
410
- <p class="FooterTitle" part="FooterTitle">{paymentLinksTitle}</p>
411
- {/if}
412
- <casino-footer-section
413
- class="FooterSection"
414
- part="FooterSection"
415
- paymentflag="1"
416
- {clientstyling}
417
- {clientstylingurl}
418
- {baseurl}
419
- {lang}
420
- footertype="footerprimary">
421
- </casino-footer-section>
422
- </div>
423
- {/if}
424
- <!-- end payments section -->
425
- <!-- start vendors section -->
426
- {#if gameVendorsRepeater}
427
- <div class="GridCol" part="GridCol">
428
- {#if gameVendorsLinksTitle}
429
- <p class="FooterTitle" part="FooterTitle">{gameVendorsLinksTitle}</p>
430
- {/if}
431
- <casino-footer-section
432
- class="FooterSection"
433
- part="FooterSection"
434
- vendorflag="1"
435
- {clientstyling}
436
- {clientstylingurl}
437
- {baseurl}
438
- {lang}
439
- footertype="footerprimary">
440
- </casino-footer-section>
441
- </div>
442
- {/if}
443
- <!-- end vendors section -->
444
- </div>
445
- {/if}
446
- {#if helpLinksRepeater || licensesRepeater}
447
- <div class="GridRow {(helpLinksRepeater && licensesRepeater) ? 'SplitRow': ''}" part="GridRow {(helpLinksRepeater && licensesRepeater) ? 'SplitRow': ''}">
448
- <!-- start helper section -->
449
- {#if helpLinksRepeater}
450
- <div class="GridCol" part="GridCol">
451
- {#if helpLinksTitle}
452
- <p class="FooterTitle" part="FooterTitle">{helpLinksTitle}</p>
453
- {/if}
454
- <casino-footer-section
455
- class="FooterSection"
456
- part="FooterSection"
457
- helperflag="1"
458
- {clientstyling}
459
- {clientstylingurl}
460
- {baseurl}
461
- {lang}
462
- footertype="footerprimary">
463
- </casino-footer-section>
464
- </div>
465
- {/if}
466
- <!-- end helper section -->
467
- <!-- start license section -->
468
- {#if licensesRepeater}
469
- <div class="GridCol" part="GridCol">
470
- {#if licensesLinksTitle}
471
- <p class="FooterTitle" part="FooterTitle">{licensesLinksTitle}</p>
472
- {/if}
473
- <casino-footer-section
474
- class="FooterSection"
475
- part="FooterSection"
476
- licenseFlag="1"
477
- {clientstyling}
478
- {clientstylingurl}
479
- {baseurl}
480
- {lang}
481
- footertype="footerprimary">
482
- </casino-footer-section>
483
- </div>
484
- {/if}
485
- <!-- end license section -->
486
- </div>
487
- {/if}
488
- {#if licenseDesc || copyright}
489
- <div class="GridRow LicenseRow" part="GridRow LicenseRow">
490
- <!-- start social section -->
491
- <div class="GridCol" part="GridCol">
492
- <!-- start detailed licenses section -->
493
- <div class="DetailedLicenses" part="DetailedLicenses" use:setContent={licenseDesc}></div>
494
- <div class="DetailedCustomLicenses" part="DetailedCustomLicenses" use:setContent={licenseScript}></div>
495
- <!-- end detailed licenses section -->
496
- {#if socialLinksRepeater}
497
- {#if socialLinksTitle}
498
- <p class="FooterTitle" part="FooterTitle">{socialLinksTitle}</p>
499
- {/if}
500
- <casino-footer-section
501
- class="FooterSection SocialSection"
502
- part="FooterSection SocialSection"
503
- socialflag="1"
504
- {clientstyling}
505
- {clientstylingurl}
506
- {baseurl}
507
- {lang}
508
- footertype="footerprimary">
509
- </casino-footer-section>
510
- {/if}
511
- <!-- start copyright section -->
512
- <div class="CopyrightAreaRights CopyrightArea" part="CopyrightAreaRights CopyrightArea" use:setContent={copyright}></div>
513
- <!-- end copyright section -->
514
- </div>
515
- <!-- end social section -->
516
- </div>
517
- {/if}
518
- </div>
519
- {/if}
520
- {/if}
521
- </div>
522
-
523
-
524
- <style lang="scss">
525
-
526
-
527
-
528
- .SearchLoading {
529
- color: var(--emfe-w-color-white, #FFFFFF);
530
- text-align: center;
531
- }
532
-
533
- .FooterGrid {
534
- font-weight: 400;
535
- display: flex;
536
- padding: 10px 40px;
537
- background-color: var(--emfe-w-color-footer-bg, var(--emfe-w-color-background-secondary, #212529));
538
- color: var(--emfe-w-color-white, #FFFFFF);
539
- flex-direction: column;
540
- align-items: center;
541
- justify-content: center;
542
- &.NoSponsorSpacing {
543
- padding-top: 30px;
544
- }
545
- .GridRow {
546
- display: flex;
547
- flex-flow: row wrap;
548
- width: 100%;
549
- padding: 20px 0;
550
- align-items: flex-start;
551
- justify-content: center;
552
- &:first-child {
553
- padding-top: 0;
554
- }
555
- &:not(:last-child) {
556
- border-bottom: 1px solid rgba(255, 255, 255, .1);
557
- }
558
- &.LicenseRow{
559
- border-bottom: 0;
560
- }
561
- &.SplitRow {
562
- .GridCol:first-child {
563
- flex-basis: 50%;
564
- }
565
- .GridCol:nth-child(2) {
566
- flex-basis: calc(50% - 1px);
567
- border-left: 1px solid rgba(255, 255, 255, .1);
568
- }
569
- }
570
- &.ProvisionalRow {
571
- padding-top: 12px;
572
- justify-content: space-between;
573
- align-items: center;
574
- }
575
- .GridCol {
576
- width: 100%;
577
- flex:1;
578
- p {
579
- text-align: center;
580
- &.FooterTitle {
581
- font-size: 12px;
582
- font-weight: 700;
583
- }
584
- }
585
- .PaymentsTitle, .VendorsTitle {
586
- margin: 0 auto 20px;
587
- font-size: 10px;
588
- font-weight: 700;
589
- }
590
- }
591
- }
592
- .DetailedLicenses {
593
- margin: 30px 50px 20px;
594
- font-size: 10px;
595
- text-align: center;
596
- color: var(--emfe-w-color-gray-150, #828282);
597
- }
598
- .CopyrightAreaRights {
599
- margin-top: 10px;
600
- }
601
- .CopyrightTextArea p, .CopyrightArea p {
602
- margin: 0;
603
- color: var(--emfe-w-color-gray-150, #828282);
604
- font-size: 9px;
605
- }
606
- }
607
- @media only screen and (max-width: 768px) {
608
- .FooterGrid {
609
- padding: 5px 20px;
610
- .FooterTitle {
611
- margin-top: 0;
612
- }
613
- .GridRow {
614
- padding: 0;
615
- &:not(:last-child) {
616
- border-bottom: 0;
617
-
618
- &.ProvisionalRow {
619
- padding-top: 12px;
620
- justify-content: space-between;
621
-
622
- flex-direction: column;
623
- align-items: center;
624
- gap: 1rem;
625
- }
626
- }
627
- &:last-child {
628
- .GridCol:last-child {
629
- border-bottom: 0;
630
- }
631
- }
632
- &.SplitRow {
633
- .GridCol:first-child, .GridCol:nth-child(2) {
634
- flex-basis: unset;
635
- }
636
- .GridCol:nth-child(2) {
637
- border-left: none;
638
- }
639
- }
640
- .GridCol {
641
- border-bottom: 1px solid rgba(255, 255, 255, .1);
642
- padding: 15px 0;
643
- #DetailedLicenses {
644
- margin: 10px auto 25px;
645
- }
646
- .PaymentsTitle, .VendorsTitle {
647
- margin: 10px auto;
648
- }
649
- }
650
- }
651
- }
652
- }
653
-
654
- .ClockContainer {
655
- color: var(--emfe-w-color-gray-150, #c3c3c3);
656
- }
657
-
658
- .SessionText {
659
- color: var(--emfe-w-color-gray-150, #c3c3c3);
660
- }
661
-
662
- .ItemLanguage {
663
- display: none;
664
- }
665
-
666
- #languageList {
667
- padding: 0;
668
- margin: 0;
669
- }
670
-
671
- .languageSelectorOverlay {
672
- position: relative;
673
- }
674
-
675
- .drawerButton {
676
- height: 30px;
677
- width: 150px;
678
- background: #212529;
679
- color: inherit;
680
- border: none;
681
- padding: 0;
682
- font: inherit;
683
- cursor: pointer;
684
- outline: inherit;
685
-
686
- display: flex;
687
- justify-content: space-evenly;
688
- align-items: center;
689
-
690
- border-radius: 0px;
691
- border: 0;
692
- }
693
-
694
- .languageDrawer {
695
- position:absolute;
696
- background: #363e46;
697
- width: 150px;
698
- top: 30px;
699
- padding: 6px 0;
700
-
701
- &.hidden {
702
- display: none;
703
- }
704
- }
705
-
706
- .languageFlag {
707
- margin-right: 8px;
708
- background: white;
709
- border-radius: 50%;
710
- width: 14px;
711
- height: 14px;
712
- }
713
-
714
- .downwardChevron {
715
- margin-left: 8px;
716
- margin-top: 4px;
717
- width: 8px;
718
- height: auto;
719
- }
720
-
721
- .overlayLanguageOption {
722
- list-style: none;
723
- width: 24px;
724
- position: relative;
725
- padding: 0;
726
- justify-content: center;
727
-
728
- img {
729
- position: absolute;
730
- z-index: 0;
731
- cursor: pointer;
732
- top: 6px;
733
- left: 12px;
734
- }
735
-
736
- a {
737
- text-decoration: none;
738
- color: #fff;
739
- display: inline-block;
740
-
741
- width: 150px;
742
-
743
- span {
744
- width: 100%;
745
- display: flex;
746
- justify-content: center;
747
- margin: 4px 0;
748
- }
749
- }
750
- }
751
-
752
- </style>