showai-reader 0.9.0-reader.7eo3dlir → 0.9.0-reader.cksvoqzr

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +1 -1
  2. package/chunks/{ComparisonMatrix-Y23JEUWT.js → ComparisonMatrix-KTLR7NQV.js} +1 -1
  3. package/chunks/{ExperimentTracker-E75KXRF2.js → ExperimentTracker-JWWECSJR.js} +1 -1
  4. package/chunks/{ExternalDiagram-JL7AG5GP.js → ExternalDiagram-OJHVIWTW.js} +743 -18
  5. package/chunks/{Flowchart-WNVHN5AC.js → Flowchart-BOY3JGQF.js} +2 -2
  6. package/chunks/{G2Chart-BA5IDTUV.js → G2Chart-M63242NG.js} +2 -2
  7. package/chunks/{Mindmap-UG3527BI.js → Mindmap-WERZLYP6.js} +1 -1
  8. package/chunks/{RichTextEditor-PWYETK5J.js → RichTextEditor-3PQXABDI.js} +50 -49
  9. package/chunks/{Scene3D-W7LZXKUP.js → Scene3D-WNBIE7LS.js} +2 -2
  10. package/chunks/{StatusTree-5UT6FPGY.js → StatusTree-JVEVAYO5.js} +1 -1
  11. package/chunks/chunk-CMJMBEIC.js +21 -0
  12. package/chunks/{chunk-LU2JYOE4.js.LEGAL.txt → chunk-CMJMBEIC.js.LEGAL.txt} +17 -0
  13. package/chunks/{chunk-CONQMWJD.js → chunk-GNOF6PGV.js} +1 -1
  14. package/chunks/{chunk-YMX2EQEL.js → chunk-HHKKCN2F.js} +1 -1
  15. package/chunks/{chunk-WPCUZTWD.js → chunk-J7ZODHSI.js} +1 -1
  16. package/chunks/{chunk-JQE3ZACJ.js → chunk-NPT6AF6K.js} +2 -2
  17. package/chunks/chunk-QBNRB4AJ.js +1 -0
  18. package/chunks/{chunk-2HJ7X47C.js → chunk-QIGHBYK6.js} +1 -1
  19. package/chunks/{chunk-NU3EF6FT.js → chunk-UHMLBB4O.js} +3 -3
  20. package/index.js +1 -1
  21. package/manifest.json +4 -4
  22. package/package.json +1 -1
  23. package/reader-CKSVOQZR.js +41 -0
  24. package/chunks/chunk-LU2JYOE4.js +0 -21
  25. package/chunks/chunk-QSELZI5S.js +0 -1
  26. package/reader-7EO3DLIR.js +0 -41
  27. /package/chunks/{Flowchart-WNVHN5AC.js.LEGAL.txt → Flowchart-BOY3JGQF.js.LEGAL.txt} +0 -0
  28. /package/chunks/{G2Chart-BA5IDTUV.js.LEGAL.txt → G2Chart-M63242NG.js.LEGAL.txt} +0 -0
  29. /package/chunks/{Scene3D-W7LZXKUP.js.LEGAL.txt → Scene3D-WNBIE7LS.js.LEGAL.txt} +0 -0
  30. /package/chunks/{chunk-JQE3ZACJ.js.LEGAL.txt → chunk-NPT6AF6K.js.LEGAL.txt} +0 -0
  31. /package/{reader-7EO3DLIR.js.LEGAL.txt → reader-CKSVOQZR.js.LEGAL.txt} +0 -0
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  The [ShowAI](https://showai.renaissancemind.ai) page reader, built from ShowAI 0.9.0 as code-split ES modules. Inline conversation pages written by `render-artifact --cdn` import it and load each component's code only when the page uses it.
4
4
 
5
5
  ```js
6
- const { mount } = await import("https://cdn.jsdelivr.net/npm/showai-reader@0.9.0-reader.7eo3dlir/index.js");
6
+ const { mount } = await import("https://cdn.jsdelivr.net/npm/showai-reader@0.9.0-reader.cksvoqzr/index.js");
7
7
  mount(document.getElementById("page"), { artifact });
8
8
  ```
9
9
 
@@ -1 +1 @@
1
- import{a as v}from"./chunk-YMX2EQEL.js";import{c as x}from"./chunk-KF47DKNH.js";import{d as w}from"./chunk-WPCUZTWD.js";import{Ta as N,Wa as k,c as O}from"./chunk-LU2JYOE4.js";import{c as g}from"./chunk-DUIGVKKG.js";var s=g(O(),1);var e=g(N(),1),c={yes:"\u2713",no:"\u2715",partial:"\u25D0",neutral:"\u2022",na:""},C={yes:"matrix.legend.yes",no:"matrix.legend.no",partial:"matrix.legend.partial",neutral:"matrix.legend.neutral",na:"matrix.legend.na"};function E({data:M}){let n=k(v),a=M,[i,u]=(0,s.useState)(null),[h,$]=(0,s.useState)(!1),R=(0,s.useMemo)(()=>new Map(a.cells.map(t=>[`${t.row}\0${t.column}`,t])),[a.cells]),b=(0,s.useMemo)(()=>new Set(x(a)),[a]),m=h?a.rows.filter(t=>b.has(t.id)):a.rows,S=Object.keys(c).filter(t=>a.cells.some(o=>o.tone===t)),p=a.cells.filter(t=>t.note),f=t=>[t.highlight?"is-highlight":"",i===t.id?"is-focus":""].filter(Boolean).join(" ")||void 0;return(0,e.jsxs)("section",{className:"sb-block an-block","aria-label":w(a.title,n("matrix.title")),children:[(0,e.jsxs)("div",{className:"an-head",children:[a.title&&(0,e.jsx)("h3",{className:"an-title",children:a.title}),a.description&&(0,e.jsx)("p",{className:"an-sub",children:a.description}),(0,e.jsxs)("div",{className:"an-tools",children:[(0,e.jsx)("button",{type:"button",className:"an-chip","aria-pressed":h,onClick:()=>$(t=>!t),children:n("matrix.diffOnly",{count:b.size,total:a.rows.length})}),i&&(0,e.jsx)("button",{type:"button",className:"an-chip",onClick:()=>u(null),children:n("matrix.clearFocus")})]})]}),(0,e.jsx)("div",{className:"an-matrix-scroll",children:(0,e.jsxs)("table",{className:`an-matrix${i?" has-focus":""}`,children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{className:"an-rowhead",scope:"col",children:n("matrix.dimension")}),a.columns.map(t=>(0,e.jsxs)("th",{scope:"col",className:f(t),children:[(0,e.jsxs)("button",{type:"button",className:"an-col-button","aria-pressed":i===t.id,onClick:()=>u(i===t.id?null:t.id),children:[t.label,t.note&&(0,e.jsx)("span",{className:"an-col-note",children:t.note})]}),t.url&&(0,e.jsx)("a",{href:t.url,target:"_blank",rel:"noreferrer",className:"an-col-note",children:n("matrix.source")})]},t.id))]})}),(0,e.jsxs)("tbody",{children:[m.length===0&&(0,e.jsx)("tr",{children:(0,e.jsx)("td",{colSpan:a.columns.length+1,className:"an-empty",children:n("matrix.allSame")})}),m.map((t,o)=>{let T=t.group&&t.group!==m[o-1]?.group;return(0,e.jsxs)(s.Fragment,{children:[T&&(0,e.jsx)("tr",{className:"an-group-row",children:(0,e.jsx)("th",{colSpan:a.columns.length+1,scope:"rowgroup",children:t.group})}),(0,e.jsxs)("tr",{children:[(0,e.jsxs)("th",{className:"an-rowhead",scope:"row",children:[(0,e.jsx)("div",{className:"an-row-label",children:t.label}),t.hint&&(0,e.jsx)("div",{className:"an-row-hint",children:t.hint})]}),a.columns.map(d=>{let r=R.get(`${t.id}\0${d.id}`),l=r?.tone??"na",y=r?.note?p.indexOf(r)+1:0;return(0,e.jsxs)("td",{className:f(d),title:r?.note,children:[(0,e.jsxs)("span",{className:`an-cell an-tone-${l}`,children:[c[l]&&(0,e.jsx)("b",{"aria-hidden":"true",children:c[l]}),(0,e.jsx)("span",{children:r?.text??(l==="na"?"\u2014":a.legend?.[l]??n(C[l]))})]}),y>0&&(0,e.jsx)("sup",{className:"an-note-mark",children:y})]},d.id)})]})]},t.id)})]})]})}),(0,e.jsxs)("div",{className:"an-legend",children:[S.map(t=>(0,e.jsxs)("span",{className:`an-tone-${t}`,children:[c[t]?(0,e.jsx)("b",{children:c[t]}):"\u2014"," ",a.legend?.[t]??n(C[t])]},t)),(0,e.jsx)("span",{children:n("matrix.focusHint")})]}),p.length>0&&(0,e.jsx)("ol",{className:"an-static","aria-label":n("matrix.notes"),children:p.map(t=>(0,e.jsx)("li",{children:n("matrix.note",{column:a.columns.find(o=>o.id===t.column)?.label??"",row:a.rows.find(o=>o.id===t.row)?.label??"",note:t.note??""})},`${t.row}-${t.column}`))})]})}export{E as ComparisonMatrixBlock};
1
+ import{a as v}from"./chunk-HHKKCN2F.js";import{c as x}from"./chunk-KF47DKNH.js";import{d as w}from"./chunk-J7ZODHSI.js";import{c as O,ib as N,lb as k}from"./chunk-CMJMBEIC.js";import{c as g}from"./chunk-DUIGVKKG.js";var s=g(O(),1);var e=g(N(),1),c={yes:"\u2713",no:"\u2715",partial:"\u25D0",neutral:"\u2022",na:""},C={yes:"matrix.legend.yes",no:"matrix.legend.no",partial:"matrix.legend.partial",neutral:"matrix.legend.neutral",na:"matrix.legend.na"};function E({data:M}){let n=k(v),a=M,[i,u]=(0,s.useState)(null),[h,$]=(0,s.useState)(!1),R=(0,s.useMemo)(()=>new Map(a.cells.map(t=>[`${t.row}\0${t.column}`,t])),[a.cells]),b=(0,s.useMemo)(()=>new Set(x(a)),[a]),m=h?a.rows.filter(t=>b.has(t.id)):a.rows,S=Object.keys(c).filter(t=>a.cells.some(o=>o.tone===t)),p=a.cells.filter(t=>t.note),f=t=>[t.highlight?"is-highlight":"",i===t.id?"is-focus":""].filter(Boolean).join(" ")||void 0;return(0,e.jsxs)("section",{className:"sb-block an-block","aria-label":w(a.title,n("matrix.title")),children:[(0,e.jsxs)("div",{className:"an-head",children:[a.title&&(0,e.jsx)("h3",{className:"an-title",children:a.title}),a.description&&(0,e.jsx)("p",{className:"an-sub",children:a.description}),(0,e.jsxs)("div",{className:"an-tools",children:[(0,e.jsx)("button",{type:"button",className:"an-chip","aria-pressed":h,onClick:()=>$(t=>!t),children:n("matrix.diffOnly",{count:b.size,total:a.rows.length})}),i&&(0,e.jsx)("button",{type:"button",className:"an-chip",onClick:()=>u(null),children:n("matrix.clearFocus")})]})]}),(0,e.jsx)("div",{className:"an-matrix-scroll",children:(0,e.jsxs)("table",{className:`an-matrix${i?" has-focus":""}`,children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{className:"an-rowhead",scope:"col",children:n("matrix.dimension")}),a.columns.map(t=>(0,e.jsxs)("th",{scope:"col",className:f(t),children:[(0,e.jsxs)("button",{type:"button",className:"an-col-button","aria-pressed":i===t.id,onClick:()=>u(i===t.id?null:t.id),children:[t.label,t.note&&(0,e.jsx)("span",{className:"an-col-note",children:t.note})]}),t.url&&(0,e.jsx)("a",{href:t.url,target:"_blank",rel:"noreferrer",className:"an-col-note",children:n("matrix.source")})]},t.id))]})}),(0,e.jsxs)("tbody",{children:[m.length===0&&(0,e.jsx)("tr",{children:(0,e.jsx)("td",{colSpan:a.columns.length+1,className:"an-empty",children:n("matrix.allSame")})}),m.map((t,o)=>{let T=t.group&&t.group!==m[o-1]?.group;return(0,e.jsxs)(s.Fragment,{children:[T&&(0,e.jsx)("tr",{className:"an-group-row",children:(0,e.jsx)("th",{colSpan:a.columns.length+1,scope:"rowgroup",children:t.group})}),(0,e.jsxs)("tr",{children:[(0,e.jsxs)("th",{className:"an-rowhead",scope:"row",children:[(0,e.jsx)("div",{className:"an-row-label",children:t.label}),t.hint&&(0,e.jsx)("div",{className:"an-row-hint",children:t.hint})]}),a.columns.map(d=>{let r=R.get(`${t.id}\0${d.id}`),l=r?.tone??"na",y=r?.note?p.indexOf(r)+1:0;return(0,e.jsxs)("td",{className:f(d),title:r?.note,children:[(0,e.jsxs)("span",{className:`an-cell an-tone-${l}`,children:[c[l]&&(0,e.jsx)("b",{"aria-hidden":"true",children:c[l]}),(0,e.jsx)("span",{children:r?.text??(l==="na"?"\u2014":a.legend?.[l]??n(C[l]))})]}),y>0&&(0,e.jsx)("sup",{className:"an-note-mark",children:y})]},d.id)})]})]},t.id)})]})]})}),(0,e.jsxs)("div",{className:"an-legend",children:[S.map(t=>(0,e.jsxs)("span",{className:`an-tone-${t}`,children:[c[t]?(0,e.jsx)("b",{children:c[t]}):"\u2014"," ",a.legend?.[t]??n(C[t])]},t)),(0,e.jsx)("span",{children:n("matrix.focusHint")})]}),p.length>0&&(0,e.jsx)("ol",{className:"an-static","aria-label":n("matrix.notes"),children:p.map(t=>(0,e.jsx)("li",{children:n("matrix.note",{column:a.columns.find(o=>o.id===t.column)?.label??"",row:a.rows.find(o=>o.id===t.row)?.label??"",note:t.note??""})},`${t.row}-${t.column}`))})]})}export{E as ComparisonMatrixBlock};
@@ -1 +1 @@
1
- import{a as Z}from"./chunk-YMX2EQEL.js";import{e as rt}from"./chunk-KF47DKNH.js";import{d as lt}from"./chunk-WPCUZTWD.js";import{Ta as at,Wa as Q,c as ut}from"./chunk-LU2JYOE4.js";import{c as J,f as it}from"./chunk-DUIGVKKG.js";var $=J(ut(),1);var t=J(at(),1),O={kept:"tracker.status.kept",discarded:"tracker.status.discarded",failed:"tracker.status.failed",running:"tracker.status.running",stopped:"tracker.status.stopped"},dt=["all","kept","running","discarded","failed","stopped"],X=["#2f6b4f","#3b74b8","#b0473f","#a86b34","#7061b0","#8a918c"],f=i=>Date.parse(i),z=i=>String(i).padStart(2,"0"),j=i=>{let r=new Date(i);return`${z(r.getMonth()+1)}-${z(r.getDate())} ${z(r.getHours())}:${z(r.getMinutes())}`},M=i=>i.toLocaleString(it(),{maximumFractionDigits:Math.abs(i)<10?3:1});function ot(){let i=(0,$.useRef)(null),[r,s]=(0,$.useState)(900);return(0,$.useEffect)(()=>{let h=i.current;if(!h)return;let b=new ResizeObserver(([N])=>s(N.contentRect.width));return b.observe(h),()=>b.disconnect()},[]),[i,r]}function mt({model:i,frontier:r,selected:s,onSelect:h}){let b=Q(Z),[N,x]=ot(),[u,p]=(0,$.useState)(null),H=360,o={l:44,r:16,t:18,b:52},y=28,g=H-o.t-o.b-y,w=i.metric.direction==="higher",B=i.experiments.filter(n=>n.score!==null),E=i.experiments.map(n=>f(n.start)),T=Math.min(...E),S=i.experiments.map(n=>f(n.start)+(n.minutes??0)*6e4),D=Math.max(i.updatedAt?f(i.updatedAt):0,...S,T+36e5),a=[...B.map(n=>n.score),...i.metric.baseline===void 0?[]:[i.metric.baseline]],A=(a.length?Math.max(...a)-Math.min(...a):0)*.1||Math.abs(a[0]??0)*.05||1,L=a.length?Math.min(...a)-A:0,W=a.length?Math.max(...a)+A:1,R=n=>o.l+(n-T)/(D-T)*(x-o.l-o.r),v=n=>o.t+(w?1-(n-L)/(W-L):(n-L)/(W-L))*g,C=o.t+g+y/2+6,G=new Map(i.experiments.map(n=>[n.id,n])),k=new Map((i.groups??[]).map(n=>[n.id,n])),U=new Map((i.runs??[]).map((n,m)=>[n.id,n.color??X[m%X.length]])),F=r.map(n=>G.get(n)),e="";F.forEach((n,m)=>{e+=m===0?`M${R(f(n.start))},${v(n.score)}`:`H${R(f(n.start))}V${v(n.score)}`}),F.length&&(e+=`H${R(D)}`);let l=new Set,c=-1/0;for(let n of F){let m=R(f(n.start));m-c>120&&(l.add(n.id),c=m)}let K=[],tt=(W-L)/5||1,et=Math.pow(10,Math.floor(Math.log10(tt))),Y=[1,2,5,10].map(n=>n*et).find(n=>n>=tt)??10*et;for(let n=Math.ceil(L/Y)*Y;n<=W;n+=Y)K.push(+n.toFixed(6));let nt=[],st=new Date(T);st.setHours(0,0,0,0);for(let n=st.getTime()+864e5;n<D;n+=864e5)nt.push(n);let ct=i.metric.unit??"";return(0,t.jsxs)("div",{className:"an-plot",ref:N,children:[(0,t.jsxs)("svg",{width:x,height:H,role:"img","aria-label":b("tracker.overTime",{metric:i.metric.label}),onMouseLeave:()=>p(null),children:[K.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:o.l,x2:x-o.r,y1:v(n),y2:v(n)}),(0,t.jsx)("text",{x:o.l-8,y:v(n)+4,textAnchor:"end",children:M(n)})]},n)),nt.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:R(n),x2:R(n),y1:o.t,y2:o.t+g+y,stroke:"var(--an-line)"}),(0,t.jsx)("text",{x:R(n)+4,y:H-18,children:j(n).slice(0,5)})]},n)),(0,t.jsx)("rect",{className:"an-lane",x:o.l,y:o.t+g+6,width:Math.max(0,x-o.l-o.r),height:y,rx:6}),(0,t.jsx)("text",{x:o.l+8,y:C+4,children:b("tracker.noScore")}),i.metric.baseline!==void 0&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-baseline",x1:o.l,x2:x-o.r,y1:v(i.metric.baseline),y2:v(i.metric.baseline)}),(0,t.jsx)("text",{className:"an-baseline-label",x:x-o.r-4,y:v(i.metric.baseline)-5,textAnchor:"end",children:b("tracker.baseline",{value:i.metric.baseline})})]}),e&&(0,t.jsx)("path",{className:"an-frontier",d:e}),i.experiments.map(n=>{let m=R(f(n.start)),_={onMouseEnter:()=>p(n),onClick:()=>h(n.id),className:"an-point"};if(n.score===null)return n.status==="failed"?(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("path",{d:`M${m-5},${C-5}L${m+5},${C+5}M${m+5},${C-5}L${m-5},${C+5}`,stroke:"var(--an-bad)",strokeWidth:2.2}),(0,t.jsx)("circle",{cx:m,cy:C,r:9,fill:"transparent"})]},n.id):(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("circle",{className:n.status==="running"?"an-ring":void 0,cx:m,cy:C,r:6,fill:"none",stroke:"var(--an-info)",strokeWidth:2}),(0,t.jsx)("circle",{cx:m,cy:C,r:3,fill:"var(--an-info)"})]},n.id);let I=v(n.score),V=k.get(n.group??"")?.shape==="diamond",q=U.get(n.id)??(n.status==="kept"?"var(--an-good)":n.status==="stopped"?"var(--an-warn)":"var(--an-idle)");return(0,t.jsxs)("g",{..._,children:[s===n.id&&(0,t.jsx)("circle",{cx:m,cy:I,r:13,fill:"none",stroke:"var(--an-text)",strokeWidth:1.5,strokeDasharray:"3 3"}),V?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("rect",{x:m-7,y:I-7,width:14,height:14,rx:3,transform:`rotate(45 ${m} ${I})`,fill:"var(--an-paper)",stroke:q,strokeWidth:3}),n.status==="running"&&(0,t.jsx)("circle",{className:"an-ring",cx:m,cy:I,r:11,fill:"none",stroke:q,strokeWidth:1.5})]}):n.status==="kept"?(0,t.jsx)("circle",{className:"an-point-kept",cx:m,cy:I,r:5.5}):(0,t.jsx)("circle",{className:"an-point-other",cx:m,cy:I,r:4}),(l.has(n.id)||V)&&(0,t.jsx)("text",{className:`an-point-label${l.has(n.id)?" is-frontier":""}`,x:m+10,y:I-8,style:V?{fill:q}:void 0,children:V?`${n.id} \xB7 ${M(n.score)}`:n.name.length>8?`${n.name.slice(0,8)}\u2026`:n.name})]},n.id)}),(0,t.jsx)("text",{x:o.l,y:H-2,children:b("tracker.startTime")})]}),u&&(0,t.jsxs)("div",{className:"an-tip",style:{left:Math.min(R(f(u.start))+14,x-230),top:u.score===null?C-120:Math.max(0,v(u.score)-20)},children:[(0,t.jsxs)("b",{children:[u.id," \xB7 ",u.name]}),(0,t.jsxs)("span",{children:[j(f(u.start)),u.minutes!==void 0&&` \xB7 ${b("tracker.minutes",{count:u.minutes})}`,u.resources!==void 0&&` \xB7 ${u.resources} ${i.resource?.unit??""}`]}),b("tracker.metricValue",{metric:i.metric.label,value:u.score===null?"\u2014":`${M(u.score)}${ct}`})," ","\xB7 ",b(O[u.status]),u.note&&(0,t.jsx)("span",{children:u.note})]})]})}function pt({chart:i,runs:r,colors:s,hoverStep:h,onHover:b}){let[N,x]=ot(),u=140,p={l:40,r:10,t:8,b:20},H=r.filter(a=>a.series[i.key]?.length),o=H.flatMap(a=>a.series[i.key]),y=Math.max(1,...H.flatMap(a=>a.steps));if(!o.length)return null;let g=Math.min(...o),w=Math.max(...o),B=(w-g)*.08||1;g-=B,w+=B;let E=a=>p.l+a/y*(x-p.l-p.r),T=a=>p.t+(1-(a-g)/(w-g))*(u-p.t-p.b),S=a=>Math.abs(w)<5?a.toFixed(2):M(Math.round(a)),D=a=>{if(h===null)return;let d=a.steps.findIndex(A=>A>=h);return d<0?void 0:{step:a.steps[d],value:a.series[i.key][d]}};return(0,t.jsxs)("div",{className:"an-panel an-mini",ref:N,children:[(0,t.jsxs)("p",{className:"an-panel-title",children:[i.label,i.unit&&(0,t.jsxs)("span",{className:"an-sub",children:[" \xB7 ",i.unit]})]}),(0,t.jsxs)("svg",{width:x,height:u,role:"img","aria-label":i.label,onMouseMove:a=>{let d=a.currentTarget.getBoundingClientRect();b(Math.max(0,Math.min(y,(a.clientX-d.left-p.l)/(x-p.l-p.r)*y)))},onMouseLeave:()=>b(null),children:[[g+(w-g)*.1,(g+w)/2,w-(w-g)*.1].map(a=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:p.l,x2:x-p.r,y1:T(a),y2:T(a)}),(0,t.jsx)("text",{x:p.l-6,y:T(a)+3,textAnchor:"end",children:S(a)})]},a)),[0,y/2,y].map((a,d)=>(0,t.jsx)("text",{x:E(a),y:u-5,textAnchor:d===0?"start":d===2?"end":"middle",children:M(a)},a)),H.map(a=>(0,t.jsx)("path",{d:a.series[i.key].map((d,A)=>`${A?"L":"M"}${E(a.steps[A])},${T(d)}`).join(""),fill:"none",stroke:s.get(a.id),strokeWidth:2,strokeLinejoin:"round"},a.id)),h!==null&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:E(h),x2:E(h),y1:p.t,y2:u-p.b,stroke:"var(--an-text)",strokeOpacity:.35}),H.map(a=>{let d=D(a);return d?(0,t.jsx)("circle",{cx:E(d.step),cy:T(d.value),r:3.5,fill:s.get(a.id),stroke:"var(--an-paper)",strokeWidth:1.5},a.id):null})]})]}),(0,t.jsx)("div",{className:"an-mini-values",children:h!==null&&H.map(a=>{let d=D(a);return(0,t.jsxs)("span",{children:[(0,t.jsx)("b",{style:{color:s.get(a.id)},children:a.id})," ",d?S(d.value):"\u2014"]},a.id)})})]})}function P({label:i,value:r,unit:s,detail:h,wide:b,meter:N}){return(0,t.jsxs)("div",{className:`an-stat${b?" is-wide":""}`,children:[(0,t.jsx)("small",{children:i}),(0,t.jsxs)("div",{className:"an-stat-value",children:[r,s&&(0,t.jsx)("span",{className:"an-stat-unit",children:s})]}),h&&(0,t.jsx)("p",{children:h}),N!==void 0&&(0,t.jsx)("div",{className:"an-meter",children:(0,t.jsx)("i",{style:{width:`${Math.min(100,N*100)}%`}})})]})}function yt({data:i}){let r=Q(Z),s=i,[h,b]=(0,$.useState)("all"),[N,x]=(0,$.useState)(null),[u,p]=(0,$.useState)(new Set),[H,o]=(0,$.useState)(null),y=(0,$.useMemo)(()=>rt(s),[s]),g=s.runs??[],w=s.charts??[],B=new Map(g.map((e,l)=>[e.id,e.color??X[l%X.length]])),E=s.metric.direction==="higher",T=(e,l)=>E?e>l:e<l,S={all:s.experiments.length};for(let e of s.experiments)S[e.status]=(S[e.status]??0)+1;let D=s.experiments.filter(e=>h==="all"||e.status===h).sort((e,l)=>f(l.start)-f(e.start)),a=s.experiments.filter(e=>e.score!==null&&e.status!=="failed"),d=s.groups?.length?s.groups:[{id:"",label:r("tracker.best")}],A=d.map(e=>{let l=a.filter(c=>!s.groups?.length||c.group===e.id);return{group:e,best:l.reduce((c,K)=>!c||T(K.score,c.score)?K:c,null)}}),L=y.length?s.experiments.find(e=>e.id===y[y.length-1]):void 0,W=L&&s.metric.baseline!==void 0?(L.score-s.metric.baseline)*(E?1:-1):0,R=s.experiments.reduce((e,l)=>e+(l.minutes??0)/60*(l.resources??0),0),v=s.metric.unit??"",C=(0,$.useMemo)(()=>{let e=new Map;for(let l of s.experiments){if(!l.category)continue;let c=e.get(l.category)??{total:0,kept:0};c.total+=1,l.status==="kept"&&(c.kept+=1),e.set(l.category,c)}return[...e.entries()].sort((l,c)=>c[1].total-l[1].total)},[s.experiments]),G=Math.max(1,...C.map(([,e])=>e.total)),k=s.experiments.find(e=>e.id===N),U=g.filter(e=>!u.has(e.id)),F=e=>p(l=>{let c=new Set(l);return c.has(e)?c.delete(e):c.add(e),c});return(0,t.jsx)("section",{className:"sb-block an-block","aria-label":lt(s.title,r("tracker.title")),children:(0,t.jsxs)("div",{className:"an-tracker",children:[(0,t.jsxs)("div",{className:"an-head",children:[s.title&&(0,t.jsx)("h3",{className:"an-title",children:s.title}),s.subtitle&&(0,t.jsx)("p",{className:"an-sub",children:s.subtitle}),s.updatedAt&&(0,t.jsx)("p",{className:"an-sub an-tools",children:r("tracker.updatedAt",{time:j(f(s.updatedAt))})})]}),(0,t.jsxs)("div",{className:"an-tracker-grid",children:[(0,t.jsxs)("div",{className:"an-panel an-runs",children:[(0,t.jsxs)("div",{className:"an-runs-head",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.runs",{count:s.experiments.length})}),(0,t.jsx)("div",{className:"an-tools",style:{marginLeft:0},role:"group","aria-label":r("tracker.filterByStatus"),children:dt.filter(e=>e==="all"||S[e]).map(e=>(0,t.jsxs)("button",{type:"button",className:"an-chip","aria-pressed":h===e,onClick:()=>b(e),children:[r(e==="all"?"tracker.all":O[e])," ",S[e]??0]},e))})]}),(0,t.jsx)("div",{className:"an-runs-list",children:D.map(e=>{let l=g.find(c=>c.id===e.id);return(0,t.jsxs)("div",{role:"button",tabIndex:0,className:`an-row an-ex-${e.status}${N===e.id?" is-selected":""}`,onClick:()=>x(N===e.id?null:e.id),onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),x(N===e.id?null:e.id))},children:[l?(0,t.jsx)("input",{type:"checkbox","aria-label":r("tracker.showRun",{id:l.id}),checked:!u.has(l.id),onClick:c=>c.stopPropagation(),onChange:()=>F(l.id),style:{margin:0,accentColor:B.get(l.id)}}):(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:4,background:"var(--tone)",justifySelf:"center"}}),(0,t.jsx)("b",{style:l?{color:B.get(l.id)}:void 0,children:e.id}),(0,t.jsxs)("span",{className:"an-row-name",children:[e.name,(0,t.jsxs)("small",{children:[j(f(e.start))," \xB7"," ",(0,t.jsx)("span",{className:"an-status",children:r(O[e.status])})]})]}),(0,t.jsx)("span",{className:"an-score",children:e.score===null?"\u2014":M(e.score)})]},e.id)})})]}),(0,t.jsxs)("div",{className:"an-main",children:[(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsxs)("div",{className:"an-plot-legend",children:[(0,t.jsxs)("b",{children:[r("tracker.allExperiments",{metric:s.metric.label}),v?` (${v})`:""," \xB7"," ",r(E?"tracker.higherIsBetter":"tracker.lowerIsBetter")]}),y.length>0&&(0,t.jsx)("span",{children:r("tracker.frontier")}),(0,t.jsx)("span",{children:r("tracker.legendKept")}),(0,t.jsx)("span",{children:r("tracker.legendOther")}),s.groups?.some(e=>e.shape==="diamond")&&(0,t.jsxs)("span",{children:["\u25C7"," ",s.groups.filter(e=>e.shape==="diamond").map(e=>e.label).join(r("tracker.listSeparator"))]})]}),(0,t.jsx)(mt,{model:s,frontier:y,selected:N,onSelect:e=>x(N===e?null:e)})]}),w.length>0&&g.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"an-small-multiples",children:w.map(e=>(0,t.jsx)(pt,{chart:e,runs:U,colors:B,hoverStep:H,onHover:o},e.key))}),(0,t.jsxs)("div",{className:"an-legend",children:[g.map(e=>(0,t.jsxs)("span",{style:{opacity:u.has(e.id)?.35:1},children:[(0,t.jsx)("b",{style:{color:B.get(e.id)},children:"\u2501"})," ",e.id," \xB7"," ",e.name]},e.id)),(0,t.jsx)("span",{children:r("tracker.runsHint")})]})]})]}),(0,t.jsxs)("div",{className:"an-stats",children:[(0,t.jsxs)("div",{className:"an-stat-grid",children:[(0,t.jsx)(P,{label:r("tracker.total"),value:String(s.experiments.length),detail:d.length>1?d.map(e=>`${e.label} ${s.experiments.filter(l=>l.group===e.id).length}`).join(" \xB7 "):r("tracker.runningCount",{count:S.running??0})}),A.map(({group:e,best:l})=>l?(0,t.jsx)(P,{label:d.length>1?r("tracker.groupBest",{group:e.label}):r("tracker.currentBest"),value:M(l.score),unit:v,detail:`${l.id} \xB7 ${l.name}`},e.id):null),s.metric.baseline!==void 0&&L&&(0,t.jsx)(P,{label:r("tracker.gain"),value:`${W>=0?"+":"\u2212"}${M(Math.abs(W))}`,unit:v==="%"?"pt":v,detail:r("tracker.gainDetail",{best:M(L.score),baseline:s.metric.baseline})}),(0,t.jsx)(P,{label:r("tracker.keepRate"),value:String(Math.round((S.kept??0)/s.experiments.length*100)),unit:"%",detail:r("tracker.keepRateDetail",{kept:S.kept??0,running:S.running??0})}),s.resource&&(0,t.jsx)(P,{label:r("tracker.resourceHours",{unit:s.resource.unit}),value:M(Math.round(R)),detail:s.resource.budget?r("tracker.budget",{value:M(s.resource.budget)}):void 0,meter:s.resource.budget?R/s.resource.budget:void 0}),s.resource?.costPerHour!==void 0&&(0,t.jsx)(P,{wide:!0,label:r("tracker.cost"),value:`${s.resource.currency??"\xA5"}${M(Math.round(R*s.resource.costPerHour))}`,detail:r("tracker.costRate",{rate:`${s.resource.currency??"\xA5"}${s.resource.costPerHour}`,unit:s.resource.unit})})]}),C.length>0&&(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.byCategory")}),C.map(([e,l])=>(0,t.jsxs)("div",{style:{fontSize:11.5,marginBottom:5},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:e}),(0,t.jsxs)("span",{className:"an-sub",children:[l.kept," / ",l.total]})]}),(0,t.jsxs)("div",{className:"an-meter",children:[(0,t.jsx)("i",{className:"is-total",style:{width:`${l.total/G*100}%`}}),(0,t.jsx)("i",{style:{width:`${l.kept/G*100}%`}})]})]},e))]}),k&&(0,t.jsxs)("div",{className:"an-detail-card","aria-live":"polite",children:[(0,t.jsxs)("b",{children:[k.id," \xB7 ",k.name]}),(0,t.jsx)("span",{children:[k.category,s.groups?.find(e=>e.id===k.group)?.label].filter(Boolean).join(" \xB7 ")}),(0,t.jsxs)("span",{children:[j(f(k.start)),k.minutes!==void 0&&` \xB7 ${r("tracker.minutes",{count:k.minutes})}`,k.resources!==void 0&&` \xB7 ${k.resources} ${s.resource?.unit??""}`]}),r("tracker.metricValue",{metric:s.metric.label,value:k.score===null?"\u2014":M(k.score)})," ","\xB7 ",r(O[k.status]),k.note&&(0,t.jsx)("span",{children:k.note})]})]})]}),(0,t.jsxs)("details",{className:"an-static",children:[(0,t.jsx)("summary",{children:r("tracker.readTable",{count:s.experiments.length})}),(0,t.jsxs)("table",{children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"ID"}),(0,t.jsx)("th",{children:r("tracker.column.name")}),(0,t.jsx)("th",{children:r("tracker.column.start")}),(0,t.jsx)("th",{children:r("tracker.column.status")}),(0,t.jsx)("th",{children:s.metric.label}),(0,t.jsx)("th",{children:r("tracker.column.note")})]})}),(0,t.jsx)("tbody",{children:[...s.experiments].sort((e,l)=>f(e.start)-f(l.start)).map(e=>(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:e.id}),(0,t.jsx)("td",{children:e.name}),(0,t.jsx)("td",{children:j(f(e.start))}),(0,t.jsx)("td",{children:r(O[e.status])}),(0,t.jsx)("td",{children:e.score===null?"\u2014":M(e.score)}),(0,t.jsx)("td",{children:e.note??""})]},e.id))})]})]})]})})}export{yt as ExperimentTrackerBlock};
1
+ import{a as Z}from"./chunk-HHKKCN2F.js";import{e as rt}from"./chunk-KF47DKNH.js";import{d as lt}from"./chunk-J7ZODHSI.js";import{c as ut,ib as at,lb as Q}from"./chunk-CMJMBEIC.js";import{c as J,f as it}from"./chunk-DUIGVKKG.js";var $=J(ut(),1);var t=J(at(),1),O={kept:"tracker.status.kept",discarded:"tracker.status.discarded",failed:"tracker.status.failed",running:"tracker.status.running",stopped:"tracker.status.stopped"},dt=["all","kept","running","discarded","failed","stopped"],X=["#2f6b4f","#3b74b8","#b0473f","#a86b34","#7061b0","#8a918c"],f=i=>Date.parse(i),z=i=>String(i).padStart(2,"0"),j=i=>{let r=new Date(i);return`${z(r.getMonth()+1)}-${z(r.getDate())} ${z(r.getHours())}:${z(r.getMinutes())}`},M=i=>i.toLocaleString(it(),{maximumFractionDigits:Math.abs(i)<10?3:1});function ot(){let i=(0,$.useRef)(null),[r,s]=(0,$.useState)(900);return(0,$.useEffect)(()=>{let h=i.current;if(!h)return;let b=new ResizeObserver(([N])=>s(N.contentRect.width));return b.observe(h),()=>b.disconnect()},[]),[i,r]}function mt({model:i,frontier:r,selected:s,onSelect:h}){let b=Q(Z),[N,x]=ot(),[u,p]=(0,$.useState)(null),H=360,o={l:44,r:16,t:18,b:52},y=28,g=H-o.t-o.b-y,w=i.metric.direction==="higher",B=i.experiments.filter(n=>n.score!==null),E=i.experiments.map(n=>f(n.start)),T=Math.min(...E),S=i.experiments.map(n=>f(n.start)+(n.minutes??0)*6e4),D=Math.max(i.updatedAt?f(i.updatedAt):0,...S,T+36e5),a=[...B.map(n=>n.score),...i.metric.baseline===void 0?[]:[i.metric.baseline]],A=(a.length?Math.max(...a)-Math.min(...a):0)*.1||Math.abs(a[0]??0)*.05||1,L=a.length?Math.min(...a)-A:0,W=a.length?Math.max(...a)+A:1,R=n=>o.l+(n-T)/(D-T)*(x-o.l-o.r),v=n=>o.t+(w?1-(n-L)/(W-L):(n-L)/(W-L))*g,C=o.t+g+y/2+6,G=new Map(i.experiments.map(n=>[n.id,n])),k=new Map((i.groups??[]).map(n=>[n.id,n])),U=new Map((i.runs??[]).map((n,m)=>[n.id,n.color??X[m%X.length]])),F=r.map(n=>G.get(n)),e="";F.forEach((n,m)=>{e+=m===0?`M${R(f(n.start))},${v(n.score)}`:`H${R(f(n.start))}V${v(n.score)}`}),F.length&&(e+=`H${R(D)}`);let l=new Set,c=-1/0;for(let n of F){let m=R(f(n.start));m-c>120&&(l.add(n.id),c=m)}let K=[],tt=(W-L)/5||1,et=Math.pow(10,Math.floor(Math.log10(tt))),Y=[1,2,5,10].map(n=>n*et).find(n=>n>=tt)??10*et;for(let n=Math.ceil(L/Y)*Y;n<=W;n+=Y)K.push(+n.toFixed(6));let nt=[],st=new Date(T);st.setHours(0,0,0,0);for(let n=st.getTime()+864e5;n<D;n+=864e5)nt.push(n);let ct=i.metric.unit??"";return(0,t.jsxs)("div",{className:"an-plot",ref:N,children:[(0,t.jsxs)("svg",{width:x,height:H,role:"img","aria-label":b("tracker.overTime",{metric:i.metric.label}),onMouseLeave:()=>p(null),children:[K.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:o.l,x2:x-o.r,y1:v(n),y2:v(n)}),(0,t.jsx)("text",{x:o.l-8,y:v(n)+4,textAnchor:"end",children:M(n)})]},n)),nt.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:R(n),x2:R(n),y1:o.t,y2:o.t+g+y,stroke:"var(--an-line)"}),(0,t.jsx)("text",{x:R(n)+4,y:H-18,children:j(n).slice(0,5)})]},n)),(0,t.jsx)("rect",{className:"an-lane",x:o.l,y:o.t+g+6,width:Math.max(0,x-o.l-o.r),height:y,rx:6}),(0,t.jsx)("text",{x:o.l+8,y:C+4,children:b("tracker.noScore")}),i.metric.baseline!==void 0&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-baseline",x1:o.l,x2:x-o.r,y1:v(i.metric.baseline),y2:v(i.metric.baseline)}),(0,t.jsx)("text",{className:"an-baseline-label",x:x-o.r-4,y:v(i.metric.baseline)-5,textAnchor:"end",children:b("tracker.baseline",{value:i.metric.baseline})})]}),e&&(0,t.jsx)("path",{className:"an-frontier",d:e}),i.experiments.map(n=>{let m=R(f(n.start)),_={onMouseEnter:()=>p(n),onClick:()=>h(n.id),className:"an-point"};if(n.score===null)return n.status==="failed"?(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("path",{d:`M${m-5},${C-5}L${m+5},${C+5}M${m+5},${C-5}L${m-5},${C+5}`,stroke:"var(--an-bad)",strokeWidth:2.2}),(0,t.jsx)("circle",{cx:m,cy:C,r:9,fill:"transparent"})]},n.id):(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("circle",{className:n.status==="running"?"an-ring":void 0,cx:m,cy:C,r:6,fill:"none",stroke:"var(--an-info)",strokeWidth:2}),(0,t.jsx)("circle",{cx:m,cy:C,r:3,fill:"var(--an-info)"})]},n.id);let I=v(n.score),V=k.get(n.group??"")?.shape==="diamond",q=U.get(n.id)??(n.status==="kept"?"var(--an-good)":n.status==="stopped"?"var(--an-warn)":"var(--an-idle)");return(0,t.jsxs)("g",{..._,children:[s===n.id&&(0,t.jsx)("circle",{cx:m,cy:I,r:13,fill:"none",stroke:"var(--an-text)",strokeWidth:1.5,strokeDasharray:"3 3"}),V?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("rect",{x:m-7,y:I-7,width:14,height:14,rx:3,transform:`rotate(45 ${m} ${I})`,fill:"var(--an-paper)",stroke:q,strokeWidth:3}),n.status==="running"&&(0,t.jsx)("circle",{className:"an-ring",cx:m,cy:I,r:11,fill:"none",stroke:q,strokeWidth:1.5})]}):n.status==="kept"?(0,t.jsx)("circle",{className:"an-point-kept",cx:m,cy:I,r:5.5}):(0,t.jsx)("circle",{className:"an-point-other",cx:m,cy:I,r:4}),(l.has(n.id)||V)&&(0,t.jsx)("text",{className:`an-point-label${l.has(n.id)?" is-frontier":""}`,x:m+10,y:I-8,style:V?{fill:q}:void 0,children:V?`${n.id} \xB7 ${M(n.score)}`:n.name.length>8?`${n.name.slice(0,8)}\u2026`:n.name})]},n.id)}),(0,t.jsx)("text",{x:o.l,y:H-2,children:b("tracker.startTime")})]}),u&&(0,t.jsxs)("div",{className:"an-tip",style:{left:Math.min(R(f(u.start))+14,x-230),top:u.score===null?C-120:Math.max(0,v(u.score)-20)},children:[(0,t.jsxs)("b",{children:[u.id," \xB7 ",u.name]}),(0,t.jsxs)("span",{children:[j(f(u.start)),u.minutes!==void 0&&` \xB7 ${b("tracker.minutes",{count:u.minutes})}`,u.resources!==void 0&&` \xB7 ${u.resources} ${i.resource?.unit??""}`]}),b("tracker.metricValue",{metric:i.metric.label,value:u.score===null?"\u2014":`${M(u.score)}${ct}`})," ","\xB7 ",b(O[u.status]),u.note&&(0,t.jsx)("span",{children:u.note})]})]})}function pt({chart:i,runs:r,colors:s,hoverStep:h,onHover:b}){let[N,x]=ot(),u=140,p={l:40,r:10,t:8,b:20},H=r.filter(a=>a.series[i.key]?.length),o=H.flatMap(a=>a.series[i.key]),y=Math.max(1,...H.flatMap(a=>a.steps));if(!o.length)return null;let g=Math.min(...o),w=Math.max(...o),B=(w-g)*.08||1;g-=B,w+=B;let E=a=>p.l+a/y*(x-p.l-p.r),T=a=>p.t+(1-(a-g)/(w-g))*(u-p.t-p.b),S=a=>Math.abs(w)<5?a.toFixed(2):M(Math.round(a)),D=a=>{if(h===null)return;let d=a.steps.findIndex(A=>A>=h);return d<0?void 0:{step:a.steps[d],value:a.series[i.key][d]}};return(0,t.jsxs)("div",{className:"an-panel an-mini",ref:N,children:[(0,t.jsxs)("p",{className:"an-panel-title",children:[i.label,i.unit&&(0,t.jsxs)("span",{className:"an-sub",children:[" \xB7 ",i.unit]})]}),(0,t.jsxs)("svg",{width:x,height:u,role:"img","aria-label":i.label,onMouseMove:a=>{let d=a.currentTarget.getBoundingClientRect();b(Math.max(0,Math.min(y,(a.clientX-d.left-p.l)/(x-p.l-p.r)*y)))},onMouseLeave:()=>b(null),children:[[g+(w-g)*.1,(g+w)/2,w-(w-g)*.1].map(a=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:p.l,x2:x-p.r,y1:T(a),y2:T(a)}),(0,t.jsx)("text",{x:p.l-6,y:T(a)+3,textAnchor:"end",children:S(a)})]},a)),[0,y/2,y].map((a,d)=>(0,t.jsx)("text",{x:E(a),y:u-5,textAnchor:d===0?"start":d===2?"end":"middle",children:M(a)},a)),H.map(a=>(0,t.jsx)("path",{d:a.series[i.key].map((d,A)=>`${A?"L":"M"}${E(a.steps[A])},${T(d)}`).join(""),fill:"none",stroke:s.get(a.id),strokeWidth:2,strokeLinejoin:"round"},a.id)),h!==null&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:E(h),x2:E(h),y1:p.t,y2:u-p.b,stroke:"var(--an-text)",strokeOpacity:.35}),H.map(a=>{let d=D(a);return d?(0,t.jsx)("circle",{cx:E(d.step),cy:T(d.value),r:3.5,fill:s.get(a.id),stroke:"var(--an-paper)",strokeWidth:1.5},a.id):null})]})]}),(0,t.jsx)("div",{className:"an-mini-values",children:h!==null&&H.map(a=>{let d=D(a);return(0,t.jsxs)("span",{children:[(0,t.jsx)("b",{style:{color:s.get(a.id)},children:a.id})," ",d?S(d.value):"\u2014"]},a.id)})})]})}function P({label:i,value:r,unit:s,detail:h,wide:b,meter:N}){return(0,t.jsxs)("div",{className:`an-stat${b?" is-wide":""}`,children:[(0,t.jsx)("small",{children:i}),(0,t.jsxs)("div",{className:"an-stat-value",children:[r,s&&(0,t.jsx)("span",{className:"an-stat-unit",children:s})]}),h&&(0,t.jsx)("p",{children:h}),N!==void 0&&(0,t.jsx)("div",{className:"an-meter",children:(0,t.jsx)("i",{style:{width:`${Math.min(100,N*100)}%`}})})]})}function yt({data:i}){let r=Q(Z),s=i,[h,b]=(0,$.useState)("all"),[N,x]=(0,$.useState)(null),[u,p]=(0,$.useState)(new Set),[H,o]=(0,$.useState)(null),y=(0,$.useMemo)(()=>rt(s),[s]),g=s.runs??[],w=s.charts??[],B=new Map(g.map((e,l)=>[e.id,e.color??X[l%X.length]])),E=s.metric.direction==="higher",T=(e,l)=>E?e>l:e<l,S={all:s.experiments.length};for(let e of s.experiments)S[e.status]=(S[e.status]??0)+1;let D=s.experiments.filter(e=>h==="all"||e.status===h).sort((e,l)=>f(l.start)-f(e.start)),a=s.experiments.filter(e=>e.score!==null&&e.status!=="failed"),d=s.groups?.length?s.groups:[{id:"",label:r("tracker.best")}],A=d.map(e=>{let l=a.filter(c=>!s.groups?.length||c.group===e.id);return{group:e,best:l.reduce((c,K)=>!c||T(K.score,c.score)?K:c,null)}}),L=y.length?s.experiments.find(e=>e.id===y[y.length-1]):void 0,W=L&&s.metric.baseline!==void 0?(L.score-s.metric.baseline)*(E?1:-1):0,R=s.experiments.reduce((e,l)=>e+(l.minutes??0)/60*(l.resources??0),0),v=s.metric.unit??"",C=(0,$.useMemo)(()=>{let e=new Map;for(let l of s.experiments){if(!l.category)continue;let c=e.get(l.category)??{total:0,kept:0};c.total+=1,l.status==="kept"&&(c.kept+=1),e.set(l.category,c)}return[...e.entries()].sort((l,c)=>c[1].total-l[1].total)},[s.experiments]),G=Math.max(1,...C.map(([,e])=>e.total)),k=s.experiments.find(e=>e.id===N),U=g.filter(e=>!u.has(e.id)),F=e=>p(l=>{let c=new Set(l);return c.has(e)?c.delete(e):c.add(e),c});return(0,t.jsx)("section",{className:"sb-block an-block","aria-label":lt(s.title,r("tracker.title")),children:(0,t.jsxs)("div",{className:"an-tracker",children:[(0,t.jsxs)("div",{className:"an-head",children:[s.title&&(0,t.jsx)("h3",{className:"an-title",children:s.title}),s.subtitle&&(0,t.jsx)("p",{className:"an-sub",children:s.subtitle}),s.updatedAt&&(0,t.jsx)("p",{className:"an-sub an-tools",children:r("tracker.updatedAt",{time:j(f(s.updatedAt))})})]}),(0,t.jsxs)("div",{className:"an-tracker-grid",children:[(0,t.jsxs)("div",{className:"an-panel an-runs",children:[(0,t.jsxs)("div",{className:"an-runs-head",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.runs",{count:s.experiments.length})}),(0,t.jsx)("div",{className:"an-tools",style:{marginLeft:0},role:"group","aria-label":r("tracker.filterByStatus"),children:dt.filter(e=>e==="all"||S[e]).map(e=>(0,t.jsxs)("button",{type:"button",className:"an-chip","aria-pressed":h===e,onClick:()=>b(e),children:[r(e==="all"?"tracker.all":O[e])," ",S[e]??0]},e))})]}),(0,t.jsx)("div",{className:"an-runs-list",children:D.map(e=>{let l=g.find(c=>c.id===e.id);return(0,t.jsxs)("div",{role:"button",tabIndex:0,className:`an-row an-ex-${e.status}${N===e.id?" is-selected":""}`,onClick:()=>x(N===e.id?null:e.id),onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),x(N===e.id?null:e.id))},children:[l?(0,t.jsx)("input",{type:"checkbox","aria-label":r("tracker.showRun",{id:l.id}),checked:!u.has(l.id),onClick:c=>c.stopPropagation(),onChange:()=>F(l.id),style:{margin:0,accentColor:B.get(l.id)}}):(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:4,background:"var(--tone)",justifySelf:"center"}}),(0,t.jsx)("b",{style:l?{color:B.get(l.id)}:void 0,children:e.id}),(0,t.jsxs)("span",{className:"an-row-name",children:[e.name,(0,t.jsxs)("small",{children:[j(f(e.start))," \xB7"," ",(0,t.jsx)("span",{className:"an-status",children:r(O[e.status])})]})]}),(0,t.jsx)("span",{className:"an-score",children:e.score===null?"\u2014":M(e.score)})]},e.id)})})]}),(0,t.jsxs)("div",{className:"an-main",children:[(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsxs)("div",{className:"an-plot-legend",children:[(0,t.jsxs)("b",{children:[r("tracker.allExperiments",{metric:s.metric.label}),v?` (${v})`:""," \xB7"," ",r(E?"tracker.higherIsBetter":"tracker.lowerIsBetter")]}),y.length>0&&(0,t.jsx)("span",{children:r("tracker.frontier")}),(0,t.jsx)("span",{children:r("tracker.legendKept")}),(0,t.jsx)("span",{children:r("tracker.legendOther")}),s.groups?.some(e=>e.shape==="diamond")&&(0,t.jsxs)("span",{children:["\u25C7"," ",s.groups.filter(e=>e.shape==="diamond").map(e=>e.label).join(r("tracker.listSeparator"))]})]}),(0,t.jsx)(mt,{model:s,frontier:y,selected:N,onSelect:e=>x(N===e?null:e)})]}),w.length>0&&g.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"an-small-multiples",children:w.map(e=>(0,t.jsx)(pt,{chart:e,runs:U,colors:B,hoverStep:H,onHover:o},e.key))}),(0,t.jsxs)("div",{className:"an-legend",children:[g.map(e=>(0,t.jsxs)("span",{style:{opacity:u.has(e.id)?.35:1},children:[(0,t.jsx)("b",{style:{color:B.get(e.id)},children:"\u2501"})," ",e.id," \xB7"," ",e.name]},e.id)),(0,t.jsx)("span",{children:r("tracker.runsHint")})]})]})]}),(0,t.jsxs)("div",{className:"an-stats",children:[(0,t.jsxs)("div",{className:"an-stat-grid",children:[(0,t.jsx)(P,{label:r("tracker.total"),value:String(s.experiments.length),detail:d.length>1?d.map(e=>`${e.label} ${s.experiments.filter(l=>l.group===e.id).length}`).join(" \xB7 "):r("tracker.runningCount",{count:S.running??0})}),A.map(({group:e,best:l})=>l?(0,t.jsx)(P,{label:d.length>1?r("tracker.groupBest",{group:e.label}):r("tracker.currentBest"),value:M(l.score),unit:v,detail:`${l.id} \xB7 ${l.name}`},e.id):null),s.metric.baseline!==void 0&&L&&(0,t.jsx)(P,{label:r("tracker.gain"),value:`${W>=0?"+":"\u2212"}${M(Math.abs(W))}`,unit:v==="%"?"pt":v,detail:r("tracker.gainDetail",{best:M(L.score),baseline:s.metric.baseline})}),(0,t.jsx)(P,{label:r("tracker.keepRate"),value:String(Math.round((S.kept??0)/s.experiments.length*100)),unit:"%",detail:r("tracker.keepRateDetail",{kept:S.kept??0,running:S.running??0})}),s.resource&&(0,t.jsx)(P,{label:r("tracker.resourceHours",{unit:s.resource.unit}),value:M(Math.round(R)),detail:s.resource.budget?r("tracker.budget",{value:M(s.resource.budget)}):void 0,meter:s.resource.budget?R/s.resource.budget:void 0}),s.resource?.costPerHour!==void 0&&(0,t.jsx)(P,{wide:!0,label:r("tracker.cost"),value:`${s.resource.currency??"\xA5"}${M(Math.round(R*s.resource.costPerHour))}`,detail:r("tracker.costRate",{rate:`${s.resource.currency??"\xA5"}${s.resource.costPerHour}`,unit:s.resource.unit})})]}),C.length>0&&(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.byCategory")}),C.map(([e,l])=>(0,t.jsxs)("div",{style:{fontSize:11.5,marginBottom:5},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:e}),(0,t.jsxs)("span",{className:"an-sub",children:[l.kept," / ",l.total]})]}),(0,t.jsxs)("div",{className:"an-meter",children:[(0,t.jsx)("i",{className:"is-total",style:{width:`${l.total/G*100}%`}}),(0,t.jsx)("i",{style:{width:`${l.kept/G*100}%`}})]})]},e))]}),k&&(0,t.jsxs)("div",{className:"an-detail-card","aria-live":"polite",children:[(0,t.jsxs)("b",{children:[k.id," \xB7 ",k.name]}),(0,t.jsx)("span",{children:[k.category,s.groups?.find(e=>e.id===k.group)?.label].filter(Boolean).join(" \xB7 ")}),(0,t.jsxs)("span",{children:[j(f(k.start)),k.minutes!==void 0&&` \xB7 ${r("tracker.minutes",{count:k.minutes})}`,k.resources!==void 0&&` \xB7 ${k.resources} ${s.resource?.unit??""}`]}),r("tracker.metricValue",{metric:s.metric.label,value:k.score===null?"\u2014":M(k.score)})," ","\xB7 ",r(O[k.status]),k.note&&(0,t.jsx)("span",{children:k.note})]})]})]}),(0,t.jsxs)("details",{className:"an-static",children:[(0,t.jsx)("summary",{children:r("tracker.readTable",{count:s.experiments.length})}),(0,t.jsxs)("table",{children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"ID"}),(0,t.jsx)("th",{children:r("tracker.column.name")}),(0,t.jsx)("th",{children:r("tracker.column.start")}),(0,t.jsx)("th",{children:r("tracker.column.status")}),(0,t.jsx)("th",{children:s.metric.label}),(0,t.jsx)("th",{children:r("tracker.column.note")})]})}),(0,t.jsx)("tbody",{children:[...s.experiments].sort((e,l)=>f(e.start)-f(l.start)).map(e=>(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:e.id}),(0,t.jsx)("td",{children:e.name}),(0,t.jsx)("td",{children:j(f(e.start))}),(0,t.jsx)("td",{children:r(O[e.status])}),(0,t.jsx)("td",{children:e.score===null?"\u2014":M(e.score)}),(0,t.jsx)("td",{children:e.note??""})]},e.id))})]})]})]})})}export{yt as ExperimentTrackerBlock};