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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -76,8 +76,18 @@ function handleSolutionClick(payload: SolutionClickPayload) {
76
76
  </template>
77
77
  ```
78
78
 
79
+ ## Advanced Usage
80
+
79
81
  Use `Modal` directly when you want custom modal content. `Ranklist` exposes scoped slots such as `userCell` and `statusCell` for targeted table-cell customization.
80
82
 
83
+ For custom interaction flows, `Ranklist` emits three semantic click events:
84
+
85
+ - `@user-click`: receives `UserClickPayload` when a user cell is clicked.
86
+ - `@problem-click`: receives `ProblemClickPayload` when a problem header is clicked. When listened to, default problem headers are always clickable and problem links are not rendered as anchors.
87
+ - `@solution-click`: receives `SolutionClickPayload` when a status cell with submissions is clicked.
88
+
89
+ `problem-header-cell` slots receive `ranklist` and an `onClick` helper so they can opt into the same problem-click payload path.
90
+
81
91
  ## Ranklist Render Options
82
92
 
83
93
  `Ranklist` includes optional render props for changing the table structure and status presentation while keeping the default behavior unchanged:
@@ -94,6 +104,7 @@ Use `Modal` directly when you want custom modal content. `Ranklist` exposes scop
94
104
  - `columnBordered`: adds column separators controlled by CSS variables.
95
105
  - `emptyStatusPlaceholder`: renders a custom string in no-submission status cells.
96
106
  - `userAvatarPlacement`: chooses whether the default user avatar renders in the user column or, when `splitOrganization` is enabled, in the organization column.
107
+ - `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
108
 
98
109
  ```vue
99
110
  <script setup lang="ts">
@@ -121,6 +132,7 @@ const columnTitles = {
121
132
  column-bordered
122
133
  empty-status-placeholder="·"
123
134
  user-avatar-placement="organization"
135
+ :languages="['zh-CN']"
124
136
  :column-titles="columnTitles"
125
137
  />
126
138
  </template>
@@ -1,6 +1,7 @@
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
- import type { ProblemStatisticsFooter, RanklistColumnTitles, RankValue, SolutionClickPayload, StaticRanklistRow, UserClickPayload } from '@algoux/standard-ranklist-renderer-component-core';
4
+ import type { ProblemStatisticsFooter, ProblemClickPayload, RanklistColumnTitles, RankValue, SolutionClickPayload, StaticRanklistRow, UserClickPayload } from '@algoux/standard-ranklist-renderer-component-core';
4
5
  declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
5
6
  data: {
6
7
  type: ObjectConstructor;
@@ -74,10 +75,16 @@ 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
- emit: (event: "userClick" | "solutionClick", ...args: any[]) => void;
84
+ emit: (event: "userClick" | "problemClick" | "solutionClick", ...args: any[]) => void;
85
+ instance: import("vue").ComponentInternalInstance | null;
80
86
  resolvedTheme: import("vue").ComputedRef<any>;
87
+ hasProblemClickListener: import("vue").ComputedRef<boolean>;
81
88
  supportedVersions: any;
82
89
  isSupportedVersion: import("vue").ComputedRef<boolean>;
83
90
  showTimeColumn: import("vue").ComputedRef<boolean>;
@@ -90,6 +97,7 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
90
97
  tooltip: string;
91
98
  }[];
92
99
  formatAssetUrl: (url: string, field: string) => string;
100
+ resolveDisplayText: (text: Parameters<typeof resolveText>[0]) => any;
93
101
  getRankValues: (row: StaticRanklistRow) => RankValue[];
94
102
  getRankText: (rankValue: RankValue, row: StaticRanklistRow) => number | "" | "*";
95
103
  isSeriesSegmentedColumn: (series: srk.RankSeries | undefined) => boolean;
@@ -105,13 +113,14 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
105
113
  backgroundColor: any;
106
114
  };
107
115
  getStatusSolutions: (status: srk.RankProblemStatus) => srk.Solution[];
116
+ emitProblemClickPayload: (payload: ProblemClickPayload) => void;
117
+ emitProblemClick: (problem: srk.Problem, problemIndex: number, event?: MouseEvent | undefined) => void;
108
118
  getProblemStatisticsFooterCellPrimary: (key: string, stat: ProblemStatisticsFooter) => string | number;
109
119
  getProblemStatisticsFooterCellSecondary: (key: string, stat: ProblemStatisticsFooter) => string | undefined;
110
120
  emitUserClick: (payloadOrRow: UserClickPayload | StaticRanklistRow, rowIndex?: number | undefined, event?: MouseEvent | undefined) => void;
111
121
  emitSolutionClick: (payloadOrRow: SolutionClickPayload | StaticRanklistRow, rowIndex?: number | undefined, status?: srk.RankProblemStatus | undefined, problemIndex?: number | undefined, event?: MouseEvent | undefined) => void;
112
122
  readonly formatTimeDuration: any;
113
123
  readonly numberToAlphabet: any;
114
- readonly resolveText: any;
115
124
  readonly calculateDirtPercentage: typeof calculateDirtPercentage;
116
125
  readonly calculateSEValue: typeof calculateSEValue;
117
126
  readonly getProblemHeaderBackgroundImage: typeof getProblemHeaderBackgroundImage;
@@ -124,17 +133,31 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
124
133
  type: NumberConstructor;
125
134
  required: true;
126
135
  };
136
+ ranklist: {
137
+ type: ObjectConstructor;
138
+ required: true;
139
+ };
127
140
  theme: {
128
141
  type: StringConstructor;
129
142
  required: false;
130
143
  default: any;
131
144
  };
145
+ languages: {
146
+ type: ArrayConstructor;
147
+ required: false;
148
+ };
149
+ onProblemClick: {
150
+ type: FunctionConstructor;
151
+ required: false;
152
+ };
132
153
  }>, {
133
154
  props: any;
134
155
  alias: import("vue").ComputedRef<any>;
156
+ title: import("vue").ComputedRef<any>;
135
157
  stat: import("vue").ComputedRef<any>;
136
158
  statDesc: import("vue").ComputedRef<string>;
137
159
  backgroundImage: import("vue").ComputedRef<string>;
160
+ handleClick: (event: MouseEvent) => void;
138
161
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
139
162
  problem: {
140
163
  type: null;
@@ -144,11 +167,23 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
144
167
  type: NumberConstructor;
145
168
  required: true;
146
169
  };
170
+ ranklist: {
171
+ type: ObjectConstructor;
172
+ required: true;
173
+ };
147
174
  theme: {
148
175
  type: StringConstructor;
149
176
  required: false;
150
177
  default: any;
151
178
  };
179
+ languages: {
180
+ type: ArrayConstructor;
181
+ required: false;
182
+ };
183
+ onProblemClick: {
184
+ type: FunctionConstructor;
185
+ required: false;
186
+ };
152
187
  }>> & Readonly<{}>, {
153
188
  theme: string;
154
189
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -200,6 +235,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
200
235
  required: false;
201
236
  default: null;
202
237
  };
238
+ languages: {
239
+ type: ArrayConstructor;
240
+ required: false;
241
+ };
203
242
  }>, {
204
243
  props: any;
205
244
  fbStar: string;
@@ -287,6 +326,10 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
287
326
  required: false;
288
327
  default: null;
289
328
  };
329
+ languages: {
330
+ type: ArrayConstructor;
331
+ required: false;
332
+ };
290
333
  }>> & Readonly<{}>, {
291
334
  statusCellPreset: string;
292
335
  statusColorAsText: boolean;
@@ -337,13 +380,17 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
337
380
  required: false;
338
381
  default: boolean;
339
382
  };
383
+ languages: {
384
+ type: ArrayConstructor;
385
+ required: false;
386
+ };
340
387
  }>, {
341
388
  props: any;
342
389
  name: import("vue").ComputedRef<any>;
343
390
  userMarkers: import("vue").ComputedRef<any>;
344
391
  resolvedMarkers: import("vue").ComputedRef<any>;
392
+ resolveDisplayText: (text: unknown) => any;
345
393
  emitUserClick: (event: MouseEvent) => void;
346
- readonly resolveText: any;
347
394
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
348
395
  user: {
349
396
  type: null;
@@ -389,13 +436,17 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
389
436
  required: false;
390
437
  default: boolean;
391
438
  };
439
+ languages: {
440
+ type: ArrayConstructor;
441
+ required: false;
442
+ };
392
443
  }>> & Readonly<{}>, {
393
444
  theme: string;
394
445
  markers: unknown[];
395
446
  hideOrganization: boolean;
396
447
  hideAvatar: boolean;
397
448
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
398
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("userClick" | "solutionClick")[], "userClick" | "solutionClick", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
449
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("userClick" | "problemClick" | "solutionClick")[], "userClick" | "problemClick" | "solutionClick", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
399
450
  data: {
400
451
  type: ObjectConstructor;
401
452
  required: true;
@@ -468,8 +519,13 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
468
519
  required: false;
469
520
  default: string;
470
521
  };
522
+ languages: {
523
+ type: ArrayConstructor;
524
+ required: false;
525
+ };
471
526
  }>> & Readonly<{
472
527
  onUserClick?: ((...args: any[]) => any) | undefined;
528
+ onProblemClick?: ((...args: any[]) => any) | undefined;
473
529
  onSolutionClick?: ((...args: any[]) => any) | undefined;
474
530
  }>, {
475
531
  theme: string;
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 H=["data-srk-modal-state"],K=["aria-labelledby"],j={class:"srk-modal-content"},J={key:0,class:"srk-modal-header"},W={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:o}){let s=0;const u=t,n=o,f=`srk-vue-modal-title-${++s}`,v=e.ref(null),i=e.ref(u.open||!u.destroyOnClose),m=e.ref(u.open?"pre-open":"closing"),c=e.ref({x:0,y:0});let g=null,k=null,S=null;const x=e.computed(()=>i.value||!u.destroyOnClose),D=e.computed(()=>["srk-modal-root",d.SRK_ANIMATED_MODAL_ROOT_CLASS,u.rootClassName].filter(Boolean)),N=e.computed(()=>u.open||u.destroyOnClose&&i.value),z=e.computed(()=>{var b,w;return{...u.style,width:u.width?`${u.width}px`:(b=u.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"]:u.width?`${u.width}px`:typeof((w=u.style)==null?void 0:w.width)=="string"?u.style.width:void 0}});function M(){if(typeof window=="undefined"){g=null,k=null;return}g!==null&&(window.clearTimeout(g),g=null),k!==null&&(window.clearTimeout(k),k=null)}async function T(){if(await e.nextTick(),typeof window=="undefined"||!u.open||!i.value||m.value!=="pre-open")return;E();const b=d.resolveModalTransformOrigin(v.value);c.value=b.origin,k=window.setTimeout(()=>{m.value="opening",k=null},0)}function E(){const b=d.registerModalFocusScope(v.value,{onEscape:F});S===null&&(S=b)}function C(){S!==null&&(d.unregisterModalFocusScope(S),S=null)}function P(b){n("update:open",!1),n("close",b)}function A(b){u.closeOnMaskClick&&b.target===b.currentTarget&&P("mask")}function F(b){u.open&&u.closeOnEsc&&P("escape")}return e.watch(()=>u.open,async b=>{if(M(),b){i.value=!0,c.value={x:0,y:0},m.value="pre-open",await T();return}if(C(),m.value="closing",!u.destroyOnClose){i.value=!0;return}i.value&&typeof window!="undefined"&&(g=window.setTimeout(()=>{i.value=!1,g=null},d.MODAL_ANIMATION_DURATION_MS))},{immediate:!0}),e.watchEffect(b=>{!N.value||(d.lockModalBodyScroll(),b(()=>{d.unlockModalBodyScroll()}))}),e.onMounted(()=>{d.ensureModalInteractionTracker(),u.open&&E()}),e.onBeforeUnmount(()=>{M(),C()}),(b,w)=>x.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(D.value),"data-srk-modal-state":m.value},[w[2]||(w[2]=e.createElementVNode("div",{class:"srk-modal-mask"},null,-1)),e.createElementVNode("div",{class:e.normalizeClass(["srk-modal-wrap",t.wrapClassName]),tabindex:"-1",onMousedown:A},[e.createElementVNode("div",{class:"srk-modal",role:"dialog","aria-modal":"true","aria-labelledby":t.title?f:void 0,"data-srk-modal-panel":"true",tabindex:"-1",ref_key:"dialogRef",ref:v,style:e.normalizeStyle(z.value)},[e.createElementVNode("div",j,[e.createElementVNode("button",{"aria-label":"Close",class:"srk-modal-close",type:"button",onClick:w[0]||(w[0]=U=>P("close-button"))},[...w[1]||(w[1]=[e.createElementVNode("span",{class:"srk-modal-close-x"},null,-1)])]),t.title!==void 0?(e.openBlock(),e.createElementBlock("div",J,[e.createElementVNode("div",{id:f,class:"srk-modal-title"},e.toDisplayString(t.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",W,[e.renderSlot(b.$slots,"default")])])],12,K)],34)],10,H)):e.createCommentVNode("",!0)}}),G={class:"srk-common-table srk-solutions-table"},Q={class:"srk--text-right"},X=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 s=t,u=o,n=e.ref(s.user?{user:s.user,problem:s.problem,problemIndex:s.problemIndex,solutions:s.solutions}:null);e.watch([()=>s.user,()=>s.problem,()=>s.problemIndex,()=>s.solutions],([v,i,m,c])=>{v&&(n.value={user:v,problem:i,problemIndex:m,solutions:c})},{immediate:!0});const f=e.computed(()=>s.title||(n.value?d.getSolutionModalTitle(n.value.problemIndex,n.value.user,s.languages):""));return(v,i)=>n.value?(e.openBlock(),e.createBlock(I,{key:0,open:t.open,title:f.value,width:t.width,"root-class-name":t.rootClassName,"wrap-class-name":t.wrapClassName,style:e.normalizeStyle(t.style),onClose:i[0]||(i[0]=m=>u("close",m)),"onUpdate:open":i[1]||(i[1]=m=>u("update:open",m))},{default:e.withCtx(()=>[e.createElementVNode("table",G,[i[2]||(i[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(n.value.solutions,(m,c)=>{var g;return e.openBlock(),e.createElementBlock("tr",{key:`${m.result}_${(g=m.time)==null?void 0:g[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",Q,e.toDisplayString(e.unref(d.formatSolutionTimestamp)(m)),1)])}),128))])])]),_:1},8,["open","title","width","root-class-name","wrap-class-name","style"])):e.createCommentVNode("",!0)}}),Y={class:"srk-user-modal-info"},Z={class:"srk-user-modal-info-user-name"},_={key:0,class:"srk-user-modal-info-user-second-name"},ee={class:"srk-user-modal-info-labels"},te={class:"srk-user-modal-info-labels-label srk-user-modal-info-labels-label-preset-general"},le={key:1,class:"srk-user-modal-info-team-members"},se={key:0,class:"srk-user-modal-info-team-members-slash"},oe={key:2,class:"srk-user-modal-info-photo"},re=["src"],ae=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 s=t,u=o,n=e.ref(s.user||null);e.watch(()=>s.user,c=>{c&&(n.value=c)},{immediate:!0});const f=e.computed(()=>n.value?B.resolveUserMarkers(n.value,s.markers).map(c=>({marker:c,presentation:d.getMarkerPresentation(c,s.theme)})):[]);function v(c,g){return d.resolveSrkAssetUrl(c,g,s.formatSrkAssetUrl)}function i(c){return B.resolveText(c,s.languages)}function m(c){return d.formatTeamMemberName(c,s.languages)}return(c,g)=>n.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:g[0]||(g[0]=k=>u("close",k)),"onUpdate:open":g[1]||(g[1]=k=>u("update:open",k))},{default:e.withCtx(()=>[e.createElementVNode("div",Y,[e.createElementVNode("h3",Z,e.toDisplayString(i(n.value.name)),1),n.value.organization?(e.openBlock(),e.createElementBlock("p",_,e.toDisplayString(i(n.value.organization)),1)):e.createCommentVNode("",!0),e.createElementVNode("div",ee,[e.createElementVNode("span",te,e.toDisplayString(n.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(f.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(i(k.marker.label)),7))),128))]),n.value.teamMembers&&n.value.teamMembers.length?(e.openBlock(),e.createElementBlock("div",le,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value.teamMembers,(k,S)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:i(k.name)},[S>0?(e.openBlock(),e.createElementBlock("span",se," / ")):e.createCommentVNode("",!0),e.createElementVNode("span",null,e.toDisplayString(m(k)),1)],64))),128))])):e.createCommentVNode("",!0),n.value.photo?(e.openBlock(),e.createElementBlock("div",oe,[e.createElementVNode("img",{src:v(n.value.photo,"user.photo"),alt:"User portrait",class:"srk-user-modal-info-photo-img"},null,8,re)])):e.createCommentVNode("",!0)])]),_:1},8,["open","title","width","root-class-name","wrap-class-name","style"])):e.createCommentVNode("",!0)}}),ne={class:"srk-progress-bar-container"},ie={class:"srk-progress-bar"},ce={class:"srk-progress-bar-body"},ue={key:0,class:"srk-progress-slider-layer"},de=["max","title"],me={class:"srk-progress-secondary-area"},ke={class:"srk-progress-secondary-area-center"},pe={key:0,class:"srk-progress-time-machine-status"},fe={key:1,class:"srk-progress-live-text"},ge={key:2,style:{visibility:"hidden"}},ve=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 s=t,u=o,n=e.ref(Date.now()),f=e.ref(!1),v=e.ref(!1),i=e.ref(d.getProgressMaxAvailableMinutes(s.data.contest,n.value,s.td)),m=e.ref(null);let c;const g=e.computed(()=>d.getProgressDurationMinutes(s.data.contest)),k=e.computed(()=>d.getProgressMaxAvailableMinutes(s.data.contest,n.value,s.td)),S=e.computed(()=>d.isProgressEnded(s.data.contest,n.value,s.td)),x=e.computed(()=>d.getProgressMetrics(s.data,n.value,s.td,i.value,f.value));function D(){n.value=Date.now(),S.value&&c!==void 0&&(window.clearInterval(c),c=void 0)}function N(E){typeof window!="undefined"&&(E&&c===void 0&&(c=window.setInterval(D,1e3)),!E&&c!==void 0&&(window.clearInterval(c),c=void 0))}function z(E){const C=E>=g.value||E>=k.value;u("timeTravel",C?null:E*60*1e3),f.value=!C,m.value=C?null:E*60*1e3,v.value=!1}function M(){v.value=!0,f.value=!0}function T(){v.value&&z(i.value)}return e.watch(k,E=>{!v.value&&m.value===null&&(i.value=E)}),e.watch(()=>s.live,E=>N(E),{immediate:!0}),e.watch(()=>s.data.contest.title,()=>{v.value=!1,i.value=k.value,m.value=null,f.value=!1,u("timeTravel",null)}),e.onBeforeUnmount(()=>{c!==void 0&&(window.clearInterval(c),c=void 0)}),(E,C)=>(e.openBlock(),e.createElementBlock("div",ne,[e.createElementVNode("div",ie,[e.createElementVNode("div",ce,[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",ue,[v.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"srk-progress-slider-tooltip",style:e.normalizeStyle({left:`${g.value?i.value/g.value*100:0}%`})},e.toDisplayString(e.unref(B.secToTimeStr)(i.value*60)),5)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":C[0]||(C[0]=P=>i.value=P),"aria-label":"Time Travel",class:"srk-progress-slider",max:g.value,min:"0",step:"1",title:e.unref(B.secToTimeStr)(i.value*60),type:"range",onBlur:T,onKeydown:M,onKeyup:T,onMousedown:M,onMouseup:T,onTouchend:T,onTouchstart:M},null,40,de),[[e.vModelText,i.value,void 0,{number:!0}]])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",me,[e.createElementVNode("div",{class:"srk-progress-secondary-area-left",style:e.normalizeStyle(t.live||f.value?{}:{display:"none"})}," Elapsed: "+e.toDisplayString(e.unref(B.secToTimeStr)(Math.round(x.value.elapsed/1e3))),5),e.createElementVNode("div",ke,[f.value?(e.openBlock(),e.createElementBlock("div",pe,[...C[1]||(C[1]=[e.createElementVNode("div",{class:"srk-progress-time-machine-text"},"Time Travel Mode",-1)])])):t.live&&!S.value?(e.openBlock(),e.createElementBlock("div",fe,"Live")):(e.openBlock(),e.createElementBlock("div",ge,"SRK"))]),e.createElementVNode("div",{class:"srk-progress-secondary-area-right",style:e.normalizeStyle(t.live||f.value?{}:{display:"none"})}," Remaining: "+e.toDisplayString(e.unref(B.secToTimeStr)(Math.round(x.value.remaining/1e3))),5)])]))}}),ye=["href"],he={class:"srk--display-block"},be=["title"],Be={class:"srk--display-block"},Ce=["title"],Ee=e.defineComponent({__name:"ProblemHeaderCell",props:{problem:{},index:{},ranklist:{},theme:{default:B.EnumTheme.light},languages:{},onProblemClick:{}},setup(t){const o=t,s=e.computed(()=>o.problem.alias||B.numberToAlphabet(o.index)),u=e.computed(()=>B.resolveText(o.problem.title,o.languages)),n=e.computed(()=>o.problem.statistics),f=e.computed(()=>{if(!n.value)return"";const m=n.value.submitted?(n.value.accepted/n.value.submitted*100).toFixed(1):0;return`${n.value.accepted} / ${n.value.submitted} (${m}%)`}),v=e.computed(()=>d.getProblemHeaderBackgroundImage(o.problem.style,o.theme));function i(m){!o.onProblemClick||(m.preventDefault(),d.captureModalTriggerPointFromMouseEvent(m,{source:"problem-header",context:{problemIndex:o.index,problemAlias:o.problem.alias||null,problemTitle:u.value||null}}),o.onProblemClick({problem:o.problem,problemIndex:o.index,ranklist:o.ranklist}))}return(m,c)=>(e.openBlock(),e.createElementBlock("th",{class:e.normalizeClass(["srk--nowrap srk-problem-header",{"srk--cursor-pointer":!!t.onProblemClick}]),style:e.normalizeStyle({backgroundImage:v.value}),onClick:i},[t.problem.link&&!t.onProblemClick?(e.openBlock(),e.createElementBlock("a",{key:0,href:t.problem.link,target:"_blank",rel:"noopener noreferrer",style:{color:"unset"}},[e.createElementVNode("span",he,e.toDisplayString(s.value),1),n.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"srk--display-block srk-problem-stats",title:f.value},e.toDisplayString(n.value.accepted),9,be)):e.createCommentVNode("",!0)],8,ye)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("span",Be,e.toDisplayString(s.value),1),n.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"srk--display-block srk-problem-stats",title:f.value},e.toDisplayString(n.value.accepted),9,Ce)):e.createCommentVNode("",!0)],64))],6))}}),Se={key:0,class:"srk-prest-status-block-fb-star"},Ne={key:4,class:"srk-status-placeholder-cell srk--text-center srk--nowrap"},we="\u2605",xe=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,s=e.computed(()=>[...o.status.solutions||[]].reverse()),u=e.computed(()=>s.value.length>0&&!!o.onSolutionClick),n=e.computed(()=>["srk-prest-status-block","srk--text-center","srk--nowrap",{"srk--cursor-pointer":u.value,"srk-prest-status-block-color-text":o.statusColorAsText}]);function f(i){var m,c;!u.value||(d.captureModalTriggerPointFromMouseEvent(i,{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:s.value,ranklist:o.ranklist}))}const v=e.defineComponent({props:{status:{type:Object,required:!0},ranklist:{type:Object,required:!0},preset:{type:String,required:!0}},setup(i){return()=>{const m=i.status,c=i.ranklist,g=i.preset,k=d.getRankProblemStatusCellPresentation(m,c,g);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(i,m)=>t.status.result==="FB"?(e.openBlock(),e.createElementBlock("td",{key:0,class:e.normalizeClass([n.value,"srk-prest-status-block-fb"]),onClick:e.withModifiers(f,["prevent"])},[t.statusColorAsText?(e.openBlock(),e.createElementBlock("span",Se,e.toDisplayString(we))):e.createCommentVNode("",!0),e.createVNode(e.unref(v),{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([n.value,"srk-prest-status-block-accepted"]),onClick:e.withModifiers(f,["prevent"])},[e.createVNode(e.unref(v),{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([n.value,"srk-prest-status-block-frozen"]),onClick:e.withModifiers(f,["prevent"])},[e.createVNode(e.unref(v),{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([n.value,"srk-prest-status-block-failed"]),onClick:e.withModifiers(f,["prevent"])},[e.createVNode(e.unref(v),{status:t.status,ranklist:t.ranklist,preset:t.statusCellPreset},null,8,["status","ranklist","preset"])],2)):(e.openBlock(),e.createElementBlock("td",Ne,e.toDisplayString(t.emptyStatusPlaceholder),1))}}),Ve={class:"srk-user-cell-content"},Te={key:0,class:"srk-user-avatar"},Me=["src"],Pe={class:"srk-user-body"},$e={class:"srk-user-name-row"},De=["title"],ze={class:"srk-marker-dot-group"},Ae=["data-tooltip"],Fe={key:0,class:"srk-user-secondary-text srk--text-ellipsis",title:""},Ie=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,s=e.computed(()=>f(o.user.name)),u=e.computed(()=>B.resolveUserMarkers(o.user,o.markers)),n=e.computed(()=>u.value.map(i=>({marker:i,presentation:d.getMarkerPresentation(i,o.theme)})));function f(i){return B.resolveText(i,o.languages)}function v(i){var m;d.captureModalTriggerPointFromMouseEvent(i,{source:"user-cell",context:{rowIndex:o.rowIndex,userId:o.user.id||null,userName:s.value}}),(m=o.onUserClick)==null||m.call(o,{user:o.user,row:o.row,rowIndex:o.rowIndex,ranklist:o.ranklist})}return(i,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(v,["prevent"])},[e.createElementVNode("div",Ve,[t.user.avatar&&!t.hideAvatar?(e.openBlock(),e.createElementBlock("div",Te,[e.createElementVNode("img",{src:t.formatSrkAssetUrl(t.user.avatar,"user.avatar"),alt:"User Avatar"},null,8,Me)])):e.createCommentVNode("",!0),e.createElementVNode("div",Pe,[e.createElementVNode("div",$e,[e.createElementVNode("span",{class:"srk-user-name-text",title:s.value},e.toDisplayString(s.value),9,De),e.createElementVNode("span",ze,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.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":f(c.marker.label)},null,14,Ae))),128))])]),t.user.organization&&!t.hideOrganization?(e.openBlock(),e.createElementBlock("p",Fe,e.toDisplayString(f(t.user.organization)),1)):e.createCommentVNode("",!0)])])],2))}}),Ue={key:0},Oe={key:1},Le={key:2,class:"srk-common-table srk-main"},qe={key:0,class:"srk-organization-header srk--text-left srk--nowrap"},Re={class:"srk--text-left srk--nowrap"},He={class:"srk--text-right srk--nowrap"},Ke={key:1,class:"srk--text-right srk--nowrap"},je={key:2,class:"srk-dirt-header srk--text-right srk--nowrap"},Je={key:3,class:"srk-se-header srk--text-right srk--nowrap"},We={class:"srk-organization-cell-content"},Ge={key:0,class:"srk-user-avatar"},Qe=["src"],Xe=["title"],Ye={class:"srk--text-right srk--nowrap"},Ze={key:1,class:"srk--text-right srk--nowrap"},_e={key:2,class:"srk-dirt-cell srk--text-right srk--nowrap"},et={key:3,class:"srk-se-cell srk--text-right srk--nowrap"},tt={key:0},lt=["colspan"],st=["data-tooltip"],ot={class:"srk-problem-statistics-footer-primary"},rt={class:"srk-problem-statistics-footer-secondary"},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={class:"srk-problem-statistics-footer-row srk-problem-statistics-footer-problem-label-row"},ct=["colspan"],ut={class:"srk--display-block"},dt={key:0,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-dirt-footer-cell srk--nowrap"},mt={key:1,class:"srk-problem-statistics-footer-cell srk-extra-statistics-footer-cell srk-se-footer-cell srk--nowrap"},kt=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","problemClick","solutionClick"],setup(t,{emit:o}){const s=t,u=o,n=e.getCurrentInstance(),f=e.computed(()=>s.theme),v=e.computed(()=>{var r;return Boolean((r=n==null?void 0:n.vnode.props)==null?void 0:r.onProblemClick)}),i=d.srkSupportedVersions,m=e.computed(()=>d.caniuse(s.data.version)),c=e.computed(()=>d.shouldShowTimeColumn(s.data.rows)),g=e.computed(()=>s.splitOrganization&&s.userAvatarPlacement==="organization"),k=e.computed(()=>s.showProblemStatisticsFooter||s.showSEColumn?d.calculateProblemStatisticsFooter(s.data):[]),S=e.computed(()=>s.data.series.length+1+1+(c.value?1:0)+(s.splitOrganization?1:0)),x=[{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 D(r,a){return d.resolveSrkAssetUrl(r,a,s.formatSrkAssetUrl)}function N(r){return B.resolveText(r,s.languages)}function z(r){return r.rankValues||s.data.series.map(()=>({rank:null,segmentIndex:null}))}function M(r,a){return r.rank?r.rank:a.user.official===!1?"\uFF0A":""}function T(r){return((r==null?void 0:r.segments)||[]).some(a=>typeof a.style=="string")}function E(r,a){var p,h,y;const l=(p=s.columnTitles)==null?void 0:p.series;return typeof l=="function"?(h=l(r,a))!=null?h:r.title:Array.isArray(l)&&(y=l[a])!=null?y:r.title}function C(r,a){var l,p;return(p=(l=s.columnTitles)==null?void 0:l[r])!=null?p:a}function P(r,a){const l=r.segmentIndex||r.segmentIndex===0?r.segmentIndex:-1;return((a==null?void 0:a.segments)||[])[l]||{}}function A(r,a){const l=P(r,a).style;return typeof l=="string"?`srk-preset-series-segment-${l}`:""}function F(r,a){const l={[B.EnumTheme.light]:void 0,[B.EnumTheme.dark]:void 0},p=P(r,a).style;if(!p||typeof p=="string")return{};const h=B.resolveStyle(p),y=h.textColor||l,V=h.backgroundColor||l;return{color:y[s.theme],backgroundColor:V[s.theme]}}function b(r){return[...r.solutions||[]].reverse()}function w(r){u("problemClick",r)}function U(r,a,l){l&&(l.preventDefault(),d.captureModalTriggerPointFromMouseEvent(l,{source:"problem-header",context:{problemIndex:a,problemAlias:r.alias||null,problemTitle:N(r.title)||null}})),w({problem:r,problemIndex:a,ranklist:s.data})}function R(r,a){switch(r){case"accepted":return a.accepted;case"attempted":return a.attempted;case"submitted":return a.submitted;case"dirt":return a.dirt;case"se":return d.formatProblemStatisticsAverageHardness(a);case"firstAccepted":return d.formatProblemStatisticsAcceptedMinute(a.firstAcceptedTime);case"lastAccepted":return d.formatProblemStatisticsAcceptedMinute(a.lastAcceptedTime);default:return""}}function O(r,a){switch(r){case"accepted":return d.formatProblemStatisticsPercent(a.accepted,a.participantCount);case"attempted":return d.formatProblemStatisticsPercent(a.attempted,a.participantCount);case"dirt":return d.formatProblemStatisticsPercent(a.dirt,a.dirtSubmitted);default:return}}function L(r,a,l){if("ranklist"in r){u("userClick",r);return}l&&d.captureModalTriggerPointFromMouseEvent(l,{source:"user-cell",context:{rowIndex:a||0,userId:r.user.id||null,userName:N(r.user.name)}}),u("userClick",{user:r.user,row:r,rowIndex:a||0,ranklist:s.data})}function q(r,a,l,p,h){if("solutions"in r){u("solutionClick",r);return}const y=p||0,V=l||r.statuses[y];if(h){const $=s.data.problems[y];d.captureModalTriggerPointFromMouseEvent(h,{source:"status-cell",context:{rowIndex:a||0,problemIndex:y,problemAlias:($==null?void 0:$.alias)||null,problemTitle:$?N($.title):null,userId:r.user.id||null}})}u("solutionClick",{user:r.user,row:r,rowIndex:a||0,problemIndex:y,problem:s.data.problems[y],status:V,solutions:b(V),ranklist:s.data})}return(r,a)=>t.data.type!=="general"?(e.openBlock(),e.createElementBlock("div",Ue,'srk type "'+e.toDisplayString(t.data.type)+'" is not supported',1)):m.value?(e.openBlock(),e.createElementBlock("div",Le,[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,(l,p)=>(e.openBlock(),e.createElementBlock("th",{key:l.title,class:e.normalizeClass(["srk-series-header srk--text-right srk--nowrap",{"srk-series-segmented-column":T(l)}])},e.toDisplayString(E(l,p)),3))),128)),t.splitOrganization?(e.openBlock(),e.createElementBlock("th",qe,e.toDisplayString(C("organization","Organization")),1)):e.createCommentVNode("",!0),e.createElementVNode("th",Re,e.toDisplayString(C("user","Name")),1),e.createElementVNode("th",He,e.toDisplayString(C("score","Score")),1),c.value?(e.openBlock(),e.createElementBlock("th",Ke,e.toDisplayString(C("time","Time")),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.problems,(l,p)=>e.renderSlot(r.$slots,"problem-header-cell",e.mergeProps({key:l.alias||N(l.title)||p,ref_for:!0},{problem:l,problemIndex:p,index:p,ranklist:t.data,theme:f.value,languages:t.languages,onClick:h=>U(l,p,h)}),()=>[e.createVNode(Ee,{problem:l,index:p,ranklist:t.data,theme:f.value,languages:t.languages,"on-problem-click":v.value?w:void 0},null,8,["problem","index","ranklist","theme","languages","on-problem-click"])])),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("th",je,e.toDisplayString(C("dirt","Dirt")),1)):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("th",Je,e.toDisplayString(C("se","SE")),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.rows,(l,p)=>(e.openBlock(),e.createElementBlock("tr",{key:l.user.id||N(l.user.name)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z(l),(h,y)=>{var V;return e.openBlock(),e.createElementBlock("td",{key:((V=t.data.series[y])==null?void 0:V.title)||y,class:e.normalizeClass(["srk--text-right srk--nowrap",[A(h,t.data.series[y]),{"srk-series-segmented-column":T(t.data.series[y])}]]),style:e.normalizeStyle(F(h,t.data.series[y]))},e.toDisplayString(M(h,l)),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":g.value&&!!l.user.avatar}])},[e.createElementVNode("div",We,[g.value&&l.user.avatar?(e.openBlock(),e.createElementBlock("div",Ge,[e.createElementVNode("img",{src:D(l.user.avatar,"user.avatar"),alt:"User Avatar"},null,8,Qe)])):e.createCommentVNode("",!0),e.createElementVNode("span",{class:"srk-organization-name-text",title:l.user.organization?N(l.user.organization):""},e.toDisplayString(l.user.organization?N(l.user.organization):""),9,Xe)])],2)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"user-cell",e.mergeProps({ref_for:!0},{user:l.user,row:l,rowIndex:p,ranklist:t.data,markers:t.data.markers,theme:f.value,hideOrganization:t.splitOrganization,hideAvatar:g.value,languages:t.languages,onClick:h=>L(l,p,h)}),()=>[e.createVNode(Ie,{user:l.user,row:l,"row-index":p,ranklist:t.data,markers:t.data.markers,theme:f.value,"format-srk-asset-url":D,"on-user-click":L,"hide-organization":t.splitOrganization,"hide-avatar":g.value,languages:t.languages},null,8,["user","row","row-index","ranklist","markers","theme","hide-organization","hide-avatar","languages"])]),e.createElementVNode("td",Ye,e.toDisplayString(l.score.value),1),c.value?(e.openBlock(),e.createElementBlock("td",Ze,e.toDisplayString(l.score.time?e.unref(B.formatTimeDuration)(l.score.time,"min",Math.floor):"-"),1)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.statuses,(h,y)=>{var V;return e.renderSlot(r.$slots,"status-cell",e.mergeProps({key:((V=t.data.problems[y])==null?void 0:V.alias)||y,ref_for:!0},{status:h,problem:t.data.problems[y],problemIndex:y,user:l.user,row:l,rowIndex:p,ranklist:t.data,solutions:b(h),statusCellPreset:t.statusCellPreset,statusColorAsText:t.statusColorAsText,emptyStatusPlaceholder:t.emptyStatusPlaceholder,languages:t.languages,onClick:$=>q(l,p,h,y,$)}),()=>[e.createVNode(xe,{status:h,problem:t.data.problems[y],"problem-index":y,user:l.user,row:l,"row-index":p,ranklist:t.data,"on-solution-click":q,"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",_e,e.toDisplayString(e.unref(d.calculateDirtPercentage)(l)),1)):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",et,e.toDisplayString(e.unref(d.calculateSEValue)(l,k.value)),1)):e.createCommentVNode("",!0)]))),128))]),t.showProblemStatisticsFooter?(e.openBlock(),e.createElementBlock("tfoot",tt,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(x,l=>e.createElementVNode("tr",{key:l.key,class:"srk-problem-statistics-footer-row"},[e.createElementVNode("td",{class:"srk-problem-statistics-footer-labels srk--text-right srk--nowrap",colspan:S.value},[e.createElementVNode("span",{class:"srk-problem-statistics-footer-label srk--c-tooltip","data-tooltip":l.tooltip},e.toDisplayString(l.label),9,st)],8,lt),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,(p,h)=>{var y;return e.openBlock(),e.createElementBlock("td",{key:((y=t.data.problems[h])==null?void 0:y.alias)||h,class:"srk-problem-statistics-footer-cell srk--text-center srk--nowrap"},[e.createElementVNode("span",ot,e.toDisplayString(R(l.key,p)),1),O(l.key,p)!==void 0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[a[0]||(a[0]=e.createTextVNode(e.toDisplayString(" ")+" ",-1)),e.createElementVNode("span",rt,e.toDisplayString(O(l.key,p)),1)],64)):e.createCommentVNode("",!0)])}),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",at,[...a[1]||(a[1]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",nt,[...a[2]||(a[2]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0)])),64)),e.createElementVNode("tr",it,[e.createElementVNode("td",{class:"srk-problem-statistics-footer-labels srk--text-right srk--nowrap",colspan:S.value},null,8,ct),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.data.problems,(l,p)=>(e.openBlock(),e.createElementBlock("td",{key:l.alias||N(l.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)(l.style,f.value,0)})},[e.createElementVNode("span",ut,e.toDisplayString(l.alias||e.unref(B.numberToAlphabet)(p)),1)],4))),128)),t.showDirtColumn?(e.openBlock(),e.createElementBlock("td",dt,[...a[3]||(a[3]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0),t.showSEColumn?(e.openBlock(),e.createElementBlock("td",mt,[...a[4]||(a[4]=[e.createElementVNode("span",{class:"srk-problem-statistics-footer-primary"},null,-1)])])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0)],2)])):(e.openBlock(),e.createElementBlock("div",Oe,' srk version "'+e.toDisplayString(t.data.version)+'" is not supported (current supported: '+e.toDisplayString(e.unref(i))+") ",1))}});exports.DefaultSolutionModal=X;exports.DefaultUserModal=ae;exports.Modal=I;exports.ProgressBar=ve;exports.Ranklist=kt;
package/dist/index.d.ts CHANGED
@@ -3,4 +3,4 @@ export { default as DefaultUserModal } from './modal/DefaultUserModal.vue';
3
3
  export { default as Modal } from './modal/Modal.vue';
4
4
  export { default as ProgressBar } from './progress/ProgressBar.vue';
5
5
  export { default as Ranklist } from './Ranklist.vue';
6
- export type { DefaultSolutionModalProps, DefaultUserModalProps, ModalCloseReason, ModalEvents, ModalProps, ProblemHeaderCellSlotProps, ProgressBarEvents, ProgressBarProps, RanklistColumnTitles, RanklistEvents, RanklistProps, RanklistStatusCellPreset, RanklistUserAvatarPlacement, SolutionClickPayload, StaticRanklist, StaticRanklistRow, StatusCellSlotProps, UserCellSlotProps, UserClickPayload, } from './types';
6
+ export type { DefaultSolutionModalProps, DefaultUserModalProps, ModalCloseReason, ModalEvents, ModalProps, ProblemClickPayload, ProblemHeaderCellSlotProps, ProgressBarEvents, ProgressBarProps, RanklistColumnTitles, RanklistEvents, RanklistProps, RanklistStatusCellPreset, RanklistUserAvatarPlacement, SolutionClickPayload, StaticRanklist, StaticRanklistRow, StatusCellSlotProps, UserCellSlotProps, UserClickPayload, } from './types';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "@algoux/standard-ranklist-renderer-component-styles";
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";
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, getCurrentInstance, 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, formatTeamMemberName, getProgressMaxAvailableMinutes, getProgressDurationMinutes, isProgressEnded, getProgressMetrics, getProblemHeaderBackgroundImage, captureModalTriggerPointFromMouseEvent, getRankProblemStatusCellPresentation, 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,11 +565,15 @@ const _sfc_main$3 = defineComponent({
557
565
  props: {
558
566
  problem: {},
559
567
  index: {},
560
- theme: { default: EnumTheme.light }
568
+ ranklist: {},
569
+ theme: { default: EnumTheme.light },
570
+ languages: {},
571
+ onProblemClick: {}
561
572
  },
562
573
  setup(__props) {
563
574
  const props = __props;
564
575
  const alias = computed(() => props.problem.alias || numberToAlphabet(props.index));
576
+ const title = computed(() => resolveText(props.problem.title, props.languages));
565
577
  const stat = computed(() => props.problem.statistics);
566
578
  const statDesc = computed(() => {
567
579
  if (!stat.value) {
@@ -571,12 +583,32 @@ const _sfc_main$3 = defineComponent({
571
583
  return `${stat.value.accepted} / ${stat.value.submitted} (${ratio}%)`;
572
584
  });
573
585
  const backgroundImage = computed(() => getProblemHeaderBackgroundImage(props.problem.style, props.theme));
586
+ function handleClick(event) {
587
+ if (!props.onProblemClick) {
588
+ return;
589
+ }
590
+ event.preventDefault();
591
+ captureModalTriggerPointFromMouseEvent(event, {
592
+ source: "problem-header",
593
+ context: {
594
+ problemIndex: props.index,
595
+ problemAlias: props.problem.alias || null,
596
+ problemTitle: title.value || null
597
+ }
598
+ });
599
+ props.onProblemClick({
600
+ problem: props.problem,
601
+ problemIndex: props.index,
602
+ ranklist: props.ranklist
603
+ });
604
+ }
574
605
  return (_ctx, _cache) => {
575
606
  return openBlock(), createElementBlock("th", {
576
- class: "srk--nowrap srk-problem-header",
577
- style: normalizeStyle({ backgroundImage: backgroundImage.value })
607
+ class: normalizeClass(["srk--nowrap srk-problem-header", { "srk--cursor-pointer": !!__props.onProblemClick }]),
608
+ style: normalizeStyle({ backgroundImage: backgroundImage.value }),
609
+ onClick: handleClick
578
610
  }, [
579
- __props.problem.link ? (openBlock(), createElementBlock("a", {
611
+ __props.problem.link && !__props.onProblemClick ? (openBlock(), createElementBlock("a", {
580
612
  key: 0,
581
613
  href: __props.problem.link,
582
614
  target: "_blank",
@@ -597,7 +629,7 @@ const _sfc_main$3 = defineComponent({
597
629
  title: statDesc.value
598
630
  }, toDisplayString(stat.value.accepted), 9, _hoisted_5$2)) : createCommentVNode("", true)
599
631
  ], 64))
600
- ], 4);
632
+ ], 6);
601
633
  };
602
634
  }
603
635
  });
@@ -623,7 +655,8 @@ const _sfc_main$2 = defineComponent({
623
655
  onSolutionClick: {},
624
656
  statusCellPreset: { default: "classic" },
625
657
  statusColorAsText: { type: Boolean, default: false },
626
- emptyStatusPlaceholder: { default: null }
658
+ emptyStatusPlaceholder: { default: null },
659
+ languages: {}
627
660
  },
628
661
  setup(__props) {
629
662
  const props = __props;
@@ -649,7 +682,7 @@ const _sfc_main$2 = defineComponent({
649
682
  rowIndex: props.rowIndex,
650
683
  problemIndex: props.problemIndex,
651
684
  problemAlias: ((_a = props.problem) == null ? void 0 : _a.alias) || null,
652
- problemTitle: props.problem ? resolveText(props.problem.title) : null,
685
+ problemTitle: props.problem ? resolveText(props.problem.title, props.languages) : null,
653
686
  userId: props.user.id || null
654
687
  }
655
688
  });
@@ -776,16 +809,20 @@ const _sfc_main$1 = defineComponent({
776
809
  formatSrkAssetUrl: {},
777
810
  onUserClick: {},
778
811
  hideOrganization: { type: Boolean, default: false },
779
- hideAvatar: { type: Boolean, default: false }
812
+ hideAvatar: { type: Boolean, default: false },
813
+ languages: {}
780
814
  },
781
815
  setup(__props) {
782
816
  const props = __props;
783
- const name = computed(() => resolveText(props.user.name));
817
+ const name = computed(() => resolveDisplayText(props.user.name));
784
818
  const userMarkers = computed(() => resolveUserMarkers(props.user, props.markers));
785
819
  const resolvedMarkers = computed(() => userMarkers.value.map((marker) => ({
786
820
  marker,
787
821
  presentation: getMarkerPresentation(marker, props.theme)
788
822
  })));
823
+ function resolveDisplayText(text) {
824
+ return resolveText(text, props.languages);
825
+ }
789
826
  function emitUserClick(event) {
790
827
  var _a;
791
828
  captureModalTriggerPointFromMouseEvent(event, {
@@ -828,12 +865,12 @@ const _sfc_main$1 = defineComponent({
828
865
  key: marker.marker.id,
829
866
  class: normalizeClass(["srk-marker srk-marker-dot srk--c-tooltip", marker.presentation.className]),
830
867
  style: normalizeStyle(marker.presentation.style),
831
- "data-tooltip": unref(resolveText)(marker.marker.label)
868
+ "data-tooltip": resolveDisplayText(marker.marker.label)
832
869
  }, null, 14, _hoisted_8$1);
833
870
  }), 128))
834
871
  ])
835
872
  ]),
836
- __props.user.organization && !__props.hideOrganization ? (openBlock(), createElementBlock("p", _hoisted_9$1, toDisplayString(unref(resolveText)(__props.user.organization)), 1)) : createCommentVNode("", true)
873
+ __props.user.organization && !__props.hideOrganization ? (openBlock(), createElementBlock("p", _hoisted_9$1, toDisplayString(resolveDisplayText(__props.user.organization)), 1)) : createCommentVNode("", true)
837
874
  ])
838
875
  ])
839
876
  ], 2);
@@ -925,13 +962,19 @@ const _sfc_main = defineComponent({
925
962
  showDirtColumn: { type: Boolean, default: false },
926
963
  showSEColumn: { type: Boolean, default: false },
927
964
  emptyStatusPlaceholder: { default: null },
928
- userAvatarPlacement: { default: "user" }
965
+ userAvatarPlacement: { default: "user" },
966
+ languages: {}
929
967
  },
930
- emits: ["userClick", "solutionClick"],
968
+ emits: ["userClick", "problemClick", "solutionClick"],
931
969
  setup(__props, { emit: __emit }) {
932
970
  const props = __props;
933
971
  const emit = __emit;
972
+ const instance = getCurrentInstance();
934
973
  const resolvedTheme = computed(() => props.theme);
974
+ const hasProblemClickListener = computed(() => {
975
+ var _a;
976
+ return Boolean((_a = instance == null ? void 0 : instance.vnode.props) == null ? void 0 : _a.onProblemClick);
977
+ });
935
978
  const supportedVersions = srkSupportedVersions;
936
979
  const isSupportedVersion = computed(() => caniuse(props.data.version));
937
980
  const showTimeColumn = computed(() => shouldShowTimeColumn(props.data.rows));
@@ -945,8 +988,8 @@ const _sfc_main = defineComponent({
945
988
  tooltip: "Number of participants who solved this problem"
946
989
  },
947
990
  {
948
- key: "tried",
949
- label: "Tried",
991
+ key: "attempted",
992
+ label: "Attempted",
950
993
  tooltip: "Number of participants who attempted this problem"
951
994
  },
952
995
  {
@@ -978,6 +1021,9 @@ const _sfc_main = defineComponent({
978
1021
  function formatAssetUrl(url, field) {
979
1022
  return resolveSrkAssetUrl(url, field, props.formatSrkAssetUrl);
980
1023
  }
1024
+ function resolveDisplayText(text) {
1025
+ return resolveText(text, props.languages);
1026
+ }
981
1027
  function getRankValues(row) {
982
1028
  return row.rankValues || props.data.series.map(() => ({ rank: null, segmentIndex: null }));
983
1029
  }
@@ -1030,12 +1076,33 @@ const _sfc_main = defineComponent({
1030
1076
  function getStatusSolutions(status) {
1031
1077
  return [...status.solutions || []].reverse();
1032
1078
  }
1079
+ function emitProblemClickPayload(payload) {
1080
+ emit("problemClick", payload);
1081
+ }
1082
+ function emitProblemClick(problem, problemIndex, event) {
1083
+ if (event) {
1084
+ event.preventDefault();
1085
+ captureModalTriggerPointFromMouseEvent(event, {
1086
+ source: "problem-header",
1087
+ context: {
1088
+ problemIndex,
1089
+ problemAlias: problem.alias || null,
1090
+ problemTitle: resolveDisplayText(problem.title) || null
1091
+ }
1092
+ });
1093
+ }
1094
+ emitProblemClickPayload({
1095
+ problem,
1096
+ problemIndex,
1097
+ ranklist: props.data
1098
+ });
1099
+ }
1033
1100
  function getProblemStatisticsFooterCellPrimary(key, stat) {
1034
1101
  switch (key) {
1035
1102
  case "accepted":
1036
1103
  return stat.accepted;
1037
- case "tried":
1038
- return stat.tried;
1104
+ case "attempted":
1105
+ return stat.attempted;
1039
1106
  case "submitted":
1040
1107
  return stat.submitted;
1041
1108
  case "dirt":
@@ -1054,8 +1121,8 @@ const _sfc_main = defineComponent({
1054
1121
  switch (key) {
1055
1122
  case "accepted":
1056
1123
  return formatProblemStatisticsPercent(stat.accepted, stat.participantCount);
1057
- case "tried":
1058
- return formatProblemStatisticsPercent(stat.tried, stat.participantCount);
1124
+ case "attempted":
1125
+ return formatProblemStatisticsPercent(stat.attempted, stat.participantCount);
1059
1126
  case "dirt":
1060
1127
  return formatProblemStatisticsPercent(stat.dirt, stat.dirtSubmitted);
1061
1128
  default:
@@ -1073,7 +1140,7 @@ const _sfc_main = defineComponent({
1073
1140
  context: {
1074
1141
  rowIndex: rowIndex || 0,
1075
1142
  userId: payloadOrRow.user.id || null,
1076
- userName: resolveText(payloadOrRow.user.name)
1143
+ userName: resolveDisplayText(payloadOrRow.user.name)
1077
1144
  }
1078
1145
  });
1079
1146
  }
@@ -1099,7 +1166,7 @@ const _sfc_main = defineComponent({
1099
1166
  rowIndex: rowIndex || 0,
1100
1167
  problemIndex: resolvedProblemIndex,
1101
1168
  problemAlias: (problem == null ? void 0 : problem.alias) || null,
1102
- problemTitle: problem ? resolveText(problem.title) : null,
1169
+ problemTitle: problem ? resolveDisplayText(problem.title) : null,
1103
1170
  userId: payloadOrRow.user.id || null
1104
1171
  }
1105
1172
  });
@@ -1138,14 +1205,25 @@ const _sfc_main = defineComponent({
1138
1205
  showTimeColumn.value ? (openBlock(), createElementBlock("th", _hoisted_7, toDisplayString(resolveColumnTitle("time", "Time")), 1)) : createCommentVNode("", true),
1139
1206
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.data.problems, (problem, problemIndex) => {
1140
1207
  return renderSlot(_ctx.$slots, "problem-header-cell", mergeProps({
1141
- key: problem.alias || unref(resolveText)(problem.title) || problemIndex,
1208
+ key: problem.alias || resolveDisplayText(problem.title) || problemIndex,
1142
1209
  ref_for: true
1143
- }, { problem, problemIndex, index: problemIndex, theme: resolvedTheme.value }), () => [
1210
+ }, {
1211
+ problem,
1212
+ problemIndex,
1213
+ index: problemIndex,
1214
+ ranklist: __props.data,
1215
+ theme: resolvedTheme.value,
1216
+ languages: __props.languages,
1217
+ onClick: (event) => emitProblemClick(problem, problemIndex, event)
1218
+ }), () => [
1144
1219
  createVNode(_sfc_main$3, {
1145
1220
  problem,
1146
1221
  index: problemIndex,
1147
- theme: resolvedTheme.value
1148
- }, null, 8, ["problem", "index", "theme"])
1222
+ ranklist: __props.data,
1223
+ theme: resolvedTheme.value,
1224
+ languages: __props.languages,
1225
+ "on-problem-click": hasProblemClickListener.value ? emitProblemClickPayload : void 0
1226
+ }, null, 8, ["problem", "index", "ranklist", "theme", "languages", "on-problem-click"])
1149
1227
  ]);
1150
1228
  }), 128)),
1151
1229
  __props.showDirtColumn ? (openBlock(), createElementBlock("th", _hoisted_8, toDisplayString(resolveColumnTitle("dirt", "Dirt")), 1)) : createCommentVNode("", true),
@@ -1155,7 +1233,7 @@ const _sfc_main = defineComponent({
1155
1233
  createElementVNode("tbody", null, [
1156
1234
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.data.rows, (row, rowIndex) => {
1157
1235
  return openBlock(), createElementBlock("tr", {
1158
- key: row.user.id || unref(resolveText)(row.user.name)
1236
+ key: row.user.id || resolveDisplayText(row.user.name)
1159
1237
  }, [
1160
1238
  (openBlock(true), createElementBlock(Fragment, null, renderList(getRankValues(row), (rankValue, seriesIndex) => {
1161
1239
  var _a;
@@ -1181,8 +1259,8 @@ const _sfc_main = defineComponent({
1181
1259
  ])) : createCommentVNode("", true),
1182
1260
  createElementVNode("span", {
1183
1261
  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)
1262
+ title: row.user.organization ? resolveDisplayText(row.user.organization) : ""
1263
+ }, toDisplayString(row.user.organization ? resolveDisplayText(row.user.organization) : ""), 9, _hoisted_13)
1186
1264
  ])
1187
1265
  ], 2)) : createCommentVNode("", true),
1188
1266
  renderSlot(_ctx.$slots, "user-cell", mergeProps({ ref_for: true }, {
@@ -1194,6 +1272,7 @@ const _sfc_main = defineComponent({
1194
1272
  theme: resolvedTheme.value,
1195
1273
  hideOrganization: __props.splitOrganization,
1196
1274
  hideAvatar: showAvatarInOrganization.value,
1275
+ languages: __props.languages,
1197
1276
  onClick: (event) => emitUserClick(row, rowIndex, event)
1198
1277
  }), () => [
1199
1278
  createVNode(_sfc_main$1, {
@@ -1206,8 +1285,9 @@ const _sfc_main = defineComponent({
1206
1285
  "format-srk-asset-url": formatAssetUrl,
1207
1286
  "on-user-click": emitUserClick,
1208
1287
  "hide-organization": __props.splitOrganization,
1209
- "hide-avatar": showAvatarInOrganization.value
1210
- }, null, 8, ["user", "row", "row-index", "ranklist", "markers", "theme", "hide-organization", "hide-avatar"])
1288
+ "hide-avatar": showAvatarInOrganization.value,
1289
+ languages: __props.languages
1290
+ }, null, 8, ["user", "row", "row-index", "ranklist", "markers", "theme", "hide-organization", "hide-avatar", "languages"])
1211
1291
  ]),
1212
1292
  createElementVNode("td", _hoisted_14, toDisplayString(row.score.value), 1),
1213
1293
  showTimeColumn.value ? (openBlock(), createElementBlock("td", _hoisted_15, toDisplayString(row.score.time ? unref(formatTimeDuration)(row.score.time, "min", Math.floor) : "-"), 1)) : createCommentVNode("", true),
@@ -1228,6 +1308,7 @@ const _sfc_main = defineComponent({
1228
1308
  statusCellPreset: __props.statusCellPreset,
1229
1309
  statusColorAsText: __props.statusColorAsText,
1230
1310
  emptyStatusPlaceholder: __props.emptyStatusPlaceholder,
1311
+ languages: __props.languages,
1231
1312
  onClick: (event) => emitSolutionClick(row, rowIndex, status, problemIndex, event)
1232
1313
  }), () => [
1233
1314
  createVNode(_sfc_main$2, {
@@ -1241,8 +1322,9 @@ const _sfc_main = defineComponent({
1241
1322
  "on-solution-click": emitSolutionClick,
1242
1323
  "status-cell-preset": __props.statusCellPreset,
1243
1324
  "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"])
1325
+ "empty-status-placeholder": __props.emptyStatusPlaceholder,
1326
+ languages: __props.languages
1327
+ }, null, 8, ["status", "problem", "problem-index", "user", "row", "row-index", "ranklist", "status-cell-preset", "status-color-as-text", "empty-status-placeholder", "languages"])
1246
1328
  ]);
1247
1329
  }), 128)),
1248
1330
  __props.showDirtColumn ? (openBlock(), createElementBlock("td", _hoisted_16, toDisplayString(unref(calculateDirtPercentage)(row)), 1)) : createCommentVNode("", true),
@@ -1293,7 +1375,7 @@ const _sfc_main = defineComponent({
1293
1375
  }, null, 8, _hoisted_26),
1294
1376
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.data.problems, (problem, problemIndex) => {
1295
1377
  return openBlock(), createElementBlock("td", {
1296
- key: problem.alias || unref(resolveText)(problem.title) || problemIndex,
1378
+ key: problem.alias || resolveDisplayText(problem.title) || problemIndex,
1297
1379
  class: "srk-problem-statistics-footer-cell srk-problem-statistics-footer-problem-header srk-problem-header srk--text-center srk--nowrap",
1298
1380
  style: normalizeStyle({ backgroundImage: unref(getProblemHeaderBackgroundImage)(problem.style, resolvedTheme.value, 0) })
1299
1381
  }, [
@@ -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;
@@ -7,17 +7,31 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
7
7
  type: NumberConstructor;
8
8
  required: true;
9
9
  };
10
+ ranklist: {
11
+ type: ObjectConstructor;
12
+ required: true;
13
+ };
10
14
  theme: {
11
15
  type: StringConstructor;
12
16
  required: false;
13
17
  default: any;
14
18
  };
19
+ languages: {
20
+ type: ArrayConstructor;
21
+ required: false;
22
+ };
23
+ onProblemClick: {
24
+ type: FunctionConstructor;
25
+ required: false;
26
+ };
15
27
  }>, {
16
28
  props: any;
17
29
  alias: import("vue").ComputedRef<any>;
30
+ title: import("vue").ComputedRef<any>;
18
31
  stat: import("vue").ComputedRef<any>;
19
32
  statDesc: import("vue").ComputedRef<string>;
20
33
  backgroundImage: import("vue").ComputedRef<string>;
34
+ handleClick: (event: MouseEvent) => void;
21
35
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
22
36
  problem: {
23
37
  type: null;
@@ -27,11 +41,23 @@ declare const _sfc_main: import("vue").DefineComponent<import("vue").ExtractProp
27
41
  type: NumberConstructor;
28
42
  required: true;
29
43
  };
44
+ ranklist: {
45
+ type: ObjectConstructor;
46
+ required: true;
47
+ };
30
48
  theme: {
31
49
  type: StringConstructor;
32
50
  required: false;
33
51
  default: any;
34
52
  };
53
+ languages: {
54
+ type: ArrayConstructor;
55
+ required: false;
56
+ };
57
+ onProblemClick: {
58
+ type: FunctionConstructor;
59
+ required: false;
60
+ };
35
61
  }>> & Readonly<{}>, {
36
62
  theme: string;
37
63
  }, {}, {}, {}, 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
@@ -1,7 +1,7 @@
1
1
  import type * as srk from '@algoux/standard-ranklist';
2
2
  import type { CSSProperties } from 'vue';
3
3
  import type { EnumTheme } from '@algoux/standard-ranklist-utils';
4
- import type { RanklistColumnTitles, RanklistStatusCellPreset, RanklistUserAvatarPlacement, SolutionClickPayload, StaticRanklist, StaticRanklistRow, UserClickPayload } from '@algoux/standard-ranklist-renderer-component-core';
4
+ import type { RanklistColumnTitles, RanklistStatusCellPreset, RanklistUserAvatarPlacement, ProblemClickPayload, SolutionClickPayload, StaticRanklist, StaticRanklistRow, UserClickPayload } from '@algoux/standard-ranklist-renderer-component-core';
5
5
  export declare type ModalCloseReason = 'mask' | 'close-button' | 'escape';
6
6
  export interface RanklistProps {
7
7
  data: StaticRanklist;
@@ -19,12 +19,16 @@ 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;
28
+ ranklist: StaticRanklist;
27
29
  theme?: EnumTheme;
30
+ languages?: readonly string[];
31
+ onClick: (event?: MouseEvent) => void;
28
32
  }
29
33
  export interface UserCellSlotProps {
30
34
  user: srk.User;
@@ -35,6 +39,7 @@ export interface UserCellSlotProps {
35
39
  theme?: EnumTheme;
36
40
  hideOrganization?: boolean;
37
41
  hideAvatar?: boolean;
42
+ languages?: readonly string[];
38
43
  onClick: (event?: MouseEvent) => void;
39
44
  }
40
45
  export interface StatusCellSlotProps {
@@ -49,6 +54,7 @@ export interface StatusCellSlotProps {
49
54
  statusCellPreset?: RanklistStatusCellPreset;
50
55
  statusColorAsText?: boolean;
51
56
  emptyStatusPlaceholder?: string | null;
57
+ languages?: readonly string[];
52
58
  onClick: (event?: MouseEvent) => void;
53
59
  }
54
60
  export interface ProgressBarProps {
@@ -74,6 +80,7 @@ export interface DefaultUserModalProps extends Pick<ModalProps, 'open' | 'rootCl
74
80
  title?: string;
75
81
  width?: number;
76
82
  formatSrkAssetUrl?: (url: string, field: string) => string;
83
+ languages?: readonly string[];
77
84
  }
78
85
  export interface DefaultSolutionModalProps extends Pick<ModalProps, 'open' | 'rootClassName' | 'wrapClassName' | 'style'> {
79
86
  user?: srk.User | null;
@@ -82,9 +89,11 @@ export interface DefaultSolutionModalProps extends Pick<ModalProps, 'open' | 'ro
82
89
  solutions: srk.Solution[];
83
90
  title?: string;
84
91
  width?: number;
92
+ languages?: readonly string[];
85
93
  }
86
94
  export declare type RanklistEvents = {
87
95
  userClick: UserClickPayload;
96
+ problemClick: ProblemClickPayload;
88
97
  solutionClick: SolutionClickPayload;
89
98
  };
90
99
  export declare type ProgressBarEvents = {
@@ -94,4 +103,4 @@ export declare type ModalEvents = {
94
103
  close: ModalCloseReason;
95
104
  'update:open': boolean;
96
105
  };
97
- export type { RanklistColumnTitles, RanklistStatusCellPreset, RanklistUserAvatarPlacement, SolutionClickPayload, StaticRanklist, StaticRanklistRow, UserClickPayload, };
106
+ export type { RanklistColumnTitles, RanklistStatusCellPreset, RanklistUserAvatarPlacement, ProblemClickPayload, SolutionClickPayload, StaticRanklist, StaticRanklistRow, 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.4",
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,8 +28,8 @@
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",
31
+ "@algoux/standard-ranklist-utils": "^0.3.1",
32
+ "@algoux/standard-ranklist-renderer-component-core": "0.6.3",
33
33
  "@algoux/standard-ranklist-renderer-component-styles": "0.6.1"
34
34
  },
35
35
  "peerDependencies": {