@feng0531/dsh-vcs 0.3.35 → 0.3.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/client.js +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# DSH VCS
|
|
2
2
|
|
|
3
|
-
DeepSeek Harness(DSH)Web 的只读 Git / SVN
|
|
3
|
+
DeepSeek Harness(DSH)Web 的只读 Git / SVN 变更预览插件。最新正式发布版本 **0.3.35**,包名 **@feng0531/dsh-vcs**;GitHub 与 npm 已发布且安装包摘要一致。本次应用户明确要求在真实 DSH GUI 尚未验收时发布;自动验证不代表真实 GUI 验收通过。详见[发布核验记录](<docs/RELEASE-0.3.35.md>)。非商业许可证不变。
|
|
4
4
|
|
|
5
5
|
> 项目仓库:https://github.com/f-e-n-g-0531/dsh-vcs 。采用 [DSH VCS 非商业源码公开许可证 1.0](<LICENSE>):允许非商业使用、修改与分发,禁止商业使用(包括公司内部用于商业项目的开发、测试与维护),商业用途须另行书面授权。分发须保留许可证和版权,修改版须注明修改。第三方组件保持原许可。这是源码公开项目,不是 OSI 认可的开源软件。
|
|
6
6
|
|
|
7
7
|
## 功能
|
|
8
8
|
|
|
9
|
-
-
|
|
9
|
+
- 支持 Git 本地 HEAD 历史分页、提交详情、父提交选择及历史 Diff;可筛选已加载提交和提交内文件。历史 Diff 默认基础文本,可按需加载只读 Monaco。此功能尚待真实 DSH GUI 验收。
|
|
10
10
|
|
|
11
11
|
- 顶部下拉选择仓库,一次展示一个仓库;插件内没有额外的左侧仓库导航栏,文件列表仍在比较区左侧。
|
|
12
12
|
- Git 全部 / 已暂存 / 未暂存变更;SVN 本地 BASE 与工作副本、属性差异。
|
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 cr=Object.create;var Ce=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var fr=Object.getPrototypeOf,mr=Object.prototype.hasOwnProperty;var hr=(t,e)=>{for(var i in e)Ce(t,i,{get:e[i],enumerable:!0})},
|
|
2
|
+
var cr=Object.create;var Ce=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var ur=Object.getOwnPropertyNames;var fr=Object.getPrototypeOf,mr=Object.prototype.hasOwnProperty;var hr=(t,e)=>{for(var i in e)Ce(t,i,{get:e[i],enumerable:!0})},Lt=(t,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ur(e))!mr.call(t,o)&&o!==i&&Ce(t,o,{get:()=>e[o],enumerable:!(n=pr(e,o))||n.enumerable});return t};var q=(t,e,i)=>(i=t!=null?cr(fr(t)):{},Lt(e||!t||!t.__esModule?Ce(i,"default",{value:t,enumerable:!0}):i,t)),vr=t=>Lt(Ce({},"__esModule",{value:!0}),t);var jr={};hr(jr,{apply:()=>Or,inject:()=>Hr});module.exports=vr(jr);var r=q(require("react"),1);var Ve=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
|
|
3
3
|
.vcs-root .vcs-discovery input{min-width:160px;max-width:100%;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-base);padding:6px 9px}
|
|
4
4
|
.vcs-root .vcs-discovery span{font-size:12px;color:var(--dsw-alias-label-secondary)}
|
|
5
5
|
.vcs-root .vcs-mode{display:flex;align-items:center;gap:6px}
|
|
@@ -92,5 +92,5 @@ var cr=Object.create;var Ce=Object.defineProperty;var pr=Object.getOwnPropertyDe
|
|
|
92
92
|
.vcs-root .vcs-toolbar{gap:6px}
|
|
93
93
|
.vcs-root .vcs-title{font-size:16px}
|
|
94
94
|
}
|
|
95
|
-
`;var z=q(require("react"),1);function Bt(t){return t===""?[]:t.split(/\r\n|\n|\r/)}function Dt(t="",e=""){let i=Bt(t),n=Bt(e),o=0;for(;o<i.length&&o<n.length&&i[o]===n[o];)o++;let p=0;for(;p<i.length-o&&p<n.length-o&&i[i.length-p-1]===n[n.length-p-1];)p++;let l=i.length-p,c=n.length-p,a=l-o,d=c-o,w=a&&d?(a+1)*(d+1):0,g=w>2e5,N=[],v=0;function y(m,k){v++,!(N.length>=2e3)&&N.push({left:m===null?null:{number:m+1,text:i[m]},right:k===null?null:{number:k+1,text:n[k]},kind:m===null?"insert":k===null?"delete":i[m]===n[k]?"equal":"replace"})}for(let m=0;m<o;m++)y(m,m);if(g||!a||!d)for(let m=0;m<Math.max(a,d);m++)y(m<a?o+m:null,m<d?o+m:null);else{let m=d+1,k=new Uint32Array(w);for(let h=a-1;h>=0;h--)for(let u=d-1;u>=0;u--)k[h*m+u]=i[o+h]===n[o+u]?k[(h+1)*m+u+1]+1:Math.max(k[(h+1)*m+u],k[h*m+u+1]);let f=0,b=0;for(;f<a||b<d;)f<a&&b<d&&i[o+f]===n[o+b]?y(o+f++,o+b++):f<a&&(b===d||k[(f+1)*m+b]>=k[f*m+b+1])?y(o+f++,null):y(null,o+b++)}for(let m=0;m<p;m++)y(l+m,c+m);return{rows:N,approximate:g,truncated:v>N.length,totalRows:v,omittedRows:v-N.length,leftLineCount:i.length,rightLineCount:n.length,lcsCells:g?0:w}}var yr={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."},Xe={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},xr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},wr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},kr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function pe({comparison:t,labels:e={}}){let i=t?.left?.text??"",n=t?.right?.text??"",o=(0,z.useMemo)(()=>Dt(i,n),[i,n]),p=c=>e[c]??yr[c],l=(c,a,d)=>{let w=c&&d!=="equal";return z.default.createElement("td",{style:{...Xe,background:w?a==="left"?"#d6454520":"#259b4920":void 0}},z.default.createElement("div",{style:xr},z.default.createElement("span",{style:wr},c?.number??""),z.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},w?a==="left"?"\u2212":"+":""),z.default.createElement("pre",{style:kr},c?.text??"")))};return z.default.createElement("section",{className:"vcs-text-comparison","aria-label":p("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},o.approximate&&z.default.createElement("div",{role:"status",style:{padding:8}},p("approximate")),o.truncated&&z.default.createElement("div",{role:"status",style:{padding:8}},p("truncated")," (",2e3," / ",o.totalRows,")"),z.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},z.default.createElement("thead",null,z.default.createElement("tr",null,z.default.createElement("th",{scope:"col",style:{...Xe,padding:8,overflowWrap:"anywhere"}},t?.left?.label||p("before")),z.default.createElement("th",{scope:"col",style:{...Xe,padding:8,overflowWrap:"anywhere"}},t?.right?.label||p("after")))),z.default.createElement("tbody",null,o.rows.map((c,a)=>z.default.createElement("tr",{key:a,"data-kind":c.kind},l(c.left,"left",c.kind),l(c.right,"right",c.kind))))),!o.rows.length&&z.default.createElement("p",{style:{padding:8}},p("empty")))}function Se(t){return{before:t("textBefore"),after:t("textAfter"),readonly:t("textReadonly"),empty:t("textEmpty"),approximate:t("approximate"),truncated:t("textTruncated")}}var P=q(require("react"),1);var L=q(require("react"),1);var B=q(require("react"),1);function Cr({sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:p}){let[l,c]=(0,B.useState)(null),[a,d]=(0,B.useState)(""),[w,g]=(0,B.useState)(0),[N,v]=(0,B.useState)(""),[y,m]=(0,B.useState)(0);if((0,B.useEffect)(()=>{let h=new AbortController;return c(null),d(""),n("vcs/tree",{sessionId:t,repositoryId:e,commit:i},h.signal).then(u=>{h.signal.aborted||c(u)}).catch(u=>{h.signal.aborted||(d(u.message),u.code==="vcs/rediscover-required"&&p())}),()=>h.abort()},[t,e,i,w]),a)return B.default.createElement("p",{role:"alert"},a," ",B.default.createElement("button",{onClick:()=>g(h=>h+1)},o("retry")));if(!l)return B.default.createElement("p",{role:"status"},o("loading"));let k=N?N+"/":"",f=l.entries.filter(h=>h.path.startsWith(k)&&!h.path.slice(k.length).includes("/")),b=h=>{v(h),m(0)};return B.default.createElement("section",{"aria-label":o("historicalTree")},B.default.createElement("p",null,o("historicalTreeScope")),B.default.createElement("code",null,i),B.default.createElement("p",null,N||"/"," ",N&&B.default.createElement("button",{onClick:()=>b(N.includes("/")?N.slice(0,N.lastIndexOf("/")):"")},o("treeUp"))),B.default.createElement("p",null,f.length," ",o("treeEntries")),B.default.createElement("ul",null,f.slice(y*100,y*100+100).map(h=>B.default.createElement("li",{key:h.path},h.type==="tree"?B.default.createElement("button",{onClick:()=>b(h.path)},h.path.slice(k.length),"/"):B.default.createElement("span",null,h.path.slice(k.length))," \xB7 ",B.default.createElement("code",null,h.mode," ",h.type," ",B.default.createElement("span",{title:h.oid},h.oid.slice(0,10)))))),y>0&&B.default.createElement("button",{onClick:()=>m(h=>h-1)},o("treePrevious")),(y+1)*100<f.length&&B.default.createElement("button",{onClick:()=>m(h=>h+1)},o("treeNext")))}function Qe(t){let[e,i]=(0,B.useState)(!1);return B.default.createElement("div",null,B.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("historicalTree")),e&&B.default.createElement(Cr,{...t}))}var I=q(require("react"),1);var F=q(require("react"),1);function Tt({load:t,node:e,comparison:i,key:n,onReady:o=()=>{},onError:p=()=>{}}){let l=new AbortController,c,a=!1,d=()=>{let g=c;c=void 0,g?.dispose()};return{done:Promise.resolve().then(()=>(l.signal.throwIfAborted(),t(l.signal))).then(g=>{a||(c=g.createDiff(e),c.setContent(i,n),a||o(c))}).catch(g=>{try{d()}finally{a||p(g)}}),dispose(){a||(a=!0,l.abort(),d())}}}async function Ne(t,{signal:e,fetcher:i=fetch,importer:n=o=>import(o)}={}){let o=await i(t,{credentials:"same-origin",cache:"no-cache",signal:e});if(!o.ok)throw new Error("Editor resource HTTP "+o.status+" ("+t+"). "+(o.status===401?"Refresh the authenticated DSH page.":o.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let p=o.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(p))throw new Error("Editor resource returned "+(p||"no Content-Type")+" instead of JavaScript.");return await o.arrayBuffer(),e?.throwIfAborted(),n(t)}var Ee="0.3.35";function Ye({comparison:t,identity:e,t:i}){let n=(0,F.useRef)(null),o=(0,F.useRef)(null),[p,l]=(0,F.useState)(!0),[c,a]=(0,F.useState)(!1),[d,w]=(0,F.useState)(!1),[g,N]=(0,F.useState)(!1),[v,y]=(0,F.useState)(!1),[m,k]=(0,F.useState)("");return(0,F.useEffect)(()=>{if(y(!1),k(""),!g)return;let f=u=>new URL("vcs-assets/"+u,document.baseURI).href,b=document.createElement("link");b.rel="stylesheet",b.href=f("editor.css"),n.current.parentNode.appendChild(b);let h=Tt({node:n.current,comparison:t,key:e,load:u=>Ne(f("editor.js")+"?v="+encodeURIComponent(Ee)+"&retry=0",{signal:u}),onReady:u=>{o.current=u,y(!0)},onError:u=>k(u.message)});return()=>{o.current=null;try{h.dispose()}finally{b.remove()}}},[g,t,e]),(0,F.useEffect)(()=>{v&&o.current?.options({sideBySide:p,ignoreWhitespace:c,wrap:d})},[v,p,c,d]),F.default.createElement("div",null,F.default.createElement("button",{"aria-pressed":g,onClick:()=>N(f=>!f)},i(g?"historyBasic":"historyAdvanced")),v&&F.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8}},F.default.createElement("button",{"aria-pressed":p,onClick:()=>l(f=>!f)},i(p?"side":"inline")),F.default.createElement("label",null,F.default.createElement("input",{type:"checkbox",checked:c,onChange:f=>a(f.target.checked)}),i("whitespace")),F.default.createElement("label",null,F.default.createElement("input",{type:"checkbox",checked:d,onChange:f=>w(f.target.checked)}),i("wrap")),F.default.createElement("button",{onClick:()=>o.current?.navigate("previous")},i("previous")),F.default.createElement("button",{onClick:()=>o.current?.navigate("next")},i("next"))),g&&!v&&!m&&F.default.createElement("p",{role:"status"},i("loading")),m&&F.default.createElement("p",{role:"status"},i("fallback")," ",m),F.default.createElement("div",{style:{position:"relative",height:360}},F.default.createElement("div",{ref:n,style:{position:"absolute",inset:0,visibility:v?"visible":"hidden"},"aria-hidden":!v}),!v&&F.default.createElement(pe,{comparison:t,labels:Se(i)})))}var M=q(require("react"),1);function Nr({sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,rpc:p,t:l,onRediscover:c,onSelectCommit:a}){let[d,w]=(0,M.useState)({commits:[],nextOffset:null}),[g,N]=(0,M.useState)(0),[v,y]=(0,M.useState)(0),[m,k]=(0,M.useState)(!0),[f,b]=(0,M.useState)("");return(0,M.useEffect)(()=>{let h=new AbortController;return k(!0),b(""),p("vcs/file-history",{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,offset:g,limit:50},h.signal).then(u=>{h.signal.aborted||w(H=>({...u,commits:g?[...H.commits,...u.commits]:u.commits}))}).catch(u=>{h.signal.aborted||(b(u.message),u.code==="vcs/rediscover-required"&&c())}).finally(()=>{h.signal.aborted||k(!1)}),()=>h.abort()},[t,e,i,n,o,g,v]),M.default.createElement("section",{"aria-label":l("fileHistory"),"aria-busy":m},M.default.createElement("p",null,l("fileHistoryScope")),M.default.createElement("p",{style:{overflowWrap:"anywhere"}},d.path," \xB7 ",M.default.createElement("code",null,i)),M.default.createElement("ol",null,d.commits.map(h=>M.default.createElement("li",{key:h.id},M.default.createElement("code",{title:h.id},h.id.slice(0,10))," \xB7 ",a?M.default.createElement("button",{onClick:()=>a(h.id)},h.subject):h.subject,M.default.createElement("div",null,h.author," \xB7 ",M.default.createElement("time",{dateTime:h.date},h.date))))),m&&M.default.createElement("p",{role:"status"},l("loading")),f&&M.default.createElement("p",{role:"alert"},f," ",M.default.createElement("button",{onClick:()=>y(h=>h+1)},l("retry"))),!m&&!f&&!d.commits.length&&M.default.createElement("p",null,l("historyEmpty")),d.truncated&&M.default.createElement("p",{role:"status"},l("historyLimit")),!f&&d.nextOffset!==null&&M.default.createElement("button",{disabled:m,onClick:()=>N(d.nextOffset)},l("historyMore")))}function $e(t){let[e,i]=(0,M.useState)(!1);return M.default.createElement("div",null,M.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("fileHistory")),e&&M.default.createElement(Nr,{...t}))}var D=q(require("react"),1);function Ft(t,{width:e,height:i,signal:n,timeoutMs:o=1e4,createURL:p=a=>URL.createObjectURL(a),revokeURL:l=a=>URL.revokeObjectURL(a),createImage:c=()=>new Image}={}){return new Promise((a,d)=>{if(n?.aborted){d(n.reason);return}if(t?.type!=="image/png"||t.size>2*1024*1024||!Number.isInteger(e)||!Number.isInteger(i)||e<1||i<1||e>8192||i>8192||e*i>16e6||!Number.isFinite(o)||o<=0){d(new Error("Invalid image preview"));return}let w,g,N,v=!1,y=!1,m=()=>{y||(y=!0,g&&(g.src=""),w&&l(w))},k=()=>{clearTimeout(N),n?.removeEventListener("abort",b)},f=h=>{v||(v=!0,k(),m(),d(h))},b=()=>f(n.reason||new Error("Image cancelled"));try{w=p(t),g=c(),n?.addEventListener("abort",b,{once:!0}),N=setTimeout(()=>f(new Error("Image decode timed out")),o),g.src=w,Promise.resolve(g.decode()).then(()=>{if(!v){if(n?.aborted){b();return}if(g.naturalWidth!==e||g.naturalHeight!==i){f(new Error("Image dimensions mismatch"));return}v=!0,k(),a({url:w,dispose:m})}},f)}catch(h){f(h)}})}function Er({side:t,sessionId:e,repositoryId:i,commit:n,parentIndex:o,id:p,rpc:l,t:c,onRediscover:a}){let[d,w]=(0,D.useState)(null),[g,N]=(0,D.useState)(""),[v,y]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let m=new AbortController,k;return w(null),N(""),(async()=>{let f=await l("vcs/commit-image",{sessionId:e,repositoryId:i,commit:n,parentIndex:o,id:p,side:t},m.signal);if(m.signal.aborted)return;if(f.absent){w(f);return}if(f.mime!=="image/png"||typeof f.base64!="string"||f.base64.length>2796204||!Number.isInteger(f.bytes)||f.bytes<1||f.bytes>2097152)throw Error(c("imageInvalid"));let b=atob(f.base64);if(b.length!==f.bytes)throw Error(c("imageInvalid"));let h=new Blob([Uint8Array.from(b,u=>u.charCodeAt(0))],{type:f.mime});if(k=await Ft(h,{width:f.width,height:f.height,signal:m.signal}),m.signal.aborted){k.dispose();return}w({...f,url:k.url})})().catch(f=>{m.signal.aborted||(N(f.message),f.code==="vcs/rediscover-required"&&a())}),()=>{m.abort(),k?.dispose()}},[t,e,i,n,o,p,v]),D.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":c(t==="left"?"imageBefore":"imageAfter")},D.default.createElement("h5",null,c(t==="left"?"imageBefore":"imageAfter")),g?D.default.createElement("p",{role:"alert"},g," ",D.default.createElement("button",{onClick:()=>y(m=>m+1)},c("retry"))):d?D.default.createElement(D.default.Fragment,null,D.default.createElement("p",null,D.default.createElement("code",null,d.commit)," \xB7 ",d.path),d.absent?D.default.createElement("p",null,c("imageAbsent")):D.default.createElement(D.default.Fragment,null,D.default.createElement("p",null,d.width," \xD7 ",d.height," \xB7 ",d.bytes," B"),D.default.createElement("img",{src:d.url,alt:d.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),d.metadataStripped&&D.default.createElement("p",null,c("imageMetadata")))):D.default.createElement("p",{role:"status"},c("loading")))}function Ze(t){let[e,i]=(0,D.useState)(!1);return D.default.createElement("div",null,D.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("imageCompare")),e&&D.default.createElement(D.default.Fragment,null,D.default.createElement("p",null,t.t("imageScope")),D.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(n=>D.default.createElement(Er,{key:n,...t,side:n})))))}var A=q(require("react"),1);function Ar({sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,rpc:p,t:l,onRediscover:c}){let[a,d]=(0,A.useState)(null),[w,g]=(0,A.useState)(""),[N,v]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let y=new AbortController;return d(null),g(""),p("vcs/blame",{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o},y.signal).then(m=>{y.signal.aborted||d(m)}).catch(m=>{y.signal.aborted||(g(m.message),m.code==="vcs/rediscover-required"&&c())}),()=>y.abort()},[t,e,i,n,o,N]),w?A.default.createElement("p",{role:"alert"},w," ",A.default.createElement("button",{onClick:()=>v(y=>y+1)},l("retry"))):a?A.default.createElement("section",{"aria-label":l("blame")},A.default.createElement("p",null,l("blameScope")),a.notice&&A.default.createElement("p",{role:"status"},a.notice),a.truncated&&A.default.createElement("p",{role:"status"},l("blameLimit")),!a.notice&&!a.lines.length&&A.default.createElement("p",null,l("blameEmpty")),!!a.lines.length&&A.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},A.default.createElement("table",null,A.default.createElement("thead",null,A.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(y=>A.default.createElement("th",{key:y,scope:"col"},l(y))))),A.default.createElement("tbody",null,a.lines.map(y=>A.default.createElement("tr",{key:y.line},A.default.createElement("th",{scope:"row"},y.line),A.default.createElement("td",null,A.default.createElement("code",{title:y.commit},y.commit.slice(0,10))),A.default.createElement("td",null,y.author),A.default.createElement("td",null,y.summary),A.default.createElement("td",null,A.default.createElement("pre",{style:{margin:0}},y.text)))))))):A.default.createElement("p",{role:"status"},l("loading"))}function Re(t){let[e,i]=(0,A.useState)(!1);return A.default.createElement("div",null,A.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("blame")),e&&A.default.createElement(Ar,{...t}))}function ue({sessionId:t,repositoryId:e,commit:i,parentIndex:n,base:o,target:p,id:l,rpc:c,t:a,onRediscover:d,onSelectCommit:w}){let[g,N]=(0,I.useState)(null),[v,y]=(0,I.useState)(""),[m,k]=(0,I.useState)(0);return(0,I.useEffect)(()=>{let f=new AbortController;return N(null),y(""),c(o?"vcs/revision-compare":"vcs/commit-compare",o?{sessionId:t,repositoryId:e,base:o,target:p,id:l}:{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l},f.signal).then(b=>{f.signal.aborted||N(b)}).catch(b=>{f.signal.aborted||(y(b.message),b.code==="vcs/rediscover-required"&&d())}),()=>f.abort()},[t,e,i,n,o,p,l,m]),v?I.default.createElement("p",{role:"alert"},v," ",I.default.createElement("button",{onClick:()=>k(f=>f+1)},a("retry"))):g?I.default.createElement("section",null,I.default.createElement("h4",null,g.path),I.default.createElement("p",null,g.left.label," \u2194 ",g.right.label),g.notice&&I.default.createElement("p",{role:"status"},g.notice),g.binary?I.default.createElement("p",null,a("binary")):I.default.createElement(Ye,{comparison:g,identity:JSON.stringify(o?[t,e,o,p,l]:[t,e,i,n,l]),t:a}),i&&!o&&I.default.createElement($e,{onSelectCommit:w,key:JSON.stringify([t,e,i,n,l]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l,rpc:c,t:a,onRediscover:d}),i&&!o&&I.default.createElement(Re,{key:JSON.stringify([t,e,i,n,l]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l,rpc:c,t:a,onRediscover:d}),i&&!o&&I.default.createElement(Ze,{key:JSON.stringify([t,e,i,n,l]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l,rpc:c,t:a,onRediscover:d})):I.default.createElement("p",{role:"status"},a("loading"))}function Mt(t,e=""){let i=e.trim().toLowerCase();return i?t.filter(n=>[n.id,n.author,n.subject].some(o=>o?.toLowerCase().includes(i))):t}function Ae(t,e=""){let i=e.trim().toLowerCase();return i?t.filter(n=>[n.path,n.oldPath].some(o=>o?.toLowerCase().includes(i))):t}function et({sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:p,onSelectCommit:l}){let[c,a]=(0,L.useState)(null),[d,w]=(0,L.useState)(""),[g,N]=(0,L.useState)(0),[v,y]=(0,L.useState)(null),[m,k]=(0,L.useState)(""),[f,b]=(0,L.useState)(0);if((0,L.useEffect)(()=>{let u=new AbortController;return y(null),k(""),n("vcs/commit",{sessionId:t,repositoryId:e,commit:i,parentIndex:g},u.signal).then(H=>{u.signal.aborted||y(H)}).catch(H=>{u.signal.aborted||(k(H.message),H.code==="vcs/rediscover-required"&&p())}),()=>u.abort()},[t,e,i,g,f]),m)return L.default.createElement("p",{role:"alert"},m," ",L.default.createElement("button",{onClick:()=>b(u=>u+1)},o("retry")));if(!v)return L.default.createElement("p",{role:"status"},o("loading"));let h=Ae(v.changes,d);return L.default.createElement("section",{"aria-label":o("commitDetails")},L.default.createElement("h3",null,v.subject),L.default.createElement("code",null,v.id),L.default.createElement("p",null,v.author," \xB7 ",v.date),v.messageTruncated&&L.default.createElement("p",{role:"status"},o("commitMessageLimit")),v.message&&L.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},v.message),v.parents.length>1&&L.default.createElement("label",null,o("commitParent")," ",L.default.createElement("select",{"aria-label":o("commitParent"),value:g,onChange:u=>{a(null),y(null),N(Number(u.target.value))}},v.parents.map((u,H)=>L.default.createElement("option",{key:u,value:H},H+1,": ",u.slice(0,10))))),L.default.createElement("p",null,v.parent||o("commitRoot")," \u2192 ",v.id.slice(0,10)),L.default.createElement("label",null,o("commitFileSearch")," ",L.default.createElement("input",{"aria-label":o("commitFileSearch"),value:d,onChange:u=>{w(u.target.value),a(null)}})),L.default.createElement("span",null," ",h.length," / ",v.changes.length),L.default.createElement("ul",null,h.map(u=>L.default.createElement("li",{key:u.id},L.default.createElement("button",{"aria-pressed":c===u.id,onClick:()=>a(u.id)},u.status," \xB7 ",u.oldPath?u.oldPath+" \u2192 ":"",u.path)))),!!v.changes.length&&!h.length&&L.default.createElement("p",{role:"status"},o("emptySearch")),!v.changes.length&&L.default.createElement("p",null,o("commitNoChanges")),c&&L.default.createElement(ue,{key:c,sessionId:t,repositoryId:e,commit:i,parentIndex:g,id:c,onSelectCommit:l,rpc:n,t:o,onRediscover:p}),L.default.createElement(Qe,{key:JSON.stringify([t,e,i]),sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:p}))}var j=q(require("react"),1);function Ht(t){if(!Array.isArray(t))throw new Error("Invalid graph commits");let e=t.slice(0,200),i=new Map,n=[],o=[],p=c=>typeof c=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(c);for(let[c,a]of e.entries()){if(!a||!p(a.id)||!Array.isArray(a.parents)||i.has(a.id))throw new Error("Invalid graph node");i.set(a.id,c),n.push({id:a.id,row:c})}let l=!1;for(let c of e){let a=new Set;for(let d of c.parents){if(o.length===1e3){l=!0;break}if(!p(d)||d.length!==c.id.length||d===c.id||a.has(d))throw new Error("Invalid graph parent");a.add(d);let w=i.get(d);if(w!==void 0&&w<=i.get(c.id))throw new Error("Graph requires child-before-parent order");o.push({from:c.id,to:d,missing:w===void 0})}if(l)break}return{nodes:n,edges:o,nodesTruncated:t.length>200,edgesTruncated:l}}function Lr({commits:t,onSelect:e,t:i}){let n;try{n=Ht(t)}catch{return j.default.createElement("p",{role:"alert"},i("graphInvalid"))}let o=new Map(n.nodes.map(l=>[l.id,l.row])),p=Math.max(40,n.nodes.length*36);return j.default.createElement("section",{"aria-label":i("historyGraph")},j.default.createElement("p",null,i("graphScope")),(n.nodesTruncated||n.edgesTruncated)&&j.default.createElement("p",{role:"status"},i("graphLimit")),j.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},j.default.createElement("svg",{width:"100",height:p,"aria-hidden":"true",style:{flexShrink:0}},n.edges.filter(l=>!l.missing).map((l,c)=>{let a=o.get(l.from)*36+18,d=o.get(l.to)*36+18,w=35+c%5*12;return j.default.createElement("path",{key:l.from+l.to,d:"M 12 "+a+" C "+w+" "+a+", "+w+" "+d+", 12 "+d,fill:"none",stroke:"currentColor",opacity:"0.45"})}),n.nodes.map(l=>j.default.createElement("circle",{key:l.id,cx:"12",cy:l.row*36+18,r:"4",fill:"currentColor"}))),j.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},n.nodes.map(l=>j.default.createElement("li",{key:l.id,style:{height:36,whiteSpace:"nowrap"}},j.default.createElement("button",{title:l.id,onClick:()=>e(l.id)},j.default.createElement("code",null,l.id.slice(0,10))," ",t[l.row].subject))))),j.default.createElement("details",null,j.default.createElement("summary",null,i("graphRelations")),j.default.createElement("ul",null,n.edges.map(l=>j.default.createElement("li",{key:l.from+l.to},j.default.createElement("code",null,l.from)," \u2192 ",j.default.createElement("code",null,l.to),l.missing?" \xB7 "+i("graphMissing"):"")))))}function tt(t){let[e,i]=(0,j.useState)(!1);return j.default.createElement("div",null,j.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("historyGraph")),e&&j.default.createElement(Lr,{...t}))}var C=q(require("react"),1);function Pr({sessionId:t,repositoryId:e,base:i,target:n,rpc:o,t:p,onRediscover:l}){let[c,a]=(0,C.useState)(null),[d,w]=(0,C.useState)(""),[g,N]=(0,C.useState)(0),[v,y]=(0,C.useState)(null),[m,k]=(0,C.useState)("");if((0,C.useEffect)(()=>{let b=new AbortController;return a(null),w(""),y(null),o("vcs/revision-changes",{sessionId:t,repositoryId:e,base:i,target:n},b.signal).then(h=>{b.signal.aborted||a(h)}).catch(h=>{b.signal.aborted||(w(h.message),h.code==="vcs/rediscover-required"&&l())}),()=>b.abort()},[t,e,i,n,g]),d)return C.default.createElement("p",{role:"alert"},d," ",C.default.createElement("button",{onClick:()=>N(b=>b+1)},p("retry")));if(!c)return C.default.createElement("p",{role:"status"},p("loading"));let f=Ae(c.changes,m);return C.default.createElement("div",null,C.default.createElement("label",null,p("commitFileSearch")," ",C.default.createElement("input",{"aria-label":p("commitFileSearch"),value:m,onChange:b=>{k(b.target.value),y(null)}})),C.default.createElement("span",null," ",f.length," / ",c.changes.length),!!c.changes.length&&!f.length&&C.default.createElement("p",{role:"status"},p("emptySearch")),!c.changes.length&&C.default.createElement("p",null,p("revisionEmpty")),C.default.createElement("ul",null,f.map(b=>C.default.createElement("li",{key:b.id},C.default.createElement("button",{"aria-pressed":v===b.id,onClick:()=>y(b.id)},b.status," \xB7 ",b.oldPath?b.oldPath+" \u2192 ":"",b.path)))),v&&C.default.createElement(ue,{key:v,sessionId:t,repositoryId:e,base:i,target:n,id:v,rpc:o,t:p,onRediscover:l}))}function rt(t){return C.default.createElement(Br,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Br({commits:t,sessionId:e,repositoryId:i,rpc:n,t:o,onRediscover:p}){let[l,c]=(0,C.useState)(""),[a,d]=(0,C.useState)(""),[w,g]=(0,C.useState)([]),[N,v]=(0,C.useState)(!1),[y,m]=(0,C.useState)(0),[k,f]=(0,C.useState)(!1),[b,h]=(0,C.useState)("");return(0,C.useEffect)(()=>{if(!y)return;let u=new AbortController;return f(!0),h(""),n("vcs/references",{sessionId:e,repositoryId:i},u.signal).then(H=>{u.signal.aborted||(g(H.references),v(!0))}).catch(H=>{u.signal.aborted||(h(H.message),H.code==="vcs/rediscover-required"&&p())}).finally(()=>{u.signal.aborted||f(!1)}),()=>u.abort()},[e,i,y]),C.default.createElement("section",{"aria-label":o("revisionTitle")},C.default.createElement("h3",null,o("revisionTitle")),C.default.createElement("p",null,o("revisionScope")),C.default.createElement("button",{disabled:k,onClick:()=>m(u=>u+1)},o("revisionLoadRefs")),C.default.createElement("p",null,o("revisionRefsScope")),N&&!k&&!b&&C.default.createElement("p",{role:"status"},w.length?`${o("revisionRefsCount")}: ${w.length}`:o("revisionRefsEmpty")),k&&C.default.createElement("p",{role:"status"},o("loading")),b&&C.default.createElement("p",{role:"alert"},b),[[l,c,"revisionBase"],[a,d,"revisionTarget"]].map(([u,H,V])=>C.default.createElement("label",{key:V},o(V)," ",C.default.createElement("select",{"aria-label":o(V),value:u,onChange:O=>H(O.target.value)},C.default.createElement("option",{value:""},"\u2014"),t.map(O=>C.default.createElement("option",{key:O.id,value:O.id},O.id.slice(0,10)," \xB7 ",O.subject)),w.map(O=>C.default.createElement("option",{key:O.name,value:O.commit},O.name," \xB7 ",O.commit.slice(0,10))),u&&!t.some(O=>O.id===u)&&!w.some(O=>O.commit===u)&&C.default.createElement("option",{value:u},u)))),C.default.createElement("button",{disabled:!l||!a,onClick:()=>{c(a),d(l)}},o("revisionSwap")),C.default.createElement("p",{style:{overflowWrap:"anywhere"}},C.default.createElement("code",null,l||"\u2014")," \u2192 ",C.default.createElement("code",null,a||"\u2014")),l&&a&&C.default.createElement(Pr,{key:JSON.stringify([e,i,l,a]),sessionId:e,repositoryId:i,base:l,target:a,rpc:n,t:o,onRediscover:p}))}function ot({sessionId:t,repositoryId:e,rpc:i,t:n,onRediscover:o}){let[p,l]=(0,P.useState)(null),[c,a]=(0,P.useState)(""),[d,w]=(0,P.useState)({commits:[],snapshot:null,nextOffset:null}),[g,N]=(0,P.useState)(0),[v,y]=(0,P.useState)(0),[m,k]=(0,P.useState)(!0),[f,b]=(0,P.useState)("");(0,P.useEffect)(()=>{let u=new AbortController;return k(!0),b(""),i("vcs/history",{sessionId:t,repositoryId:e,offset:g,limit:50,...g?{snapshot:d.snapshot}:{}},u.signal).then(H=>{u.signal.aborted||w(V=>({...H,commits:g?[...V.commits,...H.commits]:H.commits}))}).catch(H=>{u.signal.aborted||(b(H.message),H.code==="vcs/rediscover-required"&&o())}).finally(()=>{u.signal.aborted||k(!1)}),()=>u.abort()},[t,e,g,v]);let h=Mt(d.commits,c);return P.default.createElement("section",{className:"vcs-history","aria-label":n("history"),"aria-busy":m},P.default.createElement("p",null,n("historyListOnly")),P.default.createElement("label",null,n("historySearch")," ",P.default.createElement("input",{"aria-label":n("historySearch"),value:c,onChange:u=>{a(u.target.value),l(null)}})),P.default.createElement("span",null," ",h.length," / ",d.commits.length),!!d.commits.length&&!h.length&&P.default.createElement("p",{role:"status"},n("historyNoMatch")),P.default.createElement("ol",null,h.map(u=>P.default.createElement("li",{key:u.id},P.default.createElement("button",{"aria-pressed":p===u.id,onClick:()=>l(u.id)},u.subject),P.default.createElement("div",null,P.default.createElement("code",{title:u.id},u.id.slice(0,10))," \xB7 ",u.author," \xB7 ",P.default.createElement("time",{dateTime:u.date},u.date))))),m&&P.default.createElement("p",{role:"status"},n("loading")),f&&P.default.createElement("p",{role:"alert"},f," ",P.default.createElement("button",{onClick:()=>y(u=>u+1)},n("retry"))),!m&&!f&&!d.commits.length&&P.default.createElement("p",null,n("historyEmpty")),d.truncated&&P.default.createElement("p",{role:"status"},n("historyLimit")),!f&&d.nextOffset!==null&&P.default.createElement("button",{disabled:m,onClick:()=>N(d.nextOffset)},n("historyMore")),!!d.commits.length&&P.default.createElement(tt,{commits:d.commits,onSelect:l,t:n}),!!d.commits.length&&P.default.createElement(rt,{commits:d.commits,sessionId:t,repositoryId:e,rpc:i,t:n,onRediscover:o}),p&&P.default.createElement(et,{key:p,sessionId:t,repositoryId:e,commit:p,onSelectCommit:l,rpc:i,t:n,onRediscover:o}))}var jt={zh:{workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u7684\u8BB0\u5F55\u4E5F\u4F1A\u5305\u542B\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u4E0D\u6253\u5F00\u6587\u4EF6\u3001\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",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",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryScope:"Exact-path history at the pinned commit. Does not follow renames; includes deletion and recreation at the same path.",blame:"Blame",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Files are not opened; symlinks and submodules are not followed.",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.",revisionRefsCount:"Selectable references loaded"}};function Ot(t,e,i,n){let o=t.target;if(!e?.contains(o)||t.defaultPrevented||t.isComposing||o?.closest?.(".monaco-editor")||o?.closest?.(".vcs-history"))return null;if(t.key==="Escape"&&o===i&&n)return"clear";let p=o?.isContentEditable||o?.closest?.('input,textarea,select,[role="textbox"]');if(p&&o!==i)return null;if((t.ctrlKey||t.metaKey)&&!t.altKey&&!t.shiftKey&&t.key?.toLowerCase()==="f")return"search";if(!p&&t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.shiftKey){if(t.key==="ArrowLeft")return"previous";if(t.key==="ArrowRight")return"next"}return null}var Ut=t=>"dsh-vcs:project:v1:"+t;function Wt(t,e){if(!t)return"";try{let i=(e??globalThis.localStorage)?.getItem(Ut(t));return typeof i=="string"&&i.length<=1024?i:""}catch{return""}}function zt(t,e,i){if(!(!t||!e))try{(i??globalThis.localStorage)?.setItem(Ut(t),e)}catch{}}function qt(t,e=""){return t.find(i=>i.id===e)?.id||t.find(i=>i.relativePath===".")?.id||t[0]?.id||""}var fe=(t,e)=>JSON.stringify([t,e]),me=(t,e=".")=>[t.type.toUpperCase(),t.relativePath==="."?e:t.relativePath||".",t.branch].filter(Boolean).join(" \xB7 "),Le=(t,e="all")=>t.type==="git"&&["staged","unstaged"].includes(e)?e:"all",It=(t="",e="")=>t===e?0:t<e?-1:1;function st(t=[]){let e={id:"",name:"",directories:new Map,files:[],count:0};for(let n of t){let o=String(n.path||"").split("/").filter(Boolean);if(!o.length)continue;let p=e;for(let l of o.slice(0,-1)){let c=p.id?p.id+"/"+l:l;p.directories.has(l)||p.directories.set(l,{id:c,name:l,directories:new Map,files:[],count:0}),p=p.directories.get(l),p.count++}p.files.push(n)}let i=n=>({...n,directories:[...n.directories.values()].sort((o,p)=>It(o.name,p.name)).map(i),files:[...n.files].sort((o,p)=>It(o.path,p.path))});return i(e)}function Gt(t=[],e){let i=t.findIndex(n=>n.id===e);return{index:i<0?0:i+1,total:t.length}}function Jt(t=[],e,i){if(!t.length||!["previous","next"].includes(i))return null;let n=t.findIndex(l=>l.id===e),o=i==="next"?1:-1,p=n<0?i==="next"?-1:0:n;return t[(p+o+t.length)%t.length]||null}function _t(t=""){let e=String(t).split("/").filter(Boolean);return e.slice(0,-1).map((i,n)=>e.slice(0,n+1).join("/"))}function it(t,e=[]){for(let i of t?.directories||[])e.push(i.id),it(i,e);return e}function Kt(t=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[t]||t}function Vt(t=[]){return t.reduce((e,i)=>{let n=Kt(i.status);return e.all++,e[n]=(e[n]||0)+1,e},{all:0})}function Tr(t=[],e="",i="all"){let n=e.toLowerCase();return t.filter(o=>(i==="all"||Kt(o.status)===i)&&o.path.toLowerCase().includes(n)).sort((o,p)=>o.path.localeCompare(p.path))}function Xt(t,e,i="",n="all"){return t.map(o=>({...e[o.id],repository:o,changes:Tr(e[o.id]?.changes,i,n)}))}function Qt(t,e,i=""){if(!i||!t||t.cwd!==e.cwd)return e;let n=new Map(t.repositories.map(o=>[o.id,o]));for(let o of e.repositories)n.set(o.id,o);return{...e,repositories:[...n.values()],truncated:t.truncated||e.truncated,warnings:[...t.warnings||[],...e.warnings||[]]}}function Yt(t=2){if(!Number.isInteger(t)||t<1||t>2)throw new RangeError("Status concurrency must be 1 or 2");let e=0,i=[];function n(){for(;e<t&&i.length;){let o=i.shift();if(o.signal?.removeEventListener("abort",o.abort),o.signal?.aborted){o.reject(new Error("Aborted"));continue}e++,Promise.resolve().then(()=>{if(o.signal?.aborted)throw new Error("Aborted");return o.run()}).then(o.resolve,o.reject).finally(()=>{e--,n()})}}return(o,p)=>new Promise((l,c)=>{let a={run:o,signal:p,resolve:l,reject:c,abort:null};if(a.abort=()=>{let d=i.indexOf(a);d>=0&&(i.splice(d,1),c(new Error("Aborted")))},p?.aborted){c(new Error("Aborted"));return}p?.addEventListener("abort",a.abort,{once:!0}),i.push(a),n()})}var $t={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Zt=t=>new URL("vcs-assets/"+t,document.baseURI).href;function Rt(){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 Fr=["slots","layout","locale","connection","uiSession"];function Mr(t){t.effect(()=>t.locale.register("local.vcs",jt));let e=t.locale.bind("local.vcs"),i=Yt(2);async function n(c,a,d){let w=await t.connection.rpc.call("/vcs-rpc",c,a,d);if(!w.ok){let g=new Error(w.error?.message||String(w.error||e("error")));throw g.code=w.error?.code,g}return w.value}function o(c){let a=c.useSessions(d=>Object.values(d.byId).find(w=>(w.retainedBy.mainView??0)>0));return r.default.createElement(p,{key:JSON.stringify([a?.id,a?.cwd])},r.default.createElement(l,{session:a}))}class p 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,Ve),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 l({session:c}){(0,r.useSyncExternalStore)(s=>t.locale.subscribe(s),()=>t.locale.getSnapshot(),()=>t.locale.getSnapshot());let a=c?.id,[d,w]=(0,r.useState)("all"),[g,N]=(0,r.useState)(0),[v,y]=(0,r.useState)(null),[m,k]=(0,r.useState)({}),[f,b]=(0,r.useState)(()=>Wt(c?.cwd)),[h,u]=(0,r.useState)(0),[H,V]=(0,r.useState)(""),[O,nt]=(0,r.useState)(""),[U,Pe]=(0,r.useState)(null),[S,re]=(0,r.useState)(null),[he,at]=(0,r.useState)(!1),[er,lt]=(0,r.useState)(!1),[$,dt]=(0,r.useState)(""),[Be,oe]=(0,r.useState)(""),[J,ct]=(0,r.useState)(""),[pt,ut]=(0,r.useState)(!1),[X,De]=(0,r.useState)(""),[ve,ft]=(0,r.useState)("all"),[Z,mt]=(0,r.useState)(!0),[ht,Te]=(0,r.useState)({}),[se,tr]=(0,r.useState)(!0),[Fe,rr]=(0,r.useState)(!1),[Me,or]=(0,r.useState)(!1),[ge,ie]=(0,r.useState)("content"),[vt,gt]=(0,r.useState)(0),[bt,sr]=(0,r.useState)(!1),[He,je]=(0,r.useState)({added:0,deleted:0,count:0}),[G,yt]=(0,r.useState)(!1),xt=(0,r.useRef)(null),Oe=(0,r.useRef)(null),R=(0,r.useRef)(null),Ue=(0,r.useRef)(null),be=(0,r.useRef)(null),We=(0,r.useRef)(null),wt=(0,r.useRef)(null),ye=(0,r.useRef)(null),ze=(0,r.useRef)(null),Ie=(0,r.useRef)(null),qe=(0,r.useRef)(!1),xe=(0,r.useRef)(!1),Q=v?.repositories||[],ne=Q.filter(s=>s.id===f);(0,r.useEffect)(()=>{Q.some(s=>s.id===f)&&zt(c?.cwd,f)},[c?.cwd,f,v]);let ae=()=>{wt.current?.abort(),ye.current?.abort(),re(null),Pe(null),oe(""),ie("content"),je({added:0,deleted:0,count:0})},we=()=>{xe.current=!1,ae(),ze.current?.abort(),Ie.current=v,y(null),k({}),nt(H.trim()),u(s=>s+1)},Ge=()=>{xe.current||(xe.current=!0,ae(),ze.current?.abort(),Ie.current=null,y(null),k({}),nt(""),u(s=>s+1))},kt=(s=!1)=>{qe.current=s,s||ae(),s||k({}),N(x=>x+1)};(0,r.useEffect)(()=>{let s=new AbortController;return ze.current=s,dt(""),at(!!a),a&&n("vcs/repositories",{sessionId:a,...O?{subdirectory:O}:{}},s.signal).then(x=>{if(!s.signal.aborted){let E=Qt(Ie.current,x,O);xe.current=!1,b(T=>qt(E.repositories,T)),y(E)}}).catch(x=>{s.signal.aborted||dt(x.message)}).finally(()=>{s.signal.aborted||at(!1)}),()=>s.abort()},[a,h,O]),(0,r.useEffect)(()=>{let s=new AbortController,x=qe.current;wt.current=s,qe.current=!1,x||(k({}),oe(""));for(let E of ne){let T=Le(E,d);i(()=>n("vcs/status",{sessionId:a,repositoryId:E.id,mode:T},s.signal),s.signal).then(W=>{s.signal.aborted||k(_=>({..._,[E.id]:{...W,mode:T}}))}).catch(W=>{if(!s.signal.aborted){if(W.code==="vcs/rediscover-required"){Ge();return}k(_=>({..._,[E.id]:{error:W.message,changes:[],mode:T}}))}})}return()=>s.abort()},[a,v,f,d,g]),(0,r.useEffect)(()=>{let s=()=>{a&&f&&document.visibilityState==="visible"&&kt(!0)};return window.addEventListener("focus",s),()=>window.removeEventListener("focus",s)},[a,f,d]);let ke=Q.find(s=>s.id===U?.repositoryId),le=U?m[U.repositoryId]:null;(0,r.useEffect)(()=>{let s=new AbortController;return ye.current=s,re(null),oe(""),je({added:0,deleted:0,count:0}),ie("content"),lt(!!U&&!!le),U&&le&&ke&&n("vcs/compare",{sessionId:a,repositoryId:U.repositoryId,mode:Le(ke,d),id:U.id},s.signal).then(x=>{s.signal.aborted||re(x)}).catch(x=>{if(!s.signal.aborted){if(x.code==="vcs/rediscover-required"){Ge();return}oe(x.message)}}).finally(()=>{s.signal.aborted||lt(!1)}),()=>s.abort()},[U,le,a,d]),(0,r.useEffect)(()=>{let s=!1,x,E=new AbortController;yt(!1),ct("");let T=document.createElement("link");return T.rel="stylesheet",T.href=Zt("editor.css"),Oe.current.parentNode.appendChild(T),Ne(Zt("editor.js")+"?v="+encodeURIComponent(Ee)+"&retry="+vt,{signal:E.signal}).then(W=>{s||(x=W.createDiff(Oe.current,{onStats:je}),R.current=x,yt(!0))}).catch(W=>{s||ct(W.message)}),()=>{s=!0,E.abort(),x?.dispose(),R.current=null,T.remove()}},[vt]),(0,r.useEffect)(()=>{G&&S&&!S.binary&&R.current?.setContent(S,JSON.stringify([a,v?.cwd,U?.repositoryId,d,U?.id,S.path]))},[G,S,a,v,U,d]),(0,r.useEffect)(()=>{R.current?.options({sideBySide:se,ignoreWhitespace:Fe,wrap:Me})},[G,se,Fe,Me]);let de=Xt(ne,m,X,ve),ee=de.flatMap(s=>s.changes),ir=Vt(le?.changes),Je=Gt(ee,U?.id),Ct=()=>{De(""),ft("all")},nr=async()=>{let s=S?.path||K?.path;if(s)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(s);else{let x=document.createElement("textarea");try{if(x.value=s,x.style.cssText="position:fixed;opacity:0",document.body.appendChild(x),x.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{x.remove()}}ut(!0),window.setTimeout(()=>ut(!1),1500)}catch{oe(e("copyFailed"))}};(0,r.useEffect)(()=>{let s=x=>{let E=Ot(x,xt.current,be.current,!!X);E&&(x.preventDefault(),E==="search"?(be.current?.focus(),be.current?.select()):E==="clear"?De(""):_e(E))};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[X,ee,U]);let St=s=>Te(x=>{let E={...x};for(let T of de)for(let W of it(st(T.changes)))E[T.repository.id+"\0"+W]=!s;return E}),ar=()=>{let s=K;!s||!U||(mt(!0),Ct(),Te(x=>{let E={...x};for(let T of _t(s.path))E[U.repositoryId+"\0"+T]=!1;return E}),We.current=fe(U.repositoryId,s.id))};(0,r.useEffect)(()=>{let s=We.current;if(!s)return;let x=[...Ue.current?.querySelectorAll("button[data-vcs-change]")||[]].find(E=>E.dataset.vcsChange===s);x&&(x.scrollIntoView({block:"nearest"}),x.focus(),We.current=null)},[Z,X,ve,ht,de]);let _e=s=>{let x=Jt(ee,U?.id,s);x&&(ye.current?.abort(),re(null),ie("content"),Pe({repositoryId:f,id:x.id}))},Nt=he||ne.some(s=>!m[s.id]),K=le?.changes?.find(s=>s.id===U?.id),Y=S?.properties,Ke=Y?[...new Set([...Object.keys(Y.left||{}),...Object.keys(Y.right||{})])].filter(s=>Y.left?.[s]!==Y.right?.[s]):[],ce=s=>$t[s?.status]||s?.status?.slice(0,1).toUpperCase()||"M",Et=S?.binary?[S.left.label,S.right.label].filter(Boolean).join(" \u2194 "):"",te=Be||(er?e("loading"):a?Nt&&!K?e("loading"):$||(Q.length?K?S?.binary?e("binary")+(Et?" "+e("binaryComparison",{files:Et}):""):S?!G&&!J?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession")),lr=s=>{let x=Ue.current,E=x?[...x.querySelectorAll("button[data-vcs-item]")]:[],T=E.indexOf(s.target);if(T<0)return;let W;if(s.key==="ArrowDown")W=E[T+1];else if(s.key==="ArrowUp")W=E[T-1];else if(s.key==="Home")W=E[0];else if(s.key==="End")W=E.at(-1);else if(s.key==="ArrowRight"&&s.target.dataset.vcsDirectory==="closed"){s.preventDefault(),s.target.click();return}else if(s.key==="ArrowLeft"&&s.target.dataset.vcsDirectory==="open"){s.preventDefault(),s.target.click();return}else return;s.preventDefault(),W?.focus()},At=({entry:s,compact:x=!1,depth:E=0})=>{let T=s.path.lastIndexOf("/");return r.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":fe(f,s.id),"aria-current":U?.repositoryId===f&&U?.id===s.id?"true":void 0,style:{paddingInlineStart:8+E*14},title:(s.oldPath?s.oldPath+" \u2192 ":"")+s.path+" \xB7 "+e(ce(s)),onClick:()=>{ye.current?.abort(),re(null),ie("content"),Pe({repositoryId:f,id:s.id})}},r.default.createElement("span",{className:"vcs-status","data-status":ce(s)},ce(s)),r.default.createElement("span",{className:"vcs-filename"},x?s.path.slice(T+1):s.path,s.oldPath&&r.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",s.oldPath)))},Lt=({node:s,repository:x,depth:E=0})=>r.default.createElement(r.default.Fragment,null,s.directories.map(T=>{let W=x.id+"\0"+T.id,_=!!ht[W];return r.default.createElement(r.default.Fragment,{key:W},r.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":_?"closed":"open","aria-expanded":!_,style:{paddingInlineStart:8+E*14},onClick:()=>Te(dr=>({...dr,[W]:!_}))},r.default.createElement("span",{"aria-hidden":"true"},_?"\u203A":"\u2304"),T.name,r.default.createElement("small",null,T.count)),!_&&r.default.createElement(Lt,{node:T,repository:x,depth:E+1}))}),s.files.map(T=>r.default.createElement(At,{key:fe(x.id,T.id),entry:T,compact:s.id!=="",depth:E})));return r.default.createElement("section",{ref:xt,className:"vcs-root","aria-label":e("title")},r.default.createElement("style",null,Ve),r.default.createElement("header",{className:"vcs-top"},r.default.createElement(Rt,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:he||!Q.length,onChange:s=>{ae(),k({}),b(s.target.value)}},!Q.length&&r.default.createElement("option",{value:""},e("repositories")),Q.map(s=>r.default.createElement("option",{key:s.id,value:s.id},me(s,e("workspaceRoot"))))),r.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",r.default.createElement("select",{"aria-label":e("gitMode"),value:d,disabled:!ne.some(s=>s.type==="git"),onChange:s=>{ae(),k({}),w(s.target.value)}},["all","unstaged","staged"].map(s=>r.default.createElement("option",{key:s,value:s},e(s))))),r.default.createElement("button",{onClick:kt,disabled:Nt||!a},e("refresh")),r.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")),r.default.createElement("div",{className:"vcs-path",title:v?.cwd||c?.cwd},e("session"),": ",v?.cwd||c?.cwd||"\u2014"),r.default.createElement("form",{className:"vcs-discovery",onSubmit:s=>{s.preventDefault(),we()}},r.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:H,onChange:s=>V(s.target.value)}),r.default.createElement("button",{disabled:!a||he},e("rescan")),r.default.createElement("span",null,e("scanHint"))),v?.truncated&&r.default.createElement("div",{className:"vcs-notice"},e("truncated")),(v?.warnings||[]).map((s,x)=>r.default.createElement("div",{className:"vcs-notice",key:x},typeof s=="string"?s:s.message||JSON.stringify(s)))),ne.some(s=>s.type==="git")&&r.default.createElement(r.default.Fragment,null,r.default.createElement("button",{"aria-expanded":bt,onClick:()=>sr(s=>!s)},e("history")),bt&&r.default.createElement(ot,{key:JSON.stringify([a,f,g,h]),sessionId:a,repositoryId:f,rpc:n,t:e,onRediscover:Ge})),r.default.createElement("div",{className:"vcs-body"},r.default.createElement("aside",{className:"vcs-files"},r.default.createElement("div",{className:"vcs-filter"},r.default.createElement("input",{ref:be,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:X,onChange:s=>De(s.target.value)}),(X||ve!=="all")&&r.default.createElement("button",{className:"vcs-clear-filter",onClick:Ct},e("clearFilters"))),r.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(s=>r.default.createElement("button",{key:s,"aria-pressed":ve===s,onClick:()=>ft(s)},e(s==="all"?"allFiles":$t[s]||"M")," ",r.default.createElement("small",null,ir[s]||0)))),r.default.createElement("div",{className:"vcs-count"},r.default.createElement("span",null,ee.length," ",e("files")),r.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),r.default.createElement("button",{"aria-pressed":Z,onClick:()=>mt(!Z)},e(Z?"tree":"list"))),Z&&r.default.createElement("div",{className:"vcs-tree-actions"},r.default.createElement("button",{onClick:()=>St(!0)},e("expandAll")),r.default.createElement("button",{onClick:()=>St(!1)},e("collapseAll")),r.default.createElement("button",{onClick:ar,disabled:!K},e("revealSelected"))),r.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:Ue,onKeyDown:lr},de.map(s=>{let x=s.repository;return r.default.createElement("section",{className:"vcs-repository",key:x.id,"aria-label":me(x,e("workspaceRoot"))},r.default.createElement("div",{className:"vcs-repository-heading",title:x.root},r.default.createElement("strong",null,me(x,e("workspaceRoot"))),r.default.createElement("small",null,x.type==="svn"?e("svnBase"):e(Le(x,d)))),s.error?r.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},s.error,r.default.createElement("button",{onClick:we},e("rescan"))):m[x.id]?Z?r.default.createElement(Lt,{node:st(s.changes),repository:x}):s.changes.map(E=>r.default.createElement(At,{key:fe(x.id,E.id),entry:E})):r.default.createElement("div",{className:"vcs-message"},e("loading")),!s.error&&m[x.id]&&!s.changes.length&&r.default.createElement("div",{className:"vcs-message"},e(X?"emptySearch":"clean")))}),!de.length&&r.default.createElement("div",{className:"vcs-message"},he?e("loading"):$||e(a?"noRepo":"noSession"),$&&r.default.createElement("button",{onClick:we},e("rescan"))))),r.default.createElement("main",{className:"vcs-detail"},r.default.createElement("div",{className:"vcs-filehead"},r.default.createElement("strong",{title:S?.path||K?.path},ke?me(ke,e("workspaceRoot"))+" / ":"",S?.path||K?.path||e("pick")),r.default.createElement("button",{className:"vcs-copy-path",disabled:!(S?.path||K?.path),onClick:nr},e(pt?"copied":"copyPath")),pt&&r.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),r.default.createElement("span",{className:"vcs-spacer"}),S&&!S.binary&&G&&r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"vcs-add"},"+",He.added),r.default.createElement("span",{className:"vcs-del"},"\u2212",He.deleted))),J&&r.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",r.default.createElement("button",{onClick:()=>gt(s=>s+1)},e("retry")),r.default.createElement("details",null,r.default.createElement("summary",null,e("diagnostics")),J)),S&&r.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},r.default.createElement("span",{className:"vcs-context-status","data-status":ce(S)},e(ce(S))),S.oldPath&&r.default.createElement("span",{className:"vcs-context-rename",title:S.oldPath+" \u2192 "+S.path},S.oldPath," ",r.default.createElement("b",null,"\u2192")," ",S.path),r.default.createElement("span",null,S.left.label||"\u2014"," ",r.default.createElement("b",null,"\u2194")," ",S.right.label||"\u2014"),(S.left.encoding||S.right.encoding)&&r.default.createElement("span",null,e("encoding"),": ",S.left.encoding||"\u2014"," / ",S.right.encoding||"\u2014")),S?.notice&&r.default.createElement("div",{className:"vcs-notice"},S.notice),Ke.length>0&&r.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(s=>r.default.createElement("button",{key:s,"aria-pressed":ge===s,onClick:()=>ie(s)},e(s),s==="properties"?" ("+Ke.length+")":""))),r.default.createElement("div",{className:"vcs-labels"},r.default.createElement("span",null,S?.left.label||"\u2014",S?.left.encoding?" \xB7 "+S.left.encoding:""),r.default.createElement("span",null,S?.right.label||"\u2014",S?.right.encoding?" \xB7 "+S.right.encoding:"")),r.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!te||ge!=="content",style:ge==="properties"?{display:"none"}:void 0},r.default.createElement("div",{className:"vcs-editor",ref:Oe,style:J?{display:"none"}:void 0}),J&&S&&!S.binary&&!te&&r.default.createElement(pe,{comparison:S,labels:Se(e)}),te&&r.default.createElement("div",{className:"vcs-message "+($||Be||J?"vcs-error":""),role:"status"},te,($||Be||J)&&r.default.createElement("button",{onClick:()=>J?gt(s=>s+1):we()},e(J?"retry":"rescan")))),ge==="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,S?.left.label||e("before")),r.default.createElement("th",null,S?.right.label||e("after")))),r.default.createElement("tbody",null,Ke.map(s=>r.default.createElement("tr",{key:s},r.default.createElement("th",null,s),r.default.createElement("td",null,Y.left?.[s]??"\u2014"),r.default.createElement("td",null,Y.right?.[s]??"\u2014")))))),r.default.createElement("footer",{className:"vcs-toolbar"},r.default.createElement("button",{disabled:!G,"aria-pressed":se,onClick:()=>tr(!se)},e(se?"side":"inline")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!G,checked:Fe,onChange:s=>rr(s.target.checked)}),e("whitespace")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!G,checked:Me,onChange:s=>or(s.target.checked)}),e("wrap")),r.default.createElement("span",{className:"vcs-spacer"}),G&&r.default.createElement("span",null,He.count," ",e("changes")),r.default.createElement("button",{disabled:!G||!S||!!te,onClick:()=>R.current?.navigate("previous")},e("previous")),r.default.createElement("button",{disabled:!G||!S||!!te,onClick:()=>R.current?.navigate("next")},e("next")),Je.index>0&&r.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:Je.index,total:Je.total})),r.default.createElement("span",{className:"vcs-toolbar-separator"}),r.default.createElement("button",{title:e("fileShortcut"),disabled:!ee.length,onClick:()=>_e("previous")},e("previousFile")),r.default.createElement("button",{title:e("fileShortcut"),disabled:!ee.length,onClick:()=>_e("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},Rt))}
|
|
95
|
+
`;var W=q(require("react"),1);function Bt(t){return t===""?[]:t.split(/\r\n|\n|\r/)}function Dt(t="",e=""){let i=Bt(t),n=Bt(e),o=0;for(;o<i.length&&o<n.length&&i[o]===n[o];)o++;let p=0;for(;p<i.length-o&&p<n.length-o&&i[i.length-p-1]===n[n.length-p-1];)p++;let l=i.length-p,c=n.length-p,a=l-o,d=c-o,w=a&&d?(a+1)*(d+1):0,g=w>2e5,N=[],v=0;function y(m,k){v++,!(N.length>=2e3)&&N.push({left:m===null?null:{number:m+1,text:i[m]},right:k===null?null:{number:k+1,text:n[k]},kind:m===null?"insert":k===null?"delete":i[m]===n[k]?"equal":"replace"})}for(let m=0;m<o;m++)y(m,m);if(g||!a||!d)for(let m=0;m<Math.max(a,d);m++)y(m<a?o+m:null,m<d?o+m:null);else{let m=d+1,k=new Uint32Array(w);for(let h=a-1;h>=0;h--)for(let u=d-1;u>=0;u--)k[h*m+u]=i[o+h]===n[o+u]?k[(h+1)*m+u+1]+1:Math.max(k[(h+1)*m+u],k[h*m+u+1]);let f=0,b=0;for(;f<a||b<d;)f<a&&b<d&&i[o+f]===n[o+b]?y(o+f++,o+b++):f<a&&(b===d||k[(f+1)*m+b]>=k[f*m+b+1])?y(o+f++,null):y(null,o+b++)}for(let m=0;m<p;m++)y(l+m,c+m);return{rows:N,approximate:g,truncated:v>N.length,totalRows:v,omittedRows:v-N.length,leftLineCount:i.length,rightLineCount:n.length,lcsCells:g?0:w}}var yr={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."},Xe={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},xr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},wr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},kr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function pe({comparison:t,labels:e={}}){let i=t?.left?.text??"",n=t?.right?.text??"",o=(0,W.useMemo)(()=>Dt(i,n),[i,n]),p=c=>e[c]??yr[c],l=(c,a,d)=>{let w=c&&d!=="equal";return W.default.createElement("td",{style:{...Xe,background:w?a==="left"?"#d6454520":"#259b4920":void 0}},W.default.createElement("div",{style:xr},W.default.createElement("span",{style:wr},c?.number??""),W.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},w?a==="left"?"\u2212":"+":""),W.default.createElement("pre",{style:kr},c?.text??"")))};return W.default.createElement("section",{className:"vcs-text-comparison","aria-label":p("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},o.approximate&&W.default.createElement("div",{role:"status",style:{padding:8}},p("approximate")),o.truncated&&W.default.createElement("div",{role:"status",style:{padding:8}},p("truncated")," (",2e3," / ",o.totalRows,")"),W.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},W.default.createElement("thead",null,W.default.createElement("tr",null,W.default.createElement("th",{scope:"col",style:{...Xe,padding:8,overflowWrap:"anywhere"}},t?.left?.label||p("before")),W.default.createElement("th",{scope:"col",style:{...Xe,padding:8,overflowWrap:"anywhere"}},t?.right?.label||p("after")))),W.default.createElement("tbody",null,o.rows.map((c,a)=>W.default.createElement("tr",{key:a,"data-kind":c.kind},l(c.left,"left",c.kind),l(c.right,"right",c.kind))))),!o.rows.length&&W.default.createElement("p",{style:{padding:8}},p("empty")))}function Se(t){return{before:t("textBefore"),after:t("textAfter"),readonly:t("textReadonly"),empty:t("textEmpty"),approximate:t("approximate"),truncated:t("textTruncated")}}var L=q(require("react"),1);var P=q(require("react"),1);var B=q(require("react"),1);function Cr({sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:p}){let[l,c]=(0,B.useState)(null),[a,d]=(0,B.useState)(""),[w,g]=(0,B.useState)(0),[N,v]=(0,B.useState)(""),[y,m]=(0,B.useState)(0);if((0,B.useEffect)(()=>{let h=new AbortController;return c(null),d(""),n("vcs/tree",{sessionId:t,repositoryId:e,commit:i},h.signal).then(u=>{h.signal.aborted||c(u)}).catch(u=>{h.signal.aborted||(d(u.message),u.code==="vcs/rediscover-required"&&p())}),()=>h.abort()},[t,e,i,w]),a)return B.default.createElement("p",{role:"alert"},a," ",B.default.createElement("button",{onClick:()=>g(h=>h+1)},o("retry")));if(!l)return B.default.createElement("p",{role:"status"},o("loading"));let k=N?N+"/":"",f=l.entries.filter(h=>h.path.startsWith(k)&&!h.path.slice(k.length).includes("/")),b=h=>{v(h),m(0)};return B.default.createElement("section",{"aria-label":o("historicalTree")},B.default.createElement("p",null,o("historicalTreeScope")),B.default.createElement("code",null,i),B.default.createElement("p",null,N||"/"," ",N&&B.default.createElement("button",{onClick:()=>b(N.includes("/")?N.slice(0,N.lastIndexOf("/")):"")},o("treeUp"))),B.default.createElement("p",null,f.length," ",o("treeEntries")),B.default.createElement("ul",null,f.slice(y*100,y*100+100).map(h=>B.default.createElement("li",{key:h.path},h.type==="tree"?B.default.createElement("button",{onClick:()=>b(h.path)},h.path.slice(k.length),"/"):B.default.createElement("span",null,h.path.slice(k.length))," \xB7 ",B.default.createElement("code",null,h.mode," ",h.type," ",B.default.createElement("span",{title:h.oid},h.oid.slice(0,10)))))),y>0&&B.default.createElement("button",{onClick:()=>m(h=>h-1)},o("treePrevious")),(y+1)*100<f.length&&B.default.createElement("button",{onClick:()=>m(h=>h+1)},o("treeNext")))}function Qe(t){let[e,i]=(0,B.useState)(!1);return B.default.createElement("div",null,B.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("historicalTree")),e&&B.default.createElement(Cr,{...t}))}var z=q(require("react"),1);var M=q(require("react"),1);function Ft({load:t,node:e,comparison:i,key:n,onReady:o=()=>{},onError:p=()=>{}}){let l=new AbortController,c,a=!1,d=()=>{let g=c;c=void 0,g?.dispose()};return{done:Promise.resolve().then(()=>(l.signal.throwIfAborted(),t(l.signal))).then(g=>{a||(c=g.createDiff(e),c.setContent(i,n),a||o(c))}).catch(g=>{try{d()}finally{a||p(g)}}),dispose(){a||(a=!0,l.abort(),d())}}}async function Ne(t,{signal:e,fetcher:i=fetch,importer:n=o=>import(o)}={}){let o=await i(t,{credentials:"same-origin",cache:"no-cache",signal:e});if(!o.ok)throw new Error("Editor resource HTTP "+o.status+" ("+t+"). "+(o.status===401?"Refresh the authenticated DSH page.":o.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let p=o.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(p))throw new Error("Editor resource returned "+(p||"no Content-Type")+" instead of JavaScript.");return await o.arrayBuffer(),e?.throwIfAborted(),n(t)}var Ee="0.3.36";function Ye({comparison:t,identity:e,t:i}){let n=(0,M.useRef)(null),o=(0,M.useRef)(null),[p,l]=(0,M.useState)(!0),[c,a]=(0,M.useState)(!1),[d,w]=(0,M.useState)(!1),[g,N]=(0,M.useState)(!1),[v,y]=(0,M.useState)(!1),[m,k]=(0,M.useState)("");return(0,M.useEffect)(()=>{if(y(!1),k(""),!g)return;let f=u=>new URL("vcs-assets/"+u,document.baseURI).href,b=document.createElement("link");b.rel="stylesheet",b.href=f("editor.css"),n.current.parentNode.appendChild(b);let h=Ft({node:n.current,comparison:t,key:e,load:u=>Ne(f("editor.js")+"?v="+encodeURIComponent(Ee)+"&retry=0",{signal:u}),onReady:u=>{o.current=u,y(!0)},onError:u=>k(u.message)});return()=>{o.current=null;try{h.dispose()}finally{b.remove()}}},[g,t,e]),(0,M.useEffect)(()=>{v&&o.current?.options({sideBySide:p,ignoreWhitespace:c,wrap:d})},[v,p,c,d]),M.default.createElement("div",null,M.default.createElement("button",{"aria-pressed":g,onClick:()=>N(f=>!f)},i(g?"historyBasic":"historyAdvanced")),v&&M.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8}},M.default.createElement("button",{"aria-pressed":p,onClick:()=>l(f=>!f)},i(p?"side":"inline")),M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:c,onChange:f=>a(f.target.checked)}),i("whitespace")),M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:d,onChange:f=>w(f.target.checked)}),i("wrap")),M.default.createElement("button",{onClick:()=>o.current?.navigate("previous")},i("previous")),M.default.createElement("button",{onClick:()=>o.current?.navigate("next")},i("next"))),g&&!v&&!m&&M.default.createElement("p",{role:"status"},i("loading")),m&&M.default.createElement("p",{role:"status"},i("fallback")," ",m),M.default.createElement("div",{style:{position:"relative",height:360}},M.default.createElement("div",{ref:n,style:{position:"absolute",inset:0,visibility:v?"visible":"hidden"},"aria-hidden":!v}),!v&&M.default.createElement(pe,{comparison:t,labels:Se(i)})))}var D=q(require("react"),1);function Nr({sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,rpc:p,t:l,onRediscover:c,onSelectCommit:a}){let[d,w]=(0,D.useState)({commits:[],nextOffset:null}),[g,N]=(0,D.useState)(0),[v,y]=(0,D.useState)(0),[m,k]=(0,D.useState)(!0),[f,b]=(0,D.useState)("");return(0,D.useEffect)(()=>{let h=new AbortController;return k(!0),b(""),p("vcs/file-history",{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,offset:g,limit:50},h.signal).then(u=>{h.signal.aborted||w(H=>({...u,commits:g?[...H.commits,...u.commits]:u.commits}))}).catch(u=>{h.signal.aborted||(b(u.message),u.code==="vcs/rediscover-required"&&c())}).finally(()=>{h.signal.aborted||k(!1)}),()=>h.abort()},[t,e,i,n,o,g,v]),D.default.createElement("section",{"aria-label":l("fileHistory"),"aria-busy":m},D.default.createElement("p",null,l("fileHistoryScope")),D.default.createElement("p",{style:{overflowWrap:"anywhere"}},d.path," \xB7 ",D.default.createElement("code",null,i)),D.default.createElement("ol",null,d.commits.map(h=>D.default.createElement("li",{key:h.id},D.default.createElement("code",{title:h.id},h.id.slice(0,10))," \xB7 ",a?D.default.createElement("button",{onClick:()=>a(h.id)},h.subject):h.subject,D.default.createElement("div",null,h.author," \xB7 ",D.default.createElement("time",{dateTime:h.date},h.date))))),m&&D.default.createElement("p",{role:"status"},l("loading")),f&&D.default.createElement("p",{role:"alert"},f," ",D.default.createElement("button",{onClick:()=>y(h=>h+1)},l("retry"))),!m&&!f&&!d.commits.length&&D.default.createElement("p",null,l("historyEmpty")),d.truncated&&D.default.createElement("p",{role:"status"},l("historyLimit")),!f&&d.nextOffset!==null&&D.default.createElement("button",{disabled:m,onClick:()=>N(d.nextOffset)},l("historyMore")))}function $e(t){return D.default.createElement(Er,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit,t.parentIndex,t.id]),...t})}function Er(t){let[e,i]=(0,D.useState)(!1);return D.default.createElement("div",null,D.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("fileHistory")),e&&D.default.createElement(Nr,{...t}))}var F=q(require("react"),1);function Tt(t,{width:e,height:i,signal:n,timeoutMs:o=1e4,createURL:p=a=>URL.createObjectURL(a),revokeURL:l=a=>URL.revokeObjectURL(a),createImage:c=()=>new Image}={}){return new Promise((a,d)=>{if(n?.aborted){d(n.reason);return}if(t?.type!=="image/png"||t.size>2*1024*1024||!Number.isInteger(e)||!Number.isInteger(i)||e<1||i<1||e>8192||i>8192||e*i>16e6||!Number.isFinite(o)||o<=0){d(new Error("Invalid image preview"));return}let w,g,N,v=!1,y=!1,m=()=>{y||(y=!0,g&&(g.src=""),w&&l(w))},k=()=>{clearTimeout(N),n?.removeEventListener("abort",b)},f=h=>{v||(v=!0,k(),m(),d(h))},b=()=>f(n.reason||new Error("Image cancelled"));try{w=p(t),g=c(),n?.addEventListener("abort",b,{once:!0}),N=setTimeout(()=>f(new Error("Image decode timed out")),o),g.src=w,Promise.resolve(g.decode()).then(()=>{if(!v){if(n?.aborted){b();return}if(g.naturalWidth!==e||g.naturalHeight!==i){f(new Error("Image dimensions mismatch"));return}v=!0,k(),a({url:w,dispose:m})}},f)}catch(h){f(h)}})}function Ar({side:t,sessionId:e,repositoryId:i,commit:n,parentIndex:o,id:p,rpc:l,t:c,onRediscover:a}){let[d,w]=(0,F.useState)(null),[g,N]=(0,F.useState)(""),[v,y]=(0,F.useState)(0);return(0,F.useEffect)(()=>{let m=new AbortController,k;return w(null),N(""),(async()=>{let f=await l("vcs/commit-image",{sessionId:e,repositoryId:i,commit:n,parentIndex:o,id:p,side:t},m.signal);if(m.signal.aborted)return;if(f.absent){w(f);return}if(f.mime!=="image/png"||typeof f.base64!="string"||f.base64.length>2796204||!Number.isInteger(f.bytes)||f.bytes<1||f.bytes>2097152)throw Error(c("imageInvalid"));let b=atob(f.base64);if(b.length!==f.bytes)throw Error(c("imageInvalid"));let h=new Blob([Uint8Array.from(b,u=>u.charCodeAt(0))],{type:f.mime});if(k=await Tt(h,{width:f.width,height:f.height,signal:m.signal}),m.signal.aborted){k.dispose();return}w({...f,url:k.url})})().catch(f=>{m.signal.aborted||(N(f.message),f.code==="vcs/rediscover-required"&&a())}),()=>{m.abort(),k?.dispose()}},[t,e,i,n,o,p,v]),F.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":c(t==="left"?"imageBefore":"imageAfter")},F.default.createElement("h5",null,c(t==="left"?"imageBefore":"imageAfter")),g?F.default.createElement("p",{role:"alert"},g," ",F.default.createElement("button",{onClick:()=>y(m=>m+1)},c("retry"))):d?F.default.createElement(F.default.Fragment,null,F.default.createElement("p",null,F.default.createElement("code",null,d.commit)," \xB7 ",d.path),d.absent?F.default.createElement("p",null,c("imageAbsent")):F.default.createElement(F.default.Fragment,null,F.default.createElement("p",null,d.width," \xD7 ",d.height," \xB7 ",d.bytes," B"),F.default.createElement("img",{src:d.url,alt:d.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),d.metadataStripped&&F.default.createElement("p",null,c("imageMetadata")))):F.default.createElement("p",{role:"status"},c("loading")))}function Ze(t){let[e,i]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("imageCompare")),e&&F.default.createElement(F.default.Fragment,null,F.default.createElement("p",null,t.t("imageScope")),F.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(n=>F.default.createElement(Ar,{key:n,...t,side:n})))))}var A=q(require("react"),1);function Pr({sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o,rpc:p,t:l,onRediscover:c}){let[a,d]=(0,A.useState)(null),[w,g]=(0,A.useState)(""),[N,v]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let y=new AbortController;return d(null),g(""),p("vcs/blame",{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:o},y.signal).then(m=>{y.signal.aborted||d(m)}).catch(m=>{y.signal.aborted||(g(m.message),m.code==="vcs/rediscover-required"&&c())}),()=>y.abort()},[t,e,i,n,o,N]),w?A.default.createElement("p",{role:"alert"},w," ",A.default.createElement("button",{onClick:()=>v(y=>y+1)},l("retry"))):a?A.default.createElement("section",{"aria-label":l("blame")},A.default.createElement("p",null,l("blameScope")),a.notice&&A.default.createElement("p",{role:"status"},a.notice),a.truncated&&A.default.createElement("p",{role:"status"},l("blameLimit")),!a.notice&&!a.lines.length&&A.default.createElement("p",null,l("blameEmpty")),!!a.lines.length&&A.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},A.default.createElement("table",null,A.default.createElement("thead",null,A.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(y=>A.default.createElement("th",{key:y,scope:"col"},l(y))))),A.default.createElement("tbody",null,a.lines.map(y=>A.default.createElement("tr",{key:y.line},A.default.createElement("th",{scope:"row"},y.line),A.default.createElement("td",null,A.default.createElement("code",{title:y.commit},y.commit.slice(0,10))),A.default.createElement("td",null,y.author),A.default.createElement("td",null,y.summary),A.default.createElement("td",null,A.default.createElement("pre",{style:{margin:0}},y.text)))))))):A.default.createElement("p",{role:"status"},l("loading"))}function Re(t){let[e,i]=(0,A.useState)(!1);return A.default.createElement("div",null,A.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("blame")),e&&A.default.createElement(Pr,{...t}))}function ue({sessionId:t,repositoryId:e,commit:i,parentIndex:n,base:o,target:p,id:l,rpc:c,t:a,onRediscover:d,onSelectCommit:w}){let[g,N]=(0,z.useState)(null),[v,y]=(0,z.useState)(""),[m,k]=(0,z.useState)(0);return(0,z.useEffect)(()=>{let f=new AbortController;return N(null),y(""),c(o?"vcs/revision-compare":"vcs/commit-compare",o?{sessionId:t,repositoryId:e,base:o,target:p,id:l}:{sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l},f.signal).then(b=>{f.signal.aborted||N(b)}).catch(b=>{f.signal.aborted||(y(b.message),b.code==="vcs/rediscover-required"&&d())}),()=>f.abort()},[t,e,i,n,o,p,l,m]),v?z.default.createElement("p",{role:"alert"},v," ",z.default.createElement("button",{onClick:()=>k(f=>f+1)},a("retry"))):g?z.default.createElement("section",null,z.default.createElement("h4",null,g.path),z.default.createElement("p",null,g.left.label," \u2194 ",g.right.label),g.notice&&z.default.createElement("p",{role:"status"},g.notice),g.binary?z.default.createElement("p",null,a("binary")):z.default.createElement(Ye,{comparison:g,identity:JSON.stringify(o?[t,e,o,p,l]:[t,e,i,n,l]),t:a}),i&&!o&&z.default.createElement($e,{onSelectCommit:w,key:JSON.stringify([t,e,i,n,l]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l,rpc:c,t:a,onRediscover:d}),i&&!o&&z.default.createElement(Re,{key:JSON.stringify([t,e,i,n,l]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l,rpc:c,t:a,onRediscover:d}),i&&!o&&z.default.createElement(Ze,{key:JSON.stringify([t,e,i,n,l]),sessionId:t,repositoryId:e,commit:i,parentIndex:n,id:l,rpc:c,t:a,onRediscover:d})):z.default.createElement("p",{role:"status"},a("loading"))}function Mt(t,e=""){let i=e.trim().toLowerCase();return i?t.filter(n=>[n.id,n.author,n.subject].some(o=>o?.toLowerCase().includes(i))):t}function Ae(t,e=""){let i=e.trim().toLowerCase();return i?t.filter(n=>[n.path,n.oldPath].some(o=>o?.toLowerCase().includes(i))):t}function et({sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:p,onSelectCommit:l}){let[c,a]=(0,P.useState)(null),[d,w]=(0,P.useState)(""),[g,N]=(0,P.useState)(0),[v,y]=(0,P.useState)(null),[m,k]=(0,P.useState)(""),[f,b]=(0,P.useState)(0);if((0,P.useEffect)(()=>{let u=new AbortController;return y(null),k(""),n("vcs/commit",{sessionId:t,repositoryId:e,commit:i,parentIndex:g},u.signal).then(H=>{u.signal.aborted||y(H)}).catch(H=>{u.signal.aborted||(k(H.message),H.code==="vcs/rediscover-required"&&p())}),()=>u.abort()},[t,e,i,g,f]),m)return P.default.createElement("p",{role:"alert"},m," ",P.default.createElement("button",{onClick:()=>b(u=>u+1)},o("retry")));if(!v)return P.default.createElement("p",{role:"status"},o("loading"));let h=Ae(v.changes,d);return P.default.createElement("section",{"aria-label":o("commitDetails")},P.default.createElement("h3",null,v.subject),P.default.createElement("code",null,v.id),P.default.createElement("p",null,v.author," \xB7 ",v.date),v.messageTruncated&&P.default.createElement("p",{role:"status"},o("commitMessageLimit")),v.message&&P.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},v.message),v.parents.length>1&&P.default.createElement("label",null,o("commitParent")," ",P.default.createElement("select",{"aria-label":o("commitParent"),value:g,onChange:u=>{a(null),y(null),N(Number(u.target.value))}},v.parents.map((u,H)=>P.default.createElement("option",{key:u,value:H},H+1,": ",u.slice(0,10))))),P.default.createElement("p",null,v.parent||o("commitRoot")," \u2192 ",v.id.slice(0,10)),P.default.createElement("label",null,o("commitFileSearch")," ",P.default.createElement("input",{"aria-label":o("commitFileSearch"),value:d,onChange:u=>{w(u.target.value),a(null)}})),P.default.createElement("span",null," ",h.length," / ",v.changes.length),P.default.createElement("ul",null,h.map(u=>P.default.createElement("li",{key:u.id},P.default.createElement("button",{"aria-pressed":c===u.id,onClick:()=>a(u.id)},u.status," \xB7 ",u.oldPath?u.oldPath+" \u2192 ":"",u.path)))),!!v.changes.length&&!h.length&&P.default.createElement("p",{role:"status"},o("emptySearch")),!v.changes.length&&P.default.createElement("p",null,o("commitNoChanges")),c&&P.default.createElement(ue,{key:c,sessionId:t,repositoryId:e,commit:i,parentIndex:g,id:c,onSelectCommit:l,rpc:n,t:o,onRediscover:p}),P.default.createElement(Qe,{key:JSON.stringify([t,e,i]),sessionId:t,repositoryId:e,commit:i,rpc:n,t:o,onRediscover:p}))}var O=q(require("react"),1);function Ht(t){if(!Array.isArray(t))throw new Error("Invalid graph commits");let e=t.slice(0,200),i=new Map,n=[],o=[],p=c=>typeof c=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(c);for(let[c,a]of e.entries()){if(!a||!p(a.id)||!Array.isArray(a.parents)||i.has(a.id))throw new Error("Invalid graph node");i.set(a.id,c),n.push({id:a.id,row:c})}let l=!1;for(let c of e){let a=new Set;for(let d of c.parents){if(o.length===1e3){l=!0;break}if(!p(d)||d.length!==c.id.length||d===c.id||a.has(d))throw new Error("Invalid graph parent");a.add(d);let w=i.get(d);if(w!==void 0&&w<=i.get(c.id))throw new Error("Graph requires child-before-parent order");o.push({from:c.id,to:d,missing:w===void 0})}if(l)break}return{nodes:n,edges:o,nodesTruncated:t.length>200,edgesTruncated:l}}function Lr({commits:t,onSelect:e,t:i}){let n;try{n=Ht(t)}catch{return O.default.createElement("p",{role:"alert"},i("graphInvalid"))}let o=new Map(n.nodes.map(l=>[l.id,l.row])),p=Math.max(40,n.nodes.length*36);return O.default.createElement("section",{"aria-label":i("historyGraph")},O.default.createElement("p",null,i("graphScope")),(n.nodesTruncated||n.edgesTruncated)&&O.default.createElement("p",{role:"status"},i("graphLimit")),O.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},O.default.createElement("svg",{width:"100",height:p,"aria-hidden":"true",style:{flexShrink:0}},n.edges.filter(l=>!l.missing).map((l,c)=>{let a=o.get(l.from)*36+18,d=o.get(l.to)*36+18,w=35+c%5*12;return O.default.createElement("path",{key:l.from+l.to,d:"M 12 "+a+" C "+w+" "+a+", "+w+" "+d+", 12 "+d,fill:"none",stroke:"currentColor",opacity:"0.45"})}),n.nodes.map(l=>O.default.createElement("circle",{key:l.id,cx:"12",cy:l.row*36+18,r:"4",fill:"currentColor"}))),O.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},n.nodes.map(l=>O.default.createElement("li",{key:l.id,style:{height:36,whiteSpace:"nowrap"}},O.default.createElement("button",{title:l.id,onClick:()=>e(l.id)},O.default.createElement("code",null,l.id.slice(0,10))," ",t[l.row].subject))))),O.default.createElement("details",null,O.default.createElement("summary",null,i("graphRelations")),O.default.createElement("ul",null,n.edges.map(l=>O.default.createElement("li",{key:l.from+l.to},O.default.createElement("code",null,l.from)," \u2192 ",O.default.createElement("code",null,l.to),l.missing?" \xB7 "+i("graphMissing"):"")))))}function tt(t){let[e,i]=(0,O.useState)(!1);return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":e,onClick:()=>i(n=>!n)},t.t("historyGraph")),e&&O.default.createElement(Lr,{...t}))}var C=q(require("react"),1);function Br({sessionId:t,repositoryId:e,base:i,target:n,rpc:o,t:p,onRediscover:l}){let[c,a]=(0,C.useState)(null),[d,w]=(0,C.useState)(""),[g,N]=(0,C.useState)(0),[v,y]=(0,C.useState)(null),[m,k]=(0,C.useState)("");if((0,C.useEffect)(()=>{let b=new AbortController;return a(null),w(""),y(null),o("vcs/revision-changes",{sessionId:t,repositoryId:e,base:i,target:n},b.signal).then(h=>{b.signal.aborted||a(h)}).catch(h=>{b.signal.aborted||(w(h.message),h.code==="vcs/rediscover-required"&&l())}),()=>b.abort()},[t,e,i,n,g]),d)return C.default.createElement("p",{role:"alert"},d," ",C.default.createElement("button",{onClick:()=>N(b=>b+1)},p("retry")));if(!c)return C.default.createElement("p",{role:"status"},p("loading"));let f=Ae(c.changes,m);return C.default.createElement("div",null,C.default.createElement("label",null,p("commitFileSearch")," ",C.default.createElement("input",{"aria-label":p("commitFileSearch"),value:m,onChange:b=>{k(b.target.value),y(null)}})),C.default.createElement("span",null," ",f.length," / ",c.changes.length),!!c.changes.length&&!f.length&&C.default.createElement("p",{role:"status"},p("emptySearch")),!c.changes.length&&C.default.createElement("p",null,p("revisionEmpty")),C.default.createElement("ul",null,f.map(b=>C.default.createElement("li",{key:b.id},C.default.createElement("button",{"aria-pressed":v===b.id,onClick:()=>y(b.id)},b.status," \xB7 ",b.oldPath?b.oldPath+" \u2192 ":"",b.path)))),v&&C.default.createElement(ue,{key:v,sessionId:t,repositoryId:e,base:i,target:n,id:v,rpc:o,t:p,onRediscover:l}))}function rt(t){return C.default.createElement(Dr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Dr({commits:t,sessionId:e,repositoryId:i,rpc:n,t:o,onRediscover:p}){let[l,c]=(0,C.useState)(""),[a,d]=(0,C.useState)(""),[w,g]=(0,C.useState)([]),[N,v]=(0,C.useState)(!1),[y,m]=(0,C.useState)(0),[k,f]=(0,C.useState)(!1),[b,h]=(0,C.useState)("");return(0,C.useEffect)(()=>{if(!y)return;let u=new AbortController;return f(!0),h(""),n("vcs/references",{sessionId:e,repositoryId:i},u.signal).then(H=>{u.signal.aborted||(g(H.references),v(!0))}).catch(H=>{u.signal.aborted||(h(H.message),H.code==="vcs/rediscover-required"&&p())}).finally(()=>{u.signal.aborted||f(!1)}),()=>u.abort()},[e,i,y]),C.default.createElement("section",{"aria-label":o("revisionTitle")},C.default.createElement("h3",null,o("revisionTitle")),C.default.createElement("p",null,o("revisionScope")),C.default.createElement("button",{disabled:k,onClick:()=>m(u=>u+1)},o("revisionLoadRefs")),C.default.createElement("p",null,o("revisionRefsScope")),N&&!k&&!b&&C.default.createElement("p",{role:"status"},w.length?`${o("revisionRefsCount")}: ${w.length}`:o("revisionRefsEmpty")),k&&C.default.createElement("p",{role:"status"},o("loading")),b&&C.default.createElement("p",{role:"alert"},b),[[l,c,"revisionBase"],[a,d,"revisionTarget"]].map(([u,H,V])=>C.default.createElement("label",{key:V},o(V)," ",C.default.createElement("select",{"aria-label":o(V),value:u,onChange:j=>H(j.target.value)},C.default.createElement("option",{value:""},"\u2014"),t.map(j=>C.default.createElement("option",{key:j.id,value:j.id},j.id.slice(0,10)," \xB7 ",j.subject)),w.map(j=>C.default.createElement("option",{key:j.name,value:j.commit},j.name," \xB7 ",j.commit.slice(0,10))),u&&!t.some(j=>j.id===u)&&!w.some(j=>j.commit===u)&&C.default.createElement("option",{value:u},u)))),C.default.createElement("button",{disabled:!l||!a,onClick:()=>{c(a),d(l)}},o("revisionSwap")),C.default.createElement("p",{style:{overflowWrap:"anywhere"}},C.default.createElement("code",null,l||"\u2014")," \u2192 ",C.default.createElement("code",null,a||"\u2014")),l&&a&&C.default.createElement(Br,{key:JSON.stringify([e,i,l,a]),sessionId:e,repositoryId:i,base:l,target:a,rpc:n,t:o,onRediscover:p}))}function ot(t){return L.default.createElement(Fr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Fr({sessionId:t,repositoryId:e,rpc:i,t:n,onRediscover:o}){let[p,l]=(0,L.useState)(null),[c,a]=(0,L.useState)(""),[d,w]=(0,L.useState)({commits:[],snapshot:null,nextOffset:null}),[g,N]=(0,L.useState)(0),[v,y]=(0,L.useState)(0),[m,k]=(0,L.useState)(!0),[f,b]=(0,L.useState)("");(0,L.useEffect)(()=>{let u=new AbortController;return k(!0),b(""),i("vcs/history",{sessionId:t,repositoryId:e,offset:g,limit:50,...g?{snapshot:d.snapshot}:{}},u.signal).then(H=>{u.signal.aborted||w(V=>({...H,commits:g?[...V.commits,...H.commits]:H.commits}))}).catch(H=>{u.signal.aborted||(b(H.message),H.code==="vcs/rediscover-required"&&o())}).finally(()=>{u.signal.aborted||k(!1)}),()=>u.abort()},[t,e,g,v]);let h=Mt(d.commits,c);return L.default.createElement("section",{className:"vcs-history","aria-label":n("history"),"aria-busy":m},L.default.createElement("p",null,n("historyListOnly")),L.default.createElement("label",null,n("historySearch")," ",L.default.createElement("input",{"aria-label":n("historySearch"),value:c,onChange:u=>{a(u.target.value),l(null)}})),L.default.createElement("span",null," ",h.length," / ",d.commits.length),!!d.commits.length&&!h.length&&L.default.createElement("p",{role:"status"},n("historyNoMatch")),L.default.createElement("ol",null,h.map(u=>L.default.createElement("li",{key:u.id},L.default.createElement("button",{"aria-pressed":p===u.id,onClick:()=>l(u.id)},u.subject),L.default.createElement("div",null,L.default.createElement("code",{title:u.id},u.id.slice(0,10))," \xB7 ",u.author," \xB7 ",L.default.createElement("time",{dateTime:u.date},u.date))))),m&&L.default.createElement("p",{role:"status"},n("loading")),f&&L.default.createElement("p",{role:"alert"},f," ",L.default.createElement("button",{onClick:()=>y(u=>u+1)},n("retry"))),!m&&!f&&!d.commits.length&&L.default.createElement("p",null,n("historyEmpty")),d.truncated&&L.default.createElement("p",{role:"status"},n("historyLimit")),!f&&d.nextOffset!==null&&L.default.createElement("button",{disabled:m,onClick:()=>N(d.nextOffset)},n("historyMore")),!!d.commits.length&&L.default.createElement(tt,{commits:d.commits,onSelect:l,t:n}),L.default.createElement(rt,{commits:d.commits,sessionId:t,repositoryId:e,rpc:i,t:n,onRediscover:o}),p&&L.default.createElement(et,{key:p,sessionId:t,repositoryId:e,commit:p,onSelectCommit:l,rpc:i,t:n,onRediscover:o}))}var Ot={zh:{workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u7684\u8BB0\u5F55\u4E5F\u4F1A\u5305\u542B\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u4E0D\u6253\u5F00\u6587\u4EF6\u3001\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",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",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryScope:"Exact-path history at the pinned commit. Does not follow renames; includes deletion and recreation at the same path.",blame:"Blame",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Files are not opened; symlinks and submodules are not followed.",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.",revisionRefsCount:"Selectable references loaded"}};function jt(t,e,i,n){let o=t.target;if(!e?.contains(o)||t.defaultPrevented||t.isComposing||o?.closest?.(".monaco-editor")||o?.closest?.(".vcs-history"))return null;if(t.key==="Escape"&&o===i&&n)return"clear";let p=o?.isContentEditable||o?.closest?.('input,textarea,select,[role="textbox"]');if(p&&o!==i)return null;if((t.ctrlKey||t.metaKey)&&!t.altKey&&!t.shiftKey&&t.key?.toLowerCase()==="f")return"search";if(!p&&t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.shiftKey){if(t.key==="ArrowLeft")return"previous";if(t.key==="ArrowRight")return"next"}return null}var It=t=>"dsh-vcs:project:v1:"+t;function Ut(t,e){if(!t)return"";try{let i=(e??globalThis.localStorage)?.getItem(It(t));return typeof i=="string"&&i.length<=1024?i:""}catch{return""}}function Wt(t,e,i){if(!(!t||!e))try{(i??globalThis.localStorage)?.setItem(It(t),e)}catch{}}function qt(t,e=""){return t.find(i=>i.id===e)?.id||t.find(i=>i.relativePath===".")?.id||t[0]?.id||""}var fe=(t,e)=>JSON.stringify([t,e]),me=(t,e=".")=>[t.type.toUpperCase(),t.relativePath==="."?e:t.relativePath||".",t.branch].filter(Boolean).join(" \xB7 "),Pe=(t,e="all")=>t.type==="git"&&["staged","unstaged"].includes(e)?e:"all",zt=(t="",e="")=>t===e?0:t<e?-1:1;function st(t=[]){let e={id:"",name:"",directories:new Map,files:[],count:0};for(let n of t){let o=String(n.path||"").split("/").filter(Boolean);if(!o.length)continue;let p=e;for(let l of o.slice(0,-1)){let c=p.id?p.id+"/"+l:l;p.directories.has(l)||p.directories.set(l,{id:c,name:l,directories:new Map,files:[],count:0}),p=p.directories.get(l),p.count++}p.files.push(n)}let i=n=>({...n,directories:[...n.directories.values()].sort((o,p)=>zt(o.name,p.name)).map(i),files:[...n.files].sort((o,p)=>zt(o.path,p.path))});return i(e)}function Gt(t=[],e){let i=t.findIndex(n=>n.id===e);return{index:i<0?0:i+1,total:t.length}}function Jt(t=[],e,i){if(!t.length||!["previous","next"].includes(i))return null;let n=t.findIndex(l=>l.id===e),o=i==="next"?1:-1,p=n<0?i==="next"?-1:0:n;return t[(p+o+t.length)%t.length]||null}function _t(t=""){let e=String(t).split("/").filter(Boolean);return e.slice(0,-1).map((i,n)=>e.slice(0,n+1).join("/"))}function it(t,e=[]){for(let i of t?.directories||[])e.push(i.id),it(i,e);return e}function Kt(t=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[t]||t}function Vt(t=[]){return t.reduce((e,i)=>{let n=Kt(i.status);return e.all++,e[n]=(e[n]||0)+1,e},{all:0})}function Mr(t=[],e="",i="all"){let n=e.toLowerCase();return t.filter(o=>(i==="all"||Kt(o.status)===i)&&o.path.toLowerCase().includes(n)).sort((o,p)=>o.path.localeCompare(p.path))}function Xt(t,e,i="",n="all"){return t.map(o=>({...e[o.id],repository:o,changes:Mr(e[o.id]?.changes,i,n)}))}function Qt(t,e,i=""){if(!i||!t||t.cwd!==e.cwd)return e;let n=new Map(t.repositories.map(o=>[o.id,o]));for(let o of e.repositories)n.set(o.id,o);return{...e,repositories:[...n.values()],truncated:t.truncated||e.truncated,warnings:[...t.warnings||[],...e.warnings||[]]}}function Yt(t=2){if(!Number.isInteger(t)||t<1||t>2)throw new RangeError("Status concurrency must be 1 or 2");let e=0,i=[];function n(){for(;e<t&&i.length;){let o=i.shift();if(o.signal?.removeEventListener("abort",o.abort),o.signal?.aborted){o.reject(new Error("Aborted"));continue}e++,Promise.resolve().then(()=>{if(o.signal?.aborted)throw new Error("Aborted");return o.run()}).then(o.resolve,o.reject).finally(()=>{e--,n()})}}return(o,p)=>new Promise((l,c)=>{let a={run:o,signal:p,resolve:l,reject:c,abort:null};if(a.abort=()=>{let d=i.indexOf(a);d>=0&&(i.splice(d,1),c(new Error("Aborted")))},p?.aborted){c(new Error("Aborted"));return}p?.addEventListener("abort",a.abort,{once:!0}),i.push(a),n()})}var $t={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Zt=t=>new URL("vcs-assets/"+t,document.baseURI).href;function Rt(){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 Hr=["slots","layout","locale","connection","uiSession"];function Or(t){t.effect(()=>t.locale.register("local.vcs",Ot));let e=t.locale.bind("local.vcs"),i=Yt(2);async function n(c,a,d){let w=await t.connection.rpc.call("/vcs-rpc",c,a,d);if(!w.ok){let g=new Error(w.error?.message||String(w.error||e("error")));throw g.code=w.error?.code,g}return w.value}function o(c){let a=c.useSessions(d=>Object.values(d.byId).find(w=>(w.retainedBy.mainView??0)>0));return r.default.createElement(p,{key:JSON.stringify([a?.id,a?.cwd])},r.default.createElement(l,{session:a}))}class p 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,Ve),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 l({session:c}){(0,r.useSyncExternalStore)(s=>t.locale.subscribe(s),()=>t.locale.getSnapshot(),()=>t.locale.getSnapshot());let a=c?.id,[d,w]=(0,r.useState)("all"),[g,N]=(0,r.useState)(0),[v,y]=(0,r.useState)(null),[m,k]=(0,r.useState)({}),[f,b]=(0,r.useState)(()=>Ut(c?.cwd)),[h,u]=(0,r.useState)(0),[H,V]=(0,r.useState)(""),[j,nt]=(0,r.useState)(""),[I,Le]=(0,r.useState)(null),[S,re]=(0,r.useState)(null),[he,at]=(0,r.useState)(!1),[er,lt]=(0,r.useState)(!1),[$,dt]=(0,r.useState)(""),[Be,oe]=(0,r.useState)(""),[J,ct]=(0,r.useState)(""),[pt,ut]=(0,r.useState)(!1),[X,De]=(0,r.useState)(""),[ve,ft]=(0,r.useState)("all"),[Z,mt]=(0,r.useState)(!0),[ht,Fe]=(0,r.useState)({}),[se,tr]=(0,r.useState)(!0),[Te,rr]=(0,r.useState)(!1),[Me,or]=(0,r.useState)(!1),[ge,ie]=(0,r.useState)("content"),[vt,gt]=(0,r.useState)(0),[bt,sr]=(0,r.useState)(!1),[He,Oe]=(0,r.useState)({added:0,deleted:0,count:0}),[G,yt]=(0,r.useState)(!1),xt=(0,r.useRef)(null),je=(0,r.useRef)(null),R=(0,r.useRef)(null),Ie=(0,r.useRef)(null),be=(0,r.useRef)(null),Ue=(0,r.useRef)(null),wt=(0,r.useRef)(null),ye=(0,r.useRef)(null),We=(0,r.useRef)(null),ze=(0,r.useRef)(null),qe=(0,r.useRef)(!1),xe=(0,r.useRef)(!1),Q=v?.repositories||[],ne=Q.filter(s=>s.id===f);(0,r.useEffect)(()=>{Q.some(s=>s.id===f)&&Wt(c?.cwd,f)},[c?.cwd,f,v]);let ae=()=>{wt.current?.abort(),ye.current?.abort(),re(null),Le(null),oe(""),ie("content"),Oe({added:0,deleted:0,count:0})},we=()=>{xe.current=!1,ae(),We.current?.abort(),ze.current=v,y(null),k({}),nt(H.trim()),u(s=>s+1)},Ge=()=>{xe.current||(xe.current=!0,ae(),We.current?.abort(),ze.current=null,y(null),k({}),nt(""),u(s=>s+1))},kt=(s=!1)=>{qe.current=s,s||ae(),s||k({}),N(x=>x+1)};(0,r.useEffect)(()=>{let s=new AbortController;return We.current=s,dt(""),at(!!a),a&&n("vcs/repositories",{sessionId:a,...j?{subdirectory:j}:{}},s.signal).then(x=>{if(!s.signal.aborted){let E=Qt(ze.current,x,j);xe.current=!1,b(T=>qt(E.repositories,T)),y(E)}}).catch(x=>{s.signal.aborted||dt(x.message)}).finally(()=>{s.signal.aborted||at(!1)}),()=>s.abort()},[a,h,j]),(0,r.useEffect)(()=>{let s=new AbortController,x=qe.current;wt.current=s,qe.current=!1,x||(k({}),oe(""));for(let E of ne){let T=Pe(E,d);i(()=>n("vcs/status",{sessionId:a,repositoryId:E.id,mode:T},s.signal),s.signal).then(U=>{s.signal.aborted||k(_=>({..._,[E.id]:{...U,mode:T}}))}).catch(U=>{if(!s.signal.aborted){if(U.code==="vcs/rediscover-required"){Ge();return}k(_=>({..._,[E.id]:{error:U.message,changes:[],mode:T}}))}})}return()=>s.abort()},[a,v,f,d,g]),(0,r.useEffect)(()=>{let s=()=>{a&&f&&document.visibilityState==="visible"&&kt(!0)};return window.addEventListener("focus",s),()=>window.removeEventListener("focus",s)},[a,f,d]);let ke=Q.find(s=>s.id===I?.repositoryId),le=I?m[I.repositoryId]:null;(0,r.useEffect)(()=>{let s=new AbortController;return ye.current=s,re(null),oe(""),Oe({added:0,deleted:0,count:0}),ie("content"),lt(!!I&&!!le),I&&le&&ke&&n("vcs/compare",{sessionId:a,repositoryId:I.repositoryId,mode:Pe(ke,d),id:I.id},s.signal).then(x=>{s.signal.aborted||re(x)}).catch(x=>{if(!s.signal.aborted){if(x.code==="vcs/rediscover-required"){Ge();return}oe(x.message)}}).finally(()=>{s.signal.aborted||lt(!1)}),()=>s.abort()},[I,le,a,d]),(0,r.useEffect)(()=>{let s=!1,x,E=new AbortController;yt(!1),ct("");let T=document.createElement("link");return T.rel="stylesheet",T.href=Zt("editor.css"),je.current.parentNode.appendChild(T),Ne(Zt("editor.js")+"?v="+encodeURIComponent(Ee)+"&retry="+vt,{signal:E.signal}).then(U=>{s||(x=U.createDiff(je.current,{onStats:Oe}),R.current=x,yt(!0))}).catch(U=>{s||ct(U.message)}),()=>{s=!0,E.abort(),x?.dispose(),R.current=null,T.remove()}},[vt]),(0,r.useEffect)(()=>{G&&S&&!S.binary&&R.current?.setContent(S,JSON.stringify([a,v?.cwd,I?.repositoryId,d,I?.id,S.path]))},[G,S,a,v,I,d]),(0,r.useEffect)(()=>{R.current?.options({sideBySide:se,ignoreWhitespace:Te,wrap:Me})},[G,se,Te,Me]);let de=Xt(ne,m,X,ve),ee=de.flatMap(s=>s.changes),ir=Vt(le?.changes),Je=Gt(ee,I?.id),Ct=()=>{De(""),ft("all")},nr=async()=>{let s=S?.path||K?.path;if(s)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(s);else{let x=document.createElement("textarea");try{if(x.value=s,x.style.cssText="position:fixed;opacity:0",document.body.appendChild(x),x.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{x.remove()}}ut(!0),window.setTimeout(()=>ut(!1),1500)}catch{oe(e("copyFailed"))}};(0,r.useEffect)(()=>{let s=x=>{let E=jt(x,xt.current,be.current,!!X);E&&(x.preventDefault(),E==="search"?(be.current?.focus(),be.current?.select()):E==="clear"?De(""):_e(E))};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[X,ee,I]);let St=s=>Fe(x=>{let E={...x};for(let T of de)for(let U of it(st(T.changes)))E[T.repository.id+"\0"+U]=!s;return E}),ar=()=>{let s=K;!s||!I||(mt(!0),Ct(),Fe(x=>{let E={...x};for(let T of _t(s.path))E[I.repositoryId+"\0"+T]=!1;return E}),Ue.current=fe(I.repositoryId,s.id))};(0,r.useEffect)(()=>{let s=Ue.current;if(!s)return;let x=[...Ie.current?.querySelectorAll("button[data-vcs-change]")||[]].find(E=>E.dataset.vcsChange===s);x&&(x.scrollIntoView({block:"nearest"}),x.focus(),Ue.current=null)},[Z,X,ve,ht,de]);let _e=s=>{let x=Jt(ee,I?.id,s);x&&(ye.current?.abort(),re(null),ie("content"),Le({repositoryId:f,id:x.id}))},Nt=he||ne.some(s=>!m[s.id]),K=le?.changes?.find(s=>s.id===I?.id),Y=S?.properties,Ke=Y?[...new Set([...Object.keys(Y.left||{}),...Object.keys(Y.right||{})])].filter(s=>Y.left?.[s]!==Y.right?.[s]):[],ce=s=>$t[s?.status]||s?.status?.slice(0,1).toUpperCase()||"M",Et=S?.binary?[S.left.label,S.right.label].filter(Boolean).join(" \u2194 "):"",te=Be||(er?e("loading"):a?Nt&&!K?e("loading"):$||(Q.length?K?S?.binary?e("binary")+(Et?" "+e("binaryComparison",{files:Et}):""):S?!G&&!J?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession")),lr=s=>{let x=Ie.current,E=x?[...x.querySelectorAll("button[data-vcs-item]")]:[],T=E.indexOf(s.target);if(T<0)return;let U;if(s.key==="ArrowDown")U=E[T+1];else if(s.key==="ArrowUp")U=E[T-1];else if(s.key==="Home")U=E[0];else if(s.key==="End")U=E.at(-1);else if(s.key==="ArrowRight"&&s.target.dataset.vcsDirectory==="closed"){s.preventDefault(),s.target.click();return}else if(s.key==="ArrowLeft"&&s.target.dataset.vcsDirectory==="open"){s.preventDefault(),s.target.click();return}else return;s.preventDefault(),U?.focus()},At=({entry:s,compact:x=!1,depth:E=0})=>{let T=s.path.lastIndexOf("/");return r.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":fe(f,s.id),"aria-current":I?.repositoryId===f&&I?.id===s.id?"true":void 0,style:{paddingInlineStart:8+E*14},title:(s.oldPath?s.oldPath+" \u2192 ":"")+s.path+" \xB7 "+e(ce(s)),onClick:()=>{ye.current?.abort(),re(null),ie("content"),Le({repositoryId:f,id:s.id})}},r.default.createElement("span",{className:"vcs-status","data-status":ce(s)},ce(s)),r.default.createElement("span",{className:"vcs-filename"},x?s.path.slice(T+1):s.path,s.oldPath&&r.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",s.oldPath)))},Pt=({node:s,repository:x,depth:E=0})=>r.default.createElement(r.default.Fragment,null,s.directories.map(T=>{let U=x.id+"\0"+T.id,_=!!ht[U];return r.default.createElement(r.default.Fragment,{key:U},r.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":_?"closed":"open","aria-expanded":!_,style:{paddingInlineStart:8+E*14},onClick:()=>Fe(dr=>({...dr,[U]:!_}))},r.default.createElement("span",{"aria-hidden":"true"},_?"\u203A":"\u2304"),T.name,r.default.createElement("small",null,T.count)),!_&&r.default.createElement(Pt,{node:T,repository:x,depth:E+1}))}),s.files.map(T=>r.default.createElement(At,{key:fe(x.id,T.id),entry:T,compact:s.id!=="",depth:E})));return r.default.createElement("section",{ref:xt,className:"vcs-root","aria-label":e("title")},r.default.createElement("style",null,Ve),r.default.createElement("header",{className:"vcs-top"},r.default.createElement(Rt,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:he||!Q.length,onChange:s=>{ae(),k({}),b(s.target.value)}},!Q.length&&r.default.createElement("option",{value:""},e("repositories")),Q.map(s=>r.default.createElement("option",{key:s.id,value:s.id},me(s,e("workspaceRoot"))))),r.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",r.default.createElement("select",{"aria-label":e("gitMode"),value:d,disabled:!ne.some(s=>s.type==="git"),onChange:s=>{ae(),k({}),w(s.target.value)}},["all","unstaged","staged"].map(s=>r.default.createElement("option",{key:s,value:s},e(s))))),r.default.createElement("button",{onClick:kt,disabled:Nt||!a},e("refresh")),r.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")),r.default.createElement("div",{className:"vcs-path",title:v?.cwd||c?.cwd},e("session"),": ",v?.cwd||c?.cwd||"\u2014"),r.default.createElement("form",{className:"vcs-discovery",onSubmit:s=>{s.preventDefault(),we()}},r.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:H,onChange:s=>V(s.target.value)}),r.default.createElement("button",{disabled:!a||he},e("rescan")),r.default.createElement("span",null,e("scanHint"))),v?.truncated&&r.default.createElement("div",{className:"vcs-notice"},e("truncated")),(v?.warnings||[]).map((s,x)=>r.default.createElement("div",{className:"vcs-notice",key:x},typeof s=="string"?s:s.message||JSON.stringify(s)))),ne.some(s=>s.type==="git")&&r.default.createElement(r.default.Fragment,null,r.default.createElement("button",{"aria-expanded":bt,onClick:()=>sr(s=>!s)},e("history")),bt&&r.default.createElement(ot,{key:JSON.stringify([a,f,g,h]),sessionId:a,repositoryId:f,rpc:n,t:e,onRediscover:Ge})),r.default.createElement("div",{className:"vcs-body"},r.default.createElement("aside",{className:"vcs-files"},r.default.createElement("div",{className:"vcs-filter"},r.default.createElement("input",{ref:be,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:X,onChange:s=>De(s.target.value)}),(X||ve!=="all")&&r.default.createElement("button",{className:"vcs-clear-filter",onClick:Ct},e("clearFilters"))),r.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(s=>r.default.createElement("button",{key:s,"aria-pressed":ve===s,onClick:()=>ft(s)},e(s==="all"?"allFiles":$t[s]||"M")," ",r.default.createElement("small",null,ir[s]||0)))),r.default.createElement("div",{className:"vcs-count"},r.default.createElement("span",null,ee.length," ",e("files")),r.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),r.default.createElement("button",{"aria-pressed":Z,onClick:()=>mt(!Z)},e(Z?"tree":"list"))),Z&&r.default.createElement("div",{className:"vcs-tree-actions"},r.default.createElement("button",{onClick:()=>St(!0)},e("expandAll")),r.default.createElement("button",{onClick:()=>St(!1)},e("collapseAll")),r.default.createElement("button",{onClick:ar,disabled:!K},e("revealSelected"))),r.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:Ie,onKeyDown:lr},de.map(s=>{let x=s.repository;return r.default.createElement("section",{className:"vcs-repository",key:x.id,"aria-label":me(x,e("workspaceRoot"))},r.default.createElement("div",{className:"vcs-repository-heading",title:x.root},r.default.createElement("strong",null,me(x,e("workspaceRoot"))),r.default.createElement("small",null,x.type==="svn"?e("svnBase"):e(Pe(x,d)))),s.error?r.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},s.error,r.default.createElement("button",{onClick:we},e("rescan"))):m[x.id]?Z?r.default.createElement(Pt,{node:st(s.changes),repository:x}):s.changes.map(E=>r.default.createElement(At,{key:fe(x.id,E.id),entry:E})):r.default.createElement("div",{className:"vcs-message"},e("loading")),!s.error&&m[x.id]&&!s.changes.length&&r.default.createElement("div",{className:"vcs-message"},e(X?"emptySearch":"clean")))}),!de.length&&r.default.createElement("div",{className:"vcs-message"},he?e("loading"):$||e(a?"noRepo":"noSession"),$&&r.default.createElement("button",{onClick:we},e("rescan"))))),r.default.createElement("main",{className:"vcs-detail"},r.default.createElement("div",{className:"vcs-filehead"},r.default.createElement("strong",{title:S?.path||K?.path},ke?me(ke,e("workspaceRoot"))+" / ":"",S?.path||K?.path||e("pick")),r.default.createElement("button",{className:"vcs-copy-path",disabled:!(S?.path||K?.path),onClick:nr},e(pt?"copied":"copyPath")),pt&&r.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),r.default.createElement("span",{className:"vcs-spacer"}),S&&!S.binary&&G&&r.default.createElement(r.default.Fragment,null,r.default.createElement("span",{className:"vcs-add"},"+",He.added),r.default.createElement("span",{className:"vcs-del"},"\u2212",He.deleted))),J&&r.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",r.default.createElement("button",{onClick:()=>gt(s=>s+1)},e("retry")),r.default.createElement("details",null,r.default.createElement("summary",null,e("diagnostics")),J)),S&&r.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},r.default.createElement("span",{className:"vcs-context-status","data-status":ce(S)},e(ce(S))),S.oldPath&&r.default.createElement("span",{className:"vcs-context-rename",title:S.oldPath+" \u2192 "+S.path},S.oldPath," ",r.default.createElement("b",null,"\u2192")," ",S.path),r.default.createElement("span",null,S.left.label||"\u2014"," ",r.default.createElement("b",null,"\u2194")," ",S.right.label||"\u2014"),(S.left.encoding||S.right.encoding)&&r.default.createElement("span",null,e("encoding"),": ",S.left.encoding||"\u2014"," / ",S.right.encoding||"\u2014")),S?.notice&&r.default.createElement("div",{className:"vcs-notice"},S.notice),Ke.length>0&&r.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(s=>r.default.createElement("button",{key:s,"aria-pressed":ge===s,onClick:()=>ie(s)},e(s),s==="properties"?" ("+Ke.length+")":""))),r.default.createElement("div",{className:"vcs-labels"},r.default.createElement("span",null,S?.left.label||"\u2014",S?.left.encoding?" \xB7 "+S.left.encoding:""),r.default.createElement("span",null,S?.right.label||"\u2014",S?.right.encoding?" \xB7 "+S.right.encoding:"")),r.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!te||ge!=="content",style:ge==="properties"?{display:"none"}:void 0},r.default.createElement("div",{className:"vcs-editor",ref:je,style:J?{display:"none"}:void 0}),J&&S&&!S.binary&&!te&&r.default.createElement(pe,{comparison:S,labels:Se(e)}),te&&r.default.createElement("div",{className:"vcs-message "+($||Be||J?"vcs-error":""),role:"status"},te,($||Be||J)&&r.default.createElement("button",{onClick:()=>J?gt(s=>s+1):we()},e(J?"retry":"rescan")))),ge==="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,S?.left.label||e("before")),r.default.createElement("th",null,S?.right.label||e("after")))),r.default.createElement("tbody",null,Ke.map(s=>r.default.createElement("tr",{key:s},r.default.createElement("th",null,s),r.default.createElement("td",null,Y.left?.[s]??"\u2014"),r.default.createElement("td",null,Y.right?.[s]??"\u2014")))))),r.default.createElement("footer",{className:"vcs-toolbar"},r.default.createElement("button",{disabled:!G,"aria-pressed":se,onClick:()=>tr(!se)},e(se?"side":"inline")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!G,checked:Te,onChange:s=>rr(s.target.checked)}),e("whitespace")),r.default.createElement("label",null,r.default.createElement("input",{type:"checkbox",disabled:!G,checked:Me,onChange:s=>or(s.target.checked)}),e("wrap")),r.default.createElement("span",{className:"vcs-spacer"}),G&&r.default.createElement("span",null,He.count," ",e("changes")),r.default.createElement("button",{disabled:!G||!S||!!te,onClick:()=>R.current?.navigate("previous")},e("previous")),r.default.createElement("button",{disabled:!G||!S||!!te,onClick:()=>R.current?.navigate("next")},e("next")),Je.index>0&&r.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:Je.index,total:Je.total})),r.default.createElement("span",{className:"vcs-toolbar-separator"}),r.default.createElement("button",{title:e("fileShortcut"),disabled:!ee.length,onClick:()=>_e("previous")},e("previousFile")),r.default.createElement("button",{title:e("fileShortcut"),disabled:!ee.length,onClick:()=>_e("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},Rt))}
|
|
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.
|
|
3
|
+
"version": "0.3.36",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"test:install": "node scripts/test-install.mjs"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@deepseek-ai/dsh": "0.1.7-rc.2"
|
|
38
|
+
"@deepseek-ai/dsh": "0.1.7-rc.2 || 0.2.0-rc.2"
|
|
39
39
|
},
|
|
40
40
|
"peerDependenciesMeta": {
|
|
41
41
|
"@deepseek-ai/dsh": { "optional": true }
|