@xcpcio/board-app 0.75.2 → 0.76.1

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 (47) hide show
  1. package/dist/404.html +1 -1
  2. package/dist/assets/{Balloon.vue_vue_type_script_setup_true_lang-Cw5mKlP6.js → Balloon.vue_vue_type_script_setup_true_lang-d2G-u5vg.js} +1 -1
  3. package/dist/assets/{Board-JvA5b1h4.css → Board-BwQ18wc3.css} +1 -1
  4. package/dist/assets/{Board-B_focp30.js → Board-DJV0AVBI.js} +70 -70
  5. package/dist/assets/ContestStateBadge-DwpYB8jU.js +1 -0
  6. package/dist/assets/{Countdown-_e1WmD1Z.js → Countdown-C0ehxYV6.js} +1 -1
  7. package/dist/assets/{DataSourceInput.vue_vue_type_script_setup_true_lang-B1XI4zsB.js → DataSourceInput.vue_vue_type_script_setup_true_lang-DsbNshKm.js} +1 -1
  8. package/dist/assets/{NavBar-DqffB-To.js → NavBar-yKXoYQ8Z.js} +1 -1
  9. package/dist/assets/{Resolver-Cdswx7dD.js → Resolver-P35Bzy4i.js} +1 -1
  10. package/dist/assets/{RightArrowIcon-ASzKllar.js → RightArrowIcon-DgGuAJYR.js} +1 -1
  11. package/dist/assets/{TheInput.vue_vue_type_script_setup_true_lang-C3GiJV4o.js → TheInput.vue_vue_type_script_setup_true_lang-DkbZF4tx.js} +1 -1
  12. package/dist/assets/Tooltip.vue_vue_type_script_setup_true_lang-FDvNZrD3.js +27 -0
  13. package/dist/assets/{_...all_-D-RS9GfB.js → _...all_-DDWfwyFN.js} +1 -1
  14. package/dist/assets/{_...all_-DncsZYI5.js → _...all_-DxUCPQBM.js} +1 -1
  15. package/dist/assets/{board-layout-_R9n85-s.js → board-layout-GWm9-tdD.js} +1 -1
  16. package/dist/assets/constant-BtV7X_BN.js +1 -0
  17. package/dist/assets/{dayjs-CDQeLdpE.js → dayjs-ZD42Nn2w.js} +1 -1
  18. package/dist/assets/default-BZg96Ko6.js +1 -0
  19. package/dist/assets/{headless-BOt-atch.js → headless-vYwzdT_U.js} +1 -1
  20. package/dist/assets/index-BDgEyGgl.js +1 -0
  21. package/dist/assets/{index-Cs7d6jbK.js → index-BctgVEkb.js} +1 -1
  22. package/dist/assets/index-BdEyt6rO.js +15 -0
  23. package/dist/assets/index-DTBbtQqs.js +1 -0
  24. package/dist/assets/{index-Di6laDi4.js → index-IrmG24Wk.js} +1 -1
  25. package/dist/assets/{index-Bwa4u3Zk.js → index-L2S2y7PX.js} +1 -1
  26. package/dist/assets/{index-C0X9msh5.js → index-Op11lXUa.js} +1 -1
  27. package/dist/assets/{index-layout-ClOXvNqI.js → index-layout-CaWd8ZGw.js} +1 -1
  28. package/dist/assets/{pagination-BWHNOXqm.js → pagination-TofUkJg0.js} +1 -1
  29. package/dist/assets/{person-hQawOM24.js → person-BGcNDO7L.js} +1 -1
  30. package/dist/assets/rank-BLNhEN4T.js +1 -0
  31. package/dist/assets/use-vmodel-Czj8tqqP.js +20 -0
  32. package/dist/index.html +1 -1
  33. package/package.json +16 -16
  34. package/src/auto-imports.d.ts +339 -338
  35. package/src/components/board/Board.vue +1 -1
  36. package/src/components/board/Export.vue +30 -18
  37. package/src/composables/useRouteQueryWithoutParam.ts +2 -2
  38. package/src/typed-router.d.ts +96 -27
  39. package/dist/assets/ContestStateBadge-2eB9UgeA.js +0 -1
  40. package/dist/assets/Tooltip.vue_vue_type_script_setup_true_lang-BzjHrCex.js +0 -27
  41. package/dist/assets/constant-B4A9F229.js +0 -1
  42. package/dist/assets/default-6Bf5Es_S.js +0 -1
  43. package/dist/assets/index-99Hkl89C.js +0 -15
  44. package/dist/assets/index-C9dK3x8P.js +0 -1
  45. package/dist/assets/index-RAMlsvVJ.js +0 -1
  46. package/dist/assets/rank-DGk2KbBp.js +0 -1
  47. package/dist/assets/use-vmodel-BwR2Z-3A.js +0 -20
