spexcode 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -103
- package/package.json +1 -1
- package/spec-cli/bin/spex.mjs +24 -1
- package/spec-cli/src/attach.ts +50 -0
- package/spec-cli/src/cli.ts +217 -64
- package/spec-cli/src/client.ts +47 -9
- package/spec-cli/src/{self.ts → doctor.ts} +26 -25
- package/spec-cli/src/guide.ts +79 -21
- package/spec-cli/src/harness.ts +53 -29
- package/spec-cli/src/help.ts +137 -49
- package/spec-cli/src/index.ts +31 -11
- package/spec-cli/src/issues.ts +48 -21
- package/spec-cli/src/layout.ts +3 -5
- package/spec-cli/src/lint.ts +34 -5
- package/spec-cli/src/localIssues.ts +44 -60
- package/spec-cli/src/materialize.ts +4 -2
- package/spec-cli/src/mentions.ts +22 -1
- package/spec-cli/src/pty-bridge.ts +39 -4
- package/spec-cli/src/ranker.ts +31 -12
- package/spec-cli/src/search.bench.mjs +30 -7
- package/spec-cli/src/search.ts +39 -0
- package/spec-cli/src/sessions.ts +160 -69
- package/spec-cli/src/specs.ts +16 -4
- package/spec-cli/src/supervise.ts +30 -6
- package/spec-cli/src/tree.ts +118 -0
- package/spec-cli/templates/hooks/post-merge +2 -2
- package/spec-cli/templates/hooks/pre-commit +34 -15
- package/spec-cli/templates/hooks/prepare-commit-msg +8 -1
- package/spec-cli/templates/spexcode.json +7 -0
- package/spec-dashboard/dist/assets/Dashboard-C5ap-Sga.css +1 -0
- package/spec-dashboard/dist/assets/Dashboard-Dlg78cbC.js +27 -0
- package/spec-dashboard/dist/assets/EvalsPage-CDxc1-in.js +3 -0
- package/spec-dashboard/dist/assets/FoldToggle-B5leylLf.js +1 -0
- package/spec-dashboard/dist/assets/IssuesPage-C2yFXiO-.js +1 -0
- package/spec-dashboard/dist/assets/MobileApp-RHNECU6x.js +1 -0
- package/spec-dashboard/dist/assets/SessionInterface-DYP7pi_n.css +32 -0
- package/spec-dashboard/dist/assets/SessionInterface-YLD6IOmC.js +71 -0
- package/spec-dashboard/dist/assets/SessionWindow-CmKtpNUX.js +9 -0
- package/spec-dashboard/dist/assets/Settings-ZnOwskMZ.js +1 -0
- package/spec-dashboard/dist/assets/index-BdRQfrkR.js +41 -0
- package/spec-dashboard/dist/assets/index-DEc5Ru3l.css +1 -0
- package/spec-dashboard/dist/index.html +2 -2
- package/spec-yatsu/src/cli.ts +128 -26
- package/spec-yatsu/src/evaltab.ts +7 -6
- package/spec-yatsu/src/filing.ts +6 -3
- package/spec-yatsu/src/proof.ts +10 -0
- package/spec-yatsu/src/scenariofresh.ts +100 -30
- package/spec-yatsu/src/sidecar.ts +25 -3
- package/spec-yatsu/src/timeline.ts +53 -23
- package/README.zh-CN.md +0 -135
- package/spec-dashboard/dist/assets/index-Ct_ubwrd.css +0 -32
- package/spec-dashboard/dist/assets/index-DehTZ-h9.js +0 -145
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{u as pe,r as a,s as Ze,j as n,e as Je,f as Qe}from"./index-BdRQfrkR.js";import{V as et,W as tt,X as nt,Y as Ie,Z as st,g as de,n as at,_ as J,$ as lt,a0 as Pe,a1 as ot,a2 as it,u as rt,z as fe,a3 as ct,o as ut,a4 as dt}from"./SessionWindow-CmKtpNUX.js";import{F as he}from"./FoldToggle-B5leylLf.js";const me=(l,u)=>{let f=null;for(const v of l)if(v.at<=u)f=v;else break;return f},ft=l=>{if(!l||!Array.isArray(l.events))return null;const u=l.v===1?"time":typeof l.axis=="string"?l.axis:"time",f=l.v===1?v=>v.tMs:v=>v.at;return{axis:u,events:l.events.map(v=>({at:f(v),step:v.step,...v.node?{node:v.node}:{}}))}},ht=(l,u,f)=>l==="time"?J(u):l==="frame"?`#${u}`:l==="line"?`L${u}`:l==="index"?f?`${u}/${f}`:`${u}`:String(u);function Fe({events:l,axis:u,extent:f,activeStepIdx:v,onSeek:E}){return n.jsx("div",{className:"an-ruler",children:l.map((r,h)=>n.jsxs("button",{className:`an-step ${v===h?"on":""}`,onClick:()=>E(r.at),"data-tip":r.node?`→ ${r.node}`:void 0,children:[ht(u,r.at,f)," ",r.step]},h))})}const ve=l=>{var u,f;return((u=l.verdict)==null?void 0:u.status)==="pass"?"✓":((f=l.verdict)==null?void 0:f.status)==="fail"?"✗":"·"},Ke=l=>{var u,f;return((u=l.verdict)==null?void 0:u.status)==="pass"?"pass":((f=l.verdict)==null?void 0:f.status)==="fail"?"fail":"legacy"};function mt({entry:l,specs:u=[],sessions:f=[],onWrite:v,onOpenSession:E}){var Le,Te,De,Ce,Ae;const r=pe(),h=a.useRef(null),x=a.useRef(null),w=a.useRef(null),k=a.useRef(null),g=a.useRef(0),[d,M]=a.useState([]),[j,y]=a.useState("time"),[i,b]=a.useState(null),[$,L]=a.useState(""),[T,O]=a.useState(!1),[Q,B]=a.useState(null),D=a.useRef(null),m=a.useRef(null),A=a.useRef(null),ee=a.useRef(0),[Ve,xe]=a.useState(0),[te,ge]=a.useState(-1),[ye,be]=a.useState(null),[_,ne]=a.useState(!1),[je,se]=a.useState(!1),[ae,le]=a.useState(null),[q,oe]=a.useState(null),[N,we]=a.useState(null),[C,W]=a.useState(0),p=N&&N[C]||l;a.useEffect(()=>{b(null),L(""),M([]),B(null),W(0),we(null);let e=!0;return fetch(Ze(l.node,"evals")).then(t=>t.ok?t.json():null).then(t=>{e&&Array.isArray(t==null?void 0:t.readings)&&we(t.readings.filter(s=>s.scenario===l.scenario))}).catch(()=>{}),()=>{e=!1}},[l.node,l.scenario,l.ts,l.blob]),a.useEffect(()=>{b(null),B(null)},[C]);const U=et(p),I=U.find(e=>e.kind==="video"&&e.state==="present"),ie=U.filter(e=>e.kind==="image"),Xe=U.filter(e=>e.kind!=="video"&&e.kind!=="image"),V=!!I,X=l.thread??null,re=a.useMemo(()=>X?[{by:X.by,at:X.created,body:X.body},...X.replies||[]]:[],[X]),ze=N&&((Le=N[0])==null?void 0:Le.by)||l.by||null,S=a.useMemo(()=>re.map((e,t)=>{const s=tt(nt(e.body),d);return s&&s.seekable?{i:t,tMs:s.tMs,step:s.step,label:s.label}:null}).filter(Boolean).sort((e,t)=>e.tMs-t.tMs),[re,d]),ke=a.useRef(d);ke.current=d;const Me=a.useRef(S);Me.current=S;const Y=a.useCallback(()=>{const e=ee.current,t=ke.current;let s=-1;for(let c=0;c<t.length&&t[c].at<=e;c++)s=c;ge(c=>c===s?c:s);let o=null;for(const c of Me.current)if(c.tMs<=e)o=c.i;else break;be(c=>c===o?c:o)},[]);a.useEffect(()=>{Y()},[S,d,Y]),a.useEffect(()=>{ee.current=0,D.current&&(D.current.style.width="0%"),m.current&&(m.current.style.left="0%"),A.current&&(A.current.textContent=""),ge(-1),be(null),xe(0),ne(!1),se(!1),le(null),oe(null)},[l.blob,l.scenario,l.node]),a.useEffect(()=>{if(M([]),y("time"),!p.timelineBlob)return;let e=!0;return fetch(`/api/yatsu/blob/${p.timelineBlob}`).then(t=>t.ok?t.json():null).then(t=>{const s=e&&ft(t);s&&(M(s.events),y(s.axis))}).catch(()=>{}),()=>{e=!1}},[p.timelineBlob]),a.useEffect(()=>{const e=h.current;if(!e)return;const t=()=>{const R=Math.round((e.currentTime||0)*1e3),F=Math.round((e.duration||0)*1e3);ee.current=R;const K=F?R/F*100:0;D.current&&(D.current.style.width=`${K}%`),m.current&&(m.current.style.left=`${K}%`),A.current&&(A.current.textContent=`${J(R)} / ${J(F)}`),Y()},s=()=>{xe(e.duration||0),t()},o=()=>ne(!0),c=()=>ne(!1);return e.addEventListener("timeupdate",t),e.addEventListener("seeked",t),e.addEventListener("loadedmetadata",s),e.addEventListener("durationchange",s),e.addEventListener("play",o),e.addEventListener("pause",c),s(),()=>{e.removeEventListener("timeupdate",t),e.removeEventListener("seeked",t),e.removeEventListener("loadedmetadata",s),e.removeEventListener("durationchange",s),e.removeEventListener("play",o),e.removeEventListener("pause",c)}},[I==null?void 0:I.hash,l.node,l.scenario,C,Y]);const P=Math.round(Ve*1e3),G=d[te]||null,Ne=j==="time"?P:j==="frame"?ie.length:j==="index"?d.length:0,z=a.useCallback(e=>{const t=h.current;t&&(t.currentTime=e/1e3)},[]),Z=a.useCallback(()=>{const e=h.current;e&&(e.paused?e.play():e.pause())},[]),Ee=(e,t)=>{oe(e),t!=null&&z(t)},Oe=a.useCallback(()=>{var t,s;const e=Math.round((((t=h.current)==null?void 0:t.currentTime)??0)*1e3);return{tMs:e,step:((s=me(d,e))==null?void 0:s.step)??null}},[d]),$e=a.useCallback(()=>{const e=h.current;if(!e)return;e.pause();const t=Math.round((e.currentTime||0)*1e3),s=me(d,t),o=[Ie(t,s==null?void 0:s.step)];s!=null&&s.node&&s.node!==l.node&&o.push(`re: [[${s.node}]]`),o.push(""),B({seq:++g.current,body:o.join(`
|
|
2
|
+
`)})},[d,l.node]),ce=a.useCallback(e=>{var o;if(!S.length)return;let t=S.findIndex(c=>c.i===q);if(t<0){const c=Math.round((((o=h.current)==null?void 0:o.currentTime)||0)*1e3);t=S.reduce((R,F,K)=>F.tMs<=c?K:R,-1)}t=Math.min(S.length-1,Math.max(0,t+e));const s=S[t];oe(s.i),z(s.tMs)},[S,q,z]);a.useEffect(()=>{if(!V)return;const e=t=>{const s=document.activeElement;if(s&&(s.tagName==="INPUT"||s.tagName==="TEXTAREA"||s.tagName==="SELECT"||s.isContentEditable))return;const o=h.current;o&&(t.key===" "?(t.preventDefault(),Z()):t.key==="ArrowRight"?(t.preventDefault(),o.currentTime=Math.min(o.duration||o.currentTime,o.currentTime+(t.shiftKey?1:5))):t.key==="ArrowLeft"?(t.preventDefault(),o.currentTime=Math.max(0,o.currentTime-(t.shiftKey?1:5))):t.key===","?(t.preventDefault(),o.currentTime=Math.max(0,o.currentTime-1/30)):t.key==="."?(t.preventDefault(),o.duration&&(o.currentTime=Math.min(o.duration,o.currentTime+1/30))):t.key==="ArrowDown"?(t.preventDefault(),ce(1)):t.key==="ArrowUp"?(t.preventDefault(),ce(-1)):(t.key==="a"||t.key==="A")&&(t.preventDefault(),$e()))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[V,Z,ce,$e]);const Se=e=>{var o;const t=(o=w.current)==null?void 0:o.getBoundingClientRect(),s=h.current;!t||!t.width||!s||!s.duration||(s.currentTime=Math.min(1,Math.max(0,(e-t.left)/t.width))*s.duration)},Ue=e=>{e.preventDefault(),se(!0),Se(e.clientX)},He=e=>{var s;const t=(s=w.current)==null?void 0:s.getBoundingClientRect();t!=null&&t.width&&le(Math.min(100,Math.max(0,(e.clientX-t.left)/t.width*100)))};a.useEffect(()=>{if(!je)return;const e=s=>Se(s.clientX),t=()=>se(!1);return window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t)}},[je]);const Re=e=>{const t=x.current.getBoundingClientRect();return{x:(e.clientX-t.left)/t.width*100,y:(e.clientY-t.top)/t.height*100}},_e=e=>{if(e.button!==0||T)return;const t=Re(e);b({x0:t.x,y0:t.y,x:t.x,y:t.y})},qe=e=>{var s,o;if(!i)return;const t=Re(e);!((s=h.current)!=null&&s.paused)&&(Math.abs(t.x-i.x0)>1||Math.abs(t.y-i.y0)>1)&&((o=h.current)==null||o.pause()),b({...i,x:t.x,y:t.y})},We=async e=>{const t=h.current;if(!(t!=null&&t.videoWidth))return;const s=Math.round((t.currentTime??0)*1e3),o=me(d,s);O(!0),L(r("annotator.capturing"));try{const c=document.createElement("canvas");c.width=t.videoWidth,c.height=t.videoHeight;const R=c.getContext("2d");R.drawImage(t,0,0,c.width,c.height),R.strokeStyle="#ff9a3c",R.lineWidth=Math.max(2,c.width/300),R.strokeRect(e.x/100*c.width,e.y/100*c.height,e.w/100*c.width,e.h/100*c.height);const F=await new Promise(Ge=>c.toBlob(Ge,"image/png")),{hash:K}=await Je(F);if(!K)throw new Error("no hash");const ue=[Ie(s,o==null?void 0:o.step),``];o!=null&&o.node&&o.node!==l.node&&ue.push(`re: [[${o.node}]]`),ue.push(""),B({seq:++g.current,body:ue.join(`
|
|
3
|
+
`)}),L("")}catch{L(r("annotator.failed"))}finally{O(!1)}},Ye=()=>{if(!i)return;const e={x:Math.min(i.x0,i.x),y:Math.min(i.y0,i.y),w:Math.abs(i.x-i.x0),h:Math.abs(i.y-i.y0)};if(b(null),e.w<1&&e.h<1){Z();return}We(e)},H=i&&{x:Math.min(i.x0,i.x),y:Math.min(i.y0,i.y),w:Math.abs(i.x-i.x0),h:Math.abs(i.y-i.y0)};return n.jsxs("div",{className:"an-detail",children:[n.jsxs("header",{className:"an-head",children:[n.jsx("span",{className:"an-title",children:l.scenario}),n.jsx("span",{className:"an-node",children:l.node}),n.jsx("span",{className:`an-verdict-badge ${Ke(p)}`,children:ve(p)}),p.evaluator&&n.jsx("span",{className:"an-meta",children:p.evaluator}),n.jsx("span",{className:"an-meta",children:new Date(p.ts).toLocaleString()}),n.jsx(st,{originator:ze,sessions:f,kind:"eval",onOpenSession:E}),N&&N.length>1&&n.jsxs("div",{className:"an-ab",children:[n.jsx(de,{icon:"chevron-left",size:13,className:"an-ab-nav",disabled:C>=N.length-1,onClick:()=>W(e=>Math.min(N.length-1,e+1)),label:r("annotator.abOlder")}),n.jsx("div",{className:"an-ab-track",children:N.slice().reverse().map((e,t)=>{const s=N.length-1-t;return n.jsx("button",{type:"button",className:`an-ab-pip ${Ke(e)} ${s===C?"on":""}`,onClick:()=>W(s),"data-tip":`${ve(e)} ${new Date(e.ts).toLocaleString()}`,children:ve(e)},`${e.ts}-${s}`)})}),n.jsx(de,{icon:"chevron-right",size:13,className:"an-ab-nav",disabled:C<=0,onClick:()=>W(e=>Math.max(0,e-1)),label:r("annotator.abNewer")}),n.jsx("span",{className:"an-ab-pos",children:C===0?r("annotator.abLatest"):r("annotator.abPos",{i:N.length-C,n:N.length})})]})]}),n.jsxs("div",{className:"an-work",children:[n.jsxs("div",{className:"an-stage-col",children:[p.expected&&n.jsxs("div",{className:"an-expected",children:[n.jsx("b",{children:r("nodeView.eval.expected")})," ",p.expected]}),U.length>0&&((Te=p.verdict)==null?void 0:Te.note)&&n.jsxs("div",{className:"an-expected an-prior-note",children:[n.jsx("b",{children:r("nodeView.eval.noteLabel")})," ",p.verdict.note]}),!p.fresh&&(((De=p.staleAxes)==null?void 0:De.length)??0)>0&&n.jsxs("div",{className:"an-expected an-stale","data-tip":r("nodeView.eval.staleReadoutTitle"),children:[n.jsx("b",{children:r("nodeView.eval.staleLabel")})," ",p.staleAxes.join(" · "),(((Ce=p.codeDrift)==null?void 0:Ce.length)??0)>0&&n.jsxs("span",{className:"an-stale-files",children:[" — ",p.codeDrift.map(e=>`${e.file.split("/").pop()} +${e.behind}`).join(", ")]})]}),I&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"an-player",ref:k,children:[n.jsxs("div",{className:`an-stage ${_?"playing":"paused"}`,ref:x,onMouseDown:_e,onMouseMove:qe,onMouseUp:Ye,children:[n.jsx("video",{className:"an-video",ref:h,src:`/api/yatsu/blob/${I.hash}`,preload:"metadata",playsInline:!0}),H&&n.jsx("div",{className:"an-rect live",style:{left:`${H.x}%`,top:`${H.y}%`,width:`${H.w}%`,height:`${H.h}%`}}),!_&&!i&&n.jsx("div",{className:"an-bigplay","aria-hidden":!0,children:n.jsx(at,{name:"play",size:22})})]}),n.jsxs("div",{className:"an-bar",children:[n.jsx(de,{icon:_?"pause":"play",size:14,className:"an-play",label:r(_?"annotator.pause":"annotator.play"),onClick:Z}),n.jsxs("div",{className:"an-seek",ref:w,onMouseDown:Ue,onMouseMove:He,onMouseLeave:()=>le(null),children:[n.jsx("div",{className:"an-seek-trk"}),P>0&&j==="time"&&d.map((e,t)=>n.jsx("div",{className:"an-band",style:{left:`${e.at/P*100}%`},"data-tip":e.step},`band-${t}`)),n.jsx("div",{className:"an-seek-play",ref:D}),P>0&&S.map(e=>n.jsx("button",{type:"button",className:`an-mk ${q===e.i?"on":""} ${ye===e.i?"active":""}`,style:{left:`${e.tMs/P*100}%`},"data-tip":e.label,onMouseDown:t=>t.stopPropagation(),onClick:t=>{t.stopPropagation(),Ee(e.i,e.tMs)}},`mk-${e.i}`)),n.jsx("div",{className:"an-knob",ref:m}),ae!=null&&P>0&&n.jsx("div",{className:"an-seek-hov",style:{left:`${ae}%`},children:J(ae/100*P)})]}),n.jsx("span",{className:"an-time",ref:A}),G&&n.jsx("span",{className:"an-curstep","data-tip":G.node?`→ ${G.node}`:void 0,children:G.step}),n.jsx(lt,{target:k})]})]}),d.length>0&&n.jsx(Fe,{events:d,axis:j,extent:Ne,activeStepIdx:te,onSeek:z}),n.jsx("div",{className:"an-hint",children:r("annotator.hint")}),n.jsx("div",{className:"an-keys",children:r("annotator.keys")}),$&&n.jsx("div",{className:"an-flash",children:$})]}),!I&&d.length>0&&n.jsx(Fe,{events:d,axis:j,extent:Ne,activeStepIdx:te,onSeek:z}),ie.length>0&&n.jsx("div",{className:"an-gallery",children:ie.map((e,t)=>n.jsx(Pe,{e,alt:l.scenario},`${e.hash}-${t}`))}),Xe.map((e,t)=>n.jsx(Pe,{e,alt:l.scenario},`${e.hash}-${t}`)),U.length===0&&((Ae=p.verdict)!=null&&Ae.note?n.jsx("pre",{className:"eval-transcript",children:p.verdict.note}):n.jsx("div",{className:"an-hint",children:r("nodeView.eval.noImage")}))]}),n.jsx(vt,{entry:l,comments:re,specs:u,sessions:f,onWrite:v,codeSha:p.codeSha,seekMs:V?z:null,anchorNow:V?Oe:null,draft:Q,selIdx:q,activeIdx:ye,onSelect:V?Ee:null,events:V?d:null})]})]})}function vt({entry:l,comments:u,codeSha:f,specs:v,sessions:E,onWrite:r,seekMs:h,anchorNow:x,draft:w,selIdx:k,activeIdx:g,onSelect:d,events:M}){var i;const j=pe(),y=(b,$)=>Qe({node:l.node,scenario:l.scenario,body:b,codeSha:f,evidence:$});return n.jsxs("aside",{className:"an-rail",children:[n.jsx("div",{className:"an-comments-head",children:j("annotator.comments",{n:u.length})}),n.jsx("div",{className:"an-rail-list",children:n.jsx(ot,{replies:u,onSeek:h,selIdx:k,activeIdx:g,onSelect:d,events:M,threadId:((i=l.thread)==null?void 0:i.id)??null,onRemarkChange:()=>r==null?void 0:r("")})}),n.jsx("div",{className:"an-rail-compose",children:n.jsx(it,{onSend:y,specs:v,sessions:E,focusId:l.node,onDone:r,anchorNow:x,draft:w},`${l.node}·${l.scenario}`)})]})}function Be({rowKeys:l,sel:u,onSel:f,detail:v,children:E}){const[r,h]=a.useState(!1),x=a.useRef({});x.current={rowKeys:l,sel:u},a.useEffect(()=>{const k=g=>{var b;const d=(b=g.target)==null?void 0:b.tagName;if(d==="INPUT"||d==="TEXTAREA"||g.metaKey||g.ctrlKey||g.altKey||g.key!=="j"&&g.key!=="k")return;g.preventDefault(),g.stopPropagation();const{rowKeys:M,sel:j}=x.current;if(!M.length)return;const y=M.indexOf(j),i=y<0?g.key==="j"?0:M.length-1:Math.max(0,Math.min(M.length-1,y+(g.key==="j"?1:-1)));f(M[i])};return window.addEventListener("keydown",k,!0),()=>window.removeEventListener("keydown",k,!0)},[f]),a.useEffect(()=>{var k;(k=document.querySelector(".fv-list-col .sel"))==null||k.scrollIntoView({block:"nearest"})},[u]);const w=n.jsx(he,{className:"fv-fold-inline",onToggle:()=>h(!0)});return n.jsxs("div",{className:`fv-master ${r?"folded":""}`,children:[r&&n.jsx(he,{className:"fv-unfold",folded:!0,onToggle:()=>h(!1)}),n.jsx("div",{className:"fv-list-col",style:r?{display:"none"}:void 0,children:typeof E=="function"?E(w):n.jsxs(n.Fragment,{children:[n.jsx(he,{className:"fv-fold",onToggle:()=>h(!0)}),E]})}),n.jsx("div",{className:"fv-detail",children:v})]})}function pt({specs:l=[],sessions:u=[],reloadBoard:f,onOpenSession:v}){const E=pe(),{page:r,param:h}=rt(),[x,w]=a.useState(null),[k,g]=a.useState(""),[d,M]=a.useState([]),j=a.useRef([]),y=a.useMemo(()=>new Map(d.map(m=>[fe(m),m])),[d]);j.current=d.map(fe);const i=x&&y.has(x)?x:j.current[0]??null,b=a.useMemo(()=>{if(!h)return null;const m=h.indexOf("/");return m>0?`eval:${h.slice(0,m)}·${h.slice(m+1)}`:null},[h]),[$,L]=a.useState(null);a.useEffect(()=>{r==="evals"&&b&&(w(b),L(b))},[r,b]),a.useEffect(()=>{$&&y.has($)&&L(null)},[$,y]);const T=x&&!y.has(x),O=a.useMemo(()=>!T||ct(l).some(m=>fe(m)===x),[T,l,x]);a.useEffect(()=>{T&&!O&&(w(null),L(null))},[T,O]),a.useEffect(()=>{x&&!$&&d.length&&!y.has(x)&&w(null)},[x,$,d,y]),a.useEffect(()=>{if(r!=="evals"||!i||T)return;const m=/^eval:([^·]+)·(.+)$/.exec(i);m&&ut("evals",`${m[1]}/${m[2]}`,{replace:!0})},[r,i,T]);const Q=a.useCallback(m=>M(m),[]),B=m=>{m&&(g(m),setTimeout(()=>g(""),6e3))},D=i?y.get(i):null;return n.jsx(Be,{rowKeys:j.current,sel:i,onSel:w,detail:D?n.jsx(mt,{entry:D,specs:l,sessions:u,onOpenSession:v,onWrite:async m=>{B(m),await(f==null?void 0:f())}}):n.jsx("div",{className:"fv-note",children:E("evalsFeed.empty")}),children:m=>n.jsxs(n.Fragment,{children:[k&&n.jsx("div",{className:"fv-notice",children:k}),n.jsx(dt,{nodes:l,sessions:u,sel:i,onSel:A=>w(A),onRows:Q,mustShow:$,lead:m})]})})}const bt=Object.freeze(Object.defineProperty({__proto__:null,EvalMasterDetail:Be,default:pt},Symbol.toStringTag,{value:"Module"}));export{mt as E,Be as a,bt as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as l,j as t}from"./index-BdRQfrkR.js";import{n as a}from"./SessionWindow-CmKtpNUX.js";function r(){return t.jsx(a,{name:"panel-left",className:"fold-toggle-icon"})}function m({className:n,folded:e,onToggle:s}){const o=l()(e?"masterList.unfold":"masterList.fold");return t.jsx("button",{type:"button",className:n,"data-tip":o,"aria-label":o,onClick:s,children:t.jsx(r,{})})}export{m as F};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as D,r as a,j as s,h as Y,i as W,k as ss,m as es}from"./index-BdRQfrkR.js";import{a5 as Z,a6 as ts,g as ns,Z as ls,a7 as as,a1 as os,a2 as is,a8 as cs}from"./SessionWindow-CmKtpNUX.js";import{F as _}from"./FoldToggle-B5leylLf.js";import{u as rs,M as ds}from"./Dashboard-Dlg78cbC.js";function js({onFocusNode:t,onOpenSession:k,specs:v=[],sessions:x=[],issuesData:N=null,reloadIssues:o,issueId:d=null}){const i=D(),c=N,[h,p]=a.useState(!1),[j,m]=a.useState(!1),[g,w]=a.useState(!1),[S,b]=a.useState(!1),[l,y]=a.useState("all"),[f,n]=a.useState(""),[u,L]=a.useState(null),T=a.useRef([]),G=a.useCallback(()=>o==null?void 0:o(!0),[o]),V=e=>{e&&(n(e),setTimeout(()=>n(""),6e3))},C=Array.isArray(c==null?void 0:c.issues)?c.issues:[],P=e=>e.status!=="open",B=[...new Set(C.map(e=>e.store).filter(Boolean))],J=Array.isArray(c==null?void 0:c.stores)&&c.stores.length?c.stores:[{id:"local",label:"local",kind:"local"}];a.useEffect(()=>{if(!d||!C.length)return;const e=C.find(r=>r.id===d);e&&(l!=="all"&&e.store!==l&&y("all"),P(e)&&w(!0),M(e)||b(!1),L(`issue:${e.id}`))},[d,C,l]);const K=l==="all"?C:C.filter(e=>e.store===l),M=e=>!!Z(x,e.by)||Array.isArray(e.replies)&&e.replies.some(r=>Z(x,r.by)),I=g?K:K.filter(e=>!P(e)),E=S?I.filter(M):I,F=I.filter(M).length,O=K.filter(P).length,H=a.useMemo(()=>new Map(E.map(e=>[`issue:${e.id}`,e])),[E]);T.current=E.map(e=>`issue:${e.id}`);const A=u&&H.has(u)?u:T.current[0]??null,U=a.useRef({});if(U.current={effSel:A},rs(h,()=>p(!1)),a.useEffect(()=>{const e=r=>{var X;const R=(X=r.target)==null?void 0:X.tagName;if(R==="INPUT"||R==="TEXTAREA"||r.metaKey||r.ctrlKey||r.altKey||r.key!=="j"&&r.key!=="k")return;r.preventDefault(),r.stopPropagation();const $=T.current;if(!$.length)return;const z=$.indexOf(U.current.effSel),Q=z<0?r.key==="j"?0:$.length-1:Math.max(0,Math.min($.length-1,z+(r.key==="j"?1:-1)));L($[Q])};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[]),a.useEffect(()=>{var e;(e=document.querySelector(".fv-list-col .sel"))==null||e.scrollIntoView({block:"nearest"})},[A]),c==null)return s.jsx("div",{className:"fv-note",children:i("session.issuesLoading")});if(!c.enabled)return s.jsx("div",{className:"fv-note",children:i("session.issuesOff")});const q=A?H.get(A):null;return s.jsxs("div",{className:`fv-master ${j?"folded":""}`,children:[j&&s.jsx(_,{className:"fv-unfold",folded:!0,onToggle:()=>m(!1)}),s.jsxs("div",{className:"fv-list-col",style:j?{display:"none"}:void 0,children:[f&&s.jsx("div",{className:"fv-notice",children:f}),s.jsxs("section",{className:"fv-group",children:[s.jsxs("header",{className:"fv-group-head",children:[s.jsxs("span",{className:"fv-head-row",children:[s.jsx(_,{className:"fv-fold-inline",onToggle:()=>m(!0)}),B.length>1&&s.jsx(ts,{value:l,onChange:y,options:[{value:"all",label:i("session.issuesStoreAll")},...B.map(e=>({value:e,label:e}))]}),s.jsx(ns,{icon:"plus",size:12,className:"fv-new-btn",label:i("session.issuesNew"),onClick:()=>p(!0)})]}),(F>0||O>0)&&s.jsxs("span",{className:"ef-chipbar",children:[F>0&&s.jsx("button",{type:"button",className:`ef-chip fv-live ${S?"on":""}`,onClick:()=>b(e=>!e),"data-tip":i("masterList.liveChipTitle"),children:i("masterList.liveChip",{n:F})}),O>0&&s.jsx("button",{type:"button",className:`ef-chip fv-concluded ${g?"on":""}`,onClick:()=>w(e=>!e),children:i("nodeView.closedIssues",{n:O})})]})]}),!E.length&&s.jsx("div",{className:"fv-note",children:i("session.issuesEmpty")}),E.map(e=>{var R;const r=`issue:${e.id}`;return s.jsxs("button",{className:`fv-row ${A===r?"sel":""}`,onClick:()=>L(r),children:[s.jsx("span",{className:`fv-dot st-${e.status||"open"}`,"data-tip":e.status}),s.jsx("span",{className:"fv-concern","data-tip":e.concern,children:e.concern}),(((R=e.replies)==null?void 0:R.length)??0)>0&&s.jsx("span",{className:"fv-replies","data-tip":i("session.issuesReplies",{n:e.replies.length}),children:e.replies.length}),B.length>1&&s.jsx("span",{className:`fv-store fv-store-${e.store==="local"?"local":"forge"}`,children:e.store})]},e.id)})]})]}),s.jsx("div",{className:"fv-detail",children:q?s.jsx(us,{issue:q,specs:v,sessions:x,onFocusNode:t,onOpenSession:k,onWrite:async e=>{V(e),await G()}}):s.jsx("div",{className:"fv-note",children:i("session.issuesEmpty")})}),h&&s.jsx(ds,{title:i("session.issuesNew"),closeLabel:i("common.close"),onClose:()=>p(!1),className:"fv-new-modal",children:s.jsx(ms,{specs:v,sessions:x,stores:J,onCancel:()=>p(!1),onDone:async e=>{p(!1),V(e),await G()}})})]})}function us({issue:t,specs:k,sessions:v,onFocusNode:x,onOpenSession:N,onWrite:o}){const d=D(),i=t.store==="local",c=t.status!=="open",[h,p]=a.useState(""),[j,m]=a.useState(""),g=Array.isArray(t.nodes)?t.nodes:[],w=Array.isArray(t.replies)?t.replies:[],S=(l,y)=>async()=>{if(!h){p(l);try{const f=await y();f!=null&&f.ok?(m(""),await(o==null?void 0:o(""))):m((f==null?void 0:f.error)||`${l} failed`)}finally{p("")}}},b=(l,y,f,n)=>s.jsx("button",{type:"button",className:`fv-close-issue fv-life-${l}`,disabled:!!h,"data-tip":n,onMouseDown:u=>u.preventDefault(),onClick:S(l,f),children:h===l?d("session.issuesActing"):y});return s.jsxs("div",{className:"fvd",children:[s.jsxs("div",{className:"fvd-scroll",children:[s.jsx("header",{className:"fvd-head",children:s.jsx("span",{className:"fvd-concern",children:t.concern})}),s.jsxs("div",{className:"fvd-meta",children:[t.status&&s.jsx("span",{className:`fv-status fv-st-${t.status}`,children:t.status}),s.jsx("span",{className:`fv-store fv-store-${i?"local":"forge"}`,children:t.store}),i?s.jsx(ls,{originator:t.by,sessions:v,kind:"issue",onOpenSession:N}):t.by&&s.jsx("span",{className:"fv-by",children:t.by}),g.map(l=>s.jsx("button",{type:"button",className:"fv-chip",onClick:()=>x==null?void 0:x(l),"data-tip":d("session.issuesFocusNode"),children:l},l)),t.url&&s.jsx("a",{className:"fv-link",href:t.url,target:"_blank",rel:"noreferrer",children:d("session.issuesOpenOnForge")})]}),t.body&&s.jsx("div",{className:"fvd-body",children:s.jsx(as,{body:t.body})}),s.jsx(os,{replies:w,threadId:i?t.id:null,onRemarkChange:()=>o==null?void 0:o("")})]}),s.jsx("div",{className:"fvd-compose",children:s.jsx(is,{onSend:(l,y)=>ss(t.id,l,y),specs:k,sessions:v,focusId:g[0]||null,onDone:o,actionsEnd:!c&&s.jsxs(s.Fragment,{children:[j&&s.jsx("span",{className:"fv-error",children:j}),i&&b("promote",d("session.issuesPromote"),()=>Y(t.id),d("session.issuesPromoteTitle")),b("close",d("session.issuesCloseIssue"),()=>W(t.id),d("session.issuesCloseIssueTitle"))]})},t.id)})]})}const fs=t=>t.id==="local"?"L":t.id==="github"?"GH":t.id==="gitlab"?"GL":(t.id||"?").slice(0,2).toUpperCase();function ms({specs:t,sessions:k,stores:v,onCancel:x,onDone:N}){var f;const o=D(),[d,i]=a.useState(((f=v[0])==null?void 0:f.id)||"local"),[c,h]=a.useState(""),[p,j]=a.useState(""),[m,g]=a.useState(!1),[w,S]=a.useState(""),b=a.useRef(null),l=cs({inputRef:b,value:p,setValue:j,specs:t,sessions:k,up:!0,fixedAbove:".fv-new-modal"});a.useEffect(()=>{var n;v.some(u=>u.id===d)||i(((n=v[0])==null?void 0:n.id)||"local")},[v,d]);const y=async()=>{const n=c.trim();if(!(!n||m)){g(!0),S("");try{const u=await es({concern:n,body:p.trim()||void 0,store:d});u!=null&&u.ok?(h(""),j(""),await(N==null?void 0:N(u.outcomes||""))):S((u==null?void 0:u.error)||o("session.issuesPostFailed"))}finally{g(!1)}}};return s.jsxs("div",{className:"fv-new-form",children:[s.jsxs("label",{className:"fv-store-pick",children:[s.jsx("span",{children:o("session.issuesStoreLabel")}),s.jsx("select",{value:d,disabled:m,onChange:n=>i(n.target.value),children:v.map(n=>s.jsxs("option",{value:n.id,children:[fs(n)," · ",n.label||n.id]},n.id))})]}),s.jsx("input",{className:"fv-input",value:c,placeholder:o("session.issuesConcernPlaceholder"),disabled:m,onChange:n=>h(n.target.value)}),s.jsxs("div",{className:"fv-tawrap",children:[s.jsx("textarea",{ref:b,className:"fv-textarea",rows:3,value:p,placeholder:o("session.issuesBodyPlaceholder"),disabled:m,onChange:n=>{j(n.target.value),l.sync(n.target)},onSelect:n=>l.sync(n.target),onBlur:l.close,onKeyDown:n=>{l.onKeyDown(n)||n.key==="Enter"&&(n.metaKey||n.ctrlKey)&&(n.preventDefault(),y())}}),l.menuEl]}),s.jsxs("div",{className:"fv-actions",children:[s.jsx("span",{className:w?"fv-error":"fv-hint",children:w||o("session.issuesMentionHint")}),s.jsx("button",{type:"button",className:"fv-cancel",disabled:m,onClick:x,children:o("common.cancel")}),s.jsx("button",{type:"button",className:"fv-send",disabled:m||!c.trim(),onClick:y,children:o(m?"session.issuesSending":"session.issuesPost")})]})]})}export{js as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as k,r as b,j as s}from"./index-BdRQfrkR.js";import{q as M,t as A,A as y,j as g,v as H,H as V,w as R,E as _,c as $,G as B,x as G,S}from"./SessionWindow-CmKtpNUX.js";const L={spec:"nodeView.paneSpec",history:"nodeView.paneHistory",issues:"nodeView.paneIssues",eval:"nodeView.paneEval",edit:"nodeView.paneEdit"},C=(e,l)=>l.filter(u=>{var h;return(h=u.ops)==null?void 0:h.some(n=>n.nodeId===e.id)});function T({status:e}){const l=S[e]||S.pending;return s.jsx("span",{className:"m-dot",style:{background:l.color}})}function U({node:e,kids:l,editors:u,onTap:h}){return s.jsxs("button",{className:"m-row",onClick:h,children:[s.jsx(T,{status:e.status}),s.jsx("span",{className:"m-row-title",children:e.title}),u.length>0&&s.jsx("span",{className:"m-row-faces",children:u.slice(0,3).map(n=>s.jsx(y,{seed:n.id,status:n.status,title:g(n)},n.id))}),e.version?s.jsxs("span",{className:"m-row-ver",children:["v",e.version]}):null,l>0&&s.jsxs("span",{className:"m-row-kids",children:["▸",l]}),s.jsx("span",{className:"m-row-chev",children:"›"})]})}function q({node:e,childrenOf:l,sessions:u,onOpenChild:h}){const n=k(),m=l(e.id),d=M(e),i=[...m.length?[{key:"children",label:n("mobile.childrenTab",{n:m.length})}]:[],...d.map(a=>({key:a.key,label:n(L[a.key])}))],[r,x]=b.useState(null);b.useEffect(()=>{x(null)},[e.id]);const c=r&&i.some(a=>a.key===r)?r:i[0].key,j=A(e.id,c==="history"),N=C(e,u);return s.jsxs("div",{className:"m-node",children:[s.jsxs("div",{className:"m-node-head",children:[s.jsx(T,{status:e.status}),s.jsx("span",{className:"m-node-title",children:e.title}),e.version?s.jsxs("span",{className:"m-node-ver",children:["v",e.version]}):null,s.jsx("span",{className:"m-node-status",children:n(`status.${e.status}`)}),N.length>0&&s.jsx("span",{className:"m-node-faces",title:n("mobile.liveEditors",{n:N.length}),children:N.map(a=>s.jsx(y,{seed:a.id,status:a.status,title:g(a)},a.id))})]}),e.desc&&s.jsx("div",{className:"m-node-desc",children:e.desc}),s.jsx("div",{className:"m-tabs",children:i.map(a=>s.jsx("button",{className:a.key===c?"m-tab on":"m-tab",onClick:()=>x(a.key),children:a.label},a.key))}),s.jsxs("div",{className:c==="history"?"m-pane-host fixed":"m-pane-host",children:[c==="children"&&s.jsx("div",{className:"m-children",children:m.map(a=>s.jsx(U,{node:a,kids:l(a.id).length,editors:C(a,u),onTap:()=>h(a.id)},a.id))}),c==="spec"&&s.jsx(H,{node:e}),c==="history"&&s.jsx(V,{node:e,rows:j}),c==="issues"&&s.jsx(R,{node:e}),c==="edit"&&s.jsx(_,{node:e})]})]})}function D({sessions:e,openId:l,setOpenId:u,byId:h,goToNode:n}){const m=k(),d=l?e.find(i=>i.id===l):null;if(d){const i=d.ops||[];return s.jsxs("div",{className:"m-sessdetail",children:[s.jsxs("div",{className:"m-sess-card",children:[s.jsx(y,{seed:d.id,status:d.status}),s.jsxs("div",{className:"m-sess-meta",children:[s.jsx("span",{className:"m-sess-name",children:g(d)}),s.jsx("span",{className:"m-sess-status",style:{color:$[d.status]},children:m(`status.${d.status}`)})]})]}),d.activity&&s.jsx("div",{className:"m-sess-activity",children:d.activity}),s.jsx("div",{className:"m-sess-section",children:m("mobile.changing",{n:i.length})}),i.length===0?s.jsx("div",{className:"m-empty",children:m("mobile.noChanges")}):i.map((r,x)=>{const c=h[r.nodeId];return s.jsxs("button",{className:"m-row",disabled:!c,onClick:()=>c&&n(r.nodeId),children:[s.jsx("span",{className:`ov-mark ov-${r.op}`,children:B[r.op]||"•"}),s.jsx("span",{className:"m-row-title",children:c?c.title:r.nodeId}),c&&s.jsx("span",{className:"m-row-chev",children:"›"})]},x)})]})}return e.length?s.jsx("div",{className:"m-sesslist",children:e.map(i=>s.jsx("button",{className:"m-sess-row",onClick:()=>u(i.id),children:s.jsx(G,{s:i,locked:!1})},i.id))}):s.jsx("div",{className:"m-empty big",children:m("mobile.noSessions")})}function z({specs:e,sessions:l,project:u}){const h=k(),n=b.useMemo(()=>Object.fromEntries(e.map(t=>[t.id,t])),[e]),m=b.useMemo(()=>e.find(t=>!t.parent)||e[0],[e]),d=b.useMemo(()=>{const t={};return e.forEach(o=>{var p;o.parent&&(t[p=o.parent]??(t[p]=[])).push(o)}),o=>t[o]||[]},[e]),i=b.useMemo(()=>t=>{const o=[];for(let p=n[t];p;p=p.parent?n[p.parent]:null)o.unshift(p.id);return o},[n]),[r,x]=b.useState("specs"),[c,j]=b.useState(()=>m?[m.id]:[]),[N,a]=b.useState(null),v=c.filter(t=>n[t]),w=v[v.length-1]||(m==null?void 0:m.id),f=w?n[w]:null,E=t=>j(o=>[...o.filter(p=>n[p]),t]),I=t=>{j(i(t)),a(null),x("specs")},P=r==="specs"?v.length>1:!!N,O=()=>{r==="specs"?j(t=>t.slice(0,-1)):a(null)};return s.jsxs("div",{className:"m-app",children:[s.jsxs("header",{className:"m-topbar",children:[P?s.jsx("button",{className:"m-back",onClick:O,"aria-label":h("mobile.back"),children:"‹"}):s.jsx("span",{className:"m-back ghost","aria-hidden":"true"}),s.jsx("span",{className:"m-brand",children:u||"SpexCode"})]}),s.jsx("main",{className:"m-main",children:r==="specs"?s.jsxs("div",{className:"m-specs",children:[s.jsx("nav",{className:"m-crumbs",children:v.map((t,o)=>s.jsxs("span",{className:"m-crumb",children:[o>0&&s.jsx("span",{className:"m-crumb-sep",children:"›"}),s.jsx("button",{className:o===v.length-1?"m-crumb-btn cur":"m-crumb-btn",onClick:()=>j(v.slice(0,o+1)),children:n[t].title})]},t))}),f&&s.jsx(q,{node:f,childrenOf:d,sessions:l,onOpenChild:E},f.id)]}):s.jsx(D,{sessions:l,openId:N,setOpenId:a,byId:n,goToNode:I})}),s.jsxs("nav",{className:"m-tabbar",children:[s.jsxs("button",{className:r==="specs"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>x("specs"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"❯_"}),h("mobile.specsTab")]}),s.jsxs("button",{className:r==="sessions"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>x("sessions"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"◐"}),h("mobile.sessionsTab"),l.length>0&&s.jsx("span",{className:"m-tabbar-badge",children:l.length})]})]})]})}export{z as default};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
|
+
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
|
+
* https://github.com/chjj/term.js
|
|
5
|
+
* @license MIT
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
|
15
|
+
* all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
* THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
* Originally forked from (with the author's permission):
|
|
26
|
+
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
27
|
+
* http://bellard.org/jslinux/
|
|
28
|
+
* Copyright (c) 2011 Fabrice Bellard
|
|
29
|
+
* The original design remains. The terminal itself
|
|
30
|
+
* has been extended to include xterm CSI codes, among
|
|
31
|
+
* other features.
|
|
32
|
+
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}
|