@algoux/standard-ranklist-renderer-component-vue 0.6.2 → 0.6.3

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.
package/README.md CHANGED
@@ -94,6 +94,7 @@ Use `Modal` directly when you want custom modal content. `Ranklist` exposes scop
94
94
  - `columnBordered`: adds column separators controlled by CSS variables.
95
95
  - `emptyStatusPlaceholder`: renders a custom string in no-submission status cells.
96
96
  - `userAvatarPlacement`: chooses whether the default user avatar renders in the user column or, when `splitOrganization` is enabled, in the organization column.
97
+ - `languages`: passes an explicit language priority list to i18n text resolution. Leave it unset to use the browser language list; pass it to `Ranklist`, `DefaultUserModal`, and `DefaultSolutionModal` when rendering outside the browser or when you need a forced language.
97
98
 
98
99
  ```vue
99
100
  <script setup lang="ts">
@@ -121,6 +122,7 @@ const columnTitles = {
121
122
  column-bordered
122
123
  empty-status-placeholder="·"
123
124
  user-avatar-placement="organization"
125
+ :languages="['zh-CN']"
124
126
  :column-titles="columnTitles"
125
127
  />
126
128
  </template>
@@ -1,4 +1,5 @@
1
1
  import type * as srk from '@algoux/standard-ranklist';
2
+ import { resolveText } from '@algoux/standard-ranklist-utils';
2
3
  import { calculateDirtPercentage, calculateSEValue, getProblemHeaderBackgroundImage } from '@algoux/standard-ranklist-renderer-component-core';
3
4
  import type { ProblemStatisticsFooter, RanklistColumnTitles, RankValue, SolutionClickPayload, StaticRanklistRow, UserClickPayload } from '@algoux/standard-ranklist-renderer-component-core';
4
5
  declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
@@ -74,6 +75,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
74
75
  required: false;
75
76
  default: string;
76
77
  };
78
+ languages: {
79
+ type: ArrayConstructor;
80
+ required: false;
81
+ };
77
82
  }>, {
78
83
  props: any;
79
84
  emit: (event: "userClick" | "solutionClick", ...args: any[]) => void;
@@ -90,6 +95,7 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
90
95
  tooltip: string;
91
96
  }[];
92
97
  formatAssetUrl: (url: string, field: string) => string;
98
+ resolveDisplayText: (text: Parameters<typeof resolveText>[0]) => any;
93
99
  getRankValues: (row: StaticRanklistRow) => RankValue[];
94
100
  getRankText: (rankValue: RankValue, row: StaticRanklistRow) => number | "" | "*";
95
101
  isSeriesSegmentedColumn: (series: srk.RankSeries | undefined) => boolean;
@@ -111,7 +117,6 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
111
117
  emitSolutionClick: (payloadOrRow: SolutionClickPayload | StaticRanklistRow, rowIndex?: number | undefined, status?: srk.RankProblemStatus | undefined, problemIndex?: number | undefined, event?: MouseEvent | undefined) => void;
112
118
  readonly formatTimeDuration: any;
113
119
  readonly numberToAlphabet: any;
114
- readonly resolveText: any;
115
120
  readonly calculateDirtPercentage: typeof calculateDirtPercentage;
116
121
  readonly calculateSEValue: typeof calculateSEValue;
117
122
  readonly getProblemHeaderBackgroundImage: typeof getProblemHeaderBackgroundImage;
@@ -129,6 +134,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
129
134
  required: false;
130
135
  default: any;
131
136
  };
137
+ languages: {
138
+ type: ArrayConstructor;
139
+ required: false;
140
+ };
132
141
  }>, {
133
142
  props: any;
134
143
  alias: import("vue").ComputedRef<any>;
@@ -149,6 +158,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
149
158
  required: false;
150
159
  default: any;
151
160
  };
161
+ languages: {
162
+ type: ArrayConstructor;
163
+ required: false;
164
+ };
152
165
  }>> & Readonly<{}>, {
153
166
  theme: string;
154
167
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -200,6 +213,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
200
213
  required: false;
201
214
  default: null;
202
215
  };
216
+ languages: {
217
+ type: ArrayConstructor;
218
+ required: false;
219
+ };
203
220
  }>, {
204
221
  props: any;
205
222
  fbStar: string;
@@ -287,6 +304,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
287
304
  required: false;
288
305
  default: null;
289
306
  };
307
+ languages: {
308
+ type: ArrayConstructor;
309
+ required: false;
310
+ };
290
311
  }>> & Readonly<{}>, {
291
312
  statusCellPreset: string;
292
313
  statusColorAsText: boolean;
@@ -337,13 +358,17 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
337
358
  required: false;
338
359
  default: boolean;
339
360
  };
361
+ languages: {
362
+ type: ArrayConstructor;
363
+ required: false;
364
+ };
340
365
  }>, {
341
366
  props: any;
342
367
  name: import("vue").ComputedRef<any>;
343
368
  userMarkers: import("vue").ComputedRef<any>;
344
369
  resolvedMarkers: import("vue").ComputedRef<any>;
370
+ resolveDisplayText: (text: unknown) => any;
345
371
  emitUserClick: (event: MouseEvent) => void;
346
- readonly resolveText: any;
347
372
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
348
373
  user: {
349
374
  type: null;
@@ -389,6 +414,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
389
414
  required: false;
390
415
  default: boolean;
391
416
  };
417
+ languages: {
418
+ type: ArrayConstructor;
419
+ required: false;
420
+ };
392
421
  }>> & Readonly<{}>, {
393
422
  theme: string;
394
423
  markers: unknown[];
@@ -468,6 +497,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
468
497
  required: false;
469
498
  default: string;
470
499
  };
500
+ languages: {
501
+ type: ArrayConstructor;
502
+ required: false;
503
+ };
471
504
  }>> & Readonly<{
472
505
  onUserClick?: ((...args: any[]) => any) | undefined;
473
506
  onSolutionClick?: ((...args: any[]) => any) | undefined;
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("@algoux/standard-ranklist-renderer-component-styles");var e=require("vue"),m=require("@algoux/standard-ranklist-renderer-component-core"),f=require("@algoux/standard-ranklist-utils");const U=["data-srk-modal-state"],O=["aria-labelledby"],L={class:"srk-modal-content"},q={key:0,class:"srk-modal-header"},R={class:"srk-modal-body"},I=e.defineComponent({__name:"Modal",props:{open:{type:Boolean},title:{},width:{},rootClassName:{},wrapClassName:{},style:{},destroyOnClose:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0},closeOnMaskClick:{type:Boolean,default:!0}},emits:["close","update:open"],setup(t,{emit:i}){let l=0;const r=t,c=i,y=`srk-vue-modal-title-${++l}`,k=e.ref(null),o=e.ref(r.open||!r.destroyOnClose),u=e.ref(r.open?"pre-open":"closing"),d=e.ref({x:0,y:0});let h=null,B=null,w=null;const x=e.computed(()=>o.value||!r.destroyOnClose),z=e.computed(()=>["srk-modal-root",m.SRK_ANIMATED_MODAL_ROOT_CLASS,r.rootClassName].filter(Boolean)),D=e.computed(()=>r.open||r.destroyOnClose&&o.value),A=e.computed(()=>{var b,N;return{...r.style,width:r.width?`${r.width}px`:(b=r.style)==null?void 0:b.width,["--srk-modal-origin-x"]:`${d.value.x}px`,["--srk-modal-origin-y"]:`${d.value.y}px`,["--srk-modal-max-width"]:r.width?`${r.width}px`:typeof((N=r.style)==null?void 0:N.width)=="string"?r.style.width:void 0}});function E(){if(typeof window=="undefined"){h=null,B=null;return}h!==null&&(window.clearTimeout(h),h=null),B!==null&&(window.clearTimeout(B),B=null)}async function V(){if(await e.nextTick(),typeof window=="undefined"||!r.open||!o.value||u.value!=="pre-open")return;C();const b=m.resolveModalTransformOrigin(k.value);d.value=b.origin,B=window.setTimeout(()=>{u.value="opening",B=null},0)}function C(){const b=m.registerModalFocusScope(k.value,{onEscape:P});w===null&&(w=b)}function S(){w!==null&&(m.unregisterModalFocusScope(w),w=null)}function M(b){c("update:open",!1),c("close",b)}function F(b){r.closeOnMaskClick&&b.target===b.currentTarget&&M("mask")}function P(b){r.open&&r.closeOnEsc&&M("escape")}return e.watch(()=>r.open,async b=>{if(E(),b){o.value=!0,d.value={x:0,y:0},u.value="pre-open",await V();return}if(S(),u.value="closing",!r.destroyOnClose){o.value=!0;return}o.value&&typeof window!="undefined"&&(h=window.setTimeout(()=>{o.value=!1,h=null},m.MODAL_ANIMATION_DURATION_MS))},{immediate:!0}),e.watchEffect(b=>{!D.value||(m.lockModalBodyScroll(),b(()=>{m.unlockModalBodyScroll()}))}),e.onMounted(()=>{m.ensureModalInteractionTracker(),r.open&&C()}),e.onBeforeUnmount(()=>{E(),S()}),(b,N)=>x.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(z.value),"data-srk-modal-state":u.value},[N[2]||(N[2]=e.createElementVNode("div",{class:"srk-modal-mask"},null,-1)),e.createElementVNode("div",{class:e.normalizeClass(["srk-modal-wrap",t.wrapClassName]),tabindex:"-1",onMousedown:F},[e.createElementVNode("div",{class:"srk-modal",role:"dialog","aria-modal":"true","aria-labelledby":t.title?y:void 0,"data-srk-modal-panel":"true",tabindex:"-1",ref_key:"dialogRef",ref:k,style:e.normalizeStyle(A.value)},[e.createElementVNode("div",L,[e.createElementVNode("button",{"aria-label":"Close",class:"srk-modal-close",type:"button",onClick:N[0]||(N[0]=a=>M("close-button"))},[...N[1]||(N[1]=[e.createElementVNode("span",{class:"srk-modal-close-x"},null,-1)])]),t.title!==void 0?(e.openBlock(),e.createElementBlock("div",q,[e.createElementVNode("div",{id:y,class:"srk-modal-title"},e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",R,[e.renderSlot(b.$slots,"default")])])],12,O)],34)],10,U)):e.createCommentVNode("",!0)}}),H={class:"srk-common-table srk-solutions-table"},K={class:"srk--text-right"},j=e.defineComponent({__name:"DefaultSolutionModal",props:{open:{type:Boolean},user:{},problem:{},problemIndex:{},solutions:{default:()=>[]},title:{},width:{default:320},rootClassName:{default:"srk-general-modal-root"},wrapClassName:{default:"srk-solutions-modal"},style:{}},emits:["close","update:open"],setup(t,{emit:i}){const l=t,r=i,c=e.ref(l.user?{user:l.user,problem:l.problem,problemIndex:l.problemIndex,solutions:l.solutions}:null);e.watch([()=>l.user,()=>l.problem,()=>l.problemIndex,()=>l.solutions],([k,o,u,d])=>{k&&(c.value={user:k,problem:o,problemIndex:u,solutions:d})},{immediate:!0});const y=e.computed(()=>l.title||(c.value?m.getSolutionModalTitle(c.value.problemIndex,c.value.user):""));return(k,o)=>c.value?(e.openBlock(),e.createBlock(I,{key:0,open:t.open,title:y.value,width:t.width,"root-class-name":t.rootClassName,"wrap-class-name":t.wrapClassName,style:e.normalizeStyle(t.style),onClose:o[0]||(o[0]=u=>r("close",u)),"onUpdate:open":o[1]||(o[1]=u=>r("update:open",u))},{default:e.withCtx(()=>[e.createElementVNode("table",H,[o[2]||(o[2]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"srk--text-left"},"Result"),e.createElementVNode("th",{class:"srk--text-right"},"Time")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value.solutions,(u,d)=>{var h;return e.openBlock(),e.createElementBlock("tr",{key:`${u.result}_${(h=u.time)==null?void 0:h[0]}_${d}`},[e.createElementVNode("td",null,[e.createElementVNode("span",{class:e.normalizeClass(["srk-solution-result-text",e.unref(m.getSolutionResultMeta)(u.result).className])},e.toDisplayString(e.unref(m.getSolutionResultMeta)(u.result).label),3)]),e.createElementVNode("td",K,e.toDisplayString(e.unref(m.formatSolutionTimestamp)(u)),1)])}),128))])])]),_:1},8,["open","title","width","root-class-name","wrap-class-name","style"])):e.createCommentVNode("",!0)}}),J={class:"srk-user-modal-info"},W={class:"srk-user-modal-info-user-name"},G={key:0,class:"srk-user-modal-info-user-second-name"},Q={class:"srk-user-modal-info-labels"},X={class:"srk-user-modal-info-labels-label srk-user-modal-info-labels-label-preset-general"},Y={key:1,class:"srk-user-modal-info-team-members"},Z={key:0,class:"srk-user-modal-info-team-members-slash"},_={key:2,class:"srk-user-modal-info-photo"},ee=["src"],te=e.defineComponent({__name:"DefaultUserModal",props:{open:{type:Boolean},user:{},markers:{default:()=>[]},theme:{default:f.EnumTheme.light},title:{default:"User Info"},width:{default:420},rootClassName:{default:"srk-general-modal-root"},wrapClassName:{default:"srk-user-modal"},style:{},formatSrkAssetUrl:{}},emits:["close","update:open"],setup(t,{emit:i}){const l=t,r=i,c=e.ref(l.user||null);e.watch(()=>l.user,o=>{o&&(c.value=o)},{immediate:!0});const y=e.computed(()=>c.value?f.resolveUserMarkers(c.value,l.markers).map(o=>({marker:o,presentation:m.getMarkerPresentation(o,l.theme)})):[]);function k(o,u){return m.resolveSrkAssetUrl(o,u,l.formatSrkAssetUrl)}return(o,u)=>c.value?(e.openBlock(),e.createBlock(I,{key:0,open:t.open,title:t.title,width:t.width,"root-class-name":t.rootClassName,"wrap-class-name":t.wrapClassName,style:e.normalizeStyle(t.style),onClose:u[0]||(u[0]=d=>r("close",d)),"onUpdate:open":u[1]||(u[1]=d=>r("update:open",d))},{default:e.withCtx(()=>[e.createElementVNode("div",J,[e.createElementVNode("h3",W,e.toDisplayString(e.unref(f.resolveText)(c.value.name)),1),c.value.organization?(e.openBlock(),e.createElementBlock("p",G,e.toDisplayString(e.unref(f.resolveText)(c.value.organization)),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Q,[e.createElementVNode("span",X,e.toDisplayString(c.value.official===!1?"\uFF0A \u975E\u6B63\u5F0F\u53C2\u52A0\u8005":"\u6B63\u5F0F\u53C2\u52A0\u8005"),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,d=>(e.openBlock(),e.createElementBlock("span",{key:d.marker.id,class:e.normalizeClass(["srk-user-modal-info-labels-label",d.presentation.className]),style:e.normalizeStyle(d.presentation.style)},e.toDisplayString(e.unref(f.resolveText)(d.marker.label)),7))),128))]),c.value.teamMembers&&c.value.teamMembers.length?(e.openBlock(),e.createElementBlock("div",Y,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value.teamMembers,(d,h)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:e.unref(f.resolveText)(d.name)},[h>0?(e.openBlock(),e.createElementBlock("span",Z," / ")):e.createCommentVNode("",!0),e.createElementVNode("span",null,e.toDisplayString(e.unref(f.resolveText)(d.name)),1)],64))),128))])):e.createCommentVNode("",!0),c.value.photo?(e.openBlock(),e.createElementBlock("div",_,[e.createElementVNode("img",{src:k(c.value.photo,"user.photo"),alt:"User portrait",class:"srk-user-modal-info-photo-img"},null,8,ee)])):e.createCommentVNode("",!0)])]),_:1},8,["open","title","width","root-class-name","wrap-class-name","style"])):e.createCommentVNode("",!0)}}),se={class:"srk-progress-bar-container"},le={class:"srk-progress-bar"},re={class:"srk-progress-bar-body"},oe={key:0,class:"srk-progress-slider-layer"},ae=["max","title"],ne={class:"srk-progress-secondary-area"},ie={class:"srk-progress-secondary-area-center"},ce={key:0,class:"srk-progress-time-machine-status"},ue={key:1,class:"srk-progress-live-text"},de={key:2,style:{visibility:"hidden"}},me=e.defineComponent({__name:"ProgressBar",props:{data:{},enableTimeTravel:{type:Boolean,default:!1},live:{type:Boolean,default:!1},td:{default:0}},emits:["timeTravel"],setup(t,{emit:i}){const l=t,r=i,c=e.ref(Date.now()),y=e.ref(!1),k=e.ref(!1),o=e.ref(m.getProgressMaxAvailableMinutes(l.data.contest,c.value,l.td)),u=e.ref(null);let d;const h=e.computed(()=>m.getProgressDurationMinutes(l.data.contest)),B=e.computed(()=>m.getProgressMaxAvailableMinutes(l.data.contest,c.value,l.td)),w=e.computed(()=>m.isProgressEnded(l.data.contest,c.value,l.td)),x=e.computed(()=>m.getProgressMetrics(l.data,c.value,l.td,o.value,y.value));function z(){c.value=Date.now(),w.value&&d!==void 0&&(window.clearInterval(d),d=void 0)}function D(C){typeof window!="undefined"&&(C&&d===void 0&&(d=window.setInterval(z,1e3)),!C&&d!==void 0&&(window.clearInterval(d),d=void 0))}function A(C){const S=C>=h.value||C>=B.value;r("timeTravel",S?null:C*60*1e3),y.value=!S,u.value=S?null:C*60*1e3,k.value=!1}function E(){k.value=!0,y.value=!0}function V(){k.value&&A(o.value)}return e.watch(B,C=>{!k.value&&u.value===null&&(o.value=C)}),e.watch(()=>l.live,C=>D(C),{immediate:!0}),e.watch(()=>l.data.contest.title,()=>{k.value=!1,o.value=B.value,u.value=null,y.value=!1,r("timeTravel",null)}),e.onBeforeUnmount(()=>{d!==void 0&&(window.clearInterval(d),d=void 0)}),(C,S)=>(e.openBlock(),e.createElementBlock("div",se,[e.createElementVNode("div",le,[e.createElementVNode("div",re,[e.createElementVNode("div",{class:"srk-progress-bar-segment srk-progress-bar-normal",style:e.normalizeStyle({width:`${x.value.frozenBreakpoint*100}%`})},[e.createElementVNode("div",{class:"srk-progress-bar-fill",style:e.normalizeStyle({width:`${x.value.normalInnerPercent}%`})},null,4)],4),e.createElementVNode("div",{class:"srk-progress-bar-segment srk-progress-bar-frozen",style:e.normalizeStyle({width:`${(1-x.value.frozenBreakpoint)*100}%`})},[e.createElementVNode("div",{class:"srk-progress-bar-fill",style:e.normalizeStyle({width:`${x.value.frozenInnerPercent}%`})},null,4)],4)]),t.enableTimeTravel&&x.value.supportRegen?(e.openBlock(),e.createElementBlock("div",oe,[k.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"srk-progress-slider-tooltip",style:e.normalizeStyle({left:`${h.value?o.value/h.value*100:0}%`})},e.toDisplayString(e.unref(f.secToTimeStr)(o.value*60)),5)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":S[0]||(S[0]=M=>o.value=M),"aria-label":"Time Travel",class:"srk-progress-slider",max:h.value,min:"0",step:"1",title:e.unref(f.secToTimeStr)(o.value*60),type:"range",onBlur:V,onKeydown:E,onKeyup:V,onMousedown:E,onMouseup:V,onTouchend:V,onTouchstart:E},null,40,ae),[[e.vModelText,o.value,void 0,{number:!0}]])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ne,[e.createElementVNode("div",{class:"srk-progress-secondary-area-left",style:e.normalizeStyle(t.live||y.value?{}:{display:"none"})}," Elapsed: "+e.toDisplayString(e.unref(f.secToTimeStr)(Math.round(x.value.elapsed/1e3))),5),e.createElementVNode("div",ie,[y.value?(e.openBlock(),e.createElementBlock("div",ce,[...S[1]||(S[1]=[e.createElementVNode("div",{class:"srk-progress-time-machine-text"},"Time Travel Mode",-1)])])):t.live&&!w.value?(e.openBlock(),e.createElementBlock("div",ue,"Live")):(e.openBlock(),e.createElementBlock("div",de,"SRK"))]),e.createElementVNode("div",{class:"srk-progress-secondary-area-right",style:e.normalizeStyle(t.live||y.value?{}:{display:"none"})}," Remaining: "+e.toDisplayString(e.unref(f.secToTimeStr)(Math.round(x.value.remaining/1e3))),5)])]))}}),ke=["href"],pe={class:"srk--display-block"},fe=["title"],ve={class:"srk--display-block"},ye=["title"],ge=e.defineComponent({__name:"ProblemHeaderCell",props:{problem:{},index:{},theme:{default:f.EnumTheme.light}},setup(t){const i=t,l=e.computed(()=>i.problem.alias||f.numberToAlphabet(i.index)),r=e.computed(()=>i.problem.statistics),c=e.computed(()=>{if(!r.value)return"";const k=r.value.submitted?(r.value.accepted/r.value.submitted*100).toFixed(1):0;return`${r.value.accepted} / ${r.value.submitted} (${k}%)`}),y=e.computed(()=>m.getProblemHeaderBackgroundImage(i.problem.style,i.theme));return(k,o)=>(e.openBlock(),e.createElementBlock("th",{class:"srk--nowrap srk-problem-header",style:e.normalizeStyle({backgroundImage:y.value})},[t.problem.link?(e.openBlock(),e.createElementBlock("a",{key:0,href:t.problem.link,target:"_blank",rel:"noopener noreferrer",style:{color:"unset"}},[e.createElementVNode("span",pe,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"srk--display-block srk-problem-stats",title:c.value},e.toDisplayString(r.value.accepted),9,fe)):e.createCommentVNode("",!0)],8,ke)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("span",ve,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"srk--display-block srk-problem-stats",title:c.value},e.toDisplayString(r.value.accepted),9,ye)):e.createCommentVNode("",!0)],64))],4))}}),he={key:0,class:"srk-prest-status-block-fb-star"},be={key:4,class:"srk-status-placeholder-cell srk--text-center srk--nowrap"},Be="\u2605",Ce=e.defineComponent({__name:"StatusCell",props:{status:{},problem:{},problemIndex:{},user:{},row:{},rowIndex:{},ranklist:{},onSolutionClick:{},statusCellPreset:{default:"classic"},statusColorAsText:{type:Boolean,default:!1},emptyStatusPlaceholder:{default:null}},setup(t){const i=t,l=e.computed(()=>[...i.status.solutions||[]].reverse()),r=e.computed(()=>l.value.length>0&&!!i.onSolutionClick),c=e.computed(()=>["srk-prest-status-block","srk--text-center","srk--nowrap",{"srk--cursor-pointer":r.value,"srk-prest-status-block-color-text":i.statusColorAsText}]);function y(o){var u,d;!r.value||(m.captureModalTriggerPointFromMouseEvent(o,{source:"status-cell",context:{rowIndex:i.rowIndex,problemIndex:i.problemIndex,problemAlias:((u=i.problem)==null?void 0:u.alias)||null,problemTitle:i.problem?f.resolveText(i.problem.title):null,userId:i.user.id||null}}),(d=i.onSolutionClick)==null||d.call(i,{user:i.user,row:i.row,rowIndex:i.rowIndex,problemIndex:i.problemIndex,problem:i.problem,status:i.status,solutions:l.value,ranklist:i.ranklist}))}const k=e.defineComponent({props:{status:{type:Object,required:!0},ranklist:{type:Object,required:!0},preset:{type:String,required:!0}},setup(o){return()=>{const u=o.status,d=o.ranklist,h=o.preset,B=m.getRankProblemStatusCellPresentation(u,d,h);return typeof B.score=="number"?[e.h("span",{class:"srk-prest-status-block-score"},B.score),e.h("span",{class:"srk-prest-status-block-score-details"},B.scoreDetails)]:B.secondary!==void 0?[e.h("span",{class:"srk-prest-status-block-primary"},B.primary||"")," ",e.h("span",{class:"srk-prest-status-block-secondary"},B.secondary)]:B.primary||""}}});return(o,u)=>t.status.result==="FB"?(e.openBlock(),e.createElementBlock("td",{key:0,class:e.normalizeClass([c.value,"srk-prest-status-block-fb"]),onClick:e.withModifiers(y,["prevent"])},[t.statusColorAsText?(e.openBlock(),e.createElementBlock("span",he,e.toDisplayString(Be))):e.createCommentVNode("",!0),e.createVNode(e.unref(k),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):t.status.result==="AC"?(e.openBlock(),e.createElementBlock("td",{key:1,class:e.normalizeClass([c.value,"srk-prest-status-block-accepted"]),onClick:e.withModifiers(y,["prevent"])},[e.createVNode(e.unref(k),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):t.status.result==="?"?(e.openBlock(),e.createElementBlock("td",{key:2,class:e.normalizeClass([c.value,"srk-prest-status-block-frozen"]),onClick:e.withModifiers(y,["prevent"])},[e.createVNode(e.unref(k),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):t.status.result==="RJ"?(e.openBlock(),e.createElementBlock("td",{key:3,class:e.normalizeClass([c.value,"srk-prest-status-block-failed"]),onClick:e.withModifiers(y,["prevent"])},[e.createVNode(e.unref(k),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):(e.openBlock(),e.createElementBlock("td",be,e.toDisplayString(t.emptyStatusPlaceholder),1))}}),Ee={class:"srk-user-cell-content"},Se={key:0,class:"srk-user-avatar"},Ne=["src"],we={class:"srk-user-body"},xe={class:"srk-user-name-row"},Te=["title"],Ve={class:"srk-marker-dot-group"},Me=["data-tooltip"],$e={key:0,class:"srk-user-secondary-text srk--text-ellipsis",title:""},De=e.defineComponent({__name:"UserCell",props:{user:{},row:{},rowIndex:{},ranklist:{},markers:{default:()=>[]},theme:{default:f.EnumTheme.light},formatSrkAssetUrl:{},onUserClick:{},hideOrganization:{type:Boolean,default:!1},hideAvatar:{type:Boolean,default:!1}},setup(t){const i=t,l=e.computed(()=>f.resolveText(i.user.name)),r=e.computed(()=>f.resolveUserMarkers(i.user,i.markers)),c=e.computed(()=>r.value.map(k=>({marker:k,presentation:m.getMarkerPresentation(k,i.theme)})));function y(k){var o;m.captureModalTriggerPointFromMouseEvent(k,{source:"user-cell",context:{rowIndex:i.rowIndex,userId:i.user.id||null,userName:l.value}}),(o=i.onUserClick)==null||o.call(i,{user:i.user,row:i.row,rowIndex:i.rowIndex,ranklist:i.ranklist})}return(k,o)=>(e.openBlock(),e.createElementBlock("td",{class:e.normalizeClass(["srk--text-left srk--nowrap srk-user-cell",{"srk--cursor-pointer":!!t.onUserClick}]),title:"",onClick:e.withModifiers(y,["prevent"])},[e.createElementVNode("div",Ee,[t.user.avatar&&!t.hideAvatar?(e.openBlock(),e.createElementBlock("div",Se,[e.createElementVNode("img",{src:t.formatSrkAssetUrl(t.user.avatar,"user.avatar"),alt:"User Avatar"},null,8,Ne)])):e.createCommentVNode("",!0),e.createElementVNode("div",we,[e.createElementVNode("div",xe,[e.createElementVNode("span",{class:"srk-user-name-text",title:l.value},e.toDisplayString(l.value),9,Te),e.createElementVNode("span",Ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,u=>(e.openBlock(),e.createElementBlock("span",{key:u.marker.id,class:e.normalizeClass(["srk-marker srk-marker-dot srk--c-tooltip",u.presentation.className]),style:e.normalizeStyle(u.presentation.style),"data-tooltip":e.unref(f.resolveText)(u.marker.label)},null,14,Me))),128))])]),t.user.organization&&!t.hideOrganization?(e.openBlock(),e.createElementBlock("p",$e,e.toDisplayString(e.unref(f.resolveText)(t.user.organization)),1)):e.createCommentVNode("",!0)])])],2))}}),ze={key:0},Ae={key:1},Pe={key:2,class:"srk-common-table srk-main"},Fe={key:0,class:"srk-organization-header srk--text-left srk--nowrap"},Ie={class:"srk--text-left srk--nowrap"},Ue={class:"srk--text-right srk--nowrap"},Oe={key:1,class:"srk--text-right srk--nowrap"},Le={key:2,class:"srk-dirt-header srk--text-right srk--nowrap"},qe={key:3,class:"srk-se-header srk--text-right srk--nowrap"},Re={class:"srk-organization-cell-content"},He={key:0,class:"srk-user-avatar"},Ke=["src"],je=["title"],Je={class:"srk--text-right srk--nowrap"},We={key:1,class:"srk--text-right srk--nowrap"},Ge={key:2,class:"srk-dirt-cell srk--text-right srk--nowrap"},Qe={key:3,class:"srk-se-cell srk--text-right srk--nowrap"},Xe={key:0},Ye=["colspan"],Ze=["data-tooltip"],_e={class:"srk-problem-statistics-footer-primary"},et={class:"srk-problem-statistics-footer-secondary"},tt={key:0,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-dirt-footer-cell srk--nowrap"},st={key:1,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-se-footer-cell srk--nowrap"},lt={class:"srk-problem-statistics-footer-row srk-problem-statistics-footer-problem-label-row"},rt=["colspan"],ot={class:"srk--display-block"},at={key:0,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-dirt-footer-cell srk--nowrap"},nt={key:1,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-se-footer-cell srk--nowrap"},it=e.defineComponent({__name:"Ranklist",props:{data:{},theme:{default:f.EnumTheme.light},rowBordered:{type:Boolean,default:!1},columnBordered:{type:Boolean,default:!1},rowStriped:{type:Boolean,default:!1},formatSrkAssetUrl:{},splitOrganization:{type:Boolean,default:!1},columnTitles:{},statusCellPreset:{default:"classic"},statusColorAsText:{type:Boolean,default:!1},showProblemStatisticsFooter:{type:Boolean,default:!1},showDirtColumn:{type:Boolean,default:!1},showSEColumn:{type:Boolean,default:!1},emptyStatusPlaceholder:{default:null},userAvatarPlacement:{default:"user"}},emits:["userClick","solutionClick"],setup(t,{emit:i}){const l=t,r=i,c=e.computed(()=>l.theme),y=m.srkSupportedVersions,k=e.computed(()=>m.caniuse(l.data.version)),o=e.computed(()=>m.shouldShowTimeColumn(l.data.rows)),u=e.computed(()=>l.splitOrganization&&l.userAvatarPlacement==="organization"),d=e.computed(()=>l.showProblemStatisticsFooter||l.showSEColumn?m.calculateProblemStatisticsFooter(l.data):[]),h=e.computed(()=>l.data.series.length+1+1+(o.value?1:0)+(l.splitOrganization?1:0)),B=[{key:"accepted",label:"Accepted",tooltip:"Number of participants who solved this problem"},{key:"tried",label:"Tried",tooltip:"Number of participants who attempted this problem"},{key:"submitted",label:"Submitted",tooltip:"Total number of valid submissions for this problem"},{key:"dirt",label:"Dirt",tooltip:"Wrong submissions among participants who solved this problem"},{key:"se",label:"SE",tooltip:"Average hardness, calculated as (participants - accepted) / participants"},{key:"firstAccepted",label:"FB at",tooltip:"First Blood at, also known as first solve time, in minutes"},{key:"lastAccepted",label:"LB at",tooltip:"Last Blood at, also known as last solve time, in minutes"}];function w(a,n){return m.resolveSrkAssetUrl(a,n,l.formatSrkAssetUrl)}function x(a){return a.rankValues||l.data.series.map(()=>({rank:null,segmentIndex:null}))}function z(a,n){return a.rank?a.rank:n.user.official===!1?"\uFF0A":""}function D(a){return((a==null?void 0:a.segments)||[]).some(n=>typeof n.style=="string")}function A(a,n){var p,g,v;const s=(p=l.columnTitles)==null?void 0:p.series;return typeof s=="function"?(g=s(a,n))!=null?g:a.title:Array.isArray(s)&&(v=s[n])!=null?v:a.title}function E(a,n){var s,p;return(p=(s=l.columnTitles)==null?void 0:s[a])!=null?p:n}function V(a,n){const s=a.segmentIndex||a.segmentIndex===0?a.segmentIndex:-1;return((n==null?void 0:n.segments)||[])[s]||{}}function C(a,n){const s=V(a,n).style;return typeof s=="string"?`srk-preset-series-segment-${s}`:""}function S(a,n){const s={[f.EnumTheme.light]:void 0,[f.EnumTheme.dark]:void 0},p=V(a,n).style;if(!p||typeof p=="string")return{};const g=f.resolveStyle(p),v=g.textColor||s,T=g.backgroundColor||s;return{color:v[l.theme],backgroundColor:T[l.theme]}}function M(a){return[...a.solutions||[]].reverse()}function F(a,n){switch(a){case"accepted":return n.accepted;case"tried":return n.tried;case"submitted":return n.submitted;case"dirt":return n.dirt;case"se":return m.formatProblemStatisticsAverageHardness(n);case"firstAccepted":return m.formatProblemStatisticsAcceptedMinute(n.firstAcceptedTime);case"lastAccepted":return m.formatProblemStatisticsAcceptedMinute(n.lastAcceptedTime);default:return""}}function P(a,n){switch(a){case"accepted":return m.formatProblemStatisticsPercent(n.accepted,n.participantCount);case"tried":return m.formatProblemStatisticsPercent(n.tried,n.participantCount);case"dirt":return m.formatProblemStatisticsPercent(n.dirt,n.dirtSubmitted);default:return}}function b(a,n,s){if("ranklist"in a){r("userClick",a);return}s&&m.captureModalTriggerPointFromMouseEvent(s,{source:"user-cell",context:{rowIndex:n||0,userId:a.user.id||null,userName:f.resolveText(a.user.name)}}),r("userClick",{user:a.user,row:a,rowIndex:n||0,ranklist:l.data})}function N(a,n,s,p,g){if("solutions"in a){r("solutionClick",a);return}const v=p||0,T=s||a.statuses[v];if(g){const $=l.data.problems[v];m.captureModalTriggerPointFromMouseEvent(g,{source:"status-cell",context:{rowIndex:n||0,problemIndex:v,problemAlias:($==null?void 0:$.alias)||null,problemTitle:$?f.resolveText($.title):null,userId:a.user.id||null}})}r("solutionClick",{user:a.user,row:a,rowIndex:n||0,problemIndex:v,problem:l.data.problems[v],status:T,solutions:M(T),ranklist:l.data})}return(a,n)=>t.data.type!=="general"?(e.openBlock(),e.createElementBlock("div",ze,'srk type "'+e.toDisplayString(t.data.type)+'" is not supported',1)):k.value?(e.openBlock(),e.createElementBlock("div",Pe,[e.createElementVNode("table",{class:e.normalizeClass({"srk-table-row-bordered":t.rowBordered,"srk-table-column-bordered":t.columnBordered,"srk-table-row-striped":t.rowStriped})},[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.series,(s,p)=>(e.openBlock(),e.createElementBlock("th",{key:s.title,class:e.normalizeClass(["srk-series-header srk--text-right srk--nowrap",{"srk-series-segmented-column":D(s)}])},e.toDisplayString(A(s,p)),3))),128)),t.splitOrganization?(e.openBlock(),e.createElementBlock("th",Fe,e.toDisplayString(E("organization","Organization")),1)):e.createCommentVNode("",!0),e.createElementVNode("th",Ie,e.toDisplayString(E("user","Name")),1),e.createElementVNode("th",Ue,e.toDisplayString(E("score","Score")),1),o.value?(e.openBlock(),e.createElementBlock("th",Oe,e.toDisplayString(E("time","Time")),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.problems,(s,p)=>e.renderSlot(a.$slots,"problem-header-cell",e.mergeProps({key:s.alias||e.unref(f.resolveText)(s.title)||p,ref_for:!0},{problem:s,problemIndex:p,index:p,theme:c.value}),()=>[e.createVNode(ge,{problem:s,index:p,theme:c.value},null,8,["problem","index","theme"])])),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("th",Le,e.toDisplayString(E("dirt","Dirt")),1)):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("th",qe,e.toDisplayString(E("se","SE")),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.rows,(s,p)=>(e.openBlock(),e.createElementBlock("tr",{key:s.user.id||e.unref(f.resolveText)(s.user.name)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x(s),(g,v)=>{var T;return e.openBlock(),e.createElementBlock("td",{key:((T=t.data.series[v])==null?void 0:T.title)||v,class:e.normalizeClass(["srk--text-right srk--nowrap",[C(g,t.data.series[v]),{"srk-series-segmented-column":D(t.data.series[v])}]]),style:e.normalizeStyle(S(g,t.data.series[v]))},e.toDisplayString(z(g,s)),7)}),128)),t.splitOrganization?(e.openBlock(),e.createElementBlock("td",{key:0,class:e.normalizeClass(["srk-organization-cell srk--text-left srk--nowrap",{"srk-organization-cell-avatar":u.value&&!!s.user.avatar}])},[e.createElementVNode("div",Re,[u.value&&s.user.avatar?(e.openBlock(),e.createElementBlock("div",He,[e.createElementVNode("img",{src:w(s.user.avatar,"user.avatar"),alt:"User Avatar"},null,8,Ke)])):e.createCommentVNode("",!0),e.createElementVNode("span",{class:"srk-organization-name-text",title:s.user.organization?e.unref(f.resolveText)(s.user.organization):""},e.toDisplayString(s.user.organization?e.unref(f.resolveText)(s.user.organization):""),9,je)])],2)):e.createCommentVNode("",!0),e.renderSlot(a.$slots,"user-cell",e.mergeProps({ref_for:!0},{user:s.user,row:s,rowIndex:p,ranklist:t.data,markers:t.data.markers,theme:c.value,hideOrganization:t.splitOrganization,hideAvatar:u.value,onClick:g=>b(s,p,g)}),()=>[e.createVNode(De,{user:s.user,row:s,"row-index":p,ranklist:t.data,markers:t.data.markers,theme:c.value,"format-srk-asset-url":w,"on-user-click":b,"hide-organization":t.splitOrganization,"hide-avatar":u.value},null,8,["user","row","row-index","ranklist","markers","theme","hide-organization","hide-avatar"])]),e.createElementVNode("td",Je,e.toDisplayString(s.score.value),1),o.value?(e.openBlock(),e.createElementBlock("td",We,e.toDisplayString(s.score.time?e.unref(f.formatTimeDuration)(s.score.time,"min",Math.floor):"-"),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.statuses,(g,v)=>{var T;return e.renderSlot(a.$slots,"status-cell",e.mergeProps({key:((T=t.data.problems[v])==null?void 0:T.alias)||v,ref_for:!0},{status:g,problem:t.data.problems[v],problemIndex:v,user:s.user,row:s,rowIndex:p,ranklist:t.data,solutions:M(g),statusCellPreset:t.statusCellPreset,statusColorAsText:t.statusColorAsText,emptyStatusPlaceholder:t.emptyStatusPlaceholder,onClick:$=>N(s,p,g,v,$)}),()=>[e.createVNode(Ce,{status:g,problem:t.data.problems[v],"problem-index":v,user:s.user,row:s,"row-index":p,ranklist:t.data,"on-solution-click":N,"status-cell-preset":t.statusCellPreset,"status-color-as-text":t.statusColorAsText,"empty-status-placeholder":t.emptyStatusPlaceholder},null,8,["status","problem","problem-index","user","row","row-index","ranklist","status-cell-preset","status-color-as-text","empty-status-placeholder"])])}),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",Ge,e.toDisplayString(e.unref(m.calculateDirtPercentage)(s)),1)):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",Qe,e.toDisplayString(e.unref(m.calculateSEValue)(s,d.value)),1)):e.createCommentVNode("",!0)]))),128))]),t.showProblemStatisticsFooter?(e.openBlock(),e.createElementBlock("tfoot",Xe,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(B,s=>e.createElementVNode("tr",{key:s.key,class:"srk-problem-statistics-footer-row"},[e.createElementVNode("td",{class:"srk-problem-statistics-footer-labels srk--text-right srk--nowrap",colspan:h.value},[e.createElementVNode("span",{class:"srk-problem-statistics-footer-label srk--c-tooltip","data-tooltip":s.tooltip},e.toDisplayString(s.label),9,Ze)],8,Ye),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(p,g)=>{var v;return e.openBlock(),e.createElementBlock("td",{key:((v=t.data.problems[g])==null?void 0:v.alias)||g,class:"srk-problem-statistics-footer-cell srk--text-center srk--nowrap"},[e.createElementVNode("span",_e,e.toDisplayString(F(s.key,p)),1),P(s.key,p)!==void 0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[n[0]||(n[0]=e.createTextVNode(e.toDisplayString(" ")+" ",-1)),e.createElementVNode("span",et,e.toDisplayString(P(s.key,p)),1)],64)):e.createCommentVNode("",!0)])}),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",tt,[...n[1]||(n[1]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",st,[...n[2]||(n[2]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0)])),64)),e.createElementVNode("tr",lt,[e.createElementVNode("td",{class:"srk-problem-statistics-footer-labels srk--text-right srk--nowrap",colspan:h.value},null,8,rt),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.problems,(s,p)=>(e.openBlock(),e.createElementBlock("td",{key:s.alias||e.unref(f.resolveText)(s.title)||p,class:"srk-problem-statistics-footer-cell srk-problem-statistics-footer-problem-header srk-problem-header srk--text-center srk--nowrap",style:e.normalizeStyle({backgroundImage:e.unref(m.getProblemHeaderBackgroundImage)(s.style,c.value,0)})},[e.createElementVNode("span",ot,e.toDisplayString(s.alias||e.unref(f.numberToAlphabet)(p)),1)],4))),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",at,[...n[3]||(n[3]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",nt,[...n[4]||(n[4]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)],2)])):(e.openBlock(),e.createElementBlock("div",Ae,' srk version "'+e.toDisplayString(t.data.version)+'" is not supported (current supported: '+e.toDisplayString(e.unref(y))+") ",1))}});exports.DefaultSolutionModal=j;exports.DefaultUserModal=te;exports.Modal=I;exports.ProgressBar=me;exports.Ranklist=it;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("@algoux/standard-ranklist-renderer-component-styles");var e=require("vue"),d=require("@algoux/standard-ranklist-renderer-component-core"),B=require("@algoux/standard-ranklist-utils");const O=["data-srk-modal-state"],L=["aria-labelledby"],q={class:"srk-modal-content"},R={key:0,class:"srk-modal-header"},H={class:"srk-modal-body"},U=e.defineComponent({__name:"Modal",props:{open:{type:Boolean},title:{},width:{},rootClassName:{},wrapClassName:{},style:{},destroyOnClose:{type:Boolean,default:!0},closeOnEsc:{type:Boolean,default:!0},closeOnMaskClick:{type:Boolean,default:!0}},emits:["close","update:open"],setup(t,{emit:o}){let l=0;const r=t,u=o,g=`srk-vue-modal-title-${++l}`,f=e.ref(null),a=e.ref(r.open||!r.destroyOnClose),m=e.ref(r.open?"pre-open":"closing"),c=e.ref({x:0,y:0});let y=null,k=null,S=null;const E=e.computed(()=>a.value||!r.destroyOnClose),z=e.computed(()=>["srk-modal-root",d.SRK_ANIMATED_MODAL_ROOT_CLASS,r.rootClassName].filter(Boolean)),A=e.computed(()=>r.open||r.destroyOnClose&&a.value),D=e.computed(()=>{var b,x;return{...r.style,width:r.width?`${r.width}px`:(b=r.style)==null?void 0:b.width,["--srk-modal-origin-x"]:`${c.value.x}px`,["--srk-modal-origin-y"]:`${c.value.y}px`,["--srk-modal-max-width"]:r.width?`${r.width}px`:typeof((x=r.style)==null?void 0:x.width)=="string"?r.style.width:void 0}});function T(){if(typeof window=="undefined"){y=null,k=null;return}y!==null&&(window.clearTimeout(y),y=null),k!==null&&(window.clearTimeout(k),k=null)}async function N(){if(await e.nextTick(),typeof window=="undefined"||!r.open||!a.value||m.value!=="pre-open")return;C();const b=d.resolveModalTransformOrigin(f.value);c.value=b.origin,k=window.setTimeout(()=>{m.value="opening",k=null},0)}function C(){const b=d.registerModalFocusScope(f.value,{onEscape:F});S===null&&(S=b)}function w(){S!==null&&(d.unregisterModalFocusScope(S),S=null)}function M(b){u("update:open",!1),u("close",b)}function P(b){r.closeOnMaskClick&&b.target===b.currentTarget&&M("mask")}function F(b){r.open&&r.closeOnEsc&&M("escape")}return e.watch(()=>r.open,async b=>{if(T(),b){a.value=!0,c.value={x:0,y:0},m.value="pre-open",await N();return}if(w(),m.value="closing",!r.destroyOnClose){a.value=!0;return}a.value&&typeof window!="undefined"&&(y=window.setTimeout(()=>{a.value=!1,y=null},d.MODAL_ANIMATION_DURATION_MS))},{immediate:!0}),e.watchEffect(b=>{!A.value||(d.lockModalBodyScroll(),b(()=>{d.unlockModalBodyScroll()}))}),e.onMounted(()=>{d.ensureModalInteractionTracker(),r.open&&C()}),e.onBeforeUnmount(()=>{T(),w()}),(b,x)=>E.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(z.value),"data-srk-modal-state":m.value},[x[2]||(x[2]=e.createElementVNode("div",{class:"srk-modal-mask"},null,-1)),e.createElementVNode("div",{class:e.normalizeClass(["srk-modal-wrap",t.wrapClassName]),tabindex:"-1",onMousedown:P},[e.createElementVNode("div",{class:"srk-modal",role:"dialog","aria-modal":"true","aria-labelledby":t.title?g:void 0,"data-srk-modal-panel":"true",tabindex:"-1",ref_key:"dialogRef",ref:f,style:e.normalizeStyle(D.value)},[e.createElementVNode("div",q,[e.createElementVNode("button",{"aria-label":"Close",class:"srk-modal-close",type:"button",onClick:x[0]||(x[0]=I=>M("close-button"))},[...x[1]||(x[1]=[e.createElementVNode("span",{class:"srk-modal-close-x"},null,-1)])]),t.title!==void 0?(e.openBlock(),e.createElementBlock("div",R,[e.createElementVNode("div",{id:g,class:"srk-modal-title"},e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",H,[e.renderSlot(b.$slots,"default")])])],12,L)],34)],10,O)):e.createCommentVNode("",!0)}}),K={class:"srk-common-table srk-solutions-table"},j={class:"srk--text-right"},J=e.defineComponent({__name:"DefaultSolutionModal",props:{open:{type:Boolean},user:{},problem:{},problemIndex:{},solutions:{default:()=>[]},title:{},width:{default:320},rootClassName:{default:"srk-general-modal-root"},wrapClassName:{default:"srk-solutions-modal"},style:{},languages:{}},emits:["close","update:open"],setup(t,{emit:o}){const l=t,r=o,u=e.ref(l.user?{user:l.user,problem:l.problem,problemIndex:l.problemIndex,solutions:l.solutions}:null);e.watch([()=>l.user,()=>l.problem,()=>l.problemIndex,()=>l.solutions],([f,a,m,c])=>{f&&(u.value={user:f,problem:a,problemIndex:m,solutions:c})},{immediate:!0});const g=e.computed(()=>l.title||(u.value?d.getSolutionModalTitle(u.value.problemIndex,u.value.user,l.languages):""));return(f,a)=>u.value?(e.openBlock(),e.createBlock(U,{key:0,open:t.open,title:g.value,width:t.width,"root-class-name":t.rootClassName,"wrap-class-name":t.wrapClassName,style:e.normalizeStyle(t.style),onClose:a[0]||(a[0]=m=>r("close",m)),"onUpdate:open":a[1]||(a[1]=m=>r("update:open",m))},{default:e.withCtx(()=>[e.createElementVNode("table",K,[a[2]||(a[2]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"srk--text-left"},"Result"),e.createElementVNode("th",{class:"srk--text-right"},"Time")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value.solutions,(m,c)=>{var y;return e.openBlock(),e.createElementBlock("tr",{key:`${m.result}_${(y=m.time)==null?void 0:y[0]}_${c}`},[e.createElementVNode("td",null,[e.createElementVNode("span",{class:e.normalizeClass(["srk-solution-result-text",e.unref(d.getSolutionResultMeta)(m.result).className])},e.toDisplayString(e.unref(d.getSolutionResultMeta)(m.result).label),3)]),e.createElementVNode("td",j,e.toDisplayString(e.unref(d.formatSolutionTimestamp)(m)),1)])}),128))])])]),_:1},8,["open","title","width","root-class-name","wrap-class-name","style"])):e.createCommentVNode("",!0)}}),W={class:"srk-user-modal-info"},G={class:"srk-user-modal-info-user-name"},Q={key:0,class:"srk-user-modal-info-user-second-name"},X={class:"srk-user-modal-info-labels"},Y={class:"srk-user-modal-info-labels-label srk-user-modal-info-labels-label-preset-general"},Z={key:1,class:"srk-user-modal-info-team-members"},_={key:0,class:"srk-user-modal-info-team-members-slash"},ee={key:2,class:"srk-user-modal-info-photo"},te=["src"],se=e.defineComponent({__name:"DefaultUserModal",props:{open:{type:Boolean},user:{},markers:{default:()=>[]},theme:{default:B.EnumTheme.light},title:{default:"User Info"},width:{default:420},rootClassName:{default:"srk-general-modal-root"},wrapClassName:{default:"srk-user-modal"},style:{},formatSrkAssetUrl:{},languages:{}},emits:["close","update:open"],setup(t,{emit:o}){const l=t,r=o,u=e.ref(l.user||null);e.watch(()=>l.user,c=>{c&&(u.value=c)},{immediate:!0});const g=e.computed(()=>u.value?B.resolveUserMarkers(u.value,l.markers).map(c=>({marker:c,presentation:d.getMarkerPresentation(c,l.theme)})):[]);function f(c,y){return d.resolveSrkAssetUrl(c,y,l.formatSrkAssetUrl)}function a(c){return B.resolveText(c,l.languages)}function m(c){return d.formatTeamMemberName(c,l.languages)}return(c,y)=>u.value?(e.openBlock(),e.createBlock(U,{key:0,open:t.open,title:t.title,width:t.width,"root-class-name":t.rootClassName,"wrap-class-name":t.wrapClassName,style:e.normalizeStyle(t.style),onClose:y[0]||(y[0]=k=>r("close",k)),"onUpdate:open":y[1]||(y[1]=k=>r("update:open",k))},{default:e.withCtx(()=>[e.createElementVNode("div",W,[e.createElementVNode("h3",G,e.toDisplayString(a(u.value.name)),1),u.value.organization?(e.openBlock(),e.createElementBlock("p",Q,e.toDisplayString(a(u.value.organization)),1)):e.createCommentVNode("",!0),e.createElementVNode("div",X,[e.createElementVNode("span",Y,e.toDisplayString(u.value.official===!1?"\uFF0A \u975E\u6B63\u5F0F\u53C2\u52A0\u8005":"\u6B63\u5F0F\u53C2\u52A0\u8005"),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,k=>(e.openBlock(),e.createElementBlock("span",{key:k.marker.id,class:e.normalizeClass(["srk-user-modal-info-labels-label",k.presentation.className]),style:e.normalizeStyle(k.presentation.style)},e.toDisplayString(a(k.marker.label)),7))),128))]),u.value.teamMembers&&u.value.teamMembers.length?(e.openBlock(),e.createElementBlock("div",Z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value.teamMembers,(k,S)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:a(k.name)},[S>0?(e.openBlock(),e.createElementBlock("span",_," / ")):e.createCommentVNode("",!0),e.createElementVNode("span",null,e.toDisplayString(m(k)),1)],64))),128))])):e.createCommentVNode("",!0),u.value.photo?(e.openBlock(),e.createElementBlock("div",ee,[e.createElementVNode("img",{src:f(u.value.photo,"user.photo"),alt:"User portrait",class:"srk-user-modal-info-photo-img"},null,8,te)])):e.createCommentVNode("",!0)])]),_:1},8,["open","title","width","root-class-name","wrap-class-name","style"])):e.createCommentVNode("",!0)}}),le={class:"srk-progress-bar-container"},re={class:"srk-progress-bar"},oe={class:"srk-progress-bar-body"},ae={key:0,class:"srk-progress-slider-layer"},ne=["max","title"],ie={class:"srk-progress-secondary-area"},ce={class:"srk-progress-secondary-area-center"},ue={key:0,class:"srk-progress-time-machine-status"},de={key:1,class:"srk-progress-live-text"},me={key:2,style:{visibility:"hidden"}},ke=e.defineComponent({__name:"ProgressBar",props:{data:{},enableTimeTravel:{type:Boolean,default:!1},live:{type:Boolean,default:!1},td:{default:0}},emits:["timeTravel"],setup(t,{emit:o}){const l=t,r=o,u=e.ref(Date.now()),g=e.ref(!1),f=e.ref(!1),a=e.ref(d.getProgressMaxAvailableMinutes(l.data.contest,u.value,l.td)),m=e.ref(null);let c;const y=e.computed(()=>d.getProgressDurationMinutes(l.data.contest)),k=e.computed(()=>d.getProgressMaxAvailableMinutes(l.data.contest,u.value,l.td)),S=e.computed(()=>d.isProgressEnded(l.data.contest,u.value,l.td)),E=e.computed(()=>d.getProgressMetrics(l.data,u.value,l.td,a.value,g.value));function z(){u.value=Date.now(),S.value&&c!==void 0&&(window.clearInterval(c),c=void 0)}function A(C){typeof window!="undefined"&&(C&&c===void 0&&(c=window.setInterval(z,1e3)),!C&&c!==void 0&&(window.clearInterval(c),c=void 0))}function D(C){const w=C>=y.value||C>=k.value;r("timeTravel",w?null:C*60*1e3),g.value=!w,m.value=w?null:C*60*1e3,f.value=!1}function T(){f.value=!0,g.value=!0}function N(){f.value&&D(a.value)}return e.watch(k,C=>{!f.value&&m.value===null&&(a.value=C)}),e.watch(()=>l.live,C=>A(C),{immediate:!0}),e.watch(()=>l.data.contest.title,()=>{f.value=!1,a.value=k.value,m.value=null,g.value=!1,r("timeTravel",null)}),e.onBeforeUnmount(()=>{c!==void 0&&(window.clearInterval(c),c=void 0)}),(C,w)=>(e.openBlock(),e.createElementBlock("div",le,[e.createElementVNode("div",re,[e.createElementVNode("div",oe,[e.createElementVNode("div",{class:"srk-progress-bar-segment srk-progress-bar-normal",style:e.normalizeStyle({width:`${E.value.frozenBreakpoint*100}%`})},[e.createElementVNode("div",{class:"srk-progress-bar-fill",style:e.normalizeStyle({width:`${E.value.normalInnerPercent}%`})},null,4)],4),e.createElementVNode("div",{class:"srk-progress-bar-segment srk-progress-bar-frozen",style:e.normalizeStyle({width:`${(1-E.value.frozenBreakpoint)*100}%`})},[e.createElementVNode("div",{class:"srk-progress-bar-fill",style:e.normalizeStyle({width:`${E.value.frozenInnerPercent}%`})},null,4)],4)]),t.enableTimeTravel&&E.value.supportRegen?(e.openBlock(),e.createElementBlock("div",ae,[f.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"srk-progress-slider-tooltip",style:e.normalizeStyle({left:`${y.value?a.value/y.value*100:0}%`})},e.toDisplayString(e.unref(B.secToTimeStr)(a.value*60)),5)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":w[0]||(w[0]=M=>a.value=M),"aria-label":"Time Travel",class:"srk-progress-slider",max:y.value,min:"0",step:"1",title:e.unref(B.secToTimeStr)(a.value*60),type:"range",onBlur:N,onKeydown:T,onKeyup:N,onMousedown:T,onMouseup:N,onTouchend:N,onTouchstart:T},null,40,ne),[[e.vModelText,a.value,void 0,{number:!0}]])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ie,[e.createElementVNode("div",{class:"srk-progress-secondary-area-left",style:e.normalizeStyle(t.live||g.value?{}:{display:"none"})}," Elapsed: "+e.toDisplayString(e.unref(B.secToTimeStr)(Math.round(E.value.elapsed/1e3))),5),e.createElementVNode("div",ce,[g.value?(e.openBlock(),e.createElementBlock("div",ue,[...w[1]||(w[1]=[e.createElementVNode("div",{class:"srk-progress-time-machine-text"},"Time Travel Mode",-1)])])):t.live&&!S.value?(e.openBlock(),e.createElementBlock("div",de,"Live")):(e.openBlock(),e.createElementBlock("div",me,"SRK"))]),e.createElementVNode("div",{class:"srk-progress-secondary-area-right",style:e.normalizeStyle(t.live||g.value?{}:{display:"none"})}," Remaining: "+e.toDisplayString(e.unref(B.secToTimeStr)(Math.round(E.value.remaining/1e3))),5)])]))}}),pe=["href"],fe={class:"srk--display-block"},ge=["title"],ve={class:"srk--display-block"},ye=["title"],he=e.defineComponent({__name:"ProblemHeaderCell",props:{problem:{},index:{},theme:{default:B.EnumTheme.light},languages:{}},setup(t){const o=t,l=e.computed(()=>o.problem.alias||B.numberToAlphabet(o.index)),r=e.computed(()=>o.problem.statistics),u=e.computed(()=>{if(!r.value)return"";const f=r.value.submitted?(r.value.accepted/r.value.submitted*100).toFixed(1):0;return`${r.value.accepted} / ${r.value.submitted} (${f}%)`}),g=e.computed(()=>d.getProblemHeaderBackgroundImage(o.problem.style,o.theme));return(f,a)=>(e.openBlock(),e.createElementBlock("th",{class:"srk--nowrap srk-problem-header",style:e.normalizeStyle({backgroundImage:g.value})},[t.problem.link?(e.openBlock(),e.createElementBlock("a",{key:0,href:t.problem.link,target:"_blank",rel:"noopener noreferrer",style:{color:"unset"}},[e.createElementVNode("span",fe,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"srk--display-block srk-problem-stats",title:u.value},e.toDisplayString(r.value.accepted),9,ge)):e.createCommentVNode("",!0)],8,pe)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("span",ve,e.toDisplayString(l.value),1),r.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"srk--display-block srk-problem-stats",title:u.value},e.toDisplayString(r.value.accepted),9,ye)):e.createCommentVNode("",!0)],64))],4))}}),be={key:0,class:"srk-prest-status-block-fb-star"},Be={key:4,class:"srk-status-placeholder-cell srk--text-center srk--nowrap"},Ce="\u2605",Ee=e.defineComponent({__name:"StatusCell",props:{status:{},problem:{},problemIndex:{},user:{},row:{},rowIndex:{},ranklist:{},onSolutionClick:{},statusCellPreset:{default:"classic"},statusColorAsText:{type:Boolean,default:!1},emptyStatusPlaceholder:{default:null},languages:{}},setup(t){const o=t,l=e.computed(()=>[...o.status.solutions||[]].reverse()),r=e.computed(()=>l.value.length>0&&!!o.onSolutionClick),u=e.computed(()=>["srk-prest-status-block","srk--text-center","srk--nowrap",{"srk--cursor-pointer":r.value,"srk-prest-status-block-color-text":o.statusColorAsText}]);function g(a){var m,c;!r.value||(d.captureModalTriggerPointFromMouseEvent(a,{source:"status-cell",context:{rowIndex:o.rowIndex,problemIndex:o.problemIndex,problemAlias:((m=o.problem)==null?void 0:m.alias)||null,problemTitle:o.problem?B.resolveText(o.problem.title,o.languages):null,userId:o.user.id||null}}),(c=o.onSolutionClick)==null||c.call(o,{user:o.user,row:o.row,rowIndex:o.rowIndex,problemIndex:o.problemIndex,problem:o.problem,status:o.status,solutions:l.value,ranklist:o.ranklist}))}const f=e.defineComponent({props:{status:{type:Object,required:!0},ranklist:{type:Object,required:!0},preset:{type:String,required:!0}},setup(a){return()=>{const m=a.status,c=a.ranklist,y=a.preset,k=d.getRankProblemStatusCellPresentation(m,c,y);return typeof k.score=="number"?[e.h("span",{class:"srk-prest-status-block-score"},k.score),e.h("span",{class:"srk-prest-status-block-score-details"},k.scoreDetails)]:k.secondary!==void 0?[e.h("span",{class:"srk-prest-status-block-primary"},k.primary||"")," ",e.h("span",{class:"srk-prest-status-block-secondary"},k.secondary)]:k.primary||""}}});return(a,m)=>t.status.result==="FB"?(e.openBlock(),e.createElementBlock("td",{key:0,class:e.normalizeClass([u.value,"srk-prest-status-block-fb"]),onClick:e.withModifiers(g,["prevent"])},[t.statusColorAsText?(e.openBlock(),e.createElementBlock("span",be,e.toDisplayString(Ce))):e.createCommentVNode("",!0),e.createVNode(e.unref(f),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):t.status.result==="AC"?(e.openBlock(),e.createElementBlock("td",{key:1,class:e.normalizeClass([u.value,"srk-prest-status-block-accepted"]),onClick:e.withModifiers(g,["prevent"])},[e.createVNode(e.unref(f),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):t.status.result==="?"?(e.openBlock(),e.createElementBlock("td",{key:2,class:e.normalizeClass([u.value,"srk-prest-status-block-frozen"]),onClick:e.withModifiers(g,["prevent"])},[e.createVNode(e.unref(f),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):t.status.result==="RJ"?(e.openBlock(),e.createElementBlock("td",{key:3,class:e.normalizeClass([u.value,"srk-prest-status-block-failed"]),onClick:e.withModifiers(g,["prevent"])},[e.createVNode(e.unref(f),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):(e.openBlock(),e.createElementBlock("td",Be,e.toDisplayString(t.emptyStatusPlaceholder),1))}}),Se={class:"srk-user-cell-content"},Ne={key:0,class:"srk-user-avatar"},we=["src"],xe={class:"srk-user-body"},Ve={class:"srk-user-name-row"},Te=["title"],Me={class:"srk-marker-dot-group"},$e=["data-tooltip"],De={key:0,class:"srk-user-secondary-text srk--text-ellipsis",title:""},ze=e.defineComponent({__name:"UserCell",props:{user:{},row:{},rowIndex:{},ranklist:{},markers:{default:()=>[]},theme:{default:B.EnumTheme.light},formatSrkAssetUrl:{},onUserClick:{},hideOrganization:{type:Boolean,default:!1},hideAvatar:{type:Boolean,default:!1},languages:{}},setup(t){const o=t,l=e.computed(()=>g(o.user.name)),r=e.computed(()=>B.resolveUserMarkers(o.user,o.markers)),u=e.computed(()=>r.value.map(a=>({marker:a,presentation:d.getMarkerPresentation(a,o.theme)})));function g(a){return B.resolveText(a,o.languages)}function f(a){var m;d.captureModalTriggerPointFromMouseEvent(a,{source:"user-cell",context:{rowIndex:o.rowIndex,userId:o.user.id||null,userName:l.value}}),(m=o.onUserClick)==null||m.call(o,{user:o.user,row:o.row,rowIndex:o.rowIndex,ranklist:o.ranklist})}return(a,m)=>(e.openBlock(),e.createElementBlock("td",{class:e.normalizeClass(["srk--text-left srk--nowrap srk-user-cell",{"srk--cursor-pointer":!!t.onUserClick}]),title:"",onClick:e.withModifiers(f,["prevent"])},[e.createElementVNode("div",Se,[t.user.avatar&&!t.hideAvatar?(e.openBlock(),e.createElementBlock("div",Ne,[e.createElementVNode("img",{src:t.formatSrkAssetUrl(t.user.avatar,"user.avatar"),alt:"User Avatar"},null,8,we)])):e.createCommentVNode("",!0),e.createElementVNode("div",xe,[e.createElementVNode("div",Ve,[e.createElementVNode("span",{class:"srk-user-name-text",title:l.value},e.toDisplayString(l.value),9,Te),e.createElementVNode("span",Me,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,c=>(e.openBlock(),e.createElementBlock("span",{key:c.marker.id,class:e.normalizeClass(["srk-marker srk-marker-dot srk--c-tooltip",c.presentation.className]),style:e.normalizeStyle(c.presentation.style),"data-tooltip":g(c.marker.label)},null,14,$e))),128))])]),t.user.organization&&!t.hideOrganization?(e.openBlock(),e.createElementBlock("p",De,e.toDisplayString(g(t.user.organization)),1)):e.createCommentVNode("",!0)])])],2))}}),Ae={key:0},Pe={key:1},Fe={key:2,class:"srk-common-table srk-main"},Ie={key:0,class:"srk-organization-header srk--text-left srk--nowrap"},Ue={class:"srk--text-left srk--nowrap"},Oe={class:"srk--text-right srk--nowrap"},Le={key:1,class:"srk--text-right srk--nowrap"},qe={key:2,class:"srk-dirt-header srk--text-right srk--nowrap"},Re={key:3,class:"srk-se-header srk--text-right srk--nowrap"},He={class:"srk-organization-cell-content"},Ke={key:0,class:"srk-user-avatar"},je=["src"],Je=["title"],We={class:"srk--text-right srk--nowrap"},Ge={key:1,class:"srk--text-right srk--nowrap"},Qe={key:2,class:"srk-dirt-cell srk--text-right srk--nowrap"},Xe={key:3,class:"srk-se-cell srk--text-right srk--nowrap"},Ye={key:0},Ze=["colspan"],_e=["data-tooltip"],et={class:"srk-problem-statistics-footer-primary"},tt={class:"srk-problem-statistics-footer-secondary"},st={key:0,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-dirt-footer-cell srk--nowrap"},lt={key:1,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-se-footer-cell srk--nowrap"},rt={class:"srk-problem-statistics-footer-row srk-problem-statistics-footer-problem-label-row"},ot=["colspan"],at={class:"srk--display-block"},nt={key:0,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-dirt-footer-cell srk--nowrap"},it={key:1,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-se-footer-cell srk--nowrap"},ct=e.defineComponent({__name:"Ranklist",props:{data:{},theme:{default:B.EnumTheme.light},rowBordered:{type:Boolean,default:!1},columnBordered:{type:Boolean,default:!1},rowStriped:{type:Boolean,default:!1},formatSrkAssetUrl:{},splitOrganization:{type:Boolean,default:!1},columnTitles:{},statusCellPreset:{default:"classic"},statusColorAsText:{type:Boolean,default:!1},showProblemStatisticsFooter:{type:Boolean,default:!1},showDirtColumn:{type:Boolean,default:!1},showSEColumn:{type:Boolean,default:!1},emptyStatusPlaceholder:{default:null},userAvatarPlacement:{default:"user"},languages:{}},emits:["userClick","solutionClick"],setup(t,{emit:o}){const l=t,r=o,u=e.computed(()=>l.theme),g=d.srkSupportedVersions,f=e.computed(()=>d.caniuse(l.data.version)),a=e.computed(()=>d.shouldShowTimeColumn(l.data.rows)),m=e.computed(()=>l.splitOrganization&&l.userAvatarPlacement==="organization"),c=e.computed(()=>l.showProblemStatisticsFooter||l.showSEColumn?d.calculateProblemStatisticsFooter(l.data):[]),y=e.computed(()=>l.data.series.length+1+1+(a.value?1:0)+(l.splitOrganization?1:0)),k=[{key:"accepted",label:"Accepted",tooltip:"Number of participants who solved this problem"},{key:"attempted",label:"Attempted",tooltip:"Number of participants who attempted this problem"},{key:"submitted",label:"Submitted",tooltip:"Total number of valid submissions for this problem"},{key:"dirt",label:"Dirt",tooltip:"Wrong submissions among participants who solved this problem"},{key:"se",label:"SE",tooltip:"Average hardness, calculated as (participants - accepted) / participants"},{key:"firstAccepted",label:"FB at",tooltip:"First Blood at, also known as first solve time, in minutes"},{key:"lastAccepted",label:"LB at",tooltip:"Last Blood at, also known as last solve time, in minutes"}];function S(n,i){return d.resolveSrkAssetUrl(n,i,l.formatSrkAssetUrl)}function E(n){return B.resolveText(n,l.languages)}function z(n){return n.rankValues||l.data.series.map(()=>({rank:null,segmentIndex:null}))}function A(n,i){return n.rank?n.rank:i.user.official===!1?"\uFF0A":""}function D(n){return((n==null?void 0:n.segments)||[]).some(i=>typeof i.style=="string")}function T(n,i){var p,h,v;const s=(p=l.columnTitles)==null?void 0:p.series;return typeof s=="function"?(h=s(n,i))!=null?h:n.title:Array.isArray(s)&&(v=s[i])!=null?v:n.title}function N(n,i){var s,p;return(p=(s=l.columnTitles)==null?void 0:s[n])!=null?p:i}function C(n,i){const s=n.segmentIndex||n.segmentIndex===0?n.segmentIndex:-1;return((i==null?void 0:i.segments)||[])[s]||{}}function w(n,i){const s=C(n,i).style;return typeof s=="string"?`srk-preset-series-segment-${s}`:""}function M(n,i){const s={[B.EnumTheme.light]:void 0,[B.EnumTheme.dark]:void 0},p=C(n,i).style;if(!p||typeof p=="string")return{};const h=B.resolveStyle(p),v=h.textColor||s,V=h.backgroundColor||s;return{color:v[l.theme],backgroundColor:V[l.theme]}}function P(n){return[...n.solutions||[]].reverse()}function F(n,i){switch(n){case"accepted":return i.accepted;case"attempted":return i.attempted;case"submitted":return i.submitted;case"dirt":return i.dirt;case"se":return d.formatProblemStatisticsAverageHardness(i);case"firstAccepted":return d.formatProblemStatisticsAcceptedMinute(i.firstAcceptedTime);case"lastAccepted":return d.formatProblemStatisticsAcceptedMinute(i.lastAcceptedTime);default:return""}}function b(n,i){switch(n){case"accepted":return d.formatProblemStatisticsPercent(i.accepted,i.participantCount);case"attempted":return d.formatProblemStatisticsPercent(i.attempted,i.participantCount);case"dirt":return d.formatProblemStatisticsPercent(i.dirt,i.dirtSubmitted);default:return}}function x(n,i,s){if("ranklist"in n){r("userClick",n);return}s&&d.captureModalTriggerPointFromMouseEvent(s,{source:"user-cell",context:{rowIndex:i||0,userId:n.user.id||null,userName:E(n.user.name)}}),r("userClick",{user:n.user,row:n,rowIndex:i||0,ranklist:l.data})}function I(n,i,s,p,h){if("solutions"in n){r("solutionClick",n);return}const v=p||0,V=s||n.statuses[v];if(h){const $=l.data.problems[v];d.captureModalTriggerPointFromMouseEvent(h,{source:"status-cell",context:{rowIndex:i||0,problemIndex:v,problemAlias:($==null?void 0:$.alias)||null,problemTitle:$?E($.title):null,userId:n.user.id||null}})}r("solutionClick",{user:n.user,row:n,rowIndex:i||0,problemIndex:v,problem:l.data.problems[v],status:V,solutions:P(V),ranklist:l.data})}return(n,i)=>t.data.type!=="general"?(e.openBlock(),e.createElementBlock("div",Ae,'srk type "'+e.toDisplayString(t.data.type)+'" is not supported',1)):f.value?(e.openBlock(),e.createElementBlock("div",Fe,[e.createElementVNode("table",{class:e.normalizeClass({"srk-table-row-bordered":t.rowBordered,"srk-table-column-bordered":t.columnBordered,"srk-table-row-striped":t.rowStriped})},[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.series,(s,p)=>(e.openBlock(),e.createElementBlock("th",{key:s.title,class:e.normalizeClass(["srk-series-header srk--text-right srk--nowrap",{"srk-series-segmented-column":D(s)}])},e.toDisplayString(T(s,p)),3))),128)),t.splitOrganization?(e.openBlock(),e.createElementBlock("th",Ie,e.toDisplayString(N("organization","Organization")),1)):e.createCommentVNode("",!0),e.createElementVNode("th",Ue,e.toDisplayString(N("user","Name")),1),e.createElementVNode("th",Oe,e.toDisplayString(N("score","Score")),1),a.value?(e.openBlock(),e.createElementBlock("th",Le,e.toDisplayString(N("time","Time")),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.problems,(s,p)=>e.renderSlot(n.$slots,"problem-header-cell",e.mergeProps({key:s.alias||E(s.title)||p,ref_for:!0},{problem:s,problemIndex:p,index:p,theme:u.value,languages:t.languages}),()=>[e.createVNode(he,{problem:s,index:p,theme:u.value,languages:t.languages},null,8,["problem","index","theme","languages"])])),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("th",qe,e.toDisplayString(N("dirt","Dirt")),1)):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("th",Re,e.toDisplayString(N("se","SE")),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.rows,(s,p)=>(e.openBlock(),e.createElementBlock("tr",{key:s.user.id||E(s.user.name)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z(s),(h,v)=>{var V;return e.openBlock(),e.createElementBlock("td",{key:((V=t.data.series[v])==null?void 0:V.title)||v,class:e.normalizeClass(["srk--text-right srk--nowrap",[w(h,t.data.series[v]),{"srk-series-segmented-column":D(t.data.series[v])}]]),style:e.normalizeStyle(M(h,t.data.series[v]))},e.toDisplayString(A(h,s)),7)}),128)),t.splitOrganization?(e.openBlock(),e.createElementBlock("td",{key:0,class:e.normalizeClass(["srk-organization-cell srk--text-left srk--nowrap",{"srk-organization-cell-avatar":m.value&&!!s.user.avatar}])},[e.createElementVNode("div",He,[m.value&&s.user.avatar?(e.openBlock(),e.createElementBlock("div",Ke,[e.createElementVNode("img",{src:S(s.user.avatar,"user.avatar"),alt:"User Avatar"},null,8,je)])):e.createCommentVNode("",!0),e.createElementVNode("span",{class:"srk-organization-name-text",title:s.user.organization?E(s.user.organization):""},e.toDisplayString(s.user.organization?E(s.user.organization):""),9,Je)])],2)):e.createCommentVNode("",!0),e.renderSlot(n.$slots,"user-cell",e.mergeProps({ref_for:!0},{user:s.user,row:s,rowIndex:p,ranklist:t.data,markers:t.data.markers,theme:u.value,hideOrganization:t.splitOrganization,hideAvatar:m.value,languages:t.languages,onClick:h=>x(s,p,h)}),()=>[e.createVNode(ze,{user:s.user,row:s,"row-index":p,ranklist:t.data,markers:t.data.markers,theme:u.value,"format-srk-asset-url":S,"on-user-click":x,"hide-organization":t.splitOrganization,"hide-avatar":m.value,languages:t.languages},null,8,["user","row","row-index","ranklist","markers","theme","hide-organization","hide-avatar","languages"])]),e.createElementVNode("td",We,e.toDisplayString(s.score.value),1),a.value?(e.openBlock(),e.createElementBlock("td",Ge,e.toDisplayString(s.score.time?e.unref(B.formatTimeDuration)(s.score.time,"min",Math.floor):"-"),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.statuses,(h,v)=>{var V;return e.renderSlot(n.$slots,"status-cell",e.mergeProps({key:((V=t.data.problems[v])==null?void 0:V.alias)||v,ref_for:!0},{status:h,problem:t.data.problems[v],problemIndex:v,user:s.user,row:s,rowIndex:p,ranklist:t.data,solutions:P(h),statusCellPreset:t.statusCellPreset,statusColorAsText:t.statusColorAsText,emptyStatusPlaceholder:t.emptyStatusPlaceholder,languages:t.languages,onClick:$=>I(s,p,h,v,$)}),()=>[e.createVNode(Ee,{status:h,problem:t.data.problems[v],"problem-index":v,user:s.user,row:s,"row-index":p,ranklist:t.data,"on-solution-click":I,"status-cell-preset":t.statusCellPreset,"status-color-as-text":t.statusColorAsText,"empty-status-placeholder":t.emptyStatusPlaceholder,languages:t.languages},null,8,["status","problem","problem-index","user","row","row-index","ranklist","status-cell-preset","status-color-as-text","empty-status-placeholder","languages"])])}),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",Qe,e.toDisplayString(e.unref(d.calculateDirtPercentage)(s)),1)):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",Xe,e.toDisplayString(e.unref(d.calculateSEValue)(s,c.value)),1)):e.createCommentVNode("",!0)]))),128))]),t.showProblemStatisticsFooter?(e.openBlock(),e.createElementBlock("tfoot",Ye,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(k,s=>e.createElementVNode("tr",{key:s.key,class:"srk-problem-statistics-footer-row"},[e.createElementVNode("td",{class:"srk-problem-statistics-footer-labels srk--text-right srk--nowrap",colspan:y.value},[e.createElementVNode("span",{class:"srk-problem-statistics-footer-label srk--c-tooltip","data-tooltip":s.tooltip},e.toDisplayString(s.label),9,_e)],8,Ze),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(p,h)=>{var v;return e.openBlock(),e.createElementBlock("td",{key:((v=t.data.problems[h])==null?void 0:v.alias)||h,class:"srk-problem-statistics-footer-cell srk--text-center srk--nowrap"},[e.createElementVNode("span",et,e.toDisplayString(F(s.key,p)),1),b(s.key,p)!==void 0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[i[0]||(i[0]=e.createTextVNode(e.toDisplayString(" ")+" ",-1)),e.createElementVNode("span",tt,e.toDisplayString(b(s.key,p)),1)],64)):e.createCommentVNode("",!0)])}),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",st,[...i[1]||(i[1]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",lt,[...i[2]||(i[2]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0)])),64)),e.createElementVNode("tr",rt,[e.createElementVNode("td",{class:"srk-problem-statistics-footer-labels srk--text-right srk--nowrap",colspan:y.value},null,8,ot),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.problems,(s,p)=>(e.openBlock(),e.createElementBlock("td",{key:s.alias||E(s.title)||p,class:"srk-problem-statistics-footer-cell srk-problem-statistics-footer-problem-header srk-problem-header srk--text-center srk--nowrap",style:e.normalizeStyle({backgroundImage:e.unref(d.getProblemHeaderBackgroundImage)(s.style,u.value,0)})},[e.createElementVNode("span",at,e.toDisplayString(s.alias||e.unref(B.numberToAlphabet)(p)),1)],4))),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",nt,[...i[3]||(i[3]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",it,[...i[4]||(i[4]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)],2)])):(e.openBlock(),e.createElementBlock("div",Pe,' srk version "'+e.toDisplayString(t.data.version)+'" is not supported (current supported: '+e.toDisplayString(e.unref(g))+") ",1))}});exports.DefaultSolutionModal=J;exports.DefaultUserModal=se;exports.Modal=U;exports.ProgressBar=ke;exports.Ranklist=ct;
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "@algoux/standard-ranklist-renderer-component-styles";
2
2
  import { defineComponent, ref, computed, watch, watchEffect, onMounted, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, createElementVNode, normalizeStyle, toDisplayString, createCommentVNode, renderSlot, nextTick, createBlock, withCtx, Fragment, renderList, unref, withDirectives, vModelText, h, withModifiers, createVNode, mergeProps, createTextVNode } from "vue";
3
- import { SRK_ANIMATED_MODAL_ROOT_CLASS, MODAL_ANIMATION_DURATION_MS, lockModalBodyScroll, unlockModalBodyScroll, ensureModalInteractionTracker, resolveModalTransformOrigin, registerModalFocusScope, unregisterModalFocusScope, getSolutionModalTitle, getSolutionResultMeta, formatSolutionTimestamp, getMarkerPresentation, resolveSrkAssetUrl, getProgressMaxAvailableMinutes, getProgressDurationMinutes, isProgressEnded, getProgressMetrics, getProblemHeaderBackgroundImage, getRankProblemStatusCellPresentation, captureModalTriggerPointFromMouseEvent, caniuse, shouldShowTimeColumn, calculateProblemStatisticsFooter, calculateDirtPercentage, calculateSEValue, srkSupportedVersions, formatProblemStatisticsAcceptedMinute, formatProblemStatisticsAverageHardness, formatProblemStatisticsPercent } from "@algoux/standard-ranklist-renderer-component-core";
3
+ import { SRK_ANIMATED_MODAL_ROOT_CLASS, MODAL_ANIMATION_DURATION_MS, lockModalBodyScroll, unlockModalBodyScroll, ensureModalInteractionTracker, resolveModalTransformOrigin, registerModalFocusScope, unregisterModalFocusScope, getSolutionModalTitle, getSolutionResultMeta, formatSolutionTimestamp, getMarkerPresentation, resolveSrkAssetUrl, formatTeamMemberName, getProgressMaxAvailableMinutes, getProgressDurationMinutes, isProgressEnded, getProgressMetrics, getProblemHeaderBackgroundImage, getRankProblemStatusCellPresentation, captureModalTriggerPointFromMouseEvent, caniuse, shouldShowTimeColumn, calculateProblemStatisticsFooter, calculateDirtPercentage, calculateSEValue, srkSupportedVersions, formatProblemStatisticsAcceptedMinute, formatProblemStatisticsAverageHardness, formatProblemStatisticsPercent } from "@algoux/standard-ranklist-renderer-component-core";
4
4
  import { EnumTheme, resolveUserMarkers, resolveText, secToTimeStr, numberToAlphabet, formatTimeDuration, resolveStyle } from "@algoux/standard-ranklist-utils";
5
5
  const _hoisted_1$7 = ["data-srk-modal-state"];
6
6
  const _hoisted_2$7 = ["aria-labelledby"];
@@ -208,7 +208,8 @@ const _sfc_main$6 = defineComponent({
208
208
  width: { default: 320 },
209
209
  rootClassName: { default: "srk-general-modal-root" },
210
210
  wrapClassName: { default: "srk-solutions-modal" },
211
- style: {}
211
+ style: {},
212
+ languages: {}
212
213
  },
213
214
  emits: ["close", "update:open"],
214
215
  setup(__props, { emit: __emit }) {
@@ -230,7 +231,7 @@ const _sfc_main$6 = defineComponent({
230
231
  };
231
232
  }
232
233
  }, { immediate: true });
233
- const resolvedTitle = computed(() => props.title || (cachedPayload.value ? getSolutionModalTitle(cachedPayload.value.problemIndex, cachedPayload.value.user) : ""));
234
+ const resolvedTitle = computed(() => props.title || (cachedPayload.value ? getSolutionModalTitle(cachedPayload.value.problemIndex, cachedPayload.value.user, props.languages) : ""));
234
235
  return (_ctx, _cache) => {
235
236
  return cachedPayload.value ? (openBlock(), createBlock(_sfc_main$7, {
236
237
  key: 0,
@@ -306,7 +307,8 @@ const _sfc_main$5 = defineComponent({
306
307
  rootClassName: { default: "srk-general-modal-root" },
307
308
  wrapClassName: { default: "srk-user-modal" },
308
309
  style: {},
309
- formatSrkAssetUrl: {}
310
+ formatSrkAssetUrl: {},
311
+ languages: {}
310
312
  },
311
313
  emits: ["close", "update:open"],
312
314
  setup(__props, { emit: __emit }) {
@@ -325,6 +327,12 @@ const _sfc_main$5 = defineComponent({
325
327
  function formatAssetUrl(url, field) {
326
328
  return resolveSrkAssetUrl(url, field, props.formatSrkAssetUrl);
327
329
  }
330
+ function resolveDisplayText(text) {
331
+ return resolveText(text, props.languages);
332
+ }
333
+ function formatMemberName(member) {
334
+ return formatTeamMemberName(member, props.languages);
335
+ }
328
336
  return (_ctx, _cache) => {
329
337
  return cachedUser.value ? (openBlock(), createBlock(_sfc_main$7, {
330
338
  key: 0,
@@ -339,8 +347,8 @@ const _sfc_main$5 = defineComponent({
339
347
  }, {
340
348
  default: withCtx(() => [
341
349
  createElementVNode("div", _hoisted_1$5, [
342
- createElementVNode("h3", _hoisted_2$5, toDisplayString(unref(resolveText)(cachedUser.value.name)), 1),
343
- cachedUser.value.organization ? (openBlock(), createElementBlock("p", _hoisted_3$4, toDisplayString(unref(resolveText)(cachedUser.value.organization)), 1)) : createCommentVNode("", true),
350
+ createElementVNode("h3", _hoisted_2$5, toDisplayString(resolveDisplayText(cachedUser.value.name)), 1),
351
+ cachedUser.value.organization ? (openBlock(), createElementBlock("p", _hoisted_3$4, toDisplayString(resolveDisplayText(cachedUser.value.organization)), 1)) : createCommentVNode("", true),
344
352
  createElementVNode("div", _hoisted_4$4, [
345
353
  createElementVNode("span", _hoisted_5$4, toDisplayString(cachedUser.value.official === false ? "\uFF0A \u975E\u6B63\u5F0F\u53C2\u52A0\u8005" : "\u6B63\u5F0F\u53C2\u52A0\u8005"), 1),
346
354
  (openBlock(true), createElementBlock(Fragment, null, renderList(resolvedMarkers.value, (marker) => {
@@ -348,16 +356,16 @@ const _sfc_main$5 = defineComponent({
348
356
  key: marker.marker.id,
349
357
  class: normalizeClass(["srk-user-modal-info-labels-label", marker.presentation.className]),
350
358
  style: normalizeStyle(marker.presentation.style)
351
- }, toDisplayString(unref(resolveText)(marker.marker.label)), 7);
359
+ }, toDisplayString(resolveDisplayText(marker.marker.label)), 7);
352
360
  }), 128))
353
361
  ]),
354
362
  cachedUser.value.teamMembers && cachedUser.value.teamMembers.length ? (openBlock(), createElementBlock("div", _hoisted_6$3, [
355
363
  (openBlock(true), createElementBlock(Fragment, null, renderList(cachedUser.value.teamMembers, (member, index) => {
356
364
  return openBlock(), createElementBlock(Fragment, {
357
- key: unref(resolveText)(member.name)
365
+ key: resolveDisplayText(member.name)
358
366
  }, [
359
367
  index > 0 ? (openBlock(), createElementBlock("span", _hoisted_7$3, " / ")) : createCommentVNode("", true),
360
- createElementVNode("span", null, toDisplayString(unref(resolveText)(member.name)), 1)
368
+ createElementVNode("span", null, toDisplayString(formatMemberName(member)), 1)
361
369
  ], 64);
362
370
  }), 128))
363
371
  ])) : createCommentVNode("", true),
@@ -557,7 +565,8 @@ const _sfc_main$3 = defineComponent({
557
565
  props: {
558
566
  problem: {},
559
567
  index: {},
560
- theme: { default: EnumTheme.light }
568
+ theme: { default: EnumTheme.light },
569
+ languages: {}
561
570
  },
562
571
  setup(__props) {
563
572
  const props = __props;
@@ -623,7 +632,8 @@ const _sfc_main$2 = defineComponent({
623
632
  onSolutionClick: {},
624
633
  statusCellPreset: { default: "classic" },
625
634
  statusColorAsText: { type: Boolean, default: false },
626
- emptyStatusPlaceholder: { default: null }
635
+ emptyStatusPlaceholder: { default: null },
636
+ languages: {}
627
637
  },
628
638
  setup(__props) {
629
639
  const props = __props;
@@ -649,7 +659,7 @@ const _sfc_main$2 = defineComponent({
649
659
  rowIndex: props.rowIndex,
650
660
  problemIndex: props.problemIndex,
651
661
  problemAlias: ((_a = props.problem) == null ? void 0 : _a.alias) || null,
652
- problemTitle: props.problem ? resolveText(props.problem.title) : null,
662
+ problemTitle: props.problem ? resolveText(props.problem.title, props.languages) : null,
653
663
  userId: props.user.id || null
654
664
  }
655
665
  });
@@ -776,16 +786,20 @@ const _sfc_main$1 = defineComponent({
776
786
  formatSrkAssetUrl: {},
777
787
  onUserClick: {},
778
788
  hideOrganization: { type: Boolean, default: false },
779
- hideAvatar: { type: Boolean, default: false }
789
+ hideAvatar: { type: Boolean, default: false },
790
+ languages: {}
780
791
  },
781
792
  setup(__props) {
782
793
  const props = __props;
783
- const name = computed(() => resolveText(props.user.name));
794
+ const name = computed(() => resolveDisplayText(props.user.name));
784
795
  const userMarkers = computed(() => resolveUserMarkers(props.user, props.markers));
785
796
  const resolvedMarkers = computed(() => userMarkers.value.map((marker) => ({
786
797
  marker,
787
798
  presentation: getMarkerPresentation(marker, props.theme)
788
799
  })));
800
+ function resolveDisplayText(text) {
801
+ return resolveText(text, props.languages);
802
+ }
789
803
  function emitUserClick(event) {
790
804
  var _a;
791
805
  captureModalTriggerPointFromMouseEvent(event, {
@@ -828,12 +842,12 @@ const _sfc_main$1 = defineComponent({
828
842
  key: marker.marker.id,
829
843
  class: normalizeClass(["srk-marker srk-marker-dot srk--c-tooltip", marker.presentation.className]),
830
844
  style: normalizeStyle(marker.presentation.style),
831
- "data-tooltip": unref(resolveText)(marker.marker.label)
845
+ "data-tooltip": resolveDisplayText(marker.marker.label)
832
846
  }, null, 14, _hoisted_8$1);
833
847
  }), 128))
834
848
  ])
835
849
  ]),
836
- __props.user.organization && !__props.hideOrganization ? (openBlock(), createElementBlock("p", _hoisted_9$1, toDisplayString(unref(resolveText)(__props.user.organization)), 1)) : createCommentVNode("", true)
850
+ __props.user.organization && !__props.hideOrganization ? (openBlock(), createElementBlock("p", _hoisted_9$1, toDisplayString(resolveDisplayText(__props.user.organization)), 1)) : createCommentVNode("", true)
837
851
  ])
838
852
  ])
839
853
  ], 2);
@@ -925,7 +939,8 @@ const _sfc_main = defineComponent({
925
939
  showDirtColumn: { type: Boolean, default: false },
926
940
  showSEColumn: { type: Boolean, default: false },
927
941
  emptyStatusPlaceholder: { default: null },
928
- userAvatarPlacement: { default: "user" }
942
+ userAvatarPlacement: { default: "user" },
943
+ languages: {}
929
944
  },
930
945
  emits: ["userClick", "solutionClick"],
931
946
  setup(__props, { emit: __emit }) {
@@ -945,8 +960,8 @@ const _sfc_main = defineComponent({
945
960
  tooltip: "Number of participants who solved this problem"
946
961
  },
947
962
  {
948
- key: "tried",
949
- label: "Tried",
963
+ key: "attempted",
964
+ label: "Attempted",
950
965
  tooltip: "Number of participants who attempted this problem"
951
966
  },
952
967
  {
@@ -978,6 +993,9 @@ const _sfc_main = defineComponent({
978
993
  function formatAssetUrl(url, field) {
979
994
  return resolveSrkAssetUrl(url, field, props.formatSrkAssetUrl);
980
995
  }
996
+ function resolveDisplayText(text) {
997
+ return resolveText(text, props.languages);
998
+ }
981
999
  function getRankValues(row) {
982
1000
  return row.rankValues || props.data.series.map(() => ({ rank: null, segmentIndex: null }));
983
1001
  }
@@ -1034,8 +1052,8 @@ const _sfc_main = defineComponent({
1034
1052
  switch (key) {
1035
1053
  case "accepted":
1036
1054
  return stat.accepted;
1037
- case "tried":
1038
- return stat.tried;
1055
+ case "attempted":
1056
+ return stat.attempted;
1039
1057
  case "submitted":
1040
1058
  return stat.submitted;
1041
1059
  case "dirt":
@@ -1054,8 +1072,8 @@ const _sfc_main = defineComponent({
1054
1072
  switch (key) {
1055
1073
  case "accepted":
1056
1074
  return formatProblemStatisticsPercent(stat.accepted, stat.participantCount);
1057
- case "tried":
1058
- return formatProblemStatisticsPercent(stat.tried, stat.participantCount);
1075
+ case "attempted":
1076
+ return formatProblemStatisticsPercent(stat.attempted, stat.participantCount);
1059
1077
  case "dirt":
1060
1078
  return formatProblemStatisticsPercent(stat.dirt, stat.dirtSubmitted);
1061
1079
  default:
@@ -1073,7 +1091,7 @@ const _sfc_main = defineComponent({
1073
1091
  context: {
1074
1092
  rowIndex: rowIndex || 0,
1075
1093
  userId: payloadOrRow.user.id || null,
1076
- userName: resolveText(payloadOrRow.user.name)
1094
+ userName: resolveDisplayText(payloadOrRow.user.name)
1077
1095
  }
1078
1096
  });
1079
1097
  }
@@ -1099,7 +1117,7 @@ const _sfc_main = defineComponent({
1099
1117
  rowIndex: rowIndex || 0,
1100
1118
  problemIndex: resolvedProblemIndex,
1101
1119
  problemAlias: (problem == null ? void 0 : problem.alias) || null,
1102
- problemTitle: problem ? resolveText(problem.title) : null,
1120
+ problemTitle: problem ? resolveDisplayText(problem.title) : null,
1103
1121
  userId: payloadOrRow.user.id || null
1104
1122
  }
1105
1123
  });
@@ -1138,14 +1156,15 @@ const _sfc_main = defineComponent({
1138
1156
  showTimeColumn.value ? (openBlock(), createElementBlock("th", _hoisted_7, toDisplayString(resolveColumnTitle("time", "Time")), 1)) : createCommentVNode("", true),
1139
1157
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.data.problems, (problem, problemIndex) => {
1140
1158
  return renderSlot(_ctx.$slots, "problem-header-cell", mergeProps({
1141
- key: problem.alias || unref(resolveText)(problem.title) || problemIndex,
1159
+ key: problem.alias || resolveDisplayText(problem.title) || problemIndex,
1142
1160
  ref_for: true
1143
- }, { problem, problemIndex, index: problemIndex, theme: resolvedTheme.value }), () => [
1161
+ }, { problem, problemIndex, index: problemIndex, theme: resolvedTheme.value, languages: __props.languages }), () => [
1144
1162
  createVNode(_sfc_main$3, {
1145
1163
  problem,
1146
1164
  index: problemIndex,
1147
- theme: resolvedTheme.value
1148
- }, null, 8, ["problem", "index", "theme"])
1165
+ theme: resolvedTheme.value,
1166
+ languages: __props.languages
1167
+ }, null, 8, ["problem", "index", "theme", "languages"])
1149
1168
  ]);
1150
1169
  }), 128)),
1151
1170
  __props.showDirtColumn ? (openBlock(), createElementBlock("th", _hoisted_8, toDisplayString(resolveColumnTitle("dirt", "Dirt")), 1)) : createCommentVNode("", true),
@@ -1155,7 +1174,7 @@ const _sfc_main = defineComponent({
1155
1174
  createElementVNode("tbody", null, [
1156
1175
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.data.rows, (row, rowIndex) => {
1157
1176
  return openBlock(), createElementBlock("tr", {
1158
- key: row.user.id || unref(resolveText)(row.user.name)
1177
+ key: row.user.id || resolveDisplayText(row.user.name)
1159
1178
  }, [
1160
1179
  (openBlock(true), createElementBlock(Fragment, null, renderList(getRankValues(row), (rankValue, seriesIndex) => {
1161
1180
  var _a;
@@ -1181,8 +1200,8 @@ const _sfc_main = defineComponent({
1181
1200
  ])) : createCommentVNode("", true),
1182
1201
  createElementVNode("span", {
1183
1202
  class: "srk-organization-name-text",
1184
- title: row.user.organization ? unref(resolveText)(row.user.organization) : ""
1185
- }, toDisplayString(row.user.organization ? unref(resolveText)(row.user.organization) : ""), 9, _hoisted_13)
1203
+ title: row.user.organization ? resolveDisplayText(row.user.organization) : ""
1204
+ }, toDisplayString(row.user.organization ? resolveDisplayText(row.user.organization) : ""), 9, _hoisted_13)
1186
1205
  ])
1187
1206
  ], 2)) : createCommentVNode("", true),
1188
1207
  renderSlot(_ctx.$slots, "user-cell", mergeProps({ ref_for: true }, {
@@ -1194,6 +1213,7 @@ const _sfc_main = defineComponent({
1194
1213
  theme: resolvedTheme.value,
1195
1214
  hideOrganization: __props.splitOrganization,
1196
1215
  hideAvatar: showAvatarInOrganization.value,
1216
+ languages: __props.languages,
1197
1217
  onClick: (event) => emitUserClick(row, rowIndex, event)
1198
1218
  }), () => [
1199
1219
  createVNode(_sfc_main$1, {
@@ -1206,8 +1226,9 @@ const _sfc_main = defineComponent({
1206
1226
  "format-srk-asset-url": formatAssetUrl,
1207
1227
  "on-user-click": emitUserClick,
1208
1228
  "hide-organization": __props.splitOrganization,
1209
- "hide-avatar": showAvatarInOrganization.value
1210
- }, null, 8, ["user", "row", "row-index", "ranklist", "markers", "theme", "hide-organization", "hide-avatar"])
1229
+ "hide-avatar": showAvatarInOrganization.value,
1230
+ languages: __props.languages
1231
+ }, null, 8, ["user", "row", "row-index", "ranklist", "markers", "theme", "hide-organization", "hide-avatar", "languages"])
1211
1232
  ]),
1212
1233
  createElementVNode("td", _hoisted_14, toDisplayString(row.score.value), 1),
1213
1234
  showTimeColumn.value ? (openBlock(), createElementBlock("td", _hoisted_15, toDisplayString(row.score.time ? unref(formatTimeDuration)(row.score.time, "min", Math.floor) : "-"), 1)) : createCommentVNode("", true),
@@ -1228,6 +1249,7 @@ const _sfc_main = defineComponent({
1228
1249
  statusCellPreset: __props.statusCellPreset,
1229
1250
  statusColorAsText: __props.statusColorAsText,
1230
1251
  emptyStatusPlaceholder: __props.emptyStatusPlaceholder,
1252
+ languages: __props.languages,
1231
1253
  onClick: (event) => emitSolutionClick(row, rowIndex, status, problemIndex, event)
1232
1254
  }), () => [
1233
1255
  createVNode(_sfc_main$2, {
@@ -1241,8 +1263,9 @@ const _sfc_main = defineComponent({
1241
1263
  "on-solution-click": emitSolutionClick,
1242
1264
  "status-cell-preset": __props.statusCellPreset,
1243
1265
  "status-color-as-text": __props.statusColorAsText,
1244
- "empty-status-placeholder": __props.emptyStatusPlaceholder
1245
- }, null, 8, ["status", "problem", "problem-index", "user", "row", "row-index", "ranklist", "status-cell-preset", "status-color-as-text", "empty-status-placeholder"])
1266
+ "empty-status-placeholder": __props.emptyStatusPlaceholder,
1267
+ languages: __props.languages
1268
+ }, null, 8, ["status", "problem", "problem-index", "user", "row", "row-index", "ranklist", "status-cell-preset", "status-color-as-text", "empty-status-placeholder", "languages"])
1246
1269
  ]);
1247
1270
  }), 128)),
1248
1271
  __props.showDirtColumn ? (openBlock(), createElementBlock("td", _hoisted_16, toDisplayString(unref(calculateDirtPercentage)(row)), 1)) : createCommentVNode("", true),
@@ -1293,7 +1316,7 @@ const _sfc_main = defineComponent({
1293
1316
  }, null, 8, _hoisted_26),
1294
1317
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.data.problems, (problem, problemIndex) => {
1295
1318
  return openBlock(), createElementBlock("td", {
1296
- key: problem.alias || unref(resolveText)(problem.title) || problemIndex,
1319
+ key: problem.alias || resolveDisplayText(problem.title) || problemIndex,
1297
1320
  class: "srk-problem-statistics-footer-cell srk-problem-statistics-footer-problem-header srk-problem-header srk--text-center srk--nowrap",
1298
1321
  style: normalizeStyle({ backgroundImage: unref(getProblemHeaderBackgroundImage)(problem.style, resolvedTheme.value, 0) })
1299
1322
  }, [
@@ -45,6 +45,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
45
45
  type: ObjectConstructor;
46
46
  required: false;
47
47
  };
48
+ languages: {
49
+ type: ArrayConstructor;
50
+ required: false;
51
+ };
48
52
  }>, {
49
53
  props: any;
50
54
  emit: (event: "close" | "update:open", ...args: any[]) => void;
@@ -332,6 +336,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
332
336
  type: ObjectConstructor;
333
337
  required: false;
334
338
  };
339
+ languages: {
340
+ type: ArrayConstructor;
341
+ required: false;
342
+ };
335
343
  }>> & Readonly<{
336
344
  onClose?: ((...args: any[]) => any) | undefined;
337
345
  "onUpdate:open"?: ((...args: any[]) => any) | undefined;
@@ -1,4 +1,5 @@
1
1
  import type * as srk from '@algoux/standard-ranklist';
2
+ import { resolveText } from '@algoux/standard-ranklist-utils';
2
3
  declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
4
  open: {
4
5
  type: BooleanConstructor;
@@ -46,6 +47,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
46
47
  type: FunctionConstructor;
47
48
  required: false;
48
49
  };
50
+ languages: {
51
+ type: ArrayConstructor;
52
+ required: false;
53
+ };
49
54
  }>, {
50
55
  props: any;
51
56
  emit: (event: "close" | "update:open", ...args: any[]) => void;
@@ -100,7 +105,8 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
100
105
  } | null>;
101
106
  resolvedMarkers: import("vue").ComputedRef<any>;
102
107
  formatAssetUrl: (url: string, field: string) => string;
103
- readonly resolveText: any;
108
+ resolveDisplayText: (text: Parameters<typeof resolveText>[0]) => any;
109
+ formatMemberName: (member: srk.ExternalUser) => string;
104
110
  Modal: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
105
111
  open: {
106
112
  type: BooleanConstructor;
@@ -268,6 +274,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
268
274
  type: FunctionConstructor;
269
275
  required: false;
270
276
  };
277
+ languages: {
278
+ type: ArrayConstructor;
279
+ required: false;
280
+ };
271
281
  }>> & Readonly<{
272
282
  onClose?: ((...args: any[]) => any) | undefined;
273
283
  "onUpdate:open"?: ((...args: any[]) => any) | undefined;
@@ -12,6 +12,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
12
12
  required: false;
13
13
  default: any;
14
14
  };
15
+ languages: {
16
+ type: ArrayConstructor;
17
+ required: false;
18
+ };
15
19
  }>, {
16
20
  props: any;
17
21
  alias: import("vue").ComputedRef<any>;
@@ -32,6 +36,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
32
36
  required: false;
33
37
  default: any;
34
38
  };
39
+ languages: {
40
+ type: ArrayConstructor;
41
+ required: false;
42
+ };
35
43
  }>> & Readonly<{}>, {
36
44
  theme: string;
37
45
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -46,6 +46,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
46
46
  required: false;
47
47
  default: null;
48
48
  };
49
+ languages: {
50
+ type: ArrayConstructor;
51
+ required: false;
52
+ };
49
53
  }>, {
50
54
  props: any;
51
55
  fbStar: string;
@@ -133,6 +137,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
133
137
  required: false;
134
138
  default: null;
135
139
  };
140
+ languages: {
141
+ type: ArrayConstructor;
142
+ required: false;
143
+ };
136
144
  }>> & Readonly<{}>, {
137
145
  statusCellPreset: string;
138
146
  statusColorAsText: boolean;
@@ -1,3 +1,4 @@
1
+ import { resolveText } from '@algoux/standard-ranklist-utils';
1
2
  declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
3
  user: {
3
4
  type: null;
@@ -43,13 +44,17 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
43
44
  required: false;
44
45
  default: boolean;
45
46
  };
47
+ languages: {
48
+ type: ArrayConstructor;
49
+ required: false;
50
+ };
46
51
  }>, {
47
52
  props: any;
48
53
  name: import("vue").ComputedRef<any>;
49
54
  userMarkers: import("vue").ComputedRef<any>;
50
55
  resolvedMarkers: import("vue").ComputedRef<any>;
56
+ resolveDisplayText: (text: Parameters<typeof resolveText>[0]) => any;
51
57
  emitUserClick: (event: MouseEvent) => void;
52
- readonly resolveText: any;
53
58
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
54
59
  user: {
55
60
  type: null;
@@ -95,6 +100,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
95
100
  required: false;
96
101
  default: boolean;
97
102
  };
103
+ languages: {
104
+ type: ArrayConstructor;
105
+ required: false;
106
+ };
98
107
  }>> & Readonly<{}>, {
99
108
  theme: string;
100
109
  markers: unknown[];
package/dist/types.d.ts CHANGED
@@ -19,12 +19,14 @@ export interface RanklistProps {
19
19
  showSEColumn?: boolean;
20
20
  emptyStatusPlaceholder?: string | null;
21
21
  userAvatarPlacement?: RanklistUserAvatarPlacement;
22
+ languages?: readonly string[];
22
23
  }
23
24
  export interface ProblemHeaderCellSlotProps {
24
25
  problem: srk.Problem;
25
26
  problemIndex: number;
26
27
  index: number;
27
28
  theme?: EnumTheme;
29
+ languages?: readonly string[];
28
30
  }
29
31
  export interface UserCellSlotProps {
30
32
  user: srk.User;
@@ -35,6 +37,7 @@ export interface UserCellSlotProps {
35
37
  theme?: EnumTheme;
36
38
  hideOrganization?: boolean;
37
39
  hideAvatar?: boolean;
40
+ languages?: readonly string[];
38
41
  onClick: (event?: MouseEvent) => void;
39
42
  }
40
43
  export interface StatusCellSlotProps {
@@ -49,6 +52,7 @@ export interface StatusCellSlotProps {
49
52
  statusCellPreset?: RanklistStatusCellPreset;
50
53
  statusColorAsText?: boolean;
51
54
  emptyStatusPlaceholder?: string | null;
55
+ languages?: readonly string[];
52
56
  onClick: (event?: MouseEvent) => void;
53
57
  }
54
58
  export interface ProgressBarProps {
@@ -74,6 +78,7 @@ export interface DefaultUserModalProps extends Pick<ModalProps, 'open' | 'rootCl
74
78
  title?: string;
75
79
  width?: number;
76
80
  formatSrkAssetUrl?: (url: string, field: string) => string;
81
+ languages?: readonly string[];
77
82
  }
78
83
  export interface DefaultSolutionModalProps extends Pick<ModalProps, 'open' | 'rootClassName' | 'wrapClassName' | 'style'> {
79
84
  user?: srk.User | null;
@@ -82,6 +87,7 @@ export interface DefaultSolutionModalProps extends Pick<ModalProps, 'open' | 'ro
82
87
  solutions: srk.Solution[];
83
88
  title?: string;
84
89
  width?: number;
90
+ languages?: readonly string[];
85
91
  }
86
92
  export declare type RanklistEvents = {
87
93
  userClick: UserClickPayload;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@algoux/standard-ranklist-renderer-component-vue",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "description": "Vue components for Standard Ranklist Renderer Component",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/algoux/standard-ranklist-renderer-component",
@@ -28,9 +28,9 @@
28
28
  "registry": "https://registry.npmjs.org/"
29
29
  },
30
30
  "dependencies": {
31
- "@algoux/standard-ranklist-utils": "^0.2.11",
32
- "@algoux/standard-ranklist-renderer-component-core": "0.6.1",
33
- "@algoux/standard-ranklist-renderer-component-styles": "0.6.1"
31
+ "@algoux/standard-ranklist-utils": "^0.3.1",
32
+ "@algoux/standard-ranklist-renderer-component-styles": "0.6.1",
33
+ "@algoux/standard-ranklist-renderer-component-core": "0.6.2"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@algoux/standard-ranklist": "*",