@feng0531/dsh-vcs 0.3.41 → 0.3.43
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/dist/client.js +2 -2
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
window.__ModuleLoader__.load({ id: "@feng0531/dsh-vcs", factory(require) { var module = { exports: {} }; var exports = module.exports;
|
|
2
|
-
var
|
|
2
|
+
var hr=Object.create;var Ne=Object.defineProperty;var gr=Object.getOwnPropertyDescriptor;var vr=Object.getOwnPropertyNames;var br=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty;var xr=(t,e)=>{for(var s in e)Ne(t,s,{get:e[s],enumerable:!0})},Tt=(t,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of vr(e))!yr.call(t,o)&&o!==s&&Ne(t,o,{get:()=>e[o],enumerable:!(n=gr(e,o))||n.enumerable});return t};var K=(t,e,s)=>(s=t!=null?hr(br(t)):{},Tt(e||!t||!t.__esModule?Ne(s,"default",{value:t,enumerable:!0}):s,t)),wr=t=>Tt(Ne({},"__esModule",{value:!0}),t);var Jr={};xr(Jr,{apply:()=>Gr,inject:()=>zr});module.exports=wr(Jr);var r=K(require("react"),1);var Xe=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
|
|
3
3
|
.vcs-root .vcs-discovery input{min-width:160px;max-width:100%;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-base);padding:6px 9px}
|
|
4
4
|
.vcs-root .vcs-discovery span{font-size:12px;color:var(--dsw-alias-label-secondary)}
|
|
5
5
|
.vcs-root .vcs-mode{display:flex;align-items:center;gap:6px}
|
|
@@ -92,5 +92,5 @@ var mr=Object.create;var Ee=Object.defineProperty;var hr=Object.getOwnPropertyDe
|
|
|
92
92
|
.vcs-root .vcs-toolbar{gap:6px}
|
|
93
93
|
.vcs-root .vcs-title{font-size:16px}
|
|
94
94
|
}
|
|
95
|
-
`;var z=G(require("react"),1);function Bt(t){return t===""?[]:t.split(/\r\n|\n|\r/)}function Ft(t="",e=""){let i=Bt(t),n=Bt(e),o=0;for(;o<i.length&&o<n.length&&i[o]===n[o];)o++;let d=0;for(;d<i.length-o&&d<n.length-o&&i[i.length-d-1]===n[n.length-d-1];)d++;let p=i.length-d,c=n.length-d,a=p-o,l=c-o,b=a&&l?(a+1)*(l+1):0,h=b>2e5,N=[],v=0;function g(m,k){v++,!(N.length>=2e3)&&N.push({left:m===null?null:{number:m+1,text:i[m]},right:k===null?null:{number:k+1,text:n[k]},kind:m===null?"insert":k===null?"delete":i[m]===n[k]?"equal":"replace"})}for(let m=0;m<o;m++)g(m,m);if(h||!a||!l)for(let m=0;m<Math.max(a,l);m++)g(m<a?o+m:null,m<l?o+m:null);else{let m=l+1,k=new Uint32Array(b);for(let x=a-1;x>=0;x--)for(let u=l-1;u>=0;u--)k[x*m+u]=i[o+x]===n[o+u]?k[(x+1)*m+u+1]+1:Math.max(k[(x+1)*m+u],k[x*m+u+1]);let f=0,y=0;for(;f<a||y<l;)f<a&&y<l&&i[o+f]===n[o+y]?g(o+f++,o+y++):f<a&&(y===l||k[(f+1)*m+y]>=k[f*m+y+1])?g(o+f++,null):g(null,o+y++)}for(let m=0;m<d;m++)g(p+m,c+m);return{rows:N,approximate:h,truncated:v>N.length,totalRows:v,omittedRows:v-N.length,leftLineCount:i.length,rightLineCount:n.length,lcsCells:h?0:b}}var Cr={before:"Before",after:"After",readonly:"Read-only text comparison",approximate:"Approximate alignment: the changed region is too large for exact matching; lines are paired by position.",truncated:"Preview truncated to the first 2,000 aligned lines; additional lines are not shown.",empty:"Both versions are empty."},Ye={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Sr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Er={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Nr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function fe({comparison:t,labels:e={}}){let i=t?.left?.text??"",n=t?.right?.text??"",o=(0,z.useMemo)(()=>Ft(i,n),[i,n]),d=c=>e[c]??Cr[c],p=(c,a,l)=>{let b=c&&l!=="equal";return z.default.createElement("td",{style:{...Ye,background:b?a==="left"?"#d6454520":"#259b4920":void 0}},z.default.createElement("div",{style:Sr},z.default.createElement("span",{style:Er},c?.number??""),z.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},b?a==="left"?"\u2212":"+":""),z.default.createElement("pre",{style:Nr},c?.text??"")))};return z.default.createElement("section",{className:"vcs-text-comparison","aria-label":d("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},o.approximate&&z.default.createElement("div",{role:"status",style:{padding:8}},d("approximate")),o.truncated&&z.default.createElement("div",{role:"status",style:{padding:8}},d("truncated")," (",2e3," / ",o.totalRows,")"),z.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},z.default.createElement("thead",null,z.default.createElement("tr",null,z.default.createElement("th",{scope:"col",style:{...Ye,padding:8,overflowWrap:"anywhere"}},t?.left?.label||d("before")),z.default.createElement("th",{scope:"col",style:{...Ye,padding:8,overflowWrap:"anywhere"}},t?.right?.label||d("after")))),z.default.createElement("tbody",null,o.rows.map((c,a)=>z.default.createElement("tr",{key:a,"data-kind":c.kind},p(c.left,"left",c.kind),p(c.right,"right",c.kind))))),!o.rows.length&&z.default.createElement("p",{style:{padding:8}},d("empty")))}function Ne(t){return{before:t("textBefore"),after:t("textAfter"),readonly:t("textReadonly"),empty:t("textEmpty"),approximate:t("approximate"),truncated:t("textTruncated")}}var T=G(require("react"),1);var P=G(require("react"),1);var L=G(require("react"),1);var I=G(require("react"),1);function $e({sessionId:t,repositoryId:e,commit:i,path:n,rpc:o,t:d,onRediscover:p,onClose:c}){let[a,l]=(0,I.useState)(null),[b,h]=(0,I.useState)(""),[N,v]=(0,I.useState)(0);return(0,I.useEffect)(()=>{let g=new AbortController;return l(null),h(""),o("vcs/tree-file",{sessionId:t,repositoryId:e,commit:i,path:n},g.signal).then(m=>{g.signal.aborted||l(m)}).catch(m=>{g.signal.aborted||(h(m.message),m.code==="vcs/rediscover-required"&&p())}),()=>g.abort()},[t,e,i,n,N]),I.default.createElement("section",{"aria-label":d("treePreview")},I.default.createElement("h4",null,n),I.default.createElement("button",{onClick:c},d("treeClose")),I.default.createElement("p",null,I.default.createElement("code",null,i)),b?I.default.createElement("p",{role:"alert"},b," ",I.default.createElement("button",{onClick:()=>v(g=>g+1)},d("retry"))):a?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,I.default.createElement("code",null,a.oid)," \xB7 ",d("encoding"),": ",a.encoding||"\u2014"),a.notice&&I.default.createElement("p",{role:"status"},a.notice),a.binary?I.default.createElement("p",null,d("binary")):a.text===""?I.default.createElement("p",null,d("treeEmpty")):I.default.createElement("pre",{tabIndex:0,style:{maxHeight:480,overflow:"auto",whiteSpace:"pre",tabSize:4}},a.text)):I.default.createElement("p",{role:"status"},d("loading")))}function Mt(t,e="",i=""){let n=e?e+"/":"",o=i.toLowerCase();return t.filter(d=>{let p=d.path.slice(n.length);return d.path.startsWith(n)&&p.length>0&&!p.includes("/")&&p.toLowerCase().includes(o)}).sort((d,p)=>+(p.type==="tree")-+(d.type==="tree")||(d.path<p.path?-1:d.path>p.path?1:0))}function Ar({sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:d}){let[p,c]=(0,L.useState)(null),[a,l]=(0,L.useState)(""),[b,h]=(0,L.useState)(0),[N,v]=(0,L.useState)(""),[g,m]=(0,L.useState)(0),[k,f]=(0,L.useState)(""),[y,x]=(0,L.useState)(null);if((0,L.useEffect)(()=>{let S=new AbortController;return c(null),l(""),n("vcs/tree",{sessionId:t,repositoryId:e,commit:i},S.signal).then(X=>{S.signal.aborted||c(X)}).catch(X=>{S.signal.aborted||(l(X.message),X.code==="vcs/rediscover-required"&&d())}),()=>S.abort()},[t,e,i,b]),a)return L.default.createElement("p",{role:"alert"},a," ",L.default.createElement("button",{onClick:()=>h(S=>S+1)},o("retry")));if(!p)return L.default.createElement("p",{role:"status"},o("loading"));let u=N?N+"/":"",B=Mt(p.entries,N,k),K=S=>{v(S),m(0),f(""),x(null)};return L.default.createElement("section",{"aria-label":o("historicalTree")},L.default.createElement("p",null,o("historicalTreeScope")),L.default.createElement("code",null,i),L.default.createElement("p",null,N||"/"," ",N&&L.default.createElement("button",{onClick:()=>K(N.includes("/")?N.slice(0,N.lastIndexOf("/")):"")},o("treeUp"))),L.default.createElement("label",null,o("treeSearch")," ",L.default.createElement("input",{"aria-label":o("treeSearch"),value:k,onChange:S=>{f(S.target.value),m(0),x(null)}})),L.default.createElement("p",null,B.length," ",o("treeEntries")),!B.length&&k&&L.default.createElement("p",{role:"status"},o("emptySearch")),L.default.createElement("ul",null,B.slice(g*100,g*100+100).map(S=>L.default.createElement("li",{key:S.path},S.type==="tree"?L.default.createElement("button",{onClick:()=>K(S.path)},S.path.slice(u.length),"/"):S.type==="blob"&&["100644","100755"].includes(S.mode)?L.default.createElement("button",{"aria-pressed":y===S.path,onClick:()=>x(S.path)},S.path.slice(u.length)):L.default.createElement("span",null,S.path.slice(u.length))," \xB7 ",L.default.createElement("code",null,S.mode," ",S.type," ",L.default.createElement("span",{title:S.oid},S.oid.slice(0,10)))))),g>0&&L.default.createElement("button",{onClick:()=>{m(S=>S-1),x(null)}},o("treePrevious")),(g+1)*100<B.length&&L.default.createElement("button",{onClick:()=>{m(S=>S+1),x(null)}},o("treeNext")),y&&L.default.createElement($e,{key:JSON.stringify([t,e,i,y]),sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:d,path:y,onClose:()=>x(null)}))}function Ze(t){return L.default.createElement(Lr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Lr(t){let[e,i]=(0,L.useState)(!1);return L.default.createElement("div",null,L.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("historicalTree")),e&&L.default.createElement(Ar,{...t}))}var q=G(require("react"),1);var O=G(require("react"),1);function Ht({load:t,node:e,comparison:i,key:n,onReady:o=()=>{},onError:d=()=>{}}){let p=new AbortController,c,a=!1,l=()=>{let h=c;c=void 0,h?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),t(p.signal))).then(h=>{a||(c=h.createDiff(e),c.setContent(i,n),a||o(c))}).catch(h=>{try{l()}finally{a||d(h)}}),dispose(){a||(a=!0,p.abort(),l())}}}async function Ae(t,{signal:e,fetcher:i=fetch,importer:n=o=>import(o)}={}){let o=await i(t,{credentials:"same-origin",cache:"no-cache",signal:e});if(!o.ok)throw new Error("Editor resource HTTP "+o.status+" ("+t+"). "+(o.status===401?"Refresh the authenticated DSH page.":o.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let d=o.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(d))throw new Error("Editor resource returned "+(d||"no Content-Type")+" instead of JavaScript.");return await o.arrayBuffer(),e?.throwIfAborted(),n(t)}var Le="0.3.41";function Re({comparison:t,identity:e,t:i}){let n=(0,O.useRef)(null),o=(0,O.useRef)(null),[d,p]=(0,O.useState)(!0),[c,a]=(0,O.useState)(!1),[l,b]=(0,O.useState)(!1),[h,N]=(0,O.useState)(!1),[v,g]=(0,O.useState)(!1),[m,k]=(0,O.useState)("");return(0,O.useEffect)(()=>{if(g(!1),k(""),!h)return;let f=u=>new URL("vcs-assets/"+u,document.baseURI).href,y=document.createElement("link");y.rel="stylesheet",y.href=f("editor.css"),n.current.parentNode.appendChild(y);let x=Ht({node:n.current,comparison:t,key:e,load:u=>Ae(f("editor.js")+"?v="+encodeURIComponent(Le)+"&retry=0",{signal:u}),onReady:u=>{o.current=u,g(!0)},onError:u=>k(u.message)});return()=>{o.current=null;try{x.dispose()}finally{y.remove()}}},[h,t,e]),(0,O.useEffect)(()=>{v&&o.current?.options({sideBySide:d,ignoreWhitespace:c,wrap:l})},[v,d,c,l]),O.default.createElement("div",null,O.default.createElement("button",{"aria-pressed":h,onClick:()=>N(f=>!f)},i(h?"historyBasic":"historyAdvanced")),v&&O.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8}},O.default.createElement("button",{"aria-pressed":d,onClick:()=>p(f=>!f)},i(d?"side":"inline")),O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:c,onChange:f=>a(f.target.checked)}),i("whitespace")),O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:l,onChange:f=>b(f.target.checked)}),i("wrap")),O.default.createElement("button",{onClick:()=>o.current?.navigate("previous")},i("previous")),O.default.createElement("button",{onClick:()=>o.current?.navigate("next")},i("next"))),h&&!v&&!m&&O.default.createElement("p",{role:"status"},i("loading")),m&&O.default.createElement("p",{role:"status"},i("fallback")," ",m),O.default.createElement("div",{style:{position:"relative",height:360}},O.default.createElement("div",{ref:n,style:{position:"absolute",inset:0,visibility:v?"visible":"hidden"},"aria-hidden":!v}),!v&&O.default.createElement(fe,{comparison:t,labels:Ne(i)})))}var F=G(require("react"),1);function Dr({sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,rpc:d,t:p,onRediscover:c,onSelectCommit:a}){let[l,b]=(0,F.useState)({commits:[],nextOffset:null}),[h,N]=(0,F.useState)(0),[v,g]=(0,F.useState)(0),[m,k]=(0,F.useState)(!0),[f,y]=(0,F.useState)("");return(0,F.useEffect)(()=>{let x=new AbortController;return k(!0),y(""),d("vcs/file-history",{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,offset:h,limit:50},x.signal).then(u=>{x.signal.aborted||b(B=>({...u,commits:h?[...B.commits,...u.commits]:u.commits}))}).catch(u=>{x.signal.aborted||(y(u.message),u.code==="vcs/rediscover-required"&&c())}).finally(()=>{x.signal.aborted||k(!1)}),()=>x.abort()},[t,e,i,n,o,h,v]),F.default.createElement("section",{"aria-label":p("fileHistory"),"aria-busy":m},F.default.createElement("p",null,p("fileHistoryScope")),F.default.createElement("p",{style:{overflowWrap:"anywhere"}},l.path," \xB7 ",F.default.createElement("code",null,i)),F.default.createElement("ol",null,l.commits.map(x=>F.default.createElement("li",{key:x.id},F.default.createElement("code",{title:x.id},x.id.slice(0,10))," \xB7 ",a?F.default.createElement("button",{onClick:()=>a(x.id)},x.subject):x.subject,F.default.createElement("div",null,x.author," \xB7 ",F.default.createElement("time",{dateTime:x.date},x.date))))),m&&F.default.createElement("p",{role:"status"},p("loading")),f&&F.default.createElement("p",{role:"alert"},f," ",F.default.createElement("button",{onClick:()=>g(x=>x+1)},p("retry"))),!m&&!f&&!l.commits.length&&F.default.createElement("p",null,p("historyEmpty")),l.truncated&&F.default.createElement("p",{role:"status"},p("historyLimit")),!f&&l.nextOffset!==null&&F.default.createElement("button",{disabled:m,onClick:()=>N(l.nextOffset)},p("historyMore")))}function et(t){return F.default.createElement(Tr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit,t.parentIndex,t.id]),...t})}function Tr(t){let[e,i]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("fileHistory")),e&&F.default.createElement(Dr,{...t}))}var M=G(require("react"),1);function Ot(t,{width:e,height:i,signal:n,timeoutMs:o=1e4,createURL:d=a=>URL.createObjectURL(a),revokeURL:p=a=>URL.revokeObjectURL(a),createImage:c=()=>new Image}={}){return new Promise((a,l)=>{if(n?.aborted){l(n.reason);return}if(t?.type!=="image/png"||t.size>2*1024*1024||!Number.isInteger(e)||!Number.isInteger(i)||e<1||i<1||e>8192||i>8192||e*i>16e6||!Number.isFinite(o)||o<=0){l(new Error("Invalid image preview"));return}let b,h,N,v=!1,g=!1,m=()=>{g||(g=!0,h&&(h.src=""),b&&p(b))},k=()=>{clearTimeout(N),n?.removeEventListener("abort",y)},f=x=>{v||(v=!0,k(),m(),l(x))},y=()=>f(n.reason||new Error("Image cancelled"));try{b=d(t),h=c(),n?.addEventListener("abort",y,{once:!0}),N=setTimeout(()=>f(new Error("Image decode timed out")),o),h.src=b,Promise.resolve(h.decode()).then(()=>{if(!v){if(n?.aborted){y();return}if(h.naturalWidth!==e||h.naturalHeight!==i){f(new Error("Image dimensions mismatch"));return}v=!0,k(),a({url:b,dispose:m})}},f)}catch(x){f(x)}})}function Br({side:t,sessionId:e,repositoryId:i,commit:n,parentIndex:o,id:d,rpc:p,t:c,onRediscover:a}){let[l,b]=(0,M.useState)(null),[h,N]=(0,M.useState)(""),[v,g]=(0,M.useState)(0);return(0,M.useEffect)(()=>{let m=new AbortController,k;return b(null),N(""),(async()=>{let f=await p("vcs/commit-image",{sessionId:e,repositoryId:i,commit:n,parentIndex:o,id:d,side:t},m.signal);if(m.signal.aborted)return;if(f.absent){b(f);return}if(f.mime!=="image/png"||typeof f.base64!="string"||f.base64.length>2796204||!Number.isInteger(f.bytes)||f.bytes<1||f.bytes>2097152)throw Error(c("imageInvalid"));let y=atob(f.base64);if(y.length!==f.bytes)throw Error(c("imageInvalid"));let x=new Blob([Uint8Array.from(y,u=>u.charCodeAt(0))],{type:f.mime});if(k=await Ot(x,{width:f.width,height:f.height,signal:m.signal}),m.signal.aborted){k.dispose();return}b({...f,url:k.url})})().catch(f=>{m.signal.aborted||(N(f.message),f.code==="vcs/rediscover-required"&&a())}),()=>{m.abort(),k?.dispose()}},[t,e,i,n,o,d,v]),M.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":c(t==="left"?"imageBefore":"imageAfter")},M.default.createElement("h5",null,c(t==="left"?"imageBefore":"imageAfter")),h?M.default.createElement("p",{role:"alert"},h," ",M.default.createElement("button",{onClick:()=>g(m=>m+1)},c("retry"))):l?M.default.createElement(M.default.Fragment,null,M.default.createElement("p",null,M.default.createElement("code",null,l.commit)," \xB7 ",l.path),l.absent?M.default.createElement("p",null,c("imageAbsent")):M.default.createElement(M.default.Fragment,null,M.default.createElement("p",null,l.width," \xD7 ",l.height," \xB7 ",l.bytes," B"),M.default.createElement("img",{src:l.url,alt:l.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),l.metadataStripped&&M.default.createElement("p",null,c("imageMetadata")))):M.default.createElement("p",{role:"status"},c("loading")))}function tt(t){let[e,i]=(0,M.useState)(!1);return M.default.createElement("div",null,M.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("imageCompare")),e&&M.default.createElement(M.default.Fragment,null,M.default.createElement("p",null,t.t("imageScope")),M.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(n=>M.default.createElement(Br,{key:n,...t,side:n})))))}var D=G(require("react"),1);function Fr({sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,rpc:d,t:p,onRediscover:c}){let[a,l]=(0,D.useState)(null),[b,h]=(0,D.useState)(""),[N,v]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let g=new AbortController;return l(null),h(""),d("vcs/blame",{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o},g.signal).then(m=>{g.signal.aborted||l(m)}).catch(m=>{g.signal.aborted||(h(m.message),m.code==="vcs/rediscover-required"&&c())}),()=>g.abort()},[t,e,i,n,o,N]),b?D.default.createElement("p",{role:"alert"},b," ",D.default.createElement("button",{onClick:()=>v(g=>g+1)},p("retry"))):a?D.default.createElement("section",{"aria-label":p("blame")},D.default.createElement("p",null,p("blameScope")),a.notice&&D.default.createElement("p",{role:"status"},a.notice),a.truncated&&D.default.createElement("p",{role:"status"},p("blameLimit")),!a.notice&&!a.lines.length&&D.default.createElement("p",null,p("blameEmpty")),!!a.lines.length&&D.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},D.default.createElement("table",null,D.default.createElement("thead",null,D.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(g=>D.default.createElement("th",{key:g,scope:"col"},p(g))))),D.default.createElement("tbody",null,a.lines.map(g=>D.default.createElement("tr",{key:g.line},D.default.createElement("th",{scope:"row"},g.line),D.default.createElement("td",null,D.default.createElement("code",{title:g.commit},g.commit.slice(0,10))),D.default.createElement("td",null,g.author),D.default.createElement("td",null,g.summary),D.default.createElement("td",null,D.default.createElement("pre",{style:{margin:0}},g.text)))))))):D.default.createElement("p",{role:"status"},p("loading"))}function rt(t){let[e,i]=(0,D.useState)(!1);return D.default.createElement("div",null,D.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("blame")),e&&D.default.createElement(Fr,{...t}))}function me({sessionId:t,repositoryId:e,commit:i,parentIndex:n,base:o,target:d,id:p,rpc:c,t:a,onRediscover:l,onSelectCommit:b}){let[h,N]=(0,q.useState)(null),[v,g]=(0,q.useState)(""),[m,k]=(0,q.useState)(0);return(0,q.useEffect)(()=>{let f=new AbortController;return N(null),g(""),c(o?"vcs/revision-compare":"vcs/commit-compare",o?{sessionId:t,repositoryId:e,base:o,target:d,id:p}:{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:p},f.signal).then(y=>{f.signal.aborted||N(y)}).catch(y=>{f.signal.aborted||(g(y.message),y.code==="vcs/rediscover-required"&&l())}),()=>f.abort()},[t,e,i,n,o,d,p,m]),v?q.default.createElement("p",{role:"alert"},v," ",q.default.createElement("button",{onClick:()=>k(f=>f+1)},a("retry"))):h?q.default.createElement("section",null,q.default.createElement("h4",null,h.path),q.default.createElement("p",null,h.left.label," \u2194 ",h.right.label),h.notice&&q.default.createElement("p",{role:"status"},h.notice),h.binary?q.default.createElement("p",null,a("binary")):q.default.createElement(Re,{comparison:h,identity:JSON.stringify(o?[t,e,o,d,p]:[t,e,i,n,p]),t:a}),i&&!o&&q.default.createElement(et,{onSelectCommit:b,key:JSON.stringify([t,e,i,n,p]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:p,rpc:c,t:a,onRediscover:l}),i&&!o&&q.default.createElement(rt,{key:JSON.stringify([t,e,i,n,p]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:p,rpc:c,t:a,onRediscover:l}),i&&!o&&q.default.createElement(tt,{key:JSON.stringify([t,e,i,n,p]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:p,rpc:c,t:a,onRediscover:l})):q.default.createElement("p",{role:"status"},a("loading"))}function jt(t,e=""){let i=e.trim().toLowerCase();return i?t.filter(n=>[n.id,n.author,n.subject].some(o=>o?.toLowerCase().includes(i))):t}function Pe(t,e=""){let i=e.trim().toLowerCase();return i?t.filter(n=>[n.path,n.oldPath].some(o=>o?.toLowerCase().includes(i))):t}function ot(t){return P.default.createElement(Mr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Mr({sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:d,onSelectCommit:p}){let[c,a]=(0,P.useState)(null),[l,b]=(0,P.useState)(""),[h,N]=(0,P.useState)(0),[v,g]=(0,P.useState)(null),[m,k]=(0,P.useState)(""),[f,y]=(0,P.useState)(0);if((0,P.useEffect)(()=>{let u=new AbortController;return g(null),k(""),n("vcs/commit",{sessionId:t,repositoryId:e,commit:i,parentIndex:h},u.signal).then(B=>{u.signal.aborted||g(B)}).catch(B=>{u.signal.aborted||(k(B.message),B.code==="vcs/rediscover-required"&&d())}),()=>u.abort()},[t,e,i,h,f]),m)return P.default.createElement("p",{role:"alert"},m," ",P.default.createElement("button",{onClick:()=>y(u=>u+1)},o("retry")));if(!v)return P.default.createElement("p",{role:"status"},o("loading"));let x=Pe(v.changes,l);return P.default.createElement("section",{"aria-label":o("commitDetails")},P.default.createElement("h3",null,v.subject),P.default.createElement("code",null,v.id),P.default.createElement("p",null,v.author," \xB7 ",v.date),v.messageTruncated&&P.default.createElement("p",{role:"status"},o("commitMessageLimit")),v.message&&P.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},v.message),v.parents.length>1&&P.default.createElement("label",null,o("commitParent")," ",P.default.createElement("select",{"aria-label":o("commitParent"),value:h,onChange:u=>{a(null),g(null),N(Number(u.target.value))}},v.parents.map((u,B)=>P.default.createElement("option",{key:u,value:B},B+1,": ",u.slice(0,10))))),P.default.createElement("p",null,v.parent||o("commitRoot")," \u2192 ",v.id.slice(0,10)),P.default.createElement("label",null,o("commitFileSearch")," ",P.default.createElement("input",{"aria-label":o("commitFileSearch"),value:l,onChange:u=>{b(u.target.value),a(null)}})),P.default.createElement("span",null," ",x.length," / ",v.changes.length),P.default.createElement("ul",null,x.map(u=>P.default.createElement("li",{key:u.id},P.default.createElement("button",{"aria-pressed":c===u.id,onClick:()=>a(u.id)},u.status," \xB7 ",u.oldPath?u.oldPath+" \u2192 ":"",u.path)))),!!v.changes.length&&!x.length&&P.default.createElement("p",{role:"status"},o("emptySearch")),!v.changes.length&&P.default.createElement("p",null,o("commitNoChanges")),c&&P.default.createElement(me,{key:c,sessionId:t,repositoryId:e,commit:i,parentIndex:h,id:c,onSelectCommit:p,rpc:n,t:o,onRediscover:d}),P.default.createElement(Ze,{key:JSON.stringify([t,e,i]),sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:d}))}var j=G(require("react"),1);function It(t){if(!Array.isArray(t))throw new Error("Invalid graph commits");let e=t.slice(0,200),i=new Map,n=[],o=[],d=c=>typeof c=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(c);for(let[c,a]of e.entries()){if(!a||!d(a.id)||!Array.isArray(a.parents)||i.has(a.id))throw new Error("Invalid graph node");i.set(a.id,c),n.push({id:a.id,row:c})}let p=!1;for(let c of e){let a=new Set;for(let l of c.parents){if(o.length===1e3){p=!0;break}if(!d(l)||l.length!==c.id.length||l===c.id||a.has(l))throw new Error("Invalid graph parent");a.add(l);let b=i.get(l);if(b!==void 0&&b<=i.get(c.id))throw new Error("Graph requires child-before-parent order");o.push({from:c.id,to:l,missing:b===void 0})}if(p)break}return{nodes:n,edges:o,nodesTruncated:t.length>200,edgesTruncated:p}}function Ut(t){let e=new Map(t.nodes.map(n=>[n.id,n.row])),i=[];return t.edges.filter(n=>!n.missing).map(n=>{let o=e.get(n.from),d=e.get(n.to),p=i.findIndex(c=>c<o);return p<0&&(p=i.length),i[p]=d,{...n,lane:p,start:o,end:d}})}function Hr({commits:t,selected:e,onSelect:i,t:n}){let o;try{o=It(t)}catch{return j.default.createElement("p",{role:"alert"},n("graphInvalid"))}let d=Ut(o),p=Math.max(100,48+12*Math.max(0,...d.map(a=>a.lane))),c=Math.max(40,o.nodes.length*36);return j.default.createElement("section",{"aria-label":n("historyGraph")},j.default.createElement("p",null,n("graphScope")),(o.nodesTruncated||o.edgesTruncated)&&j.default.createElement("p",{role:"status"},n("graphLimit")),j.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},j.default.createElement("svg",{width:p,height:c,"aria-hidden":"true",style:{flexShrink:0}},d.map(a=>{let l=a.start*36+18,b=a.end*36+18,h=35+a.lane*12;return j.default.createElement("path",{key:a.from+a.to,d:"M 12 "+l+" C "+h+" "+l+", "+h+" "+b+", 12 "+b,fill:"none",stroke:"currentColor",opacity:"0.45"})}),o.nodes.map(a=>j.default.createElement("circle",{key:a.id,cx:"12",cy:a.row*36+18,r:"4",fill:"currentColor"}))),j.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},o.nodes.map(a=>j.default.createElement("li",{key:a.id,style:{height:36,whiteSpace:"nowrap"}},j.default.createElement("button",{title:a.id,"aria-current":e===a.id?!0:void 0,style:e===a.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:l=>{if(l.altKey||l.ctrlKey||l.metaKey||l.shiftKey)return;let b=l.key==="ArrowDown"?Math.min(a.row+1,o.nodes.length-1):l.key==="ArrowUp"?Math.max(0,a.row-1):l.key==="Home"?0:l.key==="End"?o.nodes.length-1:null;b!==null&&(l.preventDefault(),l.stopPropagation(),l.currentTarget.closest("ol").querySelectorAll("button")[b]?.focus())},onClick:()=>i(a.id)},j.default.createElement("code",null,a.id.slice(0,10))," ",t[a.row].subject))))),j.default.createElement("details",null,j.default.createElement("summary",null,n("graphRelations")),j.default.createElement("ul",null,o.edges.map(a=>j.default.createElement("li",{key:a.from+a.to},j.default.createElement("code",null,a.from)," \u2192 ",j.default.createElement("code",null,a.to),a.missing?" \xB7 "+n("graphMissing"):"")))))}function st(t){let[e,i]=(0,j.useState)(!1);return j.default.createElement("div",null,j.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("historyGraph")),e&&j.default.createElement(Hr,{...t}))}var C=G(require("react"),1);function Or({sessionId:t,repositoryId:e,base:i,target:n,rpc:o,t:d,onRediscover:p}){let[c,a]=(0,C.useState)(null),[l,b]=(0,C.useState)(""),[h,N]=(0,C.useState)(0),[v,g]=(0,C.useState)(null),[m,k]=(0,C.useState)("");if((0,C.useEffect)(()=>{let y=new AbortController;return a(null),b(""),g(null),o("vcs/revision-changes",{sessionId:t,repositoryId:e,base:i,target:n},y.signal).then(x=>{y.signal.aborted||a(x)}).catch(x=>{y.signal.aborted||(b(x.message),x.code==="vcs/rediscover-required"&&p())}),()=>y.abort()},[t,e,i,n,h]),l)return C.default.createElement("p",{role:"alert"},l," ",C.default.createElement("button",{onClick:()=>N(y=>y+1)},d("retry")));if(!c)return C.default.createElement("p",{role:"status"},d("loading"));let f=Pe(c.changes,m);return C.default.createElement("div",null,C.default.createElement("label",null,d("commitFileSearch")," ",C.default.createElement("input",{"aria-label":d("commitFileSearch"),value:m,onChange:y=>{k(y.target.value),g(null)}})),C.default.createElement("span",null," ",f.length," / ",c.changes.length),!!c.changes.length&&!f.length&&C.default.createElement("p",{role:"status"},d("emptySearch")),!c.changes.length&&C.default.createElement("p",null,d("revisionEmpty")),C.default.createElement("ul",null,f.map(y=>C.default.createElement("li",{key:y.id},C.default.createElement("button",{"aria-pressed":v===y.id,onClick:()=>g(y.id)},y.status," \xB7 ",y.oldPath?y.oldPath+" \u2192 ":"",y.path)))),v&&C.default.createElement(me,{key:v,sessionId:t,repositoryId:e,base:i,target:n,id:v,rpc:o,t:d,onRediscover:p}))}function it(t){return C.default.createElement(jr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function jr({commits:t,sessionId:e,repositoryId:i,rpc:n,t:o,onRediscover:d}){let[p,c]=(0,C.useState)(""),[a,l]=(0,C.useState)(""),[b,h]=(0,C.useState)([]),[N,v]=(0,C.useState)(!1),[g,m]=(0,C.useState)(0),[k,f]=(0,C.useState)(!1),[y,x]=(0,C.useState)("");return(0,C.useEffect)(()=>{if(!g)return;let u=new AbortController;return f(!0),x(""),n("vcs/references",{sessionId:e,repositoryId:i},u.signal).then(B=>{u.signal.aborted||(h(B.references),v(!0))}).catch(B=>{u.signal.aborted||(x(B.message),B.code==="vcs/rediscover-required"&&d())}).finally(()=>{u.signal.aborted||f(!1)}),()=>u.abort()},[e,i,g]),C.default.createElement("section",{"aria-label":o("revisionTitle")},C.default.createElement("h3",null,o("revisionTitle")),C.default.createElement("p",null,o("revisionScope")),C.default.createElement("button",{disabled:k,onClick:()=>m(u=>u+1)},o("revisionLoadRefs")),C.default.createElement("p",null,o("revisionRefsScope")),N&&!k&&!y&&C.default.createElement("p",{role:"status"},b.length?`${o("revisionRefsCount")}: ${b.length}`:o("revisionRefsEmpty")),k&&C.default.createElement("p",{role:"status"},o("loading")),y&&C.default.createElement("p",{role:"alert"},y),[[p,c,"revisionBase"],[a,l,"revisionTarget"]].map(([u,B,K])=>C.default.createElement("label",{key:K},o(K)," ",C.default.createElement("select",{"aria-label":o(K),value:u,onChange:S=>B(S.target.value)},C.default.createElement("option",{value:""},"\u2014"),!!t.length&&C.default.createElement("optgroup",{label:o("revisionLoadedCommits")},t.map(S=>C.default.createElement("option",{key:S.id,value:S.id},S.id.slice(0,10)," \xB7 ",S.subject))),!!b.length&&C.default.createElement("optgroup",{label:o("revisionLocalRefs")},b.map(S=>C.default.createElement("option",{key:S.name,value:S.commit},S.name," \xB7 ",S.commit.slice(0,10)))),u&&!t.some(S=>S.id===u)&&!b.some(S=>S.commit===u)&&C.default.createElement("option",{value:u},u)))),C.default.createElement("button",{disabled:!p||!a,onClick:()=>{c(a),l(p)}},o("revisionSwap")),C.default.createElement("p",{style:{overflowWrap:"anywhere"}},C.default.createElement("code",null,p||"\u2014")," \u2192 ",C.default.createElement("code",null,a||"\u2014")),p&&a&&C.default.createElement(Or,{key:JSON.stringify([e,i,p,a]),sessionId:e,repositoryId:i,base:p,target:a,rpc:n,t:o,onRediscover:d}))}function nt(t){return T.default.createElement(Ir,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Ir({sessionId:t,repositoryId:e,rpc:i,t:n,onRediscover:o}){let[d,p]=(0,T.useState)(null),[c,a]=(0,T.useState)(""),[l,b]=(0,T.useState)({commits:[],snapshot:null,nextOffset:null}),[h,N]=(0,T.useState)(0),[v,g]=(0,T.useState)(0),[m,k]=(0,T.useState)(!0),[f,y]=(0,T.useState)("");(0,T.useEffect)(()=>{let u=new AbortController;return k(!0),y(""),i("vcs/history",{sessionId:t,repositoryId:e,offset:h,limit:50,...h?{snapshot:l.snapshot}:{}},u.signal).then(B=>{u.signal.aborted||b(K=>({...B,commits:h?[...K.commits,...B.commits]:B.commits}))}).catch(B=>{u.signal.aborted||(y(B.message),B.code==="vcs/rediscover-required"&&o())}).finally(()=>{u.signal.aborted||k(!1)}),()=>u.abort()},[t,e,h,v]);let x=jt(l.commits,c);return T.default.createElement("section",{className:"vcs-history","aria-label":n("history"),"aria-busy":m},T.default.createElement("p",null,n("historyListOnly")),T.default.createElement("label",null,n("historySearch")," ",T.default.createElement("input",{"aria-label":n("historySearch"),value:c,onChange:u=>{a(u.target.value),p(null)}})),T.default.createElement("span",null," ",x.length," / ",l.commits.length),!!l.commits.length&&!x.length&&T.default.createElement("p",{role:"status"},n("historyNoMatch")),T.default.createElement("ol",null,x.map(u=>T.default.createElement("li",{key:u.id},T.default.createElement("button",{"aria-pressed":d===u.id,onClick:()=>p(u.id)},u.subject),T.default.createElement("div",null,T.default.createElement("code",{title:u.id},u.id.slice(0,10))," \xB7 ",u.author," \xB7 ",T.default.createElement("time",{dateTime:u.date},u.date))))),m&&T.default.createElement("p",{role:"status"},n("loading")),f&&T.default.createElement("p",{role:"alert"},f," ",T.default.createElement("button",{onClick:()=>g(u=>u+1)},n("retry"))),!m&&!f&&!l.commits.length&&T.default.createElement("p",null,n("historyEmpty")),l.truncated&&T.default.createElement("p",{role:"status"},n("historyLimit")),!f&&l.nextOffset!==null&&T.default.createElement("button",{disabled:m,onClick:()=>N(l.nextOffset)},n("historyMore")),!!l.commits.length&&T.default.createElement(st,{commits:l.commits,selected:d,onSelect:p,t:n}),T.default.createElement(it,{commits:l.commits,sessionId:t,repositoryId:e,rpc:i,t:n,onRediscover:o}),d&&T.default.createElement(ot,{key:d,sessionId:t,repositoryId:e,commit:d,onSelectCommit:p,rpc:i,t:n,onRediscover:o}))}var Wt={zh:{workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u7684\u8BB0\u5F55\u4E5F\u4F1A\u5305\u542B\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u4EC5\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG \u666E\u901A\u6587\u4EF6\uFF1B\u6BCF\u4FA7\u6700\u591A 2 MiB\u30011600 \u4E07\u50CF\u7D20\u3002\u5143\u6570\u636E\u88AB\u79FB\u9664\uFF0C\u4E0D\u9002\u7528\u4E8E\u8272\u5F69\u7CBE\u786E\u6027\u5BA1\u9605\u3002\u5DE5\u4F5C\u533A\u4FEE\u6539\u4E0D\u5305\u542B\u5728\u5185\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u4EC5\u672C\u5730\u5206\u652F\u548C\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\uFF0C\u6700\u591A 1000 \u6761\uFF1B\u4E0D fetch\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryScope:"Exact-path history at the pinned commit. Does not follow renames; includes deletion and recreation at the same path.",blame:"Blame",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG regular files only; at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Working changes are excluded.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches and commit tags only, at most 1000 refs; no fetch. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local branches and tags",revisionRefsCount:"Selectable references loaded"}};function zt(t,e,i,n){let o=t.target;if(!e?.contains(o)||t.defaultPrevented||t.isComposing||o?.closest?.(".monaco-editor")||o?.closest?.(".vcs-history"))return null;if(t.key==="Escape"&&o===i&&n)return"clear";let d=o?.isContentEditable||o?.closest?.('input,textarea,select,[role="textbox"]');if(d&&o!==i)return null;if((t.ctrlKey||t.metaKey)&&!t.altKey&&!t.shiftKey&&t.key?.toLowerCase()==="f")return"search";if(!d&&t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.shiftKey){if(t.key==="ArrowLeft")return"previous";if(t.key==="ArrowRight")return"next"}return null}var qt=t=>"dsh-vcs:project:v1:"+t;function Gt(t,e){if(!t)return"";try{let i=(e??globalThis.localStorage)?.getItem(qt(t));return typeof i=="string"&&i.length<=1024?i:""}catch{return""}}function Jt(t,e,i){if(!(!t||!e))try{(i??globalThis.localStorage)?.setItem(qt(t),e)}catch{}}function _t(t,e=""){return t.find(i=>i.id===e)?.id||t.find(i=>i.relativePath===".")?.id||t[0]?.id||""}var he=(t,e)=>JSON.stringify([t,e]),ve=(t,e=".")=>[t.type.toUpperCase(),t.relativePath==="."?e:t.relativePath||".",t.branch].filter(Boolean).join(" \xB7 "),De=(t,e="all")=>t.type==="git"&&["staged","unstaged"].includes(e)?e:"all",Kt=(t="",e="")=>t===e?0:t<e?-1:1;function at(t=[]){let e={id:"",name:"",directories:new Map,files:[],count:0};for(let n of t){let o=String(n.path||"").split("/").filter(Boolean);if(!o.length)continue;let d=e;for(let p of o.slice(0,-1)){let c=d.id?d.id+"/"+p:p;d.directories.has(p)||d.directories.set(p,{id:c,name:p,directories:new Map,files:[],count:0}),d=d.directories.get(p),d.count++}d.files.push(n)}let i=n=>({...n,directories:[...n.directories.values()].sort((o,d)=>Kt(o.name,d.name)).map(i),files:[...n.files].sort((o,d)=>Kt(o.path,d.path))});return i(e)}function Vt(t=[],e){let i=t.findIndex(n=>n.id===e);return{index:i<0?0:i+1,total:t.length}}function Qt(t=[],e,i){if(!t.length||!["previous","next"].includes(i))return null;let n=t.findIndex(p=>p.id===e),o=i==="next"?1:-1,d=n<0?i==="next"?-1:0:n;return t[(d+o+t.length)%t.length]||null}function Xt(t=""){let e=String(t).split("/").filter(Boolean);return e.slice(0,-1).map((i,n)=>e.slice(0,n+1).join("/"))}function lt(t,e=[]){for(let i of t?.directories||[])e.push(i.id),lt(i,e);return e}function Yt(t=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[t]||t}function $t(t=[]){return t.reduce((e,i)=>{let n=Yt(i.status);return e.all++,e[n]=(e[n]||0)+1,e},{all:0})}function Wr(t=[],e="",i="all"){let n=e.toLowerCase();return t.filter(o=>(i==="all"||Yt(o.status)===i)&&o.path.toLowerCase().includes(n)).sort((o,d)=>o.path.localeCompare(d.path))}function Zt(t,e,i="",n="all"){return t.map(o=>({...e[o.id],repository:o,changes:Wr(e[o.id]?.changes,i,n)}))}function Rt(t,e,i=""){if(!i||!t||t.cwd!==e.cwd)return e;let n=new Map(t.repositories.map(o=>[o.id,o]));for(let o of e.repositories)n.set(o.id,o);return{...e,repositories:[...n.values()],truncated:t.truncated||e.truncated,warnings:[...t.warnings||[],...e.warnings||[]]}}function er(t=2){if(!Number.isInteger(t)||t<1||t>2)throw new RangeError("Status concurrency must be 1 or 2");let e=0,i=[];function n(){for(;e<t&&i.length;){let o=i.shift();if(o.signal?.removeEventListener("abort",o.abort),o.signal?.aborted){o.reject(new Error("Aborted"));continue}e++,Promise.resolve().then(()=>{if(o.signal?.aborted)throw new Error("Aborted");return o.run()}).then(o.resolve,o.reject).finally(()=>{e--,n()})}}return(o,d)=>new Promise((p,c)=>{let a={run:o,signal:d,resolve:p,reject:c,abort:null};if(a.abort=()=>{let l=i.indexOf(a);l>=0&&(i.splice(l,1),c(new Error("Aborted")))},d?.aborted){c(new Error("Aborted"));return}d?.addEventListener("abort",a.abort,{once:!0}),i.push(a),n()})}var tr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},rr=t=>new URL("vcs-assets/"+t,document.baseURI).href;function or(){return r.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},r.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),r.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var zr=["slots","layout","locale","connection","uiSession"];function qr(t){t.effect(()=>t.locale.register("local.vcs",Wt));let e=t.locale.bind("local.vcs"),i=er(2);async function n(c,a,l){let b=await t.connection.rpc.call("/vcs-rpc",c,a,l);if(!b.ok){let h=new Error(b.error?.message||String(b.error||e("error")));throw h.code=b.error?.code,h}return b.value}function o(c){let a=c.useSessions(l=>Object.values(l.byId).find(b=>(b.retainedBy.mainView??0)>0));return r.default.createElement(d,{key:JSON.stringify([a?.id,a?.cwd])},r.default.createElement(p,{session:a}))}class d extends r.default.Component{state={error:null};static getDerivedStateFromError(a){return{error:a}}render(){return this.state.error?r.default.createElement("section",{className:"vcs-root"},r.default.createElement("style",null,Xe),r.default.createElement("div",{className:"vcs-message vcs-error"},e("error"),r.default.createElement("button",{onClick:()=>this.setState({error:null})},e("retry")),r.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")))):this.props.children}}function p({session:c}){(0,r.useSyncExternalStore)(s=>t.locale.subscribe(s),()=>t.locale.getSnapshot(),()=>t.locale.getSnapshot());let a=c?.id,[l,b]=(0,r.useState)("all"),[h,N]=(0,r.useState)(0),[v,g]=(0,r.useState)(null),[m,k]=(0,r.useState)({}),[f,y]=(0,r.useState)(()=>Gt(c?.cwd)),[x,u]=(0,r.useState)(0),[B,K]=(0,r.useState)(""),[S,X]=(0,r.useState)(""),[U,Te]=(0,r.useState)(null),[E,se]=(0,r.useState)(null),[ge,dt]=(0,r.useState)(!1),[sr,ct]=(0,r.useState)(!1),[R,pt]=(0,r.useState)(""),[Be,ie]=(0,r.useState)(""),[_,ut]=(0,r.useState)(""),[ft,mt]=(0,r.useState)(!1),[Y,Fe]=(0,r.useState)(""),[be,ht]=(0,r.useState)("all"),[ee,vt]=(0,r.useState)(!0),[gt,Me]=(0,r.useState)({}),[ne,ir]=(0,r.useState)(!0),[He,nr]=(0,r.useState)(!1),[Oe,ar]=(0,r.useState)(!1),[ye,ae]=(0,r.useState)("content"),[bt,yt]=(0,r.useState)(0),[xt,lr]=(0,r.useState)(!1),[je,Ie]=(0,r.useState)({added:0,deleted:0,count:0}),[J,wt]=(0,r.useState)(!1),kt=(0,r.useRef)(null),Ue=(0,r.useRef)(null),te=(0,r.useRef)(null),We=(0,r.useRef)(null),xe=(0,r.useRef)(null),ze=(0,r.useRef)(null),Ct=(0,r.useRef)(null),we=(0,r.useRef)(null),qe=(0,r.useRef)(null),Ge=(0,r.useRef)(null),Je=(0,r.useRef)(!1),ke=(0,r.useRef)(!1),$=v?.repositories||[],le=$.filter(s=>s.id===f);(0,r.useEffect)(()=>{$.some(s=>s.id===f)&&Jt(c?.cwd,f)},[c?.cwd,f,v]);let de=()=>{Ct.current?.abort(),we.current?.abort(),se(null),Te(null),ie(""),ae("content"),Ie({added:0,deleted:0,count:0})},Ce=()=>{ke.current=!1,de(),qe.current?.abort(),Ge.current=v,g(null),k({}),X(B.trim()),u(s=>s+1)},Ke=()=>{ke.current||(ke.current=!0,de(),qe.current?.abort(),Ge.current=null,g(null),k({}),X(""),u(s=>s+1))},St=(s=!1)=>{Je.current=s,s||de(),s||k({}),N(w=>w+1)};(0,r.useEffect)(()=>{let s=new AbortController;return qe.current=s,pt(""),dt(!!a),a&&n("vcs/repositories",{sessionId:a,...S?{subdirectory:S}:{}},s.signal).then(w=>{if(!s.signal.aborted){let A=Rt(Ge.current,w,S);ke.current=!1,y(H=>_t(A.repositories,H)),g(A)}}).catch(w=>{s.signal.aborted||pt(w.message)}).finally(()=>{s.signal.aborted||dt(!1)}),()=>s.abort()},[a,x,S]),(0,r.useEffect)(()=>{let s=new AbortController,w=Je.current;Ct.current=s,Je.current=!1,w||(k({}),ie(""));for(let A of le){let H=De(A,l);i(()=>n("vcs/status",{sessionId:a,repositoryId:A.id,mode:H},s.signal),s.signal).then(W=>{s.signal.aborted||k(V=>({...V,[A.id]:{...W,mode:H}}))}).catch(W=>{if(!s.signal.aborted){if(W.code==="vcs/rediscover-required"){Ke();return}k(V=>({...V,[A.id]:{error:W.message,changes:[],mode:H}}))}})}return()=>s.abort()},[a,v,f,l,h]),(0,r.useEffect)(()=>{let s=()=>{a&&f&&document.visibilityState==="visible"&&St(!0)};return window.addEventListener("focus",s),()=>window.removeEventListener("focus",s)},[a,f,l]);let Se=$.find(s=>s.id===U?.repositoryId),ce=U?m[U.repositoryId]:null;(0,r.useEffect)(()=>{let s=new AbortController;return we.current=s,se(null),ie(""),Ie({added:0,deleted:0,count:0}),ae("content"),ct(!!U&&!!ce),U&&ce&&Se&&n("vcs/compare",{sessionId:a,repositoryId:U.repositoryId,mode:De(Se,l),id:U.id},s.signal).then(w=>{s.signal.aborted||se(w)}).catch(w=>{if(!s.signal.aborted){if(w.code==="vcs/rediscover-required"){Ke();return}ie(w.message)}}).finally(()=>{s.signal.aborted||ct(!1)}),()=>s.abort()},[U,ce,a,l]),(0,r.useEffect)(()=>{let s=!1,w,A=new AbortController;wt(!1),ut("");let H=document.createElement("link");return H.rel="stylesheet",H.href=rr("editor.css"),Ue.current.parentNode.appendChild(H),Ae(rr("editor.js")+"?v="+encodeURIComponent(Le)+"&retry="+bt,{signal:A.signal}).then(W=>{s||(w=W.createDiff(Ue.current,{onStats:Ie}),te.current=w,wt(!0))}).catch(W=>{s||ut(W.message)}),()=>{s=!0,A.abort(),w?.dispose(),te.current=null,H.remove()}},[bt]),(0,r.useEffect)(()=>{J&&E&&!E.binary&&te.current?.setContent(E,JSON.stringify([a,v?.cwd,U?.repositoryId,l,U?.id,E.path]))},[J,E,a,v,U,l]),(0,r.useEffect)(()=>{te.current?.options({sideBySide:ne,ignoreWhitespace:He,wrap:Oe})},[J,ne,He,Oe]);let pe=Zt(le,m,Y,be),re=pe.flatMap(s=>s.changes),dr=$t(ce?.changes),_e=Vt(re,U?.id),Et=()=>{Fe(""),ht("all")},cr=async()=>{let s=E?.path||Q?.path;if(s)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(s);else{let w=document.createElement("textarea");try{if(w.value=s,w.style.cssText="position:fixed;opacity:0",document.body.appendChild(w),w.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{w.remove()}}mt(!0),window.setTimeout(()=>mt(!1),1500)}catch{ie(e("copyFailed"))}};(0,r.useEffect)(()=>{let s=w=>{let A=zt(w,kt.current,xe.current,!!Y);A&&(w.preventDefault(),A==="search"?(xe.current?.focus(),xe.current?.select()):A==="clear"?Fe(""):Ve(A))};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[Y,re,U]);let Nt=s=>Me(w=>{let A={...w};for(let H of pe)for(let W of lt(at(H.changes)))A[H.repository.id+"\0"+W]=!s;return A}),pr=()=>{let s=Q;!s||!U||(vt(!0),Et(),Me(w=>{let A={...w};for(let H of Xt(s.path))A[U.repositoryId+"\0"+H]=!1;return A}),ze.current=he(U.repositoryId,s.id))};(0,r.useEffect)(()=>{let s=ze.current;if(!s)return;let w=[...We.current?.querySelectorAll("button[data-vcs-change]")||[]].find(A=>A.dataset.vcsChange===s);w&&(w.scrollIntoView({block:"nearest"}),w.focus(),ze.current=null)},[ee,Y,be,gt,pe]);let Ve=s=>{let w=Qt(re,U?.id,s);w&&(we.current?.abort(),se(null),ae("content"),Te({repositoryId:f,id:w.id}))},At=ge||le.some(s=>!m[s.id]),Q=ce?.changes?.find(s=>s.id===U?.id),Z=E?.properties,Qe=Z?[...new Set([...Object.keys(Z.left||{}),...Object.keys(Z.right||{})])].filter(s=>Z.left?.[s]!==Z.right?.[s]):[],ue=s=>tr[s?.status]||s?.status?.slice(0,1).toUpperCase()||"M",Lt=E?.binary?[E.left.label,E.right.label].filter(Boolean).join(" \u2194 "):"",oe=Be||(sr?e("loading"):a?At&&!Q?e("loading"):R||($.length?Q?E?.binary?e("binary")+(Lt?" "+e("binaryComparison",{files:Lt}):""):E?!J&&!_?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession")),ur=s=>{let w=We.current,A=w?[...w.querySelectorAll("button[data-vcs-item]")]:[],H=A.indexOf(s.target);if(H<0)return;let W;if(s.key==="ArrowDown")W=A[H+1];else if(s.key==="ArrowUp")W=A[H-1];else if(s.key==="Home")W=A[0];else if(s.key==="End")W=A.at(-1);else if(s.key==="ArrowRight"&&s.target.dataset.vcsDirectory==="closed"){s.preventDefault(),s.target.click();return}else if(s.key==="ArrowLeft"&&s.target.dataset.vcsDirectory==="open"){s.preventDefault(),s.target.click();return}else return;s.preventDefault(),W?.focus()},Pt=({entry:s,compact:w=!1,depth:A=0})=>{let H=s.path.lastIndexOf("/");return r.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":he(f,s.id),"aria-current":U?.repositoryId===f&&U?.id===s.id?"true":void 0,style:{paddingInlineStart:8+A*14},title:(s.oldPath?s.oldPath+" \u2192 ":"")+s.path+" \xB7 "+e(ue(s)),onClick:()=>{we.current?.abort(),se(null),ae("content"),Te({repositoryId:f,id:s.id})}},r.default.createElement("span",{className:"vcs-status","data-status":ue(s)},ue(s)),r.default.createElement("span",{className:"vcs-filename"},w?s.path.slice(H+1):s.path,s.oldPath&&r.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",s.oldPath)))},Dt=({node:s,repository:w,depth:A=0})=>r.default.createElement(r.default.Fragment,null,s.directories.map(H=>{let W=w.id+"\0"+H.id,V=!!gt[W];return r.default.createElement(r.default.Fragment,{key:W},r.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":V?"closed":"open","aria-expanded":!V,style:{paddingInlineStart:8+A*14},onClick:()=>Me(fr=>({...fr,[W]:!V}))},r.default.createElement("span",{"aria-hidden":"true"},V?"\u203A":"\u2304"),H.name,r.default.createElement("small",null,H.count)),!V&&r.default.createElement(Dt,{node:H,repository:w,depth:A+1}))}),s.files.map(H=>r.default.createElement(Pt,{key:he(w.id,H.id),entry:H,compact:s.id!=="",depth:A})));return r.default.createElement("section",{ref:kt,className:"vcs-root","aria-label":e("title")},r.default.createElement("style",null,Xe),r.default.createElement("header",{className:"vcs-top"},r.default.createElement(or,null),r.default.createElement("h1",{className:"vcs-title"},e("title")),r.default.createElement("span",{className:"vcs-badge"},e("readonly")),r.default.createElement("span",{className:"vcs-spacer"}),r.default.createElement("select",{"aria-label":e("repositories"),value:f,disabled:ge||!$.length,onChange:s=>{de(),k({}),y(s.target.value)}},!$.length&&r.default.createElement("option",{value:""},e("repositories")),$.map(s=>r.default.createElement("option",{key:s.id,value:s.id},ve(s,e("workspaceRoot"))))),r.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",r.default.createElement("select",{"aria-label":e("gitMode"),value:l,disabled:!le.some(s=>s.type==="git"),onChange:s=>{de(),k({}),b(s.target.value)}},["all","unstaged","staged"].map(s=>r.default.createElement("option",{key:s,value:s},e(s))))),r.default.createElement("button",{onClick:St,disabled:At||!a},e("refresh")),r.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")),r.default.createElement("div",{className:"vcs-path",title:v?.cwd||c?.cwd},e("session"),": ",v?.cwd||c?.cwd||"\u2014"),r.default.createElement("form",{className:"vcs-discovery",onSubmit:s=>{s.preventDefault(),Ce()}},r.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:B,onChange:s=>K(s.target.value)}),r.default.createElement("button",{disabled:!a||ge},e("rescan")),r.default.createElement("span",null,e("scanHint"))),v?.truncated&&r.default.createElement("div",{className:"vcs-notice"},e("truncated")),(v?.warnings||[]).map((s,w)=>r.default.createElement("div",{className:"vcs-notice",key:w},typeof s=="string"?s:s.message||JSON.stringify(s)))),le.some(s=>s.type==="git")&&r.default.createElement(r.default.Fragment,null,r.default.createElement("button",{"aria-expanded":xt,onClick:()=>lr(s=>!s)},e("history")),xt&&r.default.createElement(nt,{key:JSON.stringify([a,f,h,x]),sessionId:a,repositoryId:f,rpc:n,t:e,onRediscover:Ke})),r.default.createElement("div",{className:"vcs-body"},r.default.createElement("aside",{className:"vcs-files"},r.default.createElement("div",{className:"vcs-filter"},r.default.createElement("input",{ref:xe,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:Y,onChange:s=>Fe(s.target.value)}),(Y||be!=="all")&&r.default.createElement("button",{className:"vcs-clear-filter",onClick:Et},e("clearFilters"))),r.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(s=>r.default.createElement("button",{key:s,"aria-pressed":be===s,onClick:()=>ht(s)},e(s==="all"?"allFiles":tr[s]||"M")," ",r.default.createElement("small",null,dr[s]||0)))),r.default.createElement("div",{className:"vcs-count"},r.default.createElement("span",null,re.length," ",e("files")),r.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),r.default.createElement("button",{"aria-pressed":ee,onClick:()=>vt(!ee)},e(ee?"tree":"list"))),ee&&r.default.createElement("div",{className:"vcs-tree-actions"},r.default.createElement("button",{onClick:()=>Nt(!0)},e("expandAll")),r.default.createElement("button",{onClick:()=>Nt(!1)},e("collapseAll")),r.default.createElement("button",{onClick:pr,disabled:!Q},e("revealSelected"))),r.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:We,onKeyDown:ur},pe.map(s=>{let w=s.repository;return r.default.createElement("section",{className:"vcs-repository",key:w.id,"aria-label":ve(w,e("workspaceRoot"))},r.default.createElement("div",{className:"vcs-repository-heading",title:w.root},r.default.createElement("strong",null,ve(w,e("workspaceRoot"))),r.default.createElement("small",null,w.type==="svn"?e("svnBase"):e(De(w,l)))),s.error?r.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},s.error,r.default.createElement("button",{onClick:Ce},e("rescan"))):m[w.id]?ee?r.default.createElement(Dt,{node:at(s.changes),repository:w}):s.changes.map(A=>r.default.createElement(Pt,{key:he(w.id,A.id),entry:A})):r.default.createElement("div",{className:"vcs-message"},e("loading")),!s.error&&m[w.id]&&!s.changes.length&&r.default.createElement("div",{className:"vcs-message"},e(Y?"emptySearch":"clean")))}),!pe.length&&r.default.createElement("div",{className:"vcs-message"},ge?e("loading"):R||e(a?"noRepo":"noSession"),R&&r.default.createElement("button",{onClick:Ce},e("rescan"))))),r.default.createElement("main",{className:"vcs-detail"},r.default.createElement("div",{className:"vcs-filehead"},r.default.createElement("strong",{title:E?.path||Q?.path},Se?ve(Se,e("workspaceRoot"))+" / ":"",E?.path||Q?.path||e("pick")),r.default.createElement("button",{className:"vcs-copy-path",disabled:!(E?.path||Q?.path),onClick:cr},e(ft?"copied":"copyPath")),ft&&r.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),r.default.createElement("span",{className:"vcs-spacer"}),E&&!E.binary&&J&&r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"vcs-add"},"+",je.added),r.default.createElement("span",{className:"vcs-del"},"\u2212",je.deleted))),_&&r.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",r.default.createElement("button",{onClick:()=>yt(s=>s+1)},e("retry")),r.default.createElement("details",null,r.default.createElement("summary",null,e("diagnostics")),_)),E&&r.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},r.default.createElement("span",{className:"vcs-context-status","data-status":ue(E)},e(ue(E))),E.oldPath&&r.default.createElement("span",{className:"vcs-context-rename",title:E.oldPath+" \u2192 "+E.path},E.oldPath," ",r.default.createElement("b",null,"\u2192")," ",E.path),r.default.createElement("span",null,E.left.label||"\u2014"," ",r.default.createElement("b",null,"\u2194")," ",E.right.label||"\u2014"),(E.left.encoding||E.right.encoding)&&r.default.createElement("span",null,e("encoding"),": ",E.left.encoding||"\u2014"," / ",E.right.encoding||"\u2014")),E?.notice&&r.default.createElement("div",{className:"vcs-notice"},E.notice),Qe.length>0&&r.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(s=>r.default.createElement("button",{key:s,"aria-pressed":ye===s,onClick:()=>ae(s)},e(s),s==="properties"?" ("+Qe.length+")":""))),r.default.createElement("div",{className:"vcs-labels"},r.default.createElement("span",null,E?.left.label||"\u2014",E?.left.encoding?" \xB7 "+E.left.encoding:""),r.default.createElement("span",null,E?.right.label||"\u2014",E?.right.encoding?" \xB7 "+E.right.encoding:"")),r.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!oe||ye!=="content",style:ye==="properties"?{display:"none"}:void 0},r.default.createElement("div",{className:"vcs-editor",ref:Ue,style:_?{display:"none"}:void 0}),_&&E&&!E.binary&&!oe&&r.default.createElement(fe,{comparison:E,labels:Ne(e)}),oe&&r.default.createElement("div",{className:"vcs-message "+(R||Be||_?"vcs-error":""),role:"status"},oe,(R||Be||_)&&r.default.createElement("button",{onClick:()=>_?yt(s=>s+1):Ce()},e(_?"retry":"rescan")))),ye==="properties"&&r.default.createElement("div",{className:"vcs-properties"},r.default.createElement("table",null,r.default.createElement("thead",null,r.default.createElement("tr",null,r.default.createElement("th",null,e("properties")),r.default.createElement("th",null,E?.left.label||e("before")),r.default.createElement("th",null,E?.right.label||e("after")))),r.default.createElement("tbody",null,Qe.map(s=>r.default.createElement("tr",{key:s},r.default.createElement("th",null,s),r.default.createElement("td",null,Z.left?.[s]??"\u2014"),r.default.createElement("td",null,Z.right?.[s]??"\u2014")))))),r.default.createElement("footer",{className:"vcs-toolbar"},r.default.createElement("button",{disabled:!J,"aria-pressed":ne,onClick:()=>ir(!ne)},e(ne?"side":"inline")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!J,checked:He,onChange:s=>nr(s.target.checked)}),e("whitespace")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!J,checked:Oe,onChange:s=>ar(s.target.checked)}),e("wrap")),r.default.createElement("span",{className:"vcs-spacer"}),J&&r.default.createElement("span",null,je.count," ",e("changes")),r.default.createElement("button",{disabled:!J||!E||!!oe,onClick:()=>te.current?.navigate("previous")},e("previous")),r.default.createElement("button",{disabled:!J||!E||!!oe,onClick:()=>te.current?.navigate("next")},e("next")),_e.index>0&&r.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:_e.index,total:_e.total})),r.default.createElement("span",{className:"vcs-toolbar-separator"}),r.default.createElement("button",{title:e("fileShortcut"),disabled:!re.length,onClick:()=>Ve("previous")},e("previousFile")),r.default.createElement("button",{title:e("fileShortcut"),disabled:!re.length,onClick:()=>Ve("next")},e("nextFile"))))))}t.slots.inject("main",()=>t.slots.register({name:"main",key:"local-vcs"},o)),t.slots.inject("sidebar.panellist",()=>t.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>e("title"),order:65},or))}
|
|
95
|
+
`;var G=K(require("react"),1);function Bt(t){return t===""?[]:t.split(/\r\n|\n|\r/)}function Ft(t="",e=""){let s=Bt(t),n=Bt(e),o=0;for(;o<s.length&&o<n.length&&s[o]===n[o];)o++;let c=0;for(;c<s.length-o&&c<n.length-o&&s[s.length-c-1]===n[n.length-c-1];)c++;let u=s.length-c,p=n.length-c,a=u-o,l=p-o,h=a&&l?(a+1)*(l+1):0,g=h>2e5,S=[],w=0;function N(d,b){w++,!(S.length>=2e3)&&S.push({left:d===null?null:{number:d+1,text:s[d]},right:b===null?null:{number:b+1,text:n[b]},kind:d===null?"insert":b===null?"delete":s[d]===n[b]?"equal":"replace"})}for(let d=0;d<o;d++)N(d,d);if(g||!a||!l)for(let d=0;d<Math.max(a,l);d++)N(d<a?o+d:null,d<l?o+d:null);else{let d=l+1,b=new Uint32Array(h);for(let x=a-1;x>=0;x--)for(let k=l-1;k>=0;k--)b[x*d+k]=s[o+x]===n[o+k]?b[(x+1)*d+k+1]+1:Math.max(b[(x+1)*d+k],b[x*d+k+1]);let f=0,v=0;for(;f<a||v<l;)f<a&&v<l&&s[o+f]===n[o+v]?N(o+f++,o+v++):f<a&&(v===l||b[(f+1)*d+v]>=b[f*d+v+1])?N(o+f++,null):N(null,o+v++)}for(let d=0;d<c;d++)N(u+d,p+d);return{rows:S,approximate:g,truncated:w>S.length,totalRows:w,omittedRows:w-S.length,leftLineCount:s.length,rightLineCount:n.length,lcsCells:g?0:h}}var Cr={before:"Before",after:"After",readonly:"Read-only text comparison",approximate:"Approximate alignment: the changed region is too large for exact matching; lines are paired by position.",truncated:"Preview truncated to the first 2,000 aligned lines; additional lines are not shown.",empty:"Both versions are empty."},Ye={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Nr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Er={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Ar={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function fe({comparison:t,labels:e={}}){let s=t?.left?.text??"",n=t?.right?.text??"",o=(0,G.useMemo)(()=>Ft(s,n),[s,n]),c=p=>e[p]??Cr[p],u=(p,a,l)=>{let h=p&&l!=="equal";return G.default.createElement("td",{style:{...Ye,background:h?a==="left"?"#d6454520":"#259b4920":void 0}},G.default.createElement("div",{style:Nr},G.default.createElement("span",{style:Er},p?.number??""),G.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},h?a==="left"?"\u2212":"+":""),G.default.createElement("pre",{style:Ar},p?.text??"")))};return G.default.createElement("section",{className:"vcs-text-comparison","aria-label":c("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},o.approximate&&G.default.createElement("div",{role:"status",style:{padding:8}},c("approximate")),o.truncated&&G.default.createElement("div",{role:"status",style:{padding:8}},c("truncated")," (",2e3," / ",o.totalRows,")"),G.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},G.default.createElement("thead",null,G.default.createElement("tr",null,G.default.createElement("th",{scope:"col",style:{...Ye,padding:8,overflowWrap:"anywhere"}},t?.left?.label||c("before")),G.default.createElement("th",{scope:"col",style:{...Ye,padding:8,overflowWrap:"anywhere"}},t?.right?.label||c("after")))),G.default.createElement("tbody",null,o.rows.map((p,a)=>G.default.createElement("tr",{key:a,"data-kind":p.kind},u(p.left,"left",p.kind),u(p.right,"right",p.kind))))),!o.rows.length&&G.default.createElement("p",{style:{padding:8}},c("empty")))}function Ee(t){return{before:t("textBefore"),after:t("textAfter"),readonly:t("textReadonly"),empty:t("textEmpty"),approximate:t("approximate"),truncated:t("textTruncated")}}var B=K(require("react"),1);var D=K(require("react"),1);var L=K(require("react"),1);var W=K(require("react"),1);function $e({sessionId:t,repositoryId:e,commit:s,path:n,rpc:o,t:c,onRediscover:u,onClose:p}){let[a,l]=(0,W.useState)(null),[h,g]=(0,W.useState)(""),[S,w]=(0,W.useState)(0);return(0,W.useEffect)(()=>{let N=new AbortController;return l(null),g(""),o("vcs/tree-file",{sessionId:t,repositoryId:e,commit:s,path:n},N.signal).then(d=>{N.signal.aborted||l(d)}).catch(d=>{N.signal.aborted||(g(d.message),d.code==="vcs/rediscover-required"&&u())}),()=>N.abort()},[t,e,s,n,S]),W.default.createElement("section",{"aria-label":c("treePreview")},W.default.createElement("h4",null,n),W.default.createElement("button",{onClick:p},c("treeClose")),W.default.createElement("p",null,W.default.createElement("code",null,s)),h?W.default.createElement("p",{role:"alert"},h," ",W.default.createElement("button",{onClick:()=>w(N=>N+1)},c("retry"))):a?W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,W.default.createElement("code",null,a.oid)," \xB7 ",c("encoding"),": ",a.encoding||"\u2014"),a.notice&&W.default.createElement("p",{role:"status"},a.notice),a.binary?W.default.createElement("p",null,c("binary")):a.text===""?W.default.createElement("p",null,c("treeEmpty")):W.default.createElement("pre",{tabIndex:0,style:{maxHeight:480,overflow:"auto",whiteSpace:"pre",tabSize:4}},a.text)):W.default.createElement("p",{role:"status"},c("loading")))}function Ht(t,e="",s=""){let n=e?e+"/":"",o=s.toLowerCase();return t.filter(c=>{let u=c.path.slice(n.length);return c.path.startsWith(n)&&u.length>0&&!u.includes("/")&&u.toLowerCase().includes(o)}).sort((c,u)=>+(u.type==="tree")-+(c.type==="tree")||(c.path<u.path?-1:c.path>u.path?1:0))}function Lr({sessionId:t,repositoryId:e,commit:s,rpc:n,t:o,onRediscover:c}){let[u,p]=(0,L.useState)(null),[a,l]=(0,L.useState)(""),[h,g]=(0,L.useState)(0),[S,w]=(0,L.useState)(""),[N,d]=(0,L.useState)(0),[b,f]=(0,L.useState)(""),[v,x]=(0,L.useState)(null);if((0,L.useEffect)(()=>{let m=new AbortController;return p(null),l(""),n("vcs/tree",{sessionId:t,repositoryId:e,commit:s},m.signal).then(z=>{m.signal.aborted||p(z)}).catch(z=>{m.signal.aborted||(l(z.message),z.code==="vcs/rediscover-required"&&c())}),()=>m.abort()},[t,e,s,h]),a)return L.default.createElement("p",{role:"alert"},a," ",L.default.createElement("button",{onClick:()=>g(m=>m+1)},o("retry")));if(!u)return L.default.createElement("p",{role:"status"},o("loading"));let k=S?S+"/":"",U=Ht(u.entries,S,b),T=m=>{w(m),d(0),f(""),x(null)};return L.default.createElement("section",{"aria-label":o("historicalTree")},L.default.createElement("p",null,o("historicalTreeScope")),L.default.createElement("code",null,s),L.default.createElement("p",null,S||"/"," ",S&&L.default.createElement("button",{onClick:()=>T(S.includes("/")?S.slice(0,S.lastIndexOf("/")):"")},o("treeUp"))),L.default.createElement("label",null,o("treeSearch")," ",L.default.createElement("input",{"aria-label":o("treeSearch"),value:b,onChange:m=>{f(m.target.value),d(0),x(null)}})),L.default.createElement("p",null,U.length," ",o("treeEntries")),!U.length&&b&&L.default.createElement("p",{role:"status"},o("emptySearch")),L.default.createElement("ul",null,U.slice(N*100,N*100+100).map(m=>L.default.createElement("li",{key:m.path},m.type==="tree"?L.default.createElement("button",{onClick:()=>T(m.path)},m.path.slice(k.length),"/"):m.type==="blob"&&["100644","100755"].includes(m.mode)?L.default.createElement("button",{"aria-pressed":v===m.path,onClick:()=>x(m.path)},m.path.slice(k.length)):L.default.createElement("span",null,m.path.slice(k.length))," \xB7 ",L.default.createElement("code",null,m.mode," ",m.type," ",L.default.createElement("span",{title:m.oid},m.oid.slice(0,10)))))),N>0&&L.default.createElement("button",{onClick:()=>{d(m=>m-1),x(null)}},o("treePrevious")),(N+1)*100<U.length&&L.default.createElement("button",{onClick:()=>{d(m=>m+1),x(null)}},o("treeNext")),v&&L.default.createElement($e,{key:JSON.stringify([t,e,s,v]),sessionId:t,repositoryId:e,commit:s,rpc:n,t:o,onRediscover:c,path:v,onClose:()=>x(null)}))}function Ze(t){return L.default.createElement(Pr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Pr(t){let[e,s]=(0,L.useState)(!1);return L.default.createElement("div",null,L.default.createElement("button",{"aria-expanded":e,onClick:()=>s(n=>!n)},t.t("historicalTree")),e&&L.default.createElement(Lr,{...t}))}var J=K(require("react"),1);var O=K(require("react"),1);function Mt({load:t,node:e,comparison:s,key:n,onReady:o=()=>{},onError:c=()=>{}}){let u=new AbortController,p,a=!1,l=()=>{let g=p;p=void 0,g?.dispose()};return{done:Promise.resolve().then(()=>(u.signal.throwIfAborted(),t(u.signal))).then(g=>{a||(p=g.createDiff(e),p.setContent(s,n),a||o(p))}).catch(g=>{try{l()}finally{a||c(g)}}),dispose(){a||(a=!0,u.abort(),l())}}}async function Ae(t,{signal:e,fetcher:s=fetch,importer:n=o=>import(o)}={}){let o=await s(t,{credentials:"same-origin",cache:"no-cache",signal:e});if(!o.ok)throw new Error("Editor resource HTTP "+o.status+" ("+t+"). "+(o.status===401?"Refresh the authenticated DSH page.":o.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let c=o.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(c))throw new Error("Editor resource returned "+(c||"no Content-Type")+" instead of JavaScript.");return await o.arrayBuffer(),e?.throwIfAborted(),n(t)}var Le="0.3.43";function Re({comparison:t,identity:e,t:s}){let n=(0,O.useRef)(null),o=(0,O.useRef)(null),[c,u]=(0,O.useState)(!0),[p,a]=(0,O.useState)(!1),[l,h]=(0,O.useState)(!1),[g,S]=(0,O.useState)(!1),[w,N]=(0,O.useState)(!1),[d,b]=(0,O.useState)("");return(0,O.useEffect)(()=>{if(N(!1),b(""),!g)return;let f=k=>new URL("vcs-assets/"+k,document.baseURI).href,v=document.createElement("link");v.rel="stylesheet",v.href=f("editor.css"),n.current.parentNode.appendChild(v);let x=Mt({node:n.current,comparison:t,key:e,load:k=>Ae(f("editor.js")+"?v="+encodeURIComponent(Le)+"&retry=0",{signal:k}),onReady:k=>{o.current=k,N(!0)},onError:k=>b(k.message)});return()=>{o.current=null;try{x.dispose()}finally{v.remove()}}},[g,t,e]),(0,O.useEffect)(()=>{w&&o.current?.options({sideBySide:c,ignoreWhitespace:p,wrap:l})},[w,c,p,l]),O.default.createElement("div",null,O.default.createElement("button",{"aria-pressed":g,onClick:()=>S(f=>!f)},s(g?"historyBasic":"historyAdvanced")),w&&O.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8}},O.default.createElement("button",{"aria-pressed":c,onClick:()=>u(f=>!f)},s(c?"side":"inline")),O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:p,onChange:f=>a(f.target.checked)}),s("whitespace")),O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:l,onChange:f=>h(f.target.checked)}),s("wrap")),O.default.createElement("button",{onClick:()=>o.current?.navigate("previous")},s("previous")),O.default.createElement("button",{onClick:()=>o.current?.navigate("next")},s("next"))),g&&!w&&!d&&O.default.createElement("p",{role:"status"},s("loading")),d&&O.default.createElement("p",{role:"status"},s("fallback")," ",d),O.default.createElement("div",{style:{position:"relative",height:360}},O.default.createElement("div",{ref:n,style:{position:"absolute",inset:0,visibility:w?"visible":"hidden"},"aria-hidden":!w}),!w&&O.default.createElement(fe,{comparison:t,labels:Ee(s)})))}var F=K(require("react"),1);function Tr({sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:o,rpc:c,t:u,onRediscover:p,onSelectCommit:a}){let[l,h]=(0,F.useState)({commits:[],nextOffset:null}),[g,S]=(0,F.useState)(0),[w,N]=(0,F.useState)(0),[d,b]=(0,F.useState)(!0),[f,v]=(0,F.useState)("");return(0,F.useEffect)(()=>{let x=new AbortController;return b(!0),v(""),c("vcs/file-history",{sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:o,offset:g,limit:50},x.signal).then(k=>{x.signal.aborted||h(U=>({...k,commits:g?[...U.commits,...k.commits]:k.commits}))}).catch(k=>{x.signal.aborted||(v(k.message),k.code==="vcs/rediscover-required"&&p())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[t,e,s,n,o,g,w]),F.default.createElement("section",{"aria-label":u("fileHistory"),"aria-busy":d},F.default.createElement("p",null,u("fileHistoryScope")),F.default.createElement("p",{style:{overflowWrap:"anywhere"}},l.path," \xB7 ",F.default.createElement("code",null,s)),F.default.createElement("ol",null,l.commits.map(x=>F.default.createElement("li",{key:x.id},F.default.createElement("code",{title:x.id},x.id.slice(0,10))," \xB7 ",a?F.default.createElement("button",{onClick:()=>a(x.id,l.path)},x.subject):x.subject,F.default.createElement("div",null,x.author," \xB7 ",F.default.createElement("time",{dateTime:x.date},x.date))))),d&&F.default.createElement("p",{role:"status"},u("loading")),f&&F.default.createElement("p",{role:"alert"},f," ",F.default.createElement("button",{onClick:()=>N(x=>x+1)},u("retry"))),!d&&!f&&!l.commits.length&&F.default.createElement("p",null,u("historyEmpty")),l.truncated&&F.default.createElement("p",{role:"status"},u("historyLimit")),!f&&l.nextOffset!==null&&F.default.createElement("button",{disabled:d,onClick:()=>S(l.nextOffset)},u("historyMore")))}function et(t){return F.default.createElement(Br,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit,t.parentIndex,t.id]),...t})}function Br(t){let[e,s]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":e,onClick:()=>s(n=>!n)},t.t("fileHistory")),e&&F.default.createElement(Tr,{...t}))}var H=K(require("react"),1);function Ot(t,{width:e,height:s,signal:n,timeoutMs:o=1e4,createURL:c=a=>URL.createObjectURL(a),revokeURL:u=a=>URL.revokeObjectURL(a),createImage:p=()=>new Image}={}){return new Promise((a,l)=>{if(n?.aborted){l(n.reason);return}if(t?.type!=="image/png"||t.size>2*1024*1024||!Number.isInteger(e)||!Number.isInteger(s)||e<1||s<1||e>8192||s>8192||e*s>16e6||!Number.isFinite(o)||o<=0){l(new Error("Invalid image preview"));return}let h,g,S,w=!1,N=!1,d=()=>{N||(N=!0,g&&(g.src=""),h&&u(h))},b=()=>{clearTimeout(S),n?.removeEventListener("abort",v)},f=x=>{w||(w=!0,b(),d(),l(x))},v=()=>f(n.reason||new Error("Image cancelled"));try{h=c(t),g=p(),n?.addEventListener("abort",v,{once:!0}),S=setTimeout(()=>f(new Error("Image decode timed out")),o),g.src=h,Promise.resolve(g.decode()).then(()=>{if(!w){if(n?.aborted){v();return}if(g.naturalWidth!==e||g.naturalHeight!==s){f(new Error("Image dimensions mismatch"));return}w=!0,b(),a({url:h,dispose:d})}},f)}catch(x){f(x)}})}function Fr({side:t,sessionId:e,repositoryId:s,commit:n,parentIndex:o,id:c,rpc:u,t:p,onRediscover:a}){let[l,h]=(0,H.useState)(null),[g,S]=(0,H.useState)(""),[w,N]=(0,H.useState)(0);return(0,H.useEffect)(()=>{let d=new AbortController,b;return h(null),S(""),(async()=>{let f=await u("vcs/commit-image",{sessionId:e,repositoryId:s,commit:n,parentIndex:o,id:c,side:t},d.signal);if(d.signal.aborted)return;if(f.absent){h(f);return}if(f.mime!=="image/png"||typeof f.base64!="string"||f.base64.length>2796204||!Number.isInteger(f.bytes)||f.bytes<1||f.bytes>2097152)throw Error(p("imageInvalid"));let v=atob(f.base64);if(v.length!==f.bytes)throw Error(p("imageInvalid"));let x=new Blob([Uint8Array.from(v,k=>k.charCodeAt(0))],{type:f.mime});if(b=await Ot(x,{width:f.width,height:f.height,signal:d.signal}),d.signal.aborted){b.dispose();return}h({...f,url:b.url})})().catch(f=>{d.signal.aborted||(S(f.message),f.code==="vcs/rediscover-required"&&a())}),()=>{d.abort(),b?.dispose()}},[t,e,s,n,o,c,w]),H.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":p(t==="left"?"imageBefore":"imageAfter")},H.default.createElement("h5",null,p(t==="left"?"imageBefore":"imageAfter")),g?H.default.createElement("p",{role:"alert"},g," ",H.default.createElement("button",{onClick:()=>N(d=>d+1)},p("retry"))):l?H.default.createElement(H.default.Fragment,null,H.default.createElement("p",null,H.default.createElement("code",null,l.commit)," \xB7 ",l.path),l.absent?H.default.createElement("p",null,p("imageAbsent")):H.default.createElement(H.default.Fragment,null,H.default.createElement("p",null,l.width," \xD7 ",l.height," \xB7 ",l.bytes," B"),H.default.createElement("img",{src:l.url,alt:l.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),l.metadataStripped&&H.default.createElement("p",null,p("imageMetadata")))):H.default.createElement("p",{role:"status"},p("loading")))}function tt(t){let[e,s]=(0,H.useState)(!1);return H.default.createElement("div",null,H.default.createElement("button",{"aria-expanded":e,onClick:()=>s(n=>!n)},t.t("imageCompare")),e&&H.default.createElement(H.default.Fragment,null,H.default.createElement("p",null,t.t("imageScope")),H.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(n=>H.default.createElement(Fr,{key:n,...t,side:n})))))}var P=K(require("react"),1);function Hr({sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:o,rpc:c,t:u,onRediscover:p,onSelectCommit:a}){let[l,h]=(0,P.useState)(null),[g,S]=(0,P.useState)(""),[w,N]=(0,P.useState)(0);return(0,P.useEffect)(()=>{let d=new AbortController;return h(null),S(""),c("vcs/blame",{sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:o},d.signal).then(b=>{d.signal.aborted||h(b)}).catch(b=>{d.signal.aborted||(S(b.message),b.code==="vcs/rediscover-required"&&p())}),()=>d.abort()},[t,e,s,n,o,w]),g?P.default.createElement("p",{role:"alert"},g," ",P.default.createElement("button",{onClick:()=>N(d=>d+1)},u("retry"))):l?P.default.createElement("section",{"aria-label":u("blame")},P.default.createElement("p",null,u("blameScope")),a&&P.default.createElement("p",null,u("blameNavigation")),l.notice&&P.default.createElement("p",{role:"status"},l.notice),l.truncated&&P.default.createElement("p",{role:"status"},u("blameLimit")),!l.notice&&!l.lines.length&&P.default.createElement("p",null,u("blameEmpty")),!!l.lines.length&&P.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},P.default.createElement("table",null,P.default.createElement("thead",null,P.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(d=>P.default.createElement("th",{key:d,scope:"col"},u(d))))),P.default.createElement("tbody",null,l.lines.map(d=>P.default.createElement("tr",{key:d.line},P.default.createElement("th",{scope:"row"},d.line),P.default.createElement("td",null,a?P.default.createElement("button",{title:d.commit,onClick:()=>a(d.commit)},P.default.createElement("code",null,d.commit.slice(0,10))):P.default.createElement("code",{title:d.commit},d.commit.slice(0,10))),P.default.createElement("td",null,d.author),P.default.createElement("td",null,d.summary),P.default.createElement("td",null,P.default.createElement("pre",{style:{margin:0}},d.text)))))))):P.default.createElement("p",{role:"status"},u("loading"))}function rt(t){let[e,s]=(0,P.useState)(!1);return P.default.createElement("div",null,P.default.createElement("button",{"aria-expanded":e,onClick:()=>s(n=>!n)},t.t("blame")),e&&P.default.createElement(Hr,{...t}))}function me({sessionId:t,repositoryId:e,commit:s,parentIndex:n,base:o,target:c,id:u,rpc:p,t:a,onRediscover:l,onSelectCommit:h}){let[g,S]=(0,J.useState)(null),[w,N]=(0,J.useState)(""),[d,b]=(0,J.useState)(0);return(0,J.useEffect)(()=>{let f=new AbortController;return S(null),N(""),p(o?"vcs/revision-compare":"vcs/commit-compare",o?{sessionId:t,repositoryId:e,base:o,target:c,id:u}:{sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:u},f.signal).then(v=>{f.signal.aborted||S(v)}).catch(v=>{f.signal.aborted||(N(v.message),v.code==="vcs/rediscover-required"&&l())}),()=>f.abort()},[t,e,s,n,o,c,u,d]),w?J.default.createElement("p",{role:"alert"},w," ",J.default.createElement("button",{onClick:()=>b(f=>f+1)},a("retry"))):g?J.default.createElement("section",null,J.default.createElement("h4",null,g.path),J.default.createElement("p",null,g.left.label," \u2194 ",g.right.label),g.notice&&J.default.createElement("p",{role:"status"},g.notice),g.binary?J.default.createElement("p",null,a("binary")):J.default.createElement(Re,{comparison:g,identity:JSON.stringify(o?[t,e,o,c,u]:[t,e,s,n,u]),t:a}),s&&!o&&J.default.createElement(et,{onSelectCommit:h,key:JSON.stringify([t,e,s,n,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:u,rpc:p,t:a,onRediscover:l}),s&&!o&&J.default.createElement(rt,{onSelectCommit:h,key:JSON.stringify([t,e,s,n,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:u,rpc:p,t:a,onRediscover:l}),s&&!o&&J.default.createElement(tt,{key:JSON.stringify([t,e,s,n,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:n,id:u,rpc:p,t:a,onRediscover:l})):J.default.createElement("p",{role:"status"},a("loading"))}function jt(t,e){if(typeof e!="string"||!e)return null;let s=t.filter(n=>n.path===e);return s.length===1&&typeof s[0].id=="string"&&s[0].id?s[0].id:null}function It(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(n=>[n.id,n.author,n.subject].some(o=>o?.toLowerCase().includes(s))):t}function Pe(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(n=>[n.path,n.oldPath].some(o=>o?.toLowerCase().includes(s))):t}function ot(t){return D.default.createElement(Mr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Mr({sessionId:t,repositoryId:e,commit:s,rpc:n,t:o,onRediscover:c,onSelectCommit:u,initialPath:p}){let a=(0,D.useRef)(!0),[l,h]=(0,D.useState)(null),[g,S]=(0,D.useState)(""),[w,N]=(0,D.useState)(0),[d,b]=(0,D.useState)(null),[f,v]=(0,D.useState)(""),[x,k]=(0,D.useState)(0);if((0,D.useEffect)(()=>{let T=new AbortController;return b(null),v(""),n("vcs/commit",{sessionId:t,repositoryId:e,commit:s,parentIndex:w},T.signal).then(m=>{T.signal.aborted||(b(m),a.current&&(a.current=!1,h(jt(m.changes,p))))}).catch(m=>{T.signal.aborted||(v(m.message),m.code==="vcs/rediscover-required"&&c())}),()=>T.abort()},[t,e,s,w,x]),f)return D.default.createElement("p",{role:"alert"},f," ",D.default.createElement("button",{onClick:()=>k(T=>T+1)},o("retry")));if(!d)return D.default.createElement("p",{role:"status"},o("loading"));let U=Pe(d.changes,g);return D.default.createElement("section",{"aria-label":o("commitDetails")},D.default.createElement("h3",null,d.subject),D.default.createElement("code",null,d.id),D.default.createElement("p",null,d.author," \xB7 ",d.date),d.messageTruncated&&D.default.createElement("p",{role:"status"},o("commitMessageLimit")),d.message&&D.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},d.message),d.parents.length>1&&D.default.createElement("label",null,o("commitParent")," ",D.default.createElement("select",{"aria-label":o("commitParent"),value:w,onChange:T=>{h(null),b(null),N(Number(T.target.value))}},d.parents.map((T,m)=>D.default.createElement("option",{key:T,value:m},m+1,": ",T.slice(0,10))))),D.default.createElement("p",null,d.parent||o("commitRoot")," \u2192 ",d.id.slice(0,10)),D.default.createElement("label",null,o("commitFileSearch")," ",D.default.createElement("input",{"aria-label":o("commitFileSearch"),value:g,onChange:T=>{S(T.target.value),h(null)}})),D.default.createElement("span",null," ",U.length," / ",d.changes.length),D.default.createElement("ul",null,U.map(T=>D.default.createElement("li",{key:T.id},D.default.createElement("button",{"aria-pressed":l===T.id,onClick:()=>h(T.id)},T.status," \xB7 ",T.oldPath?T.oldPath+" \u2192 ":"",T.path)))),!!d.changes.length&&!U.length&&D.default.createElement("p",{role:"status"},o("emptySearch")),!d.changes.length&&D.default.createElement("p",null,o("commitNoChanges")),l&&D.default.createElement(me,{key:l,sessionId:t,repositoryId:e,commit:s,parentIndex:w,id:l,onSelectCommit:u,rpc:n,t:o,onRediscover:c}),D.default.createElement(Ze,{key:JSON.stringify([t,e,s]),sessionId:t,repositoryId:e,commit:s,rpc:n,t:o,onRediscover:c}))}var I=K(require("react"),1);function Ut(t){if(!Array.isArray(t))throw new Error("Invalid graph commits");let e=t.slice(0,200),s=new Map,n=[],o=[],c=p=>typeof p=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(p);for(let[p,a]of e.entries()){if(!a||!c(a.id)||!Array.isArray(a.parents)||s.has(a.id))throw new Error("Invalid graph node");s.set(a.id,p),n.push({id:a.id,row:p})}let u=!1;for(let p of e){let a=new Set;for(let l of p.parents){if(o.length===1e3){u=!0;break}if(!c(l)||l.length!==p.id.length||l===p.id||a.has(l))throw new Error("Invalid graph parent");a.add(l);let h=s.get(l);if(h!==void 0&&h<=s.get(p.id))throw new Error("Graph requires child-before-parent order");o.push({from:p.id,to:l,missing:h===void 0})}if(u)break}return{nodes:n,edges:o,nodesTruncated:t.length>200,edgesTruncated:u}}function Wt(t){let e=new Map(t.nodes.map(n=>[n.id,n.row])),s=[];return t.edges.filter(n=>!n.missing).map(n=>{let o=e.get(n.from),c=e.get(n.to),u=s.findIndex(p=>p<o);return u<0&&(u=s.length),s[u]=c,{...n,lane:u,start:o,end:c}})}function Or({commits:t,selected:e,onSelect:s,t:n}){let o;try{o=Ut(t)}catch{return I.default.createElement("p",{role:"alert"},n("graphInvalid"))}let c=Wt(o),u=Math.max(100,48+12*Math.max(0,...c.map(a=>a.lane))),p=Math.max(40,o.nodes.length*36);return I.default.createElement("section",{"aria-label":n("historyGraph")},I.default.createElement("p",null,n("graphScope")),(o.nodesTruncated||o.edgesTruncated)&&I.default.createElement("p",{role:"status"},n("graphLimit")),I.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},I.default.createElement("svg",{width:u,height:p,"aria-hidden":"true",style:{flexShrink:0}},c.map(a=>{let l=a.start*36+18,h=a.end*36+18,g=35+a.lane*12;return I.default.createElement("path",{key:a.from+a.to,d:"M 12 "+l+" C "+g+" "+l+", "+g+" "+h+", 12 "+h,fill:"none",stroke:"currentColor",opacity:"0.45"})}),o.nodes.map(a=>I.default.createElement("circle",{key:a.id,cx:"12",cy:a.row*36+18,r:"4",fill:"currentColor"}))),I.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},o.nodes.map(a=>I.default.createElement("li",{key:a.id,style:{height:36,whiteSpace:"nowrap"}},I.default.createElement("button",{title:a.id,"aria-current":e===a.id?!0:void 0,style:e===a.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:l=>{if(l.altKey||l.ctrlKey||l.metaKey||l.shiftKey)return;let h=l.key==="ArrowDown"?Math.min(a.row+1,o.nodes.length-1):l.key==="ArrowUp"?Math.max(0,a.row-1):l.key==="Home"?0:l.key==="End"?o.nodes.length-1:null;h!==null&&(l.preventDefault(),l.stopPropagation(),l.currentTarget.closest("ol").querySelectorAll("button")[h]?.focus())},onClick:()=>s(a.id)},I.default.createElement("code",null,a.id.slice(0,10))," ",t[a.row].subject))))),I.default.createElement("details",null,I.default.createElement("summary",null,n("graphRelations")),I.default.createElement("ul",null,o.edges.map(a=>I.default.createElement("li",{key:a.from+a.to},I.default.createElement("code",null,a.from)," \u2192 ",I.default.createElement("code",null,a.to),a.missing?" \xB7 "+n("graphMissing"):"")))))}function st(t){let[e,s]=(0,I.useState)(!1);return I.default.createElement("div",null,I.default.createElement("button",{"aria-expanded":e,onClick:()=>s(n=>!n)},t.t("historyGraph")),e&&I.default.createElement(Or,{...t}))}var C=K(require("react"),1);function jr({sessionId:t,repositoryId:e,base:s,target:n,rpc:o,t:c,onRediscover:u}){let[p,a]=(0,C.useState)(null),[l,h]=(0,C.useState)(""),[g,S]=(0,C.useState)(0),[w,N]=(0,C.useState)(null),[d,b]=(0,C.useState)("");if((0,C.useEffect)(()=>{let v=new AbortController;return a(null),h(""),N(null),o("vcs/revision-changes",{sessionId:t,repositoryId:e,base:s,target:n},v.signal).then(x=>{v.signal.aborted||a(x)}).catch(x=>{v.signal.aborted||(h(x.message),x.code==="vcs/rediscover-required"&&u())}),()=>v.abort()},[t,e,s,n,g]),l)return C.default.createElement("p",{role:"alert"},l," ",C.default.createElement("button",{onClick:()=>S(v=>v+1)},c("retry")));if(!p)return C.default.createElement("p",{role:"status"},c("loading"));let f=Pe(p.changes,d);return C.default.createElement("div",null,C.default.createElement("label",null,c("commitFileSearch")," ",C.default.createElement("input",{"aria-label":c("commitFileSearch"),value:d,onChange:v=>{b(v.target.value),N(null)}})),C.default.createElement("span",null," ",f.length," / ",p.changes.length),!!p.changes.length&&!f.length&&C.default.createElement("p",{role:"status"},c("emptySearch")),!p.changes.length&&C.default.createElement("p",null,c("revisionEmpty")),C.default.createElement("ul",null,f.map(v=>C.default.createElement("li",{key:v.id},C.default.createElement("button",{"aria-pressed":w===v.id,onClick:()=>N(v.id)},v.status," \xB7 ",v.oldPath?v.oldPath+" \u2192 ":"",v.path)))),w&&C.default.createElement(me,{key:w,sessionId:t,repositoryId:e,base:s,target:n,id:w,rpc:o,t:c,onRediscover:u}))}function it(t){return C.default.createElement(Ir,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Ir({commits:t,sessionId:e,repositoryId:s,rpc:n,t:o,onRediscover:c}){let[u,p]=(0,C.useState)(""),[a,l]=(0,C.useState)(""),[h,g]=(0,C.useState)([]),[S,w]=(0,C.useState)(!1),[N,d]=(0,C.useState)(0),[b,f]=(0,C.useState)(!1),[v,x]=(0,C.useState)("");return(0,C.useEffect)(()=>{if(!N)return;let k=new AbortController;return f(!0),x(""),n("vcs/references",{sessionId:e,repositoryId:s},k.signal).then(U=>{k.signal.aborted||(g(U.references),w(!0))}).catch(U=>{k.signal.aborted||(x(U.message),U.code==="vcs/rediscover-required"&&c())}).finally(()=>{k.signal.aborted||f(!1)}),()=>k.abort()},[e,s,N]),C.default.createElement("section",{"aria-label":o("revisionTitle")},C.default.createElement("h3",null,o("revisionTitle")),C.default.createElement("p",null,o("revisionScope")),C.default.createElement("button",{disabled:b,onClick:()=>d(k=>k+1)},o("revisionLoadRefs")),C.default.createElement("p",null,o("revisionRefsScope")),S&&!b&&!v&&C.default.createElement("p",{role:"status"},h.length?`${o("revisionRefsCount")}: ${h.length}`:o("revisionRefsEmpty")),b&&C.default.createElement("p",{role:"status"},o("loading")),v&&C.default.createElement("p",{role:"alert"},v),[[u,p,"revisionBase"],[a,l,"revisionTarget"]].map(([k,U,T])=>C.default.createElement("label",{key:T},o(T)," ",C.default.createElement("select",{"aria-label":o(T),value:k,onChange:m=>U(m.target.value)},C.default.createElement("option",{value:""},"\u2014"),!!t.length&&C.default.createElement("optgroup",{label:o("revisionLoadedCommits")},t.map(m=>C.default.createElement("option",{key:m.id,value:m.id},m.id.slice(0,10)," \xB7 ",m.subject))),!!h.length&&C.default.createElement("optgroup",{label:o("revisionLocalRefs")},h.map(m=>C.default.createElement("option",{key:m.name,value:m.commit},m.name," \xB7 ",m.commit.slice(0,10)))),k&&!t.some(m=>m.id===k)&&!h.some(m=>m.commit===k)&&C.default.createElement("option",{value:k},k)))),C.default.createElement("button",{disabled:!u||!a,onClick:()=>{p(a),l(u)}},o("revisionSwap")),C.default.createElement("p",{style:{overflowWrap:"anywhere"}},C.default.createElement("code",null,u||"\u2014")," \u2192 ",C.default.createElement("code",null,a||"\u2014")),u&&a&&C.default.createElement(jr,{key:JSON.stringify([e,s,u,a]),sessionId:e,repositoryId:s,base:u,target:a,rpc:n,t:o,onRediscover:c}))}function nt(t){return B.default.createElement(Ur,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Ur({sessionId:t,repositoryId:e,rpc:s,t:n,onRediscover:o}){let[c,u]=(0,B.useState)({id:null,path:null,revision:0}),[p,a]=(0,B.useState)(""),l=c.id,h=(m,z=null)=>u(j=>({id:m,path:z,revision:j.revision+1})),g=(m,z=null)=>u(j=>({id:m,path:z,revision:j.revision+(z||j.path?1:0)})),[S,w]=(0,B.useState)({commits:[],snapshot:null,nextOffset:null}),[N,d]=(0,B.useState)(0),[b,f]=(0,B.useState)(0),[v,x]=(0,B.useState)(!0),[k,U]=(0,B.useState)("");(0,B.useEffect)(()=>{let m=new AbortController;return x(!0),U(""),s("vcs/history",{sessionId:t,repositoryId:e,offset:N,limit:50,...N?{snapshot:S.snapshot}:{}},m.signal).then(z=>{m.signal.aborted||w(j=>({...z,commits:N?[...j.commits,...z.commits]:z.commits}))}).catch(z=>{m.signal.aborted||(U(z.message),z.code==="vcs/rediscover-required"&&o())}).finally(()=>{m.signal.aborted||x(!1)}),()=>m.abort()},[t,e,N,b]);let T=It(S.commits,p);return B.default.createElement("section",{className:"vcs-history","aria-label":n("history"),"aria-busy":v},B.default.createElement("p",null,n("historyListOnly")),B.default.createElement("label",null,n("historySearch")," ",B.default.createElement("input",{"aria-label":n("historySearch"),value:p,onChange:m=>{a(m.target.value),g(null)}})),B.default.createElement("span",null," ",T.length," / ",S.commits.length),!!S.commits.length&&!T.length&&B.default.createElement("p",{role:"status"},n("historyNoMatch")),B.default.createElement("ol",null,T.map(m=>B.default.createElement("li",{key:m.id},B.default.createElement("button",{"aria-pressed":l===m.id,onClick:()=>g(m.id)},m.subject),B.default.createElement("div",null,B.default.createElement("code",{title:m.id},m.id.slice(0,10))," \xB7 ",m.author," \xB7 ",B.default.createElement("time",{dateTime:m.date},m.date))))),v&&B.default.createElement("p",{role:"status"},n("loading")),k&&B.default.createElement("p",{role:"alert"},k," ",B.default.createElement("button",{onClick:()=>f(m=>m+1)},n("retry"))),!v&&!k&&!S.commits.length&&B.default.createElement("p",null,n("historyEmpty")),S.truncated&&B.default.createElement("p",{role:"status"},n("historyLimit")),!k&&S.nextOffset!==null&&B.default.createElement("button",{disabled:v,onClick:()=>d(S.nextOffset)},n("historyMore")),!!S.commits.length&&B.default.createElement(st,{commits:S.commits,selected:l,onSelect:g,t:n}),B.default.createElement(it,{commits:S.commits,sessionId:t,repositoryId:e,rpc:s,t:n,onRediscover:o}),l&&B.default.createElement(ot,{key:JSON.stringify([l,c.revision]),initialPath:c.path,sessionId:t,repositoryId:e,commit:l,onSelectCommit:h,rpc:s,t:n,onRediscover:o}))}var qt={zh:{workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF1B\u9ED8\u8BA4\u9009\u62E9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u5386\u53F2\u6587\u4EF6\u6216\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u4EC5\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG \u666E\u901A\u6587\u4EF6\uFF1B\u6BCF\u4FA7\u6700\u591A 2 MiB\u30011600 \u4E07\u50CF\u7D20\u3002\u5143\u6570\u636E\u88AB\u79FB\u9664\uFF0C\u4E0D\u9002\u7528\u4E8E\u8272\u5F69\u7CBE\u786E\u6027\u5BA1\u9605\u3002\u5DE5\u4F5C\u533A\u4FEE\u6539\u4E0D\u5305\u542B\u5728\u5185\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u4EC5\u672C\u5730\u5206\u652F\u548C\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\uFF0C\u6700\u591A 1000 \u6761\uFF1B\u4E0D fetch\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details with its first parent selected; no automatic historical file or line navigation.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG regular files only; at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Working changes are excluded.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches and commit tags only, at most 1000 refs; no fetch. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local branches and tags",revisionRefsCount:"Selectable references loaded"}};function zt(t,e,s,n){let o=t.target;if(!e?.contains(o)||t.defaultPrevented||t.isComposing||o?.closest?.(".monaco-editor")||o?.closest?.(".vcs-history"))return null;if(t.key==="Escape"&&o===s&&n)return"clear";let c=o?.isContentEditable||o?.closest?.('input,textarea,select,[role="textbox"]');if(c&&o!==s)return null;if((t.ctrlKey||t.metaKey)&&!t.altKey&&!t.shiftKey&&t.key?.toLowerCase()==="f")return"search";if(!c&&t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.shiftKey){if(t.key==="ArrowLeft")return"previous";if(t.key==="ArrowRight")return"next"}return null}var Gt=t=>"dsh-vcs:project:v1:"+t;function Jt(t,e){if(!t)return"";try{let s=(e??globalThis.localStorage)?.getItem(Gt(t));return typeof s=="string"&&s.length<=1024?s:""}catch{return""}}function Kt(t,e,s){if(!(!t||!e))try{(s??globalThis.localStorage)?.setItem(Gt(t),e)}catch{}}function Vt(t,e=""){return t.find(s=>s.id===e)?.id||t.find(s=>s.relativePath===".")?.id||t[0]?.id||""}var he=(t,e)=>JSON.stringify([t,e]),ge=(t,e=".")=>[t.type.toUpperCase(),t.relativePath==="."?e:t.relativePath||".",t.branch].filter(Boolean).join(" \xB7 "),De=(t,e="all")=>t.type==="git"&&["staged","unstaged"].includes(e)?e:"all",_t=(t="",e="")=>t===e?0:t<e?-1:1;function at(t=[]){let e={id:"",name:"",directories:new Map,files:[],count:0};for(let n of t){let o=String(n.path||"").split("/").filter(Boolean);if(!o.length)continue;let c=e;for(let u of o.slice(0,-1)){let p=c.id?c.id+"/"+u:u;c.directories.has(u)||c.directories.set(u,{id:p,name:u,directories:new Map,files:[],count:0}),c=c.directories.get(u),c.count++}c.files.push(n)}let s=n=>({...n,directories:[...n.directories.values()].sort((o,c)=>_t(o.name,c.name)).map(s),files:[...n.files].sort((o,c)=>_t(o.path,c.path))});return s(e)}function Qt(t=[],e){let s=t.findIndex(n=>n.id===e);return{index:s<0?0:s+1,total:t.length}}function Xt(t=[],e,s){if(!t.length||!["previous","next"].includes(s))return null;let n=t.findIndex(u=>u.id===e),o=s==="next"?1:-1,c=n<0?s==="next"?-1:0:n;return t[(c+o+t.length)%t.length]||null}function Yt(t=""){let e=String(t).split("/").filter(Boolean);return e.slice(0,-1).map((s,n)=>e.slice(0,n+1).join("/"))}function lt(t,e=[]){for(let s of t?.directories||[])e.push(s.id),lt(s,e);return e}function $t(t=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[t]||t}function Zt(t=[]){return t.reduce((e,s)=>{let n=$t(s.status);return e.all++,e[n]=(e[n]||0)+1,e},{all:0})}function qr(t=[],e="",s="all"){let n=e.toLowerCase();return t.filter(o=>(s==="all"||$t(o.status)===s)&&o.path.toLowerCase().includes(n)).sort((o,c)=>o.path.localeCompare(c.path))}function Rt(t,e,s="",n="all"){return t.map(o=>({...e[o.id],repository:o,changes:qr(e[o.id]?.changes,s,n)}))}function er(t,e,s=""){if(!s||!t||t.cwd!==e.cwd)return e;let n=new Map(t.repositories.map(o=>[o.id,o]));for(let o of e.repositories)n.set(o.id,o);return{...e,repositories:[...n.values()],truncated:t.truncated||e.truncated,warnings:[...t.warnings||[],...e.warnings||[]]}}function tr(t=2){if(!Number.isInteger(t)||t<1||t>2)throw new RangeError("Status concurrency must be 1 or 2");let e=0,s=[];function n(){for(;e<t&&s.length;){let o=s.shift();if(o.signal?.removeEventListener("abort",o.abort),o.signal?.aborted){o.reject(new Error("Aborted"));continue}e++,Promise.resolve().then(()=>{if(o.signal?.aborted)throw new Error("Aborted");return o.run()}).then(o.resolve,o.reject).finally(()=>{e--,n()})}}return(o,c)=>new Promise((u,p)=>{let a={run:o,signal:c,resolve:u,reject:p,abort:null};if(a.abort=()=>{let l=s.indexOf(a);l>=0&&(s.splice(l,1),p(new Error("Aborted")))},c?.aborted){p(new Error("Aborted"));return}c?.addEventListener("abort",a.abort,{once:!0}),s.push(a),n()})}var rr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},or=t=>new URL("vcs-assets/"+t,document.baseURI).href;function sr(){return r.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},r.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),r.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var zr=["slots","layout","locale","connection","uiSession"];function Gr(t){t.effect(()=>t.locale.register("local.vcs",qt));let e=t.locale.bind("local.vcs"),s=tr(2);async function n(p,a,l){let h=await t.connection.rpc.call("/vcs-rpc",p,a,l);if(!h.ok){let g=new Error(h.error?.message||String(h.error||e("error")));throw g.code=h.error?.code,g}return h.value}function o(p){let a=p.useSessions(l=>Object.values(l.byId).find(h=>(h.retainedBy.mainView??0)>0));return r.default.createElement(c,{key:JSON.stringify([a?.id,a?.cwd])},r.default.createElement(u,{session:a}))}class c extends r.default.Component{state={error:null};static getDerivedStateFromError(a){return{error:a}}render(){return this.state.error?r.default.createElement("section",{className:"vcs-root"},r.default.createElement("style",null,Xe),r.default.createElement("div",{className:"vcs-message vcs-error"},e("error"),r.default.createElement("button",{onClick:()=>this.setState({error:null})},e("retry")),r.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")))):this.props.children}}function u({session:p}){(0,r.useSyncExternalStore)(i=>t.locale.subscribe(i),()=>t.locale.getSnapshot(),()=>t.locale.getSnapshot());let a=p?.id,[l,h]=(0,r.useState)("all"),[g,S]=(0,r.useState)(0),[w,N]=(0,r.useState)(null),[d,b]=(0,r.useState)({}),[f,v]=(0,r.useState)(()=>Jt(p?.cwd)),[x,k]=(0,r.useState)(0),[U,T]=(0,r.useState)(""),[m,z]=(0,r.useState)(""),[j,Te]=(0,r.useState)(null),[E,se]=(0,r.useState)(null),[ve,dt]=(0,r.useState)(!1),[ir,ct]=(0,r.useState)(!1),[R,pt]=(0,r.useState)(""),[Be,ie]=(0,r.useState)(""),[V,ut]=(0,r.useState)(""),[ft,mt]=(0,r.useState)(!1),[Y,Fe]=(0,r.useState)(""),[be,ht]=(0,r.useState)("all"),[ee,gt]=(0,r.useState)(!0),[vt,He]=(0,r.useState)({}),[ne,nr]=(0,r.useState)(!0),[Me,ar]=(0,r.useState)(!1),[Oe,lr]=(0,r.useState)(!1),[ye,ae]=(0,r.useState)("content"),[bt,yt]=(0,r.useState)(0),[xt,dr]=(0,r.useState)(!1),[je,Ie]=(0,r.useState)({added:0,deleted:0,count:0}),[_,wt]=(0,r.useState)(!1),kt=(0,r.useRef)(null),Ue=(0,r.useRef)(null),te=(0,r.useRef)(null),We=(0,r.useRef)(null),xe=(0,r.useRef)(null),qe=(0,r.useRef)(null),St=(0,r.useRef)(null),we=(0,r.useRef)(null),ze=(0,r.useRef)(null),Ge=(0,r.useRef)(null),Je=(0,r.useRef)(!1),ke=(0,r.useRef)(!1),$=w?.repositories||[],le=$.filter(i=>i.id===f);(0,r.useEffect)(()=>{$.some(i=>i.id===f)&&Kt(p?.cwd,f)},[p?.cwd,f,w]);let de=()=>{St.current?.abort(),we.current?.abort(),se(null),Te(null),ie(""),ae("content"),Ie({added:0,deleted:0,count:0})},Se=()=>{ke.current=!1,de(),ze.current?.abort(),Ge.current=w,N(null),b({}),z(U.trim()),k(i=>i+1)},Ke=()=>{ke.current||(ke.current=!0,de(),ze.current?.abort(),Ge.current=null,N(null),b({}),z(""),k(i=>i+1))},Ct=(i=!1)=>{Je.current=i,i||de(),i||b({}),S(y=>y+1)};(0,r.useEffect)(()=>{let i=new AbortController;return ze.current=i,pt(""),dt(!!a),a&&n("vcs/repositories",{sessionId:a,...m?{subdirectory:m}:{}},i.signal).then(y=>{if(!i.signal.aborted){let A=er(Ge.current,y,m);ke.current=!1,v(M=>Vt(A.repositories,M)),N(A)}}).catch(y=>{i.signal.aborted||pt(y.message)}).finally(()=>{i.signal.aborted||dt(!1)}),()=>i.abort()},[a,x,m]),(0,r.useEffect)(()=>{let i=new AbortController,y=Je.current;St.current=i,Je.current=!1,y||(b({}),ie(""));for(let A of le){let M=De(A,l);s(()=>n("vcs/status",{sessionId:a,repositoryId:A.id,mode:M},i.signal),i.signal).then(q=>{i.signal.aborted||b(Q=>({...Q,[A.id]:{...q,mode:M}}))}).catch(q=>{if(!i.signal.aborted){if(q.code==="vcs/rediscover-required"){Ke();return}b(Q=>({...Q,[A.id]:{error:q.message,changes:[],mode:M}}))}})}return()=>i.abort()},[a,w,f,l,g]),(0,r.useEffect)(()=>{let i=()=>{a&&f&&document.visibilityState==="visible"&&Ct(!0)};return window.addEventListener("focus",i),()=>window.removeEventListener("focus",i)},[a,f,l]);let Ce=$.find(i=>i.id===j?.repositoryId),ce=j?d[j.repositoryId]:null;(0,r.useEffect)(()=>{let i=new AbortController;return we.current=i,se(null),ie(""),Ie({added:0,deleted:0,count:0}),ae("content"),ct(!!j&&!!ce),j&&ce&&Ce&&n("vcs/compare",{sessionId:a,repositoryId:j.repositoryId,mode:De(Ce,l),id:j.id},i.signal).then(y=>{i.signal.aborted||se(y)}).catch(y=>{if(!i.signal.aborted){if(y.code==="vcs/rediscover-required"){Ke();return}ie(y.message)}}).finally(()=>{i.signal.aborted||ct(!1)}),()=>i.abort()},[j,ce,a,l]),(0,r.useEffect)(()=>{let i=!1,y,A=new AbortController;wt(!1),ut("");let M=document.createElement("link");return M.rel="stylesheet",M.href=or("editor.css"),Ue.current.parentNode.appendChild(M),Ae(or("editor.js")+"?v="+encodeURIComponent(Le)+"&retry="+bt,{signal:A.signal}).then(q=>{i||(y=q.createDiff(Ue.current,{onStats:Ie}),te.current=y,wt(!0))}).catch(q=>{i||ut(q.message)}),()=>{i=!0,A.abort(),y?.dispose(),te.current=null,M.remove()}},[bt]),(0,r.useEffect)(()=>{_&&E&&!E.binary&&te.current?.setContent(E,JSON.stringify([a,w?.cwd,j?.repositoryId,l,j?.id,E.path]))},[_,E,a,w,j,l]),(0,r.useEffect)(()=>{te.current?.options({sideBySide:ne,ignoreWhitespace:Me,wrap:Oe})},[_,ne,Me,Oe]);let pe=Rt(le,d,Y,be),re=pe.flatMap(i=>i.changes),cr=Zt(ce?.changes),_e=Qt(re,j?.id),Nt=()=>{Fe(""),ht("all")},pr=async()=>{let i=E?.path||X?.path;if(i)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(i);else{let y=document.createElement("textarea");try{if(y.value=i,y.style.cssText="position:fixed;opacity:0",document.body.appendChild(y),y.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{y.remove()}}mt(!0),window.setTimeout(()=>mt(!1),1500)}catch{ie(e("copyFailed"))}};(0,r.useEffect)(()=>{let i=y=>{let A=zt(y,kt.current,xe.current,!!Y);A&&(y.preventDefault(),A==="search"?(xe.current?.focus(),xe.current?.select()):A==="clear"?Fe(""):Ve(A))};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[Y,re,j]);let Et=i=>He(y=>{let A={...y};for(let M of pe)for(let q of lt(at(M.changes)))A[M.repository.id+"\0"+q]=!i;return A}),ur=()=>{let i=X;!i||!j||(gt(!0),Nt(),He(y=>{let A={...y};for(let M of Yt(i.path))A[j.repositoryId+"\0"+M]=!1;return A}),qe.current=he(j.repositoryId,i.id))};(0,r.useEffect)(()=>{let i=qe.current;if(!i)return;let y=[...We.current?.querySelectorAll("button[data-vcs-change]")||[]].find(A=>A.dataset.vcsChange===i);y&&(y.scrollIntoView({block:"nearest"}),y.focus(),qe.current=null)},[ee,Y,be,vt,pe]);let Ve=i=>{let y=Xt(re,j?.id,i);y&&(we.current?.abort(),se(null),ae("content"),Te({repositoryId:f,id:y.id}))},At=ve||le.some(i=>!d[i.id]),X=ce?.changes?.find(i=>i.id===j?.id),Z=E?.properties,Qe=Z?[...new Set([...Object.keys(Z.left||{}),...Object.keys(Z.right||{})])].filter(i=>Z.left?.[i]!==Z.right?.[i]):[],ue=i=>rr[i?.status]||i?.status?.slice(0,1).toUpperCase()||"M",Lt=E?.binary?[E.left.label,E.right.label].filter(Boolean).join(" \u2194 "):"",oe=Be||(ir?e("loading"):a?At&&!X?e("loading"):R||($.length?X?E?.binary?e("binary")+(Lt?" "+e("binaryComparison",{files:Lt}):""):E?!_&&!V?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession")),fr=i=>{let y=We.current,A=y?[...y.querySelectorAll("button[data-vcs-item]")]:[],M=A.indexOf(i.target);if(M<0)return;let q;if(i.key==="ArrowDown")q=A[M+1];else if(i.key==="ArrowUp")q=A[M-1];else if(i.key==="Home")q=A[0];else if(i.key==="End")q=A.at(-1);else if(i.key==="ArrowRight"&&i.target.dataset.vcsDirectory==="closed"){i.preventDefault(),i.target.click();return}else if(i.key==="ArrowLeft"&&i.target.dataset.vcsDirectory==="open"){i.preventDefault(),i.target.click();return}else return;i.preventDefault(),q?.focus()},Pt=({entry:i,compact:y=!1,depth:A=0})=>{let M=i.path.lastIndexOf("/");return r.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":he(f,i.id),"aria-current":j?.repositoryId===f&&j?.id===i.id?"true":void 0,style:{paddingInlineStart:8+A*14},title:(i.oldPath?i.oldPath+" \u2192 ":"")+i.path+" \xB7 "+e(ue(i)),onClick:()=>{we.current?.abort(),se(null),ae("content"),Te({repositoryId:f,id:i.id})}},r.default.createElement("span",{className:"vcs-status","data-status":ue(i)},ue(i)),r.default.createElement("span",{className:"vcs-filename"},y?i.path.slice(M+1):i.path,i.oldPath&&r.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",i.oldPath)))},Dt=({node:i,repository:y,depth:A=0})=>r.default.createElement(r.default.Fragment,null,i.directories.map(M=>{let q=y.id+"\0"+M.id,Q=!!vt[q];return r.default.createElement(r.default.Fragment,{key:q},r.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":Q?"closed":"open","aria-expanded":!Q,style:{paddingInlineStart:8+A*14},onClick:()=>He(mr=>({...mr,[q]:!Q}))},r.default.createElement("span",{"aria-hidden":"true"},Q?"\u203A":"\u2304"),M.name,r.default.createElement("small",null,M.count)),!Q&&r.default.createElement(Dt,{node:M,repository:y,depth:A+1}))}),i.files.map(M=>r.default.createElement(Pt,{key:he(y.id,M.id),entry:M,compact:i.id!=="",depth:A})));return r.default.createElement("section",{ref:kt,className:"vcs-root","aria-label":e("title")},r.default.createElement("style",null,Xe),r.default.createElement("header",{className:"vcs-top"},r.default.createElement(sr,null),r.default.createElement("h1",{className:"vcs-title"},e("title")),r.default.createElement("span",{className:"vcs-badge"},e("readonly")),r.default.createElement("span",{className:"vcs-spacer"}),r.default.createElement("select",{"aria-label":e("repositories"),value:f,disabled:ve||!$.length,onChange:i=>{de(),b({}),v(i.target.value)}},!$.length&&r.default.createElement("option",{value:""},e("repositories")),$.map(i=>r.default.createElement("option",{key:i.id,value:i.id},ge(i,e("workspaceRoot"))))),r.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",r.default.createElement("select",{"aria-label":e("gitMode"),value:l,disabled:!le.some(i=>i.type==="git"),onChange:i=>{de(),b({}),h(i.target.value)}},["all","unstaged","staged"].map(i=>r.default.createElement("option",{key:i,value:i},e(i))))),r.default.createElement("button",{onClick:Ct,disabled:At||!a},e("refresh")),r.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")),r.default.createElement("div",{className:"vcs-path",title:w?.cwd||p?.cwd},e("session"),": ",w?.cwd||p?.cwd||"\u2014"),r.default.createElement("form",{className:"vcs-discovery",onSubmit:i=>{i.preventDefault(),Se()}},r.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:U,onChange:i=>T(i.target.value)}),r.default.createElement("button",{disabled:!a||ve},e("rescan")),r.default.createElement("span",null,e("scanHint"))),w?.truncated&&r.default.createElement("div",{className:"vcs-notice"},e("truncated")),(w?.warnings||[]).map((i,y)=>r.default.createElement("div",{className:"vcs-notice",key:y},typeof i=="string"?i:i.message||JSON.stringify(i)))),le.some(i=>i.type==="git")&&r.default.createElement(r.default.Fragment,null,r.default.createElement("button",{"aria-expanded":xt,onClick:()=>dr(i=>!i)},e("history")),xt&&r.default.createElement(nt,{key:JSON.stringify([a,f,g,x]),sessionId:a,repositoryId:f,rpc:n,t:e,onRediscover:Ke})),r.default.createElement("div",{className:"vcs-body"},r.default.createElement("aside",{className:"vcs-files"},r.default.createElement("div",{className:"vcs-filter"},r.default.createElement("input",{ref:xe,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:Y,onChange:i=>Fe(i.target.value)}),(Y||be!=="all")&&r.default.createElement("button",{className:"vcs-clear-filter",onClick:Nt},e("clearFilters"))),r.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(i=>r.default.createElement("button",{key:i,"aria-pressed":be===i,onClick:()=>ht(i)},e(i==="all"?"allFiles":rr[i]||"M")," ",r.default.createElement("small",null,cr[i]||0)))),r.default.createElement("div",{className:"vcs-count"},r.default.createElement("span",null,re.length," ",e("files")),r.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),r.default.createElement("button",{"aria-pressed":ee,onClick:()=>gt(!ee)},e(ee?"tree":"list"))),ee&&r.default.createElement("div",{className:"vcs-tree-actions"},r.default.createElement("button",{onClick:()=>Et(!0)},e("expandAll")),r.default.createElement("button",{onClick:()=>Et(!1)},e("collapseAll")),r.default.createElement("button",{onClick:ur,disabled:!X},e("revealSelected"))),r.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:We,onKeyDown:fr},pe.map(i=>{let y=i.repository;return r.default.createElement("section",{className:"vcs-repository",key:y.id,"aria-label":ge(y,e("workspaceRoot"))},r.default.createElement("div",{className:"vcs-repository-heading",title:y.root},r.default.createElement("strong",null,ge(y,e("workspaceRoot"))),r.default.createElement("small",null,y.type==="svn"?e("svnBase"):e(De(y,l)))),i.error?r.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},i.error,r.default.createElement("button",{onClick:Se},e("rescan"))):d[y.id]?ee?r.default.createElement(Dt,{node:at(i.changes),repository:y}):i.changes.map(A=>r.default.createElement(Pt,{key:he(y.id,A.id),entry:A})):r.default.createElement("div",{className:"vcs-message"},e("loading")),!i.error&&d[y.id]&&!i.changes.length&&r.default.createElement("div",{className:"vcs-message"},e(Y?"emptySearch":"clean")))}),!pe.length&&r.default.createElement("div",{className:"vcs-message"},ve?e("loading"):R||e(a?"noRepo":"noSession"),R&&r.default.createElement("button",{onClick:Se},e("rescan"))))),r.default.createElement("main",{className:"vcs-detail"},r.default.createElement("div",{className:"vcs-filehead"},r.default.createElement("strong",{title:E?.path||X?.path},Ce?ge(Ce,e("workspaceRoot"))+" / ":"",E?.path||X?.path||e("pick")),r.default.createElement("button",{className:"vcs-copy-path",disabled:!(E?.path||X?.path),onClick:pr},e(ft?"copied":"copyPath")),ft&&r.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),r.default.createElement("span",{className:"vcs-spacer"}),E&&!E.binary&&_&&r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"vcs-add"},"+",je.added),r.default.createElement("span",{className:"vcs-del"},"\u2212",je.deleted))),V&&r.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",r.default.createElement("button",{onClick:()=>yt(i=>i+1)},e("retry")),r.default.createElement("details",null,r.default.createElement("summary",null,e("diagnostics")),V)),E&&r.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},r.default.createElement("span",{className:"vcs-context-status","data-status":ue(E)},e(ue(E))),E.oldPath&&r.default.createElement("span",{className:"vcs-context-rename",title:E.oldPath+" \u2192 "+E.path},E.oldPath," ",r.default.createElement("b",null,"\u2192")," ",E.path),r.default.createElement("span",null,E.left.label||"\u2014"," ",r.default.createElement("b",null,"\u2194")," ",E.right.label||"\u2014"),(E.left.encoding||E.right.encoding)&&r.default.createElement("span",null,e("encoding"),": ",E.left.encoding||"\u2014"," / ",E.right.encoding||"\u2014")),E?.notice&&r.default.createElement("div",{className:"vcs-notice"},E.notice),Qe.length>0&&r.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(i=>r.default.createElement("button",{key:i,"aria-pressed":ye===i,onClick:()=>ae(i)},e(i),i==="properties"?" ("+Qe.length+")":""))),r.default.createElement("div",{className:"vcs-labels"},r.default.createElement("span",null,E?.left.label||"\u2014",E?.left.encoding?" \xB7 "+E.left.encoding:""),r.default.createElement("span",null,E?.right.label||"\u2014",E?.right.encoding?" \xB7 "+E.right.encoding:"")),r.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!oe||ye!=="content",style:ye==="properties"?{display:"none"}:void 0},r.default.createElement("div",{className:"vcs-editor",ref:Ue,style:V?{display:"none"}:void 0}),V&&E&&!E.binary&&!oe&&r.default.createElement(fe,{comparison:E,labels:Ee(e)}),oe&&r.default.createElement("div",{className:"vcs-message "+(R||Be||V?"vcs-error":""),role:"status"},oe,(R||Be||V)&&r.default.createElement("button",{onClick:()=>V?yt(i=>i+1):Se()},e(V?"retry":"rescan")))),ye==="properties"&&r.default.createElement("div",{className:"vcs-properties"},r.default.createElement("table",null,r.default.createElement("thead",null,r.default.createElement("tr",null,r.default.createElement("th",null,e("properties")),r.default.createElement("th",null,E?.left.label||e("before")),r.default.createElement("th",null,E?.right.label||e("after")))),r.default.createElement("tbody",null,Qe.map(i=>r.default.createElement("tr",{key:i},r.default.createElement("th",null,i),r.default.createElement("td",null,Z.left?.[i]??"\u2014"),r.default.createElement("td",null,Z.right?.[i]??"\u2014")))))),r.default.createElement("footer",{className:"vcs-toolbar"},r.default.createElement("button",{disabled:!_,"aria-pressed":ne,onClick:()=>nr(!ne)},e(ne?"side":"inline")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!_,checked:Me,onChange:i=>ar(i.target.checked)}),e("whitespace")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!_,checked:Oe,onChange:i=>lr(i.target.checked)}),e("wrap")),r.default.createElement("span",{className:"vcs-spacer"}),_&&r.default.createElement("span",null,je.count," ",e("changes")),r.default.createElement("button",{disabled:!_||!E||!!oe,onClick:()=>te.current?.navigate("previous")},e("previous")),r.default.createElement("button",{disabled:!_||!E||!!oe,onClick:()=>te.current?.navigate("next")},e("next")),_e.index>0&&r.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:_e.index,total:_e.total})),r.default.createElement("span",{className:"vcs-toolbar-separator"}),r.default.createElement("button",{title:e("fileShortcut"),disabled:!re.length,onClick:()=>Ve("previous")},e("previousFile")),r.default.createElement("button",{title:e("fileShortcut"),disabled:!re.length,onClick:()=>Ve("next")},e("nextFile"))))))}t.slots.inject("main",()=>t.slots.register({name:"main",key:"local-vcs"},o)),t.slots.inject("sidebar.panellist",()=>t.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>e("title"),order:65},sr))}
|
|
96
96
|
return module.exports; }});
|