@xcpcio/board-app 0.78.2 → 0.78.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/404.html +1 -1
  2. package/dist/assets/{Balloon.vue_vue_type_script_setup_true_lang-27AcG_TV.js → Balloon.vue_vue_type_script_setup_true_lang-A6BI3pHN.js} +1 -1
  3. package/dist/assets/{Board-DDliK7fC.js → Board-Bi3FufkZ.js} +53 -53
  4. package/dist/assets/{ContestStateBadge-DlqaOjhy.js → ContestStateBadge-CtxVS3bY.js} +1 -1
  5. package/dist/assets/{Countdown-DhwaDnBq.js → Countdown-_-sYM2AT.js} +1 -1
  6. package/dist/assets/{DataSourceInput.vue_vue_type_script_setup_true_lang-DE4jHYLG.js → DataSourceInput.vue_vue_type_script_setup_true_lang-DPVg9mnK.js} +1 -1
  7. package/dist/assets/{NavBar-D7Ws8ePI.js → NavBar-C0UK0ASe.js} +1 -1
  8. package/dist/assets/{Resolver-DVrWZP6x.js → Resolver-B5E6dK-v.js} +1 -1
  9. package/dist/assets/{RightArrowIcon-CBf-BObx.js → RightArrowIcon-D2RdIgYG.js} +1 -1
  10. package/dist/assets/{TheInput.vue_vue_type_script_setup_true_lang-DrpFacxq.js → TheInput.vue_vue_type_script_setup_true_lang-D3XyLzkY.js} +1 -1
  11. package/dist/assets/{Tooltip.vue_vue_type_script_setup_true_lang-DVShQdNz.js → Tooltip.vue_vue_type_script_setup_true_lang-CF1jFUtT.js} +1 -1
  12. package/dist/assets/{_...all_-B524bJZB.js → _...all_-CaEo-me1.js} +1 -1
  13. package/dist/assets/{_...all_-Cj1BP7Bi.js → _...all_-CcQCVbDh.js} +1 -1
  14. package/dist/assets/{board-layout-CPrL80rB.js → board-layout-BTyAm0EK.js} +1 -1
  15. package/dist/assets/constant-DG_KQNiP.js +1 -0
  16. package/dist/assets/{dayjs-sKjsZKv5.js → dayjs-0zK7RC9-.js} +1 -1
  17. package/dist/assets/default-B_PJM0WU.js +1 -0
  18. package/dist/assets/en-hjY7qlkM.js +1 -0
  19. package/dist/assets/{headless-C7w7Lh_D.js → headless-EwThSwYS.js} +1 -1
  20. package/dist/assets/{index-BK3vjQva.js → index-BYmkAxcR.js} +12 -12
  21. package/dist/assets/{index-Crr714Fz.css → index-BnD-3E1r.css} +1 -1
  22. package/dist/assets/index-CjEdj2Ed.js +1 -0
  23. package/dist/assets/{index-HsrgWYT6.js → index-DSkVoRW9.js} +1 -1
  24. package/dist/assets/{index--svZ0O-t.js → index-DipXEus9.js} +1 -1
  25. package/dist/assets/index-DuRY2Pyw.js +1 -0
  26. package/dist/assets/{index-6ZR0t6ve.js → index-IxWcz_Rv.js} +1 -1
  27. package/dist/assets/{index-dg0hvCKZ.js → index-hLh2Wrgb.js} +1 -1
  28. package/dist/assets/{index-layout-PeSRcS1A.js → index-layout-Besvla3G.js} +1 -1
  29. package/dist/assets/{pagination-BkDeG1vq.js → pagination-DzXRdgbS.js} +1 -1
  30. package/dist/assets/{person-CITgECKA.js → person-C5I912Er.js} +1 -1
  31. package/dist/assets/{rank-BsQbvMFp.js → rank-CxQNFFKW.js} +1 -1
  32. package/dist/assets/{use-vmodel-C-KfQ0NC.js → use-vmodel-Do0kp3Sr.js} +1 -1
  33. package/dist/assets/{zh-CN-BeAOkdvv.js → zh-CN-C9a78y95.js} +1 -1
  34. package/dist/index.html +1 -1
  35. package/package.json +3 -3
  36. package/src/App.vue +0 -7
  37. package/src/components/board/TeamModal.vue +3 -1
  38. package/src/components/board/TeamStreams.vue +298 -66
  39. package/dist/assets/constant-DwAKIVXi.js +0 -1
  40. package/dist/assets/default-CxXqQtzW.js +0 -1
  41. package/dist/assets/en-DI7hknTx.js +0 -1
  42. package/dist/assets/index-D3WwNYgO.js +0 -1
  43. package/dist/assets/index-cVfSQJhC.js +0 -1
  44. package/dist/favicon-dark.svg +0 -4
  45. package/public/favicon-dark.svg +0 -4
