@everymatrix/casino-game-thumbnail 1.0.16 → 1.0.69

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,1417 +0,0 @@
1
- <svelte:options tag={null} />
2
-
3
- <script lang="ts">
4
- import moment from 'moment';
5
- import { onMount, tick } from "svelte";
6
- import { isMobile, getDevice } from 'rvhelper';
7
- import { _, addNewMessages} from './i18n';
8
- import { GameThumbnailTranslations } from './translations';
9
- import { currenciesSymbols } from './currency-symbols';
10
-
11
- export let session:string = '';
12
- export let userid:string = '';
13
- export let lang:string = '';
14
- export let clientstyling:string = ''
15
- export let clientstylingurl:string = '';
16
- export let translationUrl:string = '';
17
-
18
- export let favorites:string = '';
19
- export let gamethumbnail:string = '';
20
- export let gamename:string = '';
21
- export let gamevendor:string = '';
22
- export let gameid:string = '';
23
- export let gameisnew:string = '';
24
- export let gamepopularity:string = '';
25
- export let gamefunmode:boolean = false;
26
- export let searchitem:boolean = false;
27
- export let gamefavorite:boolean = false;
28
- export let gamecellsize = '';
29
- export let showfavoredcategory:boolean = false;
30
- export let showgamename:boolean = false;
31
- export let currency:string = '';
32
- export let gamepagemodalurl:string = 'false';
33
-
34
- export let endpoint:string = '';
35
-
36
- export let livelobbyendpoint:string = '';
37
- export let connectlive:string = '';
38
- export let visibilityconnect:string = '';
39
- export let integratedgameframedesktop:string = 'false';
40
- export let integratedgameframemobile:string = 'false';
41
-
42
- let isLoggedIn:boolean = false;
43
- let sessionID:string;
44
- let playerID:string;
45
-
46
- let fav:boolean = false;
47
- let hover:Boolean = false;
48
- let loaded:boolean = false
49
- let image:any;
50
- let userAgent:any = window.navigator.userAgent;
51
- let customStylingContainer:HTMLElement;
52
-
53
- let livegamedata:any;
54
- let liveLobbyConnection:EventSource;
55
- let displaytype:string;
56
- let starttime:any;
57
- let timeformat = 'HH:mm';
58
- let isopen:Boolean;
59
- let betlimit:any = {};
60
- let openhours:any;
61
- let seats:any = [];
62
- let currencySymbol:any='EUR';
63
- let min:any;
64
- let max:any;
65
- let totalseats:any;
66
- let currentoccupiedseats:any;
67
- let currentroulettenumbers:any;
68
- let currentdoubleballroulettenumbers:any;
69
- let vendorcategory:any;
70
- let isdouble:any;
71
- let roulleteresults:any;
72
- let roulettecontainerclassname:any;
73
- let colorsourcearray:any;
74
- let istablefull:boolean;
75
- let oldistablefull:boolean;
76
- let extraclassname:string='';
77
- let roulletteref:any;
78
- let dealername:string;
79
- let numberofplayers:number;
80
-
81
-
82
- const BLACKJACK = 'blackjack';
83
- const ROULETTE = 'roulette';
84
- const DOUBLE_ROULETTE = 'doubleballroulette';
85
- const DEFAULT_BLACKJACK_TOTAL_SEATS = 7;
86
- const blackjackcategory = [BLACKJACK];
87
- const roulettecategory = [ROULETTE, DOUBLE_ROULETTE];
88
- const DEFAULT_AMOUNT_SEPARATOR = ',';
89
- const numberofdisplayedresults = 5;
90
- export const MONEY_WHEEL_COLOR_MAP = {
91
- '01': 'Yellow',
92
- '02': 'Blue',
93
- 10: 'Green',
94
- 40: 'Red',
95
- '05': 'Purple',
96
- 20: 'Orange',
97
- X7: 'Gold',
98
- X2: 'Gold',
99
- };
100
- export const ROULETTE_COLOR_MAP = {
101
- 1: 'Red',
102
- 3: 'Red',
103
- 5: 'Red',
104
- 7: 'Red',
105
- 9: 'Red',
106
- 12: 'Red',
107
- 14: 'Red',
108
- 16: 'Red',
109
- 18: 'Red',
110
- 19: 'Red',
111
- 21: 'Red',
112
- 23: 'Red',
113
- 25: 'Red',
114
- 27: 'Red',
115
- 30: 'Red',
116
- 32: 'Red',
117
- 34: 'Red',
118
- 36: 'Red',
119
- 2: 'Black',
120
- 4: 'Black',
121
- 6: 'Black',
122
- 8: 'Black',
123
- 10: 'Black',
124
- 11: 'Black',
125
- 13: 'Black',
126
- 15: 'Black',
127
- 17: 'Black',
128
- 20: 'Black',
129
- 22: 'Black',
130
- 24: 'Black',
131
- 26: 'Black',
132
- 28: 'Black',
133
- 29: 'Black',
134
- 31: 'Black',
135
- 33: 'Black',
136
- 35: 'Black',
137
- 0: 'Green',
138
- '00': 'Green',
139
- };
140
-
141
- const setTranslationUrl = ():void => {
142
- let url:string = translationUrl;
143
-
144
- fetch(url).then((res:any) => res.json())
145
- .then((res) => {
146
- Object.keys(res).forEach((item:any):void => {
147
- addNewMessages(item, res[item]);
148
- });
149
- }).catch((err:any) => {
150
- console.log(err);
151
- });
152
- }
153
-
154
- Object.keys(GameThumbnailTranslations).forEach((item:any):void => {
155
- addNewMessages(item, GameThumbnailTranslations[item]);
156
- });
157
-
158
- const enter = () => {
159
- hover = true;
160
- }
161
- const leave = () => {
162
- hover = false;
163
- }
164
-
165
- const messageHandler = (e:any):void => {
166
- if (e.data.type === `AddFavoriteThumbnail_${gameid}` && !showfavoredcategory) {
167
- gamefavorite = true;
168
- }
169
-
170
- if (e.data.type === `RemoveFavoriteThumbnail_${gameid}` && !showfavoredcategory) {
171
- gamefavorite = false;
172
- }
173
-
174
- if (e.data.type === 'UserSessionID') {
175
- isLoggedIn = true;
176
- sessionID = e.data.session;
177
- playerID = e.data.userID;
178
- }
179
-
180
- if(e.data.type === 'CategoryUpdate') {
181
- livegamedata = null;
182
- }
183
- }
184
-
185
- const toggleGameFrame = (gameId:any):void => {
186
- if (searchitem) {
187
- window.postMessage({ type: 'SearchedItemClicked', gameId }, window.location.href);
188
-
189
- //Analytics event -- if game was searched
190
- if(typeof gtag == 'function'){
191
- gtag('event', 'OpenGame', {
192
- 'context' : 'GameThumbnail--Searched',
193
- 'gameId' : `${gameId}`,
194
- 'userId' : `${playerID ? playerID : 'Not logged in'}`
195
- });
196
- }
197
- } else {
198
- //Analytics event
199
- if(typeof gtag == 'function'){
200
- gtag('event', 'OpenGame', {
201
- 'context': 'GameThumbnail',
202
- 'gameId' : `${gameId}`,
203
- 'userId' : `${playerID ? playerID : 'Not logged in'}`
204
- });
205
- }
206
- }
207
-
208
- if (isMobile(userAgent) && integratedgameframemobile == "true") {
209
- window.postMessage({ type: 'OpenGameFrame', gameId, gamefunmode, gamepagemodalurl, isMobile: isMobile(userAgent), source: 'GameThumbnail' }, window.location.href);
210
- } else if(isMobile(userAgent) && integratedgameframemobile == "false") {
211
- window.postMessage({ type: 'ShowGameModal', gameId, isMobile: isMobile(userAgent) }, window.location.href);
212
- }
213
-
214
- if (!isMobile(userAgent) && integratedgameframedesktop == "true") {
215
- window.postMessage({ type: 'OpenGameFrame', gameId, gamefunmode, gamepagemodalurl, isMobile: isMobile(userAgent) }, window.location.href)
216
- } else if(!isMobile(userAgent) && integratedgameframedesktop == "false") {
217
- window.postMessage({ type: 'ShowGameModal', gameId, isMobile: isMobile(userAgent) }, window.location.href);
218
- }
219
- };
220
-
221
-
222
- const toggleFavoriteGame = (id:any):void => {
223
- let triggerFactor = "thumbnail";
224
-
225
- if (gamefavorite) {
226
- window.postMessage({ type: 'SetUnfavoredGame', id, triggerFactor }, window.location.href);
227
- } else {
228
- window.postMessage({ type: 'SetFavoredGame', id, triggerFactor }, window.location.href);
229
- }
230
- }
231
-
232
- const gameTouch = ():void => {
233
- window.postMessage({ type: 'GameHoveredMobile' }, window.location.href);
234
- }
235
-
236
- const gameTouchEnd = ():void => {
237
- window.postMessage({ type: 'GameBlurMobile' }, window.location.href);
238
- }
239
-
240
- const gameHover = ():void => {
241
- window.postMessage({ type: 'GameHoveredPc' }, window.location.href);
242
- }
243
-
244
- const gameBlur = ():void => {
245
- window.postMessage({ type: 'GameBlurPc' }, window.location.href);
246
- }
247
-
248
- const setActiveLanguage = ():void => {
249
- // Not needed yet
250
- // setLocale(lang);
251
- }
252
-
253
- const setSession = ():void => {
254
- isLoggedIn = true;
255
- sessionID = session;
256
- playerID = userid;
257
- }
258
-
259
- const setOnLoad = ():void => {
260
- if (image) {
261
- image.onload = () => {
262
- loaded = true;
263
- }
264
- }
265
- }
266
-
267
- const getLiveLobbyURL = (vendorName, id) => {
268
- return `${endpoint}/encoder/lobby/updates/${vendorName}/${id}`;
269
- }
270
- const connectGameToLiveLobby = () => {
271
- if (livelobbyendpoint && EventSource && !liveLobbyConnection) {
272
- if (gamevendor && gameid) {
273
- liveLobbyConnection = new EventSource(getLiveLobbyURL(gamevendor, gameid)),
274
- liveLobbyConnection.addEventListener('message', liveLobbyMessageHandler);
275
- }
276
- }
277
- }
278
- const disconnectGameFromLiveLobby = () => {
279
- if (liveLobbyConnection) {
280
- liveLobbyConnection.close();
281
- liveLobbyConnection = undefined;
282
- }
283
- }
284
-
285
- const setFavorites = ():void => {
286
- if (favorites == 'true') {
287
- fav = true;
288
- }
289
- }
290
-
291
- const liveLobbyMessageHandler = async (event) => {
292
- const { type, data: rawData } = event;
293
- let data;
294
- switch (type) {
295
- case 'message': {
296
- if (rawData) {
297
- try {
298
- data = JSON.parse(rawData);
299
- } catch (err) {
300
- // eslint-disable-next-line no-console
301
- console.error('MESSAGE PARSING ERROR: ', err);
302
- }
303
- }
304
- if (data) {
305
- const {
306
- InternalTableId,
307
- MessageType,
308
- // TakenSeats,
309
- Results,
310
- // Roads, // for baccarat
311
- Seats,
312
- Open,
313
- } = data;
314
- if (InternalTableId) {
315
- switch (MessageType) {
316
- case 'SeatsUpdated': {
317
- if (Seats && Array.isArray(Seats)) {
318
- currentoccupiedseats = Seats;
319
- livegamedata.currentOccupiedSeats = Seats;
320
- await tick();
321
- }
322
- break;
323
- }
324
- case 'RouletteResultsUpdated': {
325
- if (Results && Array.isArray(Results)) {
326
- currentroulettenumbers = Results;
327
- livegamedata.currentRouletteNumbers = Results;
328
- await tick();
329
- }
330
- break;
331
- }
332
- case 'DoubleBallRouletteResultsUpdated': {
333
- if (Results && Array.isArray(Results)) {
334
- currentdoubleballroulettenumbers = Results;
335
- livegamedata.currentDoubleBallRouletteNumbers = Results;
336
- await tick();
337
- }
338
- break;
339
- }
340
- case 'TableOpened': {
341
- isopen = Open;
342
- livegamedata.isOpen = Open;
343
- await tick();
344
- break;
345
- }
346
- case 'TableClosed': {
347
- isopen = Open;
348
- livegamedata.isOpen = Open;
349
- await tick();
350
- break;
351
- }
352
- default: {
353
- // default case
354
- }
355
- }
356
- }
357
- }
358
- }
359
- default: {
360
- // default case
361
- }
362
- }
363
- }
364
-
365
- const setLiveLobbyData = () => {
366
- let url:any = new URL(`${livelobbyendpoint.split('?')[0]}`);
367
- url.searchParams.append("platform", getDevice(userAgent));
368
- url.searchParams.append('language', lang);
369
- fetch(url)
370
- .then((res:any) => res.json())
371
- .then((data:any) => {
372
- const { details } = data[0];
373
- livegamedata = details;
374
- });
375
- }
376
- const numberWithSeparators = (value, sep = DEFAULT_AMOUNT_SEPARATOR) => {
377
- if (value !== undefined && value !== null) {
378
- return `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, sep);
379
- }
380
- return '';
381
- }
382
- const contains = (array, value) => {
383
- return array.some(item => item === value);
384
- }
385
- const getGameComponent = (livegamedata) => {
386
- let GameComponent = null;
387
- if (livegamedata) {
388
- const { vendorCategory } = livegamedata;
389
- if (vendorCategory) {
390
- const gameTypeToLower = vendorCategory.toLowerCase();
391
- if (contains(blackjackcategory, gameTypeToLower)) {
392
- GameComponent = BLACKJACK;
393
- } else if (contains(roulettecategory, gameTypeToLower)) {
394
- GameComponent = ROULETTE;
395
- }
396
- // else if (contains(baccaratCategory, gameTypeToLower)) {
397
- // GameComponent = 'baccarat';
398
- // } else if (contains(otherLiveGamesCategory, gameTypeToLower)) {
399
- // GameComponent = 'poker';
400
- // }
401
- }
402
- }
403
- return GameComponent;
404
- };
405
- const renderBetLimits = (min, max, currencySymbol) => {
406
- let rightSideContent;
407
- let leftSideContent;
408
- if (min !== undefined && min !== null && max !== undefined && max !== null) {
409
- leftSideContent = `
410
- <span>
411
- ${currencySymbol}
412
- </span>
413
- ${
414
- numberWithSeparators(min)
415
- }-${
416
- numberWithSeparators(max)
417
- }`;
418
- }
419
- if (numberofplayers) {
420
- rightSideContent = `
421
- <svg fill="white" width="13" height="13" viewBox="0 0 13 14" xmlns="http://www.w3.org/2000/svg"><path d="M4 8.2a4.6 4.6 0 0 0 5 0c2.7.8 4 2.6 4 4.8H0c0-2.2 1.3-4 4-4.8zM6.6 8c2 0 3.8-1.7 3.8-4 0-2.1-1.7-4-3.8-4a3.9 3.9 0 0 0-3.8 4c0 2.2 1.7 4 3.8 4z"/></svg>
422
- <span class="NrOfPlayers">${numberofplayers}</span>`;
423
- }
424
- if (!rightSideContent && !leftSideContent) {
425
- return '';
426
- }
427
- return `
428
- <p class="LiveLimits">
429
- <span class="BetLimitLeft">
430
- ${leftSideContent || ''}
431
- </span>
432
- <span class="BetLimitRight">
433
- ${rightSideContent || ''}
434
- </span>
435
- </p>`;
436
- }
437
- const renderDealerName = (dealername) => {
438
- if (!dealername) {
439
- return '';
440
- }
441
- return `
442
- <p class="LiveLimits">
443
- <span class="DealerName">${$_('gameThumbnail.dealer')}: ${dealername}</span>
444
- </p>
445
- `;
446
- }
447
- const createDisplayData = (livegamedata) => {
448
- totalseats = livegamedata.totalSeats || DEFAULT_BLACKJACK_TOTAL_SEATS;
449
- currentoccupiedseats = livegamedata.currentOccupiedSeats || [];
450
- const seats = [];
451
- for (let i = 1; i <= totalseats; i++) {
452
- seats.push(i);
453
- }
454
- return { seats };
455
- }
456
- const renderSpan = (selectedClass, key, value, colorClass = '') => {
457
- const rouletteItemClassname = `${selectedClass} ${colorClass}`;
458
- const firstMatch = key.toString().match(/first0|second0|0/g);
459
- if (key === 0 || (firstMatch && firstMatch.length !== 0)) {
460
- return `
461
- <span
462
- id=${key}
463
- class="${rouletteItemClassname}"
464
- >
465
- ${value}
466
- </span>
467
- `;
468
- }
469
- return `
470
- <span id=${key} class="${rouletteItemClassname}">
471
- ${value}
472
- </span>
473
- `;
474
- }
475
-
476
- const attachAnimations = () => {
477
- const animatedClassName = 'FirstElementAnimated';
478
- const firstElem = roulletteref.getElementsByClassName('First')[0];
479
- if (firstElem) {
480
- firstElem.classList.add(animatedClassName);
481
- setTimeout(() => {
482
- firstElem.classList.remove(animatedClassName);
483
- }, 2000);
484
- }
485
- }
486
- const updateComponent = () => {
487
- if (livegamedata) {
488
- isopen = livegamedata.isOpen;
489
- betlimit = livegamedata.betLimit || {};
490
- openhours = livegamedata.openHours;
491
- seats = createDisplayData(livegamedata).seats;
492
- if (openhours && openhours.value) {
493
- const { value: { startTime: starttimeRaw /* , timeFormat: timeFormatRaw */, originalTimeFormat } } = openhours;
494
- starttime = starttimeRaw;
495
- timeformat = originalTimeFormat || timeformat;
496
- }
497
- if (isopen) {
498
- displaytype = getGameComponent(livegamedata);
499
- }
500
- currencySymbol = currenciesSymbols[currency];
501
- min = (betlimit.min || {})[currency];
502
- max = (betlimit.max || {})[currency];
503
- currentroulettenumbers = livegamedata.currentRouletteNumbers;
504
- currentdoubleballroulettenumbers = livegamedata.currentDoubleBallRouletteNumbers;
505
- vendorcategory = livegamedata.vendorCategory;
506
- isdouble = vendorcategory.toLowerCase() === DOUBLE_ROULETTE;
507
- roulleteresults = (isdouble ? currentdoubleballroulettenumbers : currentroulettenumbers) || [];
508
- roulettecontainerclassname = 'GameProp LiveProps RoulleteProps';
509
- roulettecontainerclassname += isdouble ? ' Double' : '';
510
- colorsourcearray = contains(roulettecategory, vendorcategory.toLowerCase()) ? ROULETTE_COLOR_MAP : MONEY_WHEEL_COLOR_MAP;
511
- oldistablefull = istablefull;
512
- istablefull = Array.isArray(currentoccupiedseats) && currentoccupiedseats.length === totalseats;
513
- if (livegamedata.dealer) {
514
- dealername = livegamedata.dealer.DealerName;
515
- }
516
- numberofplayers = livegamedata.numberOfPlayers;
517
- extraclassname = 'ListGame';
518
- if(livegamedata.isOpen && livegamedata.currentRouletteNumbers) {
519
- extraclassname += ' GameBackdrop';
520
- }
521
- if (isopen && istablefull && min && max && livegamedata.currentOccupiedSeats) {
522
- extraclassname += ' GameContainerDimmed';
523
- } else {
524
- if (isopen === false && starttime) {
525
- extraclassname += ' GameContainerFullyDimmed';
526
- }
527
- }
528
- if (customStylingContainer) {
529
- if (!oldistablefull && istablefull) {
530
- extraclassname += ' PulsatingRedShadow';
531
- extraclassname = extraclassname.replace(' PulsatingGreenShadow', '');
532
- } else if (oldistablefull && !istablefull) {
533
- extraclassname += ' PulsatingGreenShadow';
534
- extraclassname = extraclassname.replace(' PulsatingRedShadow', '');
535
- }
536
- }
537
- }
538
- }
539
- const toggleConnect = ():void => {
540
- if (connectlive === 'disconnect') {
541
- disconnectGameFromLiveLobby();
542
- } else if (connectlive === 'connect') {
543
- connectGameToLiveLobby();
544
- }
545
- }
546
- const toggleVisibilityConnect = ():void => {
547
- if (visibilityconnect === 'disconnect') {
548
- disconnectGameFromLiveLobby();
549
- } else if (visibilityconnect === 'connect' && connectlive === 'connect') {
550
- connectGameToLiveLobby();
551
- }
552
- }
553
-
554
- const setClientStyling = ():void => {
555
- let sheet = document.createElement('style');
556
- sheet.innerHTML = clientstyling;
557
- customStylingContainer.appendChild(sheet);
558
- }
559
-
560
- const setClientStylingURL = ():void => {
561
- let url:URL = new URL(clientstylingurl);
562
- let cssFile:HTMLElement = document.createElement('style');
563
-
564
- fetch(url.href)
565
- .then((res:any) => res.text())
566
- .then((data:any) => {
567
- cssFile.innerHTML = data
568
-
569
- setTimeout(() => { customStylingContainer.appendChild(cssFile) }, 1);
570
- });
571
- }
572
-
573
- onMount(() => {
574
- window.addEventListener('message', messageHandler, false);
575
-
576
- return () => {
577
- window.removeEventListener('message', messageHandler);
578
- if (liveLobbyConnection) {
579
- liveLobbyConnection.removeEventListener('message', liveLobbyMessageHandler);
580
- }
581
- }
582
- });
583
-
584
- $: connectlive && toggleConnect();
585
- $: visibilityconnect && toggleVisibilityConnect();
586
- $: lang && setActiveLanguage();
587
- $: session && userid && endpoint && setSession();
588
- $: gamethumbnail && setOnLoad();
589
- $: clientstyling && customStylingContainer && setClientStyling();
590
- $: clientstylingurl && customStylingContainer && setClientStylingURL();
591
- $: favorites && setFavorites();
592
- $: translationUrl && setTranslationUrl();
593
- $: gamecellsize && clientstylingurl && setClientStylingURL();
594
- $: endpoint && livelobbyendpoint && setLiveLobbyData();
595
- $: livegamedata && updateComponent();
596
- $: roulletteref && roulleteresults && attachAnimations();
597
- </script>
598
-
599
- <div class={`GameContainer ${extraclassname}`} part={`GameContainer ${extraclassname}`} bind:this={customStylingContainer}>
600
- <div class="GameInnerContainer { (livegamedata && !isopen && openhours.value) || (livegamedata && istablefull) ? 'GameInnerContainerUnavailable' : ''}" part="GameInnerContainer { (livegamedata && !isopen) || (livegamedata && istablefull) ? 'GameInnerContainerUnavailable' : ''}" on:mouseenter={gameHover} on:mouseleave={gameBlur} on:touchstart={gameTouch} on:touchend={gameTouchEnd}>
601
- <img src={gamethumbnail} class={`GameBg GameBg-${gamecellsize} ${hover ? 'GameContainerHovered' : ''} ${loaded ? 'Loaded' : ''}`} part="GameBg {hover ? 'GameContainerHovered' : ''} {loaded ? 'Loaded' : ''}" alt="" bind:this={image} loading="lazy" />
602
- <div class="GameInfoWrapper" part="GameInfoWrapper">
603
- <div class="GameInfo {hover ? 'GameHovered' : ''}" part="GameInfo {hover ? 'GameHovered' : ''}">
604
- {#if fav}
605
- {#if !isMobile(userAgent) && !gamefavorite && isLoggedIn}
606
- <div class="FavIconContainer" part="FavIconContainer" on:click="{() => toggleFavoriteGame(gameid)}">
607
- <svg version="1.1" class="UnfavoredIcon" part="UnfavoredIcon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="20px" y="20px"
608
- viewBox="0 0 512.001 512.001" style="enable-background:new 0 0 512.001 512.001;" xml:space="preserve"><path style="fill: white" d="M511.266,197.256c-1.764-5.431-6.458-9.388-12.108-10.209l-158.722-23.065L269.452,20.155
609
- c-2.527-5.12-7.741-8.361-13.451-8.361c-5.709,0-10.924,3.242-13.451,8.361l-70.988,143.828L12.843,187.047
610
- c-5.65,0.821-10.344,4.779-12.108,10.209c-1.765,5.43-0.293,11.391,3.795,15.376l114.848,111.955L92.27,482.67
611
- c-0.965,5.627,1.349,11.315,5.968,14.67c4.618,3.355,10.74,3.798,15.797,1.142L256,423.846l141.961,74.637
612
- c2.195,1.154,4.591,1.723,6.979,1.723c3.11,0,6.206-0.966,8.818-2.865c4.619-3.356,6.933-9.043,5.968-14.671L392.61,324.587
613
- l114.86-111.954C511.559,208.647,513.031,202.686,511.266,197.256z M366.023,308.608c-3.536,3.446-5.15,8.412-4.314,13.278
614
- l23.311,135.898l-122.038-64.162c-4.37-2.297-9.591-2.297-13.961,0l-122.045,64.163l23.304-135.9
615
- c0.834-4.866-0.779-9.83-4.313-13.276l-98.731-96.244l136.445-19.829c4.886-0.71,9.108-3.778,11.294-8.205L256,60.685
616
- l61.023,123.645c2.186,4.427,6.408,7.496,11.294,8.206l136.447,19.828L366.023,308.608z"/></svg>
617
- </div>
618
- {/if}
619
- {/if}
620
- <p class="GameInfoName" part="GameInfoName" title="{gamename}">{gamename}</p>
621
- <button class="GameInfoBtn" part="GameInfoBtn" on:click="{() => toggleGameFrame(gameid)}">{$_('gameThumbnail.playNow')}</button>
622
- </div>
623
- <span class="GameInfoVendor" part="GameInfoVendor">
624
- { gamevendor ? gamevendor : '-'}
625
- </span>
626
- </div>
627
- {#if !isMobile(userAgent) && gamefavorite && isLoggedIn && favorites}
628
- <div class="FavIconContainer" part="FavIconContainer" on:click="{() => toggleFavoriteGame(gameid)}">
629
- <svg version="1.1" class="FavoredIcon" part="FavoredIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.481 19.481" xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 19.481 19.481">
630
- <path style="fill: white" d="m10.201,.758l2.478,5.865 6.344,.545c0.44,0.038 0.619,0.587 0.285,0.876l-4.812,4.169 1.442,6.202c0.1,0.431-0.367,0.77-0.745,0.541l-5.452-3.288-5.452,3.288c-0.379,0.228-0.845-0.111-0.745-0.541l1.442-6.202-4.813-4.17c-0.334-0.289-0.156-0.838 0.285-0.876l6.344-.545 2.478-5.864c0.172-0.408 0.749-0.408 0.921,0z"/>
631
- </svg>
632
- </div>
633
- {:else if isMobile(userAgent) && gamefavorite && isLoggedIn && favorites}
634
- <div class="FavIconContainer" part="FavIconContainer">
635
- <svg version="1.1" class="FavoredIcon" part="FavoredIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.481 19.481" xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 19.481 19.481">
636
- <path style="fill: white" d="m10.201,.758l2.478,5.865 6.344,.545c0.44,0.038 0.619,0.587 0.285,0.876l-4.812,4.169 1.442,6.202c0.1,0.431-0.367,0.77-0.745,0.541l-5.452-3.288-5.452,3.288c-0.379,0.228-0.845-0.111-0.745-0.541l1.442-6.202-4.813-4.17c-0.334-0.289-0.156-0.838 0.285-0.876l6.344-.545 2.478-5.864c0.172-0.408 0.749-0.408 0.921,0z"/>
637
- </svg>
638
- </div>
639
- {/if}
640
- <div class="GameExtraInfo" part="GameExtraInfo">
641
- {#if gameisnew}
642
- <span class="GameExtraInfoLabel NewGameTag" part="GameExtraInfoLabel NewGameTag">{$_('gameThumbnail.new')}</span>
643
- {/if}
644
- {#if (parseInt(gamepopularity) > 0)}
645
- <span class="GameExtraInfoLabel PopularGameTag" part="GameExtraInfoLabel PopularGameTag">{$_('gameThumbnail.hot')}</span>
646
- {/if}
647
- {#if livegamedata}
648
- {#if !isopen && starttime && timeformat}
649
- <div class="GameProp LiveProps" part="GameProp LiveProps">
650
- <div class="ClosedGame" part="ClosedGame">
651
- {$_('gameThumbnail.opens')}
652
- <span>
653
- {moment.utc(starttime).local().format(timeformat)}
654
- </span>
655
- </div>
656
- {@html renderDealerName(dealername)}
657
- {@html renderBetLimits(min, max, currencySymbol)}
658
- </div>
659
- {/if}
660
- {#if isopen && displaytype && displaytype === BLACKJACK}
661
- <div class="GameProp LiveProps BlackjackDisplay" part="GameProp LiveProps BlackjackDisplay">
662
- <div class="LiveIcons" part="LiveIcons">
663
- {#if istablefull}
664
- <span class="FullTable" part="FullTable">
665
- {$_('gameThumbnail.full')}
666
- </span>
667
- {:else}
668
- {#each seats as seatData}
669
- <span class={contains(currentoccupiedseats, seatData.toString()) ? 'ClosedSeat' : 'OpenSeat'} part={contains(currentoccupiedseats, seatData.toString()) ? 'ClosedSeat' : 'OpenSeat'}>
670
- <svg xmlns="http://www.w3.org/2000/svg" width="13" height="14" viewBox="0 0 13 14">
671
- <path d="M11.58 6c-1.17 0-2.13.95-2.13 2.12v.4a8.82 8.82 0 00-2.92-.4c-1.54 0-2.45.22-2.92.4v-.4A2.136 2.136 0 001.48 6a1.33 1.33 0 00-.5 2.55c.14.07.24.21.24.37l.26 1.06c0 .96.73 1.75 1.65 1.85a.65.65 0 00.28 1.23.65.65 0 00.3-1.22h5.64a.65.65 0 00.3 1.22.65.65 0 00.28-1.23c.93-.1 1.65-.9 1.65-1.85l.27-1.06c0-.16.1-.3.24-.37A1.33 1.33 0 0011.58 6z"/>
672
- <path d="M4.34 7.5c.55-.1 1.27-.17 2.2-.17.91 0 1.63.07 2.18.17.21-.96.9-1.74 1.8-2.1V4a3.99 3.99 0 00-7.97 0v1.4c.9.36 1.58 1.14 1.79 2.1z"/>
673
- </svg>
674
- </span>
675
- {/each}
676
- {/if}
677
- </div>
678
- {@html renderDealerName(dealername)}
679
- {@html renderBetLimits(min, max, currencySymbol)}
680
- </div>
681
- {:else if isopen && displaytype && displaytype === ROULETTE}
682
- <div class="{roulettecontainerclassname}" part="{roulettecontainerclassname}">
683
- <div class="LiveIcons" part="LiveIcons" bind:this={roulletteref}>
684
- {#each new Array(numberofdisplayedresults) as garbage, i}
685
- {#if roulleteresults && roulleteresults[i]}
686
- {#if isdouble}
687
- <div class="Double" part="Double">
688
- {@html renderSpan(`LatestResult ${i === 0 ? 'First' : ''}`, `first${i}${roulleteresults[i][0]}`, roulleteresults[i][0], colorsourcearray[roulleteresults[i][0]])}
689
- {@html renderSpan(`LatestResult ${i === 0 ? 'First' : ''}`, `second${i}${roulleteresults[i][1]}`, roulleteresults[i][1], colorsourcearray[roulleteresults[i][1]])}
690
- </div>
691
- {:else}
692
- {@html renderSpan(`LatestResult ${i === 0 ? 'First' : ''}`, i, roulleteresults[i], colorsourcearray[roulleteresults[i]])}
693
- {/if}
694
- {/if}
695
- {/each}
696
- </div>
697
- {@html renderDealerName(dealername)}
698
- {@html renderBetLimits(min, max, currencySymbol)}
699
- </div>
700
- {/if}
701
- {/if}
702
- </div>
703
- </div>
704
- {#if showgamename}
705
- <p class="GameNameBelow" part="GameNameBelow" title="{gamename}">{gamename}</p>
706
- {/if}
707
- </div>
708
-
709
-
710
- <style lang="scss">
711
-
712
- :host {
713
- font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
714
- }
715
-
716
- *, *::before, *::after {
717
- margin: 0;
718
- padding: 0;
719
- box-sizing: border-box;
720
- }
721
-
722
- .GameContainer {
723
- width: 100%;
724
- height: 100%;
725
- position: relative;
726
- }
727
-
728
- .GameInnerContainer {
729
- position: relative;
730
- width: 100%;
731
- height: 100%;
732
- overflow: hidden;
733
- border-radius: 5px;
734
- .GameBg {
735
- width: 100%;
736
- height: 100%;
737
- object-fit: unset;
738
- transition: all 150ms ease-in-out;
739
- &.GameBg-1x2,
740
- &.GameBg-2x1,
741
- &.GameBg-2x2 { object-fit: cover; }
742
- }
743
-
744
- .GameInfoWrapper {
745
- display: none;
746
- position: absolute;
747
- width: 100%;
748
- height: 100%;
749
- top: 0;
750
- right: 0;
751
- bottom: 0;
752
- left: 0;
753
- background: rgba(0, 0, 0, .65);
754
- z-index: 15;
755
-
756
- .GameInfo {
757
- display: flex;
758
- width: 100%;
759
- height: 100%;
760
- flex-direction: column;
761
- align-items: center;
762
- justify-content: center;
763
-
764
- &Name {
765
- color: white;
766
- margin-bottom: 10px;
767
- text-align: center;
768
- font-size: 14px;
769
- }
770
-
771
- &Btn {
772
- appearance: none;
773
- padding: 6px;
774
- background: var(--emfe-w-color-primary, #D0046C);
775
- color: var(--emfe-w-color-primary-50, #FBECF4);
776
- font-size: 16px;
777
- border: 2px solid var(--emfe-w-color-primary-600, #99034F);
778
- border-radius: 5px;
779
- cursor: pointer;
780
- transition: border 150ms ease-in-out;
781
-
782
- &:hover {
783
- border: 2px solid var(--emfe-w-color-primary-100, #F1BED9);
784
- }
785
- }
786
- }
787
-
788
- .GameInfoVendor {
789
- display: block;
790
- position: absolute;
791
- bottom: 8px;
792
- right: 8px;
793
- color: white;
794
- font-size: 12px;
795
- font-weight: normal;
796
- }
797
- }
798
-
799
- &:hover {
800
- cursor: pointer;
801
-
802
- .GameInfoWrapper{
803
- display: block;
804
- }
805
-
806
- .GameBg {
807
- filter: blur(5px) grayscale(1);
808
- }
809
- }
810
-
811
- .GameExtraInfo {
812
- display: block;
813
- position: absolute;
814
- width: 100%;
815
- height: 100%;
816
- top: 8px;
817
- left: 8px;
818
- z-index: 0;
819
- &Label {
820
- font-size: 11px;
821
- padding: 3px;
822
- background-color: var(--emfe-w-color-primary, #D0046C);
823
- color: var(--emfe-w-color-primary-50, #FBECF4);
824
- font-weight: bold;
825
- text-transform: uppercase;
826
- border-radius: 5px;
827
- }
828
- }
829
- }
830
-
831
- .GameNameBelow {
832
- color: var(--emfe-w-color-white, #FFFFFF);
833
- position: relative;
834
- bottom: -5px;
835
- text-align: center;
836
- white-space: nowrap;
837
- overflow: hidden;
838
- text-overflow: ellipsis;
839
- }
840
- .FavoredIcon, .UnfavoredIcon {
841
- width: 20px;
842
- height: 20px;
843
- }
844
- .FavIconContainer {
845
- position: absolute;
846
- top: 10px;
847
- right: 10px;
848
- cursor: pointer;
849
- z-index: 15;
850
- }
851
-
852
- // LIVE LOBBY DATA STYLING
853
- .GamesWrapper .ListGame:hover .GamePlayNowText {
854
- @media (min-width: 1100px) {
855
- z-index: 4;
856
- }
857
- }
858
- // dim the game that doesn't have open seats or table is full
859
- .ListGame:hover, .ListGame:active {
860
- .OpenSeat, .ClosedSeat, .LiveLimits, .LatestResult, .FullTable {
861
- opacity: .2;
862
- }
863
- }
864
- // fix for displaying live game thumbnails that don't have details without backdrop
865
- .ListGame.GameBackdrop {
866
- .GameInnerContainer {
867
- &::after {
868
- content: '';
869
- position: absolute;
870
- top: 0;
871
- right: 0;
872
- bottom: 0;
873
- left: 0;
874
- background: linear-gradient(0deg, rgba(0,0,0,1) 15%, rgba(0,0,0,0) 100%);
875
- }
876
- }
877
- }
878
-
879
- .ListGame .GameInnerContainer {
880
- z-index: 0;
881
-
882
- .GameBg {
883
- z-index: 5;
884
- }
885
-
886
- .GameExtraInfo {
887
- z-index: 10;
888
- }
889
- &::after {
890
- content: '';
891
- position: absolute;
892
- top: 0;
893
- right: 0;
894
- bottom: 0;
895
- left: 0;
896
- }
897
-
898
- &.GameInnerContainerUnavailable {
899
- &::after {
900
- content: '';
901
- position: absolute;
902
- top: 0;
903
- right: 0;
904
- bottom: 0;
905
- left: 0;
906
- background: rgba(0,0,0,0.9);
907
- }
908
- }
909
-
910
- .ListGame.GameContainerDimmed:before {
911
- display: block;
912
- content: ' ';
913
- width: 100%;
914
- height: 100%;
915
- position: absolute;
916
- top: 0;
917
- right: 0;
918
- bottom: 0;
919
- left: 0;
920
- z-index: 5;
921
- background: rgba(0,0,0, .4);
922
- color: var(--emfe-w-color-white, #FFFFFF);
923
- fill: var(--emfe-w-color-white, #FFFFFF);
924
- opacity: 1;
925
- border-radius: 4px;
926
- }
927
-
928
- .ListGame.GameContainerFullyDimmed:before {
929
- display: block;
930
- content: ' ';
931
- width: 100%;
932
- height: 100%;
933
- position: absolute;
934
- top: 0;
935
- right: 0;
936
- bottom: 0;
937
- left: 0;
938
- z-index: 5;
939
- background: rgba(0,0,0, .8);
940
- color: var(--emfe-w-color-white, #FFFFFF);
941
- fill: var(--emfe-w-color-white, #FFFFFF);
942
- opacity: 1;
943
- border-radius: 4px;
944
- }
945
-
946
- .LiveProps {
947
- display: flex;
948
- flex-direction: column;
949
- position: absolute;
950
- bottom: 8px;
951
- left: -8px;
952
- right: 0;
953
- width: 100%;
954
- padding: 0;
955
- background: linear-gradient(to top, rgba(0,0,0,.1) 0%, rgba(0,0,0,.2) 60%, rgba(0,0,0,.3) 80%, rgba(0,0,0,.99) 100%);
956
- color: var(--emfe-w-color-white, #FFFFFF);
957
- opacity: 1;
958
- font-size: 14px;
959
- }
960
-
961
- .ListGame:hover .LiveProps,
962
- .ListGameLink:hover .LiveProps {
963
- opacity: 0;
964
- }
965
- //--------------------------------------LIVE LOBBY ANIMATIONS------------------------------------------
966
- // Pulsating animations
967
- @keyframes red-pulse {
968
- 0% {
969
- box-shadow: 0 0 2px 0 rgba(red, 0.75);
970
- }
971
-
972
- 15% {
973
- box-shadow: 0 0 10px 2px rgba(red, 0.75);
974
- }
975
-
976
- 30% {
977
- box-shadow: 0 0 2px 0 rgba(red, 0.75);
978
- }
979
-
980
- 50% {
981
- box-shadow: 0 0 10px 2px rgba(red, 0.75);
982
- }
983
-
984
- 65% {
985
- box-shadow: 0 0 2px 0 rgba(red, 0.75);
986
- }
987
-
988
- 80% {
989
- box-shadow: 0 0 10px 2px rgba(red, 0.75);
990
- }
991
-
992
- 100% {
993
- box-shadow: 0 0 0 0 rgba(red, 0.75);
994
- }
995
- }
996
-
997
- @keyframes green-pulse {
998
- 0% {
999
- box-shadow: 0 0 2px 0 rgba(#56A80A, 0.75);
1000
- }
1001
-
1002
- 15% {
1003
- box-shadow: 0 0 10px 2px rgba(#56A80A, 0.75);
1004
- }
1005
-
1006
- 30% {
1007
- box-shadow: 0 0 2px 0 rgba(#56A80A, 0.75);
1008
- }
1009
-
1010
- 50% {
1011
- box-shadow: 0 0 10px 2px rgba(#56A80A, 0.75);
1012
- }
1013
-
1014
- 65% {
1015
- box-shadow: 0 0 2px 0 rgba(#56A80A, 0.75);
1016
- }
1017
-
1018
- 80% {
1019
- box-shadow: 0 0 10px 2px rgba(#56A80A, 0.75);
1020
- }
1021
-
1022
- 100% {
1023
- box-shadow: 0 0 0 0 rgba(#56A80A, 0.75);
1024
- }
1025
- }
1026
- // Flip animation
1027
- @keyframes flip-open {
1028
- 0% {
1029
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1030
- transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1031
- -webkit-transition-timing-function: ease-in;
1032
- transition-timing-function: ease-in;
1033
- opacity: 0;
1034
- }
1035
- 40% {
1036
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1037
- transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1038
- -webkit-transition-timing-function: ease-in;
1039
- transition-timing-function: ease-in;
1040
- }
1041
- 60% {
1042
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1043
- transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1044
- opacity: 1;
1045
- }
1046
- 80% {
1047
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1048
- transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1049
- }
1050
- 100% {
1051
- -webkit-transform: perspective(400px);
1052
- transform: perspective(400px);
1053
- }
1054
- }
1055
-
1056
- .silde-in-from-left {
1057
- -webkit-animation-name: silde-in-from-left;
1058
- animation-name: silde-in-from-left;
1059
- -webkit-animation-duration: 1s;
1060
- animation-duration: 1s;
1061
- -webkit-animation-fill-mode: both;
1062
- animation-fill-mode: both;
1063
- }
1064
- @-webkit-keyframes silde-in-from-left {
1065
- 0% {
1066
- -webkit-transform: translateX(-100%);
1067
- transform: translateX(-100%);
1068
- visibility: visible;
1069
- }
1070
- 100% {
1071
- -webkit-transform: translateX(0);
1072
- transform: translateX(0);
1073
- }
1074
- }
1075
- @keyframes silde-in-from-left {
1076
- 0% {
1077
- -webkit-transform: translateX(-100%);
1078
- transform: translateX(-100%);
1079
- visibility: visible;
1080
- }
1081
- 100% {
1082
- -webkit-transform: translateX(0);
1083
- transform: translateX(0);
1084
- }
1085
- }
1086
-
1087
- @keyframes flip-closed-seat {
1088
- 0% {
1089
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1090
- transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1091
- -webkit-transition-timing-function: ease-in;
1092
- transition-timing-function: ease-in;
1093
- opacity: 0;
1094
- }
1095
- 40% {
1096
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1097
- transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1098
- -webkit-transition-timing-function: ease-in;
1099
- transition-timing-function: ease-in;
1100
- }
1101
- 60% {
1102
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1103
- transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1104
- opacity: 1;
1105
- }
1106
- 80% {
1107
- -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1108
- transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1109
- }
1110
- 100% {
1111
- -webkit-transform: perspective(400px);
1112
- transform: perspective(400px);
1113
- }
1114
- }
1115
-
1116
- // .Page-LiveCasino .GamesListContainer,
1117
- // .Page-LiveCasino-Child .GamesListContainer,
1118
- // .Page-LiveCasino .OperatorSticky .GamesListContainer,
1119
- // .Page-LiveCasino .CasinoGames .GamesListContainer,
1120
- // .Page-Live-casinoSource .GamesListContainer,
1121
- // .Page-Live-casinoSource .GamesListContainer,
1122
- // .Page-Live-casinoSource .OperatorSticky .GamesListContainer,
1123
- // .Page-Live-casinoSource .CasinoGames .GamesListContainer {
1124
- // overflow: visible;
1125
- // }
1126
-
1127
- .ListGame.PulsatingGreenShadow, .ListGame.PulsatingRedShadow {
1128
- overflow: auto;
1129
- }
1130
-
1131
- .ListGame.PulsatingGreenShadow {
1132
- animation: green-pulse 2s linear;
1133
- }
1134
-
1135
- .ListGame.PulsatingRedShadow {
1136
- animation: red-pulse 2s linear;
1137
- }
1138
-
1139
- .LiveIcons {
1140
- position: relative;
1141
- display: flex;
1142
- padding: 0 16px;
1143
- // flex-wrap: wrap;
1144
- box-sizing: border-box;
1145
- flex-direction: row;
1146
- align-items: center;
1147
- justify-content: flex-start;
1148
- min-height: auto;
1149
- margin-bottom: 5px;
1150
- @media (min-width: 1100px) {
1151
- min-height: auto;
1152
- }
1153
-
1154
- &:first-child {
1155
- margin-left: 0;
1156
- }
1157
-
1158
- &:last-child {
1159
- margin-right: 0;
1160
- }
1161
-
1162
- &.Black, &.Red, &.Green {
1163
- color: var(--emfe-w-color-white, #FFFFFF);
1164
- border: 1px solid var(--emfe-w-color-white, #FFFFFF);
1165
- }
1166
-
1167
- .LatestResult {
1168
- min-width: 12px;
1169
- padding: 2px;
1170
- margin: 0 1px;
1171
- margin-right: 6px;
1172
- font-size: 14px;
1173
- text-align: center;
1174
- @media (min-width: 1100px) {
1175
- min-width: 12px;
1176
- font-size: 14px;
1177
- margin: 0 2px;
1178
- margin-right: 5px;
1179
- padding: 2px;
1180
- }
1181
-
1182
- &.FirstElementAnimated {
1183
- animation: flip-open 2s both;
1184
- -webkit-animation: flip-open 2s both;
1185
- -webkit-backface-visibility: visible;
1186
- backface-visibility: visible;
1187
- }
1188
-
1189
- &.First {
1190
- min-width: 24px;
1191
- &.Black, &.Red, &.Green {
1192
- color: var(--emfe-w-color-white, #FFFFFF);
1193
- border: 1px solid var(--emfe-w-color-white, #FFFFFF);
1194
- }
1195
- &.Black {
1196
- background: var(--emfe-w-color-black, #000000)
1197
- }
1198
- &.Red {
1199
- background: red;
1200
- }
1201
- &.Green {
1202
- background: #56A80A;
1203
- }
1204
- padding: 4px;
1205
- @media (min-width: 1100px) {
1206
- padding: 4px;
1207
- }
1208
- }
1209
- }
1210
-
1211
- .Double {
1212
- display: flex;
1213
- flex-direction: column;
1214
-
1215
- .LatestResult {
1216
- &:first-child {
1217
- margin-bottom: 10px;
1218
- }
1219
- }
1220
-
1221
- &:first-child {
1222
- .LatestResult {
1223
- margin-left: 0;
1224
- margin-bottom: 0;
1225
- }
1226
- }
1227
-
1228
- &:last-child {
1229
- .LatestResult {
1230
- margin-right: 0;
1231
- }
1232
- }
1233
- }
1234
-
1235
- .Black, .Red, .Green {
1236
- background-color: transparent;
1237
- }
1238
-
1239
- .Black {
1240
- color: var(--emfe-w-color-white, #FFFFFF);
1241
- }
1242
-
1243
- .Red {
1244
- color: red;
1245
- }
1246
-
1247
- .Green {
1248
- color: #56A80A;
1249
- }
1250
- }
1251
-
1252
- .Blue {
1253
- color: #4d90a7;
1254
- }
1255
-
1256
- .Red {
1257
- background-color: red;
1258
- }
1259
-
1260
- .Black {
1261
- background-color: var(--emfe-w-color-black, #000000);
1262
- }
1263
-
1264
- .Green {
1265
- background-color: #56A80A;
1266
- }
1267
-
1268
- .White {
1269
- background-color: var(--emfe-w-color-white, #FFFFFF);
1270
- }
1271
-
1272
- .Yellow {
1273
- background-color: #eeca3d;
1274
- }
1275
-
1276
- .Gold {
1277
- background-color: darken(#eeca3d, 30%);
1278
- }
1279
-
1280
- .Orange {
1281
- background-color: darken(#eeca3d, 40%);
1282
- }
1283
-
1284
- .Purple {
1285
- background-color: darken(#f0f, 40%);
1286
- }
1287
-
1288
- .Tie {
1289
- background-color: var(--emfe-w-color-white, #FFFFFF);
1290
- background-image: linear-gradient(135deg, var(--emfe-w-color-white, #FFFFFF) 25%, transparent 25%, transparent 50%, #212121 50%, var(--emfe-w-color-white, #FFFFFF) 75%, transparent 75%, var(--emfe-w-color-white, #FFFFFF));
1291
- }
1292
- .OpenSeat, .ClosedSeat {
1293
- display: inline-block;
1294
- width: 16px;
1295
- height: 16px;
1296
- margin-right: 4px;
1297
- @media (min-width: 768px) {
1298
- width: 16px;
1299
- height: 16px;
1300
- }
1301
- @media (min-width: 1100px) {
1302
- width: 16px;
1303
- height: 16px;
1304
- }
1305
- svg {
1306
- width: 100%;
1307
- height: 100%;
1308
- }
1309
- }
1310
- .OpenSeat {
1311
- animation: flip-closed-seat 2s both;
1312
- -webkit-animation: flip-closed-seat 2s both;
1313
- -webkit-backface-visibility: visible;
1314
- backface-visibility: visible;
1315
- }
1316
- .ClosedSeat {
1317
- animation: flip-open 2s both;
1318
- -webkit-animation: flip-open 2s both;
1319
- -webkit-backface-visibility: visible;
1320
- backface-visibility: visible;
1321
- }
1322
- .OpenSeat svg {
1323
- fill: transparent;
1324
- stroke: var(--emfe-w-color-white, #FFFFFF);
1325
- }
1326
- .ClosedSeat svg {
1327
- fill: var(--emfe-w-color-white, #FFFFFF);
1328
- }
1329
- .FullTable {
1330
- display: flex;
1331
- position: relative;
1332
- z-index: 10;
1333
- height: 20px;
1334
- padding: 1px 4px 1px 0;
1335
- align-items: center;
1336
- border-radius: 3px;
1337
- font-size: 12px;
1338
- white-space: normal;
1339
- text-transform: uppercase;
1340
- -webkit-animation-name: silde-in-from-left;
1341
- animation-name: silde-in-from-left;
1342
- -webkit-animation-duration: 1s;
1343
- animation-duration: 1s;
1344
- -webkit-animation-fill-mode: both;
1345
- animation-fill-mode: both;
1346
- svg {
1347
- width: 100%;
1348
- height: 100%;
1349
- fill: var(--emfe-w-color-white, #FFFFFF);
1350
- }
1351
- &.ClosedSeat {
1352
- margin-right: -3px;
1353
- }
1354
- }
1355
- .PlayersDisplay {
1356
- display: flex;
1357
- flex-direction: row;
1358
- flex-wrap: wrap;
1359
- align-items: center;
1360
- padding: 2px 10px;
1361
- background: linear-gradient(to bottom, rgba(33, 33, 33, .9) 0%, rgba(33, 33, 33, .1) 100%);
1362
- color: var(--emfe-w-color-white, #FFFFFF);
1363
- @media (min-width: 1100px) {
1364
- padding: 2px 16px;
1365
- }
1366
- .PlayersIcon {
1367
- width: 14px;
1368
- height: 14px;
1369
- margin-right: 4px;
1370
- //@media (min-width: 1100px) {
1371
- // width: 1.7rem;
1372
- // height: 1.7rem;
1373
- //}
1374
- svg {
1375
- fill: var(--emfe-w-color-white, #FFFFFF);
1376
- width: 100%;
1377
- height: 100%;
1378
- }
1379
- }
1380
- }
1381
- .ClosedGame {
1382
- opacity: 1;
1383
- z-index: 10;
1384
- padding: 8px 10px;
1385
- color: var(--emfe-w-color-white, #FFFFFF);
1386
- font-size: 18px;
1387
- @media (min-width: 1100px) {
1388
- padding: 8px 16px;
1389
- }
1390
- span {
1391
- font-size: 18px;
1392
- }
1393
- }
1394
- .LiveLimits {
1395
- opacity: 1;
1396
- display: flex;
1397
- flex-direction: row;
1398
- justify-content: space-between;
1399
- padding: 2px 20px 5px 20px;
1400
- background: var(--emfe-w-color-black, #000000);
1401
- color: var(--emfe-w-color-white, #FFFFFF);
1402
- font-weight: normal;
1403
- font-size: 12px;
1404
- @media (min-width: 1100px) {
1405
- padding: 2px 18px 5px 18px;
1406
- }
1407
- span {
1408
- font-size: 12px;
1409
- }
1410
- }
1411
- .Players {
1412
- display: inline-block;
1413
- width: 19px;
1414
- height: 19px;
1415
- }
1416
- }
1417
- </style>