@spexcode/spec-dashboard 0.6.8 → 0.7.0-next.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.
Files changed (71) hide show
  1. package/dist/assets/{App-DANZYsFg.js → App-CDnq7CoJ.js} +2 -2
  2. package/{dist-public/assets/EmptyView-CX3NC0Nq.js → dist/assets/EmptyView-9otc0raU.js} +1 -1
  3. package/dist/assets/EvalsPage-CvJFW7Xx.js +2 -0
  4. package/dist/assets/FileView-CiopSqO_.js +2 -0
  5. package/dist/assets/GraphView-CpSd8In8.js +26 -0
  6. package/dist/assets/IssuesPage-B0Lgqyjr.js +1 -0
  7. package/dist/assets/MobileApp-BWgx12mU.js +2 -0
  8. package/dist/assets/Modal-DbaOKtG9.js +1 -0
  9. package/dist/assets/{NodeView-D6JZc3ap.js → NodeView-CVaIUdMO.js} +1 -1
  10. package/dist/assets/ProjectsPage-B8i6SOxZ.js +1 -0
  11. package/dist/assets/ProseActions-CFA-z4t3.js +8 -0
  12. package/dist/assets/Settings-DCI7WK4U.js +1 -0
  13. package/dist/assets/SpecView-Cz828zhT.js +1 -0
  14. package/dist/assets/Thread-BD6H7vPk.js +9 -0
  15. package/dist/assets/WorkspaceSurface-CTZ5UUgv.js +2 -0
  16. package/dist/assets/index-BuOQYAQK.css +1 -0
  17. package/dist/assets/index-C6l-jpX4.js +40 -0
  18. package/dist/assets/index-DqfNBCzh.js +13 -0
  19. package/{dist-public/assets/tabs-BL3Okd06.js → dist/assets/tabs-B7_g8HG7.js} +57 -57
  20. package/dist/index.html +2 -2
  21. package/dist-public/assets/{App-Bz1E7Es7.js → App-5COraOZF.js} +2 -2
  22. package/{dist/assets/EmptyView-xnSRh3XP.js → dist-public/assets/EmptyView-Dil8vYWz.js} +1 -1
  23. package/dist-public/assets/EvalsPage-DnIhSuCK.js +2 -0
  24. package/dist-public/assets/FileView-BubZCad5.js +2 -0
  25. package/dist-public/assets/GraphView-gPGwYpUk.js +26 -0
  26. package/dist-public/assets/IssuesPage-gbqBOftY.js +1 -0
  27. package/dist-public/assets/MobileApp-CAqNJ_Bh.js +2 -0
  28. package/dist-public/assets/Modal-B_Q59vv6.js +1 -0
  29. package/dist-public/assets/{NodeView-cN_xZ1kR.js → NodeView-B3WRY-q0.js} +1 -1
  30. package/dist-public/assets/ProjectsPage-Z0t0yxxh.js +1 -0
  31. package/dist-public/assets/ProseActions-DPypFjCH.js +8 -0
  32. package/dist-public/assets/Settings-d9DTofmL.js +1 -0
  33. package/dist-public/assets/SpecView-CNGt9F1G.js +1 -0
  34. package/dist-public/assets/Thread-DIfN4RS4.js +9 -0
  35. package/dist-public/assets/WorkspaceSurface-BEDKMlRs.js +2 -0
  36. package/dist-public/assets/index-BJDLZCaX.js +13 -0
  37. package/dist-public/assets/index-BuOQYAQK.css +1 -0
  38. package/dist-public/assets/index-r6NCWBwM.js +40 -0
  39. package/{dist/assets/tabs-BxFTq-sB.js → dist-public/assets/tabs-BSpGhf1t.js} +57 -57
  40. package/dist-public/index.html +2 -2
  41. package/package.json +4 -3
  42. package/dist/assets/EvalsPage-DDxIUAuR.js +0 -2
  43. package/dist/assets/FileView-DZaiEPRK.js +0 -2
  44. package/dist/assets/GraphView-DHEhg_eI.js +0 -26
  45. package/dist/assets/IssuesPage-B5qjvpP1.js +0 -1
  46. package/dist/assets/MobileApp-fvc4gfCx.js +0 -2
  47. package/dist/assets/PageScroll-DE6nL5p-.js +0 -1
  48. package/dist/assets/ProjectsPage-I7XFn8kG.js +0 -1
  49. package/dist/assets/ProseActions-LG4ve4AO.js +0 -7
  50. package/dist/assets/Settings-D7NeDdd1.js +0 -1
  51. package/dist/assets/SpecView-mkyrBxLO.js +0 -1
  52. package/dist/assets/Thread-Cx5fJkFO.js +0 -9
  53. package/dist/assets/WorkspaceSurface-DgbzdTEl.js +0 -2
  54. package/dist/assets/index-B-qrQ2QS.js +0 -40
  55. package/dist/assets/index-RoVUefLX.js +0 -13
  56. package/dist/assets/index-nweIph9V.css +0 -1
  57. package/dist-public/assets/EvalsPage-BBzomD1v.js +0 -2
  58. package/dist-public/assets/FileView-Cf5bY14h.js +0 -2
  59. package/dist-public/assets/GraphView-5dgjv4t6.js +0 -26
  60. package/dist-public/assets/IssuesPage-B_knZkH6.js +0 -1
  61. package/dist-public/assets/MobileApp-BpnF0xSz.js +0 -2
  62. package/dist-public/assets/PageScroll-CEYT-x2I.js +0 -1
  63. package/dist-public/assets/ProjectsPage-CWaOO-Y7.js +0 -1
  64. package/dist-public/assets/ProseActions-rr5Mm1WB.js +0 -7
  65. package/dist-public/assets/Settings-louVIHfW.js +0 -1
  66. package/dist-public/assets/SpecView-qZMzQH75.js +0 -1
  67. package/dist-public/assets/Thread-Ca_r1oDT.js +0 -9
  68. package/dist-public/assets/WorkspaceSurface-bsUptX-4.js +0 -2
  69. package/dist-public/assets/index-3mcnUCQ1.js +0 -40
  70. package/dist-public/assets/index-BmOx7kVX.js +0 -13
  71. package/dist-public/assets/index-nweIph9V.css +0 -1
@@ -20,8 +20,8 @@
20
20
  } catch (e) { /* localStorage unavailable — the bare :root default (Minimal) stands */ }
21
21
  })()
22
22
  </script>
23
- <script type="module" crossorigin src="./assets/index-3mcnUCQ1.js"></script>
24
- <link rel="stylesheet" crossorigin href="./assets/index-nweIph9V.css">
23
+ <script type="module" crossorigin src="./assets/index-r6NCWBwM.js"></script>
24
+ <link rel="stylesheet" crossorigin href="./assets/index-BuOQYAQK.css">
25
25
  </head>