@@ -24,6 +24,28 @@ let screenHls: Hls | null = null;
24
24
  const webcamError = ref(false);
25
25
  const screenError = ref(false);
26
26
 
27
+ // Layout mode types and state
28
+ type LayoutMode = "side-by-side" | "pip";
29
+ type PipPosition = "top-left" | "top-right" | "bottom-left" | "bottom-right";
30
+ type PipMain = "webcam" | "screen";
31
+
32
+ const layoutMode = ref<LayoutMode>("side-by-side");
33
+ const pipPosition = ref<PipPosition>("top-right");
34
+ const pipMain = ref<PipMain>("screen");
35
+
36
+ const pipPositionOptions: PipPosition[] = ["top-left", "top-right", "bottom-left", "bottom-right"];
37
+
38
+ // PiP position class mapping
39
+ const pipPositionClass = computed(() => {
40
+ const positionMap: Record<PipPosition, string> = {
41
+ "top-left": "top-3 left-3",
42
+ "top-right": "top-3 right-3",
43
+ "bottom-left": "bottom-3 left-3",
44
+ "bottom-right": "bottom-3 right-3",
45
+ };
46
+ return positionMap[pipPosition.value];
47
+ });
48
+
27
49
  // Computed stream URLs with template replacement
28
50
  const webcamStreamUrl = computed(() => {
29
51
  const template = rank.value.contest.options.teamWebcamStreamUrlTemplate;
@@ -41,6 +63,9 @@ const screenStreamUrl = computed(() => {
41
63
  return template.replace(/\$\{team_id\}/, team.value.id);
42
64
  });
43
65
 
66
+ // Computed values for PiP mode
67
+ const showPipMode = computed(() => layoutMode.value === "pip" && webcamStreamUrl.value && screenStreamUrl.value);
68
+
44
69
  // Initialize HLS player
45
70
  function initHlsPlayer(
46
71
  videoElement: HTMLVideoElement,
@@ -135,99 +160,306 @@ watch(() => team.value.id, () => {
135
160
  initPlayers();
136
161
  });
137
162
  });
163
+
164
+ // Watch for layout mode changes to reinitialize players
165
+ watch([layoutMode, pipMain], () => {
166
+ destroyHlsPlayers();
167
+
168
+ nextTick(() => {
169
+ initPlayers();
170
+ });
171
+ });
138
172
  </script>
139
173
 
140
174
  <template>
141
175
  <div
142
- flex flex-col md:flex-row
143
- gap-4 w-full
144
- p-4
176
+ flex flex-col
177
+ gap-2 w-full
145
178
  >
146
- <!-- Webcam Stream -->
179
+ <!-- Control Bar -->
147
180
  <div
148
- v-if="webcamStreamUrl"
149
- flex-1
150
- flex flex-col
151
- items-center
181
+ v-if="webcamStreamUrl && screenStreamUrl"
182
+ flex flex-wrap items-center gap-4
183
+ px-2 py-1
184
+ bg-gray-100 dark:bg-gray-800
185
+ rounded-lg
152
186
  >
153
- <h4
154
- text-lg font-semibold
155
- text-gray-900 dark:text-white
156
- mb-2
157
- >
158
- {{ t("streams.webcam") }}
159
- </h4>
187
+ <!-- Layout Mode Toggle -->
188
+ <div flex items-center gap-2>
189
+ <span text-sm text-gray-600 dark:text-gray-300>
190
+ {{ t("streams.layout.side_by_side") }}
191
+ </span>
192
+ <button
193
+ class="relative inline-flex h-6 w-11 items-center rounded-full transition-colors" :class="[
194
+ layoutMode === 'pip' ? 'bg-blue-600' : 'bg-gray-300 dark:bg-gray-600',
195
+ ]"
196
+ @click="layoutMode = layoutMode === 'side-by-side' ? 'pip' : 'side-by-side'"
197
+ >
198
+ <span
199
+ class="inline-block h-4 w-4 transform rounded-full bg-white transition-transform" :class="[
200
+ layoutMode === 'pip' ? 'translate-x-6' : 'translate-x-1',
201
+ ]"
202
+ />
203
+ </button>
204
+ <span text-sm text-gray-600 dark:text-gray-300>
205
+ {{ t("streams.layout.pip") }}
206
+ </span>
207
+ </div>
208
+
209
+ <!-- PiP Controls (only shown in PiP mode) -->
210
+ <template v-if="layoutMode === 'pip'">
211
+ <!-- Main Video Toggle -->
212
+ <div flex items-center gap-2>
213
+ <span text-sm text-gray-600 dark:text-gray-300>
214
+ {{ t("streams.pip.main") }}:
215
+ </span>
216
+ <button
217
+ class="px-3 py-1 text-sm rounded-l-md transition-colors" :class="[
218
+ pipMain === 'screen'
219
+ ? 'bg-blue-600 text-white'
220
+ : 'bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600',
221
+ ]"
222
+ @click="pipMain = 'screen'"
223
+ >
224
+ {{ t("streams.screen") }}
225
+ </button>
226
+ <button
227
+ class="px-3 py-1 text-sm rounded-r-md transition-colors" :class="[
228
+ pipMain === 'webcam'
229
+ ? 'bg-blue-600 text-white'
230
+ : 'bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600',
231
+ ]"
232
+ @click="pipMain = 'webcam'"
233
+ >
234
+ {{ t("streams.webcam") }}
235
+ </button>
236
+ </div>
237
+
238
+ <!-- PiP Position Selector -->
239
+ <div flex items-center gap-2>
240
+ <span text-sm text-gray-600 dark:text-gray-300>
241
+ {{ t("streams.pip.position") }}:
242
+ </span>
243
+ <div flex items-center gap-1>
244
+ <button
245
+ v-for="pos in pipPositionOptions"
246
+ :key="pos"
247
+ class="relative w-6 h-6 rounded transition-colors text-xs" :class="[
248
+ pipPosition === pos
249
+ ? 'bg-blue-600 text-white'
250
+ : 'bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600',
251
+ ]"
252
+ :title="t(`streams.pip.${pos.replace(/-/g, '_')}`)"
253
+ @click="pipPosition = pos"
254
+ >
255
+ <span
256
+ class="absolute w-2 h-2 bg-current rounded-sm" :class="[
257
+ pos.includes('top') ? 'top-0.5' : 'bottom-0.5',
258
+ pos.includes('left') ? 'left-0.5' : 'right-0.5',
259
+ ]"
260
+ />
261
+ </button>
262
+ </div>
263
+ </div>
264
+ </template>
265
+ </div>
266
+
267
+ <!-- Side by Side Layout -->
268
+ <div
269
+ v-if="!showPipMode"
270
+ flex flex-col md:flex-row
271
+ gap-4 w-full
272
+ >
273
+ <!-- Webcam Stream -->
160
274
  <div
