@everymatrix/casino-tournaments-table 0.0.365 → 0.0.367

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,664 +1,664 @@
1
- <svelte:options tag={null} />
2
-
3
- <script lang="ts">
4
- import { onMount } from 'svelte';
5
- import { getDevice, isMobile } from 'rvhelper';
6
- import { _, addNewMessages } from './i18n';
7
- import { TournamentsTableTranslations } from './translations';
8
-
9
- import arrowUpSvg from './images/arrow-up.svg';
10
- import arrowDownSvg from './images/arrow-down.svg'
11
-
12
- export let sortable:Boolean = false;
13
- export let firstrow:Boolean = false;
14
- export let lang:String = 'en';
15
-
16
- let columns:any = [];
17
- let data:any = [];
18
- let sortColumn:any = null;
19
- let sortDirection:any = null;
20
- let column:any = null;
21
- let firstRowData:any = null;
22
- let showTable:Boolean = true;
23
- let userAgent = window.navigator.userAgent;
24
- let isUserPositionChanged:Boolean = false;
25
- let isUserPositionUp:Boolean = false;
26
- let firstRowChangeFlagTimer: any=null;
27
- let lastUserPosition:number;
28
- let tooltipColSpan:number;
29
-
30
- Object.keys(TournamentsTableTranslations).forEach((item) => {
31
- addNewMessages(item, TournamentsTableTranslations[item]);
32
- });
33
-
34
- const findTableRowDataByRank =(position: Number, data)=>{
35
- let rowData = data.find((row)=>{
36
- return row.Rank == position;
37
- })
38
- return rowData;
39
- }
40
- let rankChangeTime1,rankChangeTime2:any;
41
- const processUserRankChanged = (newUserPosion) =>{
42
- if(!lastUserPosition){
43
- lastUserPosition = newUserPosion;
44
- return;// first place bet, do not show change flag
45
- }
46
- isUserPositionChanged = lastUserPosition != newUserPosion;
47
- // when (position changed) or (position not changed but still in 2.5s)
48
- isUserPositionUp = lastUserPosition > newUserPosion;
49
- if(isUserPositionChanged){
50
- rankChangeTime1 = (new Date()).getTime(); //reset time1, make sure userrank change more than once during 5mins
51
- firstRowChangeFlagTimer = setTimeout(function (){
52
- rankChangeTime2 = (new Date()).getTime();
53
- let timeInterval = (rankChangeTime2 - rankChangeTime1)/1000;
54
- if(timeInterval > 4){
55
- isUserPositionChanged = false;
56
- }
57
- lastUserPosition = newUserPosion;
58
- }, 5000);
59
- }
60
- }
61
- const messageHandler = (e:any) => {
62
- if (e.data && e.data.type === 'CasinoTableData') {
63
- data = e.data.tableData;
64
- display = data;
65
- }
66
-
67
- if (e.data && e.data.type === 'CasinoTableColumns') {
68
- columns = e.data.tableColumns;
69
- tooltipColSpan = columns.length || 4;
70
- }
71
-
72
- // set view after current user row defined.
73
- if (e.data && e.data.type === 'CasinoTableCurrentUserData'){
74
- if(data){
75
- data.forEach(item => {
76
- if(item.userID == e.data.tableData.userID){
77
- item.isCurrentUser = true;
78
- //clear first row data when update
79
- if(!lastUserPosition){
80
- lastUserPosition = e.data.tableData.Rank;
81
- }
82
- if(firstRowData){
83
- processUserRankChanged( e.data.tableData.Rank);
84
- firstRowData = null;
85
- }else{
86
- processUserRankChanged( e.data.tableData.Rank);
87
- }
88
- }
89
- });
90
- display = data;
91
- }
92
- }
93
- if (firstrow) {
94
- if (e.data && e.data.type === 'CasinoTableFirstRowData') {
95
- let newFirstRowData:any = e.data.tableData;
96
- if(!firstRowData){
97
- firstRowData = e.data.tableData;
98
- lastUserPosition = firstRowData.Rank;
99
- return;
100
- }
101
- if(firstRowData && firstRowData.UserID == newFirstRowData.UserID){
102
- processUserRankChanged( newFirstRowData.Rank);
103
- firstRowData = e.data.tableData;
104
- }
105
-
106
- }
107
- }
108
- // CasinoTableDataUpdate
109
- if(e.data && e.data.type==='CasinoTableDataUpdate' && e.data.tableData){
110
- let tableUpdateData = e.data.tableData;
111
- //check data type before foreach
112
- if( !(data instanceof Array)){
113
- return;
114
- }
115
- data.forEach(function (row, idx){
116
- let updateRowByPosition = findTableRowDataByRank(row.Rank, tableUpdateData);
117
- if(!updateRowByPosition){
118
- return;
119
- }
120
- data[idx] = updateRowByPosition;
121
- });
122
- }
123
- }
124
-
125
- const sortBy = (column:any) => {
126
- const sameColumn = column === sortColumn;
127
- const currentlyAscending = sortDirection === "ASC";
128
- const unsetSort = sameColumn && !currentlyAscending;
129
-
130
- sortColumn = unsetSort ? null : column;
131
- sortDirection = unsetSort
132
- ? null
133
- : sameColumn && currentlyAscending
134
- ? "DESC"
135
- : "ASC";
136
- }
137
-
138
- const getComparator = (type:any, column:any) => {
139
- const key = column.toLowerCase();
140
-
141
- if (type === "string") {
142
- return (a, b) => a[key].localeCompare(b[key]);
143
- }
144
- if (type === "number") {
145
- return (a, b) => a[key] - b[key];
146
- }
147
- if (type === "object") {
148
- return (a, b) => a[key] - b[key];
149
- }
150
- }
151
-
152
- const formatDate = (value:any) => {
153
- return new Intl.DateTimeFormat("en-GB", {
154
- year: "numeric",
155
- month: "short",
156
- day: "numeric"
157
- }).format(value);
158
- }
159
-
160
- const sortData = () => {
161
- let items = [];
162
-
163
- if (data) {
164
- items = [...data];
165
- }
166
-
167
- if (!data.length) {
168
- return data;
169
- }
170
-
171
- const type:any = typeof data[0][sortColumn.toLowerCase()];
172
-
173
- items.sort(getComparator(type, sortColumn));
174
-
175
- return sortDirection === "ASC" ? items : items.reverse();
176
- }
177
-
178
- const collapseTable = () => {
179
- showTable = !showTable;
180
- }
181
-
182
- onMount(() => {
183
- window.addEventListener('message', messageHandler, false);
184
- return () => {
185
- window.removeEventListener('message', messageHandler);
186
- }
187
- });
188
-
189
- $: display = sortColumn && sortDirection ? sortData() : [...data];
190
- $: sort = column === sortColumn ? sortDirection : null;
191
- </script>
192
-
193
- {#if data.length > 0 || firstRowData}
194
- {#if isMobile(userAgent) == true}
195
- <div class="TableContent" part="TableContent">
196
- <div class="TableUser TableHeadRow" part="TableUser TableHeadRow">
197
- {#each columns as column}
198
- <div class="TableCell Table{column}" part="TableCell Table{column}">
199
- {#if sortable == 'true'}
200
- <button on:click={() => sortBy(column)} data-sort={sort}>
201
- {$_(`tournamentsTable.${column}`)}
202
- </button>
203
- {:else}
204
- <p data-sort={sort}>{$_(`tournamentsTable.${column}`)}</p>
205
- {/if}
206
- </div>
207
- {/each}
208
- </div>
209
- {#if firstrow == 'true' && firstRowData}
210
- <div class="TableUser CurrentUserRow {firstRowData.Unqualified ? 'UnqualifiedRow' : ''}" part="TableUser CurrentUserRow {firstRowData.Unqualified ? 'UnqualifiedRow' : ''}">
211
- <div class="TableCell TableRank {firstRowData.Prize? 'Qualified' : ''}" part="TableCell TableRank RankFirstRow {firstRowData.Prize? 'Qualified' : ''}">
212
- {firstRowData.Rank}
213
- </div>
214
- <div class="TableCell TablePlayer" part="TableCell TablePlayer">{firstRowData.Player}</div>
215
- <div class="TableCell TablePoints" part="TableCell TablePoints">{firstRowData.Points}</div>
216
- {#if firstRowData.Prize}
217
- <div class="TableCell TablePrize {!firstRowData.Unqualified? 'Qualified' : ''}" part="TableCell TablePrize {!firstRowData.Unqualified? 'Qualified' : ''}">{firstRowData.Prize}</div>
218
- {:else}
219
- <div class="TableCell TablePrize" part="TableCell TablePrize">-</div>
220
- {/if}
221
- </div>
222
- {#if firstRowData.Unqualified}
223
- <div class="TableUserTooltips" part="TableUserTooltips">
224
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
225
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
226
- </svg>
227
- <em part="TableUserTooltipsEm">{$_('tournamentsTable.UnqualifiedTips')}</em>
228
- </div>
229
- {/if}
230
- {/if}
231
- {#if showTable}
232
- {#each display as row}
233
- <div class="TableUser {row.isCurrentUser ? 'CurrentUserRow' : ''}" part="TableUser {row.isCurrentUser ? 'CurrentUserRow' : ''}">
234
- <div class="TableCell TableRank {row.Prize? 'Qualified' : ''}" part="TableCell Rank-{row.Rank} TableRank {row.Prize? 'Qualified' : ''}">{row.Rank}</div>
235
- <div class="TableCell TablePlayer" part="TableCell TablePlayer">{row.Player}</div>
236
- <div class="TableCell TablePoints" part="TableCell TablePoints">{row.Points.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</div>
237
- {#if row.Prize}
238
- <div class="TableCell TablePrize {!row.Unqualified? 'Qualified' : ''}" part="TableCell TablePrize {!row.Unqualified? 'Qualified' : ''}">{row.Prize}</div>
239
- {:else}
240
- <div class="TableCell TablePrize" part="TableCell TablePrize">-</div>
241
- {/if}
242
- </div>
243
- {#if row.isCurrentUser && row.Unqualified}
244
- <div class="TableUserTooltips {row.Unqualified ? 'UnqualifiedRow' : ''}" part="TableUserTooltips {row.Unqualified ? 'UnqualifiedRow' : ''}">
245
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
246
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
247
- </svg>
248
- <em part="TableUserTooltipsEm">{$_('tournamentsTable.UnqualifiedTips')}</em>
249
- </div>
250
- {/if}
251
- {/each}
252
- {/if}
253
- </div>
254
- {:else}
255
- <div class="TournamentsTable" part="TournamentsTable">
256
- <table class="LeftTable" part="LeftTable">
257
- <thead part="LeftTableThead">
258
- <tr part="LeftTableTr">
259
- {#each columns as column}
260
- <th part="LeftTableTh">
261
- {#if sortable == 'true'}
262
- <button on:click={() => sortBy(column)} data-sort={sort} part="LeftTableButton">
263
- {$_(`tournamentsTable.${column}`)}
264
- </button>
265
- {:else}
266
- <p data-sort={sort} part="LeftTableP">{$_(`tournamentsTable.${column}`)}</p>
267
- {/if}
268
- </th>
269
- {/each}
270
- </tr>
271
- </thead>
272
- <tbody part="LeftTableTbody">
273
- {#if firstrow == 'true' && firstRowData}
274
- <tr class="FirstRow {firstRowData.Unqualified ? 'UnqualifiedRow':''}" part="FirstRow {firstRowData.Unqualified ? 'UnqualifiedRow':''}">
275
- <td part="LeftTableTd RankFirstRow"><strong class="RankCol" part="RankCol"><em part="LeftTableTdEm">#{firstRowData.Rank}</em>
276
- <div class="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}" part="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}">
277
- <img src="{arrowUpSvg}" part="Rank_Arror_UP" class="svg Arrow Up {isUserPositionChanged && isUserPositionUp ? 'Show' : 'Hidden'}" />
278
- <img src="{arrowDownSvg}" part="Rank_Arror_Down" class="svg Arrow Down {isUserPositionChanged && !isUserPositionUp ? 'Show' : 'Hidden'}" />
279
- </div></strong>
280
- </td>
281
- <td part="LeftTableTd">{firstRowData.Player}</td>
282
- <td part="LeftTableTd">
283
- <div class="Flex" part="Flex">{firstRowData.Points}</div>
284
- </td>
285
- <td class="LeftTableTd {!firstRowData.Unqualified? 'Qualified' : ''}" part="LeftTableTd {!firstRowData.Unqualified? 'Qualified' : ''}">
286
- {#if firstRowData.Prize}
287
- {firstRowData.Prize}
288
- {:else}
289
- -
290
- {/if}
291
- </td>
292
- </tr>
293
- {#if firstRowData.Unqualified}
294
- <tr class="TooltipsRow" part="TooltipsRow">
295
- <td colspan="{tooltipColSpan}" part="LeftTableTd">
296
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
297
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
298
- </svg>
299
- {$_('tournamentsTable.UnqualifiedTips')}
300
- </td>
301
- </tr>
302
- {/if}
303
- {/if}
304
- {#if showTable}
305
- {#each display as row}
306
- <tr class="LeftTableTr {row.isCurrentUser ? 'FirstRow' : ''} {row.isCurrentUser && row.Unqualified? 'UnqualifiedRow': ''}" part="LeftTableTr {row.isCurrentUser ? 'FirstRow' : ''} {row.isCurrentUser && row.Unqualified? 'UnqualifiedRow': ''}">
307
- <td part="LeftTableTd Rank-{row.Rank}"><strong class="RankCol" part="RankCol"><em part="LeftTableTdEm">#{row.Rank}
308
- <div class="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}" part="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}">
309
- {#if row.isCurrentUser}
310
- <img src="{arrowUpSvg}" part="Rank_Arror_UP" class="svg Arrow Up {isUserPositionChanged && isUserPositionUp ? 'Show' : 'Hidden'}" />
311
- <img src="{arrowDownSvg}" part="Rank_Arror_Down" class="svg Arrow Down {isUserPositionChanged && !isUserPositionUp ? 'Show' : 'Hidden'}" />
312
- {/if}
313
- </div>
314
-
315
- </em></strong></td>
316
- <td part="LeftTableTd">{row.Player}</td>
317
- <td part="LeftTableTd"><div class="Flex ScoreUp" part="Flex ScoreUp">{row.Points.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</div></td>
318
- <td class="LeftTableTd {!row.Unqualified? 'Qualified' : ''}" part="LeftTableTd {!row.Unqualified? 'Qualified' : ''}">
319
- {#if row.Prize}
320
- {row.Prize}
321
- {:else}
322
- -
323
- {/if}
324
- </td>
325
- </tr>
326
- {#if row.Unqualified && row.isCurrentUser}
327
- <tr class="TooltipsRow" part="TooltipsRow">
328
- <td colspan="{tooltipColSpan}" part="LeftTableTd">
329
- <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
330
- <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
331
- </svg>
332
- {$_('tournamentsTable.UnqualifiedTips')}
333
- </td>
334
- </tr>
335
- {/if}
336
- {/each}
337
- {/if}
338
- </tbody>
339
- </table>
340
- <div class="RightButton" part="RightButton">
341
- <div class="CollapseButton" part="CollapseButton" on:click={() => collapseTable()}>
342
- {#if showTable}
343
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
344
- <path d="M18 15l-6-6-6 6"/>
345
- </svg>
346
- {:else}
347
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
348
- <path d="M6 9l6 6 6-6"/>
349
- </svg>
350
- {/if}
351
- </div>
352
- </div>
353
- </div>
354
- {/if}
355
- {:else}
356
- {#if isMobile(userAgent) == true}
357
- {#if showTable}
358
- <div class="TableContent" part="TableContent">
359
- <div class="TableUser" part="TableUser"><p>{$_('tournamentsTable.nowinners')}</p></div>
360
- </div>
361
- {/if}
362
- {:else}
363
- <div class="TournamentsTable" part="TournamentsTable">
364
- <table class="LeftTable" part="LeftTable">
365
- <thead part="LeftTableThead">
366
- <tr part="LeftTableTr">
367
- {#each columns as column}
368
- <th part="LeftTableTh">
369
- {#if sortable == 'true'}
370
- <button on:click={() => sortBy(column)} data-sort={sort} part="LeftTableButton">
371
- {$_(`tournamentsTable.${column}`)}
372
- </button>
373
- {:else}
374
- <p data-sort={sort} part="LeftTableP">{$_(`tournamentsTable.${column}`)}</p>
375
- {/if}
376
- </th>
377
- {/each}
378
- </tr>
379
- </thead>
380
- <tbody part="LeftTableTbody">
381
- <tr part="LeftTableTr">
382
- <td colspan="{tooltipColSpan}" part="LeftTableTd">{$_('tournamentsTable.nowinners')}</td>
383
- </tr>
384
- </tbody>
385
- </table>
386
- </div>
387
- {/if}
388
- {/if}
389
-
390
- <style lang="scss">
391
- :host {
392
- font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
393
- }
394
-
395
- *,
396
- *::before,
397
- *::after {
398
- margin: 0;
399
- padding: 0;
400
- list-style: none;
401
- text-decoration: none;
402
- outline: none;
403
- box-sizing: border-box;
404
- }
405
-
406
- .LeaderboardContainer {
407
- background: var(--emfe-w-color-contrast, #07072A);
408
- color: #fff;
409
- display: flex;
410
- width: 100%;
411
- height: 52px;
412
- align-items: center;
413
- justify-content: space-between;
414
- gap: 20px;
415
- }
416
-
417
- .Leaderboard {
418
- width: 100%;
419
- height: 44px;
420
- display: flex;
421
- align-items: center;
422
- padding-left: 20px;
423
- }
424
-
425
- .TableContent {
426
- width: 100%;
427
- font-size: 14px;
428
- margin-bottom: 2px;
429
- border-bottom: solid 1px var(--emfe-w-color-white, #FFFFFF);
430
- &.TableContentFirstRow {
431
- box-sizing: border-box;
432
- border: 2px solid var(--emfe-w-color-green, #48952a);
433
- }
434
- }
435
-
436
- .TableUser {
437
- background: var(--emfe-w-table-bg, #282828);
438
- height: 44px;
439
- display: flex;
440
- align-items: center;
441
- border-bottom: solid 1px var(--emfe-w-table-border, #3a3a3a);
442
- &.TableHeadRow {
443
- background: var(--emfe-w-table-header-bg, #1c1c1c);
444
- color: var(--emfe-w-color-white, #fff);
445
- }
446
- &.CurrentUserRow {
447
- box-sizing: border-box;
448
- background: var(--emfe-w-table-currentuser-bg, #533a34);
449
- }
450
- &.UnqualifiedRow {
451
- border-bottom: 0;
452
- }
453
- }
454
- .TableUserTooltips{
455
- display: flex;
456
- gap: 4px;
457
- flex-direction: row;
458
- width: 100%;
459
- padding: 10px 0;
460
- background: var(--emfe-w-table-currentuser-bg, #533a34);
461
- font-size: 0.8rem;
462
- line-height: 1.2;
463
- }
464
- .TooltipsRow {
465
- border: 2px solid var(--emfe-w-tooltips-border, #fecf00);
466
- border-top: 0;
467
- .ExclamationMark {
468
- fill:var(--emfe-w-color-exclamation, #fecf00);
469
- }
470
- td {
471
- padding: 0 0 10px 0;
472
- font-size: 12px;
473
- color: var(--emfe-w-color-tooltips, #fecf00);
474
- }
475
- }
476
- .TableCell {
477
- padding:10px;
478
- flex: 2;
479
- text-align: center;
480
- }
481
- .TableRank {
482
- flex: 1 50px;
483
- }
484
- .TablePlayer{
485
- flex: 5;
486
- }
487
- .TablePrize {
488
- flex: 5;
489
- }
490
- .Qualified {
491
- color: var(--emfe-w-highlight, #debb05);
492
- }
493
- .ExclamationMark {
494
- vertical-align: text-top;
495
- width: 14px;
496
- height: 14px;
497
- fill: var(--emfe-w-color-exclamation, #fecf00);
498
- }
499
- .TableUserDetails {
500
- background: var(--emfe-w-color-contrast, #07072A);
501
- display: flex;
502
- line-height: 18px;
503
- align-items: center;
504
- text-align: center;
505
- justify-content:space-around;
506
- height: 52px;
507
- }
508
-
509
- .TournamentsTable {
510
- width: 100%;
511
- min-width: 600px;
512
- display: flex;
513
- justify-content: space-between;
514
- text-align: center;
515
- }
516
-
517
- .LeftTable {
518
- width: 100%;
519
- border-collapse: collapse;
520
- }
521
-
522
- .RightButton {
523
- cursor: pointer;
524
- background: var(--emfe-w-color-contrast, #07072A);
525
- width: 50px;
526
- height: 70px;
527
- border: 2px solid var(--emfe-w-color-contrast-600, #0D0D4D);
528
- &.MobileClass {
529
- height: 50px;
530
- }
531
- }
532
-
533
- .FirstRow {
534
- outline: 2px solid #1B9800;
535
- &.UnqualifiedRow {
536
- outline: 0;
537
- border: 2px solid var(--emfe-w-tooltips-border, #fecf00);
538
- border-bottom: 0;
539
- td {
540
- border-bottom: 0;
541
- }
542
- }
543
- .RankCol{
544
- position: relative;
545
- width: max-content;
546
- display: inline;
547
- .ScoreChangeFlag{
548
- position: absolute;
549
- top: 0px;
550
- right: -29px;
551
- .Arrow{
552
- &.Up{ color: #0cdc13}
553
- &.Down{color: #FF4500}
554
- }
555
- }
556
-
557
- }
558
- }
559
- .Show{display: inline-flex}
560
- .Hidden{display: none}
561
- svg.Arrow.Up, svg.Arrow.Down, .svg.Arrow.Up, .svg.Arrow.Down {
562
- &.Show{display: inline-flex}
563
- &.Hidden{display: none}
564
- animation-name: twinkle;
565
- animation-duration: 1s;
566
- animation-iteration-count: infinite;
567
- width: 14px;
568
- height: 14px;
569
- }
570
-
571
- @keyframes twinkle {
572
- 0% {opacity: 0;}
573
- 25% {opacity: 1;}
574
- 100% {opacity: 0;}
575
- }
576
-
577
- table {
578
- width: 100%;
579
- min-width: 600px;
580
- border-spacing: 0;
581
- position: relative;
582
- overflow: auto;
583
- margin-bottom: 0.5rem;
584
- }
585
-
586
- th {
587
- padding: 1.5rem 1.25rem;
588
- height: 70px;
589
- background-color: var(--emfe-w-color-contrast, #07072A);
590
- border-bottom: 1px solid var(--emfe-w-color-contrast-600, #0D0D4D);
591
- top: 0;
592
- color: var(--emfe-w-color-white, #FFFFFF);
593
- }
594
-
595
- td {
596
- margin: 0;
597
- padding: 1.25rem;
598
- vertical-align: top;
599
- text-align: inherit;
600
- color: var(--emfe-w-color-white, #FFFFFF);
601
- font-size: 11px;
602
- max-width: 20%;
603
- background-color: var(--emfe-w-color-contrast, #07072A);
604
- border-bottom: 1px solid var(--emfe-w-color-contrast-600, #0D0D4D);
605
- }
606
-
607
- td:first-child {
608
- left: 0;
609
- top: auto;
610
- width: 10rem;
611
- }
612
-
613
- svg {
614
- width: 1.25rem;
615
- height: 1.25rem;
616
-
617
- fill: rgba(0, 0, 0, 0.5);
618
- flex-shrink: 0;
619
- }
620
-
621
- .flex {
622
- display: flex;
623
- align-items: center;
624
- }
625
-
626
- button {
627
- font-weight: bold;
628
- font-size: inherit;
629
- text-transform: capitalize;
630
- background-color: transparent;
631
- border: none;
632
- cursor: pointer;
633
- display: block;
634
- padding: 0 1rem 0 0;
635
- background-size: 0.75rem;
636
- background-repeat: no-repeat;
637
- background-position: center right;
638
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M16.29 14.29L12 18.59l-4.29-4.3a1 1 0 00-1.42 1.42l5 5a1 1 0 001.42 0l5-5a1 1 0 00-1.42-1.42zM7.71 9.71L12 5.41l4.29 4.3a1 1 0 001.42 0 1 1 0 000-1.42l-5-5a1 1 0 00-1.42 0l-5 5a1 1 0 001.42 1.42z'/%3E%3C/svg%3E");
639
- }
640
-
641
- .CollapseButton {
642
- display: flex;
643
- align-items: center;
644
- justify-content: center;
645
- width: 100%;
646
- height: 100%;
647
- background: var(--emfe-w-color-contrast, #07072A);
648
- color: var(--emfe-w-color-white, #FFFFFF);
649
- }
650
-
651
- [data-sort="ASC"],
652
- [data-sort="DESC"] {
653
- background-size: 1rem;
654
- background-position: right -0.15rem center;
655
- }
656
-
657
- [data-sort="ASC"] {
658
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M11.29 11.46a1 1 0 001.42 0l3-3A1 1 0 1014.29 7L12 9.34 9.71 7a1 1 0 10-1.42 1.46zm3 1.08L12 14.84l-2.29-2.3A1 1 0 008.29 14l3 3a1 1 0 001.42 0l3-3a1 1 0 00-1.42-1.42z'/%3E%3C/svg%3E");
659
- }
660
-
661
- [data-sort="DESC"] {
662
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M12.71 12.54a1 1 0 00-1.42 0l-3 3A1 1 0 009.71 17L12 14.66 14.29 17a1 1 0 001.42 0 1 1 0 000-1.42zm-3-1.08L12 9.16l2.29 2.3a1 1 0 001.42 0 1 1 0 000-1.42l-3-3a1 1 0 00-1.42 0l-3 3a1 1 0 001.42 1.42z'/%3E%3C/svg%3E");
663
- }
664
- </style>
1
+ <svelte:options tag={null} />
2
+
3
+ <script lang="ts">
4
+ import { onMount } from 'svelte';
5
+ import { getDevice, isMobile } from 'rvhelper';
6
+ import { _, addNewMessages } from './i18n';
7
+ import { TournamentsTableTranslations } from './translations';
8
+
9
+ import arrowUpSvg from './images/arrow-up.svg';
10
+ import arrowDownSvg from './images/arrow-down.svg'
11
+
12
+ export let sortable:Boolean = false;
13
+ export let firstrow:Boolean = false;
14
+ export let lang:String = 'en';
15
+
16
+ let columns:any = [];
17
+ let data:any = [];
18
+ let sortColumn:any = null;
19
+ let sortDirection:any = null;
20
+ let column:any = null;
21
+ let firstRowData:any = null;
22
+ let showTable:Boolean = true;
23
+ let userAgent = window.navigator.userAgent;
24
+ let isUserPositionChanged:Boolean = false;
25
+ let isUserPositionUp:Boolean = false;
26
+ let firstRowChangeFlagTimer: any=null;
27
+ let lastUserPosition:number;
28
+ let tooltipColSpan:number;
29
+
30
+ Object.keys(TournamentsTableTranslations).forEach((item) => {
31
+ addNewMessages(item, TournamentsTableTranslations[item]);
32
+ });
33
+
34
+ const findTableRowDataByRank =(position: Number, data)=>{
35
+ let rowData = data.find((row)=>{
36
+ return row.Rank == position;
37
+ })
38
+ return rowData;
39
+ }
40
+ let rankChangeTime1,rankChangeTime2:any;
41
+ const processUserRankChanged = (newUserPosion) =>{
42
+ if(!lastUserPosition){
43
+ lastUserPosition = newUserPosion;
44
+ return;// first place bet, do not show change flag
45
+ }
46
+ isUserPositionChanged = lastUserPosition != newUserPosion;
47
+ // when (position changed) or (position not changed but still in 2.5s)
48
+ isUserPositionUp = lastUserPosition > newUserPosion;
49
+ if(isUserPositionChanged){
50
+ rankChangeTime1 = (new Date()).getTime(); //reset time1, make sure userrank change more than once during 5mins
51
+ firstRowChangeFlagTimer = setTimeout(function (){
52
+ rankChangeTime2 = (new Date()).getTime();
53
+ let timeInterval = (rankChangeTime2 - rankChangeTime1)/1000;
54
+ if(timeInterval > 4){
55
+ isUserPositionChanged = false;
56
+ }
57
+ lastUserPosition = newUserPosion;
58
+ }, 5000);
59
+ }
60
+ }
61
+ const messageHandler = (e:any) => {
62
+ if (e.data && e.data.type === 'CasinoTableData') {
63
+ data = e.data.tableData;
64
+ display = data;
65
+ }
66
+
67
+ if (e.data && e.data.type === 'CasinoTableColumns') {
68
+ columns = e.data.tableColumns;
69
+ tooltipColSpan = columns.length || 4;
70
+ }
71
+
72
+ // set view after current user row defined.
73
+ if (e.data && e.data.type === 'CasinoTableCurrentUserData'){
74
+ if(data){
75
+ data.forEach(item => {
76
+ if(item.userID == e.data.tableData.userID){
77
+ item.isCurrentUser = true;
78
+ //clear first row data when update
79
+ if(!lastUserPosition){
80
+ lastUserPosition = e.data.tableData.Rank;
81
+ }
82
+ if(firstRowData){
83
+ processUserRankChanged( e.data.tableData.Rank);
84
+ firstRowData = null;
85
+ }else{
86
+ processUserRankChanged( e.data.tableData.Rank);
87
+ }
88
+ }
89
+ });
90
+ display = data;
91
+ }
92
+ }
93
+ if (firstrow) {
94
+ if (e.data && e.data.type === 'CasinoTableFirstRowData') {
95
+ let newFirstRowData:any = e.data.tableData;
96
+ if(!firstRowData){
97
+ firstRowData = e.data.tableData;
98
+ lastUserPosition = firstRowData.Rank;
99
+ return;
100
+ }
101
+ if(firstRowData && firstRowData.UserID == newFirstRowData.UserID){
102
+ processUserRankChanged( newFirstRowData.Rank);
103
+ firstRowData = e.data.tableData;
104
+ }
105
+
106
+ }
107
+ }
108
+ // CasinoTableDataUpdate
109
+ if(e.data && e.data.type==='CasinoTableDataUpdate' && e.data.tableData){
110
+ let tableUpdateData = e.data.tableData;
111
+ //check data type before foreach
112
+ if( !(data instanceof Array)){
113
+ return;
114
+ }
115
+ data.forEach(function (row, idx){
116
+ let updateRowByPosition = findTableRowDataByRank(row.Rank, tableUpdateData);
117
+ if(!updateRowByPosition){
118
+ return;
119
+ }
120
+ data[idx] = updateRowByPosition;
121
+ });
122
+ }
123
+ }
124
+
125
+ const sortBy = (column:any) => {
126
+ const sameColumn = column === sortColumn;
127
+ const currentlyAscending = sortDirection === "ASC";
128
+ const unsetSort = sameColumn && !currentlyAscending;
129
+
130
+ sortColumn = unsetSort ? null : column;
131
+ sortDirection = unsetSort
132
+ ? null
133
+ : sameColumn && currentlyAscending
134
+ ? "DESC"
135
+ : "ASC";
136
+ }
137
+
138
+ const getComparator = (type:any, column:any) => {
139
+ const key = column.toLowerCase();
140
+
141
+ if (type === "string") {
142
+ return (a, b) => a[key].localeCompare(b[key]);
143
+ }
144
+ if (type === "number") {
145
+ return (a, b) => a[key] - b[key];
146
+ }
147
+ if (type === "object") {
148
+ return (a, b) => a[key] - b[key];
149
+ }
150
+ }
151
+
152
+ const formatDate = (value:any) => {
153
+ return new Intl.DateTimeFormat("en-GB", {
154
+ year: "numeric",
155
+ month: "short",
156
+ day: "numeric"
157
+ }).format(value);
158
+ }
159
+
160
+ const sortData = () => {
161
+ let items = [];
162
+
163
+ if (data) {
164
+ items = [...data];
165
+ }
166
+
167
+ if (!data.length) {
168
+ return data;
169
+ }
170
+
171
+ const type:any = typeof data[0][sortColumn.toLowerCase()];
172
+
173
+ items.sort(getComparator(type, sortColumn));
174
+
175
+ return sortDirection === "ASC" ? items : items.reverse();
176
+ }
177
+
178
+ const collapseTable = () => {
179
+ showTable = !showTable;
180
+ }
181
+
182
+ onMount(() => {
183
+ window.addEventListener('message', messageHandler, false);
184
+ return () => {
185
+ window.removeEventListener('message', messageHandler);
186
+ }
187
+ });
188
+
189
+ $: display = sortColumn && sortDirection ? sortData() : [...data];
190
+ $: sort = column === sortColumn ? sortDirection : null;
191
+ </script>
192
+
193
+ {#if data.length > 0 || firstRowData}
194
+ {#if isMobile(userAgent) == true}
195
+ <div class="TableContent" part="TableContent">
196
+ <div class="TableUser TableHeadRow" part="TableUser TableHeadRow">
197
+ {#each columns as column}
198
+ <div class="TableCell Table{column}" part="TableCell Table{column}">
199
+ {#if sortable == 'true'}
200
+ <button on:click={() => sortBy(column)} data-sort={sort}>
201
+ {$_(`tournamentsTable.${column}`)}
202
+ </button>
203
+ {:else}
204
+ <p data-sort={sort}>{$_(`tournamentsTable.${column}`)}</p>
205
+ {/if}
206
+ </div>
207
+ {/each}
208
+ </div>
209
+ {#if firstrow == 'true' && firstRowData}
210
+ <div class="TableUser CurrentUserRow {firstRowData.Unqualified ? 'UnqualifiedRow' : ''}" part="TableUser CurrentUserRow {firstRowData.Unqualified ? 'UnqualifiedRow' : ''}">
211
+ <div class="TableCell TableRank {firstRowData.Prize? 'Qualified' : ''}" part="TableCell TableRank RankFirstRow {firstRowData.Prize? 'Qualified' : ''}">
212
+ {firstRowData.Rank}
213
+ </div>
214
+ <div class="TableCell TablePlayer" part="TableCell TablePlayer">{firstRowData.Player}</div>
215
+ <div class="TableCell TablePoints" part="TableCell TablePoints">{firstRowData.Points}</div>
216
+ {#if firstRowData.Prize}
217
+ <div class="TableCell TablePrize {!firstRowData.Unqualified? 'Qualified' : ''}" part="TableCell TablePrize {!firstRowData.Unqualified? 'Qualified' : ''}">{firstRowData.Prize}</div>
218
+ {:else}
219
+ <div class="TableCell TablePrize" part="TableCell TablePrize">-</div>
220
+ {/if}
221
+ </div>
222
+ {#if firstRowData.Unqualified}
223
+ <div class="TableUserTooltips" part="TableUserTooltips">
224
+ <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
225
+ <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
226
+ </svg>
227
+ <em part="TableUserTooltipsEm">{$_('tournamentsTable.UnqualifiedTips')}</em>
228
+ </div>
229
+ {/if}
230
+ {/if}
231
+ {#if showTable}
232
+ {#each display as row}
233
+ <div class="TableUser {row.isCurrentUser ? 'CurrentUserRow' : ''}" part="TableUser {row.isCurrentUser ? 'CurrentUserRow' : ''}">
234
+ <div class="TableCell TableRank {row.Prize? 'Qualified' : ''}" part="TableCell Rank-{row.Rank} TableRank {row.Prize? 'Qualified' : ''}">{row.Rank}</div>
235
+ <div class="TableCell TablePlayer" part="TableCell TablePlayer">{row.Player}</div>
236
+ <div class="TableCell TablePoints" part="TableCell TablePoints">{row.Points.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</div>
237
+ {#if row.Prize}
238
+ <div class="TableCell TablePrize {!row.Unqualified? 'Qualified' : ''}" part="TableCell TablePrize {!row.Unqualified? 'Qualified' : ''}">{row.Prize}</div>
239
+ {:else}
240
+ <div class="TableCell TablePrize" part="TableCell TablePrize">-</div>
241
+ {/if}
242
+ </div>
243
+ {#if row.isCurrentUser && row.Unqualified}
244
+ <div class="TableUserTooltips {row.Unqualified ? 'UnqualifiedRow' : ''}" part="TableUserTooltips {row.Unqualified ? 'UnqualifiedRow' : ''}">
245
+ <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
246
+ <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
247
+ </svg>
248
+ <em part="TableUserTooltipsEm">{$_('tournamentsTable.UnqualifiedTips')}</em>
249
+ </div>
250
+ {/if}
251
+ {/each}
252
+ {/if}
253
+ </div>
254
+ {:else}
255
+ <div class="TournamentsTable" part="TournamentsTable">
256
+ <table class="LeftTable" part="LeftTable">
257
+ <thead part="LeftTableThead">
258
+ <tr part="LeftTableTr">
259
+ {#each columns as column}
260
+ <th part="LeftTableTh">
261
+ {#if sortable == 'true'}
262
+ <button on:click={() => sortBy(column)} data-sort={sort} part="LeftTableButton">
263
+ {$_(`tournamentsTable.${column}`)}
264
+ </button>
265
+ {:else}
266
+ <p data-sort={sort} part="LeftTableP">{$_(`tournamentsTable.${column}`)}</p>
267
+ {/if}
268
+ </th>
269
+ {/each}
270
+ </tr>
271
+ </thead>
272
+ <tbody part="LeftTableTbody">
273
+ {#if firstrow == 'true' && firstRowData}
274
+ <tr class="FirstRow {firstRowData.Unqualified ? 'UnqualifiedRow':''}" part="FirstRow {firstRowData.Unqualified ? 'UnqualifiedRow':''}">
275
+ <td part="LeftTableTd RankFirstRow"><strong class="RankCol" part="RankCol"><em part="LeftTableTdEm">#{firstRowData.Rank}</em>
276
+ <div class="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}" part="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}">
277
+ <img src="{arrowUpSvg}" part="Rank_Arror_UP" class="svg Arrow Up {isUserPositionChanged && isUserPositionUp ? 'Show' : 'Hidden'}" />
278
+ <img src="{arrowDownSvg}" part="Rank_Arror_Down" class="svg Arrow Down {isUserPositionChanged && !isUserPositionUp ? 'Show' : 'Hidden'}" />
279
+ </div></strong>
280
+ </td>
281
+ <td part="LeftTableTd">{firstRowData.Player}</td>
282
+ <td part="LeftTableTd">
283
+ <div class="Flex" part="Flex">{firstRowData.Points}</div>
284
+ </td>
285
+ <td class="LeftTableTd {!firstRowData.Unqualified? 'Qualified' : ''}" part="LeftTableTd {!firstRowData.Unqualified? 'Qualified' : ''}">
286
+ {#if firstRowData.Prize}
287
+ {firstRowData.Prize}
288
+ {:else}
289
+ -
290
+ {/if}
291
+ </td>
292
+ </tr>
293
+ {#if firstRowData.Unqualified}
294
+ <tr class="TooltipsRow" part="TooltipsRow">
295
+ <td colspan="{tooltipColSpan}" part="LeftTableTd">
296
+ <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
297
+ <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
298
+ </svg>
299
+ {$_('tournamentsTable.UnqualifiedTips')}
300
+ </td>
301
+ </tr>
302
+ {/if}
303
+ {/if}
304
+ {#if showTable}
305
+ {#each display as row}
306
+ <tr class="LeftTableTr {row.isCurrentUser ? 'FirstRow' : ''} {row.isCurrentUser && row.Unqualified? 'UnqualifiedRow': ''}" part="LeftTableTr {row.isCurrentUser ? 'FirstRow' : ''} {row.isCurrentUser && row.Unqualified? 'UnqualifiedRow': ''}">
307
+ <td part="LeftTableTd Rank-{row.Rank}"><strong class="RankCol" part="RankCol"><em part="LeftTableTdEm">#{row.Rank}
308
+ <div class="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}" part="ScoreChangeFlag {isUserPositionChanged ? 'Show' : 'Hidden'}">
309
+ {#if row.isCurrentUser}
310
+ <img src="{arrowUpSvg}" part="Rank_Arror_UP" class="svg Arrow Up {isUserPositionChanged && isUserPositionUp ? 'Show' : 'Hidden'}" />
311
+ <img src="{arrowDownSvg}" part="Rank_Arror_Down" class="svg Arrow Down {isUserPositionChanged && !isUserPositionUp ? 'Show' : 'Hidden'}" />
312
+ {/if}
313
+ </div>
314
+
315
+ </em></strong></td>
316
+ <td part="LeftTableTd">{row.Player}</td>
317
+ <td part="LeftTableTd"><div class="Flex ScoreUp" part="Flex ScoreUp">{row.Points.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</div></td>
318
+ <td class="LeftTableTd {!row.Unqualified? 'Qualified' : ''}" part="LeftTableTd {!row.Unqualified? 'Qualified' : ''}">
319
+ {#if row.Prize}
320
+ {row.Prize}
321
+ {:else}
322
+ -
323
+ {/if}
324
+ </td>
325
+ </tr>
326
+ {#if row.Unqualified && row.isCurrentUser}
327
+ <tr class="TooltipsRow" part="TooltipsRow">
328
+ <td colspan="{tooltipColSpan}" part="LeftTableTd">
329
+ <svg class="ExclamationMark" part="ExclamationMark" width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
330
+ <path d="M9.03087 3.14062C8.71521 2.56443 8.27722 2.06437 7.74767 1.67553C7.21811 1.28669 6.60971 1.01855 5.96544 0.889885C5.32118 0.761222 4.65646 0.775158 4.01817 0.930778C3.37988 1.0864 2.78361 1.37989 2.27086 1.79064C1.68689 2.25306 1.22358 2.85008 0.920762 3.53063C0.679091 4.08921 0.556377 4.69205 0.560655 5.30065C0.562354 5.92327 0.693172 6.53873 0.944444 7.10839C1.19572 7.67806 1.5622 8.18953 2.02086 8.61059C2.83307 9.36649 3.89773 9.79259 5.00719 9.80553C6.11665 9.81848 7.19124 9.4174 8.02086 8.68066C8.3779 8.38276 8.67913 8.0238 8.91075 7.6206C9.34355 6.92428 9.57213 6.12051 9.57066 5.30065C9.57316 4.54694 9.38776 3.80448 9.03087 3.14062V3.14062ZM4.43077 7.39062C4.41666 7.24208 4.44786 7.09281 4.52013 6.96227C4.59239 6.83174 4.70243 6.72606 4.8358 6.65917C4.96917 6.59228 5.11961 6.56724 5.26744 6.58739C5.41528 6.60754 5.55357 6.67195 5.66417 6.77209C5.77477 6.87223 5.85238 7.00344 5.88707 7.14855C5.92176 7.29367 5.91186 7.44586 5.85851 7.5852C5.80516 7.72454 5.71098 7.84448 5.58824 7.92931C5.46551 8.01415 5.31996 8.05999 5.17076 8.06066C5.0777 8.06746 4.9841 8.05526 4.89586 8.02489C4.80762 7.99453 4.72651 7.94653 4.65733 7.8839C4.58816 7.82127 4.53247 7.74531 4.49352 7.66051C4.45456 7.57572 4.43323 7.4839 4.43077 7.39062V7.39062ZM5.05065 2.69067H5.25084C5.32609 2.69062 5.40056 2.70571 5.46983 2.7351C5.53911 2.76448 5.60165 2.80755 5.65392 2.86169C5.70619 2.91582 5.7471 2.9799 5.77403 3.05016C5.80097 3.12043 5.81334 3.19542 5.81066 3.27062L5.7108 5.66064C5.70312 5.8039 5.64068 5.93873 5.53649 6.03735C5.43229 6.13596 5.29421 6.19087 5.15074 6.19067C5.00827 6.19076 4.87125 6.13559 4.76866 6.03674C4.66607 5.93788 4.60587 5.80301 4.60069 5.66064L4.50084 3.27062C4.49817 3.19625 4.51016 3.12209 4.53648 3.05248C4.5628 2.98287 4.60295 2.91923 4.65416 2.86523C4.70537 2.81123 4.76671 2.76801 4.83483 2.73803C4.90294 2.70805 4.97624 2.69195 5.05065 2.69067V2.69067Z"/>
331
+ </svg>
332
+ {$_('tournamentsTable.UnqualifiedTips')}
333
+ </td>
334
+ </tr>
335
+ {/if}
336
+ {/each}
337
+ {/if}
338
+ </tbody>
339
+ </table>
340
+ <div class="RightButton" part="RightButton">
341
+ <div class="CollapseButton" part="CollapseButton" on:click={() => collapseTable()}>
342
+ {#if showTable}
343
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
344
+ <path d="M18 15l-6-6-6 6"/>
345
+ </svg>
346
+ {:else}
347
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
348
+ <path d="M6 9l6 6 6-6"/>
349
+ </svg>
350
+ {/if}
351
+ </div>
352
+ </div>
353
+ </div>
354
+ {/if}
355
+ {:else}
356
+ {#if isMobile(userAgent) == true}
357
+ {#if showTable}
358
+ <div class="TableContent" part="TableContent">
359
+ <div class="TableUser" part="TableUser"><p>{$_('tournamentsTable.nowinners')}</p></div>
360
+ </div>
361
+ {/if}
362
+ {:else}
363
+ <div class="TournamentsTable" part="TournamentsTable">
364
+ <table class="LeftTable" part="LeftTable">
365
+ <thead part="LeftTableThead">
366
+ <tr part="LeftTableTr">
367
+ {#each columns as column}
368
+ <th part="LeftTableTh">
369
+ {#if sortable == 'true'}
370
+ <button on:click={() => sortBy(column)} data-sort={sort} part="LeftTableButton">
371
+ {$_(`tournamentsTable.${column}`)}
372
+ </button>
373
+ {:else}
374
+ <p data-sort={sort} part="LeftTableP">{$_(`tournamentsTable.${column}`)}</p>
375
+ {/if}
376
+ </th>
377
+ {/each}
378
+ </tr>
379
+ </thead>
380
+ <tbody part="LeftTableTbody">
381
+ <tr part="LeftTableTr">
382
+ <td colspan="{tooltipColSpan}" part="LeftTableTd">{$_('tournamentsTable.nowinners')}</td>
383
+ </tr>
384
+ </tbody>
385
+ </table>
386
+ </div>
387
+ {/if}
388
+ {/if}
389
+
390
+ <style lang="scss">
391
+ :host {
392
+ font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
393
+ }
394
+
395
+ *,
396
+ *::before,
397
+ *::after {
398
+ margin: 0;
399
+ padding: 0;
400
+ list-style: none;
401
+ text-decoration: none;
402
+ outline: none;
403
+ box-sizing: border-box;
404
+ }
405
+
406
+ .LeaderboardContainer {
407
+ background: var(--emfe-w-color-contrast, #07072A);
408
+ color: #fff;
409
+ display: flex;
410
+ width: 100%;
411
+ height: 52px;
412
+ align-items: center;
413
+ justify-content: space-between;
414
+ gap: 20px;
415
+ }
416
+
417
+ .Leaderboard {
418
+ width: 100%;
419
+ height: 44px;
420
+ display: flex;
421
+ align-items: center;
422
+ padding-left: 20px;
423
+ }
424
+
425
+ .TableContent {
426
+ width: 100%;
427
+ font-size: 14px;
428
+ margin-bottom: 2px;
429
+ border-bottom: solid 1px var(--emfe-w-color-white, #FFFFFF);
430
+ &.TableContentFirstRow {
431
+ box-sizing: border-box;
432
+ border: 2px solid var(--emfe-w-color-green, #48952a);
433
+ }
434
+ }
435
+
436
+ .TableUser {
437
+ background: var(--emfe-w-table-bg, #282828);
438
+ height: 44px;
439
+ display: flex;
440
+ align-items: center;
441
+ border-bottom: solid 1px var(--emfe-w-table-border, #3a3a3a);
442
+ &.TableHeadRow {
443
+ background: var(--emfe-w-table-header-bg, #1c1c1c);
444
+ color: var(--emfe-w-color-white, #fff);
445
+ }
446
+ &.CurrentUserRow {
447
+ box-sizing: border-box;
448
+ background: var(--emfe-w-table-currentuser-bg, #533a34);
449
+ }
450
+ &.UnqualifiedRow {
451
+ border-bottom: 0;
452
+ }
453
+ }
454
+ .TableUserTooltips{
455
+ display: flex;
456
+ gap: 4px;
457
+ flex-direction: row;
458
+ width: 100%;
459
+ padding: 10px 0;
460
+ background: var(--emfe-w-table-currentuser-bg, #533a34);
461
+ font-size: 0.8rem;
462
+ line-height: 1.2;
463
+ }
464
+ .TooltipsRow {
465
+ border: 2px solid var(--emfe-w-tooltips-border, #fecf00);
466
+ border-top: 0;
467
+ .ExclamationMark {
468
+ fill:var(--emfe-w-color-exclamation, #fecf00);
469
+ }
470
+ td {
471
+ padding: 0 0 10px 0;
472
+ font-size: 12px;
473
+ color: var(--emfe-w-color-tooltips, #fecf00);
474
+ }
475
+ }
476
+ .TableCell {
477
+ padding:10px;
478
+ flex: 2;
479
+ text-align: center;
480
+ }
481
+ .TableRank {
482
+ flex: 1 50px;
483
+ }
484
+ .TablePlayer{
485
+ flex: 5;
486
+ }
487
+ .TablePrize {
488
+ flex: 5;
489
+ }
490
+ .Qualified {
491
+ color: var(--emfe-w-highlight, #debb05);
492
+ }
493
+ .ExclamationMark {
494
+ vertical-align: text-top;
495
+ width: 14px;
496
+ height: 14px;
497
+ fill: var(--emfe-w-color-exclamation, #fecf00);
498
+ }
499
+ .TableUserDetails {
500
+ background: var(--emfe-w-color-contrast, #07072A);
501
+ display: flex;
502
+ line-height: 18px;
503
+ align-items: center;
504
+ text-align: center;
505
+ justify-content:space-around;
506
+ height: 52px;
507
+ }
508
+
509
+ .TournamentsTable {
510
+ width: 100%;
511
+ min-width: 600px;
512
+ display: flex;
513
+ justify-content: space-between;
514
+ text-align: center;
515
+ }
516
+
517
+ .LeftTable {
518
+ width: 100%;
519
+ border-collapse: collapse;
520
+ }
521
+
522
+ .RightButton {
523
+ cursor: pointer;
524
+ background: var(--emfe-w-color-contrast, #07072A);
525
+ width: 50px;
526
+ height: 70px;
527
+ border: 2px solid var(--emfe-w-color-contrast-600, #0D0D4D);
528
+ &.MobileClass {
529
+ height: 50px;
530
+ }
531
+ }
532
+
533
+ .FirstRow {
534
+ outline: 2px solid #1B9800;
535
+ &.UnqualifiedRow {
536
+ outline: 0;
537
+ border: 2px solid var(--emfe-w-tooltips-border, #fecf00);
538
+ border-bottom: 0;
539
+ td {
540
+ border-bottom: 0;
541
+ }
542
+ }
543
+ .RankCol{
544
+ position: relative;
545
+ width: max-content;
546
+ display: inline;
547
+ .ScoreChangeFlag{
548
+ position: absolute;
549
+ top: 0px;
550
+ right: -29px;
551
+ .Arrow{
552
+ &.Up{ color: #0cdc13}
553
+ &.Down{color: #FF4500}
554
+ }
555
+ }
556
+
557
+ }
558
+ }
559
+ .Show{display: inline-flex}
560
+ .Hidden{display: none}
561
+ svg.Arrow.Up, svg.Arrow.Down, .svg.Arrow.Up, .svg.Arrow.Down {
562
+ &.Show{display: inline-flex}
563
+ &.Hidden{display: none}
564
+ animation-name: twinkle;
565
+ animation-duration: 1s;
566
+ animation-iteration-count: infinite;
567
+ width: 14px;
568
+ height: 14px;
569
+ }
570
+
571
+ @keyframes twinkle {
572
+ 0% {opacity: 0;}
573
+ 25% {opacity: 1;}
574
+ 100% {opacity: 0;}
575
+ }
576
+
577
+ table {
578
+ width: 100%;
579
+ min-width: 600px;
580
+ border-spacing: 0;
581
+ position: relative;
582
+ overflow: auto;
583
+ margin-bottom: 0.5rem;
584
+ }
585
+
586
+ th {
587
+ padding: 1.5rem 1.25rem;
588
+ height: 70px;
589
+ background-color: var(--emfe-w-color-contrast, #07072A);
590
+ border-bottom: 1px solid var(--emfe-w-color-contrast-600, #0D0D4D);
591
+ top: 0;
592
+ color: var(--emfe-w-color-white, #FFFFFF);
593
+ }
594
+
595
+ td {
596
+ margin: 0;
597
+ padding: 1.25rem;
598
+ vertical-align: top;
599
+ text-align: inherit;
600
+ color: var(--emfe-w-color-white, #FFFFFF);
601
+ font-size: 11px;
602
+ max-width: 20%;
603
+ background-color: var(--emfe-w-color-contrast, #07072A);
604
+ border-bottom: 1px solid var(--emfe-w-color-contrast-600, #0D0D4D);
605
+ }
606
+
607
+ td:first-child {
608
+ left: 0;
609
+ top: auto;
610
+ width: 10rem;
611
+ }
612
+
613
+ svg {
614
+ width: 1.25rem;
615
+ height: 1.25rem;
616
+
617
+ fill: rgba(0, 0, 0, 0.5);
618
+ flex-shrink: 0;
619
+ }
620
+
621
+ .flex {
622
+ display: flex;
623
+ align-items: center;
624
+ }
625
+
626
+ button {
627
+ font-weight: bold;
628
+ font-size: inherit;
629
+ text-transform: capitalize;
630
+ background-color: transparent;
631
+ border: none;
632
+ cursor: pointer;
633
+ display: block;
634
+ padding: 0 1rem 0 0;
635
+ background-size: 0.75rem;
636
+ background-repeat: no-repeat;
637
+ background-position: center right;
638
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M16.29 14.29L12 18.59l-4.29-4.3a1 1 0 00-1.42 1.42l5 5a1 1 0 001.42 0l5-5a1 1 0 00-1.42-1.42zM7.71 9.71L12 5.41l4.29 4.3a1 1 0 001.42 0 1 1 0 000-1.42l-5-5a1 1 0 00-1.42 0l-5 5a1 1 0 001.42 1.42z'/%3E%3C/svg%3E");
639
+ }
640
+
641
+ .CollapseButton {
642
+ display: flex;
643
+ align-items: center;
644
+ justify-content: center;
645
+ width: 100%;
646
+ height: 100%;
647
+ background: var(--emfe-w-color-contrast, #07072A);
648
+ color: var(--emfe-w-color-white, #FFFFFF);
649
+ }
650
+
651
+ [data-sort="ASC"],
652
+ [data-sort="DESC"] {
653
+ background-size: 1rem;
654
+ background-position: right -0.15rem center;
655
+ }
656
+
657
+ [data-sort="ASC"] {
658
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M11.29 11.46a1 1 0 001.42 0l3-3A1 1 0 1014.29 7L12 9.34 9.71 7a1 1 0 10-1.42 1.46zm3 1.08L12 14.84l-2.29-2.3A1 1 0 008.29 14l3 3a1 1 0 001.42 0l3-3a1 1 0 00-1.42-1.42z'/%3E%3C/svg%3E");
659
+ }
660
+
661
+ [data-sort="DESC"] {
662
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f4f4f' d='M12.71 12.54a1 1 0 00-1.42 0l-3 3A1 1 0 009.71 17L12 14.66 14.29 17a1 1 0 001.42 0 1 1 0 000-1.42zm-3-1.08L12 9.16l2.29 2.3a1 1 0 001.42 0 1 1 0 000-1.42l-3-3a1 1 0 00-1.42 0l-3 3a1 1 0 001.42 1.42z'/%3E%3C/svg%3E");
663
+ }
664
+ </style>