26
26
  <body>
27
27
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spexcode/spec-dashboard",
3
- "version": "0.6.8",
3
+ "version": "0.7.0-next.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dist/index.html",
@@ -29,8 +29,9 @@
29
29
  "@codemirror/state": "^6.7.1",
30
30
  "@codemirror/view": "^6.43.9",
31
31
  "@lezer/highlight": "^1.2.1",
32
- "@spexcode/spec-cli": "0.6.8",
33
- "@spexcode/spec-core": "0.6.8",
32
+ "@spexcode/spec-cli": "0.7.0-next.0",
33
+ "@spexcode/spec-core": "0.7.0-next.0",
34
+ "@spexcode/transcript": "0.7.0-next.0",
34
35
  "@xterm/addon-fit": "^0.11.0",
35
36
  "@xterm/xterm": "6.0.0",
36
37
  "@xyflow/react": "^12.3.5",
@@ -1,2 +0,0 @@
1
- import{u as H,j as n,I as ne,r as c,a8 as Fs,m as ye,a9 as Cs,a as we,aa as Ts,ab as As,N as Ps,i as Ks,b as Os,k as Is}from"./index-B-qrQ2QS.js";import{E as Re,k as ns,r as Bs,e as zs,a as _s,p as Us,b as Vs,O as Hs,R as Qs,m as ke,c as Ys}from"./Thread-Cx5fJkFO.js";import{O as ie,Q as J,S as qs,d as Xs,l as Gs,r as ts,T as Js,U as Zs}from"./App-DANZYsFg.js";import{aA as Fe,Q as V,g as ce,T as I,aB as Ds,aC as Ws,aD as as,J as rs,aE as Ce,aF as ee,aG as G,aH as Te,aI as en,aJ as ls,aK as sn,aL as nn,O as tn,aj as Ae,aM as an,M as rn,R as hs}from"./tabs-BxFTq-sB.js";import"./PageScroll-DE6nL5p-.js";const os={video:"vid",image:"img",transcript:"txt",data:"data"},ln=["is","state","verdict","freshness","evidence","node","filer","session","scope"],fs=s=>`eval:${s.node}·${s.scenario}`;function on({e:s}){const a=H(),l=s.humanOk&&a("evalsFeed.okdTip",{by:s.humanOk.by,at:new Date(s.humanOk.ts).toLocaleString()});return n.jsx(Fe,{state:n.jsx(I,{kind:"eval",state:s.state}),title:s.scenario,meta:n.jsxs(n.Fragment,{children:[n.jsx("a",{className:"ef-node",href:V(ce(s.node)),style:{color:`hsl(${s.hue??210} 60% 70%)`},"data-tip":s.node,children:s.node}),s.by&&n.jsx("span",{"data-tip":s.by,children:a("evalsFeed.filedBy",{by:Bs(s.by)})}),n.jsx("span",{children:a("evalsFeed.filedAt",{at:cn(s.ts)})})]}),aside:n.jsxs(n.Fragment,{children:[s.inSession&&n.jsx("span",{className:"rl-tag in-session",children:a("evalsFeed.sessionTag")}),ns(s).some(i=>os[i])&&n.jsx("span",{className:"rl-tag",children:ns(s).map(i=>os[i]).filter(Boolean).join("·")}),s.humanOk&&n.jsx("span",{role:"img",className:"ef-okd","data-tip":l,"aria-label":l,children:n.jsx(ne,{name:"check",size:11})})]})})}const cn=s=>{const a=Math.max(0,(Date.now()-new Date(s).getTime())/1e3);return a<3600?`${Math.max(1,Math.floor(a/60))}m`:a<86400?`${Math.floor(a/3600)}h`:`${Math.floor(a/86400)}d`},se=(s,a,l,i=p=>p)=>{var p,f;return(((f=(p=s==null?void 0:s.facets)==null?void 0:p[a])==null?void 0:f.options)??[]).map(x=>({value:x.value,label:x.value===""?l:i(x.value)}))};function un({pageData:s,loading:a=!1,sessions:l=[],queryText:i="",onQueryText:p,hrefFor:f,leading:x=null,error:m=null,empty:M=null,pagination:$=null}){var Q,Z,U,L;const u=H(),d=String(i??"").trim()||ie,h=(r,B)=>p(qs(d,r,B)),C=Array.isArray(s==null?void 0:s.items)?s.items:[],P=((Q=s==null?void 0:s.counts)==null?void 0:Q.fail)||{},N=((Z=s==null?void 0:s.counts)==null?void 0:Z.pass)||{},S=((U=s==null?void 0:s.counts)==null?void 0:U.unmeasured)||0,k=((L=s==null?void 0:s.counts)==null?void 0:L.deferred)||0,R=r=>r>0?{text:`+${r} ${u("reviewList.freshness.stale")}`,compact:`+${r}`}:null,j=J(d,"verdict"),_=C.flatMap(r=>r.filterKind===Re.BLIND?[{key:`blind:${r.node}·${r.scenario}`,cls:"se-blind",content:n.jsx(Fe,{state:n.jsx(I,{kind:"eval",state:"missing"}),title:r.scenario,meta:n.jsxs(n.Fragment,{children:[n.jsx("a",{className:"ef-node",href:V(ce(r.node)),style:{color:`hsl(${r.hue??210} 60% 70%)`},"data-tip":r.node,children:r.node}),n.jsx("span",{children:u("sessionEval.unmeasured")})]})})}]:r.filterKind===Re.RESULT?[{key:fs(r),label:r.scenario,href:f(r),content:n.jsx(on,{e:r})}]:r.filterKind===Re.DEFERRED?[{key:`deferred:${r.node}·${r.scenario}`,label:r.scenario,content:n.jsx(Fe,{state:n.jsx(I,{kind:"eval",state:"empty",title:u("reviewList.verdict.deferred")}),title:r.scenario,meta:n.jsxs(n.Fragment,{children:[n.jsx("a",{className:"ef-node",href:V(ce(r.node)),style:{color:`hsl(${r.hue??210} 60% 70%)`},"data-tip":r.node,children:r.node}),n.jsx("span",{children:u("evalsFeed.freshnessDeferred")})]})})}]:[]),v={label:u("reviewList.facetReview"),value:J(d,"state"),options:se(s,"review",u("reviewList.all"),r=>u(r==="reviewed"?"reviewList.reviewed":"reviewList.needsReview"))},F={label:u("reviewList.facetFreshness"),value:J(d,"freshness"),options:se(s,"freshness",u("reviewList.all"),r=>u(`reviewList.freshness.${r}`))},K={label:u("reviewList.facetKind"),value:J(d,"evidence")||"all",options:se(s,"kind",u("evalsFeed.kind.all"),r=>u(`evalsFeed.kind.${r}`))},O={label:u("reviewList.facetSession"),value:J(d,"session"),options:se(s,"session",u("reviewList.all"),r=>u(r==="present"?"reviewList.sessionPresent":"reviewList.sessionMissing"))},te=J(d,"evidence");return n.jsx(Ds,{leading:x,error:m,loading:a,title:u("evalsFeed.title"),search:{value:String(i??"").trim()?i:ie,onSubmit:p,placeholder:u("reviewList.searchEvals"),label:u("reviewList.search"),keys:ln,suggest:{node:se(s,"node",u("reviewList.all")).filter(r=>r.value),filer:se(s,"filer",u("reviewList.all")).filter(r=>r.value).map(({value:r})=>{const B=l.find(ae=>ae.id===r);return{value:r,label:B?rs(B):null}}),scope:l.map(r=>({value:r.id,label:rs(r)}))}},sections:[{key:"fail",label:n.jsx(I,{kind:"eval",state:"fail",title:u("reviewList.verdict.fail"),showLabel:!0}),count:P.fresh||0,countSuffix:R(P.stale||0),active:j==="fail",onSelect:()=>h("verdict",j==="fail"?"":"fail")},{key:"pass",label:n.jsx(I,{kind:"eval",state:"pass",title:u("reviewList.verdict.pass"),showLabel:!0}),count:N.fresh||0,countSuffix:R(N.stale||0),active:j==="pass",onSelect:()=>h("verdict",j==="pass"?"":"pass")},{key:"unmeasured",label:n.jsx(I,{kind:"eval",state:"missing",title:u("reviewList.verdict.unmeasured"),showLabel:!0}),count:S,active:j==="unmeasured",onSelect:()=>h("verdict",j==="unmeasured"?"":"unmeasured")},{key:"deferred",label:n.jsx(I,{kind:"eval",state:"empty",title:u("reviewList.verdict.deferred"),showLabel:!0}),count:k,active:j==="deferred",onSelect:()=>h("verdict",j==="deferred"?"":"deferred")}],sectionMode:"filters",facets:n.jsxs(n.Fragment,{children:[n.jsx(as,{label:F.label,value:F.value,options:F.options,clearLabel:u("reviewList.all"),onChange:r=>h("freshness",r)}),n.jsx(as,{label:K.label,value:K.value,options:K.options,onChange:r=>h("evidence",r==="all"?"":r)})]}),secondaryFilters:n.jsx(Ws,{label:u("reviewList.filters"),clearLabel:u("reviewList.all"),groups:[{label:v.label,value:v.value,active:!!v.value,options:v.options,onChange:r=>h("state",r)},{label:O.label,value:O.value,active:!!O.value,options:O.options,onChange:r=>h("session",r)},{label:F.label,value:F.value,active:!!F.value,options:F.options,onChange:r=>h("freshness",r),mobileOnly:!0},{label:K.label,value:K.value,active:!!te,options:K.options,clearLabel:null,onChange:r=>h("evidence",r==="all"?"":r),mobileOnly:!0}]}),rows:_,pagination:$,empty:M||{hasData:((s==null?void 0:s.sourceTotal)??0)>0,dataset:u("evalsFeed.datasetEmpty"),filtered:u("evalsFeed.noMatches")}})}const dn=[{name:"ok",color:"green",when:s=>!s.okd&&s.isLatest,descKey:"annotator.cmd.okDesc"}];function hn(s,a){return dn.filter(l=>l.when(s)).map(l=>({...l,run:a[l.name]}))}function fn(s,a){return(s||"").replace(/\{(\w+)\}/g,(l,i)=>a[i]!=null?String(a[i]):l)}const is=(s,a)=>{let l=null;for(const i of s)if(i.at<=a)l=i;else break;return l},vn=s=>{if(!s||!Array.isArray(s.events))return null;const a=s.v===1?"time":typeof s.axis=="string"?s.axis:"time",l=s.v===1?i=>i.tMs:i=>i.at;return{axis:a,events:s.events.map(i=>({at:l(i),step:i.step,...i.node?{node:i.node}:{}}))}},mn=(s,a,l)=>s==="time"?ke(a):s==="frame"?`#${a}`:s==="line"?`L${a}`:s==="index"?l?`${a}/${l}`:`${a}`:String(a);function cs({events:s,axis:a,extent:l,activeStepIdx:i,onSeek:p}){return n.jsx("div",{className:"an-ruler",children:s.map((f,x)=>n.jsxs("button",{className:`an-step ${i===x?"on":""}`,onClick:()=>p(f.at),"data-tip":f.node?`→ ${f.node}`:void 0,children:[mn(a,f.at,l)," ",f.step]},x))})}const pe=8;function xn({hidden:s,total:a,histIdx:l,onPick:i}){const p=H(),f=sn(),x=p("annotator.abMore",{n:s.length});return n.jsxs("div",{className:"an-ab-more",ref:f.ref,children:[n.jsx(we,{icon:"ellipsis",size:14,className:"an-ab-morebtn",label:x,"aria-haspopup":"menu","aria-expanded":f.open,onClick:m=>f.toggle(m.currentTarget),onKeyDown:f.onTriggerKeyDown}),f.open&&n.jsx("div",{className:"rl-menu an-ab-menu",role:"menu","aria-label":x,ref:f.menuRef,onKeyDown:f.onMenuKeyDown,children:s.map(m=>{const M=Ce(m);return n.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":m.idx===l,tabIndex:-1,className:"rl-menu-item an-ab-menuitem",onFocus:f.onItemFocus,onClick:()=>{f.close(!0),i(m.idx)},children:[n.jsx(I,{kind:"eval",state:M,size:13}),n.jsxs("span",{className:"an-ab-menupos",children:[a-m.idx,"/",a]}),n.jsx("span",{className:"an-ab-menudate",children:new Date(m.ts).toLocaleString()})]},`${m.ts}-${m.idx}`)})})]})}function pn({entry:s,history:a,sourceKey:l="project",specs:i=[],sessions:p=[],onWrite:f,onOpenSession:x,listHref:m=null,backHref:M=null,backLabel:$=null,queue:u={prev:[],next:[]}}){var Je,Ze,De,We,es,ss;const d=H(),h=c.useRef(null),C=c.useRef(null),P=c.useRef(null),N=c.useRef(null),S=c.useRef(0),[k,R]=c.useState([]),[j,_]=c.useState("time"),[v,F]=c.useState(null),[K,O]=c.useState(""),[te,Q]=c.useState(!1),[Z,U]=c.useState(null),L=c.useRef(null),r=c.useRef(null),B=c.useRef(null),ae=c.useRef(0),[vs,Pe]=c.useState(0),[ge,Ke]=c.useState(-1),[Oe,Ie]=c.useState(null),[ue,je]=c.useState(!1),[Be,Le]=c.useState(!1),[Me,Se]=c.useState(null),[de,$e]=c.useState(null),[T,ze]=c.useState(null),[A,re]=c.useState(0),b=T&&T[A]||s,ms=`${A}:${b.ts||b.codeSha||b.blob||"reading"}`,xs=`${l}·${s.node}·${s.scenario}·${ms}`,[ps,bs]=c.useState([]);c.useEffect(()=>{let e=!0;return Fs().then(t=>{e&&Array.isArray(t)&&bs(t)}).catch(()=>{}),()=>{e=!1}},[]),c.useEffect(()=>{F(null),O(""),R([]),U(null),re(0),ze(null),ze(Array.isArray(a)?a:[s])},[s.node,s.scenario,s.ts,s.blob,(Je=s.humanOk)==null?void 0:Je.ts,a]),c.useEffect(()=>{F(null),U(null)},[A]);const le=zs(b),Y=le.find(e=>e.kind==="video"&&e.state==="present"),he=le.filter(e=>e.kind==="image"),ws=le.filter(e=>e.kind!=="video"&&e.kind!=="image"),D=!!Y,fe=s.thread??null,Ee=c.useMemo(()=>((fe==null?void 0:fe.replies)??[]).filter(e=>e.rid!==void 0),[fe]),_e=T&&((Ze=T[0])==null?void 0:Ze.by)||s.by||null,z=c.useMemo(()=>Ee.map((e,t)=>{const o=_s(Us(e.body),k);return o&&o.seekable?{i:t,tMs:o.tMs,step:o.step,label:o.label}:null}).filter(Boolean).sort((e,t)=>e.tMs-t.tMs),[Ee,k]),Ue=c.useRef(k);Ue.current=k;const Ve=c.useRef(z);Ve.current=z;const ve=c.useCallback(()=>{const e=ae.current,t=Ue.current;let o=-1;for(let g=0;g<t.length&&t[g].at<=e;g++)o=g;Ke(g=>g===o?g:o);let w=null;for(const g of Ve.current)if(g.tMs<=e)w=g.i;else break;Ie(g=>g===w?g:w)},[]);c.useEffect(()=>{ve()},[z,k,ve]),c.useEffect(()=>{ae.current=0,L.current&&(L.current.style.width="0%"),r.current&&(r.current.style.left="0%"),B.current&&(B.current.textContent=""),Ke(-1),Ie(null),Pe(0),je(!1),Le(!1),Se(null),$e(null)},[s.blob,s.scenario,s.node]),c.useEffect(()=>{if(R([]),_("time"),!b.timelineBlob)return;let e=!0;return fetch(ye(`/api/evidence/${b.timelineBlob}`)).then(t=>t.ok?t.json():null).then(t=>{const o=e&&vn(t);o&&(R(o.events),_(o.axis))}).catch(()=>{}),()=>{e=!1}},[b.timelineBlob]),c.useEffect(()=>{const e=h.current;if(!e)return;const t=()=>{const y=Math.round((e.currentTime||0)*1e3),E=Math.round((e.duration||0)*1e3);ae.current=y;const X=E?y/E*100:0;L.current&&(L.current.style.width=`${X}%`),r.current&&(r.current.style.left=`${X}%`),B.current&&(B.current.textContent=`${ke(y)} / ${ke(E)}`),ve()},o=()=>{Pe(e.duration||0),t()},w=()=>je(!0),g=()=>je(!1);return e.addEventListener("timeupdate",t),e.addEventListener("seeked",t),e.addEventListener("loadedmetadata",o),e.addEventListener("durationchange",o),e.addEventListener("play",w),e.addEventListener("pause",g),o(),()=>{e.removeEventListener("timeupdate",t),e.removeEventListener("seeked",t),e.removeEventListener("loadedmetadata",o),e.removeEventListener("durationchange",o),e.removeEventListener("play",w),e.removeEventListener("pause",g)}},[Y==null?void 0:Y.hash,s.node,s.scenario,A,ve]);const q=Math.round(vs*1e3),me=k[ge]||null,He=j==="time"?q:j==="frame"?he.length:j==="index"?k.length:0,W=c.useCallback(e=>{const t=h.current;t&&(t.currentTime=e/1e3)},[]),Ne=c.useCallback(()=>{const e=h.current;e&&(e.paused?e.play():e.pause())},[]),Qe=(e,t)=>{$e(e),t!=null&&W(t)},xe=c.useCallback(async e=>{const t=h.current;if(!(t!=null&&t.videoWidth))return null;Q(!0),O(d("annotator.capturing"));try{t.seeking&&await new Promise(E=>t.addEventListener("seeked",E,{once:!0}));const o=document.createElement("canvas");o.width=t.videoWidth,o.height=t.videoHeight;const w=o.getContext("2d");w.drawImage(t,0,0,o.width,o.height),e&&(w.strokeStyle="#ff9a3c",w.lineWidth=Math.max(2,o.width/300),w.strokeRect(e.x/100*o.width,e.y/100*o.height,e.w/100*o.width,e.h/100*o.height));const g=await new Promise(E=>o.toBlob(E,"image/png")),{hash:y}=await Cs(g);if(!y)throw new Error("no hash");return O(""),y}catch{return O(d("annotator.failed")),null}finally{Q(!1)}},[d]),ks=c.useCallback(async()=>{var o;const e=h.current;if(!e)return null;e.pause();const t=Math.round((e.currentTime??0)*1e3);return{tMs:t,step:((o=is(k,t))==null?void 0:o.step)??null,frame:await xe(null)}},[k,xe]),Ye=c.useCallback(async e=>{const t=h.current;if(!t)return;t.pause();const o=Math.round((t.currentTime||0)*1e3),w=is(k,o),g=await xe(e),y=[Vs(o,w==null?void 0:w.step)];g&&y.push(`![frame](/api/evidence/${g})`),w!=null&&w.node&&w.node!==s.node&&y.push(`re: [[${w.node}]]`),y.push(""),U({seq:++S.current,body:y.join(`
2
- `)})},[k,s.node,xe]),qe=c.useCallback(e=>{var w;if(!z.length)return;let t=z.findIndex(g=>g.i===de);if(t<0){const g=Math.round((((w=h.current)==null?void 0:w.currentTime)||0)*1e3);t=z.reduce((y,E,X)=>E.tMs<=g?X:y,-1)}t=Math.min(z.length-1,Math.max(0,t+e));const o=z[t];$e(o.i),W(o.tMs)},[z,de,W]);Xs(e=>{if(!D||e.metaKey||e.ctrlKey||e.altKey)return!1;const t=h.current;return t?e.key===" "?(e.preventDefault(),Ne(),!0):e.key==="ArrowRight"?(e.preventDefault(),t.currentTime=Math.min(t.duration||t.currentTime,t.currentTime+(e.shiftKey?1:5)),!0):e.key==="ArrowLeft"?(e.preventDefault(),t.currentTime=Math.max(0,t.currentTime-(e.shiftKey?1:5)),!0):e.key===","?(e.preventDefault(),t.currentTime=Math.max(0,t.currentTime-1/30),!0):e.key==="."?(e.preventDefault(),t.duration&&(t.currentTime=Math.min(t.duration,t.currentTime+1/30)),!0):e.key==="ArrowDown"?(e.preventDefault(),qe(1),!0):e.key==="ArrowUp"?(e.preventDefault(),qe(-1),!0):e.key==="a"||e.key==="A"?(e.preventDefault(),Ye(null),!0):!1:!1});const Xe=e=>{var w;const t=(w=P.current)==null?void 0:w.getBoundingClientRect(),o=h.current;!t||!t.width||!o||!o.duration||(o.currentTime=Math.min(1,Math.max(0,(e-t.left)/t.width))*o.duration)},ys=e=>{e.preventDefault(),Le(!0),Xe(e.clientX)},gs=e=>{var o;const t=(o=P.current)==null?void 0:o.getBoundingClientRect();t!=null&&t.width&&Se(Math.min(100,Math.max(0,(e.clientX-t.left)/t.width*100)))};c.useEffect(()=>{if(!Be)return;const e=o=>Xe(o.clientX),t=()=>Le(!1);return window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t)}},[Be]);const Ge=e=>{const t=C.current.getBoundingClientRect();return{x:(e.clientX-t.left)/t.width*100,y:(e.clientY-t.top)/t.height*100}},js=e=>{if(e.button!==0||te)return;const t=Ge(e);F({x0:t.x,y0:t.y,x:t.x,y:t.y})},Ls=e=>{var o,w;if(!v)return;const t=Ge(e);!((o=h.current)!=null&&o.paused)&&(Math.abs(t.x-v.x0)>1||Math.abs(t.y-v.y0)>1)&&((w=h.current)==null||w.pause()),F({...v,x:t.x,y:t.y})},Ms=()=>{if(!v)return;const e={x:Math.min(v.x0,v.x),y:Math.min(v.y0,v.y),w:Math.abs(v.x-v.x0),h:Math.abs(v.y-v.y0)};if(F(null),e.w<1&&e.h<1){Ne();return}Ye(e)},oe=v&&{x:Math.min(v.x0,v.x),y:Math.min(v.y0,v.y),w:Math.abs(v.x-v.x0),h:Math.abs(v.y-v.y0)},Ss=async()=>{const e=await As(s.node,s.scenario).catch(t=>({error:String(t)}));f==null||f((e==null?void 0:e.error)||"")},$s=[...hn({okd:!!b.humanOk,isLatest:!T||A===0},{ok:Ss}).map(e=>({name:e.name,description:d(e.descKey),ui:!0,color:e.color,run:e.run})),...ps.map(e=>({name:e.name,description:e.desc||e.title,source:"review",prefill:()=>fn(e.body,{node:s.node,scenario:s.scenario,expected:b.expected||""})}))],Es=n.jsxs(n.Fragment,{children:[n.jsx(I,{kind:"eval",state:Ce(b),showLabel:!0,className:"an-verdict-badge",size:16}),b.humanOk&&n.jsxs("span",{className:"an-okd","data-tip":d("annotator.okBy",{by:b.humanOk.by,at:new Date(b.humanOk.ts).toLocaleString()}),children:[n.jsx(ne,{name:"circle-check",size:14})," ",d("annotator.okd")]}),T&&T.length>1&&(()=>{const e=T.length,t=Math.min(pe,e),o=A<pe?Array.from({length:t},(y,E)=>t-1-E):[A,...Array.from({length:pe-1},(y,E)=>pe-2-E)],w=new Set(o),g=T.map((y,E)=>({...y,idx:E})).filter(y=>!w.has(y.idx));return n.jsxs("div",{className:"an-ab",children:[n.jsx(we,{icon:"chevron-left",size:13,className:"an-ab-nav",disabled:A>=T.length-1,onClick:()=>re(y=>Math.min(T.length-1,y+1)),label:d("annotator.abOlder")}),g.length>0&&n.jsx(xn,{hidden:g,total:e,histIdx:A,onPick:re}),n.jsx("div",{className:"an-ab-track",children:o.map(y=>{const E=T[y],X=Ce(E);return n.jsx("button",{type:"button",className:`an-ab-pip ${y===A?"on":""}`,"aria-current":y===A?"true":void 0,onClick:()=>re(y),"aria-label":`${e-y}/${e} · ${d(`score.${X}`)} · ${new Date(E.ts).toLocaleString()}`,children:n.jsx(I,{kind:"eval",state:X,size:13})},`${E.ts}-${y}`)})}),n.jsx(we,{icon:"chevron-right",size:13,className:"an-ab-nav",disabled:A<=0,onClick:()=>re(y=>Math.max(0,y-1)),label:d("annotator.abNewer")}),n.jsx("span",{className:"an-ab-pos",children:A===0?d("annotator.abLatest"):d("annotator.abPos",{i:T.length-A,n:T.length})})]})})()]}),Ns=n.jsxs(n.Fragment,{children:[n.jsxs(ee,{label:d("detail.sideReading"),children:[b.evaluator&&n.jsx(G,{text:b.evaluator}),n.jsx(G,{text:new Date(b.ts).toLocaleString()})]}),n.jsx(ee,{label:d("detail.sideNode"),children:n.jsx(G,{text:s.node,mono:!0,tip:d("session.issuesFocusNode"),href:V(ce(s.node))})}),_e&&n.jsx(ee,{label:d("detail.sideFiler"),children:n.jsx(Hs,{originator:_e,sessions:p,kind:"eval",onOpenSession:x})}),b.humanOk&&n.jsxs(ee,{label:d("detail.sideOk"),children:[n.jsx(G,{text:`☑ ${b.humanOk.by}`}),n.jsx(G,{text:new Date(b.humanOk.ts).toLocaleString(),dim:!0})]}),!b.fresh&&(((De=b.staleAxes)==null?void 0:De.length)??0)>0&&n.jsxs(ee,{label:d("nodeView.eval.staleLabel"),children:[n.jsx(G,{text:b.staleAxes.join(" · "),tip:d("nodeView.eval.staleReadoutTitle")}),(((We=b.codeDrift)==null?void 0:We.length)??0)>0&&n.jsx(G,{text:b.codeDrift.map(e=>`${e.file.split("/").pop()} +${e.behind}`).join(", "),dim:!0})]}),(u.prev.length>0||u.next.length>0)&&n.jsx(ee,{label:d("detail.sideQueue"),children:[["prev",d("detail.queuePrev")],["next",d("detail.queueNext")]].map(([e,t])=>u[e].length>0&&n.jsxs("div",{className:"ds-queue-group",children:[n.jsx("span",{className:"ds-queue-group-label",children:t}),u[e].map(o=>n.jsxs("a",{className:"ds-queue-row",href:o.href,"data-tip":`${o.node} · ${o.scenario}`,children:[n.jsx(I,{kind:"eval",state:o.state,size:13}),n.jsx("span",{className:"ds-queue-scenario",children:o.scenario}),n.jsx("span",{className:"ds-queue-node",children:o.node})]},o.key))]},e))})]}),Rs=n.jsx(Qs,{onSend:(e,t)=>Ts({node:s.node,scenario:s.scenario,body:e,codeSha:b.codeSha,evidence:t}),specs:i,sessions:p,focusId:s.node,onDone:f,anchorNow:D?ks:null,draft:Z,commands:$s},xs);return n.jsxs(Te,{title:s.scenario,titleMeta:n.jsx("a",{className:"an-node",href:V(ce(s.node)),children:s.node}),status:Es,side:Ns,composer:Rs,listHref:m,backHref:M,backLabel:$,children:[b.expected&&n.jsxs("div",{className:"an-expected",children:[n.jsx("b",{children:d("nodeView.eval.expected")})," ",b.expected]}),le.length>0&&((es=b.verdict)==null?void 0:es.note)&&n.jsxs("div",{className:"an-expected an-prior-note",children:[n.jsx("b",{children:d("nodeView.eval.noteLabel")})," ",b.verdict.note]}),Y&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"an-player",ref:N,children:[n.jsxs("div",{className:`an-stage ${ue?"playing":"paused"}`,ref:C,onMouseDown:js,onMouseMove:Ls,onMouseUp:Ms,children:[n.jsx("video",{className:"an-video",ref:h,src:ye(`/api/evidence/${Y.hash}`),preload:"metadata",playsInline:!0}),oe&&n.jsx("div",{className:"an-rect live",style:{left:`${oe.x}%`,top:`${oe.y}%`,width:`${oe.w}%`,height:`${oe.h}%`}}),!ue&&!v&&n.jsx("div",{className:"an-bigplay","aria-hidden":!0,children:n.jsx(ne,{name:"play",size:22})})]}),n.jsxs("div",{className:"an-bar",children:[n.jsx(we,{icon:ue?"pause":"play",size:14,className:"an-play",label:d(ue?"annotator.pause":"annotator.play"),onClick:Ne}),n.jsxs("div",{className:"an-seek",ref:P,onMouseDown:ys,onMouseMove:gs,onMouseLeave:()=>Se(null),children:[n.jsx("div",{className:"an-seek-trk"}),q>0&&j==="time"&&k.map((e,t)=>n.jsx("div",{className:"an-band",style:{left:`${e.at/q*100}%`},"data-tip":e.step},`band-${t}`)),n.jsx("div",{className:"an-seek-play",ref:L}),q>0&&z.map(e=>n.jsx("button",{type:"button",className:`an-mk ${de===e.i?"on":""} ${Oe===e.i?"active":""}`,style:{left:`${e.tMs/q*100}%`},"data-tip":e.label,onMouseDown:t=>t.stopPropagation(),onClick:t=>{t.stopPropagation(),Qe(e.i,e.tMs)}},`mk-${e.i}`)),n.jsx("div",{className:"an-knob",ref:r}),Me!=null&&q>0&&n.jsx("div",{className:"an-seek-hov",style:{left:`${Me}%`},children:ke(Me/100*q)})]}),n.jsx("span",{className:"an-time",ref:B}),me&&n.jsx("span",{className:"an-curstep","data-tip":me.node?`→ ${me.node}`:void 0,children:me.step}),n.jsx(en,{target:N})]})]}),k.length>0&&n.jsx(cs,{events:k,axis:j,extent:He,activeStepIdx:ge,onSeek:W}),K&&n.jsx("div",{className:"an-flash",children:K})]}),!Y&&k.length>0&&n.jsx(cs,{events:k,axis:j,extent:He,activeStepIdx:ge,onSeek:W}),he.length>0&&n.jsx("div",{className:"an-gallery",children:he.map((e,t)=>n.jsx(ls,{e,alt:s.scenario},`${e.hash}-${t}`))}),ws.map((e,t)=>n.jsx(ls,{e,alt:s.scenario,collapsed:D||he.length>0},`${e.hash}-${t}`)),le.length===0&&((ss=b.verdict)!=null&&ss.note?n.jsx("pre",{className:"eval-transcript",children:b.verdict.note}):n.jsx("div",{className:"an-hint",children:d("nodeView.eval.noImage")})),n.jsx(bn,{entry:s,comments:Ee,seekMs:D?W:null,selIdx:de,activeIdx:Oe,onSelect:D?Qe:null,events:D?k:null,onWrite:f})]})}function bn({entry:s,comments:a,seekMs:l,selIdx:i,activeIdx:p,onSelect:f,events:x,onWrite:m}){var $;const M=H();return n.jsxs("section",{className:"an-thread",children:[n.jsx("div",{className:"an-comments-head",children:n.jsx("span",{children:M("annotator.comments",{n:a.length})})}),n.jsx(Ys,{replies:a,onSeek:l,selIdx:i,activeIdx:p,onSelect:f,events:x,threadId:(($=s.thread)==null?void 0:$.id)??null,onRemarkChange:()=>m==null?void 0:m("")})]})}const be=new Map,wn=[],kn={};function us(s,a){if(!(s!=null&&s.evalRevision)||!(a!=null&&a.epoch))return!0;const l=s.evalRevision;return l.epoch!==a.epoch||l.generation<a.generation?!1:l.generation!==a.generation?!0:!(a.revision&&l.content!==a.revision||a.value&&s.summary&&["measured","total","pass","fail","review","blind","unknown"].some(p=>s.summary[p]!==a.value[p]))}function ds(s,a,l){const i=`${l||""}\0${s}\0${a}`;if(be.has(i))return be.get(i);const p=new URLSearchParams({node:s,scenario:a});l&&p.set("scope",l);const f=Is(ye(`/api/evals/detail?${p}`),{cache:"no-store"}).then(x=>x.ok?x.json():x.status===404?!1:x.json().catch(()=>null).then(m=>{throw new Error((m==null?void 0:m.error)||`HTTP ${x.status}`)})).finally(()=>be.delete(i));return be.set(i,f),f}function yn(s,a,l,i=!0,p=null){const f=String(s||"").indexOf("/"),x=f>0?s.slice(0,f):s,m=f>0?s.slice(f+1):"",M=`${a||""}\0${x}\0${m}`,[$,u]=c.useState({identity:"",data:null,error:null}),d=c.useRef(0),h=c.useRef(l);h.current=l;const C=c.useCallback(()=>{if(!i||!x||!m)return Promise.resolve();const N=++d.current;return u(S=>S.identity===M?{...S,error:null}:{identity:M,data:null,error:null}),ds(x,m,a).then(async S=>{if(N===d.current){if(S&&!us(S,h.current)){const k=await ds(x,m,a);if(N!==d.current)return;if(k&&!us(k,h.current))throw new Error("stale session eval detail");S=k}u({identity:M,data:S,error:null})}}).catch(S=>{if(N!==d.current)return;const k=S instanceof Error?S.message:String(S);u(R=>({identity:M,data:R.identity===M&&R.data?R.data:!1,error:k}))})},[i,M,x,m,a]);c.useEffect(()=>{i&&C()},[i,x,m,a,p,l==null?void 0:l.epoch,l==null?void 0:l.generation,l==null?void 0:l.revision]);const P=$.identity===M?$:{data:null,error:null};return{data:P.data,error:P.error,reload:C}}function gn({sessionId:s}){const l=H()("sessionEval.scopeDoor");return n.jsx("a",{className:"se-door",href:V(rn(s)),"data-tip":l,"aria-label":l,children:n.jsx(ne,{name:"arrow-left",size:16})})}function jn({sessionId:s,pageData:a,loading:l,error:i,sessions:p,queryText:f,onQueryText:x,hrefFor:m,hrefForPage:M}){const $=H(),u=(a==null?void 0:a.unknown)||0,d=s&&!l&&!i&&((a==null?void 0:a.sourceTotal)??0)===0?$("sessionEval.none"):null,h=s?n.jsxs("div",{className:"se-gates",children:[n.jsx(gn,{sessionId:s}),u>0&&n.jsxs("span",{className:"se-gate bad se-unknown","data-tip":$("sessionEval.unknownCoverage",{n:u}),children:[n.jsx(ne,{name:"info",size:11})," ",u]}),a&&n.jsx("span",{className:"se-acts",children:n.jsx("a",{className:"se-export",href:ye(`/api/sessions/${encodeURIComponent(s)}/evals?format=html`),target:"_blank",rel:"noreferrer","data-tip":$("sessionEval.exportTitle"),"aria-label":$("sessionEval.export"),children:n.jsx(ne,{name:"download",size:13})})})]}):null;return n.jsx(un,{pageData:a,loading:l,sessions:p,queryText:f,onQueryText:x,hrefFor:m,leading:h,error:i?$("sessionEval.loadFailed",{reason:i}):null,empty:d,pagination:a?{page:a.page,pageCount:a.pageCount,prev:a.prev,next:a.next,hrefFor:M}:null})}function Ln({param:s,detail:a,sessionId:l,loading:i=!1,error:p,specs:f,sessions:x,listHref:m,backHref:M,backLabel:$,onOpenSession:u,onWrite:d}){const h=H(),C=s.indexOf("/"),P=C>0?s.slice(0,C):s,N=C>0?s.slice(C+1):null,S=c.useMemo(()=>{const j=v=>({key:fs(v),node:v.node,scenario:v.scenario,state:v.state,href:V(l?Ae(l,v.node,v.scenario):hs(v.node,v.scenario))}),_=(a==null?void 0:a.neighbors)||{prev:[],next:[]};return{prev:_.prev.map(j),next:_.next.map(j)}},[a==null?void 0:a.neighbors,l]);if(p)return n.jsx(Te,{failure:h("sessionEval.loadFailed",{reason:p}),listHref:m,listLabel:h("reviewShell.backToEvals")});if(i)return n.jsx("div",{className:"fv-note",children:h("common.loading")});const k=(a==null?void 0:a.selected)||null,R=(a==null?void 0:a.scopeFallback)==="trunk"?h("reviewShell.scopeFallback"):null;if(!k){const j=(a==null?void 0:a.availability)==="unmeasured"?h("reviewShell.evalUnmeasured"):h("reviewShell.evalNotFound",{node:P,scenario:N||""});return n.jsx(Te,{missing:R?n.jsxs(n.Fragment,{children:[R,n.jsx("br",{}),j]}):j,listHref:m,listLabel:h("reviewShell.backToEvals")})}return n.jsxs("div",{className:"page-detail-stack",children:[R&&n.jsx("div",{className:"fv-source-notice",role:"status",children:R}),n.jsx(pn,{entry:k,history:a.history,sourceKey:a.scope||"project",specs:f,sessions:x,onOpenSession:u,onWrite:d,listHref:m,backHref:M,backLabel:$,queue:S})]})}function Fn({param:s=null,query:a=kn,specs:l=wn,sessions:i=[],issuesStamp:p=null,reloadBoard:f,onOpenSession:x}){var U;const m=H(),M=Ps(),$=Gs(),{notify:u}=Ks(),d=Os(),h=J(a.q||"","scope")||null,C=((U=i.find(L=>L.id===h))==null?void 0:U.evalSummary)||null,P=`${p??""}|${d.retryKey}`,N=yn(s,h,C,!!s,P),S=String(a.q??"").trim()||ie,k=nn(a.page),R=c.useMemo(()=>({specs:l,retryKey:d.retryKey}),[l,d.retryKey]),j=tn("evals",S,k,{enabled:!s&&$,refreshKey:R}),_=L=>{L&&u(L)},v=async L=>{_(L),await(f==null?void 0:f()),await N.reload()},F=L=>V(h?Ae(h,L.node,L.scenario):hs(L.node,L.scenario)),K=h?V(Ae(h)):ts("evals"),O=an("evals",h),te=m("detail.backToEvals"),Q=L=>M.ownQuery(Js(L,ie)),Z=L=>ts("evals",null,Zs(S,ie,L));return s?n.jsx(Ln,{param:s,detail:N.data&&N.data!==!1?N.data:null,sessionId:h,loading:N.data===null,error:N.error,specs:l,sessions:i,listHref:K,backHref:O,backLabel:te,onOpenSession:x,onWrite:v}):n.jsx(jn,{sessionId:h,pageData:j.data,loading:j.loading,error:j.error,sessions:i,queryText:a.q||"",onQueryText:Q,hrefFor:F,hrefForPage:Z})}export{Ln as EvalDetailPage,gn as EvalScopeDoor,jn as EvalsListPage,Fn as default,us as detailMatchesProjection};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-RoVUefLX.js","assets/tabs-BxFTq-sB.js","assets/index-B-qrQ2QS.js","assets/index-nweIph9V.css","assets/App-DANZYsFg.js","assets/PageScroll-DE6nL5p-.js","assets/tabs-Brk4lg7l.css"])))=>i.map(i=>d[i]);
2
- import{u as C,r as l,j as u,a6 as A,_ as M,a7 as P}from"./index-B-qrQ2QS.js";import{as as v,at as N,au as T,av as F,aw as I,ax as W,ay as S,az as t}from"./tabs-BxFTq-sB.js";import{P as V}from"./ProseActions-LG4ve4AO.js";import"./App-DANZYsFg.js";import"./PageScroll-DE6nL5p-.js";const G=S.define([{tag:[t.keyword,t.modifier,t.controlKeyword],color:"var(--magenta)"},{tag:[t.function(t.variableName),t.function(t.propertyName)],color:"var(--blue)"},{tag:[t.string,t.special(t.string)],color:"var(--green)"},{tag:[t.comment,t.lineComment,t.blockComment],color:"var(--muted)",fontStyle:"italic"},{tag:[t.number,t.bool,t.null],color:"var(--orange)"},{tag:[t.typeName,t.className,t.tagName],color:"var(--yellow)"},{tag:[t.propertyName,t.attributeName],color:"var(--cyan)"},{tag:[t.operator,t.punctuation],color:"var(--ink)"},{tag:[t.invalid],color:"var(--red)"}]),D=v.theme({"&":{backgroundColor:"var(--paper)",color:"var(--ink)",fontSize:"var(--type-meta)",height:"100%"},".cm-content":{fontFamily:"var(--mono)",padding:"6px 0"},".cm-scroller":{fontFamily:"var(--mono)",lineHeight:"1.62",overflow:"auto"},".cm-gutters":{backgroundColor:"var(--paper)",color:"var(--muted)",border:"none",opacity:".55"},".cm-lineNumbers .cm-gutterElement":{padding:"0 9px 0 12px"},".cm-activeLine":{backgroundColor:"color-mix(in srgb, var(--line) 30%, transparent)"},".cm-activeLineGutter":{backgroundColor:"transparent",color:"var(--ink)",opacity:"1"},".cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection":{backgroundColor:"color-mix(in srgb, var(--blue) 28%, transparent)"},".cm-cursor":{borderLeftColor:"var(--blue)"}},{dark:!0}),O=new Set(["js","jsx","mjs","cjs","ts","tsx","mts","cts"]);async function $(s){const i=(s.split(".").pop()||"").toLowerCase();if(!O.has(i))return[];try{const{javascript:f}=await M(async()=>{const{javascript:o}=await import("./index-RoVUefLX.js");return{javascript:o}},__vite__mapDeps([0,1,2,3,4,5,6]));return f({jsx:i.endsWith("sx"),typescript:i.startsWith("t")||i.startsWith("mt")||i.startsWith("ct")})}catch{return[]}}const B=900;function X({path:s,read:i,className:f="",onSelection:o}){const p=C(),d=l.useRef(null),a=l.useRef(null),h=l.useRef({offset:0,eof:!1,size:0,busy:!1}),[n,x]=l.useState({phase:"loading",size:0,loaded:0,error:null});l.useEffect(()=>{let y=!0;h.current={offset:0,eof:!1,size:0,busy:!1},x({phase:"loading",size:0,loaded:0,error:null});const j=async()=>{const e=h.current;if(!(e.busy||e.eof)){e.busy=!0;try{const r=await(i?i(e.offset):A(s,e.offset));if(!y)return;e.offset+=r.bytes,e.eof=r.eof,e.size=r.size;const c=a.current;c&&r.text&&c.dispatch({changes:{from:c.state.doc.length,insert:r.text}}),x({phase:"ready",size:r.size,loaded:e.offset,error:null})}catch(r){y&&x(c=>({...c,phase:"error",error:String((r==null?void 0:r.message)||r)}))}finally{e.busy=!1}}},z=v.updateListener.of(e=>{if(e.selectionSet){const{from:c,to:b}=e.state.selection.main;if(c===b)o==null||o(null);else{const E=e.state.doc.lineAt(c).number,H=e.state.doc.lineAt(Math.max(c,b-1)).number,m=e.view.coordsAtPos(c),g=e.view.coordsAtPos(b),L=m?Math.min(m.left,(g==null?void 0:g.left)??m.left):0,_=m?Math.max(m.bottom,(g==null?void 0:g.bottom)??m.bottom):0,R={path:s,startLine:E,endLine:H,text:e.state.sliceDoc(c,b),x:L,y:_};o==null||o(R)}}if(!e.geometryChanged&&!e.docChanged)return;const r=e.view.scrollDOM;r.scrollHeight-r.scrollTop-r.clientHeight<B&&j()});return(async()=>{const e=await $(s);!y||!d.current||(a.current=new v({parent:d.current,state:N.create({doc:"",extensions:[T(),F(),I(),W(G),v.editable.of(!1),N.readOnly.of(!0),v.lineWrapping,D,z,e]})}),await j())})(),()=>{var e;y=!1,o==null||o(null),(e=a.current)==null||e.destroy(),a.current=null}},[s,i,o]);const w=n.size>0?Math.min(100,Math.round(n.loaded/n.size*100)):0,k=!n.error&&(n.phase==="loading"||n.size>0&&w<100);return u.jsx("div",{className:`srcview ${f}`.trim(),children:u.jsxs("div",{className:"srcview-body",children:[u.jsx("div",{className:"srcview-cm",ref:d}),(n.error||k)&&u.jsx("div",{className:`srcview-progress${n.error?" is-error":""}`,role:"status",children:n.error||(n.phase==="loading"?p("common.loading"):`${w}%`)})]})})}function Z({param:s}){const i=C(),f=l.useRef(null),[o,p]=l.useState(null),d=s!=null&&s.startsWith(".spec/")?s.slice(6).split("/"):[],a=d.length>=2?{nodeId:d[0],name:d.slice(1).join("/")}:null,h=l.useMemo(()=>a?n=>P(a.nodeId,a.name,n):void 0,[a==null?void 0:a.nodeId,a==null?void 0:a.name]);return s?u.jsxs("div",{className:"fileview",ref:f,children:[u.jsx(X,{path:s,read:h,onSelection:p},s),u.jsx(V,{hostRef:f,codeSelection:o,onCodeSelectionClear:()=>p(null)})]}):u.jsx("div",{className:"doc-empty",children:i("fileView.none")})}export{Z as default};