161
- v-if="!webcamError"
162
- w-full
163
- aspect-video
164
- bg-black
165
- rounded-lg
166
- overflow-hidden
275
+ v-if="webcamStreamUrl"
276
+ flex-1
277
+ flex flex-col
278
+ items-center
167
279
  >
168
- <video
169
- ref="webcamVideoRef"
170
- controls
171
- muted
172
- playsinline
173
- class="w-full h-full object-contain"
174
- />
280
+ <h4
281
+ text-lg font-semibold
282
+ text-gray-900 dark:text-white
283
+ mb-2
284
+ >
285
+ {{ t("streams.webcam") }}
286
+ </h4>
287
+ <div
288
+ v-if="!webcamError"
289
+ w-full
290
+ aspect-video
291
+ bg-black
292
+ rounded-lg
293
+ overflow-hidden
294
+ >
295
+ <video
296
+ ref="webcamVideoRef"
297
+ controls
298
+ muted
299
+ playsinline
300
+ class="w-full h-full object-contain"
301
+ />
302
+ </div>
303
+ <div
304
+ v-else
305
+ w-full
306
+ aspect-video
307
+ bg-gray-200 dark:bg-gray-700
308
+ rounded-lg
309
+ flex items-center justify-center
310
+ >
311
+ <span text-gray-500 dark:text-gray-400>
312
+ {{ t("streams.unavailable") }}
313
+ </span>
314
+ </div>
175
315
  </div>
