@feng0531/dsh-vcs 0.3.46 → 0.3.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/client.js +3 -3
  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 vr=Object.create;var Ee=Object.defineProperty;var br=Object.getOwnPropertyDescriptor;var yr=Object.getOwnPropertyNames;var xr=Object.getPrototypeOf,wr=Object.prototype.hasOwnProperty;var kr=(t,e)=>{for(var s in e)Ee(t,s,{get:e[s],enumerable:!0})},Bt=(t,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of yr(e))!wr.call(t,r)&&r!==s&&Ee(t,r,{get:()=>e[r],enumerable:!(i=br(e,r))||i.enumerable});return t};var _=(t,e,s)=>(s=t!=null?vr(xr(t)):{},Bt(e||!t||!t.__esModule?Ee(s,"default",{value:t,enumerable:!0}):s,t)),Sr=t=>Bt(Ee({},"__esModule",{value:!0}),t);var _r={};kr(_r,{apply:()=>Kr,inject:()=>Jr});module.exports=Sr(_r);var o=_(require("react"),1);var Xe=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
2
+ var yr=Object.create;var Ae=Object.defineProperty;var xr=Object.getOwnPropertyDescriptor;var wr=Object.getOwnPropertyNames;var kr=Object.getPrototypeOf,Sr=Object.prototype.hasOwnProperty;var Cr=(t,e)=>{for(var s in e)Ae(t,s,{get:e[s],enumerable:!0})},Mt=(t,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wr(e))!Sr.call(t,o)&&o!==s&&Ae(t,o,{get:()=>e[o],enumerable:!(i=xr(e,o))||i.enumerable});return t};var _=(t,e,s)=>(s=t!=null?yr(kr(t)):{},Mt(e||!t||!t.__esModule?Ae(s,"default",{value:t,enumerable:!0}):s,t)),Nr=t=>Mt(Ae({},"__esModule",{value:!0}),t);var Qr={};Cr(Qr,{apply:()=>_r,inject:()=>Kr});module.exports=Nr(Qr);var r=_(require("react"),1);var Ye=`.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}
@@ -32,7 +32,7 @@ var vr=Object.create;var Ee=Object.defineProperty;var br=Object.getOwnPropertyDe
32
32
  .vcs-root .vcs-filter{display:flex;gap:5px;padding:10px}
33
33
  .vcs-root .vcs-filter input{min-width:0;width:100%;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-base);padding:7px 9px}
34
34
  .vcs-root .vcs-clear-filter{font-size:11px;white-space:nowrap;padding:4px 6px}
35
- .vcs-root .vcs-history{max-height:35vh;overflow:auto;flex-shrink:0;padding:8px 12px;border-bottom:1px solid currentColor}.vcs-root .vcs-history li{padding:6px 0;overflow-wrap:anywhere}.vcs-root .vcs-history li div{font-size:12px;opacity:.8}
35
+ .vcs-root .vcs-review-views{display:flex;gap:8px;padding:8px 12px;flex-shrink:0}.vcs-root .vcs-body[hidden]{display:none}.vcs-root .vcs-history{flex:1;min-height:0;min-width:0;display:grid;grid-template-columns:minmax(220px,35%) minmax(0,1fr);overflow:hidden;border-bottom:1px solid currentColor}.vcs-root .vcs-history-list,.vcs-root .vcs-history-details{min-height:0;min-width:0;overflow:auto;padding:8px 12px}.vcs-root .vcs-history-list{border-right:1px solid var(--dsw-alias-border-l2)}.vcs-root .vcs-history-details code{overflow-wrap:anywhere}@media(max-width:760px){.vcs-root .vcs-history{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(100px,35%) minmax(0,1fr)}}.vcs-root .vcs-history li{padding:6px 0;overflow-wrap:anywhere}.vcs-root .vcs-history li div{font-size:12px;opacity:.8}
36
36
  .vcs-root .vcs-status-filter{display:flex;flex-wrap:wrap;flex-shrink:0;gap:4px;overflow:visible;padding:0 10px 8px}
37
37
  .vcs-root .vcs-status-filter button{font-size:11px;flex:0 0 auto;white-space:nowrap;padding:3px 6px}
38
38
  .vcs-root .vcs-status-filter button[aria-pressed=true]{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}
@@ -92,5 +92,5 @@ var vr=Object.create;var Ee=Object.defineProperty;var br=Object.getOwnPropertyDe
92
92
  .vcs-root .vcs-toolbar{gap:6px}
93
93
  .vcs-root .vcs-title{font-size:16px}
94
94
  }
95
- `;var J=_(require("react"),1);function Mt(t){return t===""?[]:t.split(/\r\n|\n|\r/)}function Ft(t="",e=""){let s=Mt(t),i=Mt(e),r=0;for(;r<s.length&&r<i.length&&s[r]===i[r];)r++;let c=0;for(;c<s.length-r&&c<i.length-r&&s[s.length-c-1]===i[i.length-c-1];)c++;let u=s.length-c,p=i.length-c,a=u-r,d=p-r,h=a&&d?(a+1)*(d+1):0,m=h>2e5,N=[],k=0;function C(l,x){k++,!(N.length>=2e3)&&N.push({left:l===null?null:{number:l+1,text:s[l]},right:x===null?null:{number:x+1,text:i[x]},kind:l===null?"insert":x===null?"delete":s[l]===i[x]?"equal":"replace"})}for(let l=0;l<r;l++)C(l,l);if(m||!a||!d)for(let l=0;l<Math.max(a,d);l++)C(l<a?r+l:null,l<d?r+l:null);else{let l=d+1,x=new Uint32Array(h);for(let w=a-1;w>=0;w--)for(let L=d-1;L>=0;L--)x[w*l+L]=s[r+w]===i[r+L]?x[(w+1)*l+L+1]+1:Math.max(x[(w+1)*l+L],x[w*l+L+1]);let f=0,g=0;for(;f<a||g<d;)f<a&&g<d&&s[r+f]===i[r+g]?C(r+f++,r+g++):f<a&&(g===d||x[(f+1)*l+g]>=x[f*l+g+1])?C(r+f++,null):C(null,r+g++)}for(let l=0;l<c;l++)C(u+l,p+l);return{rows:N,approximate:m,truncated:k>N.length,totalRows:k,omittedRows:k-N.length,leftLineCount:s.length,rightLineCount:i.length,lcsCells:m?0:h}}var Er={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)"},Ar={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Lr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Pr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function me({comparison:t,labels:e={}}){let s=t?.left?.text??"",i=t?.right?.text??"",r=(0,J.useMemo)(()=>Ft(s,i),[s,i]),c=p=>e[p]??Er[p],u=(p,a,d)=>{let h=p&&d!=="equal";return J.default.createElement("td",{style:{...Ye,background:h?a==="left"?"#d6454520":"#259b4920":void 0}},J.default.createElement("div",{style:Ar},J.default.createElement("span",{style:Lr},p?.number??""),J.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},h?a==="left"?"\u2212":"+":""),J.default.createElement("pre",{style:Pr},p?.text??"")))};return J.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},r.approximate&&J.default.createElement("div",{role:"status",style:{padding:8}},c("approximate")),r.truncated&&J.default.createElement("div",{role:"status",style:{padding:8}},c("truncated")," (",2e3," / ",r.totalRows,")"),J.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},J.default.createElement("thead",null,J.default.createElement("tr",null,J.default.createElement("th",{scope:"col",style:{...Ye,padding:8,overflowWrap:"anywhere"}},t?.left?.label||c("before")),J.default.createElement("th",{scope:"col",style:{...Ye,padding:8,overflowWrap:"anywhere"}},t?.right?.label||c("after")))),J.default.createElement("tbody",null,r.rows.map((p,a)=>J.default.createElement("tr",{key:a,"data-kind":p.kind},u(p.left,"left",p.kind),u(p.right,"right",p.kind))))),!r.rows.length&&J.default.createElement("p",{style:{padding:8}},c("empty")))}function Ae(t){return{before:t("textBefore"),after:t("textAfter"),readonly:t("textReadonly"),empty:t("textEmpty"),approximate:t("approximate"),truncated:t("textTruncated")}}var A=_(require("react"),1);function Ht(t){let e=new Map;for(let s of t){let i=e.get(s.commit);i||(i={names:[],hidden:0},e.set(s.commit,i)),i.names.length<3?i.names.push(s.name):i.hidden++}return e}var M=_(require("react"),1);var E=_(require("react"),1);var z=_(require("react"),1);function $e({sessionId:t,repositoryId:e,commit:s,path:i,rpc:r,t:c,onRediscover:u,onClose:p}){let[a,d]=(0,z.useState)(null),[h,m]=(0,z.useState)(""),[N,k]=(0,z.useState)(0);return(0,z.useEffect)(()=>{let C=new AbortController;return d(null),m(""),r("vcs/tree-file",{sessionId:t,repositoryId:e,commit:s,path:i},C.signal).then(l=>{C.signal.aborted||d(l)}).catch(l=>{C.signal.aborted||(m(l.message),l.code==="vcs/rediscover-required"&&u())}),()=>C.abort()},[t,e,s,i,N]),z.default.createElement("section",{"aria-label":c("treePreview")},z.default.createElement("h4",null,i),z.default.createElement("button",{onClick:p},c("treeClose")),z.default.createElement("p",null,z.default.createElement("code",null,s)),h?z.default.createElement("p",{role:"alert"},h," ",z.default.createElement("button",{onClick:()=>k(C=>C+1)},c("retry"))):a?z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,z.default.createElement("code",null,a.oid)," \xB7 ",c("encoding"),": ",a.encoding||"\u2014"),a.notice&&z.default.createElement("p",{role:"status"},a.notice),a.binary?z.default.createElement("p",null,c("binary")):a.text===""?z.default.createElement("p",null,c("treeEmpty")):z.default.createElement("pre",{tabIndex:0,style:{maxHeight:480,overflow:"auto",whiteSpace:"pre",tabSize:4}},a.text)):z.default.createElement("p",{role:"status"},c("loading")))}function Tt(t=""){let e=[{path:"",name:"/"}];if(t){let s="";for(let i of t.split("/"))s=s?s+"/"+i:i,e.push({path:s,name:i})}return e}function Ot(t,e="",s=""){let i=e?e+"/":"",r=s.toLowerCase();return t.filter(c=>{let u=c.path.slice(i.length);return c.path.startsWith(i)&&u.length>0&&!u.includes("/")&&u.toLowerCase().includes(r)}).sort((c,u)=>+(u.type==="tree")-+(c.type==="tree")||(c.path<u.path?-1:c.path>u.path?1:0))}function Dr({sessionId:t,repositoryId:e,commit:s,rpc:i,t:r,onRediscover:c}){let[u,p]=(0,E.useState)(null),[a,d]=(0,E.useState)(""),[h,m]=(0,E.useState)(0),[N,k]=(0,E.useState)(""),[C,l]=(0,E.useState)(0),[x,f]=(0,E.useState)(""),[g,w]=(0,E.useState)(null);if((0,E.useEffect)(()=>{let b=new AbortController;return p(null),d(""),i("vcs/tree",{sessionId:t,repositoryId:e,commit:s},b.signal).then(U=>{b.signal.aborted||p(U)}).catch(U=>{b.signal.aborted||(d(U.message),U.code==="vcs/rediscover-required"&&c())}),()=>b.abort()},[t,e,s,h]),a)return E.default.createElement("p",{role:"alert"},a," ",E.default.createElement("button",{onClick:()=>m(b=>b+1)},r("retry")));if(!u)return E.default.createElement("p",{role:"status"},r("loading"));let L=N?N+"/":"",F=Ot(u.entries,N,x),P=b=>{k(b),l(0),f(""),w(null)};return E.default.createElement("section",{"aria-label":r("historicalTree")},E.default.createElement("p",null,r("historicalTreeScope")),E.default.createElement("code",null,s),E.default.createElement("p",null,N||"/"," ",N&&E.default.createElement("button",{onClick:()=>P(N.includes("/")?N.slice(0,N.lastIndexOf("/")):"")},r("treeUp"))),E.default.createElement("nav",{"aria-label":r("treeBreadcrumbs")},Tt(N).map(b=>E.default.createElement(E.default.Fragment,{key:b.path},b.path&&" / ",b.path===N?E.default.createElement("span",{"aria-current":"location"},b.name):E.default.createElement("button",{onClick:()=>P(b.path)},b.name)))),E.default.createElement("label",null,r("treeSearch")," ",E.default.createElement("input",{"aria-label":r("treeSearch"),value:x,onChange:b=>{f(b.target.value),l(0),w(null)}})),E.default.createElement("p",null,F.length," ",r("treeEntries")),!F.length&&x&&E.default.createElement("p",{role:"status"},r("emptySearch")),E.default.createElement("ul",null,F.slice(C*100,C*100+100).map(b=>E.default.createElement("li",{key:b.path},b.type==="tree"?E.default.createElement("button",{onClick:()=>P(b.path)},b.path.slice(L.length),"/"):b.type==="blob"&&["100644","100755"].includes(b.mode)?E.default.createElement("button",{"aria-pressed":g===b.path,onClick:()=>w(b.path)},b.path.slice(L.length)):E.default.createElement("span",null,b.path.slice(L.length))," \xB7 ",E.default.createElement("code",null,b.mode," ",b.type," ",E.default.createElement("span",{title:b.oid},b.oid.slice(0,10)))))),C>0&&E.default.createElement("button",{onClick:()=>{l(b=>b-1),w(null)}},r("treePrevious")),(C+1)*100<F.length&&E.default.createElement("button",{onClick:()=>{l(b=>b+1),w(null)}},r("treeNext")),g&&E.default.createElement($e,{key:JSON.stringify([t,e,s,g]),sessionId:t,repositoryId:e,commit:s,rpc:i,t:r,onRediscover:c,path:g,onClose:()=>w(null)}))}function Ze(t){return E.default.createElement(Br,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Br(t){let[e,s]=(0,E.useState)(!1);return E.default.createElement("div",null,E.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("historicalTree")),e&&E.default.createElement(Dr,{...t}))}var K=_(require("react"),1);var I=_(require("react"),1);function jt({load:t,node:e,comparison:s,key:i,onReady:r=()=>{},onError:c=()=>{}}){let u=new AbortController,p,a=!1,d=()=>{let m=p;p=void 0,m?.dispose()};return{done:Promise.resolve().then(()=>(u.signal.throwIfAborted(),t(u.signal))).then(m=>{a||(p=m.createDiff(e),p.setContent(s,i),a||r(p))}).catch(m=>{try{d()}finally{a||c(m)}}),dispose(){a||(a=!0,u.abort(),d())}}}async function Le(t,{signal:e,fetcher:s=fetch,importer:i=r=>import(r)}={}){let r=await s(t,{credentials:"same-origin",cache:"no-cache",signal:e});if(!r.ok)throw new Error("Editor resource HTTP "+r.status+" ("+t+"). "+(r.status===401?"Refresh the authenticated DSH page.":r.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let c=r.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 r.arrayBuffer(),e?.throwIfAborted(),i(t)}var Pe="0.3.46";function Re({comparison:t,identity:e,t:s}){let i=(0,I.useRef)(null),r=(0,I.useRef)(null),[c,u]=(0,I.useState)(!0),[p,a]=(0,I.useState)(!1),[d,h]=(0,I.useState)(!1),[m,N]=(0,I.useState)(!1),[k,C]=(0,I.useState)(!1),[l,x]=(0,I.useState)("");return(0,I.useEffect)(()=>{if(C(!1),x(""),!m)return;let f=L=>new URL("vcs-assets/"+L,document.baseURI).href,g=document.createElement("link");g.rel="stylesheet",g.href=f("editor.css"),i.current.parentNode.appendChild(g);let w=jt({node:i.current,comparison:t,key:e,load:L=>Le(f("editor.js")+"?v="+encodeURIComponent(Pe)+"&retry=0",{signal:L}),onReady:L=>{r.current=L,C(!0)},onError:L=>x(L.message)});return()=>{r.current=null;try{w.dispose()}finally{g.remove()}}},[m,t,e]),(0,I.useEffect)(()=>{k&&r.current?.options({sideBySide:c,ignoreWhitespace:p,wrap:d})},[k,c,p,d]),I.default.createElement("div",null,I.default.createElement("button",{"aria-pressed":m,onClick:()=>N(f=>!f)},s(m?"historyBasic":"historyAdvanced")),k&&I.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8}},I.default.createElement("button",{"aria-pressed":c,onClick:()=>u(f=>!f)},s(c?"side":"inline")),I.default.createElement("label",null,I.default.createElement("input",{type:"checkbox",checked:p,onChange:f=>a(f.target.checked)}),s("whitespace")),I.default.createElement("label",null,I.default.createElement("input",{type:"checkbox",checked:d,onChange:f=>h(f.target.checked)}),s("wrap")),I.default.createElement("button",{onClick:()=>r.current?.navigate("previous")},s("previous")),I.default.createElement("button",{onClick:()=>r.current?.navigate("next")},s("next"))),m&&!k&&!l&&I.default.createElement("p",{role:"status"},s("loading")),l&&I.default.createElement("p",{role:"status"},s("fallback")," ",l),I.default.createElement("div",{style:{position:"relative",height:360}},I.default.createElement("div",{ref:i,style:{position:"absolute",inset:0,visibility:k?"visible":"hidden"},"aria-hidden":!k}),!k&&I.default.createElement(me,{comparison:t,labels:Ae(s)})))}var T=_(require("react"),1);function Fr({sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:r,rpc:c,t:u,onRediscover:p,onSelectCommit:a}){let[d,h]=(0,T.useState)({commits:[],nextOffset:null}),[m,N]=(0,T.useState)(0),[k,C]=(0,T.useState)(0),[l,x]=(0,T.useState)(!0),[f,g]=(0,T.useState)("");return(0,T.useEffect)(()=>{let w=new AbortController;return x(!0),g(""),c("vcs/file-history",{sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:r,offset:m,limit:50},w.signal).then(L=>{w.signal.aborted||h(F=>({...L,commits:m?[...F.commits,...L.commits]:L.commits}))}).catch(L=>{w.signal.aborted||(g(L.message),L.code==="vcs/rediscover-required"&&p())}).finally(()=>{w.signal.aborted||x(!1)}),()=>w.abort()},[t,e,s,i,r,m,k]),T.default.createElement("section",{"aria-label":u("fileHistory"),"aria-busy":l},T.default.createElement("p",null,u("fileHistoryScope")),T.default.createElement("p",{style:{overflowWrap:"anywhere"}},d.path," \xB7 ",T.default.createElement("code",null,s)),T.default.createElement("ol",null,d.commits.map(w=>T.default.createElement("li",{key:w.id},T.default.createElement("code",{title:w.id},w.id.slice(0,10))," \xB7 ",a?T.default.createElement("button",{onClick:()=>a(w.id,d.path)},w.subject):w.subject,T.default.createElement("div",null,w.author," \xB7 ",T.default.createElement("time",{dateTime:w.date},w.date))))),l&&T.default.createElement("p",{role:"status"},u("loading")),f&&T.default.createElement("p",{role:"alert"},f," ",T.default.createElement("button",{onClick:()=>C(w=>w+1)},u("retry"))),!l&&!f&&!d.commits.length&&T.default.createElement("p",null,u("historyEmpty")),d.truncated&&T.default.createElement("p",{role:"status"},u("historyLimit")),!f&&d.nextOffset!==null&&T.default.createElement("button",{disabled:l,onClick:()=>N(d.nextOffset)},u("historyMore")))}function et(t){return T.default.createElement(Hr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit,t.parentIndex,t.id]),...t})}function Hr(t){let[e,s]=(0,T.useState)(!1);return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("fileHistory")),e&&T.default.createElement(Fr,{...t}))}var O=_(require("react"),1);function It(t,{width:e,height:s,signal:i,timeoutMs:r=1e4,createURL:c=a=>URL.createObjectURL(a),revokeURL:u=a=>URL.revokeObjectURL(a),createImage:p=()=>new Image}={}){return new Promise((a,d)=>{if(i?.aborted){d(i.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(r)||r<=0){d(new Error("Invalid image preview"));return}let h,m,N,k=!1,C=!1,l=()=>{C||(C=!0,m&&(m.src=""),h&&u(h))},x=()=>{clearTimeout(N),i?.removeEventListener("abort",g)},f=w=>{k||(k=!0,x(),l(),d(w))},g=()=>f(i.reason||new Error("Image cancelled"));try{h=c(t),m=p(),i?.addEventListener("abort",g,{once:!0}),N=setTimeout(()=>f(new Error("Image decode timed out")),r),m.src=h,Promise.resolve(m.decode()).then(()=>{if(!k){if(i?.aborted){g();return}if(m.naturalWidth!==e||m.naturalHeight!==s){f(new Error("Image dimensions mismatch"));return}k=!0,x(),a({url:h,dispose:l})}},f)}catch(w){f(w)}})}function Tr({side:t,sessionId:e,repositoryId:s,commit:i,parentIndex:r,id:c,rpc:u,t:p,onRediscover:a}){let[d,h]=(0,O.useState)(null),[m,N]=(0,O.useState)(""),[k,C]=(0,O.useState)(0);return(0,O.useEffect)(()=>{let l=new AbortController,x;return h(null),N(""),(async()=>{let f=await u("vcs/commit-image",{sessionId:e,repositoryId:s,commit:i,parentIndex:r,id:c,side:t},l.signal);if(l.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 g=atob(f.base64);if(g.length!==f.bytes)throw Error(p("imageInvalid"));let w=new Blob([Uint8Array.from(g,L=>L.charCodeAt(0))],{type:f.mime});if(x=await It(w,{width:f.width,height:f.height,signal:l.signal}),l.signal.aborted){x.dispose();return}h({...f,url:x.url})})().catch(f=>{l.signal.aborted||(N(f.message),f.code==="vcs/rediscover-required"&&a())}),()=>{l.abort(),x?.dispose()}},[t,e,s,i,r,c,k]),O.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":p(t==="left"?"imageBefore":"imageAfter")},O.default.createElement("h5",null,p(t==="left"?"imageBefore":"imageAfter")),m?O.default.createElement("p",{role:"alert"},m," ",O.default.createElement("button",{onClick:()=>C(l=>l+1)},p("retry"))):d?O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,O.default.createElement("code",null,d.commit)," \xB7 ",d.path),d.absent?O.default.createElement("p",null,p("imageAbsent")):O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,d.width," \xD7 ",d.height," \xB7 ",d.bytes," B"),O.default.createElement("img",{src:d.url,alt:d.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),d.metadataStripped&&O.default.createElement("p",null,p("imageMetadata")))):O.default.createElement("p",{role:"status"},p("loading")))}function tt(t){let[e,s]=(0,O.useState)(!1);return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("imageCompare")),e&&O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,t.t("imageScope")),O.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(i=>O.default.createElement(Tr,{key:i,...t,side:i})))))}var B=_(require("react"),1);function Or({sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:r,rpc:c,t:u,onRediscover:p,onSelectCommit:a}){let[d,h]=(0,B.useState)(null),[m,N]=(0,B.useState)(""),[k,C]=(0,B.useState)(0);return(0,B.useEffect)(()=>{let l=new AbortController;return h(null),N(""),c("vcs/blame",{sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:r},l.signal).then(x=>{l.signal.aborted||h(x)}).catch(x=>{l.signal.aborted||(N(x.message),x.code==="vcs/rediscover-required"&&p())}),()=>l.abort()},[t,e,s,i,r,k]),m?B.default.createElement("p",{role:"alert"},m," ",B.default.createElement("button",{onClick:()=>C(l=>l+1)},u("retry"))):d?B.default.createElement("section",{"aria-label":u("blame")},B.default.createElement("p",null,u("blameScope")),a&&B.default.createElement("p",null,u("blameNavigation")),d.notice&&B.default.createElement("p",{role:"status"},d.notice),d.truncated&&B.default.createElement("p",{role:"status"},u("blameLimit")),!d.notice&&!d.lines.length&&B.default.createElement("p",null,u("blameEmpty")),!!d.lines.length&&B.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},B.default.createElement("table",null,B.default.createElement("thead",null,B.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(l=>B.default.createElement("th",{key:l,scope:"col"},u(l))))),B.default.createElement("tbody",null,d.lines.map(l=>B.default.createElement("tr",{key:l.line},B.default.createElement("th",{scope:"row"},l.line),B.default.createElement("td",null,a?B.default.createElement("button",{title:l.commit,onClick:()=>a(l.commit)},B.default.createElement("code",null,l.commit.slice(0,10))):B.default.createElement("code",{title:l.commit},l.commit.slice(0,10))),B.default.createElement("td",null,l.author),B.default.createElement("td",null,l.summary),B.default.createElement("td",null,B.default.createElement("pre",{style:{margin:0}},l.text)))))))):B.default.createElement("p",{role:"status"},u("loading"))}function rt(t){let[e,s]=(0,B.useState)(!1);return B.default.createElement("div",null,B.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("blame")),e&&B.default.createElement(Or,{...t}))}function he({sessionId:t,repositoryId:e,commit:s,parentIndex:i,base:r,target:c,id:u,rpc:p,t:a,onRediscover:d,onSelectCommit:h}){let[m,N]=(0,K.useState)(null),[k,C]=(0,K.useState)(""),[l,x]=(0,K.useState)(0);return(0,K.useEffect)(()=>{let f=new AbortController;return N(null),C(""),p(r?"vcs/revision-compare":"vcs/commit-compare",r?{sessionId:t,repositoryId:e,base:r,target:c,id:u}:{sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:u},f.signal).then(g=>{f.signal.aborted||N(g)}).catch(g=>{f.signal.aborted||(C(g.message),g.code==="vcs/rediscover-required"&&d())}),()=>f.abort()},[t,e,s,i,r,c,u,l]),k?K.default.createElement("p",{role:"alert"},k," ",K.default.createElement("button",{onClick:()=>x(f=>f+1)},a("retry"))):m?K.default.createElement("section",null,K.default.createElement("h4",null,m.path),K.default.createElement("p",null,m.left.label," \u2194 ",m.right.label),m.notice&&K.default.createElement("p",{role:"status"},m.notice),m.binary?K.default.createElement("p",null,a("binary")):K.default.createElement(Re,{comparison:m,identity:JSON.stringify(r?[t,e,r,c,u]:[t,e,s,i,u]),t:a}),s&&!r&&K.default.createElement(et,{onSelectCommit:h,key:JSON.stringify([t,e,s,i,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:u,rpc:p,t:a,onRediscover:d}),s&&!r&&K.default.createElement(rt,{onSelectCommit:h,key:JSON.stringify([t,e,s,i,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:u,rpc:p,t:a,onRediscover:d}),s&&!r&&K.default.createElement(tt,{key:JSON.stringify([t,e,s,i,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:u,rpc:p,t:a,onRediscover:d})):K.default.createElement("p",{role:"status"},a("loading"))}function Ut(t,e){if(typeof e!="string"||!e)return null;let s=t.filter(i=>i.path===e);return s.length===1&&typeof s[0].id=="string"&&s[0].id?s[0].id:null}function Wt(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(i=>[i.id,i.author,i.subject].some(r=>r?.toLowerCase().includes(s))):t}function De(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(i=>[i.path,i.oldPath].some(r=>r?.toLowerCase().includes(s))):t}function ot(t){return M.default.createElement(jr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function jr({sessionId:t,repositoryId:e,commit:s,rpc:i,t:r,onRediscover:c,onSelectCommit:u,initialPath:p}){let a=(0,M.useRef)(!0),[d,h]=(0,M.useState)(null),[m,N]=(0,M.useState)(""),[k,C]=(0,M.useState)(0),[l,x]=(0,M.useState)(null),[f,g]=(0,M.useState)(""),[w,L]=(0,M.useState)(0);if((0,M.useEffect)(()=>{let P=new AbortController;return x(null),g(""),i("vcs/commit",{sessionId:t,repositoryId:e,commit:s,parentIndex:k},P.signal).then(b=>{P.signal.aborted||(x(b),a.current&&(a.current=!1,h(Ut(b.changes,p))))}).catch(b=>{P.signal.aborted||(g(b.message),b.code==="vcs/rediscover-required"&&c())}),()=>P.abort()},[t,e,s,k,w]),f)return M.default.createElement("p",{role:"alert"},f," ",M.default.createElement("button",{onClick:()=>L(P=>P+1)},r("retry")));if(!l)return M.default.createElement("p",{role:"status"},r("loading"));let F=De(l.changes,m);return M.default.createElement("section",{"aria-label":r("commitDetails")},M.default.createElement("h3",null,l.subject),M.default.createElement("code",null,l.id),M.default.createElement("p",null,l.author," \xB7 ",l.date),l.messageTruncated&&M.default.createElement("p",{role:"status"},r("commitMessageLimit")),l.message&&M.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},l.message),l.parents.length>1&&M.default.createElement("label",null,r("commitParent")," ",M.default.createElement("select",{"aria-label":r("commitParent"),value:k,onChange:P=>{h(null),x(null),C(Number(P.target.value))}},l.parents.map((P,b)=>M.default.createElement("option",{key:P,value:b},b+1,": ",P.slice(0,10))))),M.default.createElement("p",null,l.parent||r("commitRoot")," \u2192 ",l.id.slice(0,10)),M.default.createElement("label",null,r("commitFileSearch")," ",M.default.createElement("input",{"aria-label":r("commitFileSearch"),value:m,onChange:P=>{N(P.target.value),h(null)}})),M.default.createElement("span",null," ",F.length," / ",l.changes.length),M.default.createElement("ul",null,F.map(P=>M.default.createElement("li",{key:P.id},M.default.createElement("button",{"aria-pressed":d===P.id,onClick:()=>h(P.id)},P.status," \xB7 ",P.oldPath?P.oldPath+" \u2192 ":"",P.path)))),!!l.changes.length&&!F.length&&M.default.createElement("p",{role:"status"},r("emptySearch")),!l.changes.length&&M.default.createElement("p",null,r("commitNoChanges")),d&&M.default.createElement(he,{key:d,sessionId:t,repositoryId:e,commit:s,parentIndex:k,id:d,onSelectCommit:u,rpc:i,t:r,onRediscover:c}),M.default.createElement(Ze,{key:JSON.stringify([t,e,s]),sessionId:t,repositoryId:e,commit:s,rpc:i,t:r,onRediscover:c}))}var q=_(require("react"),1);function qt(t){if(!Array.isArray(t))throw new Error("Invalid graph commits");let e=t.slice(0,200),s=new Map,i=[],r=[],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),i.push({id:a.id,row:p})}let u=!1;for(let p of e){let a=new Set;for(let d of p.parents){if(r.length===1e3){u=!0;break}if(!c(d)||d.length!==p.id.length||d===p.id||a.has(d))throw new Error("Invalid graph parent");a.add(d);let h=s.get(d);if(h!==void 0&&h<=s.get(p.id))throw new Error("Graph requires child-before-parent order");r.push({from:p.id,to:d,missing:h===void 0})}if(u)break}return{nodes:i,edges:r,nodesTruncated:t.length>200,edgesTruncated:u}}function zt(t){let e=new Map(t.nodes.map(i=>[i.id,i.row])),s=[];return t.edges.filter(i=>!i.missing).map(i=>{let r=e.get(i.from),c=e.get(i.to),u=s.findIndex(p=>p<r);return u<0&&(u=s.length),s[u]=c,{...i,lane:u,start:r,end:c}})}function Ir({commits:t,selected:e,onSelect:s,t:i}){let r;try{r=qt(t)}catch{return q.default.createElement("p",{role:"alert"},i("graphInvalid"))}let c=zt(r),u=Math.max(100,48+12*Math.max(0,...c.map(a=>a.lane))),p=Math.max(40,r.nodes.length*36);return q.default.createElement("section",{"aria-label":i("historyGraph")},q.default.createElement("p",null,i("graphScope")),(r.nodesTruncated||r.edgesTruncated)&&q.default.createElement("p",{role:"status"},i("graphLimit")),q.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},q.default.createElement("svg",{width:u,height:p,"aria-hidden":"true",style:{flexShrink:0}},c.map(a=>{let d=a.start*36+18,h=a.end*36+18,m=35+a.lane*12;return q.default.createElement("path",{key:a.from+a.to,d:"M 12 "+d+" C "+m+" "+d+", "+m+" "+h+", 12 "+h,fill:"none",stroke:"currentColor",opacity:"0.45"})}),r.nodes.map(a=>q.default.createElement("circle",{key:a.id,cx:"12",cy:a.row*36+18,r:"4",fill:"currentColor"}))),q.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},r.nodes.map(a=>q.default.createElement("li",{key:a.id,style:{height:36,whiteSpace:"nowrap"}},q.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:d=>{if(d.altKey||d.ctrlKey||d.metaKey||d.shiftKey)return;let h=d.key==="ArrowDown"?Math.min(a.row+1,r.nodes.length-1):d.key==="ArrowUp"?Math.max(0,a.row-1):d.key==="Home"?0:d.key==="End"?r.nodes.length-1:null;h!==null&&(d.preventDefault(),d.stopPropagation(),d.currentTarget.closest("ol").querySelectorAll("button")[h]?.focus())},onClick:()=>s(a.id)},q.default.createElement("code",null,a.id.slice(0,10))," ",t[a.row].subject))))),q.default.createElement("details",null,q.default.createElement("summary",null,i("graphRelations")),q.default.createElement("ul",null,r.edges.map(a=>q.default.createElement("li",{key:a.from+a.to},q.default.createElement("code",null,a.from)," \u2192 ",q.default.createElement("code",null,a.to),a.missing?" \xB7 "+i("graphMissing"):"")))))}function st(t){let[e,s]=(0,q.useState)(!1);return q.default.createElement("div",null,q.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("historyGraph")),e&&q.default.createElement(Ir,{...t}))}var S=_(require("react"),1);function Ur({sessionId:t,repositoryId:e,base:s,target:i,rpc:r,t:c,onRediscover:u}){let[p,a]=(0,S.useState)(null),[d,h]=(0,S.useState)(""),[m,N]=(0,S.useState)(0),[k,C]=(0,S.useState)(null),[l,x]=(0,S.useState)("");if((0,S.useEffect)(()=>{let g=new AbortController;return a(null),h(""),C(null),r("vcs/revision-changes",{sessionId:t,repositoryId:e,base:s,target:i},g.signal).then(w=>{g.signal.aborted||a(w)}).catch(w=>{g.signal.aborted||(h(w.message),w.code==="vcs/rediscover-required"&&u())}),()=>g.abort()},[t,e,s,i,m]),d)return S.default.createElement("p",{role:"alert"},d," ",S.default.createElement("button",{onClick:()=>N(g=>g+1)},c("retry")));if(!p)return S.default.createElement("p",{role:"status"},c("loading"));let f=De(p.changes,l);return S.default.createElement("div",null,S.default.createElement("label",null,c("commitFileSearch")," ",S.default.createElement("input",{"aria-label":c("commitFileSearch"),value:l,onChange:g=>{x(g.target.value),C(null)}})),S.default.createElement("span",null," ",f.length," / ",p.changes.length),!!p.changes.length&&!f.length&&S.default.createElement("p",{role:"status"},c("emptySearch")),!p.changes.length&&S.default.createElement("p",null,c("revisionEmpty")),S.default.createElement("ul",null,f.map(g=>S.default.createElement("li",{key:g.id},S.default.createElement("button",{"aria-pressed":k===g.id,onClick:()=>C(g.id)},g.status," \xB7 ",g.oldPath?g.oldPath+" \u2192 ":"",g.path)))),k&&S.default.createElement(he,{key:k,sessionId:t,repositoryId:e,base:s,target:i,id:k,rpc:r,t:c,onRediscover:u}))}function it(t){return S.default.createElement(Wr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Wr({commits:t,sessionId:e,repositoryId:s,rpc:i,t:r,onRediscover:c,onReferencesLoaded:u}){let[p,a]=(0,S.useState)(""),[d,h]=(0,S.useState)(""),[m,N]=(0,S.useState)([]),[k,C]=(0,S.useState)(!1),[l,x]=(0,S.useState)(0),[f,g]=(0,S.useState)(!1),[w,L]=(0,S.useState)("");return(0,S.useEffect)(()=>{if(!l)return;let F=new AbortController;return g(!0),L(""),i("vcs/references",{sessionId:e,repositoryId:s},F.signal).then(P=>{F.signal.aborted||(N(P.references),C(!0),u?.(P.references))}).catch(P=>{F.signal.aborted||(L(P.message),P.code==="vcs/rediscover-required"&&c())}).finally(()=>{F.signal.aborted||g(!1)}),()=>F.abort()},[e,s,l]),S.default.createElement("section",{"aria-label":r("revisionTitle")},S.default.createElement("h3",null,r("revisionTitle")),S.default.createElement("p",null,r("revisionScope")),S.default.createElement("button",{disabled:f,onClick:()=>x(F=>F+1)},r("revisionLoadRefs")),S.default.createElement("p",null,r("revisionRefsScope")),k&&!f&&!w&&S.default.createElement("p",{role:"status"},m.length?`${r("revisionRefsCount")}: ${m.length}`:r("revisionRefsEmpty")),f&&S.default.createElement("p",{role:"status"},r("loading")),w&&S.default.createElement("p",{role:"alert"},w),[[p,a,"revisionBase"],[d,h,"revisionTarget"]].map(([F,P,b])=>S.default.createElement("label",{key:b},r(b)," ",S.default.createElement("select",{"aria-label":r(b),value:F,onChange:U=>P(U.target.value)},S.default.createElement("option",{value:""},"\u2014"),!!t.length&&S.default.createElement("optgroup",{label:r("revisionLoadedCommits")},t.map(U=>S.default.createElement("option",{key:U.id,value:U.id},U.id.slice(0,10)," \xB7 ",U.subject))),!!m.length&&S.default.createElement("optgroup",{label:r("revisionLocalRefs")},m.map(U=>S.default.createElement("option",{key:U.name,value:U.commit},U.name," \xB7 ",U.commit.slice(0,10)))),F&&!t.some(U=>U.id===F)&&!m.some(U=>U.commit===F)&&S.default.createElement("option",{value:F},F)))),S.default.createElement("button",{disabled:!p||!d,onClick:()=>{a(d),h(p)}},r("revisionSwap")),S.default.createElement("p",{style:{overflowWrap:"anywhere"}},S.default.createElement("code",null,p||"\u2014")," \u2192 ",S.default.createElement("code",null,d||"\u2014")),p&&d&&S.default.createElement(Ur,{key:JSON.stringify([e,s,p,d]),sessionId:e,repositoryId:s,base:p,target:d,rpc:i,t:r,onRediscover:c}))}function nt(t){return A.default.createElement(qr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function qr({sessionId:t,repositoryId:e,rpc:s,t:i,onRediscover:r}){let[c,u]=(0,A.useState)({id:null,path:null,revision:0}),[p,a]=(0,A.useState)(""),[d,h]=(0,A.useState)(null),m=(0,A.useMemo)(()=>Ht(d||[]),[d]),N=c.id,k=(H,v=null)=>u(V=>({id:H,path:v,revision:V.revision+1})),C=(H,v=null)=>u(V=>({id:H,path:v,revision:V.revision+(v||V.path?1:0)})),[l,x]=(0,A.useState)({commits:[],snapshot:null,nextOffset:null}),[f,g]=(0,A.useState)(0),[w,L]=(0,A.useState)(0),[F,P]=(0,A.useState)(!0),[b,U]=(0,A.useState)("");(0,A.useEffect)(()=>{let H=new AbortController;return P(!0),U(""),s("vcs/history",{sessionId:t,repositoryId:e,offset:f,limit:50,...f?{snapshot:l.snapshot}:{}},H.signal).then(v=>{H.signal.aborted||x(V=>({...v,commits:f?[...V.commits,...v.commits]:v.commits}))}).catch(v=>{H.signal.aborted||(U(v.message),v.code==="vcs/rediscover-required"&&r())}).finally(()=>{H.signal.aborted||P(!1)}),()=>H.abort()},[t,e,f,w]);let W=Wt(l.commits,p);return A.default.createElement("section",{className:"vcs-history","aria-label":i("history"),"aria-busy":F},A.default.createElement("p",null,i("historyListOnly")),d!==null&&A.default.createElement("p",null,i("historyRefsScope")),A.default.createElement("label",null,i("historySearch")," ",A.default.createElement("input",{"aria-label":i("historySearch"),value:p,onChange:H=>{a(H.target.value),C(null)}})),A.default.createElement("span",null," ",W.length," / ",l.commits.length),!!l.commits.length&&!W.length&&A.default.createElement("p",{role:"status"},i("historyNoMatch")),A.default.createElement("ol",null,W.map(H=>A.default.createElement("li",{key:H.id},A.default.createElement("button",{"aria-pressed":N===H.id,onClick:()=>C(H.id)},H.subject),A.default.createElement("div",null,A.default.createElement("code",{title:H.id},H.id.slice(0,10))," \xB7 ",H.author," \xB7 ",A.default.createElement("time",{dateTime:H.date},H.date)),m.has(H.id)&&A.default.createElement("div",{"aria-label":i("historyRefsLabel"),style:{overflowWrap:"anywhere"}},m.get(H.id).names.map(v=>A.default.createElement("span",{key:v},A.default.createElement("code",null,v)," ")),m.get(H.id).hidden>0&&A.default.createElement("span",null,i("historyRefsMore"),": ",m.get(H.id).hidden))))),F&&A.default.createElement("p",{role:"status"},i("loading")),b&&A.default.createElement("p",{role:"alert"},b," ",A.default.createElement("button",{onClick:()=>L(H=>H+1)},i("retry"))),!F&&!b&&!l.commits.length&&A.default.createElement("p",null,i("historyEmpty")),l.truncated&&A.default.createElement("p",{role:"status"},i("historyLimit")),!b&&l.nextOffset!==null&&A.default.createElement("button",{disabled:F,onClick:()=>g(l.nextOffset)},i("historyMore")),!!l.commits.length&&A.default.createElement(st,{commits:l.commits,selected:N,onSelect:C,t:i}),A.default.createElement(it,{onReferencesLoaded:h,commits:l.commits,sessionId:t,repositoryId:e,rpc:s,t:i,onRediscover:r}),N&&A.default.createElement(ot,{key:JSON.stringify([N,c.revision]),initialPath:c.path,sessionId:t,repositoryId:e,commit:N,onSelectCommit:k,rpc:s,t:i,onRediscover:r}))}var Gt={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",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",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",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",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",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",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",treeBreadcrumbs:"Historical directory path",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 Jt(t,e,s,i){let r=t.target;if(!e?.contains(r)||t.defaultPrevented||t.isComposing||r?.closest?.(".monaco-editor")||r?.closest?.(".vcs-history"))return null;if(t.key==="Escape"&&r===s&&i)return"clear";let c=r?.isContentEditable||r?.closest?.('input,textarea,select,[role="textbox"]');if(c&&r!==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 Kt=t=>"dsh-vcs:project:v1:"+t;function _t(t,e){if(!t)return"";try{let s=(e??globalThis.localStorage)?.getItem(Kt(t));return typeof s=="string"&&s.length<=1024?s:""}catch{return""}}function Vt(t,e,s){if(!(!t||!e))try{(s??globalThis.localStorage)?.setItem(Kt(t),e)}catch{}}function Xt(t,e=""){return t.find(s=>s.id===e)?.id||t.find(s=>s.relativePath===".")?.id||t[0]?.id||""}var ge=(t,e)=>JSON.stringify([t,e]),ve=(t,e=".")=>[t.type.toUpperCase(),t.relativePath==="."?e:t.relativePath||".",t.branch].filter(Boolean).join(" \xB7 "),Be=(t,e="all")=>t.type==="git"&&["staged","unstaged"].includes(e)?e:"all",Qt=(t="",e="")=>t===e?0:t<e?-1:1;function at(t=[]){let e={id:"",name:"",directories:new Map,files:[],count:0};for(let i of t){let r=String(i.path||"").split("/").filter(Boolean);if(!r.length)continue;let c=e;for(let u of r.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(i)}let s=i=>({...i,directories:[...i.directories.values()].sort((r,c)=>Qt(r.name,c.name)).map(s),files:[...i.files].sort((r,c)=>Qt(r.path,c.path))});return s(e)}function Yt(t=[],e){let s=t.findIndex(i=>i.id===e);return{index:s<0?0:s+1,total:t.length}}function $t(t=[],e,s){if(!t.length||!["previous","next"].includes(s))return null;let i=t.findIndex(u=>u.id===e),r=s==="next"?1:-1,c=i<0?s==="next"?-1:0:i;return t[(c+r+t.length)%t.length]||null}function Zt(t=""){let e=String(t).split("/").filter(Boolean);return e.slice(0,-1).map((s,i)=>e.slice(0,i+1).join("/"))}function lt(t,e=[]){for(let s of t?.directories||[])e.push(s.id),lt(s,e);return e}function Rt(t=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[t]||t}function er(t=[]){return t.reduce((e,s)=>{let i=Rt(s.status);return e.all++,e[i]=(e[i]||0)+1,e},{all:0})}function Gr(t=[],e="",s="all"){let i=e.toLowerCase();return t.filter(r=>(s==="all"||Rt(r.status)===s)&&r.path.toLowerCase().includes(i)).sort((r,c)=>r.path.localeCompare(c.path))}function tr(t,e,s="",i="all"){return t.map(r=>({...e[r.id],repository:r,changes:Gr(e[r.id]?.changes,s,i)}))}function rr(t,e,s=""){if(!s||!t||t.cwd!==e.cwd)return e;let i=new Map(t.repositories.map(r=>[r.id,r]));for(let r of e.repositories)i.set(r.id,r);return{...e,repositories:[...i.values()],truncated:t.truncated||e.truncated,warnings:[...t.warnings||[],...e.warnings||[]]}}function or(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 i(){for(;e<t&&s.length;){let r=s.shift();if(r.signal?.removeEventListener("abort",r.abort),r.signal?.aborted){r.reject(new Error("Aborted"));continue}e++,Promise.resolve().then(()=>{if(r.signal?.aborted)throw new Error("Aborted");return r.run()}).then(r.resolve,r.reject).finally(()=>{e--,i()})}}return(r,c)=>new Promise((u,p)=>{let a={run:r,signal:c,resolve:u,reject:p,abort:null};if(a.abort=()=>{let d=s.indexOf(a);d>=0&&(s.splice(d,1),p(new Error("Aborted")))},c?.aborted){p(new Error("Aborted"));return}c?.addEventListener("abort",a.abort,{once:!0}),s.push(a),i()})}var sr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},ir=t=>new URL("vcs-assets/"+t,document.baseURI).href;function nr(){return o.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},o.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),o.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var Jr=["slots","layout","locale","connection","uiSession"];function Kr(t){t.effect(()=>t.locale.register("local.vcs",Gt));let e=t.locale.bind("local.vcs"),s=or(2);async function i(p,a,d){let h=await t.connection.rpc.call("/vcs-rpc",p,a,d);if(!h.ok){let m=new Error(h.error?.message||String(h.error||e("error")));throw m.code=h.error?.code,m}return h.value}function r(p){let a=p.useSessions(d=>Object.values(d.byId).find(h=>(h.retainedBy.mainView??0)>0));return o.default.createElement(c,{key:JSON.stringify([a?.id,a?.cwd])},o.default.createElement(u,{session:a}))}class c extends o.default.Component{state={error:null};static getDerivedStateFromError(a){return{error:a}}render(){return this.state.error?o.default.createElement("section",{className:"vcs-root"},o.default.createElement("style",null,Xe),o.default.createElement("div",{className:"vcs-message vcs-error"},e("error"),o.default.createElement("button",{onClick:()=>this.setState({error:null})},e("retry")),o.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")))):this.props.children}}function u({session:p}){(0,o.useSyncExternalStore)(n=>t.locale.subscribe(n),()=>t.locale.getSnapshot(),()=>t.locale.getSnapshot());let a=p?.id,[d,h]=(0,o.useState)("all"),[m,N]=(0,o.useState)(0),[k,C]=(0,o.useState)(null),[l,x]=(0,o.useState)({}),[f,g]=(0,o.useState)(()=>_t(p?.cwd)),[w,L]=(0,o.useState)(0),[F,P]=(0,o.useState)(""),[b,U]=(0,o.useState)(""),[W,H]=(0,o.useState)(null),[v,V]=(0,o.useState)(null),[be,dt]=(0,o.useState)(!1),[ar,ct]=(0,o.useState)(!1),[te,pt]=(0,o.useState)(""),[Me,ne]=(0,o.useState)(""),[X,ut]=(0,o.useState)(""),[ft,mt]=(0,o.useState)(!1),[Z,Fe]=(0,o.useState)(""),[ye,ht]=(0,o.useState)("all"),[re,gt]=(0,o.useState)(!0),[vt,He]=(0,o.useState)({}),[ae,lr]=(0,o.useState)(!0),[Te,dr]=(0,o.useState)(!1),[Oe,cr]=(0,o.useState)(!1),[xe,le]=(0,o.useState)("content"),[bt,yt]=(0,o.useState)(0),[xt,pr]=(0,o.useState)(!1),[je,Ie]=(0,o.useState)({added:0,deleted:0,count:0}),[Q,wt]=(0,o.useState)(!1),kt=(0,o.useRef)(null),Ue=(0,o.useRef)(null),oe=(0,o.useRef)(null),We=(0,o.useRef)(null),we=(0,o.useRef)(null),qe=(0,o.useRef)(null),St=(0,o.useRef)(null),ke=(0,o.useRef)(null),ze=(0,o.useRef)(null),Ge=(0,o.useRef)(null),Je=(0,o.useRef)(!1),Se=(0,o.useRef)(!1),R=k?.repositories||[],de=R.filter(n=>n.id===f);(0,o.useEffect)(()=>{R.some(n=>n.id===f)&&Vt(p?.cwd,f)},[p?.cwd,f,k]);let ce=()=>{St.current?.abort(),ke.current?.abort(),V(null),H(null),ne(""),le("content"),Ie({added:0,deleted:0,count:0})},Ce=()=>{Se.current=!1,ce(),ze.current?.abort(),Ge.current=k,C(null),x({}),U(F.trim()),L(n=>n+1)},Ke=()=>{Se.current||(Se.current=!0,ce(),ze.current?.abort(),Ge.current=null,C(null),x({}),U(""),L(n=>n+1))},Ct=(n=!1)=>{Je.current=n,n||ce(),n||x({}),N(y=>y+1)};(0,o.useEffect)(()=>{let n=new AbortController;return ze.current=n,pt(""),dt(!!a),a&&i("vcs/repositories",{sessionId:a,...b?{subdirectory:b}:{}},n.signal).then(y=>{if(!n.signal.aborted){let D=rr(Ge.current,y,b);Se.current=!1,g(j=>Xt(D.repositories,j)),C(D)}}).catch(y=>{n.signal.aborted||pt(y.message)}).finally(()=>{n.signal.aborted||dt(!1)}),()=>n.abort()},[a,w,b]),(0,o.useEffect)(()=>{let n=new AbortController,y=Je.current;St.current=n,Je.current=!1,y||(x({}),ne(""));for(let D of de){let j=Be(D,d);s(()=>i("vcs/status",{sessionId:a,repositoryId:D.id,mode:j},n.signal),n.signal).then(G=>{n.signal.aborted||x(Y=>({...Y,[D.id]:{...G,mode:j}}))}).catch(G=>{if(!n.signal.aborted){if(G.code==="vcs/rediscover-required"){Ke();return}x(Y=>({...Y,[D.id]:{error:G.message,changes:[],mode:j}}))}})}return()=>n.abort()},[a,k,f,d,m]),(0,o.useEffect)(()=>{let n=()=>{a&&f&&document.visibilityState==="visible"&&Ct(!0)};return window.addEventListener("focus",n),()=>window.removeEventListener("focus",n)},[a,f,d]);let Ne=R.find(n=>n.id===W?.repositoryId),pe=W?l[W.repositoryId]:null;(0,o.useEffect)(()=>{let n=new AbortController;return ke.current=n,V(null),ne(""),Ie({added:0,deleted:0,count:0}),le("content"),ct(!!W&&!!pe),W&&pe&&Ne&&i("vcs/compare",{sessionId:a,repositoryId:W.repositoryId,mode:Be(Ne,d),id:W.id},n.signal).then(y=>{n.signal.aborted||V(y)}).catch(y=>{if(!n.signal.aborted){if(y.code==="vcs/rediscover-required"){Ke();return}ne(y.message)}}).finally(()=>{n.signal.aborted||ct(!1)}),()=>n.abort()},[W,pe,a,d]),(0,o.useEffect)(()=>{let n=!1,y,D=new AbortController;wt(!1),ut("");let j=document.createElement("link");return j.rel="stylesheet",j.href=ir("editor.css"),Ue.current.parentNode.appendChild(j),Le(ir("editor.js")+"?v="+encodeURIComponent(Pe)+"&retry="+bt,{signal:D.signal}).then(G=>{n||(y=G.createDiff(Ue.current,{onStats:Ie}),oe.current=y,wt(!0))}).catch(G=>{n||ut(G.message)}),()=>{n=!0,D.abort(),y?.dispose(),oe.current=null,j.remove()}},[bt]),(0,o.useEffect)(()=>{Q&&v&&!v.binary&&oe.current?.setContent(v,JSON.stringify([a,k?.cwd,W?.repositoryId,d,W?.id,v.path]))},[Q,v,a,k,W,d]),(0,o.useEffect)(()=>{oe.current?.options({sideBySide:ae,ignoreWhitespace:Te,wrap:Oe})},[Q,ae,Te,Oe]);let ue=tr(de,l,Z,ye),se=ue.flatMap(n=>n.changes),ur=er(pe?.changes),_e=Yt(se,W?.id),Nt=()=>{Fe(""),ht("all")},fr=async()=>{let n=v?.path||$?.path;if(n)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(n);else{let y=document.createElement("textarea");try{if(y.value=n,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{ne(e("copyFailed"))}};(0,o.useEffect)(()=>{let n=y=>{let D=Jt(y,kt.current,we.current,!!Z);D&&(y.preventDefault(),D==="search"?(we.current?.focus(),we.current?.select()):D==="clear"?Fe(""):Ve(D))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[Z,se,W]);let Et=n=>He(y=>{let D={...y};for(let j of ue)for(let G of lt(at(j.changes)))D[j.repository.id+"\0"+G]=!n;return D}),mr=()=>{let n=$;!n||!W||(gt(!0),Nt(),He(y=>{let D={...y};for(let j of Zt(n.path))D[W.repositoryId+"\0"+j]=!1;return D}),qe.current=ge(W.repositoryId,n.id))};(0,o.useEffect)(()=>{let n=qe.current;if(!n)return;let y=[...We.current?.querySelectorAll("button[data-vcs-change]")||[]].find(D=>D.dataset.vcsChange===n);y&&(y.scrollIntoView({block:"nearest"}),y.focus(),qe.current=null)},[re,Z,ye,vt,ue]);let Ve=n=>{let y=$t(se,W?.id,n);y&&(ke.current?.abort(),V(null),le("content"),H({repositoryId:f,id:y.id}))},At=be||de.some(n=>!l[n.id]),$=pe?.changes?.find(n=>n.id===W?.id),ee=v?.properties,Qe=ee?[...new Set([...Object.keys(ee.left||{}),...Object.keys(ee.right||{})])].filter(n=>ee.left?.[n]!==ee.right?.[n]):[],fe=n=>sr[n?.status]||n?.status?.slice(0,1).toUpperCase()||"M",Lt=v?.binary?[v.left.label,v.right.label].filter(Boolean).join(" \u2194 "):"",ie=Me||(ar?e("loading"):a?At&&!$?e("loading"):te||(R.length?$?v?.binary?e("binary")+(Lt?" "+e("binaryComparison",{files:Lt}):""):v?!Q&&!X?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession")),hr=n=>{let y=We.current,D=y?[...y.querySelectorAll("button[data-vcs-item]")]:[],j=D.indexOf(n.target);if(j<0)return;let G;if(n.key==="ArrowDown")G=D[j+1];else if(n.key==="ArrowUp")G=D[j-1];else if(n.key==="Home")G=D[0];else if(n.key==="End")G=D.at(-1);else if(n.key==="ArrowRight"&&n.target.dataset.vcsDirectory==="closed"){n.preventDefault(),n.target.click();return}else if(n.key==="ArrowLeft"&&n.target.dataset.vcsDirectory==="open"){n.preventDefault(),n.target.click();return}else return;n.preventDefault(),G?.focus()},Pt=({entry:n,compact:y=!1,depth:D=0})=>{let j=n.path.lastIndexOf("/");return o.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":ge(f,n.id),"aria-current":W?.repositoryId===f&&W?.id===n.id?"true":void 0,style:{paddingInlineStart:8+D*14},title:(n.oldPath?n.oldPath+" \u2192 ":"")+n.path+" \xB7 "+e(fe(n)),onClick:()=>{ke.current?.abort(),V(null),le("content"),H({repositoryId:f,id:n.id})}},o.default.createElement("span",{className:"vcs-status","data-status":fe(n)},fe(n)),o.default.createElement("span",{className:"vcs-filename"},y?n.path.slice(j+1):n.path,n.oldPath&&o.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",n.oldPath)))},Dt=({node:n,repository:y,depth:D=0})=>o.default.createElement(o.default.Fragment,null,n.directories.map(j=>{let G=y.id+"\0"+j.id,Y=!!vt[G];return o.default.createElement(o.default.Fragment,{key:G},o.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":Y?"closed":"open","aria-expanded":!Y,style:{paddingInlineStart:8+D*14},onClick:()=>He(gr=>({...gr,[G]:!Y}))},o.default.createElement("span",{"aria-hidden":"true"},Y?"\u203A":"\u2304"),j.name,o.default.createElement("small",null,j.count)),!Y&&o.default.createElement(Dt,{node:j,repository:y,depth:D+1}))}),n.files.map(j=>o.default.createElement(Pt,{key:ge(y.id,j.id),entry:j,compact:n.id!=="",depth:D})));return o.default.createElement("section",{ref:kt,className:"vcs-root","aria-label":e("title")},o.default.createElement("style",null,Xe),o.default.createElement("header",{className:"vcs-top"},o.default.createElement(nr,null),o.default.createElement("h1",{className:"vcs-title"},e("title")),o.default.createElement("span",{className:"vcs-badge"},e("readonly")),o.default.createElement("span",{className:"vcs-spacer"}),o.default.createElement("select",{"aria-label":e("repositories"),value:f,disabled:be||!R.length,onChange:n=>{ce(),x({}),g(n.target.value)}},!R.length&&o.default.createElement("option",{value:""},e("repositories")),R.map(n=>o.default.createElement("option",{key:n.id,value:n.id},ve(n,e("workspaceRoot"))))),o.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",o.default.createElement("select",{"aria-label":e("gitMode"),value:d,disabled:!de.some(n=>n.type==="git"),onChange:n=>{ce(),x({}),h(n.target.value)}},["all","unstaged","staged"].map(n=>o.default.createElement("option",{key:n,value:n},e(n))))),o.default.createElement("button",{onClick:Ct,disabled:At||!a},e("refresh")),o.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")),o.default.createElement("div",{className:"vcs-path",title:k?.cwd||p?.cwd},e("session"),": ",k?.cwd||p?.cwd||"\u2014"),o.default.createElement("form",{className:"vcs-discovery",onSubmit:n=>{n.preventDefault(),Ce()}},o.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:F,onChange:n=>P(n.target.value)}),o.default.createElement("button",{disabled:!a||be},e("rescan")),o.default.createElement("span",null,e("scanHint"))),k?.truncated&&o.default.createElement("div",{className:"vcs-notice"},e("truncated")),(k?.warnings||[]).map((n,y)=>o.default.createElement("div",{className:"vcs-notice",key:y},typeof n=="string"?n:n.message||JSON.stringify(n)))),de.some(n=>n.type==="git")&&o.default.createElement(o.default.Fragment,null,o.default.createElement("button",{"aria-expanded":xt,onClick:()=>pr(n=>!n)},e("history")),xt&&o.default.createElement(nt,{key:JSON.stringify([a,f,m,w]),sessionId:a,repositoryId:f,rpc:i,t:e,onRediscover:Ke})),o.default.createElement("div",{className:"vcs-body"},o.default.createElement("aside",{className:"vcs-files"},o.default.createElement("div",{className:"vcs-filter"},o.default.createElement("input",{ref:we,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:Z,onChange:n=>Fe(n.target.value)}),(Z||ye!=="all")&&o.default.createElement("button",{className:"vcs-clear-filter",onClick:Nt},e("clearFilters"))),o.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(n=>o.default.createElement("button",{key:n,"aria-pressed":ye===n,onClick:()=>ht(n)},e(n==="all"?"allFiles":sr[n]||"M")," ",o.default.createElement("small",null,ur[n]||0)))),o.default.createElement("div",{className:"vcs-count"},o.default.createElement("span",null,se.length," ",e("files")),o.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),o.default.createElement("button",{"aria-pressed":re,onClick:()=>gt(!re)},e(re?"tree":"list"))),re&&o.default.createElement("div",{className:"vcs-tree-actions"},o.default.createElement("button",{onClick:()=>Et(!0)},e("expandAll")),o.default.createElement("button",{onClick:()=>Et(!1)},e("collapseAll")),o.default.createElement("button",{onClick:mr,disabled:!$},e("revealSelected"))),o.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:We,onKeyDown:hr},ue.map(n=>{let y=n.repository;return o.default.createElement("section",{className:"vcs-repository",key:y.id,"aria-label":ve(y,e("workspaceRoot"))},o.default.createElement("div",{className:"vcs-repository-heading",title:y.root},o.default.createElement("strong",null,ve(y,e("workspaceRoot"))),o.default.createElement("small",null,y.type==="svn"?e("svnBase"):e(Be(y,d)))),n.error?o.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},n.error,o.default.createElement("button",{onClick:Ce},e("rescan"))):l[y.id]?re?o.default.createElement(Dt,{node:at(n.changes),repository:y}):n.changes.map(D=>o.default.createElement(Pt,{key:ge(y.id,D.id),entry:D})):o.default.createElement("div",{className:"vcs-message"},e("loading")),!n.error&&l[y.id]&&!n.changes.length&&o.default.createElement("div",{className:"vcs-message"},e(Z?"emptySearch":"clean")))}),!ue.length&&o.default.createElement("div",{className:"vcs-message"},be?e("loading"):te||e(a?"noRepo":"noSession"),te&&o.default.createElement("button",{onClick:Ce},e("rescan"))))),o.default.createElement("main",{className:"vcs-detail"},o.default.createElement("div",{className:"vcs-filehead"},o.default.createElement("strong",{title:v?.path||$?.path},Ne?ve(Ne,e("workspaceRoot"))+" / ":"",v?.path||$?.path||e("pick")),o.default.createElement("button",{className:"vcs-copy-path",disabled:!(v?.path||$?.path),onClick:fr},e(ft?"copied":"copyPath")),ft&&o.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),o.default.createElement("span",{className:"vcs-spacer"}),v&&!v.binary&&Q&&o.default.createElement(o.default.Fragment,null,o.default.createElement("span",{className:"vcs-add"},"+",je.added),o.default.createElement("span",{className:"vcs-del"},"\u2212",je.deleted))),X&&o.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",o.default.createElement("button",{onClick:()=>yt(n=>n+1)},e("retry")),o.default.createElement("details",null,o.default.createElement("summary",null,e("diagnostics")),X)),v&&o.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},o.default.createElement("span",{className:"vcs-context-status","data-status":fe(v)},e(fe(v))),v.oldPath&&o.default.createElement("span",{className:"vcs-context-rename",title:v.oldPath+" \u2192 "+v.path},v.oldPath," ",o.default.createElement("b",null,"\u2192")," ",v.path),o.default.createElement("span",null,v.left.label||"\u2014"," ",o.default.createElement("b",null,"\u2194")," ",v.right.label||"\u2014"),(v.left.encoding||v.right.encoding)&&o.default.createElement("span",null,e("encoding"),": ",v.left.encoding||"\u2014"," / ",v.right.encoding||"\u2014")),v?.notice&&o.default.createElement("div",{className:"vcs-notice"},v.notice),Qe.length>0&&o.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(n=>o.default.createElement("button",{key:n,"aria-pressed":xe===n,onClick:()=>le(n)},e(n),n==="properties"?" ("+Qe.length+")":""))),o.default.createElement("div",{className:"vcs-labels"},o.default.createElement("span",null,v?.left.label||"\u2014",v?.left.encoding?" \xB7 "+v.left.encoding:""),o.default.createElement("span",null,v?.right.label||"\u2014",v?.right.encoding?" \xB7 "+v.right.encoding:"")),o.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!ie||xe!=="content",style:xe==="properties"?{display:"none"}:void 0},o.default.createElement("div",{className:"vcs-editor",ref:Ue,style:X?{display:"none"}:void 0}),X&&v&&!v.binary&&!ie&&o.default.createElement(me,{comparison:v,labels:Ae(e)}),ie&&o.default.createElement("div",{className:"vcs-message "+(te||Me||X?"vcs-error":""),role:"status"},ie,(te||Me||X)&&o.default.createElement("button",{onClick:()=>X?yt(n=>n+1):Ce()},e(X?"retry":"rescan")))),xe==="properties"&&o.default.createElement("div",{className:"vcs-properties"},o.default.createElement("table",null,o.default.createElement("thead",null,o.default.createElement("tr",null,o.default.createElement("th",null,e("properties")),o.default.createElement("th",null,v?.left.label||e("before")),o.default.createElement("th",null,v?.right.label||e("after")))),o.default.createElement("tbody",null,Qe.map(n=>o.default.createElement("tr",{key:n},o.default.createElement("th",null,n),o.default.createElement("td",null,ee.left?.[n]??"\u2014"),o.default.createElement("td",null,ee.right?.[n]??"\u2014")))))),o.default.createElement("footer",{className:"vcs-toolbar"},o.default.createElement("button",{disabled:!Q,"aria-pressed":ae,onClick:()=>lr(!ae)},e(ae?"side":"inline")),o.default.createElement("label",null,o.default.createElement("input",{type:"checkbox",disabled:!Q,checked:Te,onChange:n=>dr(n.target.checked)}),e("whitespace")),o.default.createElement("label",null,o.default.createElement("input",{type:"checkbox",disabled:!Q,checked:Oe,onChange:n=>cr(n.target.checked)}),e("wrap")),o.default.createElement("span",{className:"vcs-spacer"}),Q&&o.default.createElement("span",null,je.count," ",e("changes")),o.default.createElement("button",{disabled:!Q||!v||!!ie,onClick:()=>oe.current?.navigate("previous")},e("previous")),o.default.createElement("button",{disabled:!Q||!v||!!ie,onClick:()=>oe.current?.navigate("next")},e("next")),_e.index>0&&o.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:_e.index,total:_e.total})),o.default.createElement("span",{className:"vcs-toolbar-separator"}),o.default.createElement("button",{title:e("fileShortcut"),disabled:!se.length,onClick:()=>Ve("previous")},e("previousFile")),o.default.createElement("button",{title:e("fileShortcut"),disabled:!se.length,onClick:()=>Ve("next")},e("nextFile"))))))}t.slots.inject("main",()=>t.slots.register({name:"main",key:"local-vcs"},r)),t.slots.inject("sidebar.panellist",()=>t.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>e("title"),order:65},nr))}
95
+ `;var J=_(require("react"),1);function Ht(t){return t===""?[]:t.split(/\r\n|\n|\r/)}function Ft(t="",e=""){let s=Ht(t),i=Ht(e),o=0;for(;o<s.length&&o<i.length&&s[o]===i[o];)o++;let c=0;for(;c<s.length-o&&c<i.length-o&&s[s.length-c-1]===i[i.length-c-1];)c++;let u=s.length-c,p=i.length-c,a=u-o,d=p-o,h=a&&d?(a+1)*(d+1):0,m=h>2e5,N=[],k=0;function C(l,x){k++,!(N.length>=2e3)&&N.push({left:l===null?null:{number:l+1,text:s[l]},right:x===null?null:{number:x+1,text:i[x]},kind:l===null?"insert":x===null?"delete":s[l]===i[x]?"equal":"replace"})}for(let l=0;l<o;l++)C(l,l);if(m||!a||!d)for(let l=0;l<Math.max(a,d);l++)C(l<a?o+l:null,l<d?o+l:null);else{let l=d+1,x=new Uint32Array(h);for(let w=a-1;w>=0;w--)for(let L=d-1;L>=0;L--)x[w*l+L]=s[o+w]===i[o+L]?x[(w+1)*l+L+1]+1:Math.max(x[(w+1)*l+L],x[w*l+L+1]);let f=0,v=0;for(;f<a||v<d;)f<a&&v<d&&s[o+f]===i[o+v]?C(o+f++,o+v++):f<a&&(v===d||x[(f+1)*l+v]>=x[f*l+v+1])?C(o+f++,null):C(null,o+v++)}for(let l=0;l<c;l++)C(u+l,p+l);return{rows:N,approximate:m,truncated:k>N.length,totalRows:k,omittedRows:k-N.length,leftLineCount:s.length,rightLineCount:i.length,lcsCells:m?0:h}}var Lr={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."},$e={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Pr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Dr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Br={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function ve({comparison:t,labels:e={}}){let s=t?.left?.text??"",i=t?.right?.text??"",o=(0,J.useMemo)(()=>Ft(s,i),[s,i]),c=p=>e[p]??Lr[p],u=(p,a,d)=>{let h=p&&d!=="equal";return J.default.createElement("td",{style:{...$e,background:h?a==="left"?"#d6454520":"#259b4920":void 0}},J.default.createElement("div",{style:Pr},J.default.createElement("span",{style:Dr},p?.number??""),J.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},h?a==="left"?"\u2212":"+":""),J.default.createElement("pre",{style:Br},p?.text??"")))};return J.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&&J.default.createElement("div",{role:"status",style:{padding:8}},c("approximate")),o.truncated&&J.default.createElement("div",{role:"status",style:{padding:8}},c("truncated")," (",2e3," / ",o.totalRows,")"),J.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},J.default.createElement("thead",null,J.default.createElement("tr",null,J.default.createElement("th",{scope:"col",style:{...$e,padding:8,overflowWrap:"anywhere"}},t?.left?.label||c("before")),J.default.createElement("th",{scope:"col",style:{...$e,padding:8,overflowWrap:"anywhere"}},t?.right?.label||c("after")))),J.default.createElement("tbody",null,o.rows.map((p,a)=>J.default.createElement("tr",{key:a,"data-kind":p.kind},u(p.left,"left",p.kind),u(p.right,"right",p.kind))))),!o.rows.length&&J.default.createElement("p",{style:{padding:8}},c("empty")))}function Le(t){return{before:t("textBefore"),after:t("textAfter"),readonly:t("textReadonly"),empty:t("textEmpty"),approximate:t("approximate"),truncated:t("textTruncated")}}var A=_(require("react"),1);function Tt(t){let e=new Map;for(let s of t){let i=e.get(s.commit);i||(i={names:[],hidden:0},e.set(s.commit,i)),i.names.length<3?i.names.push(s.name):i.hidden++}return e}var M=_(require("react"),1);var E=_(require("react"),1);var z=_(require("react"),1);function Ze({sessionId:t,repositoryId:e,commit:s,path:i,rpc:o,t:c,onRediscover:u,onClose:p}){let[a,d]=(0,z.useState)(null),[h,m]=(0,z.useState)(""),[N,k]=(0,z.useState)(0);return(0,z.useEffect)(()=>{let C=new AbortController;return d(null),m(""),o("vcs/tree-file",{sessionId:t,repositoryId:e,commit:s,path:i},C.signal).then(l=>{C.signal.aborted||d(l)}).catch(l=>{C.signal.aborted||(m(l.message),l.code==="vcs/rediscover-required"&&u())}),()=>C.abort()},[t,e,s,i,N]),z.default.createElement("section",{"aria-label":c("treePreview")},z.default.createElement("h4",null,i),z.default.createElement("button",{onClick:p},c("treeClose")),z.default.createElement("p",null,z.default.createElement("code",null,s)),h?z.default.createElement("p",{role:"alert"},h," ",z.default.createElement("button",{onClick:()=>k(C=>C+1)},c("retry"))):a?z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,z.default.createElement("code",null,a.oid)," \xB7 ",c("encoding"),": ",a.encoding||"\u2014"),a.notice&&z.default.createElement("p",{role:"status"},a.notice),a.binary?z.default.createElement("p",null,c("binary")):a.text===""?z.default.createElement("p",null,c("treeEmpty")):z.default.createElement("pre",{tabIndex:0,style:{maxHeight:480,overflow:"auto",whiteSpace:"pre",tabSize:4}},a.text)):z.default.createElement("p",{role:"status"},c("loading")))}function Ot(t=""){let e=[{path:"",name:"/"}];if(t){let s="";for(let i of t.split("/"))s=s?s+"/"+i:i,e.push({path:s,name:i})}return e}function jt(t,e="",s=""){let i=e?e+"/":"",o=s.toLowerCase();return t.filter(c=>{let u=c.path.slice(i.length);return c.path.startsWith(i)&&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 Mr({sessionId:t,repositoryId:e,commit:s,rpc:i,t:o,onRediscover:c}){let[u,p]=(0,E.useState)(null),[a,d]=(0,E.useState)(""),[h,m]=(0,E.useState)(0),[N,k]=(0,E.useState)(""),[C,l]=(0,E.useState)(0),[x,f]=(0,E.useState)(""),[v,w]=(0,E.useState)(null);if((0,E.useEffect)(()=>{let b=new AbortController;return p(null),d(""),i("vcs/tree",{sessionId:t,repositoryId:e,commit:s},b.signal).then(U=>{b.signal.aborted||p(U)}).catch(U=>{b.signal.aborted||(d(U.message),U.code==="vcs/rediscover-required"&&c())}),()=>b.abort()},[t,e,s,h]),a)return E.default.createElement("p",{role:"alert"},a," ",E.default.createElement("button",{onClick:()=>m(b=>b+1)},o("retry")));if(!u)return E.default.createElement("p",{role:"status"},o("loading"));let L=N?N+"/":"",H=jt(u.entries,N,x),P=b=>{k(b),l(0),f(""),w(null)};return E.default.createElement("section",{"aria-label":o("historicalTree")},E.default.createElement("p",null,o("historicalTreeScope")),E.default.createElement("code",null,s),E.default.createElement("p",null,N||"/"," ",N&&E.default.createElement("button",{onClick:()=>P(N.includes("/")?N.slice(0,N.lastIndexOf("/")):"")},o("treeUp"))),E.default.createElement("nav",{"aria-label":o("treeBreadcrumbs")},Ot(N).map(b=>E.default.createElement(E.default.Fragment,{key:b.path},b.path&&" / ",b.path===N?E.default.createElement("span",{"aria-current":"location"},b.name):E.default.createElement("button",{onClick:()=>P(b.path)},b.name)))),E.default.createElement("label",null,o("treeSearch")," ",E.default.createElement("input",{"aria-label":o("treeSearch"),value:x,onChange:b=>{f(b.target.value),l(0),w(null)}})),E.default.createElement("p",null,H.length," ",o("treeEntries")),!H.length&&x&&E.default.createElement("p",{role:"status"},o("emptySearch")),E.default.createElement("ul",null,H.slice(C*100,C*100+100).map(b=>E.default.createElement("li",{key:b.path},b.type==="tree"?E.default.createElement("button",{onClick:()=>P(b.path)},b.path.slice(L.length),"/"):b.type==="blob"&&["100644","100755"].includes(b.mode)?E.default.createElement("button",{"aria-pressed":v===b.path,onClick:()=>w(b.path)},b.path.slice(L.length)):E.default.createElement("span",null,b.path.slice(L.length))," \xB7 ",E.default.createElement("code",null,b.mode," ",b.type," ",E.default.createElement("span",{title:b.oid},b.oid.slice(0,10)))))),C>0&&E.default.createElement("button",{onClick:()=>{l(b=>b-1),w(null)}},o("treePrevious")),(C+1)*100<H.length&&E.default.createElement("button",{onClick:()=>{l(b=>b+1),w(null)}},o("treeNext")),v&&E.default.createElement(Ze,{key:JSON.stringify([t,e,s,v]),sessionId:t,repositoryId:e,commit:s,rpc:i,t:o,onRediscover:c,path:v,onClose:()=>w(null)}))}function Re(t){return E.default.createElement(Hr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Hr(t){let[e,s]=(0,E.useState)(!1);return E.default.createElement("div",null,E.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("historicalTree")),e&&E.default.createElement(Mr,{...t}))}var V=_(require("react"),1);var I=_(require("react"),1);function It({load:t,node:e,comparison:s,key:i,onReady:o=()=>{},onError:c=()=>{}}){let u=new AbortController,p,a=!1,d=()=>{let m=p;p=void 0,m?.dispose()};return{done:Promise.resolve().then(()=>(u.signal.throwIfAborted(),t(u.signal))).then(m=>{a||(p=m.createDiff(e),p.setContent(s,i),a||o(p))}).catch(m=>{try{d()}finally{a||c(m)}}),dispose(){a||(a=!0,u.abort(),d())}}}async function Pe(t,{signal:e,fetcher:s=fetch,importer:i=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(),i(t)}var De="0.3.48";function et({comparison:t,identity:e,t:s}){let i=(0,I.useRef)(null),o=(0,I.useRef)(null),[c,u]=(0,I.useState)(!0),[p,a]=(0,I.useState)(!1),[d,h]=(0,I.useState)(!1),[m,N]=(0,I.useState)(!1),[k,C]=(0,I.useState)(!1),[l,x]=(0,I.useState)("");return(0,I.useEffect)(()=>{if(C(!1),x(""),!m)return;let f=L=>new URL("vcs-assets/"+L,document.baseURI).href,v=document.createElement("link");v.rel="stylesheet",v.href=f("editor.css"),i.current.parentNode.appendChild(v);let w=It({node:i.current,comparison:t,key:e,load:L=>Pe(f("editor.js")+"?v="+encodeURIComponent(De)+"&retry=0",{signal:L}),onReady:L=>{o.current=L,C(!0)},onError:L=>x(L.message)});return()=>{o.current=null;try{w.dispose()}finally{v.remove()}}},[m,t,e]),(0,I.useEffect)(()=>{k&&o.current?.options({sideBySide:c,ignoreWhitespace:p,wrap:d})},[k,c,p,d]),I.default.createElement("div",null,I.default.createElement("button",{"aria-pressed":m,onClick:()=>N(f=>!f)},s(m?"historyBasic":"historyAdvanced")),k&&I.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8}},I.default.createElement("button",{"aria-pressed":c,onClick:()=>u(f=>!f)},s(c?"side":"inline")),I.default.createElement("label",null,I.default.createElement("input",{type:"checkbox",checked:p,onChange:f=>a(f.target.checked)}),s("whitespace")),I.default.createElement("label",null,I.default.createElement("input",{type:"checkbox",checked:d,onChange:f=>h(f.target.checked)}),s("wrap")),I.default.createElement("button",{onClick:()=>o.current?.navigate("previous")},s("previous")),I.default.createElement("button",{onClick:()=>o.current?.navigate("next")},s("next"))),m&&!k&&!l&&I.default.createElement("p",{role:"status"},s("loading")),l&&I.default.createElement("p",{role:"status"},s("fallback")," ",l),I.default.createElement("div",{style:{position:"relative",height:360}},I.default.createElement("div",{ref:i,style:{position:"absolute",inset:0,visibility:k?"visible":"hidden"},"aria-hidden":!k}),!k&&I.default.createElement(ve,{comparison:t,labels:Le(s)})))}var T=_(require("react"),1);function Tr({sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:o,rpc:c,t:u,onRediscover:p,onSelectCommit:a}){let[d,h]=(0,T.useState)({commits:[],nextOffset:null}),[m,N]=(0,T.useState)(0),[k,C]=(0,T.useState)(0),[l,x]=(0,T.useState)(!0),[f,v]=(0,T.useState)("");return(0,T.useEffect)(()=>{let w=new AbortController;return x(!0),v(""),c("vcs/file-history",{sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:o,offset:m,limit:50},w.signal).then(L=>{w.signal.aborted||h(H=>({...L,commits:m?[...H.commits,...L.commits]:L.commits}))}).catch(L=>{w.signal.aborted||(v(L.message),L.code==="vcs/rediscover-required"&&p())}).finally(()=>{w.signal.aborted||x(!1)}),()=>w.abort()},[t,e,s,i,o,m,k]),T.default.createElement("section",{"aria-label":u("fileHistory"),"aria-busy":l},T.default.createElement("p",null,u("fileHistoryScope")),T.default.createElement("p",{style:{overflowWrap:"anywhere"}},d.path," \xB7 ",T.default.createElement("code",null,s)),T.default.createElement("ol",null,d.commits.map(w=>T.default.createElement("li",{key:w.id},T.default.createElement("code",{title:w.id},w.id.slice(0,10))," \xB7 ",a?T.default.createElement("button",{onClick:()=>a(w.id,d.path)},w.subject):w.subject,T.default.createElement("div",null,w.author," \xB7 ",T.default.createElement("time",{dateTime:w.date},w.date))))),l&&T.default.createElement("p",{role:"status"},u("loading")),f&&T.default.createElement("p",{role:"alert"},f," ",T.default.createElement("button",{onClick:()=>C(w=>w+1)},u("retry"))),!l&&!f&&!d.commits.length&&T.default.createElement("p",null,u("historyEmpty")),d.truncated&&T.default.createElement("p",{role:"status"},u("historyLimit")),!f&&d.nextOffset!==null&&T.default.createElement("button",{disabled:l,onClick:()=>N(d.nextOffset)},u("historyMore")))}function tt(t){return T.default.createElement(Or,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit,t.parentIndex,t.id]),...t})}function Or(t){let[e,s]=(0,T.useState)(!1);return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("fileHistory")),e&&T.default.createElement(Tr,{...t}))}var O=_(require("react"),1);function Ut(t,{width:e,height:s,signal:i,timeoutMs:o=1e4,createURL:c=a=>URL.createObjectURL(a),revokeURL:u=a=>URL.revokeObjectURL(a),createImage:p=()=>new Image}={}){return new Promise((a,d)=>{if(i?.aborted){d(i.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){d(new Error("Invalid image preview"));return}let h,m,N,k=!1,C=!1,l=()=>{C||(C=!0,m&&(m.src=""),h&&u(h))},x=()=>{clearTimeout(N),i?.removeEventListener("abort",v)},f=w=>{k||(k=!0,x(),l(),d(w))},v=()=>f(i.reason||new Error("Image cancelled"));try{h=c(t),m=p(),i?.addEventListener("abort",v,{once:!0}),N=setTimeout(()=>f(new Error("Image decode timed out")),o),m.src=h,Promise.resolve(m.decode()).then(()=>{if(!k){if(i?.aborted){v();return}if(m.naturalWidth!==e||m.naturalHeight!==s){f(new Error("Image dimensions mismatch"));return}k=!0,x(),a({url:h,dispose:l})}},f)}catch(w){f(w)}})}function jr({side:t,sessionId:e,repositoryId:s,commit:i,parentIndex:o,id:c,rpc:u,t:p,onRediscover:a}){let[d,h]=(0,O.useState)(null),[m,N]=(0,O.useState)(""),[k,C]=(0,O.useState)(0);return(0,O.useEffect)(()=>{let l=new AbortController,x;return h(null),N(""),(async()=>{let f=await u("vcs/commit-image",{sessionId:e,repositoryId:s,commit:i,parentIndex:o,id:c,side:t},l.signal);if(l.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 w=new Blob([Uint8Array.from(v,L=>L.charCodeAt(0))],{type:f.mime});if(x=await Ut(w,{width:f.width,height:f.height,signal:l.signal}),l.signal.aborted){x.dispose();return}h({...f,url:x.url})})().catch(f=>{l.signal.aborted||(N(f.message),f.code==="vcs/rediscover-required"&&a())}),()=>{l.abort(),x?.dispose()}},[t,e,s,i,o,c,k]),O.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":p(t==="left"?"imageBefore":"imageAfter")},O.default.createElement("h5",null,p(t==="left"?"imageBefore":"imageAfter")),m?O.default.createElement("p",{role:"alert"},m," ",O.default.createElement("button",{onClick:()=>C(l=>l+1)},p("retry"))):d?O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,O.default.createElement("code",null,d.commit)," \xB7 ",d.path),d.absent?O.default.createElement("p",null,p("imageAbsent")):O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,d.width," \xD7 ",d.height," \xB7 ",d.bytes," B"),O.default.createElement("img",{src:d.url,alt:d.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),d.metadataStripped&&O.default.createElement("p",null,p("imageMetadata")))):O.default.createElement("p",{role:"status"},p("loading")))}function rt(t){let[e,s]=(0,O.useState)(!1);return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("imageCompare")),e&&O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,t.t("imageScope")),O.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(i=>O.default.createElement(jr,{key:i,...t,side:i})))))}var B=_(require("react"),1);function Ir({sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:o,rpc:c,t:u,onRediscover:p,onSelectCommit:a}){let[d,h]=(0,B.useState)(null),[m,N]=(0,B.useState)(""),[k,C]=(0,B.useState)(0);return(0,B.useEffect)(()=>{let l=new AbortController;return h(null),N(""),c("vcs/blame",{sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:o},l.signal).then(x=>{l.signal.aborted||h(x)}).catch(x=>{l.signal.aborted||(N(x.message),x.code==="vcs/rediscover-required"&&p())}),()=>l.abort()},[t,e,s,i,o,k]),m?B.default.createElement("p",{role:"alert"},m," ",B.default.createElement("button",{onClick:()=>C(l=>l+1)},u("retry"))):d?B.default.createElement("section",{"aria-label":u("blame")},B.default.createElement("p",null,u("blameScope")),a&&B.default.createElement("p",null,u("blameNavigation")),d.notice&&B.default.createElement("p",{role:"status"},d.notice),d.truncated&&B.default.createElement("p",{role:"status"},u("blameLimit")),!d.notice&&!d.lines.length&&B.default.createElement("p",null,u("blameEmpty")),!!d.lines.length&&B.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},B.default.createElement("table",null,B.default.createElement("thead",null,B.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(l=>B.default.createElement("th",{key:l,scope:"col"},u(l))))),B.default.createElement("tbody",null,d.lines.map(l=>B.default.createElement("tr",{key:l.line},B.default.createElement("th",{scope:"row"},l.line),B.default.createElement("td",null,a?B.default.createElement("button",{title:l.commit,onClick:()=>a(l.commit)},B.default.createElement("code",null,l.commit.slice(0,10))):B.default.createElement("code",{title:l.commit},l.commit.slice(0,10))),B.default.createElement("td",null,l.author),B.default.createElement("td",null,l.summary),B.default.createElement("td",null,B.default.createElement("pre",{style:{margin:0}},l.text)))))))):B.default.createElement("p",{role:"status"},u("loading"))}function ot(t){let[e,s]=(0,B.useState)(!1);return B.default.createElement("div",null,B.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("blame")),e&&B.default.createElement(Ir,{...t}))}function ge({sessionId:t,repositoryId:e,commit:s,parentIndex:i,base:o,target:c,id:u,rpc:p,t:a,onRediscover:d,onSelectCommit:h}){let[m,N]=(0,V.useState)(null),[k,C]=(0,V.useState)(""),[l,x]=(0,V.useState)(0);return(0,V.useEffect)(()=>{let f=new AbortController;return N(null),C(""),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:i,id:u},f.signal).then(v=>{f.signal.aborted||N(v)}).catch(v=>{f.signal.aborted||(C(v.message),v.code==="vcs/rediscover-required"&&d())}),()=>f.abort()},[t,e,s,i,o,c,u,l]),k?V.default.createElement("p",{role:"alert"},k," ",V.default.createElement("button",{onClick:()=>x(f=>f+1)},a("retry"))):m?V.default.createElement("section",null,V.default.createElement("h4",null,m.path),V.default.createElement("p",null,m.left.label," \u2194 ",m.right.label),m.notice&&V.default.createElement("p",{role:"status"},m.notice),m.binary?V.default.createElement("p",null,a("binary")):V.default.createElement(et,{comparison:m,identity:JSON.stringify(o?[t,e,o,c,u]:[t,e,s,i,u]),t:a}),s&&!o&&V.default.createElement(tt,{onSelectCommit:h,key:JSON.stringify([t,e,s,i,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:u,rpc:p,t:a,onRediscover:d}),s&&!o&&V.default.createElement(ot,{onSelectCommit:h,key:JSON.stringify([t,e,s,i,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:u,rpc:p,t:a,onRediscover:d}),s&&!o&&V.default.createElement(rt,{key:JSON.stringify([t,e,s,i,u]),sessionId:t,repositoryId:e,commit:s,parentIndex:i,id:u,rpc:p,t:a,onRediscover:d})):V.default.createElement("p",{role:"status"},a("loading"))}function Wt(t,e){if(typeof e!="string"||!e)return null;let s=t.filter(i=>i.path===e);return s.length===1&&typeof s[0].id=="string"&&s[0].id?s[0].id:null}function qt(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(i=>[i.id,i.author,i.subject].some(o=>o?.toLowerCase().includes(s))):t}function Be(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(i=>[i.path,i.oldPath].some(o=>o?.toLowerCase().includes(s))):t}function st(t){return M.default.createElement(Ur,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Ur({sessionId:t,repositoryId:e,commit:s,rpc:i,t:o,onRediscover:c,onSelectCommit:u,initialPath:p}){let a=(0,M.useRef)(!0),[d,h]=(0,M.useState)(null),[m,N]=(0,M.useState)(""),[k,C]=(0,M.useState)(0),[l,x]=(0,M.useState)(null),[f,v]=(0,M.useState)(""),[w,L]=(0,M.useState)(0);if((0,M.useEffect)(()=>{let P=new AbortController;return x(null),v(""),i("vcs/commit",{sessionId:t,repositoryId:e,commit:s,parentIndex:k},P.signal).then(b=>{P.signal.aborted||(x(b),a.current&&(a.current=!1,h(Wt(b.changes,p))))}).catch(b=>{P.signal.aborted||(v(b.message),b.code==="vcs/rediscover-required"&&c())}),()=>P.abort()},[t,e,s,k,w]),f)return M.default.createElement("p",{role:"alert"},f," ",M.default.createElement("button",{onClick:()=>L(P=>P+1)},o("retry")));if(!l)return M.default.createElement("p",{role:"status"},o("loading"));let H=Be(l.changes,m);return M.default.createElement("section",{"aria-label":o("commitDetails")},M.default.createElement("h3",null,l.subject),M.default.createElement("code",null,l.id),M.default.createElement("p",null,l.author," \xB7 ",l.date),l.messageTruncated&&M.default.createElement("p",{role:"status"},o("commitMessageLimit")),l.message&&M.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},l.message),l.parents.length>1&&M.default.createElement("label",null,o("commitParent")," ",M.default.createElement("select",{"aria-label":o("commitParent"),value:k,onChange:P=>{h(null),x(null),C(Number(P.target.value))}},l.parents.map((P,b)=>M.default.createElement("option",{key:P,value:b},b+1,": ",P.slice(0,10))))),M.default.createElement("p",null,l.parent||o("commitRoot")," \u2192 ",l.id.slice(0,10)),M.default.createElement("label",null,o("commitFileSearch")," ",M.default.createElement("input",{"aria-label":o("commitFileSearch"),value:m,onChange:P=>{N(P.target.value),h(null)}})),M.default.createElement("span",null," ",H.length," / ",l.changes.length),M.default.createElement("ul",null,H.map(P=>M.default.createElement("li",{key:P.id},M.default.createElement("button",{"aria-pressed":d===P.id,onClick:()=>h(P.id)},P.status," \xB7 ",P.oldPath?P.oldPath+" \u2192 ":"",P.path)))),!!l.changes.length&&!H.length&&M.default.createElement("p",{role:"status"},o("emptySearch")),!l.changes.length&&M.default.createElement("p",null,o("commitNoChanges")),d&&M.default.createElement(ge,{key:d,sessionId:t,repositoryId:e,commit:s,parentIndex:k,id:d,onSelectCommit:u,rpc:i,t:o,onRediscover:c}),M.default.createElement(Re,{key:JSON.stringify([t,e,s]),sessionId:t,repositoryId:e,commit:s,rpc:i,t:o,onRediscover:c}))}var q=_(require("react"),1);function zt(t){if(!Array.isArray(t))throw new Error("Invalid graph commits");let e=t.slice(0,200),s=new Map,i=[],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),i.push({id:a.id,row:p})}let u=!1;for(let p of e){let a=new Set;for(let d of p.parents){if(o.length===1e3){u=!0;break}if(!c(d)||d.length!==p.id.length||d===p.id||a.has(d))throw new Error("Invalid graph parent");a.add(d);let h=s.get(d);if(h!==void 0&&h<=s.get(p.id))throw new Error("Graph requires child-before-parent order");o.push({from:p.id,to:d,missing:h===void 0})}if(u)break}return{nodes:i,edges:o,nodesTruncated:t.length>200,edgesTruncated:u}}function Gt(t){let e=new Map(t.nodes.map(i=>[i.id,i.row])),s=[];return t.edges.filter(i=>!i.missing).map(i=>{let o=e.get(i.from),c=e.get(i.to),u=s.findIndex(p=>p<o);return u<0&&(u=s.length),s[u]=c,{...i,lane:u,start:o,end:c}})}function Wr({commits:t,selected:e,onSelect:s,t:i}){let o;try{o=zt(t)}catch{return q.default.createElement("p",{role:"alert"},i("graphInvalid"))}let c=Gt(o),u=Math.max(100,48+12*Math.max(0,...c.map(a=>a.lane))),p=Math.max(40,o.nodes.length*36);return q.default.createElement("section",{"aria-label":i("historyGraph")},q.default.createElement("p",null,i("graphScope")),(o.nodesTruncated||o.edgesTruncated)&&q.default.createElement("p",{role:"status"},i("graphLimit")),q.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},q.default.createElement("svg",{width:u,height:p,"aria-hidden":"true",style:{flexShrink:0}},c.map(a=>{let d=a.start*36+18,h=a.end*36+18,m=35+a.lane*12;return q.default.createElement("path",{key:a.from+a.to,d:"M 12 "+d+" C "+m+" "+d+", "+m+" "+h+", 12 "+h,fill:"none",stroke:"currentColor",opacity:"0.45"})}),o.nodes.map(a=>q.default.createElement("circle",{key:a.id,cx:"12",cy:a.row*36+18,r:"4",fill:"currentColor"}))),q.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},o.nodes.map(a=>q.default.createElement("li",{key:a.id,style:{height:36,whiteSpace:"nowrap"}},q.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:d=>{if(d.altKey||d.ctrlKey||d.metaKey||d.shiftKey)return;let h=d.key==="ArrowDown"?Math.min(a.row+1,o.nodes.length-1):d.key==="ArrowUp"?Math.max(0,a.row-1):d.key==="Home"?0:d.key==="End"?o.nodes.length-1:null;h!==null&&(d.preventDefault(),d.stopPropagation(),d.currentTarget.closest("ol").querySelectorAll("button")[h]?.focus())},onClick:()=>s(a.id)},q.default.createElement("code",null,a.id.slice(0,10))," ",t[a.row].subject))))),q.default.createElement("details",null,q.default.createElement("summary",null,i("graphRelations")),q.default.createElement("ul",null,o.edges.map(a=>q.default.createElement("li",{key:a.from+a.to},q.default.createElement("code",null,a.from)," \u2192 ",q.default.createElement("code",null,a.to),a.missing?" \xB7 "+i("graphMissing"):"")))))}function it(t){let[e,s]=(0,q.useState)(!1);return q.default.createElement("div",null,q.default.createElement("button",{"aria-expanded":e,onClick:()=>s(i=>!i)},t.t("historyGraph")),e&&q.default.createElement(Wr,{...t}))}var S=_(require("react"),1);function qr({sessionId:t,repositoryId:e,base:s,target:i,rpc:o,t:c,onRediscover:u}){let[p,a]=(0,S.useState)(null),[d,h]=(0,S.useState)(""),[m,N]=(0,S.useState)(0),[k,C]=(0,S.useState)(null),[l,x]=(0,S.useState)("");if((0,S.useEffect)(()=>{let v=new AbortController;return a(null),h(""),C(null),o("vcs/revision-changes",{sessionId:t,repositoryId:e,base:s,target:i},v.signal).then(w=>{v.signal.aborted||a(w)}).catch(w=>{v.signal.aborted||(h(w.message),w.code==="vcs/rediscover-required"&&u())}),()=>v.abort()},[t,e,s,i,m]),d)return S.default.createElement("p",{role:"alert"},d," ",S.default.createElement("button",{onClick:()=>N(v=>v+1)},c("retry")));if(!p)return S.default.createElement("p",{role:"status"},c("loading"));let f=Be(p.changes,l);return S.default.createElement("div",null,S.default.createElement("label",null,c("commitFileSearch")," ",S.default.createElement("input",{"aria-label":c("commitFileSearch"),value:l,onChange:v=>{x(v.target.value),C(null)}})),S.default.createElement("span",null," ",f.length," / ",p.changes.length),!!p.changes.length&&!f.length&&S.default.createElement("p",{role:"status"},c("emptySearch")),!p.changes.length&&S.default.createElement("p",null,c("revisionEmpty")),S.default.createElement("ul",null,f.map(v=>S.default.createElement("li",{key:v.id},S.default.createElement("button",{"aria-pressed":k===v.id,onClick:()=>C(v.id)},v.status," \xB7 ",v.oldPath?v.oldPath+" \u2192 ":"",v.path)))),k&&S.default.createElement(ge,{key:k,sessionId:t,repositoryId:e,base:s,target:i,id:k,rpc:o,t:c,onRediscover:u}))}function nt(t){return S.default.createElement(zr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function zr({commits:t,sessionId:e,repositoryId:s,rpc:i,t:o,onRediscover:c,onReferencesLoaded:u}){let[p,a]=(0,S.useState)(""),[d,h]=(0,S.useState)(""),[m,N]=(0,S.useState)([]),[k,C]=(0,S.useState)(!1),[l,x]=(0,S.useState)(0),[f,v]=(0,S.useState)(!1),[w,L]=(0,S.useState)("");return(0,S.useEffect)(()=>{if(!l)return;let H=new AbortController;return v(!0),L(""),i("vcs/references",{sessionId:e,repositoryId:s},H.signal).then(P=>{H.signal.aborted||(N(P.references),C(!0),u?.(P.references))}).catch(P=>{H.signal.aborted||(L(P.message),P.code==="vcs/rediscover-required"&&c())}).finally(()=>{H.signal.aborted||v(!1)}),()=>H.abort()},[e,s,l]),S.default.createElement("section",{"aria-label":o("revisionTitle")},S.default.createElement("h3",null,o("revisionTitle")),S.default.createElement("p",null,o("revisionScope")),S.default.createElement("button",{disabled:f,onClick:()=>x(H=>H+1)},o("revisionLoadRefs")),S.default.createElement("p",null,o("revisionRefsScope")),k&&!f&&!w&&S.default.createElement("p",{role:"status"},m.length?`${o("revisionRefsCount")}: ${m.length}`:o("revisionRefsEmpty")),f&&S.default.createElement("p",{role:"status"},o("loading")),w&&S.default.createElement("p",{role:"alert"},w),[[p,a,"revisionBase"],[d,h,"revisionTarget"]].map(([H,P,b])=>S.default.createElement("label",{key:b},o(b)," ",S.default.createElement("select",{"aria-label":o(b),value:H,onChange:U=>P(U.target.value)},S.default.createElement("option",{value:""},"\u2014"),!!t.length&&S.default.createElement("optgroup",{label:o("revisionLoadedCommits")},t.map(U=>S.default.createElement("option",{key:U.id,value:U.id},U.id.slice(0,10)," \xB7 ",U.subject))),!!m.length&&S.default.createElement("optgroup",{label:o("revisionLocalRefs")},m.map(U=>S.default.createElement("option",{key:U.name,value:U.commit},U.name," \xB7 ",U.commit.slice(0,10)))),H&&!t.some(U=>U.id===H)&&!m.some(U=>U.commit===H)&&S.default.createElement("option",{value:H},H)))),S.default.createElement("button",{disabled:!p||!d,onClick:()=>{a(d),h(p)}},o("revisionSwap")),S.default.createElement("p",{style:{overflowWrap:"anywhere"}},S.default.createElement("code",null,p||"\u2014")," \u2192 ",S.default.createElement("code",null,d||"\u2014")),p&&d&&S.default.createElement(qr,{key:JSON.stringify([e,s,p,d]),sessionId:e,repositoryId:s,base:p,target:d,rpc:i,t:o,onRediscover:c}))}function at(t){return A.default.createElement(Gr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Gr({sessionId:t,repositoryId:e,rpc:s,t:i,onRediscover:o}){let[c,u]=(0,A.useState)({id:null,path:null,revision:0}),[p,a]=(0,A.useState)(""),[d,h]=(0,A.useState)(null),m=(0,A.useMemo)(()=>Tt(d||[]),[d]),N=c.id,k=(F,g=null)=>u(K=>({id:F,path:g,revision:K.revision+1})),C=(F,g=null)=>u(K=>({id:F,path:g,revision:K.revision+(g||K.path?1:0)})),[l,x]=(0,A.useState)({commits:[],snapshot:null,nextOffset:null}),[f,v]=(0,A.useState)(0),[w,L]=(0,A.useState)(0),[H,P]=(0,A.useState)(!0),[b,U]=(0,A.useState)("");(0,A.useEffect)(()=>{let F=new AbortController;return P(!0),U(""),s("vcs/history",{sessionId:t,repositoryId:e,offset:f,limit:50,...f?{snapshot:l.snapshot}:{}},F.signal).then(g=>{F.signal.aborted||x(K=>({...g,commits:f?[...K.commits,...g.commits]:g.commits}))}).catch(g=>{F.signal.aborted||(U(g.message),g.code==="vcs/rediscover-required"&&o())}).finally(()=>{F.signal.aborted||P(!1)}),()=>F.abort()},[t,e,f,w]);let W=qt(l.commits,p);return A.default.createElement("section",{className:"vcs-history","aria-label":i("history"),"aria-busy":H},A.default.createElement("div",{className:"vcs-history-list"},A.default.createElement("p",null,i("historyListOnly")),d!==null&&A.default.createElement("p",null,i("historyRefsScope")),A.default.createElement("label",null,i("historySearch")," ",A.default.createElement("input",{"aria-label":i("historySearch"),value:p,onChange:F=>{a(F.target.value),C(null)}})),A.default.createElement("span",null," ",W.length," / ",l.commits.length),!!l.commits.length&&!W.length&&A.default.createElement("p",{role:"status"},i("historyNoMatch")),A.default.createElement("ol",null,W.map(F=>A.default.createElement("li",{key:F.id},A.default.createElement("button",{"aria-pressed":N===F.id,onClick:()=>C(F.id)},F.subject),A.default.createElement("div",null,A.default.createElement("code",{title:F.id},F.id.slice(0,10))," \xB7 ",F.author," \xB7 ",A.default.createElement("time",{dateTime:F.date},F.date)),m.has(F.id)&&A.default.createElement("div",{"aria-label":i("historyRefsLabel"),style:{overflowWrap:"anywhere"}},m.get(F.id).names.map(g=>A.default.createElement("span",{key:g},A.default.createElement("code",null,g)," ")),m.get(F.id).hidden>0&&A.default.createElement("span",null,i("historyRefsMore"),": ",m.get(F.id).hidden))))),H&&A.default.createElement("p",{role:"status"},i("loading")),b&&A.default.createElement("p",{role:"alert"},b," ",A.default.createElement("button",{onClick:()=>L(F=>F+1)},i("retry"))),!H&&!b&&!l.commits.length&&A.default.createElement("p",null,i("historyEmpty")),l.truncated&&A.default.createElement("p",{role:"status"},i("historyLimit")),!b&&l.nextOffset!==null&&A.default.createElement("button",{disabled:H,onClick:()=>v(l.nextOffset)},i("historyMore")),!!l.commits.length&&A.default.createElement(it,{commits:l.commits,selected:N,onSelect:C,t:i}),A.default.createElement(nt,{onReferencesLoaded:h,commits:l.commits,sessionId:t,repositoryId:e,rpc:s,t:i,onRediscover:o})),A.default.createElement("div",{className:"vcs-history-details"},N&&A.default.createElement(st,{key:JSON.stringify([N,c.revision]),initialPath:c.path,sessionId:t,repositoryId:e,commit:N,onSelectCommit:k,rpc:s,t:i,onRediscover:o})))}var Jt={zh:{reviewView:"\u5BA1\u9605\u89C6\u56FE",workspaceView:"\u5DE5\u4F5C\u533A\u6539\u52A8",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",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",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",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",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:{reviewView:"Review view",workspaceView:"Working changes",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",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",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",treeBreadcrumbs:"Historical directory path",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 Vt(t,e,s,i){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&&i)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 Kt=t=>"dsh-vcs:project:v1:"+t;function _t(t,e){if(!t)return"";try{let s=(e??globalThis.localStorage)?.getItem(Kt(t));return typeof s=="string"&&s.length<=1024?s:""}catch{return""}}function Qt(t,e,s){if(!(!t||!e))try{(s??globalThis.localStorage)?.setItem(Kt(t),e)}catch{}}function Yt(t,e=""){return t.find(s=>s.id===e)?.id||t.find(s=>s.relativePath===".")?.id||t[0]?.id||""}var be=(t,e)=>JSON.stringify([t,e]),ye=(t,e=".")=>[t.type.toUpperCase(),t.relativePath==="."?e:t.relativePath||".",t.branch].filter(Boolean).join(" \xB7 "),Me=(t,e="all")=>t.type==="git"&&["staged","unstaged"].includes(e)?e:"all",Xt=(t="",e="")=>t===e?0:t<e?-1:1;function lt(t=[]){let e={id:"",name:"",directories:new Map,files:[],count:0};for(let i of t){let o=String(i.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(i)}let s=i=>({...i,directories:[...i.directories.values()].sort((o,c)=>Xt(o.name,c.name)).map(s),files:[...i.files].sort((o,c)=>Xt(o.path,c.path))});return s(e)}function $t(t=[],e){let s=t.findIndex(i=>i.id===e);return{index:s<0?0:s+1,total:t.length}}function Zt(t=[],e,s){if(!t.length||!["previous","next"].includes(s))return null;let i=t.findIndex(u=>u.id===e),o=s==="next"?1:-1,c=i<0?s==="next"?-1:0:i;return t[(c+o+t.length)%t.length]||null}function Rt(t=""){let e=String(t).split("/").filter(Boolean);return e.slice(0,-1).map((s,i)=>e.slice(0,i+1).join("/"))}function dt(t,e=[]){for(let s of t?.directories||[])e.push(s.id),dt(s,e);return e}function er(t=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[t]||t}function tr(t=[]){return t.reduce((e,s)=>{let i=er(s.status);return e.all++,e[i]=(e[i]||0)+1,e},{all:0})}function Vr(t=[],e="",s="all"){let i=e.toLowerCase();return t.filter(o=>(s==="all"||er(o.status)===s)&&o.path.toLowerCase().includes(i)).sort((o,c)=>o.path.localeCompare(c.path))}function rr(t,e,s="",i="all"){return t.map(o=>({...e[o.id],repository:o,changes:Vr(e[o.id]?.changes,s,i)}))}function or(t,e,s=""){if(!s||!t||t.cwd!==e.cwd)return e;let i=new Map(t.repositories.map(o=>[o.id,o]));for(let o of e.repositories)i.set(o.id,o);return{...e,repositories:[...i.values()],truncated:t.truncated||e.truncated,warnings:[...t.warnings||[],...e.warnings||[]]}}function sr(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 i(){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--,i()})}}return(o,c)=>new Promise((u,p)=>{let a={run:o,signal:c,resolve:u,reject:p,abort:null};if(a.abort=()=>{let d=s.indexOf(a);d>=0&&(s.splice(d,1),p(new Error("Aborted")))},c?.aborted){p(new Error("Aborted"));return}c?.addEventListener("abort",a.abort,{once:!0}),s.push(a),i()})}var ir={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},nr=t=>new URL("vcs-assets/"+t,document.baseURI).href;function ar(){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 Kr=["slots","layout","locale","connection","uiSession"];function _r(t){t.effect(()=>t.locale.register("local.vcs",Jt));let e=t.locale.bind("local.vcs"),s=sr(2);async function i(p,a,d){let h=await t.connection.rpc.call("/vcs-rpc",p,a,d);if(!h.ok){let m=new Error(h.error?.message||String(h.error||e("error")));throw m.code=h.error?.code,m}return h.value}function o(p){let a=p.useSessions(d=>Object.values(d.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,Ye),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)(n=>t.locale.subscribe(n),()=>t.locale.getSnapshot(),()=>t.locale.getSnapshot());let a=p?.id,[d,h]=(0,r.useState)("all"),[m,N]=(0,r.useState)(0),[k,C]=(0,r.useState)(null),[l,x]=(0,r.useState)({}),[f,v]=(0,r.useState)(()=>_t(p?.cwd)),[w,L]=(0,r.useState)(0),[H,P]=(0,r.useState)(""),[b,U]=(0,r.useState)(""),[W,F]=(0,r.useState)(null),[g,K]=(0,r.useState)(null),[xe,ct]=(0,r.useState)(!1),[lr,pt]=(0,r.useState)(!1),[re,ut]=(0,r.useState)(""),[He,oe]=(0,r.useState)(""),[Y,ft]=(0,r.useState)(""),[mt,ht]=(0,r.useState)(!1),[R,Fe]=(0,r.useState)(""),[we,vt]=(0,r.useState)("all"),[se,gt]=(0,r.useState)(!0),[bt,Te]=(0,r.useState)({}),[de,dr]=(0,r.useState)(!0),[Oe,cr]=(0,r.useState)(!1),[je,pr]=(0,r.useState)(!1),[ke,ce]=(0,r.useState)("content"),[yt,xt]=(0,r.useState)(0),[ur,wt]=(0,r.useState)(!1),[Ie,Ue]=(0,r.useState)({added:0,deleted:0,count:0}),[Q,kt]=(0,r.useState)(!1),St=(0,r.useRef)(null),We=(0,r.useRef)(null),ie=(0,r.useRef)(null),qe=(0,r.useRef)(null),Se=(0,r.useRef)(null),ze=(0,r.useRef)(null),Ct=(0,r.useRef)(null),pe=(0,r.useRef)(null),Ge=(0,r.useRef)(null),Je=(0,r.useRef)(null),Ve=(0,r.useRef)(!1),Ce=(0,r.useRef)(!1),ee=k?.repositories||[],ne=ee.filter(n=>n.id===f),X=ur&&ne.some(n=>n.type==="git"),fr=()=>{pe.current?.abort(),K(null),F(null),oe(""),wt(!0)};(0,r.useEffect)(()=>{ee.some(n=>n.id===f)&&Qt(p?.cwd,f)},[p?.cwd,f,k]);let ue=()=>{Ct.current?.abort(),pe.current?.abort(),K(null),F(null),oe(""),ce("content"),Ue({added:0,deleted:0,count:0})},Ne=()=>{Ce.current=!1,ue(),Ge.current?.abort(),Je.current=k,C(null),x({}),U(H.trim()),L(n=>n+1)},Ke=()=>{Ce.current||(Ce.current=!0,ue(),Ge.current?.abort(),Je.current=null,C(null),x({}),U(""),L(n=>n+1))},Nt=(n=!1)=>{Ve.current=n,n||ue(),n||x({}),N(y=>y+1)};(0,r.useEffect)(()=>{let n=new AbortController;return Ge.current=n,ut(""),ct(!!a),a&&i("vcs/repositories",{sessionId:a,...b?{subdirectory:b}:{}},n.signal).then(y=>{if(!n.signal.aborted){let D=or(Je.current,y,b);Ce.current=!1,v(j=>Yt(D.repositories,j)),C(D)}}).catch(y=>{n.signal.aborted||ut(y.message)}).finally(()=>{n.signal.aborted||ct(!1)}),()=>n.abort()},[a,w,b]),(0,r.useEffect)(()=>{let n=new AbortController,y=Ve.current;Ct.current=n,Ve.current=!1,y||(x({}),oe(""));for(let D of ne){let j=Me(D,d);s(()=>i("vcs/status",{sessionId:a,repositoryId:D.id,mode:j},n.signal),n.signal).then(G=>{n.signal.aborted||x($=>({...$,[D.id]:{...G,mode:j}}))}).catch(G=>{if(!n.signal.aborted){if(G.code==="vcs/rediscover-required"){Ke();return}x($=>({...$,[D.id]:{error:G.message,changes:[],mode:j}}))}})}return()=>n.abort()},[a,k,f,d,m]),(0,r.useEffect)(()=>{let n=()=>{a&&f&&document.visibilityState==="visible"&&Nt(!0)};return window.addEventListener("focus",n),()=>window.removeEventListener("focus",n)},[a,f,d]);let Ee=ee.find(n=>n.id===W?.repositoryId),fe=W?l[W.repositoryId]:null;(0,r.useEffect)(()=>{let n=new AbortController;return pe.current=n,K(null),oe(""),Ue({added:0,deleted:0,count:0}),ce("content"),pt(!!W&&!!fe),!X&&W&&fe&&Ee&&i("vcs/compare",{sessionId:a,repositoryId:W.repositoryId,mode:Me(Ee,d),id:W.id},n.signal).then(y=>{n.signal.aborted||K(y)}).catch(y=>{if(!n.signal.aborted){if(y.code==="vcs/rediscover-required"){Ke();return}oe(y.message)}}).finally(()=>{n.signal.aborted||pt(!1)}),()=>n.abort()},[W,fe,a,d,X]),(0,r.useEffect)(()=>{let n=!1,y,D=new AbortController;kt(!1),ft("");let j=document.createElement("link");return j.rel="stylesheet",j.href=nr("editor.css"),We.current.parentNode.appendChild(j),Pe(nr("editor.js")+"?v="+encodeURIComponent(De)+"&retry="+yt,{signal:D.signal}).then(G=>{n||(y=G.createDiff(We.current,{onStats:Ue}),ie.current=y,kt(!0))}).catch(G=>{n||ft(G.message)}),()=>{n=!0,D.abort(),y?.dispose(),ie.current=null,j.remove()}},[yt]),(0,r.useEffect)(()=>{Q&&g&&!g.binary&&ie.current?.setContent(g,JSON.stringify([a,k?.cwd,W?.repositoryId,d,W?.id,g.path]))},[Q,g,a,k,W,d]),(0,r.useEffect)(()=>{ie.current?.options({sideBySide:de,ignoreWhitespace:Oe,wrap:je})},[Q,de,Oe,je]);let me=rr(ne,l,R,we),ae=me.flatMap(n=>n.changes),mr=tr(fe?.changes),_e=$t(ae,W?.id),Et=()=>{Fe(""),vt("all")},hr=async()=>{let n=g?.path||Z?.path;if(n)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(n);else{let y=document.createElement("textarea");try{if(y.value=n,y.style.cssText="position:fixed;opacity:0",document.body.appendChild(y),y.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{y.remove()}}ht(!0),window.setTimeout(()=>ht(!1),1500)}catch{oe(e("copyFailed"))}};(0,r.useEffect)(()=>{let n=y=>{if(X)return;let D=Vt(y,St.current,Se.current,!!R);D&&(y.preventDefault(),D==="search"?(Se.current?.focus(),Se.current?.select()):D==="clear"?Fe(""):Qe(D))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[R,ae,W,X]);let At=n=>Te(y=>{let D={...y};for(let j of me)for(let G of dt(lt(j.changes)))D[j.repository.id+"\0"+G]=!n;return D}),vr=()=>{let n=Z;!n||!W||(gt(!0),Et(),Te(y=>{let D={...y};for(let j of Rt(n.path))D[W.repositoryId+"\0"+j]=!1;return D}),ze.current=be(W.repositoryId,n.id))};(0,r.useEffect)(()=>{let n=ze.current;if(!n)return;let y=[...qe.current?.querySelectorAll("button[data-vcs-change]")||[]].find(D=>D.dataset.vcsChange===n);y&&(y.scrollIntoView({block:"nearest"}),y.focus(),ze.current=null)},[se,R,we,bt,me]);let Qe=n=>{let y=Zt(ae,W?.id,n);y&&(pe.current?.abort(),K(null),ce("content"),F({repositoryId:f,id:y.id}))},Lt=xe||ne.some(n=>!l[n.id]),Z=fe?.changes?.find(n=>n.id===W?.id),te=g?.properties,Xe=te?[...new Set([...Object.keys(te.left||{}),...Object.keys(te.right||{})])].filter(n=>te.left?.[n]!==te.right?.[n]):[],he=n=>ir[n?.status]||n?.status?.slice(0,1).toUpperCase()||"M",Pt=g?.binary?[g.left.label,g.right.label].filter(Boolean).join(" \u2194 "):"",le=He||(lr?e("loading"):a?Lt&&!Z?e("loading"):re||(ee.length?Z?g?.binary?e("binary")+(Pt?" "+e("binaryComparison",{files:Pt}):""):g?!Q&&!Y?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession")),gr=n=>{let y=qe.current,D=y?[...y.querySelectorAll("button[data-vcs-item]")]:[],j=D.indexOf(n.target);if(j<0)return;let G;if(n.key==="ArrowDown")G=D[j+1];else if(n.key==="ArrowUp")G=D[j-1];else if(n.key==="Home")G=D[0];else if(n.key==="End")G=D.at(-1);else if(n.key==="ArrowRight"&&n.target.dataset.vcsDirectory==="closed"){n.preventDefault(),n.target.click();return}else if(n.key==="ArrowLeft"&&n.target.dataset.vcsDirectory==="open"){n.preventDefault(),n.target.click();return}else return;n.preventDefault(),G?.focus()},Dt=({entry:n,compact:y=!1,depth:D=0})=>{let j=n.path.lastIndexOf("/");return r.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":be(f,n.id),"aria-current":W?.repositoryId===f&&W?.id===n.id?"true":void 0,style:{paddingInlineStart:8+D*14},title:(n.oldPath?n.oldPath+" \u2192 ":"")+n.path+" \xB7 "+e(he(n)),onClick:()=>{pe.current?.abort(),K(null),ce("content"),F({repositoryId:f,id:n.id})}},r.default.createElement("span",{className:"vcs-status","data-status":he(n)},he(n)),r.default.createElement("span",{className:"vcs-filename"},y?n.path.slice(j+1):n.path,n.oldPath&&r.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",n.oldPath)))},Bt=({node:n,repository:y,depth:D=0})=>r.default.createElement(r.default.Fragment,null,n.directories.map(j=>{let G=y.id+"\0"+j.id,$=!!bt[G];return r.default.createElement(r.default.Fragment,{key:G},r.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":$?"closed":"open","aria-expanded":!$,style:{paddingInlineStart:8+D*14},onClick:()=>Te(br=>({...br,[G]:!$}))},r.default.createElement("span",{"aria-hidden":"true"},$?"\u203A":"\u2304"),j.name,r.default.createElement("small",null,j.count)),!$&&r.default.createElement(Bt,{node:j,repository:y,depth:D+1}))}),n.files.map(j=>r.default.createElement(Dt,{key:be(y.id,j.id),entry:j,compact:n.id!=="",depth:D})));return r.default.createElement("section",{ref:St,className:"vcs-root","aria-label":e("title")},r.default.createElement("style",null,Ye),r.default.createElement("header",{className:"vcs-top"},r.default.createElement(ar,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:xe||!ee.length,onChange:n=>{ue(),x({}),v(n.target.value)}},!ee.length&&r.default.createElement("option",{value:""},e("repositories")),ee.map(n=>r.default.createElement("option",{key:n.id,value:n.id},ye(n,e("workspaceRoot"))))),r.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",r.default.createElement("select",{"aria-label":e("gitMode"),value:d,disabled:X||!ne.some(n=>n.type==="git"),onChange:n=>{ue(),x({}),h(n.target.value)}},["all","unstaged","staged"].map(n=>r.default.createElement("option",{key:n,value:n},e(n))))),r.default.createElement("button",{onClick:Nt,disabled:Lt||!a},e("refresh")),r.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")),r.default.createElement("div",{className:"vcs-path",title:k?.cwd||p?.cwd},e("session"),": ",k?.cwd||p?.cwd||"\u2014"),r.default.createElement("form",{className:"vcs-discovery",onSubmit:n=>{n.preventDefault(),Ne()}},r.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:H,onChange:n=>P(n.target.value)}),r.default.createElement("button",{disabled:!a||xe},e("rescan")),r.default.createElement("span",null,e("scanHint"))),k?.truncated&&r.default.createElement("div",{className:"vcs-notice"},e("truncated")),(k?.warnings||[]).map((n,y)=>r.default.createElement("div",{className:"vcs-notice",key:y},typeof n=="string"?n:n.message||JSON.stringify(n)))),ne.some(n=>n.type==="git")&&r.default.createElement(r.default.Fragment,null,r.default.createElement("nav",{className:"vcs-review-views","aria-label":e("reviewView")},r.default.createElement("button",{"aria-pressed":!X,onClick:()=>wt(!1)},e("workspaceView")),r.default.createElement("button",{"aria-pressed":X,"aria-expanded":X,onClick:fr},e("history"))),X&&r.default.createElement(at,{key:JSON.stringify([a,f,m,w]),sessionId:a,repositoryId:f,rpc:i,t:e,onRediscover:Ke})),r.default.createElement("div",{className:"vcs-body",hidden:X,"aria-label":e("workspaceView")},r.default.createElement("aside",{className:"vcs-files"},r.default.createElement("div",{className:"vcs-filter"},r.default.createElement("input",{ref:Se,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:R,onChange:n=>Fe(n.target.value)}),(R||we!=="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(n=>r.default.createElement("button",{key:n,"aria-pressed":we===n,onClick:()=>vt(n)},e(n==="all"?"allFiles":ir[n]||"M")," ",r.default.createElement("small",null,mr[n]||0)))),r.default.createElement("div",{className:"vcs-count"},r.default.createElement("span",null,ae.length," ",e("files")),r.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),r.default.createElement("button",{"aria-pressed":se,onClick:()=>gt(!se)},e(se?"tree":"list"))),se&&r.default.createElement("div",{className:"vcs-tree-actions"},r.default.createElement("button",{onClick:()=>At(!0)},e("expandAll")),r.default.createElement("button",{onClick:()=>At(!1)},e("collapseAll")),r.default.createElement("button",{onClick:vr,disabled:!Z},e("revealSelected"))),r.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:qe,onKeyDown:gr},me.map(n=>{let y=n.repository;return r.default.createElement("section",{className:"vcs-repository",key:y.id,"aria-label":ye(y,e("workspaceRoot"))},r.default.createElement("div",{className:"vcs-repository-heading",title:y.root},r.default.createElement("strong",null,ye(y,e("workspaceRoot"))),r.default.createElement("small",null,y.type==="svn"?e("svnBase"):e(Me(y,d)))),n.error?r.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},n.error,r.default.createElement("button",{onClick:Ne},e("rescan"))):l[y.id]?se?r.default.createElement(Bt,{node:lt(n.changes),repository:y}):n.changes.map(D=>r.default.createElement(Dt,{key:be(y.id,D.id),entry:D})):r.default.createElement("div",{className:"vcs-message"},e("loading")),!n.error&&l[y.id]&&!n.changes.length&&r.default.createElement("div",{className:"vcs-message"},e(R?"emptySearch":"clean")))}),!me.length&&r.default.createElement("div",{className:"vcs-message"},xe?e("loading"):re||e(a?"noRepo":"noSession"),re&&r.default.createElement("button",{onClick:Ne},e("rescan"))))),r.default.createElement("main",{className:"vcs-detail"},r.default.createElement("div",{className:"vcs-filehead"},r.default.createElement("strong",{title:g?.path||Z?.path},Ee?ye(Ee,e("workspaceRoot"))+" / ":"",g?.path||Z?.path||e("pick")),r.default.createElement("button",{className:"vcs-copy-path",disabled:!(g?.path||Z?.path),onClick:hr},e(mt?"copied":"copyPath")),mt&&r.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),r.default.createElement("span",{className:"vcs-spacer"}),g&&!g.binary&&Q&&r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"vcs-add"},"+",Ie.added),r.default.createElement("span",{className:"vcs-del"},"\u2212",Ie.deleted))),Y&&r.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",r.default.createElement("button",{onClick:()=>xt(n=>n+1)},e("retry")),r.default.createElement("details",null,r.default.createElement("summary",null,e("diagnostics")),Y)),g&&r.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},r.default.createElement("span",{className:"vcs-context-status","data-status":he(g)},e(he(g))),g.oldPath&&r.default.createElement("span",{className:"vcs-context-rename",title:g.oldPath+" \u2192 "+g.path},g.oldPath," ",r.default.createElement("b",null,"\u2192")," ",g.path),r.default.createElement("span",null,g.left.label||"\u2014"," ",r.default.createElement("b",null,"\u2194")," ",g.right.label||"\u2014"),(g.left.encoding||g.right.encoding)&&r.default.createElement("span",null,e("encoding"),": ",g.left.encoding||"\u2014"," / ",g.right.encoding||"\u2014")),g?.notice&&r.default.createElement("div",{className:"vcs-notice"},g.notice),Xe.length>0&&r.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(n=>r.default.createElement("button",{key:n,"aria-pressed":ke===n,onClick:()=>ce(n)},e(n),n==="properties"?" ("+Xe.length+")":""))),r.default.createElement("div",{className:"vcs-labels"},r.default.createElement("span",null,g?.left.label||"\u2014",g?.left.encoding?" \xB7 "+g.left.encoding:""),r.default.createElement("span",null,g?.right.label||"\u2014",g?.right.encoding?" \xB7 "+g.right.encoding:"")),r.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!le||ke!=="content",style:ke==="properties"?{display:"none"}:void 0},r.default.createElement("div",{className:"vcs-editor",ref:We,style:Y?{display:"none"}:void 0}),Y&&g&&!g.binary&&!le&&r.default.createElement(ve,{comparison:g,labels:Le(e)}),le&&r.default.createElement("div",{className:"vcs-message "+(re||He||Y?"vcs-error":""),role:"status"},le,(re||He||Y)&&r.default.createElement("button",{onClick:()=>Y?xt(n=>n+1):Ne()},e(Y?"retry":"rescan")))),ke==="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,g?.left.label||e("before")),r.default.createElement("th",null,g?.right.label||e("after")))),r.default.createElement("tbody",null,Xe.map(n=>r.default.createElement("tr",{key:n},r.default.createElement("th",null,n),r.default.createElement("td",null,te.left?.[n]??"\u2014"),r.default.createElement("td",null,te.right?.[n]??"\u2014")))))),r.default.createElement("footer",{className:"vcs-toolbar"},r.default.createElement("button",{disabled:!Q,"aria-pressed":de,onClick:()=>dr(!de)},e(de?"side":"inline")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!Q,checked:Oe,onChange:n=>cr(n.target.checked)}),e("whitespace")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!Q,checked:je,onChange:n=>pr(n.target.checked)}),e("wrap")),r.default.createElement("span",{className:"vcs-spacer"}),Q&&r.default.createElement("span",null,Ie.count," ",e("changes")),r.default.createElement("button",{disabled:!Q||!g||!!le,onClick:()=>ie.current?.navigate("previous")},e("previous")),r.default.createElement("button",{disabled:!Q||!g||!!le,onClick:()=>ie.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:!ae.length,onClick:()=>Qe("previous")},e("previousFile")),r.default.createElement("button",{title:e("fileShortcut"),disabled:!ae.length,onClick:()=>Qe("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},ar))}
96
96
  return module.exports; }});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feng0531/dsh-vcs",
3
- "version": "0.3.46",
3
+ "version": "0.3.48",
4
4
  "private": false,
5
5
  "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
6
6
  "type": "module",