@@ -405,7 +405,7 @@ const widthClass = "sm:w-[1260px] xl:w-screen";
405
405
  >
406
406
  <div class="max-w-[92%]">
407
407
  <img
408
- :src="getImageSource(rank.contest.banner, `${DATA_HOST}${route.path.slice(1)}`)"
408
+ :src="getImageSource(rank.contest.banner, `${DATA_HOST}`)"
409
409
  class="w-screen"
410
410
  alt="banner"
411
411
  >
@@ -40,6 +40,8 @@ const btnDisable = ref({
40
40
  ICPCStandingsCsvDownload: false,
41
41
  });
42
42
 
43
+ const includeFakeRussianTeams = ref(false);
44
+
43
45
  async function waitDisabled() {
44
46
  await nextTick();
45
47
  await sleep(16);
@@ -50,7 +52,7 @@ async function onClickForCfDatDownload() {
50
52
  await waitDisabled();
51
53
 
52
54
  const converter = new CodeforcesGymGhostDATConverter();
53
- const dat = converter.convert(rank.value);
55
+ const dat = converter.convert(rank.value, { includeFakeRussianTeams: includeFakeRussianTeams.value });
54
56
  const blob = new Blob([dat], { type: "text/plain;charset=utf-8" });
55
57
  FileSaver.saveAs(blob, "contest.dat");
56
58
 
@@ -67,7 +69,7 @@ async function onClickForCfDatCopyToClipboard() {
67
69
  await waitDisabled();
68
70
 
69
71
  const converter = new CodeforcesGymGhostDATConverter();
70
- const dat = converter.convert(rank.value);
72
+ const dat = converter.convert(rank.value, { includeFakeRussianTeams: includeFakeRussianTeams.value });
71
73
  copy(dat);
72
74
 
73
75
  btnDisable.value.CfDatCopy = false;
@@ -117,23 +119,33 @@ async function onClickForICPCStandingsCsvDownload() {
117
119
  >
118
120
  <div
119
121
  v-if="currentItem.value === 'cf-dat'"
120
- flex flex-row justify-center gap-4
122
+ flex flex-col gap-4
121
123
  >
122
- <button
123
- :disabled="btnDisable.CfDatDownload"
124
- btn
125
- @click="onClickForCfDatDownload"
126
- >
127
- Download
128
- </button>
129
-
130
- <button
131
- :disabled="btnDisable.CfDatCopy"
132
- btn
133
- @click="onClickForCfDatCopyToClipboard"
134
- >
135
- Copy to Clipboard
136
- </button>
124
+ <div flex justify-center>
125
+ <TheCheckbox v-model="includeFakeRussianTeams">
126
+ <span ml-3 text-sm font-medium text-gray-900 dark:text-gray-300>
127
+ Include fake Russian teams (100 placeholder teams)
128
+ </span>
129
+ </TheCheckbox>
130
+ </div>
131
+
132
+ <div flex flex-row justify-center gap-4>
133
+ <button
134
+ :disabled="btnDisable.CfDatDownload"
135
+ btn
136
+ @click="onClickForCfDatDownload"
137
+ >
138
+ Download
139
+ </button>
140
+
141
+ <button
142
+ :disabled="btnDisable.CfDatCopy"
143
+ btn
144
+ @click="onClickForCfDatCopyToClipboard"
145
+ >
146
+ Copy to Clipboard
147
+ </button>
148
+ </div>
137
149
  </div>
138
150
 
139
151
  <div
@@ -43,7 +43,7 @@ export interface ReactiveRouteOptionsWithTransform<V, R> extends ReactiveRouteOp
43
43
  }
44
44
 
45
45
  export function useRouteQueryWithoutParam(
46
- name: string
46
+ name: string,
47
47
  ): Ref<undefined | null | string | string[]>;
48
48
 
49
49
  export function useRouteQueryWithoutParam<
@@ -52,7 +52,7 @@ export function useRouteQueryWithoutParam<
52
52
  >(
53
53
  name: string,
54
54
  defaultValue?: MaybeRefOrGetter<T>,
55
- options?: ReactiveRouteOptionsWithTransform<T, K>
55
+ options?: ReactiveRouteOptionsWithTransform<T, K>,
56
56
  ): Ref<K>;
57
57
 
58
58
  export function useRouteQueryWithoutParam<
@@ -1,10 +1,15 @@
1
1
  /* eslint-disable */
2
2
  /* prettier-ignore */
3
3
  // @ts-nocheck
4
- // Generated by unplugin-vue-router. ‼️ DO NOT MODIFY THIS FILE ‼️
4
+ // noinspection ES6UnusedImports
5
+ // Generated by unplugin-vue-router. !! DO NOT MODIFY THIS FILE !!
5
6
  // It's recommended to commit this file.
6
7
  // Make sure to add this file to your tsconfig.json file as an "includes" or "files" entry.
7
8
 
9
+ declare module 'vue-router/auto-resolver' {
10
+ export type ParamParserCustom = never
11
+ }
12
+
8
13
  declare module 'vue-router/auto-routes' {
9
14
  import type {
10
15
  RouteRecordInfo,
@@ -18,19 +23,67 @@ declare module 'vue-router/auto-routes' {
18
23
  * Route name map generated by unplugin-vue-router
19
24
  */
20
25
  export interface RouteNamedMap {
21
- '/': RouteRecordInfo<'/', '/', Record<never, never>, Record<never, never>>,
22
- '/[...all]': RouteRecordInfo<'/[...all]', '/:all(.*)', { all: ParamValue<true> }, { all: ParamValue<false> }>,
23
- '/balloon/': RouteRecordInfo<'/balloon/', '/balloon', Record<never, never>, Record<never, never>>,
24
- '/board/': RouteRecordInfo<'/board/', '/board', Record<never, never>, Record<never, never>>,
25
- '/countdown/': RouteRecordInfo<'/countdown/', '/countdown', Record<never, never>, Record<never, never>>,
26
- '/rating/': RouteRecordInfo<'/rating/', '/rating', Record<never, never>, Record<never, never>>,
27
- '/rating/[...all]': RouteRecordInfo<'/rating/[...all]', '/rating/:all(.*)', { all: ParamValue<true> }, { all: ParamValue<false> }>,
28
- '/resolver/': RouteRecordInfo<'/resolver/', '/resolver', Record<never, never>, Record<never, never>>,
26
+ '/': RouteRecordInfo<
27
+ '/',
28
+ '/',
29
+ Record<never, never>,
30
+ Record<never, never>,
31
+ | never
32
+ >,
33
+ '/[...all]': RouteRecordInfo<
34
+ '/[...all]',
35
+ '/:all(.*)',
36
+ { all: ParamValue<true> },
37
+ { all: ParamValue<false> },
38
+ | never
39
+ >,
40
+ '/balloon/': RouteRecordInfo<
41
+ '/balloon/',
42
+ '/balloon',
43
+ Record<never, never>,
44
+ Record<never, never>,
45
+ | never
46
+ >,
47
+ '/board/': RouteRecordInfo<
48
+ '/board/',
49
+ '/board',
50
+ Record<never, never>,
51
+ Record<never, never>,
52
+ | never
53
+ >,
54
+ '/countdown/': RouteRecordInfo<
55
+ '/countdown/',
56
+ '/countdown',
57
+ Record<never, never>,
58
+ Record<never, never>,
59
+ | never
60
+ >,
61
+ '/rating/': RouteRecordInfo<
62
+ '/rating/',
63
+ '/rating',
64
+ Record<never, never>,
65
+ Record<never, never>,
66
+ | never
67
+ >,
68
+ '/rating/[...all]': RouteRecordInfo<
69
+ '/rating/[...all]',
70
+ '/rating/:all(.*)',
71
+ { all: ParamValue<true> },
72
+ { all: ParamValue<false> },
73
+ | never
74
+ >,
75
+ '/resolver/': RouteRecordInfo<
76
+ '/resolver/',
77
+ '/resolver',
78
+ Record<never, never>,
79
+ Record<never, never>,
80
+ | never
81
+ >,
29
82
  }
30
83
 
31
84
  /**
32
85
  * Route file to route info map by unplugin-vue-router.
33
- * Used by the volar plugin to automatically type useRoute()
86
+ * Used by the \`sfc-typed-router\` Volar plugin to automatically type \`useRoute()\`.
34
87
  *
35
88
  * Each key is a file path relative to the project root with 2 properties:
36
89
  * - routes: union of route names of the possible routes when in this page (passed to useRoute<...>())
@@ -40,42 +93,58 @@ declare module 'vue-router/auto-routes' {
40
93
  */
41
94
  export interface _RouteFileInfoMap {
42
95
  'src/pages/index.vue': {
43
- routes: '/'
44
- views: never
96
+ routes:
97
+ | '/'
98
+ views:
99
+ | never
45
100
  }
46
101
  'src/pages/[...all].vue': {
47
- routes: '/[...all]'
48
- views: never
102
+ routes:
103
+ | '/[...all]'
104
+ views:
105
+ | never
49
106
  }
50
107
  'src/pages/balloon/index.vue': {
51
- routes: '/balloon/'
52
- views: never
108
+ routes:
109
+ | '/balloon/'
110
+ views:
111
+ | never
53
112
  }
54
113
  'src/pages/board/index.vue': {
55
- routes: '/board/'
56
- views: never
114
+ routes:
115
+ | '/board/'
116
+ views:
117
+ | never
57
118
  }
58
119
  'src/pages/countdown/index.vue': {
59
- routes: '/countdown/'
60
- views: never
120
+ routes:
121
+ | '/countdown/'
122
+ views:
123
+ | never
61
124
  }
62
125
  'src/pages/rating/index.vue': {
63
- routes: '/rating/'
64
- views: never
126
+ routes:
127
+ | '/rating/'
128
+ views:
129
+ | never
65
130
  }
66
131
  'src/pages/rating/[...all].vue': {
67
- routes: '/rating/[...all]'
68
- views: never
132
+ routes:
133
+ | '/rating/[...all]'
134
+ views:
135
+ | never
69
136
  }
70
137
  'src/pages/resolver/index.vue': {
71
- routes: '/resolver/'
72
- views: never
138
+ routes:
139
+ | '/resolver/'
140
+ views:
141
+ | never
73
142
  }
74
143
  }
75
144
 
76
145
  /**
77
146
  * Get a union of possible route names in a certain route component file.
78
- * Used by the volar plugin to automatically type useRoute()
147
+ * Used by the \`sfc-typed-router\` Volar plugin to automatically type \`useRoute()\`.
79
148
  *
80
149
  * @internal
81
150
  */
@@ -1 +0,0 @@
1
- import{j as i,k as A}from"./use-vmodel-BwR2Z-3A.js";import{e as U,h as F,m as n,U as G,D as V,c as v,o as g,b as c,I,n as D,u as x,q as E,F as X,t as k}from"./index-99Hkl89C.js";import{c as j,g as q}from"./dayjs-CDQeLdpE.js";import{_ as C}from"./_plugin-vue_export-helper-DlAUqK2U.js";function ae(s,e){return s?.url?!e||s.url.startsWith("http")?s.url:new URL(s.url,e==="/"?window.location.host:e).toString():s?.base64?`data:image/${s.type??"png"};base64,${s.base64}`:""}const H=U({__name:"Progress",props:{width:null,state:null,needScroll:{type:Boolean},rank:null,rankOptions:null,elapsedTime:null},emits:["update:rank-options"],setup(s,{emit:e}){const t=s,M=e,h=F({get(){return t.rankOptions},set(l){M("update:rank-options",l)}}),N=F(()=>{switch(t.state){case i.PENDING:return"am-progress-bar-secondary";case i.RUNNING:return"am-progress-bar-success";case i.FROZEN:return"am-progress-bar-danger";case i.FINISHED:return"am-progress-bar-primary";case i.PAUSED:return"am-progress-bar-danger"}return""}),r=n(!1),S=n(!1),m=n(0),_=n(t.width),w=n(0),d=A(),o=n(null),L=n(null),p=n(null),T=n(null),R=n(null);function $(l){S.value=!0;const f=l.clientX-p.value.offsetLeft,b=W=>{if(!S.value)return;r.value=!0;let a=W.clientX-f;a=Math.max(a,0),a=Math.min(a,o.value.offsetWidth-p.value.offsetWidth);const B=o.value.offsetWidth*Number.parseInt(L.value.style?.width)*.01;a>=B&&(a=B,r.value=!1);let u=0;a>0&&(u=Math.round((a+p.value.offsetWidth)/o.value.offsetWidth*1e4)),u>1e4&&(u=1e4),u===1e4&&(r.value=!1),window.getSelection()?.removeAllRanges(),m.value=u,w.value=a,_.value=u*.01},y=()=>{document.removeEventListener("mouseup",y),document.removeEventListener("mousemove",b),S.value=!1,r.value===!0?(d.value=m.value,h.value?.setWidth(m.value,t.rank.contest)):(d.value=void 0,h.value?.disableFilterSubmissionByTimestamp())};document.addEventListener("mousemove",b),document.addEventListener("mouseup",y)}function z(){const l=t.rank.contest.getStartTime(),f=t.rank.contest.getEndTime(),b=f.unix()-l.unix(),y=Math.floor(b*_.value*.01),W=j(),a=Math.max(0,Math.min(W.unix(),f.unix())-l.unix());return q(Math.min(y,a))}function O(){return r.value===!0?z():t.elapsedTime}function P(){return r.value===!0?`${Math.max(0,w.value)}px`:`max(calc(0%), min(calc(${t.width}%), calc(100% - 10px)))`}return G(()=>{t.needScroll===!0&&(o.value.onmouseenter=()=>{T.value.classList.add("in")},o.value.onmouseleave=()=>{T.value.classList.remove("in")}),d.value!==-1?(r.value=!0,m.value=Math.max(0,Math.min(1e4,d.value)),_.value=m.value*.01,w.value=_.value*.01*o.value.offsetWidth-p.value.offsetWidth,h.value?.setWidth(d.value,t.rank.contest)):h.value?.disableFilterSubmissionByTimestamp()}),V(()=>{}),(l,f)=>(g(),v("div",{ref_key:"scroll",ref:o,class:"am-progress am-progress-striped am-active","w-full":"",style:{position:"relative"}},[c("div",{ref_key:"mask",ref:L,class:D(["am-progress-bar",[x(N)]]),style:I({width:`${t.width}%`})},[t.needScroll?(g(),v(X,{key:0},[c("div",{ref_key:"tooltip",ref:T,class:"tooltip tooltip-top",style:I({marginLeft:"-32px",bottom:"22px",left:P()})},[c("div",{ref_key:"tooltipInner",ref:R,class:"tooltip-inner"},k(O()),513)],4),c("div",{ref_key:"bar",ref:p,class:D(["am-progress-bar am-progress-cursor am-progress-scroll-size z-99",[x(N)]]),style:I({left:P()}),onMousedown:$},null,38)],64)):E("",!0)],6)],512))}}),ne=C(H,[["__scopeId","data-v-4607820e"]]),J={flex:"","flex-row":"","items-center":"","justify-center":""},Q={key:0,"ml-2":""},Z={key:1,"ml-2":""},K=U({__name:"ContestStateBadge",props:{state:null,pendingTime:null,pausedTime:null},setup(s){const e=s;return(t,M)=>(g(),v("div",J,[c("div",{class:D(["label",e.state])},null,2),c("div",null,k(e.state),1),e.pendingTime&&e.state===x(i).PENDING?(g(),v("div",Q,k(e.pendingTime),1)):E("",!0),e.pausedTime&&e.state===x(i).PAUSED?(g(),v("div",Z,k(e.pausedTime),1)):E("",!0)]))}}),re=C(K,[["__scopeId","data-v-68586c4d"]]);export{re as _,ne as a,ae as g};