316
+
317
+ <!-- Screen Stream -->
176
318
  <div
177
- v-else
178
- w-full
179
- aspect-video
180
- bg-gray-200 dark:bg-gray-700
181
- rounded-lg
182
- flex items-center justify-center
319
+ v-if="screenStreamUrl"
320
+ flex-1
321
+ flex flex-col
322
+ items-center
183
323
  >
184
- <span text-gray-500 dark:text-gray-400>
185
- {{ t("streams.unavailable") }}
186
- </span>
324
+ <h4
325
+ text-lg font-semibold
326
+ text-gray-900 dark:text-white
327
+ mb-2
328
+ >
329
+ {{ t("streams.screen") }}
330
+ </h4>
331
+ <div
332
+ v-if="!screenError"
333
+ w-full
334
+ aspect-video
335
+ bg-black
336
+ rounded-lg
337
+ overflow-hidden
338
+ >
339
+ <video
340
+ ref="screenVideoRef"
341
+ controls
342
+ muted
343
+ playsinline
344
+ class="w-full h-full object-contain"
345
+ />
346
+ </div>
347
+ <div
348
+ v-else
349
+ w-full
350
+ aspect-video
351
+ bg-gray-200 dark:bg-gray-700
352
+ rounded-lg
353
+ flex items-center justify-center
354
+ >
355
+ <span text-gray-500 dark:text-gray-400>
356
+ {{ t("streams.unavailable") }}
357
+ </span>
358
+ </div>
187
359
  </div>
188
360
  </div>
189
361
 
190
- <!-- Screen Stream -->
362
+ <!-- Picture in Picture Layout -->
191
363
  <div
192
- v-if="screenStreamUrl"
193
- flex-1
194
- flex flex-col
195
- items-center
364
+ v-else
365
+ class="relative w-full"
196
366
  >
197
- <h4
198
- text-lg font-semibold
199
- text-gray-900 dark:text-white
200
- mb-2
201
- >
202
- {{ t("streams.screen") }}
203
- </h4>
367
+ <!-- Main Video -->
204
368
  <div
205
- v-if="!screenError"
206
369
  w-full
207
370
  aspect-video
208
371
  bg-black
209
372
  rounded-lg
210
373
  overflow-hidden
211
374
  >
