@algoux/standard-ranklist-renderer-component-solid 0.5.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 algoUX
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # @algoux/standard-ranklist-renderer-component-solid
2
+
3
+ Solid components for Standard Ranklist data, with an explicit `./server` export for SSR-oriented builds.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm i -D @algoux/standard-ranklist
9
+ npm i -S @algoux/standard-ranklist-renderer-component-solid @algoux/standard-ranklist-renderer-component-core @algoux/standard-ranklist-renderer-component-styles
10
+ ```
11
+
12
+ ## Main Exports
13
+
14
+ - `Ranklist`
15
+ - `ProgressBar`
16
+ - `Modal`
17
+ - `DefaultUserModal`
18
+ - `DefaultSolutionModal`
19
+
20
+ ## Usage
21
+
22
+ Import the shared stylesheet once in your app entry. `Ranklist` expects a static ranklist, so convert an SRK ranklist before rendering. For SSR-oriented builds, use this package's `./server` entry where appropriate.
23
+
24
+ ```tsx
25
+ import { createMemo, createSignal } from 'solid-js';
26
+ import { convertToStaticRanklist } from '@algoux/standard-ranklist-renderer-component-core';
27
+ import {
28
+ DefaultSolutionModal,
29
+ DefaultUserModal,
30
+ ProgressBar,
31
+ Ranklist,
32
+ type SolutionClickPayload,
33
+ type UserClickPayload,
34
+ } from '@algoux/standard-ranklist-renderer-component-solid';
35
+ import '@algoux/standard-ranklist-renderer-component-styles';
36
+
37
+ function Board(props: { ranklist: any }) {
38
+ const staticRanklist = createMemo(() => convertToStaticRanklist(props.ranklist));
39
+ const [activeUser, setActiveUser] = createSignal<UserClickPayload | null>(null);
40
+ const [activeSolution, setActiveSolution] = createSignal<SolutionClickPayload | null>(null);
41
+
42
+ return (
43
+ <>
44
+ <ProgressBar data={props.ranklist} enableTimeTravel onTimeTravel={(time) => console.log(time)} />
45
+ <Ranklist
46
+ data={staticRanklist()}
47
+ stripedRows
48
+ onUserClick={(payload) => {
49
+ setActiveUser(payload);
50
+ setActiveSolution(null);
51
+ }}
52
+ onSolutionClick={(payload) => {
53
+ setActiveSolution(payload);
54
+ setActiveUser(null);
55
+ }}
56
+ />
57
+ <DefaultUserModal
58
+ open={!!activeUser()}
59
+ user={activeUser()?.user}
60
+ markers={staticRanklist().markers}
61
+ onClose={() => setActiveUser(null)}
62
+ />
63
+ <DefaultSolutionModal
64
+ open={!!activeSolution()}
65
+ user={activeSolution()?.user}
66
+ problem={activeSolution()?.problem}
67
+ problemIndex={activeSolution()?.problemIndex || 0}
68
+ solutions={activeSolution()?.solutions || []}
69
+ onClose={() => setActiveSolution(null)}
70
+ />
71
+ </>
72
+ );
73
+ }
74
+ ```
75
+
76
+ Use `Modal` directly when you want custom modal content. `Ranklist` also accepts `parts` such as `userCell` and `statusCell` when you need targeted table-cell customization.
@@ -0,0 +1,11 @@
1
+ import type * as srk from '@algoux/standard-ranklist';
2
+ import { type ModalProps } from './Modal';
3
+ export interface DefaultSolutionModalProps extends Pick<ModalProps, 'open' | 'onClose' | 'rootClassName' | 'wrapClassName' | 'style'> {
4
+ user?: srk.User | null;
5
+ problem?: srk.Problem;
6
+ problemIndex: number;
7
+ solutions: srk.Solution[];
8
+ title?: string;
9
+ width?: number;
10
+ }
11
+ export declare function DefaultSolutionModal(props: DefaultSolutionModalProps): import("solid-js").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import type * as srk from '@algoux/standard-ranklist';
2
+ import { EnumTheme } from '@algoux/standard-ranklist-utils';
3
+ import { type ModalProps } from './Modal';
4
+ export interface DefaultUserModalProps extends Pick<ModalProps, 'open' | 'onClose' | 'rootClassName' | 'wrapClassName' | 'style'> {
5
+ user?: srk.User | null;
6
+ markers?: srk.Marker[];
7
+ theme?: EnumTheme;
8
+ title?: string;
9
+ width?: number;
10
+ formatSrkAssetUrl?: (url: string, field: string) => string;
11
+ }
12
+ export declare function DefaultUserModal(props: DefaultUserModalProps): import("solid-js").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import type { JSX } from 'solid-js';
2
+ export declare type ModalCloseReason = 'mask' | 'close-button' | 'escape';
3
+ export interface ModalProps {
4
+ open: boolean;
5
+ title?: JSX.Element;
6
+ children?: JSX.Element;
7
+ width?: number;
8
+ rootClassName?: string;
9
+ wrapClassName?: string;
10
+ style?: JSX.CSSProperties;
11
+ destroyOnClose?: boolean;
12
+ closeOnEsc?: boolean;
13
+ closeOnMaskClick?: boolean;
14
+ onClose?: (event: MouseEvent | KeyboardEvent, reason: ModalCloseReason) => void;
15
+ }
16
+ export declare function Modal(props: ModalProps): JSX.Element;
@@ -0,0 +1,9 @@
1
+ import type * as srk from '@algoux/standard-ranklist';
2
+ export interface ProgressBarProps {
3
+ data: srk.Ranklist;
4
+ enableTimeTravel?: boolean;
5
+ live?: boolean;
6
+ td?: number;
7
+ onTimeTravel?: (time: number | null) => void | Promise<void>;
8
+ }
9
+ export declare function ProgressBar(props: ProgressBarProps): import("solid-js").JSX.Element;
@@ -0,0 +1,46 @@
1
+ import type * as srk from '@algoux/standard-ranklist';
2
+ import { EnumTheme } from '@algoux/standard-ranklist-utils';
3
+ import type { JSX } from 'solid-js';
4
+ import type { SolutionClickPayload, StaticRanklist, StaticRanklistRow, UserClickPayload } from '@algoux/standard-ranklist-renderer-component-core';
5
+ export interface StatusCellPartProps {
6
+ status: srk.RankProblemStatus;
7
+ problem: srk.Problem | undefined;
8
+ problemIndex: number;
9
+ user: srk.User;
10
+ row: StaticRanklistRow;
11
+ rowIndex: number;
12
+ ranklist: StaticRanklist;
13
+ solutions: srk.Solution[];
14
+ onClick: (event?: MouseEvent) => void;
15
+ }
16
+ export interface ProblemHeaderCellPartProps {
17
+ problem: srk.Problem;
18
+ problemIndex: number;
19
+ index: number;
20
+ theme: EnumTheme;
21
+ }
22
+ export interface UserCellPartProps {
23
+ user: srk.User;
24
+ row: StaticRanklistRow;
25
+ rowIndex: number;
26
+ ranklist: StaticRanklist;
27
+ markers?: srk.Marker[];
28
+ theme: EnumTheme;
29
+ onClick: (event?: MouseEvent) => void;
30
+ }
31
+ export interface RanklistParts {
32
+ problemHeaderCell?: (props: ProblemHeaderCellPartProps) => JSX.Element;
33
+ userCell?: (props: UserCellPartProps) => JSX.Element;
34
+ statusCell?: (props: StatusCellPartProps) => JSX.Element;
35
+ }
36
+ export interface RanklistProps {
37
+ data: StaticRanklist;
38
+ theme?: EnumTheme;
39
+ borderedRows?: boolean;
40
+ stripedRows?: boolean;
41
+ formatSrkAssetUrl?: (url: string, field: string) => string;
42
+ onUserClick?: (payload: UserClickPayload) => void | Promise<void>;
43
+ onSolutionClick?: (payload: SolutionClickPayload) => void | Promise<void>;
44
+ parts?: RanklistParts;
45
+ }
46
+ export declare function Ranklist(props: RanklistProps): JSX.Element;
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("@algoux/standard-ranklist-renderer-component-styles");var e=require("solid-js/web"),f=require("@algoux/standard-ranklist-renderer-component-core"),r=require("solid-js"),y=require("@algoux/standard-ranklist-utils"),ae=e.template("<div class=srk-modal-header><div class=srk-modal-title>"),ie=e.template("<div><div class=srk-modal-mask></div><div tabindex=-1><div aria-modal=true class=srk-modal data-srk-modal-panel=true role=dialog tabindex=-1><div class=srk-modal-content><button aria-label=Close class=srk-modal-close type=button><span class=srk-modal-close-x></span></button><div class=srk-modal-body>");function Y(...t){return t.filter(Boolean).join(" ")}function X(t){const s=r.createUniqueId(),u=()=>{var a;return(a=t.destroyOnClose)!=null?a:!0},i=()=>{var a;return(a=t.closeOnEsc)!=null?a:!0},P=()=>{var a;return(a=t.closeOnMaskClick)!=null?a:!0},[N,U]=r.createSignal(t.open||!u()),[l,o]=r.createSignal(t.open?"pre-open":"closing"),[k,h]=r.createSignal({x:0,y:0});let w,d,n=null,c=null,m=!1,b=null,S=!1;const x=r.createMemo(()=>t.open||N()||!u()),v=r.createMemo(()=>t.open||u()&&N()),_=r.createMemo(()=>Y("srk-modal-root",f.SRK_ANIMATED_MODAL_ROOT_CLASS,t.rootClassName)),D=r.createMemo(()=>{var a,$;return{...t.style,width:t.width?`${t.width}px`:(a=t.style)==null?void 0:a.width,maxWidth:($=t.style)==null?void 0:$.maxWidth}}),B=()=>{n!==null&&(window.clearTimeout(n),n=null),c!==null&&(window.clearTimeout(c),c=null)};function q(a){var $;t.open&&i()&&(($=t.onClose)==null||$.call(t,a,"escape"))}const p=()=>{if(!(!t.open||!d||b!==null)){if(!d.isConnected){S||(S=!0,queueMicrotask(()=>{S=!1,p()}));return}b=f.registerModalFocusScope(d,{onEscape:q})}};r.onMount(()=>{p()}),r.createEffect(()=>{f.ensureModalInteractionTracker()}),r.onCleanup(()=>{B(),f.unregisterModalFocusScope(b),b=null}),r.createEffect(r.on(()=>t.open,a=>{const $=u();if(B(),a){U(!0),h({x:0,y:0}),o("pre-open"),typeof window!="undefined"&&(c=window.setTimeout(()=>{if(!t.open||l()!=="pre-open"){c=null;return}const F=f.resolveModalTransformOrigin(d||null);h(F.origin),o("opening"),c=null},0));return}if(b!==null&&(f.unregisterModalFocusScope(b),b=null),o("closing"),!$){U(!0);return}r.untrack(N)&&typeof window!="undefined"&&(n=window.setTimeout(()=>{m&&(f.unlockModalBodyScroll(),m=!1),w==null||w.remove(),U(!1),n=null},f.MODAL_ANIMATION_DURATION_MS))},{defer:!1})),r.createEffect(r.on(v,a=>{if(a&&!m){f.lockModalBodyScroll(),m=!0;return}if(!a&&m){f.unlockModalBodyScroll(),m=!1;return}},{defer:!1})),r.onCleanup(()=>{m&&(f.unlockModalBodyScroll(),m=!1),f.unregisterModalFocusScope(b),b=null}),r.createEffect(()=>{t.open&&x()&&p()}),r.createEffect(()=>{var L;const a=t.width?`${t.width}px`:typeof((L=t.style)==null?void 0:L.width)=="string"?t.style.width:null,$=`${k().x}px`,F=`${k().y}px`,g=l(),M=w,A=d;M&&M.setAttribute("data-srk-modal-state",g),A&&(a?(A.style.width=a,A.style.setProperty("--srk-modal-max-width",a)):(A.style.removeProperty("width"),A.style.removeProperty("--srk-modal-max-width")),A.style.setProperty("--srk-modal-origin-x",$),A.style.setProperty("--srk-modal-origin-y",F))});const T=()=>(()=>{var a=ie(),$=a.firstChild,F=$.nextSibling,g=F.firstChild,M=g.firstChild,A=M.firstChild,L=A.nextSibling,V=w;return typeof V=="function"?e.use(V,a):w=a,F.$$mousedown=C=>{var O;P()&&C.target===C.currentTarget&&((O=t.onClose)==null||O.call(t,C,"mask"))},e.use(C=>{d=C,p()},g),A.$$click=C=>{var O;return(O=t.onClose)==null?void 0:O.call(t,C,"close-button")},e.insert(M,e.createComponent(r.Show,{get when(){return t.title!==void 0},get children(){var C=ae(),O=C.firstChild;return e.setAttribute(O,"id",s),e.insert(O,()=>t.title),C}}),L),e.insert(L,()=>t.children),e.effect(C=>{var O=_(),W=l(),z=Y("srk-modal-wrap",t.wrapClassName),K=t.title!==void 0?s:void 0,j=D();return O!==C.e&&e.className(a,C.e=O),W!==C.t&&e.setAttribute(a,"data-srk-modal-state",C.t=W),z!==C.a&&e.className(F,C.a=z),K!==C.o&&e.setAttribute(g,"aria-labelledby",C.o=K),C.i=e.style(g,j,C.i),C},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),a})();return e.createComponent(r.Show,{get when(){return x()},children:T})}e.delegateEvents(["mousedown","click"]);var oe=e.template('<table class="srk-common-table srk-solutions-table"><thead><tr><th class=srk--text-left>Result</th><th class=srk--text-right>Time</th></tr></thead><tbody>'),ue=e.template("<tr><td><span></span></td><td class=srk--text-right>");function ce(t){const[s,u]=r.createSignal(t.user?{user:t.user,problem:t.problem,problemIndex:t.problemIndex,solutions:t.solutions||[]}:null);return r.createEffect(()=>{t.user&&u({user:t.user,problem:t.problem,problemIndex:t.problemIndex,solutions:t.solutions||[]})}),e.createComponent(r.Show,{get when(){return s()},children:i=>e.createComponent(X,{get open(){return t.open},get onClose(){return t.onClose},get rootClassName(){return t.rootClassName||"srk-general-modal-root"},get style(){return t.style},get title(){return t.title||f.getSolutionModalTitle(i().problemIndex,i().user)},get width(){return t.width||320},get wrapClassName(){return t.wrapClassName||"srk-solutions-modal"},get children(){var P=oe(),N=P.firstChild,U=N.nextSibling;return e.insert(U,e.createComponent(r.For,{get each(){return i().solutions},children:l=>{const o=()=>f.getSolutionResultMeta(l.result);return(()=>{var k=ue(),h=k.firstChild,w=h.firstChild,d=h.nextSibling;return e.insert(w,()=>o().label),e.insert(d,()=>f.formatSolutionTimestamp(l)),e.effect(()=>e.className(w,`srk-solution-result-text ${o().className||""}`)),k})()}})),P}})})}var de=e.template("<div class=srk-user-modal-info-team-members>"),me=e.template('<div class=srk-user-modal-info><h3 class=srk-user-modal-info-user-name></h3><div class=srk-user-modal-info-labels><span class="srk-user-modal-info-labels-label srk-user-modal-info-labels-label-preset-general">'),fe=e.template("<p class=srk-user-modal-info-user-second-name>"),G=e.template("<span>"),ge=e.template("<span class=srk-user-modal-info-team-members-slash> / "),ke=e.template('<div class=srk-user-modal-info-photo><img alt="User portrait"class=srk-user-modal-info-photo-img>');function he(t){const[s,u]=r.createSignal(t.user||null),i=()=>t.theme||y.EnumTheme.light,P=()=>t.markers||[],N=l=>y.resolveUserMarkers(l,P()).map(o=>({marker:o,presentation:f.getMarkerPresentation(o,i())})),U=(l,o)=>f.resolveSrkAssetUrl(l,o,t.formatSrkAssetUrl);return r.createEffect(()=>{t.user&&u(t.user)}),e.createComponent(r.Show,{get when(){return s()},children:l=>e.createComponent(X,{get open(){return t.open},get onClose(){return t.onClose},get rootClassName(){return t.rootClassName||"srk-general-modal-root"},get style(){return t.style},get title(){return t.title||"User Info"},get width(){return t.width||420},get wrapClassName(){return t.wrapClassName||"srk-user-modal"},get children(){var o=me(),k=o.firstChild,h=k.nextSibling,w=h.firstChild;return e.insert(k,()=>y.resolveText(l().name)),e.insert(o,e.createComponent(r.Show,{get when(){return l().organization},children:d=>(()=>{var n=fe();return e.insert(n,()=>y.resolveText(d())),n})()}),h),e.insert(w,()=>l().official===!1?"\uFF0A \u975E\u6B63\u5F0F\u53C2\u52A0\u8005":"\u6B63\u5F0F\u53C2\u52A0\u8005"),e.insert(h,e.createComponent(r.For,{get each(){return N(l())},children:d=>(()=>{var n=G();return e.insert(n,()=>y.resolveText(d.marker.label)),e.effect(c=>{var m=`srk-user-modal-info-labels-label ${d.presentation.className||""}`,b=d.presentation.style;return m!==c.e&&e.className(n,c.e=m),c.t=e.style(n,b,c.t),c},{e:void 0,t:void 0}),n})()}),null),e.insert(o,e.createComponent(r.Show,{get when(){var d;return(d=l().teamMembers)==null?void 0:d.length},get children(){var d=de();return e.insert(d,e.createComponent(r.For,{get each(){return l().teamMembers},children:(n,c)=>[e.createComponent(r.Show,{get when(){return c()>0},get children(){return ge()}}),(()=>{var m=G();return e.insert(m,()=>y.resolveText(n.name)),m})()]})),d}}),null),e.insert(o,e.createComponent(r.Show,{get when(){return l().photo},children:d=>(()=>{var n=ke(),c=n.firstChild;return e.effect(()=>e.setAttribute(c,"src",U(d(),"user.photo"))),n})()}),null),o}})})}var ve=e.template("<div class=srk-progress-slider-tooltip>"),$e=e.template('<div class=srk-progress-slider-layer><input aria-label="Time Travel"class=srk-progress-slider min=0 step=1 type=range>'),be=e.template("<div class=srk-progress-time-machine-status><div class=srk-progress-time-machine-text>Time Travel Mode"),Ce=e.template('<div class=srk-progress-bar-container><div class=srk-progress-bar><div class=srk-progress-bar-body><div class="srk-progress-bar-segment srk-progress-bar-normal"><div class=srk-progress-bar-fill></div></div><div class="srk-progress-bar-segment srk-progress-bar-frozen"><div class=srk-progress-bar-fill></div></div></div></div><div class=srk-progress-secondary-area><div class=srk-progress-secondary-area-left>Elapsed: </div><div class=srk-progress-secondary-area-center></div><div class=srk-progress-secondary-area-right>Remaining: '),Se=e.template("<div class=srk-progress-live-text>Live"),_e=e.template("<div style=visibility:hidden>SRK");const Q=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"]);function ye(t){var $,F;const[s,u]=r.createSignal(Date.now()),[i,P]=r.createSignal(!1),[N,U]=r.createSignal(!1),[l,o]=r.createSignal(f.getProgressMaxAvailableMinutes(t.data.contest,s(),t.td)),[k,h]=r.createSignal(null),[w,d]=r.createSignal(!1);let n,c=JSON.stringify((F=($=t.data)==null?void 0:$.contest)==null?void 0:F.title);const m=()=>{var g;return(g=t.td)!=null?g:0},b=()=>f.getProgressDurationMinutes(t.data.contest),S=()=>f.getProgressMaxAvailableMinutes(t.data.contest,s(),m()),x=()=>f.isProgressEnded(t.data.contest,s(),m()),v=()=>f.getProgressMetrics(t.data,s(),m(),l(),i()),_=()=>{n&&(window.clearInterval(n),n=void 0)},D=()=>{u(Date.now()),x()&&_()},B=g=>{var A;const M=g>=b()||g>=S();(A=t.onTimeTravel)==null||A.call(t,M?null:g*60*1e3),P(!M),h(M?null:g*60*1e3),U(!1)},q=()=>{U(!0),P(!0)},p=()=>{N()&&B(l())},T=g=>{Q.has(g.key)&&q()},a=g=>{Q.has(g.key)&&p()};return r.createEffect(()=>{const g=S();!N()&&k()===null&&l()!==g&&o(g)}),r.createEffect(()=>{var M,A,L;const g=JSON.stringify((A=(M=t.data)==null?void 0:M.contest)==null?void 0:A.title);g!==c&&(c=g,U(!1),o(S()),h(null),P(!1),(L=t.onTimeTravel)==null||L.call(t,null))}),r.createEffect(()=>{if(!t.live||typeof window=="undefined"){_();return}_(),n=window.setInterval(D,1e3),r.onCleanup(_)}),r.onMount(()=>d(!0)),r.onCleanup(_),(()=>{var g=Ce(),M=g.firstChild,A=M.firstChild,L=A.firstChild,V=L.firstChild,C=L.nextSibling,O=C.firstChild,W=M.nextSibling,z=W.firstChild;z.firstChild;var K=z.nextSibling,j=K.nextSibling;return j.firstChild,e.insert(M,e.createComponent(r.Show,{get when(){return e.memo(()=>!!(t.enableTimeTravel&&v().supportRegen))()&&w()},get children(){var E=$e(),I=E.firstChild;return e.insert(E,e.createComponent(r.Show,{get when(){return N()},get children(){var R=ve();return e.insert(R,()=>y.secToTimeStr(l()*60)),e.effect(H=>e.setStyleProperty(R,"left",`${b()?l()/b()*100:0}%`)),R}}),I),I.$$touchstart=q,I.$$touchend=p,I.$$mouseup=p,I.$$mousedown=q,I.$$keyup=a,I.$$keydown=T,I.$$input=R=>o(Number(R.currentTarget.value)),I.addEventListener("blur",()=>{N()&&p()}),e.effect(R=>{var H=b(),J=y.secToTimeStr(l()*60);return H!==R.e&&e.setAttribute(I,"max",R.e=H),J!==R.t&&e.setAttribute(I,"title",R.t=J),R},{e:void 0,t:void 0}),e.effect(()=>I.value=l()),E}}),null),e.insert(z,()=>y.secToTimeStr(Math.round(v().elapsed/1e3)),null),e.insert(K,e.createComponent(r.Show,{get when(){return i()},get fallback(){return e.memo(()=>!!(t.live&&!x()))()?Se():_e()},get children(){return be()}})),e.insert(j,()=>y.secToTimeStr(Math.round(v().remaining/1e3)),null),e.effect(E=>{var I=`${v().frozenBreakpoint*100}%`,R=`${v().normalInnerPercent}%`,H=`${(1-v().frozenBreakpoint)*100}%`,J=`${v().frozenInnerPercent}%`,le=t.live||i()?{}:{display:"none"},se=t.live||i()?{}:{display:"none"};return I!==E.e&&e.setStyleProperty(L,"width",E.e=I),R!==E.t&&e.setStyleProperty(V,"width",E.t=R),H!==E.a&&e.setStyleProperty(C,"width",E.a=H),J!==E.o&&e.setStyleProperty(O,"width",E.o=J),E.i=e.style(z,le,E.i),E.n=e.style(j,se,E.n),E},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),g})()}e.delegateEvents(["input","keydown","keyup","mousedown","mouseup","touchend","touchstart"]);var we=e.template("<th class=srk--nowrap>Time"),xe=e.template('<div class="srk-common-table srk-main"><table><thead><tr><th class="srk--text-left srk--nowrap">Name</th><th class=srk--nowrap>Score</th></tr></thead><tbody>'),Te=e.template('<div>srk type "<!>" is not supported'),Me=e.template('<div>srk version "<!>" is not supported (current supported: <!>)'),Ae=e.template('<th class="srk-series-header srk--text-right srk--nowrap">'),Pe=e.template('<th class="srk--nowrap srk-problem-header">'),Ne=e.template('<a target=_blank rel="noopener noreferrer"style=color:unset>'),Ee=e.template('<td class="srk--text-right srk--nowrap">'),Ue=e.template('<tr><td class="srk--text-right srk--nowrap">'),re=e.template("<td>"),Ie=e.template('<td class="srk--text-left srk--nowrap srk-user-cell"><div class=srk-user-cell-content><div class=srk-user-body><div class=srk-user-name-row><span class=srk-user-name-text></span><span class=srk-marker-dot-group>'),Re=e.template('<div class=srk-user-avatar><img alt="User Avatar">'),De=e.template("<span>"),Fe=e.template('<p class="srk-user-secondary-text srk--text-ellipsis"title>'),Oe=e.template("<span class=srk--display-block>"),Le=e.template('<span class="srk--display-block srk-problem-stats">'),pe=e.template('<td class="srk-prest-status-block srk--text-center srk--nowrap srk-prest-status-block-fb">'),Be=e.template('<td class="srk-prest-status-block srk--text-center srk--nowrap srk-prest-status-block-accepted">'),qe=e.template('<td class="srk-prest-status-block srk--text-center srk--nowrap srk-prest-status-block-frozen">'),ze=e.template('<td class="srk-prest-status-block srk--text-center srk--nowrap srk-prest-status-block-failed">'),He=e.template("<span class=srk-prest-status-block-score>"),Ke=e.template("<span class=srk-prest-status-block-score-details>");function je(t){const s=()=>t.theme||y.EnumTheme.light,u=()=>f.shouldShowTimeColumn(t.data.rows),i=(l,o)=>f.resolveSrkAssetUrl(l,o,t.formatSrkAssetUrl),P=(l,o,k)=>{var h;l&&f.captureModalTriggerPointFromMouseEvent(l,{source:"user-cell",context:{rowIndex:k,userId:o.user.id||null,userName:y.resolveText(o.user.name)}}),(h=t.onUserClick)==null||h.call(t,{user:o.user,row:o,rowIndex:k,ranklist:t.data})},N=(l,o,k,h)=>({user:l.user,row:l,rowIndex:o,problemIndex:h,problem:t.data.problems[h],status:k,solutions:te(k),ranklist:t.data}),U=(l,o,k,h,w)=>{var n,c;const d=N(o,k,h,w);!d.solutions.length||(l&&f.captureModalTriggerPointFromMouseEvent(l,{source:"status-cell",context:{rowIndex:k,problemIndex:w,problemAlias:((n=d.problem)==null?void 0:n.alias)||null,problemTitle:d.problem?y.resolveText(d.problem.title):null,userId:o.user.id||null}}),(c=t.onSolutionClick)==null||c.call(t,d))};return e.createComponent(r.Show,{get when(){return t.data.type==="general"},get fallback(){return(()=>{var l=Te(),o=l.firstChild,k=o.nextSibling;return k.nextSibling,e.insert(l,()=>t.data.type,k),l})()},get children(){return e.createComponent(r.Show,{get when(){return f.caniuse(t.data.version)},get fallback(){return(()=>{var l=Me(),o=l.firstChild,k=o.nextSibling,h=k.nextSibling,w=h.nextSibling;return w.nextSibling,e.insert(l,()=>t.data.version,k),e.insert(l,f.srkSupportedVersions,w),l})()},get children(){var l=xe(),o=l.firstChild,k=o.firstChild,h=k.firstChild,w=h.firstChild;w.nextSibling;var d=k.nextSibling;return e.insert(h,e.createComponent(r.For,{get each(){return t.data.series},children:n=>(()=>{var c=Ae();return e.insert(c,()=>n.title),c})()}),w),e.insert(h,e.createComponent(r.Show,{get when(){return u()},get children(){return we()}}),null),e.insert(h,e.createComponent(r.For,{get each(){return t.data.problems},children:(n,c)=>{var S;const m=(S=t.parts)==null?void 0:S.problemHeaderCell,b=c();return m?e.createComponent(m,{problem:n,problemIndex:b,index:b,get theme(){return s()}}):(()=>{var x=Pe();return e.insert(x,e.createComponent(r.Show,{get when(){return n.link},get fallback(){return e.createComponent(Z,{problem:n,index:b})},children:v=>(()=>{var _=Ne();return e.insert(_,e.createComponent(Z,{problem:n,index:b})),e.effect(()=>e.setAttribute(_,"href",v())),_})()})),e.effect(v=>e.setStyleProperty(x,"background-image",f.getProblemHeaderBackgroundImage(n.style,s()))),x})()}}),null),e.insert(d,e.createComponent(r.For,{get each(){return t.data.rows},children:(n,c)=>(()=>{var m=Ue(),b=m.firstChild;return e.insert(m,e.createComponent(r.For,{get each(){return We(n,t.data.series)},children:(S,x)=>(()=>{var v=re();return e.insert(v,()=>Xe(S,n)),e.effect(_=>{var D=`srk--text-right srk--nowrap ${Ge(S,t.data.series[x()])}`,B=Qe(S,t.data.series[x()],s());return D!==_.e&&e.className(v,_.e=D),_.t=e.style(v,B,_.t),_},{e:void 0,t:void 0}),v})()}),b),e.insert(m,()=>{var x;const S=(x=t.parts)==null?void 0:x.userCell;return S?e.createComponent(S,{get user(){return n.user},row:n,get rowIndex(){return c()},get ranklist(){return t.data},get markers(){return t.data.markers},get theme(){return s()},onClick:v=>P(v,n,c())}):(()=>{var v=Ie(),_=v.firstChild,D=_.firstChild,B=D.firstChild,q=B.firstChild,p=q.nextSibling;return v.$$click=T=>{T.preventDefault(),P(T,n,c())},e.insert(_,e.createComponent(r.Show,{get when(){return n.user.avatar},children:T=>(()=>{var a=Re(),$=a.firstChild;return e.effect(()=>e.setAttribute($,"src",i(T(),"user.avatar"))),a})()}),D),e.insert(q,()=>y.resolveText(n.user.name)),e.insert(p,e.createComponent(r.For,{get each(){return Ye(n.user,t.data.markers,s())},children:T=>(()=>{var a=De();return e.effect($=>{var F=`srk-marker srk-marker-dot srk--c-tooltip ${T.presentation.className||""}`,g=Ze(T.presentation.style),M=y.resolveText(T.marker.label);return F!==$.e&&e.className(a,$.e=F),$.t=e.style(a,g,$.t),M!==$.a&&e.setAttribute(a,"data-tooltip",$.a=M),$},{e:void 0,t:void 0,a:void 0}),a})()})),e.insert(D,e.createComponent(r.Show,{get when(){return n.user.organization},children:T=>(()=>{var a=Fe();return e.insert(a,()=>y.resolveText(T())),a})()}),null),e.effect(T=>{var a=!!t.onUserClick,$=y.resolveText(n.user.name);return a!==T.e&&v.classList.toggle("srk--cursor-pointer",T.e=a),$!==T.t&&e.setAttribute(q,"title",T.t=$),T},{e:void 0,t:void 0}),v})()},b),e.insert(b,()=>n.score.value),e.insert(m,e.createComponent(r.Show,{get when(){return u()},get children(){var S=Ee();return e.insert(S,(()=>{var x=e.memo(()=>!!n.score.time);return()=>x()?y.formatTimeDuration(n.score.time,"min",Math.floor):"-"})()),S}}),null),e.insert(m,e.createComponent(r.For,{get each(){return n.statuses},children:(S,x)=>{var D;const v={status:S,problem:t.data.problems[x()],problemIndex:x(),user:n.user,row:n,rowIndex:c(),ranklist:t.data,solutions:te(S),onClick:B=>U(B,n,c(),S,x())},_=(D=t.parts)==null?void 0:D.statusCell;return _?e.createComponent(_,v):e.createComponent(Ve,e.mergeProps(v,{get onSolutionClick(){return t.onSolutionClick}}))}}),null),m})()})),e.effect(n=>{var c=!!t.borderedRows,m=!!t.stripedRows;return c!==n.e&&o.classList.toggle("srk-table-row-bordered",n.e=c),m!==n.t&&o.classList.toggle("srk-table-row-striped",n.t=m),n},{e:void 0,t:void 0}),l}})}})}function Z(t){return[(()=>{var s=Oe();return e.insert(s,()=>t.problem.alias||y.numberToAlphabet(t.index)),s})(),e.createComponent(r.Show,{get when(){return t.problem.statistics},children:s=>(()=>{var u=Le();return e.insert(u,()=>s().accepted),e.effect(()=>e.setAttribute(u,"title",Je(s()))),u})()})]}function Je(t){const s=t.submitted?(t.accepted/t.submitted*100).toFixed(1):0;return`${t.accepted} / ${t.submitted} (${s}%)`}function Ve(t){const s=()=>t.solutions.length>0&&!!t.onSolutionClick,u=i=>{i.preventDefault(),s()&&t.onClick(i)};return t.status.result==="FB"?(()=>{var i=pe();return i.$$click=u,e.insert(i,e.createComponent(ee,{get status(){return t.status}})),e.effect(()=>i.classList.toggle("srk--cursor-pointer",!!s())),i})():t.status.result==="AC"?(()=>{var i=Be();return i.$$click=u,e.insert(i,e.createComponent(ee,{get status(){return t.status}})),e.effect(()=>i.classList.toggle("srk--cursor-pointer",!!s())),i})():t.status.result==="?"?(()=>{var i=qe();return i.$$click=u,e.insert(i,()=>t.status.tries),e.effect(()=>i.classList.toggle("srk--cursor-pointer",!!s())),i})():t.status.result==="RJ"?(()=>{var i=ze();return i.$$click=u,e.insert(i,()=>t.status.tries),e.effect(()=>i.classList.toggle("srk--cursor-pointer",!!s())),i})():re()}function ee(t){const s=()=>f.getAcceptedStatusDetails(t.status);return typeof t.status.score=="number"?[(()=>{var u=He();return e.insert(u,()=>t.status.score),u})(),(()=>{var u=Ke();return e.insert(u,s),u})()]:e.memo(s)}function We(t,s){return t.rankValues||s.map(()=>({rank:null,segmentIndex:null}))}function Xe(t,s){return t.rank?t.rank:s.user.official===!1?"\uFF0A":""}function te(t){return[...t.solutions||[]].reverse()}function Ye(t,s,u){return y.resolveUserMarkers(t,s).map(i=>({marker:i,presentation:f.getMarkerPresentation(i,u)}))}function ne(t,s){const u=t.segmentIndex||t.segmentIndex===0?t.segmentIndex:-1;return((s==null?void 0:s.segments)||[])[u]||{}}function Ge(t,s){const u=ne(t,s).style;return typeof u=="string"?`srk-preset-series-segment-${u}`:""}function Qe(t,s,u){const i={[y.EnumTheme.light]:void 0,[y.EnumTheme.dark]:void 0},P=ne(t,s).style;if(!P||typeof P=="string")return{};const N=y.resolveStyle(P),U=N.textColor||i,l=N.backgroundColor||i;return{color:U[u],"background-color":l[u]}}function Ze(t){return t!=null&&t.backgroundColor?{"background-color":t.backgroundColor}:{}}e.delegateEvents(["click"]);exports.DefaultSolutionModal=ce;exports.DefaultUserModal=he;exports.Modal=X;exports.ProgressBar=ye;exports.Ranklist=je;
@@ -0,0 +1,11 @@
1
+ export { DefaultSolutionModal } from './DefaultSolutionModal';
2
+ export type { DefaultSolutionModalProps } from './DefaultSolutionModal';
3
+ export { DefaultUserModal } from './DefaultUserModal';
4
+ export type { DefaultUserModalProps } from './DefaultUserModal';
5
+ export { Modal } from './Modal';
6
+ export type { ModalCloseReason, ModalProps } from './Modal';
7
+ export { ProgressBar } from './ProgressBar';
8
+ export type { ProgressBarProps } from './ProgressBar';
9
+ export { Ranklist } from './Ranklist';
10
+ export type { ProblemHeaderCellPartProps, RanklistParts, RanklistProps, StatusCellPartProps, UserCellPartProps, } from './Ranklist';
11
+ export type { SolutionClickPayload, StaticRanklist, StaticRanklistRow, UserClickPayload, } from '@algoux/standard-ranklist-renderer-component-core';