212
- <video
213
- ref="screenVideoRef"
214
- controls
215
- muted
216
- playsinline
217
- class="w-full h-full object-contain"
218
- />
375
+ <template v-if="pipMain === 'screen'">
376
+ <video
377
+ v-if="!screenError"
378
+ ref="screenVideoRef"
379
+ controls
380
+ muted
381
+ playsinline
382
+ class="w-full h-full object-contain"
383
+ />
384
+ <div
385
+ v-else
386
+ w-full h-full
387
+ bg-gray-200 dark:bg-gray-700
388
+ flex items-center justify-center
389
+ >
390
+ <span text-gray-500 dark:text-gray-400>
391
+ {{ t("streams.unavailable") }}
392
+ </span>
393
+ </div>
394
+ </template>
395
+ <template v-else>
396
+ <video
397
+ v-if="!webcamError"
398
+ ref="webcamVideoRef"
399
+ controls
400
+ muted
401
+ playsinline
402
+ class="w-full h-full object-contain"
403
+ />
404
+ <div
405
+ v-else
406
+ w-full h-full
407
+ bg-gray-200 dark:bg-gray-700
408
+ flex items-center justify-center
409
+ >
410
+ <span text-gray-500 dark:text-gray-400>
411
+ {{ t("streams.unavailable") }}
412
+ </span>
413
+ </div>
414
+ </template>
219
415
  </div>
416
+
417
+ <!-- PiP Overlay Video -->
220
418
  <div
221
- v-else
222
- w-full
223
- aspect-video
224
- bg-gray-200 dark:bg-gray-700
225
- rounded-lg
226
- flex items-center justify-center
419
+ class="absolute w-1/4 aspect-video rounded-lg overflow-hidden shadow-lg border-2 border-white dark:border-gray-800" :class="[
420
+ pipPositionClass,
421
+ ]"
227
422
  >
228
- <span text-gray-500 dark:text-gray-400>
229
- {{ t("streams.unavailable") }}
230
- </span>
423
+ <template v-if="pipMain === 'screen'">
424
+ <video
425
+ v-if="!webcamError"
426
+ ref="webcamVideoRef"
427
+ controls
428
+ muted
429
+ playsinline
430
+ class="w-full h-full object-contain bg-black"
431
+ />
432
+ <div
433
+ v-else
434
+ w-full h-full
435
+ bg-gray-200 dark:bg-gray-700
436
+ flex items-center justify-center
437
+ >
438
+ <span text-xs text-gray-500 dark:text-gray-400>
439
+ {{ t("streams.unavailable") }}
440
+ </span>
441
+ </div>
442
+ </template>
443
+ <template v-else>
444
+ <video
445
+ v-if="!screenError"
446
+ ref="screenVideoRef"
447
+ controls
448
+ muted
449
+ playsinline
450
+ class="w-full h-full object-contain bg-black"
451
+ />
452
+ <div
453
+ v-else
454
+ w-full h-full
455
+ bg-gray-200 dark:bg-gray-700
456
+ flex items-center justify-center
457
+ >
458
+ <span text-xs text-gray-500 dark:text-gray-400>
459
+ {{ t("streams.unavailable") }}
460
+ </span>
461
+ </div>
462
+ </template>
231
463
  </div>
232
464
  </div>
233
465
  </div>
@@ -1 +0,0 @@
1
- import{h as t}from"./index-BK3vjQva.js";const a="0.78.2",c="https://github.com/xcpcio/xcpcio",T="d6f6c78af9",I="https://xcpcio.com",r="Board - XCPCIO",_="Rating - XCPCIO",O="Balloon - XCPCIO",C="Resolver - XCPCIO",i="Countdown - XCPCIO",A=t(()=>window?window.CDN_HOST:""),o=t(()=>window?window.DATA_HOST:""),d=t(()=>o.value.replace("/data/","/rating-data/")),e=t(()=>window?window.DATA_REGION:"");export{a as A,O as B,A as C,o as D,c as G,d as R,r as T,I as X,T as a,e as b,i as c,_ as d,C as e};
@@ -1 +0,0 @@
1
- import{_ as r,a}from"./NavBar-D7Ws8ePI.js";import{_}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c,o as s,a as o,b as m,r as p,F as i}from"./index-BK3vjQva.js";import"./Tooltip.vue_vue_type_script_setup_true_lang-DVShQdNz.js";import"./constant-DwAKIVXi.js";const u={},l={"py-10":"","text-gray-700":"","dark:text-gray-200":""};function f(d,g){const e=r,t=p("RouterView"),n=a;return s(),c(i,null,[o(e),m("main",l,[o(t),o(n)])],64)}const F=_(u,[["render",f]]);export{F as default};
@@ -1 +0,0 @@
1
- const t={button:{about:{t:0,b:{t:2,i:[{t:3}],s:"About"}},back:{t:0,b:{t:2,i:[{t:3}],s:"Back"}},go:{t:0,b:{t:2,i:[{t:3}],s:"GO"}},home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},confirm:{t:0,b:{t:2,i:[{t:3}],s:"Confirm"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancel"}},toggle_dark:{t:0,b:{t:2,i:[{t:3}],s:"Toggle dark mode"}},toggle_langs:{t:0,b:{t:2,i:[{t:3}],s:"Change languages"}}},intro:{desc:{t:0,b:{t:2,i:[{t:3}],s:"Opinionated Vite Starter Template"}},"dynamic-route":{t:0,b:{t:2,i:[{t:3}],s:"Demo of dynamic route"}},hi:{t:0,b:{t:2,i:[{t:3,v:"Hi, "},{t:4,k:"name"},{t:3,v:"!"}]}},aka:{t:0,b:{t:2,i:[{t:3}],s:"Also known as"}},"whats-your-name":{t:0,b:{t:2,i:[{t:3}],s:"What's your name?"}}},"not-found":{t:0,b:{t:2,i:[{t:3}],s:"Not found"}},common:{loading:{t:0,b:{t:2,i:[{t:3}],s:"Loading"}},colon:{t:0,b:{t:2,i:[{t:3}],s:":"}}},index:{start:{t:0,b:{t:2,i:[{t:3}],s:"StartTime"}},duration:{t:0,b:{t:2,i:[{t:3}],s:"Duration"}}},type_menu:{rank:{t:0,b:{t:2,i:[{t:3}],s:"Rank"}},overview:{t:0,b:{t:2,i:[{t:3}],s:"Overview"}},submissions:{t:0,b:{t:2,i:[{t:3}],s:"Submissions"}},statistics:{t:0,b:{t:2,i:[{t:3}],s:"Statistics"}},streams:{t:0,b:{t:2,i:[{t:3}],s:"Streams"}},balloon:{t:0,b:{t:2,i:[{t:3}],s:"Balloon"}},resolver:{t:0,b:{t:2,i:[{t:3}],s:"Resolver"}},filter:{t:0,b:{t:2,i:[{t:3}],s:"Filter"}},options:{t:0,b:{t:2,i:[{t:3}],s:"Options"}},utility:{t:0,b:{t:2,i:[{t:3}],s:"Utility"}},countdown:{t:0,b:{t:2,i:[{t:3}],s:"Countdown"}}},streams:{webcam:{t:0,b:{t:2,i:[{t:3}],s:"Webcam"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Stream unavailable"}}},utility:{tools:{t:0,b:{t:2,i:[{t:3}],s:"Tools"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export"}}},standings:{start_time:{t:0,b:{t:2,i:[{t:3}],s:"Start"}},end_time:{t:0,b:{t:2,i:[{t:3}],s:"End"}},elapsed:{t:0,b:{t:2,i:[{t:3}],s:"Elapsed"}},remaining:{t:0,b:{t:2,i:[{t:3}],s:"Remaining"}},place:{t:0,b:{t:2,i:[{t:3}],s:"Place"}},team:{t:0,b:{t:2,i:[{t:3}],s:"Team"}},solved:{t:0,b:{t:2,i:[{t:3}],s:"Solved"}},penalty:{t:0,b:{t:2,i:[{t:3}],s:"Penalty"}},dirt:{t:0,b:{t:2,i:[{t:3}],s:"Dirt"}},se:{t:0,b:{t:2,i:[{t:3}],s:"SE"}},statistics:{submitted:{t:0,b:{t:2,i:[{t:3}],s:"Submitted"}},attempted:{t:0,b:{t:2,i:[{t:3}],s:"Attempted"}},accepted:{t:0,b:{t:2,i:[{t:3}],s:"Accepted"}},dirt:{t:0,b:{t:2,i:[{t:3}],s:"Dirt"}},se:{t:0,b:{t:2,i:[{t:3}],s:"SE"}},first_solved:{t:0,b:{t:2,i:[{t:3}],s:"First Solved"}},last_solved:{t:0,b:{t:2,i:[{t:3}],s:"Last Solved"}},head_data:{problems:{t:0,b:{t:2,i:[{t:3}],s:"Problems"}},organizations:{t:0,b:{t:2,i:[{t:3}],s:"Organizations"}},teams:{t:0,b:{t:2,i:[{t:3}],s:"Teams"}},submissions:{t:0,b:{t:2,i:[{t:3}],s:"Submissions"}}},submit_heatmap:{t:0,b:{t:2,i:[{t:3}],s:"Submit Heatmap"}}},options:{calculation_of_penalty:{t:0,b:{t:2,i:[{t:3}],s:"Calculation Of Penalty"}},in_minutes:{t:0,b:{t:2,i:[{t:3}],s:"in minutes"}},in_seconds:{t:0,b:{t:2,i:[{t:3}],s:"in seconds"}},accumulate_in_seconds_and_finally_to_the_minute:{t:0,b:{t:2,i:[{t:3}],s:"Accumulate in seconds and finally to the minute"}}}},submissions:{total_submissions:{t:0,b:{t:2,i:[{t:3}],s:"Total Submissions"}}},team_info:{rank:{t:0,b:{t:2,i:[{t:3}],s:"Rank"}},team_name:{t:0,b:{t:2,i:[{t:3}],s:"Team Name"}},organization:{t:0,b:{t:2,i:[{t:3}],s:"Organization"}},group:{t:0,b:{t:2,i:[{t:3}],s:"Group"}},members:{t:0,b:{t:2,i:[{t:3}],s:"Members"}},coaches:{t:0,b:{t:2,i:[{t:3}],s:"Coaches"}},location:{t:0,b:{t:2,i:[{t:3}],s:"Location"}},award:{t:0,b:{t:2,i:[{t:3}],s:"Award"}}},medal:{gold:{t:0,b:{t:2,i:[{t:3}],s:"Gold Medal"}},silver:{t:0,b:{t:2,i:[{t:3}],s:"Silver Medal"}},bronze:{t:0,b:{t:2,i:[{t:3}],s:"Bronze Medal"}},honorable:{t:0,b:{t:2,i:[{t:3}],s:"Honorable Mention"}}}};export{t as default};
@@ -1 +0,0 @@
1
- import{_ as p}from"./Resolver-DVrWZP6x.js";import{_ as l}from"./DataSourceInput.vue_vue_type_script_setup_true_lang-DE4jHYLG.js";import{b as d}from"./use-vmodel-C-KfQ0NC.js";import{e as f,c as e,o as t,F as h,q as c,u as r,b as v,a as n}from"./index-BK3vjQva.js";import{b as a}from"./route-block-B_A1xBdJ.js";import{_ as k}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./rank-BsQbvMFp.js";import"./dayjs-sKjsZKv5.js";import"./person-CITgECKA.js";import"./constant-DwAKIVXi.js";import"./TheInput.vue_vue_type_script_setup_true_lang-DrpFacxq.js";const x={key:0},b={"mt-20":""},g={key:1},y=f({__name:"CustomResolver",setup(m){const o=d();return(s,B)=>{const u=l,i=p;return t(),e(h,null,[r(o).length===0?(t(),e("div",x,[v("div",b,[n(u)])])):c("",!0),r(o).length>0?(t(),e("div",g,[n(i,{"data-source-url":r(o)},null,8,["data-source-url"])])):c("",!0)],64)}}}),_={};function C(m,o){const s=y;return t(),e("div",null,[n(s)])}typeof a=="function"&&a(_);const Q=k(_,[["render",C]]);export{Q as default};
@@ -1 +0,0 @@
1
- import{_ as u}from"./Board-DDliK7fC.js";import{_ as i}from"./DataSourceInput.vue_vue_type_script_setup_true_lang-DE4jHYLG.js";import{b as f}from"./use-vmodel-C-KfQ0NC.js";import{e as l,c as e,o as t,a as n,q as d,u as a,F as B,G as k}from"./index-BK3vjQva.js";import{b as c}from"./route-block-B_A1xBdJ.js";import{_ as x}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./pagination-BkDeG1vq.js";import"./Tooltip.vue_vue_type_script_setup_true_lang-DVShQdNz.js";import"./TheInput.vue_vue_type_script_setup_true_lang-DrpFacxq.js";import"./rank-BsQbvMFp.js";import"./dayjs-sKjsZKv5.js";import"./person-CITgECKA.js";import"./ContestStateBadge-DlqaOjhy.js";import"./constant-DwAKIVXi.js";const h={key:0},C=l({__name:"CustomBoard",setup(m){const o=f();return(r,g)=>{const _=i,p=u;return t(),e(B,null,[n(_),a(o).length>0?(t(),e("div",h,[n(p,{"data-source-url":a(o)},null,8,["data-source-url"])])):d("",!0)],64)}}}),s={};function b(m,o){const r=C;return t(),k(r)}typeof c=="function"&&c(s);const j=x(s,[["render",b]]);export{j as default};
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512">
2
- <path fill="#888888"
3
- d="M391 307.27c32.75-46.35 46.59-101.63 39-155.68C416.47 55.59 327.38-11.54 231.38 2S68.24 104.53 81.73 200.53c7.57 53.89 36.12 103.16 80.37 138.74c26.91 21.64 57.59 36.1 86.05 41.33l-8.36 45.23a8 8 0 0 0 9 9.38L279 431c15.9 35.87 41.65 60.48 78.41 75l14.88 5.88l11.77-29.75l-14.88-5.89c-26.35-10.42-44.48-26.16-57-49.92l21.84-3.07a8 8 0 0 0 6.05-11.49l-20.49-41.16c25.98-12.87 51.49-35.18 71.42-63.33Zm-160.82 15.66c-41.26-16.32-76.3-52.7-91.45-94.94l-5.4-15.06l30.12-10.8l5.4 15.06c14.5 40.44 47.27 65.77 73.1 76l14.88 5.88l-11.77 29.76Z" />
4
- </svg>
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512">
2
- <path fill="#888888"
3
- d="M391 307.27c32.75-46.35 46.59-101.63 39-155.68C416.47 55.59 327.38-11.54 231.38 2S68.24 104.53 81.73 200.53c7.57 53.89 36.12 103.16 80.37 138.74c26.91 21.64 57.59 36.1 86.05 41.33l-8.36 45.23a8 8 0 0 0 9 9.38L279 431c15.9 35.87 41.65 60.48 78.41 75l14.88 5.88l11.77-29.75l-14.88-5.89c-26.35-10.42-44.48-26.16-57-49.92l21.84-3.07a8 8 0 0 0 6.05-11.49l-20.49-41.16c25.98-12.87 51.49-35.18 71.42-63.33Zm-160.82 15.66c-41.26-16.32-76.3-52.7-91.45-94.94l-5.4-15.06l30.12-10.8l5.4 15.06c14.5 40.44 47.27 65.77 73.1 76l14.88 5.88l-11.77 29.76Z" />
4
- </svg>