@feng0531/dsh-vcs 0.3.62 → 0.3.67
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 +8 -4
- package/dist/client.js +3 -3
- package/dist/svn-host.mjs +1 -0
- package/docs/RELEASING.md +3 -3
- package/git-history.mjs +27 -14
- package/image-preview.mjs +47 -16
- package/index.mjs +78 -35
- package/local-command.mjs +47 -0
- package/package.json +8 -1
- package/repository-path.mjs +32 -0
- package/src/svn-identity.mjs +12 -0
- package/src/svn-path.mjs +14 -0
- package/src/svn-revision.mjs +15 -0
- package/src/svn-target.mjs +16 -0
- package/text-content.mjs +42 -0
- package/vcs.mjs +13 -66
package/README.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# DSH VCS
|
|
2
2
|
|
|
3
|
-
DeepSeek Harness(DSH)Web 的只读 Git / SVN
|
|
3
|
+
DeepSeek Harness(DSH)Web 的只读 Git / SVN 审阅插件,包名 **@feng0531/dsh-vcs**。最新正式版本 **0.3.65**;第七批 SVN HTTPS 历史已正式发布至 npm/GitHub,两端实际工件与候选摘要一致,范围与证据见 [SVN 冻结结论](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/docs/SVN-RUNTIME-SCOPE.md>)。自动验证不等于当前 DSH GUI 实机验收;非商业许可证不变。
|
|
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 固定快照全历史搜索(说明/作者/路径)、本地分支导航与有界泳道、提交详情、父提交及 A/B Diff、跨重命名文件历史、精确 Blame 行定位与有界分页;历史目录预览和大文件 UTF-8 正文分段。文本比较默认高级只读 Diff,单版本预览默认高级只读编辑器;基础仅可选或失败回退。
|
|
10
|
+
- 安全静态 PNG、基线单扫描 JPEG、单 VP8 WebP 的工作区及 A/B 图片比较;格式结构与浏览器解码双重检查。
|
|
11
|
+
- 第七批:HTTPS SVN 固定工作副本修订日志、历史 r-1/r Diff 与止于复制边界的追溯。必须已发现仓库、手动审阅并勾选网络同意;未授权不联网。仅支持无需额外认证的 HTTPS 服务,不提供凭据或证书配置。
|
|
10
12
|
|
|
11
13
|
- 顶部下拉选择仓库,一次展示一个仓库;插件内没有额外的左侧仓库导航栏,文件列表仍在比较区左侧。
|
|
12
14
|
- Git 全部 / 已暂存 / 未暂存变更;SVN 本地 BASE 与工作副本、属性差异。
|
|
@@ -62,10 +64,12 @@ check 构建并运行测试;npm pack 经 prepack 再次执行检查,生成
|
|
|
62
64
|
|
|
63
65
|
## 发布与安装验收
|
|
64
66
|
|
|
65
|
-
见 [安装、升级与回滚](<docs/INSTALL.md>) 和 [兼容性与验收矩阵](<docs/COMPATIBILITY.md>)。发布包必须通过 `npm run verify:package` 和 `npm run test:install`;后者验证生产依赖安装,不代表真实 DSH 浏览器验收。正式发布统一从 GitHub Actions 手动触发,使用 NPM_AUTOMATION_TOKEN 先发布 npm,再公开 GitHub Release;普通提交和标签 CI 不自动发布。
|
|
67
|
+
见 [安装、升级与回滚](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/docs/INSTALL.md>) 和 [兼容性与验收矩阵](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/docs/COMPATIBILITY.md>)。发布包必须通过 `npm run verify:package` 和 `npm run test:install`;后者验证生产依赖安装,不代表真实 DSH 浏览器验收。正式发布统一从 GitHub Actions 手动触发,使用 NPM_AUTOMATION_TOKEN 先发布 npm,再公开 GitHub Release;普通提交和标签 CI 不自动发布。
|
|
66
68
|
|
|
67
69
|
## 项目资料
|
|
68
70
|
|
|
69
|
-
|
|
71
|
+
[文档导航](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/docs/README.md>)按使用、架构、验证与历史材料分类。
|
|
72
|
+
|
|
73
|
+
见 [贡献指南](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/CONTRIBUTING.md>)、[发布清单](<docs/RELEASING.md>)、[变更记录](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/CHANGELOG.md>) 和 [安全说明](<https://github.com/f-e-n-g-0531/dsh-vcs/blob/main/SECURITY.md>)。
|
|
70
74
|
|
|
71
75
|
界面交互参考 [Fork](https://fork.dev/)。这仅说明设计灵感,不表示与 Fork 官方有关联、获得背书或继承其代码许可。
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
window.__ModuleLoader__.load({ id: "@feng0531/dsh-vcs", factory(require) { var module = { exports: {} }; var exports = module.exports;
|
|
2
|
-
var
|
|
2
|
+
var qr=Object.create;var Ie=Object.defineProperty;var Jr=Object.getOwnPropertyDescriptor;var Wr=Object.getOwnPropertyNames;var Ur=Object.getPrototypeOf,Vr=Object.prototype.hasOwnProperty;var Gr=(e,t)=>{for(var o in t)Ie(e,o,{get:t[o],enumerable:!0})},Yt=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Wr(t))!Vr.call(e,s)&&s!==o&&Ie(e,s,{get:()=>t[s],enumerable:!(r=Jr(t,s))||r.enumerable});return e};var R=(e,t,o)=>(o=e!=null?qr(Ur(e)):{},Yt(t||!e||!e.__esModule?Ie(o,"default",{value:e,enumerable:!0}):o,e)),Ir=e=>Yt(Ie({},"__esModule",{value:!0}),e);var wo={};Gr(wo,{apply:()=>xo,inject:()=>yo});module.exports=Ir(wo);var n=R(require("react"),1);var pt=`.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,6 +92,6 @@ var kr=Object.create;var Je=Object.defineProperty;var Cr=Object.getOwnPropertyDe
|
|
|
92
92
|
.vcs-root .vcs-toolbar{gap:6px}
|
|
93
93
|
.vcs-root .vcs-title{font-size:16px}
|
|
94
94
|
}
|
|
95
|
-
`;var _=$(require("react"),1);function Wt(t){return t===""?[]:t.split(/\r\n|\n|\r/)}function Ut(t="",e=""){let s=Wt(t),r=Wt(e),o=0;for(;o<s.length&&o<r.length&&s[o]===r[o];)o++;let l=0;for(;l<s.length-o&&l<r.length-o&&s[s.length-l-1]===r[r.length-l-1];)l++;let m=s.length-l,c=r.length-l,d=m-o,n=c-o,u=d&&n?(d+1)*(n+1):0,h=u>2e5,S=[],b=0;function B(f,k){b++,!(S.length>=2e3)&&S.push({left:f===null?null:{number:f+1,text:s[f]},right:k===null?null:{number:k+1,text:r[k]},kind:f===null?"insert":k===null?"delete":s[f]===r[k]?"equal":"replace"})}for(let f=0;f<o;f++)B(f,f);if(h||!d||!n)for(let f=0;f<Math.max(d,n);f++)B(f<d?o+f:null,f<n?o+f:null);else{let f=n+1,k=new Uint32Array(u);for(let p=d-1;p>=0;p--)for(let y=n-1;y>=0;y--)k[p*f+y]=s[o+p]===r[o+y]?k[(p+1)*f+y+1]+1:Math.max(k[(p+1)*f+y],k[p*f+y+1]);let v=0,g=0;for(;v<d||g<n;)v<d&&g<n&&s[o+v]===r[o+g]?B(o+v++,o+g++):v<d&&(g===n||k[(v+1)*f+g]>=k[v*f+g+1])?B(o+v++,null):B(null,o+g++)}for(let f=0;f<l;f++)B(m+f,c+f);return{rows:S,approximate:h,truncated:b>S.length,totalRows:b,omittedRows:b-S.length,leftLineCount:s.length,rightLineCount:r.length,lcsCells:h?0:u}}var Or={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."},at={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Dr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Mr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Fr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Le({comparison:t,labels:e={}}){let s=t?.left?.text??"",r=t?.right?.text??"",o=(0,_.useMemo)(()=>Ut(s,r),[s,r]),l=c=>e[c]??Or[c],m=(c,d,n)=>{let u=c&&n!=="equal";return _.default.createElement("td",{style:{...at,background:u?d==="left"?"#d6454520":"#259b4920":void 0}},_.default.createElement("div",{style:Dr},_.default.createElement("span",{style:Mr},c?.number??""),_.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},u?d==="left"?"\u2212":"+":""),_.default.createElement("pre",{style:Fr},c?.text??"")))};return _.default.createElement("section",{className:"vcs-text-comparison","aria-label":l("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},o.approximate&&_.default.createElement("div",{role:"status",style:{padding:8}},l("approximate")),o.truncated&&_.default.createElement("div",{role:"status",style:{padding:8}},l("truncated")," (",2e3," / ",o.totalRows,")"),_.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},_.default.createElement("thead",null,_.default.createElement("tr",null,_.default.createElement("th",{scope:"col",style:{...at,padding:8,overflowWrap:"anywhere"}},t?.left?.label||l("before")),_.default.createElement("th",{scope:"col",style:{...at,padding:8,overflowWrap:"anywhere"}},t?.right?.label||l("after")))),_.default.createElement("tbody",null,o.rows.map((c,d)=>_.default.createElement("tr",{key:d,"data-kind":c.kind},m(c.left,"left",c.kind),m(c.right,"right",c.kind))))),!o.rows.length&&_.default.createElement("p",{style:{padding:8}},l("empty")))}var W=$(require("react"),1);function Jt(t,{width:e,height:s,signal:r,timeoutMs:o=1e4,createURL:l=d=>URL.createObjectURL(d),revokeURL:m=d=>URL.revokeObjectURL(d),createImage:c=()=>new Image}={}){return new Promise((d,n)=>{if(r?.aborted){n(r.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(t?.type)||t.size>2*1024*1024||!Number.isInteger(e)||!Number.isInteger(s)||e<1||s<1||e>8192||s>8192||e*s>16e6||!Number.isFinite(o)||o<=0){n(new Error("Invalid image preview"));return}let u,h,S,b=!1,B=!1,f=()=>{B||(B=!0,h&&(h.src=""),u&&m(u))},k=()=>{clearTimeout(S),r?.removeEventListener("abort",g)},v=p=>{b||(b=!0,k(),f(),n(p))},g=()=>v(r.reason||new Error("Image cancelled"));try{u=l(t),h=c(),r?.addEventListener("abort",g,{once:!0}),S=setTimeout(()=>v(new Error("Image decode timed out")),o),h.src=u,Promise.resolve(h.decode()).then(()=>{if(!b){if(r?.aborted){g();return}if(h.naturalWidth!==e||h.naturalHeight!==s){v(new Error("Image dimensions mismatch"));return}b=!0,k(),d({url:u,dispose:f})}},v)}catch(p){v(p)}})}function Tr({side:t,sessionId:e,repositoryId:s,commit:r,parentIndex:o,base:l,target:m,workspace:c=!1,mode:d,id:n,rpc:u,t:h,onRediscover:S}){let[b,B]=(0,W.useState)(null),[f,k]=(0,W.useState)(""),[v,g]=(0,W.useState)(0);return(0,W.useEffect)(()=>{let p=new AbortController,y;return B(null),k(""),(async()=>{let C=await u(c?"vcs/workspace-image":l?"vcs/revision-image":"vcs/commit-image",c?{sessionId:e,repositoryId:s,mode:d,id:n,side:t}:l?{sessionId:e,repositoryId:s,base:l,target:m,id:n,side:t}:{sessionId:e,repositoryId:s,commit:r,parentIndex:o,id:n,side:t},p.signal);if(p.signal.aborted)return;if(C.absent){B(C);return}if(!["image/png","image/jpeg","image/webp"].includes(C.mime)||typeof C.base64!="string"||C.base64.length>2796204||!Number.isInteger(C.bytes)||C.bytes<1||C.bytes>2097152)throw Error(h("imageInvalid"));let E=atob(C.base64);if(E.length!==C.bytes)throw Error(h("imageInvalid"));let N=new Blob([Uint8Array.from(E,T=>T.charCodeAt(0))],{type:C.mime});if(y=await Jt(N,{width:C.width,height:C.height,signal:p.signal}),p.signal.aborted){y.dispose();return}B({...C,url:y.url})})().catch(C=>{p.signal.aborted||(k(C.message),C.code==="vcs/rediscover-required"&&S())}),()=>{p.abort(),y?.dispose()}},[t,e,s,r,o,l,m,c,d,n,v]),W.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":h(t==="left"?"imageBefore":"imageAfter")},W.default.createElement("h5",null,h(t==="left"?"imageBefore":"imageAfter")),f?W.default.createElement("p",{role:"alert"},f," ",W.default.createElement("button",{onClick:()=>g(p=>p+1)},h("retry"))):b?W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,W.default.createElement("code",null,b.commit)," \xB7 ",b.path),b.absent?W.default.createElement("p",null,h("imageAbsent")):W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,b.width," \xD7 ",b.height," \xB7 ",b.bytes," B"),W.default.createElement("img",{src:b.url,alt:b.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),b.metadataStripped&&W.default.createElement("p",null,h("imageMetadata")))):W.default.createElement("p",{role:"status"},h("loading")))}function Ae(t){let[e,s]=(0,W.useState)(!1);return W.default.createElement("div",null,W.default.createElement("button",{"aria-expanded":e,onClick:()=>s(r=>!r)},t.t("imageCompare")),e&&W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,t.t("imageScope")),W.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(r=>W.default.createElement(Tr,{key:r,...t,side:r})))))}function qe(t){return{before:t("textBefore"),after:t("textAfter"),readonly:t("textReadonly"),empty:t("textEmpty"),approximate:t("approximate"),truncated:t("textTruncated")}}var x=$(require("react"),1);function qt(t){let e=new Map;for(let s of t){let r=e.get(s.commit);r||(r={names:[],hidden:0},e.set(s.commit,r)),r.names.length<3?r.names.push(s.name):r.hidden++}return e}var F=$(require("react"),1);var O=$(require("react"),1);var I=$(require("react"),1);var G=$(require("react"),1);var U=$(require("react"),1);function Gt({load:t,node:e,comparison:s,key:r,single:o=!1,onReady:l=()=>{},onError:m=()=>{}}){let c=new AbortController,d,n=!1,u=()=>{let S=d;d=void 0,S?.dispose()};return{done:Promise.resolve().then(()=>(c.signal.throwIfAborted(),t(c.signal))).then(S=>{n||(d=S.createDiff(e,{single:o}),d.setContent(s,r),n||l(d))}).catch(S=>{try{u()}finally{n||m(S)}}),dispose(){n||(n=!0,c.abort(),u())}}}async function Ge(t,{signal:e,fetcher:s=fetch,importer:r=o=>import(o)}={}){let o=await s(t,{credentials:"same-origin",cache:"no-cache",signal:e});if(!o.ok)throw new Error("Editor resource HTTP "+o.status+" ("+t+"). "+(o.status===401?"Refresh the authenticated DSH page.":o.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let l=o.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(l))throw new Error("Editor resource returned "+(l||"no Content-Type")+" instead of JavaScript.");return await o.arrayBuffer(),e?.throwIfAborted(),r(t)}var Ie="0.3.62";function de({comparison:t,identity:e,t:s,single:r=!1,line:o=null}){let l=(0,U.useRef)(null),m=(0,U.useRef)(null),[c,d]=(0,U.useState)(!0),[n,u]=(0,U.useState)(!1),[h,S]=(0,U.useState)(!1),[b,B]=(0,U.useState)(!0),[f,k]=(0,U.useState)(!1),[v,g]=(0,U.useState)("");return(0,U.useEffect)(()=>{if(k(!1),g(""),!b)return;let p=E=>new URL("vcs-assets/"+E,document.baseURI).href,y=document.createElement("link");y.rel="stylesheet",y.href=p("editor.css"),document.head.appendChild(y);let C=Gt({node:l.current,comparison:t,key:e,single:r,load:E=>Ge(p("editor.js")+"?v="+encodeURIComponent(Ie)+"&retry=0",{signal:E}),onReady:E=>{m.current=E,k(!0)},onError:E=>g(E.message)});return()=>{m.current=null;try{C.dispose()}finally{y.remove()}}},[b,t,e,r]),(0,U.useEffect)(()=>{f&&r&&o&&m.current?.revealLine(o)},[f,r,o]),(0,U.useEffect)(()=>{f&&m.current?.options({sideBySide:c,ignoreWhitespace:n,wrap:h})},[f,c,n,h]),U.default.createElement("div",null,U.default.createElement("button",{"aria-pressed":b,onClick:()=>B(p=>!p)},s(b?"historyBasic":"historyAdvanced")),f&&!r&&U.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},U.default.createElement("button",{"aria-pressed":c,onClick:()=>d(p=>!p)},s(c?"side":"inline")),U.default.createElement("label",null,U.default.createElement("input",{type:"checkbox",checked:n,onChange:p=>u(p.target.checked)}),s("whitespace")),U.default.createElement("label",null,U.default.createElement("input",{type:"checkbox",checked:h,onChange:p=>S(p.target.checked)}),s("wrap")),U.default.createElement("button",{onClick:()=>m.current?.navigate("previous")},s("previous")),U.default.createElement("button",{onClick:()=>m.current?.navigate("next")},s("next"))),b&&!f&&!v&&U.default.createElement("p",{role:"status"},s("loading")),v&&U.default.createElement("p",{role:"status"},s("fallback")," ",v),U.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},U.default.createElement("div",{ref:l,style:{position:"absolute",inset:0,visibility:f?"visible":"hidden"},"aria-hidden":!f}),!f&&U.default.createElement(Le,{comparison:t,labels:qe(s)})))}function lt(t){return G.default.createElement(Wr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit,t.path]),...t})}function Wr({sessionId:t,repositoryId:e,commit:s,path:r,rpc:o,t:l,onRediscover:m}){let[c,d]=(0,G.useState)(!1),[n,u]=(0,G.useState)([0]),[h,S]=(0,G.useState)(null),[b,B]=(0,G.useState)(""),[f,k]=(0,G.useState)(0),v=n.at(-1);(0,G.useEffect)(()=>{if(!c)return;let p=new AbortController;return S(null),B(""),o("vcs/tree-segment",{sessionId:t,repositoryId:e,commit:s,path:r,offset:v},p.signal).then(y=>{p.signal.aborted||S(y)}).catch(y=>{p.signal.aborted||(B(y.message),y.code==="vcs/rediscover-required"&&m())}),()=>p.abort()},[c,v,t,e,s,r,f]);let g=(0,G.useMemo)(()=>h?{path:r,left:{label:s,text:h.text},right:{label:s,text:h.text}}:null,[h,r,s]);return G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":c,onClick:()=>d(p=>!p)},l("segments")),c&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,l("segmentScope")),b?G.default.createElement("p",{role:"alert"},b," ",G.default.createElement("button",{onClick:()=>k(p=>p+1)},l("retry"))):h?G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,l("segmentBytes"),": ",h.offset,"\u2013",h.endOffset," / ",h.totalBytes," \xB7 ",G.default.createElement("code",null,h.oid)),G.default.createElement("button",{disabled:n.length===1,onClick:()=>u(p=>p.slice(0,-1))},l("previous")),G.default.createElement("button",{disabled:h.nextOffset===null,onClick:()=>u(p=>[...p,h.nextOffset])},l("next")),G.default.createElement(de,{single:!0,comparison:g,identity:JSON.stringify([t,e,s,r,v]),t:l})):G.default.createElement("p",{role:"status"},l("loading"))))}function Pe({sessionId:t,repositoryId:e,commit:s,path:r,rpc:o,t:l,onRediscover:m,onClose:c,line:d=null}){let[n,u]=(0,I.useState)(null),[h,S]=(0,I.useState)(""),[b,B]=(0,I.useState)(0);(0,I.useEffect)(()=>{let k=new AbortController;return u(null),S(""),o("vcs/tree-file",{sessionId:t,repositoryId:e,commit:s,path:r},k.signal).then(v=>{k.signal.aborted||u(v)}).catch(v=>{k.signal.aborted||(S(v.message),v.code==="vcs/rediscover-required"&&m())}),()=>k.abort()},[t,e,s,r,b]);let f=(0,I.useMemo)(()=>n?{path:r,left:{label:s,text:n.text||""},right:{label:s,text:n.text||""}}:null,[n,r,s]);return I.default.createElement("section",{"aria-label":l("treePreview")},I.default.createElement("h4",null,r),I.default.createElement("button",{onClick:c},l("treeClose")),I.default.createElement("p",null,I.default.createElement("code",null,s)),h?I.default.createElement("p",{role:"alert"},h," ",I.default.createElement("button",{onClick:()=>B(k=>k+1)},l("retry"))):n?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,I.default.createElement("code",null,n.oid)," \xB7 ",l("encoding"),": ",n.encoding||"\u2014"),d&&I.default.createElement("p",{role:"status"},l("blameOriginLine"),": ",d,!n.text||d>n.text.split(`
|
|
96
|
-
`).length?" \xB7 "+l("blameUnmapped"):""),n.notice&&I.default.createElement("p",{role:"status"},n.notice),n.binary?I.default.createElement("p",null,l("binary")):n.text===""?I.default.createElement("p",null,l("treeEmpty")):I.default.createElement(de,{single:!0,line:d,comparison:f,identity:JSON.stringify([t,e,s,r]),t:l})):I.default.createElement("p",{role:"status"},l("loading")),I.default.createElement(lt,{sessionId:t,repositoryId:e,commit:s,path:r,rpc:o,t:l,onRediscover:m}))}function It(t=""){let e=[{path:"",name:"/"}];if(t){let s="";for(let r of t.split("/"))s=s?s+"/"+r:r,e.push({path:s,name:r})}return e}function zt(t,e="",s=""){let r=e?e+"/":"",o=s.toLowerCase();return t.filter(l=>{let m=l.path.slice(r.length);return l.path.startsWith(r)&&m.length>0&&!m.includes("/")&&m.toLowerCase().includes(o)}).sort((l,m)=>+(m.type==="tree")-+(l.type==="tree")||(l.path<m.path?-1:l.path>m.path?1:0))}function Ur({sessionId:t,repositoryId:e,commit:s,rpc:r,t:o,onRediscover:l}){let[m,c]=(0,O.useState)(null),[d,n]=(0,O.useState)(""),[u,h]=(0,O.useState)(0),[S,b]=(0,O.useState)(""),[B,f]=(0,O.useState)(0),[k,v]=(0,O.useState)(""),[g,p]=(0,O.useState)(null);if((0,O.useEffect)(()=>{let N=new AbortController;return c(null),n(""),r("vcs/tree",{sessionId:t,repositoryId:e,commit:s},N.signal).then(T=>{N.signal.aborted||c(T)}).catch(T=>{N.signal.aborted||(n(T.message),T.code==="vcs/rediscover-required"&&l())}),()=>N.abort()},[t,e,s,u]),d)return O.default.createElement("p",{role:"alert"},d," ",O.default.createElement("button",{onClick:()=>h(N=>N+1)},o("retry")));if(!m)return O.default.createElement("p",{role:"status"},o("loading"));let y=S?S+"/":"",C=zt(m.entries,S,k),E=N=>{b(N),f(0),v(""),p(null)};return O.default.createElement("section",{"aria-label":o("historicalTree")},O.default.createElement("p",null,o("historicalTreeScope")),O.default.createElement("code",null,s),O.default.createElement("p",null,S||"/"," ",S&&O.default.createElement("button",{onClick:()=>E(S.includes("/")?S.slice(0,S.lastIndexOf("/")):"")},o("treeUp"))),O.default.createElement("nav",{"aria-label":o("treeBreadcrumbs")},It(S).map(N=>O.default.createElement(O.default.Fragment,{key:N.path},N.path&&" / ",N.path===S?O.default.createElement("span",{"aria-current":"location"},N.name):O.default.createElement("button",{onClick:()=>E(N.path)},N.name)))),O.default.createElement("label",null,o("treeSearch")," ",O.default.createElement("input",{"aria-label":o("treeSearch"),value:k,onChange:N=>{v(N.target.value),f(0),p(null)}})),O.default.createElement("p",null,C.length," ",o("treeEntries")),!C.length&&k&&O.default.createElement("p",{role:"status"},o("emptySearch")),O.default.createElement("ul",null,C.slice(B*100,B*100+100).map(N=>O.default.createElement("li",{key:N.path},N.type==="tree"?O.default.createElement("button",{onClick:()=>E(N.path)},N.path.slice(y.length),"/"):N.type==="blob"&&["100644","100755"].includes(N.mode)?O.default.createElement("button",{"aria-pressed":g===N.path,onClick:()=>p(N.path)},N.path.slice(y.length)):O.default.createElement("span",null,N.path.slice(y.length))," \xB7 ",O.default.createElement("code",null,N.mode," ",N.type," ",O.default.createElement("span",{title:N.oid},N.oid.slice(0,10)))))),B>0&&O.default.createElement("button",{onClick:()=>{f(N=>N-1),p(null)}},o("treePrevious")),(B+1)*100<C.length&&O.default.createElement("button",{onClick:()=>{f(N=>N+1),p(null)}},o("treeNext")),g&&O.default.createElement(Pe,{key:JSON.stringify([t,e,s,g]),sessionId:t,repositoryId:e,commit:s,rpc:r,t:o,onRediscover:l,path:g,onClose:()=>p(null)}))}function dt(t){return O.default.createElement(Jr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function Jr(t){let[e,s]=(0,O.useState)(!1);return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":e,onClick:()=>s(r=>!r)},t.t("historicalTree")),e&&O.default.createElement(Ur,{...t}))}var Y=$(require("react"),1);var M=$(require("react"),1);function qr({sessionId:t,repositoryId:e,commit:s,parentIndex:r,id:o,follow:l,rpc:m,t:c,onRediscover:d,onSelectCommit:n}){let[u,h]=(0,M.useState)({commits:[],nextOffset:null}),[S,b]=(0,M.useState)(0),[B,f]=(0,M.useState)(0),[k,v]=(0,M.useState)(!0),[g,p]=(0,M.useState)("");return(0,M.useEffect)(()=>{let y=new AbortController;return v(!0),p(""),m("vcs/file-history",{sessionId:t,repositoryId:e,commit:s,parentIndex:r,id:o,offset:S,limit:50,follow:l},y.signal).then(C=>{y.signal.aborted||h(E=>({...C,commits:S?[...E.commits,...C.commits]:C.commits}))}).catch(C=>{y.signal.aborted||(p(C.message),C.code==="vcs/rediscover-required"&&d())}).finally(()=>{y.signal.aborted||v(!1)}),()=>y.abort()},[t,e,s,r,o,S,B]),M.default.createElement("section",{"aria-label":c("fileHistory"),"aria-busy":k},M.default.createElement("p",null,c("fileHistoryScope")),M.default.createElement("p",{style:{overflowWrap:"anywhere"}},u.path," \xB7 ",M.default.createElement("code",null,s)),M.default.createElement("ol",null,u.commits.map(y=>M.default.createElement("li",{key:y.id},M.default.createElement("code",{title:y.id},y.id.slice(0,10))," \xB7 ",n?M.default.createElement("button",{onClick:()=>n(y.id,y.path||u.path)},y.subject):y.subject,M.default.createElement("div",null,y.boundary&&M.default.createElement("span",null,c(y.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":"fileHistoryBoundary")," "),y.path&&M.default.createElement("code",null,y.oldPath?y.oldPath+" \u2192 ":"",y.path)," ",y.author," \xB7 ",M.default.createElement("time",{dateTime:y.date},y.date))))),k&&M.default.createElement("p",{role:"status"},c("loading")),g&&M.default.createElement("p",{role:"alert"},g," ",M.default.createElement("button",{onClick:()=>f(y=>y+1)},c("retry"))),!k&&!g&&!u.commits.length&&M.default.createElement("p",null,c("historyEmpty")),u.truncated&&M.default.createElement("p",{role:"status"},c("historyLimit")),!g&&u.nextOffset!==null&&M.default.createElement("button",{disabled:k,onClick:()=>b(u.nextOffset)},c("historyMore")))}function ct(t){return M.default.createElement(Gr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit,t.parentIndex,t.id]),...t})}function Gr(t){let[e,s]=(0,M.useState)(!1),[r,o]=(0,M.useState)(!1);return M.default.createElement("div",null,M.default.createElement("button",{"aria-expanded":e,onClick:()=>s(l=>!l)},t.t("fileHistory")),e&&M.default.createElement(M.default.Fragment,null,M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:r,onChange:l=>o(l.target.checked)}),t.t("fileHistoryFollow")),M.default.createElement("p",null,t.t("fileHistoryFollowScope")),M.default.createElement(qr,{key:String(r),follow:r,...t})))}var H=$(require("react"),1);function Ir({sessionId:t,repositoryId:e,commit:s,parentIndex:r,id:o,rpc:l,t:m,onRediscover:c,onSelectCommit:d}){let[n,u]=(0,H.useState)(null),[h,S]=(0,H.useState)(""),[b,B]=(0,H.useState)(0),[f,k]=(0,H.useState)(1),[v,g]=(0,H.useState)(null);return(0,H.useEffect)(()=>{let p=new AbortController;return u(null),S(""),g(null),l("vcs/blame",{sessionId:t,repositoryId:e,commit:s,parentIndex:r,id:o,startLine:f,lineLimit:500},p.signal).then(y=>{p.signal.aborted||u(y)}).catch(y=>{p.signal.aborted||(S(y.message),y.code==="vcs/rediscover-required"&&c())}),()=>p.abort()},[t,e,s,r,o,b,f]),h?H.default.createElement("p",{role:"alert"},h," ",H.default.createElement("button",{onClick:()=>B(p=>p+1)},m("retry"))):n?H.default.createElement("section",{"aria-label":m("blame")},H.default.createElement("p",null,m("blameScope")),d&&H.default.createElement("p",null,m("blameNavigation")),n.notice&&H.default.createElement("p",{role:"status"},n.notice),n.truncated&&H.default.createElement("p",{role:"status"},m("blameLimit")),!n.notice&&!n.lines.length&&H.default.createElement("p",null,m("blameEmpty")),!!n.lines.length&&H.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},H.default.createElement("table",null,H.default.createElement("thead",null,H.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(p=>H.default.createElement("th",{key:p,scope:"col"},m(p))))),H.default.createElement("tbody",null,n.lines.map(p=>H.default.createElement("tr",{key:p.line},H.default.createElement("th",{scope:"row"},p.line),H.default.createElement("td",null,d?H.default.createElement("button",{title:p.commit,onClick:()=>d(p.commit)},H.default.createElement("code",null,p.commit.slice(0,10))):H.default.createElement("code",{title:p.commit},p.commit.slice(0,10))),H.default.createElement("td",null,p.author),H.default.createElement("td",null,p.summary),H.default.createElement("td",null,H.default.createElement("pre",{style:{margin:0}},p.text),p.path&&p.originalLine?H.default.createElement("button",{onClick:()=>g(p)},m("blameOriginLine"),": ",p.path,":",p.originalLine):H.default.createElement("span",null,m("blameUnmapped")))))))),H.default.createElement("p",null,n.startLine||f,"\u2013",n.lines.at(-1)?.line||f," / ",n.totalLines??"\u2014"),H.default.createElement("button",{disabled:f===1,onClick:()=>k(Math.max(1,f-500))},m("blamePrevious")),H.default.createElement("button",{disabled:n.nextLine==null,onClick:()=>k(n.nextLine)},m("blameNext")),v&&H.default.createElement(Pe,{key:JSON.stringify([v.commit,v.path,v.originalLine]),sessionId:t,repositoryId:e,commit:v.commit,path:v.path,line:v.originalLine,rpc:l,t:m,onRediscover:c,onClose:()=>g(null)})):H.default.createElement("p",{role:"status"},m("loading"))}function pt(t){let[e,s]=(0,H.useState)(!1);return H.default.createElement("div",null,H.default.createElement("button",{"aria-expanded":e,onClick:()=>s(r=>!r)},t.t("blame")),e&&H.default.createElement(Ir,{...t}))}function Be({sessionId:t,repositoryId:e,commit:s,parentIndex:r,base:o,target:l,id:m,rpc:c,t:d,onRediscover:n,onSelectCommit:u}){let[h,S]=(0,Y.useState)(null),[b,B]=(0,Y.useState)(""),[f,k]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{let v=new AbortController;return S(null),B(""),c(o?"vcs/revision-compare":"vcs/commit-compare",o?{sessionId:t,repositoryId:e,base:o,target:l,id:m}:{sessionId:t,repositoryId:e,commit:s,parentIndex:r,id:m},v.signal).then(g=>{v.signal.aborted||S(g)}).catch(g=>{v.signal.aborted||(B(g.message),g.code==="vcs/rediscover-required"&&n())}),()=>v.abort()},[t,e,s,r,o,l,m,f]),b?Y.default.createElement("p",{role:"alert"},b," ",Y.default.createElement("button",{onClick:()=>k(v=>v+1)},d("retry"))):h?Y.default.createElement("section",null,Y.default.createElement("h4",null,h.path),Y.default.createElement("p",null,h.left.label," \u2194 ",h.right.label),h.notice&&Y.default.createElement("p",{role:"status"},h.notice),h.binary?Y.default.createElement("p",null,d("binary")):Y.default.createElement(de,{comparison:h,identity:JSON.stringify(o?[t,e,o,l,m]:[t,e,s,r,m]),t:d}),s&&!o&&Y.default.createElement(ct,{onSelectCommit:u,key:"file-history:"+JSON.stringify([t,e,s,r,m]),sessionId:t,repositoryId:e,commit:s,parentIndex:r,id:m,rpc:c,t:d,onRediscover:n}),s&&!o&&Y.default.createElement(pt,{onSelectCommit:u,key:"blame:"+JSON.stringify([t,e,s,r,m]),sessionId:t,repositoryId:e,commit:s,parentIndex:r,id:m,rpc:c,t:d,onRediscover:n}),(s||o)&&Y.default.createElement(Ae,{key:"image:"+JSON.stringify([t,e,s,r,o,l,m]),sessionId:t,repositoryId:e,commit:s,parentIndex:r,base:o,target:l,id:m,rpc:c,t:d,onRediscover:n})):Y.default.createElement("p",{role:"status"},d("loading"))}function Kt(t,e){if(typeof e!="string"||!e)return null;let s=t.filter(r=>r.path===e);return s.length===1&&typeof s[0].id=="string"&&s[0].id?s[0].id:null}function Vt(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(r=>[r.id,r.author,r.subject].some(o=>o?.toLowerCase().includes(s))):t}function ze(t,e=""){let s=e.trim().toLowerCase();return s?t.filter(r=>[r.path,r.oldPath].some(o=>o?.toLowerCase().includes(s))):t}function ut(t){return F.default.createElement(zr,{key:JSON.stringify([t.sessionId,t.repositoryId,t.commit]),...t})}function zr({sessionId:t,repositoryId:e,commit:s,rpc:r,t:o,onRediscover:l,onSelectCommit:m,initialPath:c}){let d=(0,F.useRef)(!0),[n,u]=(0,F.useState)(null),[h,S]=(0,F.useState)(""),[b,B]=(0,F.useState)(0),[f,k]=(0,F.useState)(null),[v,g]=(0,F.useState)(""),[p,y]=(0,F.useState)(0);if((0,F.useEffect)(()=>{let E=new AbortController;return k(null),g(""),r("vcs/commit",{sessionId:t,repositoryId:e,commit:s,parentIndex:b},E.signal).then(N=>{E.signal.aborted||(k(N),d.current&&(d.current=!1,u(Kt(N.changes,c))))}).catch(N=>{E.signal.aborted||(g(N.message),N.code==="vcs/rediscover-required"&&l())}),()=>E.abort()},[t,e,s,b,p]),v)return F.default.createElement("p",{role:"alert"},v," ",F.default.createElement("button",{onClick:()=>y(E=>E+1)},o("retry")));if(!f)return F.default.createElement("p",{role:"status"},o("loading"));let C=ze(f.changes,h);return F.default.createElement("section",{"aria-label":o("commitDetails")},F.default.createElement("h3",null,f.subject),F.default.createElement("code",null,f.id),F.default.createElement("p",null,f.author," \xB7 ",f.date),f.messageTruncated&&F.default.createElement("p",{role:"status"},o("commitMessageLimit")),f.message&&F.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},f.message),f.parents.length>1&&F.default.createElement("label",null,o("commitParent")," ",F.default.createElement("select",{"aria-label":o("commitParent"),value:b,onChange:E=>{u(null),k(null),B(Number(E.target.value))}},f.parents.map((E,N)=>F.default.createElement("option",{key:E,value:N},N+1,": ",E.slice(0,10))))),F.default.createElement("p",null,f.parent||o("commitRoot")," \u2192 ",f.id.slice(0,10)),F.default.createElement("label",null,o("commitFileSearch")," ",F.default.createElement("input",{"aria-label":o("commitFileSearch"),value:h,onChange:E=>{S(E.target.value),u(null)}})),F.default.createElement("span",null," ",C.length," / ",f.changes.length),F.default.createElement("ul",null,C.map(E=>F.default.createElement("li",{key:E.id},F.default.createElement("button",{"aria-pressed":n===E.id,onClick:()=>u(E.id)},E.status," \xB7 ",E.oldPath?E.oldPath+" \u2192 ":"",E.path)))),!!f.changes.length&&!C.length&&F.default.createElement("p",{role:"status"},o("emptySearch")),!f.changes.length&&F.default.createElement("p",null,o("commitNoChanges")),n&&F.default.createElement(Be,{key:n,sessionId:t,repositoryId:e,commit:s,parentIndex:b,id:n,onSelectCommit:m,rpc:r,t:o,onRediscover:l}),F.default.createElement(dt,{key:JSON.stringify([t,e,s]),sessionId:t,repositoryId:e,commit:s,rpc:r,t:o,onRediscover:l}))}var z=$(require("react"),1);function _t(t){if(!Array.isArray(t))throw new Error("Invalid graph commits");let e=t.slice(0,200),s=new Map,r=[],o=[],l=c=>typeof c=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(c);for(let[c,d]of e.entries()){if(!d||!l(d.id)||!Array.isArray(d.parents)||s.has(d.id))throw new Error("Invalid graph node");s.set(d.id,c),r.push({id:d.id,row:c})}let m=!1;for(let c of e){let d=new Set;for(let n of c.parents){if(o.length===1e3){m=!0;break}if(!l(n)||n.length!==c.id.length||n===c.id||d.has(n))throw new Error("Invalid graph parent");d.add(n);let u=s.get(n);if(u!==void 0&&u<=s.get(c.id))throw new Error("Graph requires child-before-parent order");o.push({from:c.id,to:n,missing:u===void 0})}if(m)break}return{nodes:r,edges:o,nodesTruncated:t.length>200,edgesTruncated:m}}function Yt(t){let e=Array(32).fill(null),s=new Map,r=[],o=new Set,l=!1,m=n=>{if(o.has(n))return null;let u=e.indexOf(n);return u>=0?u:(u=e.indexOf(null),u<0?(l=!0,o.add(n),null):(e[u]=n,u))},c=new Map;for(let n of t.edges){if(n.missing)continue;let u=c.get(n.from)||[];u.push(n.to),c.set(n.from,u)}for(let n of t.nodes){let u=m(n.id);if(s.set(n.id,{...n,lane:u}),r.push({...n,lane:u}),u===null)continue;e[u]=null;let h=c.get(n.id)||[];for(let[S,b]of h.entries())e.includes(b)||(S===0&&e[u]===null?e[u]=b:m(b))}let d=t.edges.filter(n=>!n.missing).flatMap(n=>{let u=s.get(n.from),h=s.get(n.to);return u.lane===null||h.lane===null?[]:[{...n,start:u.row,end:h.row,fromLane:u.lane,toLane:h.lane}]});return{nodes:r,edges:d,lanesTruncated:l,laneCount:Math.max(1,...r.map(n=>(n.lane??0)+1))}}function Kr({commits:t,selected:e,onSelect:s,t:r}){let o;try{o=_t(t)}catch{return z.default.createElement("p",{role:"alert"},r("graphInvalid"))}let l=Yt(o),m=l.edges,c=Math.max(100,24+18*l.laneCount),d=Math.max(40,o.nodes.length*36);return z.default.createElement("section",{"aria-label":r("historyGraph")},z.default.createElement("p",null,r("graphScope")),l.lanesTruncated&&z.default.createElement("p",{role:"status"},r("graphLaneLimit")),(o.nodesTruncated||o.edgesTruncated)&&z.default.createElement("p",{role:"status"},r("graphLimit")),z.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},z.default.createElement("svg",{width:c,height:d,"aria-hidden":"true",style:{flexShrink:0}},m.map(n=>{let u=n.start*36+18,h=n.end*36+18,S=12+n.fromLane*18,b=12+n.toLane*18;return z.default.createElement("path",{key:n.from+n.to,d:"M "+S+" "+u+" C "+S+" "+(u+18)+", "+b+" "+(h-18)+", "+b+" "+h,fill:"none",stroke:"currentColor",opacity:"0.45"})}),l.nodes.filter(n=>n.lane!==null).map(n=>z.default.createElement("circle",{key:n.id,cx:12+n.lane*18,cy:n.row*36+18,r:"4",fill:"currentColor"}))),z.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},o.nodes.map(n=>z.default.createElement("li",{key:n.id,style:{height:36,whiteSpace:"nowrap"}},z.default.createElement("button",{title:n.id,"aria-current":e===n.id?!0:void 0,style:e===n.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:u=>{if(u.altKey||u.ctrlKey||u.metaKey||u.shiftKey)return;let h=u.key==="ArrowDown"?Math.min(n.row+1,o.nodes.length-1):u.key==="ArrowUp"?Math.max(0,n.row-1):u.key==="Home"?0:u.key==="End"?o.nodes.length-1:null;h!==null&&(u.preventDefault(),u.stopPropagation(),u.currentTarget.closest("ol").querySelectorAll("button")[h]?.focus())},onClick:()=>s(n.id)},z.default.createElement("code",null,n.id.slice(0,10))," ",t[n.row].subject))))),z.default.createElement("details",null,z.default.createElement("summary",null,r("graphRelations")),z.default.createElement("ul",null,o.edges.map(n=>z.default.createElement("li",{key:n.from+n.to},z.default.createElement("code",null,n.from)," \u2192 ",z.default.createElement("code",null,n.to),n.missing?" \xB7 "+r("graphMissing"):"")))))}function ft(t){let[e,s]=(0,z.useState)(!1);return z.default.createElement("div",null,z.default.createElement("button",{"aria-expanded":e,onClick:()=>s(r=>!r)},t.t("historyGraph")),e&&z.default.createElement(Kr,{...t}))}var A=$(require("react"),1);function Vr({sessionId:t,repositoryId:e,base:s,target:r,rpc:o,t:l,onRediscover:m}){let[c,d]=(0,A.useState)(null),[n,u]=(0,A.useState)(""),[h,S]=(0,A.useState)(0),[b,B]=(0,A.useState)(null),[f,k]=(0,A.useState)("");if((0,A.useEffect)(()=>{let g=new AbortController;return d(null),u(""),B(null),o("vcs/revision-changes",{sessionId:t,repositoryId:e,base:s,target:r},g.signal).then(p=>{g.signal.aborted||d(p)}).catch(p=>{g.signal.aborted||(u(p.message),p.code==="vcs/rediscover-required"&&m())}),()=>g.abort()},[t,e,s,r,h]),n)return A.default.createElement("p",{role:"alert"},n," ",A.default.createElement("button",{onClick:()=>S(g=>g+1)},l("retry")));if(!c)return A.default.createElement("p",{role:"status"},l("loading"));let v=ze(c.changes,f);return A.default.createElement("div",null,A.default.createElement("label",null,l("commitFileSearch")," ",A.default.createElement("input",{"aria-label":l("commitFileSearch"),value:f,onChange:g=>{k(g.target.value),B(null)}})),A.default.createElement("span",null," ",v.length," / ",c.changes.length),!!c.changes.length&&!v.length&&A.default.createElement("p",{role:"status"},l("emptySearch")),!c.changes.length&&A.default.createElement("p",null,l("revisionEmpty")),A.default.createElement("ul",null,v.map(g=>A.default.createElement("li",{key:g.id},A.default.createElement("button",{"aria-pressed":b===g.id,onClick:()=>B(g.id)},g.status," \xB7 ",g.oldPath?g.oldPath+" \u2192 ":"",g.path)))),b&&A.default.createElement(Be,{key:b,sessionId:t,repositoryId:e,base:s,target:r,id:b,rpc:o,t:l,onRediscover:m}))}function mt(t){return A.default.createElement(_r,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function _r({commits:t,sessionId:e,repositoryId:s,rpc:r,t:o,onRediscover:l,onReferencesLoaded:m}){let[c,d]=(0,A.useState)(""),[n,u]=(0,A.useState)(""),[h,S]=(0,A.useState)([]),[b,B]=(0,A.useState)(!1),[f,k]=(0,A.useState)(0),[v,g]=(0,A.useState)(!1),[p,y]=(0,A.useState)("");return(0,A.useEffect)(()=>{if(!f)return;let C=new AbortController;return g(!0),y(""),r("vcs/references",{sessionId:e,repositoryId:s},C.signal).then(E=>{C.signal.aborted||(S(E.references),B(!0),m?.(E.references))}).catch(E=>{C.signal.aborted||(y(E.message),E.code==="vcs/rediscover-required"&&l())}).finally(()=>{C.signal.aborted||g(!1)}),()=>C.abort()},[e,s,f]),A.default.createElement("section",{"aria-label":o("revisionTitle")},A.default.createElement("h3",null,o("revisionTitle")),A.default.createElement("p",null,o("revisionScope")),A.default.createElement("button",{disabled:v,onClick:()=>k(C=>C+1)},o("revisionLoadRefs")),A.default.createElement("p",null,o("revisionRefsScope")),b&&!v&&!p&&A.default.createElement("p",{role:"status"},h.length?`${o("revisionRefsCount")}: ${h.length}`:o("revisionRefsEmpty")),v&&A.default.createElement("p",{role:"status"},o("loading")),p&&A.default.createElement("p",{role:"alert"},p),[[c,d,"revisionBase"],[n,u,"revisionTarget"]].map(([C,E,N])=>A.default.createElement("label",{key:N},o(N)," ",A.default.createElement("select",{"aria-label":o(N),value:C,onChange:T=>E(T.target.value)},A.default.createElement("option",{value:""},"\u2014"),!!t.length&&A.default.createElement("optgroup",{label:o("revisionLoadedCommits")},t.map(T=>A.default.createElement("option",{key:T.id,value:T.id},T.id.slice(0,10)," \xB7 ",T.subject))),!!h.length&&A.default.createElement("optgroup",{label:o("revisionLocalRefs")},h.map(T=>A.default.createElement("option",{key:T.name,value:T.commit},T.name," \xB7 ",T.commit.slice(0,10)))),C&&!t.some(T=>T.id===C)&&!h.some(T=>T.commit===C)&&A.default.createElement("option",{value:C},C)))),A.default.createElement("button",{disabled:!c||!n,onClick:()=>{d(n),u(c)}},o("revisionSwap")),A.default.createElement("p",{style:{overflowWrap:"anywhere"}},A.default.createElement("code",null,c||"\u2014")," \u2192 ",A.default.createElement("code",null,n||"\u2014")),c&&n&&A.default.createElement(Vr,{key:JSON.stringify([e,s,c,n]),sessionId:e,repositoryId:s,base:c,target:n,rpc:r,t:o,onRediscover:l}))}function ht(t){return x.default.createElement(Yr,{key:JSON.stringify([t.sessionId,t.repositoryId]),...t})}function Yr({sessionId:t,repositoryId:e,rpc:s,t:r,onRediscover:o}){let[l,m]=(0,x.useState)({id:null,path:null,revision:0}),[c,d]=(0,x.useState)(""),[n,u]=(0,x.useState)(null),[h,S]=(0,x.useState)(""),[b,B]=(0,x.useState)(""),f=L=>{let Q=(n||[]).find(X=>JSON.stringify([X.name,X.commit])===L)?.commit||"";B(L),S(Q),p(X=>X?{...X,snapshot:Q||null}:null),oe(0),d(""),T(null),ce({commits:[],snapshot:null,nextOffset:null})},[k,v]=(0,x.useState)({message:"",author:"",path:""}),[g,p]=(0,x.useState)(null),y=L=>{p({values:L,snapshot:K.snapshot}),oe(0),d(""),T(null),ce(q=>({...q,commits:[],nextOffset:null}))},C=(0,x.useMemo)(()=>qt(n||[]),[n]),E=l.id,N=(L,q=null)=>m(Q=>({id:L,path:q,revision:Q.revision+1})),T=(L,q=null)=>m(Q=>({id:L,path:q,revision:Q.revision+(q||Q.path?1:0)})),[K,ce]=(0,x.useState)({commits:[],snapshot:null,nextOffset:null}),[j,oe]=(0,x.useState)(0),[P,ie]=(0,x.useState)(0),[Z,be]=(0,x.useState)(!0),[pe,ye]=(0,x.useState)("");(0,x.useEffect)(()=>{let L=new AbortController;return be(!0),ye(""),s("vcs/history",{sessionId:t,repositoryId:e,offset:j,limit:50,...g?{search:g.values}:{},...g?.snapshot||h||j?{snapshot:g?.snapshot||h||K.snapshot}:{}},L.signal).then(q=>{L.signal.aborted||(ce(Q=>({...q,windowEnd:j+q.commits.length,commits:(j?[...Q.commits.filter(X=>!q.commits.some(De=>De.id===X.id)),...q.commits]:q.commits).slice(-200)})),j>=200&&(T(null),d("")))}).catch(q=>{L.signal.aborted||(ye(q.message),q.code==="vcs/rediscover-required"&&o())}).finally(()=>{L.signal.aborted||be(!1)}),()=>L.abort()},[t,e,j,P,g,h]);let ee=Vt(K.commits,c);return x.default.createElement("section",{className:"vcs-history","aria-label":r("history"),"aria-busy":Z},x.default.createElement("div",{className:"vcs-history-list"},x.default.createElement("p",null,r("historyListOnly")),n!==null&&x.default.createElement("p",null,r("historyRefsScope")),x.default.createElement("label",null,r("historyBranch")," ",x.default.createElement("select",{"aria-label":r("historyBranch"),value:b,disabled:Z,onChange:L=>f(L.target.value)},x.default.createElement("option",{value:""},"HEAD"),b&&!(n||[]).some(L=>JSON.stringify([L.name,L.commit])===b)&&x.default.createElement("option",{value:b},JSON.parse(b)[0]," \xB7 ",h.slice(0,10)," \xB7 ",r("historyPinned")),(n||[]).map(L=>{let q=JSON.stringify([L.name,L.commit]);return x.default.createElement("option",{key:q,value:q},L.name," \xB7 ",L.commit.slice(0,10))}))),x.default.createElement("p",null,r("historyBranchScope"),h&&x.default.createElement(x.default.Fragment,null," \xB7 ",x.default.createElement("code",null,h))),x.default.createElement("form",{"aria-label":r("historyServerSearch"),onSubmit:L=>{L.preventDefault(),y({...k})}},x.default.createElement("fieldset",{disabled:Z},x.default.createElement("legend",null,r("historyServerSearch")),x.default.createElement("p",null,r("historyServerScope")),["message","author","path"].map(L=>x.default.createElement("label",{key:L},r("historyServer_"+L)," ",x.default.createElement("input",{maxLength:1024,"aria-label":r("historyServer_"+L),value:k[L],onChange:q=>v(Q=>({...Q,[L]:q.target.value}))}))),x.default.createElement("button",{type:"submit"},r("historyServerApply")),x.default.createElement("button",{type:"button",onClick:()=>{v({message:"",author:"",path:""}),y({})}},r("historyServerClear")))),g&&x.default.createElement("p",{role:"status"},r("historyServerActive"),": ",JSON.stringify(g.values)," \xB7 ",x.default.createElement("code",null,g.snapshot||K.snapshot)),x.default.createElement("label",null,r("historySearch")," ",x.default.createElement("input",{"aria-label":r("historySearch"),value:c,onChange:L=>{d(L.target.value),T(null)}})),x.default.createElement("span",null," ",ee.length," / ",K.commits.length),!!K.commits.length&&x.default.createElement("p",{role:"status"},r("historyWindow"),": ",Math.max(0,(K.windowEnd??K.commits.length)-K.commits.length),"\u2013",K.windowEnd??K.commits.length," \xB7 ",r("historyWindowScope")),!!K.commits.length&&!ee.length&&x.default.createElement("p",{role:"status"},r("historyNoMatch")),x.default.createElement("ol",null,ee.map(L=>x.default.createElement("li",{key:L.id},x.default.createElement("button",{"aria-pressed":E===L.id,onClick:()=>T(L.id)},L.subject),x.default.createElement("div",null,x.default.createElement("code",{title:L.id},L.id.slice(0,10))," \xB7 ",L.author," \xB7 ",x.default.createElement("time",{dateTime:L.date},L.date)),C.has(L.id)&&x.default.createElement("div",{"aria-label":r("historyRefsLabel"),style:{overflowWrap:"anywhere"}},C.get(L.id).names.map(q=>x.default.createElement("span",{key:q},x.default.createElement("code",null,q)," ")),C.get(L.id).hidden>0&&x.default.createElement("span",null,r("historyRefsMore"),": ",C.get(L.id).hidden))))),Z&&x.default.createElement("p",{role:"status"},r("loading")),pe&&x.default.createElement("p",{role:"alert"},pe," ",x.default.createElement("button",{onClick:()=>ie(L=>L+1)},r("retry"))),!Z&&!pe&&!K.commits.length&&x.default.createElement("p",null,r("historyEmpty")),K.truncated&&x.default.createElement("p",{role:"status"},r("historyLimit")),!pe&&K.nextOffset!==null&&x.default.createElement("button",{disabled:Z,onClick:()=>oe(K.nextOffset)},r("historyMore")),!!K.commits.length&&x.default.createElement(ft,{commits:K.commits,selected:E,onSelect:T,t:r}),x.default.createElement(mt,{onReferencesLoaded:u,commits:K.commits,sessionId:t,repositoryId:e,rpc:s,t:r,onRediscover:o})),x.default.createElement("div",{className:"vcs-history-details"},E&&x.default.createElement(ut,{key:JSON.stringify([E,l.revision]),initialPath:l.path,sessionId:t,repositoryId:e,commit:E,onSelectCommit:N,rpc:s,t:r,onRediscover:o})))}var Qt={zh:{historyWindow:"\u5DF2\u52A0\u8F7D\u5386\u53F2\u7A97\u53E3\uFF08\u5E8F\u53F7\u5DE6\u95ED\u53F3\u5F00\uFF09",historyWindowScope:"\u5217\u8868\u53CA\u56FE\u6700\u591A\u4FDD\u7559200\u6761\uFF1B\u7EE7\u7EED\u52A0\u8F7D\u66FF\u6362\u8F83\u65B0\u884C\uFF0C\u8DE8\u7A97\u53E3\u8FB9\u4E0D\u8868\u793A\u5B8C\u6574\u56FE\u3002\u5C40\u90E8\u7B5B\u9009\u4EC5\u5F53\u524D\u7A97\u53E3\u3002",segments:"\u5206\u6BB5\u6D4F\u89C8\u5386\u53F2\u6B63\u6587",segmentBytes:"\u5B57\u8282\u8303\u56F4\uFF08\u5DE6\u95ED\u53F3\u5F00\uFF09",segmentScope:"\u4EC5\u56FA\u5B9A\u5386\u53F2 UTF-8 \u666E\u901A\u6587\u4EF6\uFF0C\u6700\u5927 16 MiB\uFF1B\u6BCF\u7247\u6700\u591A 64 KiB\uFF0C\u66FF\u6362\u663E\u793A\u4E0D\u7D2F\u79EF\u3002\u7247\u6BB5\u884C\u53F7\u4E0D\u662F\u539F\u6587\u4EF6\u884C\u53F7\uFF0C\u4E0D\u662F\u5168\u6587\u4EF6 Diff\u3002",blameOriginLine:"\u67E5\u770B\u6765\u6E90\u5386\u53F2\u884C",blameUnmapped:"\u65E0\u6CD5\u7CBE\u786E\u5B9A\u4F4D\u6765\u6E90\u884C",blamePrevious:"\u4E0A\u4E00\u884C\u9875",blameNext:"\u4E0B\u4E00\u884C\u9875",fileHistoryMergeBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u5408\u5E76\u63D0\u4EA4\uFF0C\u6B64\u5904\u505C\u6B62\uFF0C\u4E0D\u63A8\u65AD\u591A\u7236\u6765\u6E90",fileHistoryBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u590D\u5236\u6216\u975E\u7CBE\u786E\u91CD\u547D\u540D\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryFollow:"\u8DDF\u968F\u5185\u5BB9\u76F8\u540C\u7684\u91CD\u547D\u540D\uFF08\u7B2C\u4E00\u7236\u94FE\uFF09",fileHistoryFollowScope:"\u4EC5\u8DDF\u968FGit\u68C0\u51FA\u7684100%\u91CD\u547D\u540D\uFF1B\u4E0D\u63A8\u65AD\u76F8\u4F3C\u5185\u5BB9\u3001\u590D\u5236\u6216\u5408\u5E76\u591A\u7236\u6765\u6E90\u3002\u65B0\u589E\u6587\u4EF6\u5904\u505C\u6B62\uFF0C\u53D7\u8F93\u51FA/\u65F6\u95F4\u9650\u5236\uFF1B\u6BCF\u6761\u8BB0\u5F55\u6309\u5F53\u65F6\u8DEF\u5F84\u5B9A\u4F4D\u3002",graphLaneLimit:"\u6CF3\u9053\u6700\u591A32\u6761\uFF1B\u8D85\u51FA\u90E8\u5206\u7701\u7565\u56FE\u5F62\uFF0C\u5B8C\u6574\u5DF2\u52A0\u8F7D\u8282\u70B9\u4E0E\u5173\u7CFB\u4ECD\u53EF\u5728\u6587\u5B57\u4E2D\u67E5\u770B\u3002",historyBranch:"\u5386\u53F2\u8D77\u70B9\uFF08\u672C\u5730\u5F15\u7528\uFF09",historyPinned:"\u56FA\u5B9A\u5FEB\u7167",historyBranchScope:"\u5F15\u7528\u7531\u4E0B\u65B9\u624B\u52A8\u52A0\u8F7D\uFF1B\u9009\u62E9\u540E\u56FA\u5B9A\u8BE5\u6B21OID\uFF0C\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5386\u53F2\u8D77\u70B9\u3002\u9009\u62E9HEAD\u91CD\u65B0\u8BFB\u53D6\u5F53\u524DHEAD\uFF0C\u4E0D\u5207\u6362\u5DE5\u4F5C\u533A\u3002",historyServerSearch:"\u5168\u5386\u53F2\u67E5\u8BE2",historyServerScope:"\u67E5\u8BE2\u56FA\u5B9A\u5FEB\u7167\u53EF\u8FBE\u7684\u5B8C\u6574\u5386\u53F2\uFF1B\u8BF4\u660E/\u4F5C\u8005\u4E3A\u5FFD\u7565\u5927\u5C0F\u5199\u7684\u5B57\u9762\u5339\u914D\uFF0C\u8DEF\u5F84\u4E3A\u7CBE\u786E\u8DEF\u5F84\u6216\u76EE\u5F55\uFF0C\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u3002\u5206\u9875\u4E0E\u8FD0\u884C\u65F6\u95F4\u6709\u754C\u3002",historyServer_message:"\u63D0\u4EA4\u8BF4\u660E",historyServer_author:"\u4F5C\u8005",historyServer_path:"\u8DEF\u5F84",historyServerApply:"\u6267\u884C\u67E5\u8BE2",historyServerClear:"\u6E05\u9664\u67E5\u8BE2",historyServerActive:"\u5F53\u524D\u5DF2\u63D0\u4EA4\u67E5\u8BE2",reviewView:"\u5BA1\u9605\u89C6\u56FE",workspaceView:"\u5DE5\u4F5C\u533A\u6539\u52A8",workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF1B\u9ED8\u8BA4\u9009\u62E9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u5386\u53F2\u6587\u4EF6\u6216\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG \u4E0E 8 \u4F4D\u5355\u626B\u63CF baseline JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757 simple \u9759\u6001 WebP\uFF08\u4E0D\u652F\u6301\u6E10\u8FDB\u5F0F/CMYK JPEG\u3001\u6269\u5C55/\u52A8\u753B WebP\uFF09\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\u652F\u6301\u5386\u53F2\u63D0\u4EA4\u3001\u56FA\u5B9A A/B \u53CA Git \u5DE5\u4F5C\u533A\uFF1B\u6309\u6240\u9009\u6A21\u5F0F\u8BFB\u53D6 HEAD\u3001\u6682\u5B58\u533A\u6216\u5DE5\u4F5C\u6587\u4EF6\u3002\u51B2\u7A81\u56FE\u7247\u4E0D\u652F\u6301\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u4EC5\u672C\u5730\u5206\u652F\u548C\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\uFF0C\u6700\u591A 1000 \u6761\uFF1B\u4E0D fetch\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{historyWindow:"Loaded history window (start inclusive, end exclusive)",historyWindowScope:"List and graph retain at most 200 rows; more loads replace newer rows. Boundary edges are not a complete graph. Local filtering covers this window only.",segments:"Browse historical text segments",segmentBytes:"Byte range (start inclusive, end exclusive)",segmentScope:"Committed UTF-8 regular files up to 16 MiB; replaceable 64 KiB segments. Segment line numbers are not original file lines; this is not a full-file Diff.",blameOriginLine:"View origin historical line",blameUnmapped:"Origin line cannot be located precisely",blamePrevious:"Previous line page",blameNext:"Next line page",fileHistoryMergeBoundary:"Identity boundary: merge commit; stopped without inferring parent origin",fileHistoryBoundary:"Identity boundary: copy or inexact rename; stopped here",fileHistoryFollow:"Follow exact renames (first-parent)",fileHistoryFollowScope:"Only Git-detected 100% renames. No identity inference for similarity, copies or merge-parent origins. Stops at creation; output/runtime bounded. Each row uses its historical path.",graphLaneLimit:"At most 32 lanes. Overflow geometry is omitted; loaded nodes and relations remain available as text.",historyBranch:"History tip (local reference)",historyPinned:"Pinned snapshot",historyBranchScope:"Load references manually below. Selection pins that OID; refreshing references does not move the history tip. Selecting HEAD reads current HEAD without checking out.",historyServerSearch:"Full history query",historyServerScope:"Search all history reachable from the pinned snapshot. Message/author use case-insensitive literal matching; path is an exact path or directory, without rename following. Pagination and runtime are bounded.",historyServer_message:"Commit message",historyServer_author:"Author",historyServer_path:"Path",historyServerApply:"Run query",historyServerClear:"Clear query",historyServerActive:"Submitted query",reviewView:"Review view",workspaceView:"Working changes",workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details with its first parent selected; no automatic historical file or line navigation.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeBreadcrumbs:"Historical directory path",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG or 8-bit single-scan baseline JPEG regular files , or single-chunk simple static WebP (no progressive/CMYK JPEG or extended/animated WebP); at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Supports commits, fixed A/B and Git working changes; HEAD, index or working bytes follow the selected mode. Conflicted images are unsupported.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches and commit tags only, at most 1000 refs; no fetch. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local branches and tags",revisionRefsCount:"Selectable references loaded"}};function Xt(t,e,s,r){let o=t.target;if(!e?.contains(o)||t.defaultPrevented||t.isComposing||o?.closest?.(".monaco-editor")||o?.closest?.(".vcs-history"))return null;if(t.key==="Escape"&&o===s&&r)return"clear";let l=o?.isContentEditable||o?.closest?.('input,textarea,select,[role="textbox"]');if(l&&o!==s)return null;if((t.ctrlKey||t.metaKey)&&!t.altKey&&!t.shiftKey&&t.key?.toLowerCase()==="f")return"search";if(!l&&t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.shiftKey){if(t.key==="ArrowLeft")return"previous";if(t.key==="ArrowRight")return"next"}return null}var $t=t=>"dsh-vcs:project:v1:"+t;function Zt(t,e){if(!t)return"";try{let s=(e??globalThis.localStorage)?.getItem($t(t));return typeof s=="string"&&s.length<=1024?s:""}catch{return""}}function Rt(t,e,s){if(!(!t||!e))try{(s??globalThis.localStorage)?.setItem($t(t),e)}catch{}}function tr(t,e=""){return t.find(s=>s.id===e)?.id||t.find(s=>s.relativePath===".")?.id||t[0]?.id||""}var He=(t,e)=>JSON.stringify([t,e]),Oe=(t,e=".")=>[t.type.toUpperCase(),t.relativePath==="."?e:t.relativePath||".",t.branch].filter(Boolean).join(" \xB7 "),Ke=(t,e="all")=>t.type==="git"&&["staged","unstaged"].includes(e)?e:"all",er=(t="",e="")=>t===e?0:t<e?-1:1;function gt(t=[]){let e={id:"",name:"",directories:new Map,files:[],count:0};for(let r of t){let o=String(r.path||"").split("/").filter(Boolean);if(!o.length)continue;let l=e;for(let m of o.slice(0,-1)){let c=l.id?l.id+"/"+m:m;l.directories.has(m)||l.directories.set(m,{id:c,name:m,directories:new Map,files:[],count:0}),l=l.directories.get(m),l.count++}l.files.push(r)}let s=r=>({...r,directories:[...r.directories.values()].sort((o,l)=>er(o.name,l.name)).map(s),files:[...r.files].sort((o,l)=>er(o.path,l.path))});return s(e)}function rr(t=[],e){let s=t.findIndex(r=>r.id===e);return{index:s<0?0:s+1,total:t.length}}function or(t=[],e,s){if(!t.length||!["previous","next"].includes(s))return null;let r=t.findIndex(m=>m.id===e),o=s==="next"?1:-1,l=r<0?s==="next"?-1:0:r;return t[(l+o+t.length)%t.length]||null}function ir(t=""){let e=String(t).split("/").filter(Boolean);return e.slice(0,-1).map((s,r)=>e.slice(0,r+1).join("/"))}function vt(t,e=[]){for(let s of t?.directories||[])e.push(s.id),vt(s,e);return e}function sr(t=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[t]||t}function nr(t=[]){return t.reduce((e,s)=>{let r=sr(s.status);return e.all++,e[r]=(e[r]||0)+1,e},{all:0})}function Xr(t=[],e="",s="all"){let r=e.toLowerCase();return t.filter(o=>(s==="all"||sr(o.status)===s)&&o.path.toLowerCase().includes(r)).sort((o,l)=>o.path.localeCompare(l.path))}function ar(t,e,s="",r="all"){return t.map(o=>({...e[o.id],repository:o,changes:Xr(e[o.id]?.changes,s,r)}))}function lr(t,e,s=""){if(!s||!t||t.cwd!==e.cwd)return e;let r=new Map(t.repositories.map(o=>[o.id,o]));for(let o of e.repositories)r.set(o.id,o);return{...e,repositories:[...r.values()],truncated:t.truncated||e.truncated,warnings:[...t.warnings||[],...e.warnings||[]]}}function dr(t=2){if(!Number.isInteger(t)||t<1||t>2)throw new RangeError("Status concurrency must be 1 or 2");let e=0,s=[];function r(){for(;e<t&&s.length;){let o=s.shift();if(o.signal?.removeEventListener("abort",o.abort),o.signal?.aborted){o.reject(new Error("Aborted"));continue}e++,Promise.resolve().then(()=>{if(o.signal?.aborted)throw new Error("Aborted");return o.run()}).then(o.resolve,o.reject).finally(()=>{e--,r()})}}return(o,l)=>new Promise((m,c)=>{let d={run:o,signal:l,resolve:m,reject:c,abort:null};if(d.abort=()=>{let n=s.indexOf(d);n>=0&&(s.splice(n,1),c(new Error("Aborted")))},l?.aborted){c(new Error("Aborted"));return}l?.addEventListener("abort",d.abort,{once:!0}),s.push(d),r()})}var cr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},pr=t=>new URL("vcs-assets/"+t,document.baseURI).href;function ur(){return i.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},i.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),i.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var $r=["slots","layout","locale","connection","uiSession"];function Zr(t){t.effect(()=>t.locale.register("local.vcs",Qt));let e=t.locale.bind("local.vcs"),s=dr(2);async function r(c,d,n){let u=await t.connection.rpc.call("/vcs-rpc",c,d,n);if(!u.ok){let h=new Error(u.error?.message||String(u.error||e("error")));throw h.code=u.error?.code,h}return u.value}function o(c){let d=c.useSessions(n=>Object.values(n.byId).find(u=>(u.retainedBy.mainView??0)>0));return i.default.createElement(l,{key:JSON.stringify([d?.id,d?.cwd])},i.default.createElement(m,{session:d}))}class l extends i.default.Component{state={error:null};static getDerivedStateFromError(d){return{error:d}}render(){return this.state.error?i.default.createElement("section",{className:"vcs-root"},i.default.createElement("style",null,nt),i.default.createElement("div",{className:"vcs-message vcs-error"},e("error"),i.default.createElement("button",{onClick:()=>this.setState({error:null})},e("retry")),i.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")))):this.props.children}}function m({session:c}){(0,i.useSyncExternalStore)(a=>t.locale.subscribe(a),()=>t.locale.getSnapshot(),()=>t.locale.getSnapshot());let d=c?.id,[n,u]=(0,i.useState)("all"),[h,S]=(0,i.useState)(0),[b,B]=(0,i.useState)(0),[f,k]=(0,i.useState)(null),[v,g]=(0,i.useState)({}),[p,y]=(0,i.useState)(()=>Zt(c?.cwd)),[C,E]=(0,i.useState)(0),[N,T]=(0,i.useState)(""),[K,ce]=(0,i.useState)(""),[j,oe]=(0,i.useState)(null),[P,ie]=(0,i.useState)(null),[Z,be]=(0,i.useState)(!1),[pe,ye]=(0,i.useState)(!1),[ee,L]=(0,i.useState)(""),[q,Q]=(0,i.useState)(""),[X,De]=(0,i.useState)(""),[bt,yt]=(0,i.useState)(!1),[ne,Ve]=(0,i.useState)(""),[Me,xt]=(0,i.useState)("all"),[ue,wt]=(0,i.useState)(!0),[St,_e]=(0,i.useState)({}),[xe,fr]=(0,i.useState)(!0),[Ye,mr]=(0,i.useState)(!1),[Qe,hr]=(0,i.useState)(!1),[Fe,we]=(0,i.useState)("content"),[kt,Ct]=(0,i.useState)(0),[gr,Nt]=(0,i.useState)(!1),[Xe,$e]=(0,i.useState)({added:0,deleted:0,count:0}),[R,Et]=(0,i.useState)(!1),Lt=(0,i.useRef)(null),At=(0,i.useRef)(null),fe=(0,i.useRef)(null),Ze=(0,i.useRef)(null),Te=(0,i.useRef)(null),Re=(0,i.useRef)(null),Pt=(0,i.useRef)(null),Se=(0,i.useRef)(null),et=(0,i.useRef)(null),tt=(0,i.useRef)(null),rt=(0,i.useRef)(!1),je=(0,i.useRef)(!1),ae=f?.repositories||[],me=ae.filter(a=>a.id===p),te=gr&&me.some(a=>a.type==="git"),vr=()=>{Se.current?.abort(),ie(null),oe(null),Q(""),Nt(!0)};(0,i.useEffect)(()=>{ae.some(a=>a.id===p)&&Rt(c?.cwd,p)},[c?.cwd,p,f]);let ke=()=>{Pt.current?.abort(),Se.current?.abort(),ie(null),oe(null),Q(""),we("content"),$e({added:0,deleted:0,count:0})},We=()=>{je.current=!1,ke(),et.current?.abort(),tt.current=f,k(null),g({}),ce(N.trim()),E(a=>a+1)},Ue=()=>{je.current||(je.current=!0,ke(),et.current?.abort(),tt.current=null,k(null),g({}),ce(""),E(a=>a+1))},Bt=(a=!1)=>{a||B(w=>w+1),rt.current=a,a||ke(),a||g({}),S(w=>w+1)};(0,i.useEffect)(()=>{let a=new AbortController;return et.current=a,L(""),be(!!d),d&&r("vcs/repositories",{sessionId:d,...K?{subdirectory:K}:{}},a.signal).then(w=>{if(!a.signal.aborted){let D=lr(tt.current,w,K);je.current=!1,y(J=>tr(D.repositories,J)),k(D)}}).catch(w=>{a.signal.aborted||L(w.message)}).finally(()=>{a.signal.aborted||be(!1)}),()=>a.abort()},[d,C,K]),(0,i.useEffect)(()=>{let a=new AbortController,w=rt.current;Pt.current=a,rt.current=!1,w||(g({}),Q(""));for(let D of me){let J=Ke(D,n);s(()=>r("vcs/status",{sessionId:d,repositoryId:D.id,mode:J},a.signal),a.signal).then(V=>{a.signal.aborted||g(re=>({...re,[D.id]:{...V,mode:J}}))}).catch(V=>{if(!a.signal.aborted){if(V.code==="vcs/rediscover-required"){Ue();return}g(re=>({...re,[D.id]:{error:V.message,changes:[],mode:J}}))}})}return()=>a.abort()},[d,f,p,n,h]),(0,i.useEffect)(()=>{let a=w=>{w.target===window&&d&&p&&document.visibilityState==="visible"&&Bt(!0)};return window.addEventListener("focus",a),()=>window.removeEventListener("focus",a)},[d,p,n]);let Ce=ae.find(a=>a.id===j?.repositoryId),he=j?v[j.repositoryId]:null;(0,i.useEffect)(()=>{let a=new AbortController;return Se.current=a,ie(null),Q(""),$e({added:0,deleted:0,count:0}),we("content"),ye(!!j&&!!he),!te&&j&&he&&Ce&&r("vcs/compare",{sessionId:d,repositoryId:j.repositoryId,mode:Ke(Ce,n),id:j.id},a.signal).then(w=>{a.signal.aborted||ie(w)}).catch(w=>{if(!a.signal.aborted){if(w.code==="vcs/rediscover-required"){Ue();return}Q(w.message)}}).finally(()=>{a.signal.aborted||ye(!1)}),()=>a.abort()},[j,he,d,n,te]),(0,i.useEffect)(()=>{let a=!1,w,D=new AbortController;Et(!1),De("");let J=document.createElement("link");return J.rel="stylesheet",J.href=pr("editor.css"),document.head.appendChild(J),Ge(pr("editor.js")+"?v="+encodeURIComponent(Ie)+"&retry="+kt,{signal:D.signal}).then(V=>{a||(w=V.createDiff(At.current,{onStats:$e}),fe.current=w,Et(!0))}).catch(V=>{a||De(V.message)}),()=>{a=!0,D.abort(),w?.dispose(),fe.current=null,J.remove()}},[kt]),(0,i.useEffect)(()=>{R&&P&&!P.binary&&fe.current?.setContent(P,JSON.stringify([d,f?.cwd,j?.repositoryId,n,j?.id,P.path]))},[R,P,d,f,j,n]),(0,i.useEffect)(()=>{fe.current?.options({sideBySide:xe,ignoreWhitespace:Ye,wrap:Qe})},[R,xe,Ye,Qe]);let Ne=ar(me,v,ne,Me),ge=Ne.flatMap(a=>a.changes),br=nr(he?.changes),ot=rr(ge,j?.id),Ht=()=>{Ve(""),xt("all")},yr=async()=>{let a=P?.path||se?.path;if(a)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(a);else{let w=document.createElement("textarea");try{if(w.value=a,w.style.cssText="position:fixed;opacity:0",document.body.appendChild(w),w.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{w.remove()}}yt(!0),window.setTimeout(()=>yt(!1),1500)}catch{Q(e("copyFailed"))}};(0,i.useEffect)(()=>{let a=w=>{if(te)return;let D=Xt(w,Lt.current,Te.current,!!ne);D&&(w.preventDefault(),D==="search"?(Te.current?.focus(),Te.current?.select()):D==="clear"?Ve(""):it(D))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[ne,ge,j,te]);let Ot=a=>_e(w=>{let D={...w};for(let J of Ne)for(let V of vt(gt(J.changes)))D[J.repository.id+"\0"+V]=!a;return D}),xr=()=>{let a=se;!a||!j||(wt(!0),Ht(),_e(w=>{let D={...w};for(let J of ir(a.path))D[j.repositoryId+"\0"+J]=!1;return D}),Re.current=He(j.repositoryId,a.id))};(0,i.useEffect)(()=>{let a=Re.current;if(!a)return;let w=[...Ze.current?.querySelectorAll("button[data-vcs-change]")||[]].find(D=>D.dataset.vcsChange===a);w&&(w.scrollIntoView({block:"nearest"}),w.focus(),Re.current=null)},[ue,ne,Me,St,Ne]);let it=a=>{let w=or(ge,j?.id,a);w&&(Se.current?.abort(),ie(null),we("content"),oe({repositoryId:p,id:w.id}))},Dt=Z||me.some(a=>!v[a.id]),se=he?.changes?.find(a=>a.id===j?.id),le=P?.properties,st=le?[...new Set([...Object.keys(le.left||{}),...Object.keys(le.right||{})])].filter(a=>le.left?.[a]!==le.right?.[a]):[],Ee=a=>cr[a?.status]||a?.status?.slice(0,1).toUpperCase()||"M",Mt=P?.binary?[P.left.label,P.right.label].filter(Boolean).join(" \u2194 "):"",ve=q||(pe?e("loading"):d?Dt&&!se?e("loading"):ee||(ae.length?se?P?.binary?e("binary")+(Mt?" "+e("binaryComparison",{files:Mt}):""):P?!R&&!X?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession")),wr=a=>{let w=Ze.current,D=w?[...w.querySelectorAll("button[data-vcs-item]")]:[],J=D.indexOf(a.target);if(J<0)return;let V;if(a.key==="ArrowDown")V=D[J+1];else if(a.key==="ArrowUp")V=D[J-1];else if(a.key==="Home")V=D[0];else if(a.key==="End")V=D.at(-1);else if(a.key==="ArrowRight"&&a.target.dataset.vcsDirectory==="closed"){a.preventDefault(),a.target.click();return}else if(a.key==="ArrowLeft"&&a.target.dataset.vcsDirectory==="open"){a.preventDefault(),a.target.click();return}else return;a.preventDefault(),V?.focus()},Ft=({entry:a,compact:w=!1,depth:D=0})=>{let J=a.path.lastIndexOf("/");return i.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":He(p,a.id),"aria-current":j?.repositoryId===p&&j?.id===a.id?"true":void 0,style:{paddingInlineStart:8+D*14},title:(a.oldPath?a.oldPath+" \u2192 ":"")+a.path+" \xB7 "+e(Ee(a)),onClick:()=>{Se.current?.abort(),ie(null),we("content"),oe({repositoryId:p,id:a.id})}},i.default.createElement("span",{className:"vcs-status","data-status":Ee(a)},Ee(a)),i.default.createElement("span",{className:"vcs-filename"},w?a.path.slice(J+1):a.path,a.oldPath&&i.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",a.oldPath)))},Tt=({node:a,repository:w,depth:D=0})=>i.default.createElement(i.default.Fragment,null,a.directories.map(J=>{let V=w.id+"\0"+J.id,re=!!St[V];return i.default.createElement(i.default.Fragment,{key:V},i.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":re?"closed":"open","aria-expanded":!re,style:{paddingInlineStart:8+D*14},onClick:()=>_e(Sr=>({...Sr,[V]:!re}))},i.default.createElement("span",{"aria-hidden":"true"},re?"\u203A":"\u2304"),J.name,i.default.createElement("small",null,J.count)),!re&&i.default.createElement(Tt,{node:J,repository:w,depth:D+1}))}),a.files.map(J=>i.default.createElement(Ft,{key:He(w.id,J.id),entry:J,compact:a.id!=="",depth:D})));return i.default.createElement("section",{ref:Lt,className:"vcs-root","aria-label":e("title")},i.default.createElement("style",null,nt),i.default.createElement("header",{className:"vcs-top"},i.default.createElement(ur,null),i.default.createElement("h1",{className:"vcs-title"},e("title")),i.default.createElement("span",{className:"vcs-badge"},e("readonly")),i.default.createElement("span",{className:"vcs-spacer"}),i.default.createElement("select",{"aria-label":e("repositories"),value:p,disabled:Z||!ae.length,onChange:a=>{ke(),g({}),y(a.target.value)}},!ae.length&&i.default.createElement("option",{value:""},e("repositories")),ae.map(a=>i.default.createElement("option",{key:a.id,value:a.id},Oe(a,e("workspaceRoot"))))),i.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",i.default.createElement("select",{"aria-label":e("gitMode"),value:n,disabled:te||!me.some(a=>a.type==="git"),onChange:a=>{ke(),g({}),u(a.target.value)}},["all","unstaged","staged"].map(a=>i.default.createElement("option",{key:a,value:a},e(a))))),i.default.createElement("button",{onClick:()=>Bt(!1),disabled:Dt||!d},e("refresh")),i.default.createElement("button",{onClick:()=>t.layout.selectPanel(null)},e("back")),i.default.createElement("div",{className:"vcs-path",title:f?.cwd||c?.cwd},e("session"),": ",f?.cwd||c?.cwd||"\u2014"),i.default.createElement("form",{className:"vcs-discovery",onSubmit:a=>{a.preventDefault(),We()}},i.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:N,onChange:a=>T(a.target.value)}),i.default.createElement("button",{disabled:!d||Z},e("rescan")),i.default.createElement("span",null,e("scanHint"))),f?.truncated&&i.default.createElement("div",{className:"vcs-notice"},e("truncated")),(f?.warnings||[]).map((a,w)=>i.default.createElement("div",{className:"vcs-notice",key:w},typeof a=="string"?a:a.message||JSON.stringify(a)))),me.some(a=>a.type==="git")&&i.default.createElement(i.default.Fragment,null,i.default.createElement("nav",{className:"vcs-review-views","aria-label":e("reviewView")},i.default.createElement("button",{"aria-pressed":!te,onClick:()=>Nt(!1)},e("workspaceView")),i.default.createElement("button",{"aria-pressed":te,"aria-expanded":te,onClick:vr},e("history"))),te&&i.default.createElement(ht,{key:JSON.stringify([d,p,b,C]),sessionId:d,repositoryId:p,rpc:r,t:e,onRediscover:Ue})),i.default.createElement("div",{className:"vcs-body",hidden:te,"aria-label":e("workspaceView")},i.default.createElement("aside",{className:"vcs-files"},i.default.createElement("div",{className:"vcs-filter"},i.default.createElement("input",{ref:Te,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:ne,onChange:a=>Ve(a.target.value)}),(ne||Me!=="all")&&i.default.createElement("button",{className:"vcs-clear-filter",onClick:Ht},e("clearFilters"))),i.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(a=>i.default.createElement("button",{key:a,"aria-pressed":Me===a,onClick:()=>xt(a)},e(a==="all"?"allFiles":cr[a]||"M")," ",i.default.createElement("small",null,br[a]||0)))),i.default.createElement("div",{className:"vcs-count"},i.default.createElement("span",null,ge.length," ",e("files")),i.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),i.default.createElement("button",{"aria-pressed":ue,onClick:()=>wt(!ue)},e(ue?"tree":"list"))),ue&&i.default.createElement("div",{className:"vcs-tree-actions"},i.default.createElement("button",{onClick:()=>Ot(!0)},e("expandAll")),i.default.createElement("button",{onClick:()=>Ot(!1)},e("collapseAll")),i.default.createElement("button",{onClick:xr,disabled:!se},e("revealSelected"))),i.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:Ze,onKeyDown:wr},Ne.map(a=>{let w=a.repository;return i.default.createElement("section",{className:"vcs-repository",key:w.id,"aria-label":Oe(w,e("workspaceRoot"))},i.default.createElement("div",{className:"vcs-repository-heading",title:w.root},i.default.createElement("strong",null,Oe(w,e("workspaceRoot"))),i.default.createElement("small",null,w.type==="svn"?e("svnBase"):e(Ke(w,n)))),a.error?i.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},a.error,i.default.createElement("button",{onClick:We},e("rescan"))):v[w.id]?ue?i.default.createElement(Tt,{node:gt(a.changes),repository:w}):a.changes.map(D=>i.default.createElement(Ft,{key:He(w.id,D.id),entry:D})):i.default.createElement("div",{className:"vcs-message"},e("loading")),!a.error&&v[w.id]&&!a.changes.length&&i.default.createElement("div",{className:"vcs-message"},e(ne?"emptySearch":"clean")))}),!Ne.length&&i.default.createElement("div",{className:"vcs-message"},Z?e("loading"):ee||e(d?"noRepo":"noSession"),ee&&i.default.createElement("button",{onClick:We},e("rescan"))))),i.default.createElement("main",{className:"vcs-detail"},i.default.createElement("div",{className:"vcs-filehead"},i.default.createElement("strong",{title:P?.path||se?.path},Ce?Oe(Ce,e("workspaceRoot"))+" / ":"",P?.path||se?.path||e("pick")),i.default.createElement("button",{className:"vcs-copy-path",disabled:!(P?.path||se?.path),onClick:yr},e(bt?"copied":"copyPath")),bt&&i.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),i.default.createElement("span",{className:"vcs-spacer"}),P&&!P.binary&&R&&i.default.createElement(i.default.Fragment,null,i.default.createElement("span",{className:"vcs-add"},"+",Xe.added),i.default.createElement("span",{className:"vcs-del"},"\u2212",Xe.deleted))),X&&i.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",i.default.createElement("button",{onClick:()=>Ct(a=>a+1)},e("retry")),i.default.createElement("details",null,i.default.createElement("summary",null,e("diagnostics")),X)),P&&i.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},i.default.createElement("span",{className:"vcs-context-status","data-status":Ee(P)},e(Ee(P))),P.oldPath&&i.default.createElement("span",{className:"vcs-context-rename",title:P.oldPath+" \u2192 "+P.path},P.oldPath," ",i.default.createElement("b",null,"\u2192")," ",P.path),i.default.createElement("span",null,P.left.label||"\u2014"," ",i.default.createElement("b",null,"\u2194")," ",P.right.label||"\u2014"),(P.left.encoding||P.right.encoding)&&i.default.createElement("span",null,e("encoding"),": ",P.left.encoding||"\u2014"," / ",P.right.encoding||"\u2014")),P&&Ce?.type==="git"&&i.default.createElement(Ae,{key:JSON.stringify([d,f?.cwd,j.repositoryId,n,j.id,h,he]),workspace:!0,sessionId:d,repositoryId:j.repositoryId,mode:n,id:j.id,rpc:r,t:e,onRediscover:Ue}),P?.notice&&i.default.createElement("div",{className:"vcs-notice"},P.notice),st.length>0&&i.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(a=>i.default.createElement("button",{key:a,"aria-pressed":Fe===a,onClick:()=>we(a)},e(a),a==="properties"?" ("+st.length+")":""))),i.default.createElement("div",{className:"vcs-labels"},i.default.createElement("span",null,P?.left.label||"\u2014",P?.left.encoding?" \xB7 "+P.left.encoding:""),i.default.createElement("span",null,P?.right.label||"\u2014",P?.right.encoding?" \xB7 "+P.right.encoding:"")),i.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!ve||Fe!=="content",style:Fe==="properties"?{display:"none"}:void 0},i.default.createElement("div",{className:"vcs-editor",ref:At,style:X?{display:"none"}:void 0}),X&&P&&!P.binary&&!ve&&i.default.createElement(Le,{comparison:P,labels:qe(e)}),ve&&i.default.createElement("div",{className:"vcs-message "+(ee||q||X?"vcs-error":""),role:"status"},ve,(ee||q||X)&&i.default.createElement("button",{onClick:()=>X?Ct(a=>a+1):We()},e(X?"retry":"rescan")))),Fe==="properties"&&i.default.createElement("div",{className:"vcs-properties"},i.default.createElement("table",null,i.default.createElement("thead",null,i.default.createElement("tr",null,i.default.createElement("th",null,e("properties")),i.default.createElement("th",null,P?.left.label||e("before")),i.default.createElement("th",null,P?.right.label||e("after")))),i.default.createElement("tbody",null,st.map(a=>i.default.createElement("tr",{key:a},i.default.createElement("th",null,a),i.default.createElement("td",null,le.left?.[a]??"\u2014"),i.default.createElement("td",null,le.right?.[a]??"\u2014")))))),i.default.createElement("footer",{className:"vcs-toolbar"},i.default.createElement("button",{disabled:!R,"aria-pressed":xe,onClick:()=>fr(!xe)},e(xe?"side":"inline")),i.default.createElement("label",null,i.default.createElement("input",{type:"checkbox",disabled:!R,checked:Ye,onChange:a=>mr(a.target.checked)}),e("whitespace")),i.default.createElement("label",null,i.default.createElement("input",{type:"checkbox",disabled:!R,checked:Qe,onChange:a=>hr(a.target.checked)}),e("wrap")),i.default.createElement("span",{className:"vcs-spacer"}),R&&i.default.createElement("span",null,Xe.count," ",e("changes")),i.default.createElement("button",{disabled:!R||!P||!!ve,onClick:()=>fe.current?.navigate("previous")},e("previous")),i.default.createElement("button",{disabled:!R||!P||!!ve,onClick:()=>fe.current?.navigate("next")},e("next")),ot.index>0&&i.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:ot.index,total:ot.total})),i.default.createElement("span",{className:"vcs-toolbar-separator"}),i.default.createElement("button",{title:e("fileShortcut"),disabled:!ge.length,onClick:()=>it("previous")},e("previousFile")),i.default.createElement("button",{title:e("fileShortcut"),disabled:!ge.length,onClick:()=>it("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},ur))}
|
|
95
|
+
`;function Qt(e,t){return async(o,r,s)=>{let a=await e.rpc.call("/vcs-rpc",o,r,s);if(!a.ok){let p=new Error(a.error?.message||String(a.error||t()));throw p.code=a.error?.code,p}return a.value}}function ut(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let t=0,o=[];function r(){for(;t<e&&o.length;){let s=o.shift();if(s.signal?.removeEventListener("abort",s.abort),s.signal?.aborted){s.reject(new Error("Aborted"));continue}t++,Promise.resolve().then(()=>{if(s.signal?.aborted)throw new Error("Aborted");return s.run()}).then(s.resolve,s.reject).finally(()=>{t--,r()})}}return(s,a)=>new Promise((p,f)=>{let d={run:s,signal:a,resolve:p,reject:f,abort:null};if(d.abort=()=>{let i=o.indexOf(d);i>=0&&(o.splice(i,1),f(new Error("Aborted")))},a?.aborted){f(new Error("Aborted"));return}a?.addEventListener("abort",d.abort,{once:!0}),o.push(d),r()})}var X=R(require("react"),1);function Xt(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function $t(e="",t=""){let o=Xt(e),r=Xt(t),s=0;for(;s<o.length&&s<r.length&&o[s]===r[s];)s++;let a=0;for(;a<o.length-s&&a<r.length-s&&o[o.length-a-1]===r[r.length-a-1];)a++;let p=o.length-a,f=r.length-a,d=p-s,i=f-s,c=d&&i?(d+1)*(i+1):0,m=c>2e5,w=[],g=0;function S(u,y){g++,!(w.length>=2e3)&&w.push({left:u===null?null:{number:u+1,text:o[u]},right:y===null?null:{number:y+1,text:r[y]},kind:u===null?"insert":y===null?"delete":o[u]===r[y]?"equal":"replace"})}for(let u=0;u<s;u++)S(u,u);if(m||!d||!i)for(let u=0;u<Math.max(d,i);u++)S(u<d?s+u:null,u<i?s+u:null);else{let u=i+1,y=new Uint32Array(c);for(let h=d-1;h>=0;h--)for(let x=i-1;x>=0;x--)y[h*u+x]=o[s+h]===r[s+x]?y[(h+1)*u+x+1]+1:Math.max(y[(h+1)*u+x],y[h*u+x+1]);let v=0,b=0;for(;v<d||b<i;)v<d&&b<i&&o[s+v]===r[s+b]?S(s+v++,s+b++):v<d&&(b===i||y[(v+1)*u+b]>=y[v*u+b+1])?S(s+v++,null):S(null,s+b++)}for(let u=0;u<a;u++)S(p+u,f+u);return{rows:w,approximate:m,truncated:g>w.length,totalRows:g,omittedRows:g-w.length,leftLineCount:o.length,rightLineCount:r.length,lcsCells:m?0:c}}var _r={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."},ft={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Yr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Qr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Xr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Be({comparison:e,labels:t={}}){let o=e?.left?.text??"",r=e?.right?.text??"",s=(0,X.useMemo)(()=>$t(o,r),[o,r]),a=f=>t[f]??_r[f],p=(f,d,i)=>{let c=f&&i!=="equal";return X.default.createElement("td",{style:{...ft,background:c?d==="left"?"#d6454520":"#259b4920":void 0}},X.default.createElement("div",{style:Yr},X.default.createElement("span",{style:Qr},f?.number??""),X.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},c?d==="left"?"\u2212":"+":""),X.default.createElement("pre",{style:Xr},f?.text??"")))};return X.default.createElement("section",{className:"vcs-text-comparison","aria-label":a("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},s.approximate&&X.default.createElement("div",{role:"status",style:{padding:8}},a("approximate")),s.truncated&&X.default.createElement("div",{role:"status",style:{padding:8}},a("truncated")," (",2e3," / ",s.totalRows,")"),X.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},X.default.createElement("thead",null,X.default.createElement("tr",null,X.default.createElement("th",{scope:"col",style:{...ft,padding:8,overflowWrap:"anywhere"}},e?.left?.label||a("before")),X.default.createElement("th",{scope:"col",style:{...ft,padding:8,overflowWrap:"anywhere"}},e?.right?.label||a("after")))),X.default.createElement("tbody",null,s.rows.map((f,d)=>X.default.createElement("tr",{key:d,"data-kind":f.kind},p(f.left,"left",f.kind),p(f.right,"right",f.kind))))),!s.rows.length&&X.default.createElement("p",{style:{padding:8}},a("empty")))}var W=R(require("react"),1);function Zt(e,{width:t,height:o,signal:r,timeoutMs:s=1e4,createURL:a=d=>URL.createObjectURL(d),revokeURL:p=d=>URL.revokeObjectURL(d),createImage:f=()=>new Image}={}){return new Promise((d,i)=>{if(r?.aborted){i(r.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(t)||!Number.isInteger(o)||t<1||o<1||t>8192||o>8192||t*o>16e6||!Number.isFinite(s)||s<=0){i(new Error("Invalid image preview"));return}let c,m,w,g=!1,S=!1,u=()=>{S||(S=!0,m&&(m.src=""),c&&p(c))},y=()=>{clearTimeout(w),r?.removeEventListener("abort",b)},v=h=>{g||(g=!0,y(),u(),i(h))},b=()=>v(r.reason||new Error("Image cancelled"));try{c=a(e),m=f(),r?.addEventListener("abort",b,{once:!0}),w=setTimeout(()=>v(new Error("Image decode timed out")),s),m.src=c,Promise.resolve(m.decode()).then(()=>{if(!g){if(r?.aborted){b();return}if(m.naturalWidth!==t||m.naturalHeight!==o){v(new Error("Image dimensions mismatch"));return}g=!0,y(),d({url:c,dispose:u})}},v)}catch(h){v(h)}})}function $r({side:e,sessionId:t,repositoryId:o,commit:r,parentIndex:s,base:a,target:p,workspace:f=!1,mode:d,id:i,rpc:c,t:m,onRediscover:w}){let[g,S]=(0,W.useState)(null),[u,y]=(0,W.useState)(""),[v,b]=(0,W.useState)(0);return(0,W.useEffect)(()=>{let h=new AbortController,x;return S(null),y(""),(async()=>{let k=await c(f?"vcs/workspace-image":a?"vcs/revision-image":"vcs/commit-image",f?{sessionId:t,repositoryId:o,mode:d,id:i,side:e}:a?{sessionId:t,repositoryId:o,base:a,target:p,id:i,side:e}:{sessionId:t,repositoryId:o,commit:r,parentIndex:s,id:i,side:e},h.signal);if(h.signal.aborted)return;if(k.absent){S(k);return}if(!["image/png","image/jpeg","image/webp"].includes(k.mime)||typeof k.base64!="string"||k.base64.length>2796204||!Number.isInteger(k.bytes)||k.bytes<1||k.bytes>2097152)throw Error(m("imageInvalid"));let O=atob(k.base64);if(O.length!==k.bytes)throw Error(m("imageInvalid"));let N=new Blob([Uint8Array.from(O,q=>q.charCodeAt(0))],{type:k.mime});if(x=await Zt(N,{width:k.width,height:k.height,signal:h.signal}),h.signal.aborted){x.dispose();return}S({...k,url:x.url})})().catch(k=>{h.signal.aborted||(y(k.message),k.code==="vcs/rediscover-required"&&w())}),()=>{h.abort(),x?.dispose()}},[e,t,o,r,s,a,p,f,d,i,v]),W.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":m(e==="left"?"imageBefore":"imageAfter")},W.default.createElement("h5",null,m(e==="left"?"imageBefore":"imageAfter")),u?W.default.createElement("p",{role:"alert"},u," ",W.default.createElement("button",{onClick:()=>b(h=>h+1)},m("retry"))):g?W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,W.default.createElement("code",null,g.commit)," \xB7 ",g.path),g.absent?W.default.createElement("p",null,m("imageAbsent")):W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,g.width," \xD7 ",g.height," \xB7 ",g.bytes," B"),W.default.createElement("img",{src:g.url,alt:g.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),g.metadataStripped&&W.default.createElement("p",null,m("imageMetadata")))):W.default.createElement("p",{role:"status"},m("loading")))}function Fe(e){let[t,o]=(0,W.useState)(!1);return W.default.createElement("div",null,W.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("imageCompare")),t&&W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,e.t("imageScope")),W.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(r=>W.default.createElement($r,{key:r,...e,side:r})))))}function ze(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var G=R(require("react"),1);function mt(e){return G.default.createElement(Zr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Zr({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:s}){let[a,p]=(0,G.useState)(!1),[f,d]=(0,G.useState)(null),[i,c]=(0,G.useState)(""),[m,w]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!a)return;let g=new AbortController;return d(null),c(""),o("vcs/svn-identity",{sessionId:e,repositoryId:t},g.signal).then(S=>{g.signal.aborted||d(S)}).catch(S=>{g.signal.aborted||(c(S.message),S.code==="vcs/rediscover-required"&&s())}),()=>g.abort()},[a,e,t,m]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":a,onClick:()=>p(g=>!g)},r("svnIdentity")),a&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,r("svnOfflineIdentity")),i?G.default.createElement("p",{role:"alert"},i," ",G.default.createElement("button",{onClick:()=>w(g=>g+1)},r("retry"))):f?G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(g=>G.default.createElement(G.default.Fragment,{key:g},G.default.createElement("dt",null,g),G.default.createElement("dd",null,G.default.createElement("code",null,f[g]))))),G.default.createElement("p",{role:"status"},r("svnRemoteDisabled"))):G.default.createElement("p",{role:"status"},r("loading"))))}function Ke(e,t,{now:o=Date.now,schedule:r=setTimeout,cancel:s=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=o()||e-o()>3e5)throw Error("Invalid SVN consent expiry");let a=!0,p=r(()=>{a&&(a=!1,t())},e-o());return()=>{a&&(a=!1,s(p))}}function Rt(e,t=Date.now()){if(!e||typeof e.token!="string"||!/^[a-f0-9]{64}$/.test(e.token)||typeof e.snapshot!="string"||!/^(0|[1-9][0-9]*)$/.test(e.snapshot)||BigInt(e.snapshot)>9223372036854775807n||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=t||e.expiresAt-t>3e5)throw Error("Invalid SVN consent response");return e}var Q=R(require("react"),1);var M=R(require("react"),1);function ht(e){return M.default.createElement(Rr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Rr({sessionId:e,repositoryId:t,rpc:o,t:r,onApproved:s,onRediscover:a}){let[p,f]=(0,M.useState)(!1),[d,i]=(0,M.useState)(null),[c,m]=(0,M.useState)(!1),[w,g]=(0,M.useState)(""),[S,u]=(0,M.useState)(!1),[y,v]=(0,M.useState)(0);(0,M.useEffect)(()=>{if(!p)return;let x=new AbortController;return i(null),m(!1),g(""),u(!0),o("vcs/svn-describe",{sessionId:e,repositoryId:t},x.signal).then(k=>{x.signal.aborted||i(k)}).catch(k=>{x.signal.aborted||(g(k.message),k.code==="vcs/rediscover-required"&&a())}).finally(()=>{x.signal.aborted||u(!1)}),()=>x.abort()},[p,e,t,y]);let[b,h]=(0,M.useState)(0);return(0,M.useEffect)(()=>{if(!p||!d||d.expiresAt===void 0)return;let x=()=>{i(null),m(!1),h(0),u(!1),g(r("svnOfferExpired"))};try{return Ke(d.expiresAt,x)}catch{x()}},[p,d]),(0,M.useEffect)(()=>{if(!b||!p||!d)return;let x=new AbortController;return u(!0),g(""),o("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:d.offer,explicit:!0},x.signal).then(k=>{x.signal.aborted||s(k)}).catch(k=>{x.signal.aborted||(g(k.message),m(!1),k.code==="vcs/rediscover-required"&&a())}).finally(()=>{x.signal.aborted||u(!1)}),()=>x.abort()},[b,p,d]),M.default.createElement("section",null,M.default.createElement("button",{"aria-expanded":p,onClick:()=>{h(0),f(x=>!x)}},r("svnConsentReview")),p&&M.default.createElement(M.default.Fragment,null,M.default.createElement("p",null,r("svnConsentScope")),w&&M.default.createElement("p",{role:"alert"},w," ",M.default.createElement("button",{disabled:S,onClick:()=>{h(0),v(x=>x+1)}},r("retry"))),d&&M.default.createElement(M.default.Fragment,null,M.default.createElement("dl",null,["origin","root","uuid","scope"].map(x=>M.default.createElement(M.default.Fragment,{key:x},M.default.createElement("dt",null,x),M.default.createElement("dd",null,M.default.createElement("code",null,d[x]))))),d.remoteEnabled?M.default.createElement(M.default.Fragment,null,M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:c,disabled:S,onChange:x=>m(x.target.checked)}),r("svnConsentExplicit")),M.default.createElement("button",{disabled:S||!c,onClick:()=>h(x=>x+1)},r("svnConsentApprove"))):M.default.createElement("p",{role:"status"},r("svnRemoteDisabled"))),S&&M.default.createElement("p",{role:"status"},r("loading"))))}var A=R(require("react"),1);var Y=R(require("react"),1);var ne=require("react");function er({load:e,node:t,comparison:o,key:r,single:s=!1,onReady:a=()=>{},onError:p=()=>{}}){let f=new AbortController,d,i=!1,c=()=>{let w=d;d=void 0,w?.dispose()};return{done:Promise.resolve().then(()=>(f.signal.throwIfAborted(),e(f.signal))).then(w=>{i||(d=w.createDiff(t,{single:s}),d.setContent(o,r),i||a(d))}).catch(w=>{try{c()}finally{i||p(w)}}),dispose(){i||(i=!0,f.abort(),c())}}}async function _e(e,{signal:t,fetcher:o=fetch,importer:r=s=>import(s)}={}){let s=await o(e,{credentials:"same-origin",cache:"no-cache",signal:t});if(!s.ok)throw new Error("Editor resource HTTP "+s.status+" ("+e+"). "+(s.status===401?"Refresh the authenticated DSH page.":s.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let a=s.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(a))throw new Error("Editor resource returned "+(a||"no Content-Type")+" instead of JavaScript.");return await s.arrayBuffer(),t?.throwIfAborted(),r(e)}var Ye="0.3.67";function tr({comparison:e,identity:t,enabled:o,single:r,line:s,sideBySide:a,ignoreWhitespace:p,wrap:f}){let d=(0,ne.useRef)(null),i=(0,ne.useRef)(null),[c,m]=(0,ne.useState)(!1),[w,g]=(0,ne.useState)("");return(0,ne.useEffect)(()=>{if(m(!1),g(""),!o)return;let S=v=>new URL("vcs-assets/"+v,document.baseURI).href,u=document.createElement("link");u.rel="stylesheet",u.href=S("editor.css"),document.head.appendChild(u);let y=er({node:d.current,comparison:e,key:t,single:r,load:v=>_e(S("editor.js")+"?v="+encodeURIComponent(Ye)+"&retry=0",{signal:v}),onReady:v=>{i.current=v,m(!0)},onError:v=>g(v.message)});return()=>{i.current=null;try{y.dispose()}finally{u.remove()}}},[o,e,t,r]),(0,ne.useEffect)(()=>{c&&r&&s&&i.current?.revealLine(s)},[c,r,s]),(0,ne.useEffect)(()=>{c&&i.current?.options({sideBySide:a,ignoreWhitespace:p,wrap:f})},[c,a,p,f]),{node:d,viewer:i,ready:c,error:w}}function le({comparison:e,identity:t,t:o,single:r=!1,line:s=null}){let[a,p]=(0,Y.useState)(!0),[f,d]=(0,Y.useState)(!1),[i,c]=(0,Y.useState)(!1),[m,w]=(0,Y.useState)(!0),{node:g,viewer:S,ready:u,error:y}=tr({comparison:e,identity:t,enabled:m,single:r,line:s,sideBySide:a,ignoreWhitespace:f,wrap:i});return Y.default.createElement("div",null,Y.default.createElement("button",{"aria-pressed":m,onClick:()=>w(v=>!v)},o(m?"historyBasic":"historyAdvanced")),u&&!r&&Y.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},Y.default.createElement("button",{"aria-pressed":a,onClick:()=>p(v=>!v)},o(a?"side":"inline")),Y.default.createElement("label",null,Y.default.createElement("input",{type:"checkbox",checked:f,onChange:v=>d(v.target.checked)}),o("whitespace")),Y.default.createElement("label",null,Y.default.createElement("input",{type:"checkbox",checked:i,onChange:v=>c(v.target.checked)}),o("wrap")),Y.default.createElement("button",{onClick:()=>S.current?.navigate("previous")},o("previous")),Y.default.createElement("button",{onClick:()=>S.current?.navigate("next")},o("next"))),m&&!u&&!y&&Y.default.createElement("p",{role:"status"},o("loading")),y&&Y.default.createElement("p",{role:"status"},o("fallback")," ",y),Y.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},Y.default.createElement("div",{ref:g,style:{position:"absolute",inset:0,visibility:u?"visible":"hidden"},"aria-hidden":!u}),!u&&Y.default.createElement(Be,{comparison:e,labels:ze(o)})))}function vt(e){return A.default.createElement(to,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function to({sessionId:e,repositoryId:t,token:o,snapshot:r,rpc:s,t:a,onRediscover:p}){let[f,d]=(0,A.useState)(r),[i,c]=(0,A.useState)(null),[m,w]=(0,A.useState)(null),[g,S]=(0,A.useState)(""),[u,y]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let v=new AbortController;return c(null),w(null),S(""),s("vcs/svn-log",{sessionId:e,repositoryId:t,token:o,snapshot:r,cursor:f,limit:50},v.signal).then(b=>{v.signal.aborted||c(b)}).catch(b=>{v.signal.aborted||(S(b.message),b.code==="vcs/rediscover-required"&&p())}),()=>v.abort()},[f,u]),A.default.createElement("section",null,A.default.createElement("p",null,a("svnHistoryScope")," \xB7 r",r),g?A.default.createElement("p",{role:"alert"},g," ",A.default.createElement("button",{onClick:()=>y(v=>v+1)},a("retry"))):i?A.default.createElement(A.default.Fragment,null,A.default.createElement("ol",null,i.entries.map(v=>A.default.createElement("li",{key:v.revision},A.default.createElement("button",{onClick:()=>w(v.revision)},"r",v.revision," \xB7 ",v.message)))),i.nextRevision!==null&&A.default.createElement("button",{onClick:()=>d(i.nextRevision)},a("historyMore"))):A.default.createElement("p",{role:"status"},a("loading")),m&&A.default.createElement(ro,{key:m,sessionId:e,repositoryId:t,token:o,snapshot:r,rpc:s,t:a,onRediscover:p,revision:m}))}function ro({sessionId:e,repositoryId:t,token:o,snapshot:r,revision:s,rpc:a,t:p,onRediscover:f}){let[d,i]=(0,A.useState)(null),[c,m]=(0,A.useState)(null),[w,g]=(0,A.useState)(""),[S,u]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let y=new AbortController;return i(null),m(null),g(""),a("vcs/svn-detail",{sessionId:e,repositoryId:t,token:o,snapshot:r,revision:s},y.signal).then(v=>{y.signal.aborted||i(v)}).catch(v=>{y.signal.aborted||(g(v.message),v.code==="vcs/rediscover-required"&&f())}),()=>y.abort()},[S]),A.default.createElement("section",null,w?A.default.createElement("p",{role:"alert"},w," ",A.default.createElement("button",{onClick:()=>u(y=>y+1)},p("retry"))):d?A.default.createElement(A.default.Fragment,null,A.default.createElement("p",null,d.message),d.changes.map(y=>A.default.createElement("div",{key:y.id},A.default.createElement("span",null,y.action," ",y.path),y.kind==="file"&&A.default.createElement(A.default.Fragment,null,A.default.createElement("button",{onClick:()=>m({id:y.id,mode:"compare"})},p("svnHistoricalDiff")),A.default.createElement("button",{onClick:()=>m({id:y.id,mode:"trace"})},p("fileHistory")))))):A.default.createElement("p",{role:"status"},p("loading")),c&&A.default.createElement(oo,{key:JSON.stringify(c),sessionId:e,repositoryId:t,token:o,snapshot:r,revision:s,rpc:a,t:p,onRediscover:f,...c}))}function oo({sessionId:e,repositoryId:t,token:o,snapshot:r,revision:s,rpc:a,t:p,onRediscover:f,id:d,mode:i}){let[c,m]=(0,A.useState)(null),[w,g]=(0,A.useState)(null),[S,u]=(0,A.useState)(""),[y,v]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let b=new AbortController;return m(null),u(""),a("vcs/svn-"+i,{sessionId:e,repositoryId:t,token:o,snapshot:r,revision:s,id:d,...w===null?{}:{cursor:w}},b.signal).then(h=>{b.signal.aborted||m(h)}).catch(h=>{b.signal.aborted||(u(h.message),h.code==="vcs/rediscover-required"&&f())}),()=>b.abort()},[w,y]),S?A.default.createElement("p",{role:"alert"},S," ",A.default.createElement("button",{onClick:()=>v(b=>b+1)},p("retry"))):c?i==="compare"?c.binary?A.default.createElement("p",null,p("binary")):A.default.createElement(le,{comparison:c,identity:JSON.stringify([e,t,r,s,d]),t:p}):A.default.createElement("section",null,A.default.createElement("p",null,p("svnTraceScope")," \xB7 ",c.path," \xB7 peg r",c.pegRevision),A.default.createElement("ol",null,c.entries.map(b=>A.default.createElement("li",{key:b.revision},"r",b.revision," \xB7 ",b.message))),c.nextRevision!==null&&A.default.createElement("button",{onClick:()=>g(c.nextRevision)},p("historyMore"))):A.default.createElement("p",{role:"status"},p("loading"))}function gt(e){return Q.default.createElement(so,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function so({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:s}){let[a,p]=(0,Q.useState)(null),[f,d]=(0,Q.useState)(!1),[i,c]=(0,Q.useState)(""),[m,w]=(0,Q.useState)(0);(0,Q.useEffect)(()=>{if(a)return()=>{Promise.resolve().then(()=>o("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:a.token})).catch(()=>{})}},[a,e,t]),(0,Q.useEffect)(()=>{if(a)try{return Ke(a.expiresAt,()=>{p(null),w(0),d(!1),c(r("svnExpired"))})}catch{p(null),c(r("svnExpired"))}},[a]),(0,Q.useEffect)(()=>{if(!m||!a)return;let u=new AbortController;return d(!0),c(""),o("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:a.token},u.signal).then(()=>{u.signal.aborted||p(null)}).catch(y=>{u.signal.aborted||(c(y.message),y.code==="vcs/rediscover-required"&&s())}).finally(()=>{u.signal.aborted||d(!1)}),()=>u.abort()},[m,a]);let g=u=>{try{Rt(u),c(""),w(0),p(u)}catch(y){c(y.message)}},S=async(...u)=>{try{return await o(...u)}catch(y){throw y.code==="vcs/svn-consent-required"&&!u[2]?.aborted&&(p(null),w(0),c(r("svnExpired"))),y}};return Q.default.createElement("section",null,!a&&i&&Q.default.createElement("p",{role:"status"},i),a?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,r("svnGrantScope")),Q.default.createElement("button",{disabled:f,onClick:()=>w(u=>u+1)},r("svnRevoke")),i&&Q.default.createElement("p",{role:"alert"},i),!f&&Q.default.createElement(vt,{sessionId:e,repositoryId:t,t:r,onRediscover:s,rpc:S,token:a.token,snapshot:a.snapshot})):Q.default.createElement(ht,{sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:s,onApproved:g}))}var C=R(require("react"),1);function rr(e){let t=new Map;for(let o of e){let r=t.get(o.commit);r||(r={names:[],hidden:0},t.set(o.commit,r)),r.names.length<3?r.names.push(o.name):r.hidden++}return t}var T=R(require("react"),1);var B=R(require("react"),1);var V=R(require("react"),1);var U=R(require("react"),1);function bt(e){return U.default.createElement(io,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function io({sessionId:e,repositoryId:t,commit:o,path:r,rpc:s,t:a,onRediscover:p}){let[f,d]=(0,U.useState)(!1),[i,c]=(0,U.useState)([0]),[m,w]=(0,U.useState)(null),[g,S]=(0,U.useState)(""),[u,y]=(0,U.useState)(0),v=i.at(-1);(0,U.useEffect)(()=>{if(!f)return;let h=new AbortController;return w(null),S(""),s("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:o,path:r,offset:v},h.signal).then(x=>{h.signal.aborted||w(x)}).catch(x=>{h.signal.aborted||(S(x.message),x.code==="vcs/rediscover-required"&&p())}),()=>h.abort()},[f,v,e,t,o,r,u]);let b=(0,U.useMemo)(()=>m?{path:r,left:{label:o,text:m.text},right:{label:o,text:m.text}}:null,[m,r,o]);return U.default.createElement("section",null,U.default.createElement("button",{"aria-expanded":f,onClick:()=>d(h=>!h)},a("segments")),f&&U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,a("segmentScope")),g?U.default.createElement("p",{role:"alert"},g," ",U.default.createElement("button",{onClick:()=>y(h=>h+1)},a("retry"))):m?U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,a("segmentBytes"),": ",m.offset,"\u2013",m.endOffset," / ",m.totalBytes," \xB7 ",U.default.createElement("code",null,m.oid)),U.default.createElement("button",{disabled:i.length===1,onClick:()=>c(h=>h.slice(0,-1))},a("previous")),U.default.createElement("button",{disabled:m.nextOffset===null,onClick:()=>c(h=>[...h,m.nextOffset])},a("next")),U.default.createElement(le,{single:!0,comparison:b,identity:JSON.stringify([e,t,o,r,v]),t:a})):U.default.createElement("p",{role:"status"},a("loading"))))}function Me({sessionId:e,repositoryId:t,commit:o,path:r,rpc:s,t:a,onRediscover:p,onClose:f,line:d=null}){let[i,c]=(0,V.useState)(null),[m,w]=(0,V.useState)(""),[g,S]=(0,V.useState)(0);(0,V.useEffect)(()=>{let y=new AbortController;return c(null),w(""),s("vcs/tree-file",{sessionId:e,repositoryId:t,commit:o,path:r},y.signal).then(v=>{y.signal.aborted||c(v)}).catch(v=>{y.signal.aborted||(w(v.message),v.code==="vcs/rediscover-required"&&p())}),()=>y.abort()},[e,t,o,r,g]);let u=(0,V.useMemo)(()=>i?{path:r,left:{label:o,text:i.text||""},right:{label:o,text:i.text||""}}:null,[i,r,o]);return V.default.createElement("section",{"aria-label":a("treePreview")},V.default.createElement("h4",null,r),V.default.createElement("button",{onClick:f},a("treeClose")),V.default.createElement("p",null,V.default.createElement("code",null,o)),m?V.default.createElement("p",{role:"alert"},m," ",V.default.createElement("button",{onClick:()=>S(y=>y+1)},a("retry"))):i?V.default.createElement(V.default.Fragment,null,V.default.createElement("p",null,V.default.createElement("code",null,i.oid)," \xB7 ",a("encoding"),": ",i.encoding||"\u2014"),d&&V.default.createElement("p",{role:"status"},a("blameOriginLine"),": ",d,!i.text||d>i.text.split(`
|
|
96
|
+
`).length?" \xB7 "+a("blameUnmapped"):""),i.notice&&V.default.createElement("p",{role:"status"},i.notice),i.binary?V.default.createElement("p",null,a("binary")):i.text===""?V.default.createElement("p",null,a("treeEmpty")):V.default.createElement(le,{single:!0,line:d,comparison:u,identity:JSON.stringify([e,t,o,r]),t:a})):V.default.createElement("p",{role:"status"},a("loading")),V.default.createElement(bt,{sessionId:e,repositoryId:t,commit:o,path:r,rpc:s,t:a,onRediscover:p}))}function or(e=""){let t=[{path:"",name:"/"}];if(e){let o="";for(let r of e.split("/"))o=o?o+"/"+r:r,t.push({path:o,name:r})}return t}function sr(e,t="",o=""){let r=t?t+"/":"",s=o.toLowerCase();return e.filter(a=>{let p=a.path.slice(r.length);return a.path.startsWith(r)&&p.length>0&&!p.includes("/")&&p.toLowerCase().includes(s)}).sort((a,p)=>+(p.type==="tree")-+(a.type==="tree")||(a.path<p.path?-1:a.path>p.path?1:0))}function no({sessionId:e,repositoryId:t,commit:o,rpc:r,t:s,onRediscover:a}){let[p,f]=(0,B.useState)(null),[d,i]=(0,B.useState)(""),[c,m]=(0,B.useState)(0),[w,g]=(0,B.useState)(""),[S,u]=(0,B.useState)(0),[y,v]=(0,B.useState)(""),[b,h]=(0,B.useState)(null);if((0,B.useEffect)(()=>{let N=new AbortController;return f(null),i(""),r("vcs/tree",{sessionId:e,repositoryId:t,commit:o},N.signal).then(q=>{N.signal.aborted||f(q)}).catch(q=>{N.signal.aborted||(i(q.message),q.code==="vcs/rediscover-required"&&a())}),()=>N.abort()},[e,t,o,c]),d)return B.default.createElement("p",{role:"alert"},d," ",B.default.createElement("button",{onClick:()=>m(N=>N+1)},s("retry")));if(!p)return B.default.createElement("p",{role:"status"},s("loading"));let x=w?w+"/":"",k=sr(p.entries,w,y),O=N=>{g(N),u(0),v(""),h(null)};return B.default.createElement("section",{"aria-label":s("historicalTree")},B.default.createElement("p",null,s("historicalTreeScope")),B.default.createElement("code",null,o),B.default.createElement("p",null,w||"/"," ",w&&B.default.createElement("button",{onClick:()=>O(w.includes("/")?w.slice(0,w.lastIndexOf("/")):"")},s("treeUp"))),B.default.createElement("nav",{"aria-label":s("treeBreadcrumbs")},or(w).map(N=>B.default.createElement(B.default.Fragment,{key:N.path},N.path&&" / ",N.path===w?B.default.createElement("span",{"aria-current":"location"},N.name):B.default.createElement("button",{onClick:()=>O(N.path)},N.name)))),B.default.createElement("label",null,s("treeSearch")," ",B.default.createElement("input",{"aria-label":s("treeSearch"),value:y,onChange:N=>{v(N.target.value),u(0),h(null)}})),B.default.createElement("p",null,k.length," ",s("treeEntries")),!k.length&&y&&B.default.createElement("p",{role:"status"},s("emptySearch")),B.default.createElement("ul",null,k.slice(S*100,S*100+100).map(N=>B.default.createElement("li",{key:N.path},N.type==="tree"?B.default.createElement("button",{onClick:()=>O(N.path)},N.path.slice(x.length),"/"):N.type==="blob"&&["100644","100755"].includes(N.mode)?B.default.createElement("button",{"aria-pressed":b===N.path,onClick:()=>h(N.path)},N.path.slice(x.length)):B.default.createElement("span",null,N.path.slice(x.length))," \xB7 ",B.default.createElement("code",null,N.mode," ",N.type," ",B.default.createElement("span",{title:N.oid},N.oid.slice(0,10)))))),S>0&&B.default.createElement("button",{onClick:()=>{u(N=>N-1),h(null)}},s("treePrevious")),(S+1)*100<k.length&&B.default.createElement("button",{onClick:()=>{u(N=>N+1),h(null)}},s("treeNext")),b&&B.default.createElement(Me,{key:JSON.stringify([e,t,o,b]),sessionId:e,repositoryId:t,commit:o,rpc:r,t:s,onRediscover:a,path:b,onClose:()=>h(null)}))}function yt(e){return B.default.createElement(ao,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function ao(e){let[t,o]=(0,B.useState)(!1);return B.default.createElement("div",null,B.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("historicalTree")),t&&B.default.createElement(no,{...e}))}var $=R(require("react"),1);var F=R(require("react"),1);function lo({sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:s,follow:a,rpc:p,t:f,onRediscover:d,onSelectCommit:i}){let[c,m]=(0,F.useState)({commits:[],nextOffset:null}),[w,g]=(0,F.useState)(0),[S,u]=(0,F.useState)(0),[y,v]=(0,F.useState)(!0),[b,h]=(0,F.useState)("");return(0,F.useEffect)(()=>{let x=new AbortController;return v(!0),h(""),p("vcs/file-history",{sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:s,offset:w,limit:50,follow:a},x.signal).then(k=>{x.signal.aborted||m(O=>({...k,commits:w?[...O.commits,...k.commits]:k.commits}))}).catch(k=>{x.signal.aborted||(h(k.message),k.code==="vcs/rediscover-required"&&d())}).finally(()=>{x.signal.aborted||v(!1)}),()=>x.abort()},[e,t,o,r,s,w,S]),F.default.createElement("section",{"aria-label":f("fileHistory"),"aria-busy":y},F.default.createElement("p",null,f("fileHistoryScope")),F.default.createElement("p",{style:{overflowWrap:"anywhere"}},c.path," \xB7 ",F.default.createElement("code",null,o)),F.default.createElement("ol",null,c.commits.map(x=>F.default.createElement("li",{key:x.id},F.default.createElement("code",{title:x.id},x.id.slice(0,10))," \xB7 ",i?F.default.createElement("button",{onClick:()=>i(x.id,x.path||c.path)},x.subject):x.subject,F.default.createElement("div",null,x.boundary&&F.default.createElement("span",null,f(x.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":"fileHistoryBoundary")," "),x.path&&F.default.createElement("code",null,x.oldPath?x.oldPath+" \u2192 ":"",x.path)," ",x.author," \xB7 ",F.default.createElement("time",{dateTime:x.date},x.date))))),y&&F.default.createElement("p",{role:"status"},f("loading")),b&&F.default.createElement("p",{role:"alert"},b," ",F.default.createElement("button",{onClick:()=>u(x=>x+1)},f("retry"))),!y&&!b&&!c.commits.length&&F.default.createElement("p",null,f("historyEmpty")),c.truncated&&F.default.createElement("p",{role:"status"},f("historyLimit")),!b&&c.nextOffset!==null&&F.default.createElement("button",{disabled:y,onClick:()=>g(c.nextOffset)},f("historyMore")))}function xt(e){return F.default.createElement(co,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function co(e){let[t,o]=(0,F.useState)(!1),[r,s]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":t,onClick:()=>o(a=>!a)},e.t("fileHistory")),t&&F.default.createElement(F.default.Fragment,null,F.default.createElement("label",null,F.default.createElement("input",{type:"checkbox",checked:r,onChange:a=>s(a.target.checked)}),e.t("fileHistoryFollow")),F.default.createElement("p",null,e.t("fileHistoryFollowScope")),F.default.createElement(lo,{key:String(r),follow:r,...e})))}var D=R(require("react"),1);function po({sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:s,rpc:a,t:p,onRediscover:f,onSelectCommit:d}){let[i,c]=(0,D.useState)(null),[m,w]=(0,D.useState)(""),[g,S]=(0,D.useState)(0),[u,y]=(0,D.useState)(1),[v,b]=(0,D.useState)(null);return(0,D.useEffect)(()=>{let h=new AbortController;return c(null),w(""),b(null),a("vcs/blame",{sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:s,startLine:u,lineLimit:500},h.signal).then(x=>{h.signal.aborted||c(x)}).catch(x=>{h.signal.aborted||(w(x.message),x.code==="vcs/rediscover-required"&&f())}),()=>h.abort()},[e,t,o,r,s,g,u]),m?D.default.createElement("p",{role:"alert"},m," ",D.default.createElement("button",{onClick:()=>S(h=>h+1)},p("retry"))):i?D.default.createElement("section",{"aria-label":p("blame")},D.default.createElement("p",null,p("blameScope")),d&&D.default.createElement("p",null,p("blameNavigation")),i.notice&&D.default.createElement("p",{role:"status"},i.notice),i.truncated&&D.default.createElement("p",{role:"status"},p("blameLimit")),!i.notice&&!i.lines.length&&D.default.createElement("p",null,p("blameEmpty")),!!i.lines.length&&D.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},D.default.createElement("table",null,D.default.createElement("thead",null,D.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(h=>D.default.createElement("th",{key:h,scope:"col"},p(h))))),D.default.createElement("tbody",null,i.lines.map(h=>D.default.createElement("tr",{key:h.line},D.default.createElement("th",{scope:"row"},h.line),D.default.createElement("td",null,d?D.default.createElement("button",{title:h.commit,onClick:()=>d(h.commit)},D.default.createElement("code",null,h.commit.slice(0,10))):D.default.createElement("code",{title:h.commit},h.commit.slice(0,10))),D.default.createElement("td",null,h.author),D.default.createElement("td",null,h.summary),D.default.createElement("td",null,D.default.createElement("pre",{style:{margin:0}},h.text),h.path&&h.originalLine?D.default.createElement("button",{onClick:()=>b(h)},p("blameOriginLine"),": ",h.path,":",h.originalLine):D.default.createElement("span",null,p("blameUnmapped")))))))),D.default.createElement("p",null,i.startLine||u,"\u2013",i.lines.at(-1)?.line||u," / ",i.totalLines??"\u2014"),D.default.createElement("button",{disabled:u===1,onClick:()=>y(Math.max(1,u-500))},p("blamePrevious")),D.default.createElement("button",{disabled:i.nextLine==null,onClick:()=>y(i.nextLine)},p("blameNext")),v&&D.default.createElement(Me,{key:JSON.stringify([v.commit,v.path,v.originalLine]),sessionId:e,repositoryId:t,commit:v.commit,path:v.path,line:v.originalLine,rpc:a,t:p,onRediscover:f,onClose:()=>b(null)})):D.default.createElement("p",{role:"status"},p("loading"))}function wt(e){let[t,o]=(0,D.useState)(!1);return D.default.createElement("div",null,D.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("blame")),t&&D.default.createElement(po,{...e}))}function Te({sessionId:e,repositoryId:t,commit:o,parentIndex:r,base:s,target:a,id:p,rpc:f,t:d,onRediscover:i,onSelectCommit:c}){let[m,w]=(0,$.useState)(null),[g,S]=(0,$.useState)(""),[u,y]=(0,$.useState)(0);return(0,$.useEffect)(()=>{let v=new AbortController;return w(null),S(""),f(s?"vcs/revision-compare":"vcs/commit-compare",s?{sessionId:e,repositoryId:t,base:s,target:a,id:p}:{sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:p},v.signal).then(b=>{v.signal.aborted||w(b)}).catch(b=>{v.signal.aborted||(S(b.message),b.code==="vcs/rediscover-required"&&i())}),()=>v.abort()},[e,t,o,r,s,a,p,u]),g?$.default.createElement("p",{role:"alert"},g," ",$.default.createElement("button",{onClick:()=>y(v=>v+1)},d("retry"))):m?$.default.createElement("section",null,$.default.createElement("h4",null,m.path),$.default.createElement("p",null,m.left.label," \u2194 ",m.right.label),m.notice&&$.default.createElement("p",{role:"status"},m.notice),m.binary?$.default.createElement("p",null,d("binary")):$.default.createElement(le,{comparison:m,identity:JSON.stringify(s?[e,t,s,a,p]:[e,t,o,r,p]),t:d}),o&&!s&&$.default.createElement(xt,{onSelectCommit:c,key:"file-history:"+JSON.stringify([e,t,o,r,p]),sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:p,rpc:f,t:d,onRediscover:i}),o&&!s&&$.default.createElement(wt,{onSelectCommit:c,key:"blame:"+JSON.stringify([e,t,o,r,p]),sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:p,rpc:f,t:d,onRediscover:i}),(o||s)&&$.default.createElement(Fe,{key:"image:"+JSON.stringify([e,t,o,r,s,a,p]),sessionId:e,repositoryId:t,commit:o,parentIndex:r,base:s,target:a,id:p,rpc:f,t:d,onRediscover:i})):$.default.createElement("p",{role:"status"},d("loading"))}function ir(e,t){if(typeof t!="string"||!t)return null;let o=e.filter(r=>r.path===t);return o.length===1&&typeof o[0].id=="string"&&o[0].id?o[0].id:null}function nr(e,t=""){let o=t.trim().toLowerCase();return o?e.filter(r=>[r.id,r.author,r.subject].some(s=>s?.toLowerCase().includes(o))):e}function Qe(e,t=""){let o=t.trim().toLowerCase();return o?e.filter(r=>[r.path,r.oldPath].some(s=>s?.toLowerCase().includes(o))):e}function St(e){return T.default.createElement(uo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function uo({sessionId:e,repositoryId:t,commit:o,rpc:r,t:s,onRediscover:a,onSelectCommit:p,initialPath:f}){let d=(0,T.useRef)(!0),[i,c]=(0,T.useState)(null),[m,w]=(0,T.useState)(""),[g,S]=(0,T.useState)(0),[u,y]=(0,T.useState)(null),[v,b]=(0,T.useState)(""),[h,x]=(0,T.useState)(0);if((0,T.useEffect)(()=>{let O=new AbortController;return y(null),b(""),r("vcs/commit",{sessionId:e,repositoryId:t,commit:o,parentIndex:g},O.signal).then(N=>{O.signal.aborted||(y(N),d.current&&(d.current=!1,c(ir(N.changes,f))))}).catch(N=>{O.signal.aborted||(b(N.message),N.code==="vcs/rediscover-required"&&a())}),()=>O.abort()},[e,t,o,g,h]),v)return T.default.createElement("p",{role:"alert"},v," ",T.default.createElement("button",{onClick:()=>x(O=>O+1)},s("retry")));if(!u)return T.default.createElement("p",{role:"status"},s("loading"));let k=Qe(u.changes,m);return T.default.createElement("section",{"aria-label":s("commitDetails")},T.default.createElement("h3",null,u.subject),T.default.createElement("code",null,u.id),T.default.createElement("p",null,u.author," \xB7 ",u.date),u.messageTruncated&&T.default.createElement("p",{role:"status"},s("commitMessageLimit")),u.message&&T.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},u.message),u.parents.length>1&&T.default.createElement("label",null,s("commitParent")," ",T.default.createElement("select",{"aria-label":s("commitParent"),value:g,onChange:O=>{c(null),y(null),S(Number(O.target.value))}},u.parents.map((O,N)=>T.default.createElement("option",{key:O,value:N},N+1,": ",O.slice(0,10))))),T.default.createElement("p",null,u.parent||s("commitRoot")," \u2192 ",u.id.slice(0,10)),T.default.createElement("label",null,s("commitFileSearch")," ",T.default.createElement("input",{"aria-label":s("commitFileSearch"),value:m,onChange:O=>{w(O.target.value),c(null)}})),T.default.createElement("span",null," ",k.length," / ",u.changes.length),T.default.createElement("ul",null,k.map(O=>T.default.createElement("li",{key:O.id},T.default.createElement("button",{"aria-pressed":i===O.id,onClick:()=>c(O.id)},O.status," \xB7 ",O.oldPath?O.oldPath+" \u2192 ":"",O.path)))),!!u.changes.length&&!k.length&&T.default.createElement("p",{role:"status"},s("emptySearch")),!u.changes.length&&T.default.createElement("p",null,s("commitNoChanges")),i&&T.default.createElement(Te,{key:i,sessionId:e,repositoryId:t,commit:o,parentIndex:g,id:i,onSelectCommit:p,rpc:r,t:s,onRediscover:a}),T.default.createElement(yt,{key:JSON.stringify([e,t,o]),sessionId:e,repositoryId:t,commit:o,rpc:r,t:s,onRediscover:a}))}var z=R(require("react"),1);function ar(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let t=e.slice(0,200),o=new Map,r=[],s=[],a=f=>typeof f=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(f);for(let[f,d]of t.entries()){if(!d||!a(d.id)||!Array.isArray(d.parents)||o.has(d.id))throw new Error("Invalid graph node");o.set(d.id,f),r.push({id:d.id,row:f})}let p=!1;for(let f of t){let d=new Set;for(let i of f.parents){if(s.length===1e3){p=!0;break}if(!a(i)||i.length!==f.id.length||i===f.id||d.has(i))throw new Error("Invalid graph parent");d.add(i);let c=o.get(i);if(c!==void 0&&c<=o.get(f.id))throw new Error("Graph requires child-before-parent order");s.push({from:f.id,to:i,missing:c===void 0})}if(p)break}return{nodes:r,edges:s,nodesTruncated:e.length>200,edgesTruncated:p}}function lr(e){let t=Array(32).fill(null),o=new Map,r=[],s=new Set,a=!1,p=i=>{if(s.has(i))return null;let c=t.indexOf(i);return c>=0?c:(c=t.indexOf(null),c<0?(a=!0,s.add(i),null):(t[c]=i,c))},f=new Map;for(let i of e.edges){if(i.missing)continue;let c=f.get(i.from)||[];c.push(i.to),f.set(i.from,c)}for(let i of e.nodes){let c=p(i.id);if(o.set(i.id,{...i,lane:c}),r.push({...i,lane:c}),c===null)continue;t[c]=null;let m=f.get(i.id)||[];for(let[w,g]of m.entries())t.includes(g)||(w===0&&t[c]===null?t[c]=g:p(g))}let d=e.edges.filter(i=>!i.missing).flatMap(i=>{let c=o.get(i.from),m=o.get(i.to);return c.lane===null||m.lane===null?[]:[{...i,start:c.row,end:m.row,fromLane:c.lane,toLane:m.lane}]});return{nodes:r,edges:d,lanesTruncated:a,laneCount:Math.max(1,...r.map(i=>(i.lane??0)+1))}}function fo({commits:e,selected:t,onSelect:o,t:r}){let s;try{s=ar(e)}catch{return z.default.createElement("p",{role:"alert"},r("graphInvalid"))}let a=lr(s),p=a.edges,f=Math.max(100,24+18*a.laneCount),d=Math.max(40,s.nodes.length*36);return z.default.createElement("section",{"aria-label":r("historyGraph")},z.default.createElement("p",null,r("graphScope")),a.lanesTruncated&&z.default.createElement("p",{role:"status"},r("graphLaneLimit")),(s.nodesTruncated||s.edgesTruncated)&&z.default.createElement("p",{role:"status"},r("graphLimit")),z.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},z.default.createElement("svg",{width:f,height:d,"aria-hidden":"true",style:{flexShrink:0}},p.map(i=>{let c=i.start*36+18,m=i.end*36+18,w=12+i.fromLane*18,g=12+i.toLane*18;return z.default.createElement("path",{key:i.from+i.to,d:"M "+w+" "+c+" C "+w+" "+(c+18)+", "+g+" "+(m-18)+", "+g+" "+m,fill:"none",stroke:"currentColor",opacity:"0.45"})}),a.nodes.filter(i=>i.lane!==null).map(i=>z.default.createElement("circle",{key:i.id,cx:12+i.lane*18,cy:i.row*36+18,r:"4",fill:"currentColor"}))),z.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},s.nodes.map(i=>z.default.createElement("li",{key:i.id,style:{height:36,whiteSpace:"nowrap"}},z.default.createElement("button",{title:i.id,"aria-current":t===i.id?!0:void 0,style:t===i.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:c=>{if(c.altKey||c.ctrlKey||c.metaKey||c.shiftKey)return;let m=c.key==="ArrowDown"?Math.min(i.row+1,s.nodes.length-1):c.key==="ArrowUp"?Math.max(0,i.row-1):c.key==="Home"?0:c.key==="End"?s.nodes.length-1:null;m!==null&&(c.preventDefault(),c.stopPropagation(),c.currentTarget.closest("ol").querySelectorAll("button")[m]?.focus())},onClick:()=>o(i.id)},z.default.createElement("code",null,i.id.slice(0,10))," ",e[i.row].subject))))),z.default.createElement("details",null,z.default.createElement("summary",null,r("graphRelations")),z.default.createElement("ul",null,s.edges.map(i=>z.default.createElement("li",{key:i.from+i.to},z.default.createElement("code",null,i.from)," \u2192 ",z.default.createElement("code",null,i.to),i.missing?" \xB7 "+r("graphMissing"):"")))))}function kt(e){let[t,o]=(0,z.useState)(!1);return z.default.createElement("div",null,z.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("historyGraph")),t&&z.default.createElement(fo,{...e}))}var P=R(require("react"),1);function mo({sessionId:e,repositoryId:t,base:o,target:r,rpc:s,t:a,onRediscover:p}){let[f,d]=(0,P.useState)(null),[i,c]=(0,P.useState)(""),[m,w]=(0,P.useState)(0),[g,S]=(0,P.useState)(null),[u,y]=(0,P.useState)("");if((0,P.useEffect)(()=>{let b=new AbortController;return d(null),c(""),S(null),s("vcs/revision-changes",{sessionId:e,repositoryId:t,base:o,target:r},b.signal).then(h=>{b.signal.aborted||d(h)}).catch(h=>{b.signal.aborted||(c(h.message),h.code==="vcs/rediscover-required"&&p())}),()=>b.abort()},[e,t,o,r,m]),i)return P.default.createElement("p",{role:"alert"},i," ",P.default.createElement("button",{onClick:()=>w(b=>b+1)},a("retry")));if(!f)return P.default.createElement("p",{role:"status"},a("loading"));let v=Qe(f.changes,u);return P.default.createElement("div",null,P.default.createElement("label",null,a("commitFileSearch")," ",P.default.createElement("input",{"aria-label":a("commitFileSearch"),value:u,onChange:b=>{y(b.target.value),S(null)}})),P.default.createElement("span",null," ",v.length," / ",f.changes.length),!!f.changes.length&&!v.length&&P.default.createElement("p",{role:"status"},a("emptySearch")),!f.changes.length&&P.default.createElement("p",null,a("revisionEmpty")),P.default.createElement("ul",null,v.map(b=>P.default.createElement("li",{key:b.id},P.default.createElement("button",{"aria-pressed":g===b.id,onClick:()=>S(b.id)},b.status," \xB7 ",b.oldPath?b.oldPath+" \u2192 ":"",b.path)))),g&&P.default.createElement(Te,{key:g,sessionId:e,repositoryId:t,base:o,target:r,id:g,rpc:s,t:a,onRediscover:p}))}function Ct(e){return P.default.createElement(ho,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function ho({commits:e,sessionId:t,repositoryId:o,rpc:r,t:s,onRediscover:a,onReferencesLoaded:p}){let[f,d]=(0,P.useState)(""),[i,c]=(0,P.useState)(""),[m,w]=(0,P.useState)([]),[g,S]=(0,P.useState)(!1),[u,y]=(0,P.useState)(0),[v,b]=(0,P.useState)(!1),[h,x]=(0,P.useState)("");return(0,P.useEffect)(()=>{if(!u)return;let k=new AbortController;return b(!0),x(""),r("vcs/references",{sessionId:t,repositoryId:o},k.signal).then(O=>{k.signal.aborted||(w(O.references),S(!0),p?.(O.references))}).catch(O=>{k.signal.aborted||(x(O.message),O.code==="vcs/rediscover-required"&&a())}).finally(()=>{k.signal.aborted||b(!1)}),()=>k.abort()},[t,o,u]),P.default.createElement("section",{"aria-label":s("revisionTitle")},P.default.createElement("h3",null,s("revisionTitle")),P.default.createElement("p",null,s("revisionScope")),P.default.createElement("button",{disabled:v,onClick:()=>y(k=>k+1)},s("revisionLoadRefs")),P.default.createElement("p",null,s("revisionRefsScope")),g&&!v&&!h&&P.default.createElement("p",{role:"status"},m.length?`${s("revisionRefsCount")}: ${m.length}`:s("revisionRefsEmpty")),v&&P.default.createElement("p",{role:"status"},s("loading")),h&&P.default.createElement("p",{role:"alert"},h),[[f,d,"revisionBase"],[i,c,"revisionTarget"]].map(([k,O,N])=>P.default.createElement("label",{key:N},s(N)," ",P.default.createElement("select",{"aria-label":s(N),value:k,onChange:q=>O(q.target.value)},P.default.createElement("option",{value:""},"\u2014"),!!e.length&&P.default.createElement("optgroup",{label:s("revisionLoadedCommits")},e.map(q=>P.default.createElement("option",{key:q.id,value:q.id},q.id.slice(0,10)," \xB7 ",q.subject))),!!m.length&&P.default.createElement("optgroup",{label:s("revisionLocalRefs")},m.map(q=>P.default.createElement("option",{key:q.name,value:q.commit},q.name," \xB7 ",q.commit.slice(0,10)))),k&&!e.some(q=>q.id===k)&&!m.some(q=>q.commit===k)&&P.default.createElement("option",{value:k},k)))),P.default.createElement("button",{disabled:!f||!i,onClick:()=>{d(i),c(f)}},s("revisionSwap")),P.default.createElement("p",{style:{overflowWrap:"anywhere"}},P.default.createElement("code",null,f||"\u2014")," \u2192 ",P.default.createElement("code",null,i||"\u2014")),f&&i&&P.default.createElement(mo,{key:JSON.stringify([t,o,f,i]),sessionId:t,repositoryId:o,base:f,target:i,rpc:r,t:s,onRediscover:a}))}function dr(e,t,o){let r=o?[...e.commits.filter(s=>!t.commits.some(a=>a.id===s.id)),...t.commits]:t.commits;return{...t,windowEnd:o+t.commits.length,commits:r.slice(-200)}}function Et(e){return C.default.createElement(vo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function vo({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:s}){let[a,p]=(0,C.useState)({id:null,path:null,revision:0}),[f,d]=(0,C.useState)(""),[i,c]=(0,C.useState)(null),[m,w]=(0,C.useState)(""),[g,S]=(0,C.useState)(""),u=L=>{let Z=(i||[]).find(ee=>JSON.stringify([ee.name,ee.commit])===L)?.commit||"";S(L),w(Z),h(ee=>ee?{...ee,snapshot:Z||null}:null),de(0),d(""),q(null),ve({commits:[],snapshot:null,nextOffset:null})},[y,v]=(0,C.useState)({message:"",author:"",path:""}),[b,h]=(0,C.useState)(null),x=L=>{h({values:L,snapshot:K.snapshot}),de(0),d(""),q(null),ve(_=>({..._,commits:[],nextOffset:null}))},k=(0,C.useMemo)(()=>rr(i||[]),[i]),O=a.id,N=(L,_=null)=>p(Z=>({id:L,path:_,revision:Z.revision+1})),q=(L,_=null)=>p(Z=>({id:L,path:_,revision:Z.revision+(_||Z.path?1:0)})),[K,ve]=(0,C.useState)({commits:[],snapshot:null,nextOffset:null}),[J,de]=(0,C.useState)(0),[H,ce]=(0,C.useState)(0),[re,Ce]=(0,C.useState)(!0),[ge,Ee]=(0,C.useState)("");(0,C.useEffect)(()=>{let L=new AbortController;return Ce(!0),Ee(""),o("vcs/history",{sessionId:e,repositoryId:t,offset:J,limit:50,...b?{search:b.values}:{},...b?.snapshot||m||J?{snapshot:b?.snapshot||m||K.snapshot}:{}},L.signal).then(_=>{L.signal.aborted||(ve(Z=>dr(Z,_,J)),J>=200&&(q(null),d("")))}).catch(_=>{L.signal.aborted||(Ee(_.message),_.code==="vcs/rediscover-required"&&s())}).finally(()=>{L.signal.aborted||Ce(!1)}),()=>L.abort()},[e,t,J,H,b,m]);let se=nr(K.commits,f);return C.default.createElement("section",{className:"vcs-history","aria-label":r("history"),"aria-busy":re},C.default.createElement("div",{className:"vcs-history-list"},C.default.createElement("p",null,r("historyListOnly")),i!==null&&C.default.createElement("p",null,r("historyRefsScope")),C.default.createElement("label",null,r("historyBranch")," ",C.default.createElement("select",{"aria-label":r("historyBranch"),value:g,disabled:re,onChange:L=>u(L.target.value)},C.default.createElement("option",{value:""},"HEAD"),g&&!(i||[]).some(L=>JSON.stringify([L.name,L.commit])===g)&&C.default.createElement("option",{value:g},JSON.parse(g)[0]," \xB7 ",m.slice(0,10)," \xB7 ",r("historyPinned")),(i||[]).map(L=>{let _=JSON.stringify([L.name,L.commit]);return C.default.createElement("option",{key:_,value:_},L.name," \xB7 ",L.commit.slice(0,10))}))),C.default.createElement("p",null,r("historyBranchScope"),m&&C.default.createElement(C.default.Fragment,null," \xB7 ",C.default.createElement("code",null,m))),C.default.createElement("form",{"aria-label":r("historyServerSearch"),onSubmit:L=>{L.preventDefault(),x({...y})}},C.default.createElement("fieldset",{disabled:re},C.default.createElement("legend",null,r("historyServerSearch")),C.default.createElement("p",null,r("historyServerScope")),["message","author","path"].map(L=>C.default.createElement("label",{key:L},r("historyServer_"+L)," ",C.default.createElement("input",{maxLength:1024,"aria-label":r("historyServer_"+L),value:y[L],onChange:_=>v(Z=>({...Z,[L]:_.target.value}))}))),C.default.createElement("button",{type:"submit"},r("historyServerApply")),C.default.createElement("button",{type:"button",onClick:()=>{v({message:"",author:"",path:""}),x({})}},r("historyServerClear")))),b&&C.default.createElement("p",{role:"status"},r("historyServerActive"),": ",JSON.stringify(b.values)," \xB7 ",C.default.createElement("code",null,b.snapshot||K.snapshot)),C.default.createElement("label",null,r("historySearch")," ",C.default.createElement("input",{"aria-label":r("historySearch"),value:f,onChange:L=>{d(L.target.value),q(null)}})),C.default.createElement("span",null," ",se.length," / ",K.commits.length),!!K.commits.length&&C.default.createElement("p",{role:"status"},r("historyWindow"),": ",Math.max(0,(K.windowEnd??K.commits.length)-K.commits.length),"\u2013",K.windowEnd??K.commits.length," \xB7 ",r("historyWindowScope")),!!K.commits.length&&!se.length&&C.default.createElement("p",{role:"status"},r("historyNoMatch")),C.default.createElement("ol",null,se.map(L=>C.default.createElement("li",{key:L.id},C.default.createElement("button",{"aria-pressed":O===L.id,onClick:()=>q(L.id)},L.subject),C.default.createElement("div",null,C.default.createElement("code",{title:L.id},L.id.slice(0,10))," \xB7 ",L.author," \xB7 ",C.default.createElement("time",{dateTime:L.date},L.date)),k.has(L.id)&&C.default.createElement("div",{"aria-label":r("historyRefsLabel"),style:{overflowWrap:"anywhere"}},k.get(L.id).names.map(_=>C.default.createElement("span",{key:_},C.default.createElement("code",null,_)," ")),k.get(L.id).hidden>0&&C.default.createElement("span",null,r("historyRefsMore"),": ",k.get(L.id).hidden))))),re&&C.default.createElement("p",{role:"status"},r("loading")),ge&&C.default.createElement("p",{role:"alert"},ge," ",C.default.createElement("button",{onClick:()=>ce(L=>L+1)},r("retry"))),!re&&!ge&&!K.commits.length&&C.default.createElement("p",null,r("historyEmpty")),K.truncated&&C.default.createElement("p",{role:"status"},r("historyLimit")),!ge&&K.nextOffset!==null&&C.default.createElement("button",{disabled:re,onClick:()=>de(K.nextOffset)},r("historyMore")),!!K.commits.length&&C.default.createElement(kt,{commits:K.commits,selected:O,onSelect:q,t:r}),C.default.createElement(Ct,{onReferencesLoaded:c,commits:K.commits,sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:s})),C.default.createElement("div",{className:"vcs-history-details"},O&&C.default.createElement(St,{key:JSON.stringify([O,a.revision]),initialPath:a.path,sessionId:e,repositoryId:t,commit:O,onSelectCommit:N,rpc:o,t:r,onRediscover:s})))}var cr={zh:{svnOfferExpired:"\u7F51\u7EDC\u8BBF\u95EE\u63D0\u6848\u5DF2\u8FC7\u671F\uFF1B\u8BF7\u624B\u52A8\u91CD\u8BD5\uFF0C\u5E76\u91CD\u65B0\u52FE\u9009\u540C\u610F\u3002",svnExpired:"SVN \u7F51\u7EDC\u6388\u6743\u5DF2\u8FC7\u671F\uFF0C\u5386\u53F2\u8BF7\u6C42\u5DF2\u505C\u6B62\uFF1B\u8BF7\u91CD\u65B0\u5BA1\u9605\u5E76\u540C\u610F\u3002",svnConsentReview:"\u5BA1\u9605 SVN \u7F51\u7EDC\u8BBF\u95EE\u8303\u56F4",svnConsentScope:"\u540C\u610F\u524D\u4EC5\u8BFB\u53D6\u672C\u5730\u8EAB\u4EFD\u3002\u6388\u6743\u53EA\u9002\u7528\u4E8E\u6240\u5217\u4ED3\u5E93\u3001Session \u4E0E\u76EE\u5F55\uFF0C\u4E94\u5206\u949F\u6709\u6548\uFF1B\u4E0D\u6388\u6743\u91CD\u5B9A\u5411\u6216\u5199\u64CD\u4F5C\u3002",svnConsentExplicit:"\u6211\u540C\u610F\u8BBF\u95EE\u4EE5\u4E0A HTTPS SVN \u4ED3\u5E93",svnConsentApprove:"\u540C\u610F\u5E76\u8BFB\u53D6\u5386\u53F2",svnHistoryScope:"\u56FA\u5B9A\u672C\u5730 revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u5206\u9875\u66FF\u6362\u663E\u793A",svnHistoricalDiff:"\u5386\u53F2\u53EA\u8BFB Diff",svnTraceScope:"\u6587\u4EF6\u8FFD\u6EAF\u5728\u590D\u5236\u8FB9\u754C\u505C\u6B62\uFF0C\u4E0D\u8DDF\u968F\u8303\u56F4\u5916\u6765\u6E90",svnGrantScope:"\u7F51\u7EDC\u6388\u6743\u4E94\u5206\u949F\u6709\u6548\uFF1B\u53EF\u968F\u65F6\u64A4\u9500\uFF0C\u5386\u53F2\u64CD\u4F5C\u4E0D\u4FEE\u6539\u5DE5\u4F5C\u526F\u672C\u3002",svnRevoke:"\u64A4\u9500 SVN \u7F51\u7EDC\u6388\u6743",svnIdentity:"\u67E5\u770B SVN \u672C\u5730\u5386\u53F2\u8BBF\u95EE\u8EAB\u4EFD",svnOfflineIdentity:"\u4EC5\u4ECE\u6388\u6743\u5DE5\u4F5C\u526F\u672C\u8BFB\u53D6\u672C\u5730\u5143\u6570\u636E\uFF0C\u4E0D\u53D1\u8D77\u8FDC\u7A0B\u8BF7\u6C42\u3002",svnRemoteDisabled:"\u8FDC\u7A0B SVN \u5386\u53F2\u4F20\u8F93\u5C1A\u672A\u542F\u7528\uFF1B\u6CA1\u6709\u7F51\u7EDC\u6388\u6743\u6216\u53EF\u7528\u8BBF\u95EE\u51ED\u636E\u3002\u672C\u9875\u4E0D\u662F\u5DF2\u6388\u6743\u5386\u53F2\u5165\u53E3\u3002",historyWindow:"\u5DF2\u52A0\u8F7D\u5386\u53F2\u7A97\u53E3\uFF08\u5E8F\u53F7\u5DE6\u95ED\u53F3\u5F00\uFF09",historyWindowScope:"\u5217\u8868\u53CA\u56FE\u6700\u591A\u4FDD\u7559200\u6761\uFF1B\u7EE7\u7EED\u52A0\u8F7D\u66FF\u6362\u8F83\u65B0\u884C\uFF0C\u8DE8\u7A97\u53E3\u8FB9\u4E0D\u8868\u793A\u5B8C\u6574\u56FE\u3002\u5C40\u90E8\u7B5B\u9009\u4EC5\u5F53\u524D\u7A97\u53E3\u3002",segments:"\u5206\u6BB5\u6D4F\u89C8\u5386\u53F2\u6B63\u6587",segmentBytes:"\u5B57\u8282\u8303\u56F4\uFF08\u5DE6\u95ED\u53F3\u5F00\uFF09",segmentScope:"\u4EC5\u56FA\u5B9A\u5386\u53F2 UTF-8 \u666E\u901A\u6587\u4EF6\uFF0C\u6700\u5927 16 MiB\uFF1B\u6BCF\u7247\u6700\u591A 64 KiB\uFF0C\u66FF\u6362\u663E\u793A\u4E0D\u7D2F\u79EF\u3002\u7247\u6BB5\u884C\u53F7\u4E0D\u662F\u539F\u6587\u4EF6\u884C\u53F7\uFF0C\u4E0D\u662F\u5168\u6587\u4EF6 Diff\u3002",blameOriginLine:"\u67E5\u770B\u6765\u6E90\u5386\u53F2\u884C",blameUnmapped:"\u65E0\u6CD5\u7CBE\u786E\u5B9A\u4F4D\u6765\u6E90\u884C",blamePrevious:"\u4E0A\u4E00\u884C\u9875",blameNext:"\u4E0B\u4E00\u884C\u9875",fileHistoryMergeBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u5408\u5E76\u63D0\u4EA4\uFF0C\u6B64\u5904\u505C\u6B62\uFF0C\u4E0D\u63A8\u65AD\u591A\u7236\u6765\u6E90",fileHistoryBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u590D\u5236\u6216\u975E\u7CBE\u786E\u91CD\u547D\u540D\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryFollow:"\u8DDF\u968F\u5185\u5BB9\u76F8\u540C\u7684\u91CD\u547D\u540D\uFF08\u7B2C\u4E00\u7236\u94FE\uFF09",fileHistoryFollowScope:"\u4EC5\u8DDF\u968FGit\u68C0\u51FA\u7684100%\u91CD\u547D\u540D\uFF1B\u4E0D\u63A8\u65AD\u76F8\u4F3C\u5185\u5BB9\u3001\u590D\u5236\u6216\u5408\u5E76\u591A\u7236\u6765\u6E90\u3002\u65B0\u589E\u6587\u4EF6\u5904\u505C\u6B62\uFF0C\u53D7\u8F93\u51FA/\u65F6\u95F4\u9650\u5236\uFF1B\u6BCF\u6761\u8BB0\u5F55\u6309\u5F53\u65F6\u8DEF\u5F84\u5B9A\u4F4D\u3002",graphLaneLimit:"\u6CF3\u9053\u6700\u591A32\u6761\uFF1B\u8D85\u51FA\u90E8\u5206\u7701\u7565\u56FE\u5F62\uFF0C\u5B8C\u6574\u5DF2\u52A0\u8F7D\u8282\u70B9\u4E0E\u5173\u7CFB\u4ECD\u53EF\u5728\u6587\u5B57\u4E2D\u67E5\u770B\u3002",historyBranch:"\u5386\u53F2\u8D77\u70B9\uFF08\u672C\u5730\u5F15\u7528\uFF09",historyPinned:"\u56FA\u5B9A\u5FEB\u7167",historyBranchScope:"\u5F15\u7528\u7531\u4E0B\u65B9\u624B\u52A8\u52A0\u8F7D\uFF1B\u9009\u62E9\u540E\u56FA\u5B9A\u8BE5\u6B21OID\uFF0C\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5386\u53F2\u8D77\u70B9\u3002\u9009\u62E9HEAD\u91CD\u65B0\u8BFB\u53D6\u5F53\u524DHEAD\uFF0C\u4E0D\u5207\u6362\u5DE5\u4F5C\u533A\u3002",historyServerSearch:"\u5168\u5386\u53F2\u67E5\u8BE2",historyServerScope:"\u67E5\u8BE2\u56FA\u5B9A\u5FEB\u7167\u53EF\u8FBE\u7684\u5B8C\u6574\u5386\u53F2\uFF1B\u8BF4\u660E/\u4F5C\u8005\u4E3A\u5FFD\u7565\u5927\u5C0F\u5199\u7684\u5B57\u9762\u5339\u914D\uFF0C\u8DEF\u5F84\u4E3A\u7CBE\u786E\u8DEF\u5F84\u6216\u76EE\u5F55\uFF0C\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u3002\u5206\u9875\u4E0E\u8FD0\u884C\u65F6\u95F4\u6709\u754C\u3002",historyServer_message:"\u63D0\u4EA4\u8BF4\u660E",historyServer_author:"\u4F5C\u8005",historyServer_path:"\u8DEF\u5F84",historyServerApply:"\u6267\u884C\u67E5\u8BE2",historyServerClear:"\u6E05\u9664\u67E5\u8BE2",historyServerActive:"\u5F53\u524D\u5DF2\u63D0\u4EA4\u67E5\u8BE2",reviewView:"\u5BA1\u9605\u89C6\u56FE",workspaceView:"\u5DE5\u4F5C\u533A\u6539\u52A8",workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF1B\u9ED8\u8BA4\u9009\u62E9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u5386\u53F2\u6587\u4EF6\u6216\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG \u4E0E 8 \u4F4D\u5355\u626B\u63CF baseline JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757 simple \u9759\u6001 WebP\uFF08\u4E0D\u652F\u6301\u6E10\u8FDB\u5F0F/CMYK JPEG\u3001\u6269\u5C55/\u52A8\u753B WebP\uFF09\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\u652F\u6301\u5386\u53F2\u63D0\u4EA4\u3001\u56FA\u5B9A A/B \u53CA Git \u5DE5\u4F5C\u533A\uFF1B\u6309\u6240\u9009\u6A21\u5F0F\u8BFB\u53D6 HEAD\u3001\u6682\u5B58\u533A\u6216\u5DE5\u4F5C\u6587\u4EF6\u3002\u51B2\u7A81\u56FE\u7247\u4E0D\u652F\u6301\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u4EC5\u672C\u5730\u5206\u652F\u548C\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\uFF0C\u6700\u591A 1000 \u6761\uFF1B\u4E0D fetch\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{svnOfferExpired:"Network access offer expired. Retry manually and check consent again.",svnExpired:"SVN network consent expired; history requests stopped. Review and consent again.",svnConsentReview:"Review SVN network access",svnConsentScope:"Before consent, read local identity only. Access binds this repository, Session and cwd for five minutes; redirects and writes are not authorized.",svnConsentExplicit:"I consent to access the HTTPS SVN repository above",svnConsentApprove:"Consent and read history",svnHistoryScope:"SVN history at a fixed local revision snapshot; pages replace displayed rows",svnHistoricalDiff:"Historical read-only Diff",svnTraceScope:"File trace stops at copy boundaries and does not follow out-of-scope sources",svnGrantScope:"Network consent lasts five minutes; revoke at any time. History operations do not modify the working copy.",svnRevoke:"Revoke SVN network consent",svnIdentity:"Inspect local SVN history identity",svnOfflineIdentity:"Read local metadata from the authorized working copy only; no remote request.",svnRemoteDisabled:"Remote SVN history transport is not enabled; no network grant or usable access token. This is not an authorized history entry point.",historyWindow:"Loaded history window (start inclusive, end exclusive)",historyWindowScope:"List and graph retain at most 200 rows; more loads replace newer rows. Boundary edges are not a complete graph. Local filtering covers this window only.",segments:"Browse historical text segments",segmentBytes:"Byte range (start inclusive, end exclusive)",segmentScope:"Committed UTF-8 regular files up to 16 MiB; replaceable 64 KiB segments. Segment line numbers are not original file lines; this is not a full-file Diff.",blameOriginLine:"View origin historical line",blameUnmapped:"Origin line cannot be located precisely",blamePrevious:"Previous line page",blameNext:"Next line page",fileHistoryMergeBoundary:"Identity boundary: merge commit; stopped without inferring parent origin",fileHistoryBoundary:"Identity boundary: copy or inexact rename; stopped here",fileHistoryFollow:"Follow exact renames (first-parent)",fileHistoryFollowScope:"Only Git-detected 100% renames. No identity inference for similarity, copies or merge-parent origins. Stops at creation; output/runtime bounded. Each row uses its historical path.",graphLaneLimit:"At most 32 lanes. Overflow geometry is omitted; loaded nodes and relations remain available as text.",historyBranch:"History tip (local reference)",historyPinned:"Pinned snapshot",historyBranchScope:"Load references manually below. Selection pins that OID; refreshing references does not move the history tip. Selecting HEAD reads current HEAD without checking out.",historyServerSearch:"Full history query",historyServerScope:"Search all history reachable from the pinned snapshot. Message/author use case-insensitive literal matching; path is an exact path or directory, without rename following. Pagination and runtime are bounded.",historyServer_message:"Commit message",historyServer_author:"Author",historyServer_path:"Path",historyServerApply:"Run query",historyServerClear:"Clear query",historyServerActive:"Submitted query",reviewView:"Review view",workspaceView:"Working changes",workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details with its first parent selected; no automatic historical file or line navigation.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeBreadcrumbs:"Historical directory path",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG or 8-bit single-scan baseline JPEG regular files , or single-chunk simple static WebP (no progressive/CMYK JPEG or extended/animated WebP); at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Supports commits, fixed A/B and Git working changes; HEAD, index or working bytes follow the selected mode. Conflicted images are unsupported.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches and commit tags only, at most 1000 refs; no fetch. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local branches and tags",revisionRefsCount:"Selectable references loaded"}};function pr(e,t,o,r){let s=e.target;if(!t?.contains(s)||e.defaultPrevented||e.isComposing||s?.closest?.(".monaco-editor")||s?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&s===o&&r)return"clear";let a=s?.isContentEditable||s?.closest?.('input,textarea,select,[role="textbox"]');if(a&&s!==o)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!a&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function ur(e,t){let o=t?[...t.querySelectorAll("button[data-vcs-item]")]:[],r=o.indexOf(e.target);if(r<0)return;let s;if(e.key==="ArrowDown")s=o[r+1];else if(e.key==="ArrowUp")s=o[r-1];else if(e.key==="Home")s=o[0];else if(e.key==="End")s=o.at(-1);else if(e.key==="ArrowRight"&&e.target.dataset.vcsDirectory==="closed"||e.key==="ArrowLeft"&&e.target.dataset.vcsDirectory==="open"){e.preventDefault(),e.target.click();return}else return;e.preventDefault(),s?.focus()}var fr=e=>"dsh-vcs:project:v1:"+e;function mr(e,t){if(!e)return"";try{let o=(t??globalThis.localStorage)?.getItem(fr(e));return typeof o=="string"&&o.length<=1024?o:""}catch{return""}}function hr(e,t,o){if(!(!e||!t))try{(o??globalThis.localStorage)?.setItem(fr(e),t)}catch{}}function gr(e,t=""){return e.find(o=>o.id===t)?.id||e.find(o=>o.relativePath===".")?.id||e[0]?.id||""}var je=(e,t)=>JSON.stringify([e,t]),qe=(e,t=".")=>[e.type.toUpperCase(),e.relativePath==="."?t:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),Xe=(e,t="all")=>e.type==="git"&&["staged","unstaged"].includes(t)?t:"all",vr=(e="",t="")=>e===t?0:e<t?-1:1;function Nt(e=[]){let t={id:"",name:"",directories:new Map,files:[],count:0};for(let r of e){let s=String(r.path||"").split("/").filter(Boolean);if(!s.length)continue;let a=t;for(let p of s.slice(0,-1)){let f=a.id?a.id+"/"+p:p;a.directories.has(p)||a.directories.set(p,{id:f,name:p,directories:new Map,files:[],count:0}),a=a.directories.get(p),a.count++}a.files.push(r)}let o=r=>({...r,directories:[...r.directories.values()].sort((s,a)=>vr(s.name,a.name)).map(o),files:[...r.files].sort((s,a)=>vr(s.path,a.path))});return o(t)}function br(e=[],t){let o=e.findIndex(r=>r.id===t);return{index:o<0?0:o+1,total:e.length}}function yr(e=[],t,o){if(!e.length||!["previous","next"].includes(o))return null;let r=e.findIndex(p=>p.id===t),s=o==="next"?1:-1,a=r<0?o==="next"?-1:0:r;return e[(a+s+e.length)%e.length]||null}function xr(e=""){let t=String(e).split("/").filter(Boolean);return t.slice(0,-1).map((o,r)=>t.slice(0,r+1).join("/"))}function At(e,t=[]){for(let o of e?.directories||[])t.push(o.id),At(o,t);return t}function wr(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function Sr(e=[]){return e.reduce((t,o)=>{let r=wr(o.status);return t.all++,t[r]=(t[r]||0)+1,t},{all:0})}function bo(e=[],t="",o="all"){let r=t.toLowerCase();return e.filter(s=>(o==="all"||wr(s.status)===o)&&s.path.toLowerCase().includes(r)).sort((s,a)=>s.path.localeCompare(a.path))}function kr(e,t,o="",r="all"){return e.map(s=>({...t[s.id],repository:s,changes:bo(t[s.id]?.changes,o,r)}))}function Cr(e,t,o=""){if(!o||!e||e.cwd!==t.cwd)return t;let r=new Map(e.repositories.map(s=>[s.id,s]));for(let s of t.repositories)r.set(s.id,s);return{...t,repositories:[...r.values()],truncated:e.truncated||t.truncated,warnings:[...e.warnings||[],...t.warnings||[]]}}var Er={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Nr=e=>new URL("vcs-assets/"+e,document.baseURI).href;function Ar(){return n.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},n.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),n.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var yo=["slots","layout","locale","connection","uiSession"];function xo(e){e.effect(()=>e.locale.register("local.vcs",cr));let t=e.locale.bind("local.vcs"),o=ut(2),r=Qt(e.connection,()=>t("error"));function s(f){let d=f.useSessions(i=>Object.values(i.byId).find(c=>(c.retainedBy.mainView??0)>0));return n.default.createElement(a,{key:JSON.stringify([d?.id,d?.cwd])},n.default.createElement(p,{session:d}))}class a extends n.default.Component{state={error:null};static getDerivedStateFromError(d){return{error:d}}render(){return this.state.error?n.default.createElement("section",{className:"vcs-root"},n.default.createElement("style",null,pt),n.default.createElement("div",{className:"vcs-message vcs-error"},t("error"),n.default.createElement("button",{onClick:()=>this.setState({error:null})},t("retry")),n.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")))):this.props.children}}function p({session:f}){(0,n.useSyncExternalStore)(l=>e.locale.subscribe(l),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let d=f?.id,[i,c]=(0,n.useState)("all"),[m,w]=(0,n.useState)(0),[g,S]=(0,n.useState)(0),[u,y]=(0,n.useState)(null),[v,b]=(0,n.useState)({}),[h,x]=(0,n.useState)(()=>mr(f?.cwd)),[k,O]=(0,n.useState)(0),[N,q]=(0,n.useState)(""),[K,ve]=(0,n.useState)(""),[J,de]=(0,n.useState)(null),[H,ce]=(0,n.useState)(null),[re,Ce]=(0,n.useState)(!1),[ge,Ee]=(0,n.useState)(!1),[se,L]=(0,n.useState)(""),[_,Z]=(0,n.useState)(""),[ee,Lt]=(0,n.useState)(""),[Pt,Ht]=(0,n.useState)(!1),[ue,$e]=(0,n.useState)(""),[Je,Ot]=(0,n.useState)("all"),[be,Dt]=(0,n.useState)(!0),[Bt,Ze]=(0,n.useState)({}),[Ne,Lr]=(0,n.useState)(!0),[Re,Pr]=(0,n.useState)(!1),[et,Hr]=(0,n.useState)(!1),[We,Ae]=(0,n.useState)("content"),[Ft,Mt]=(0,n.useState)(0),[Or,Tt]=(0,n.useState)(!1),[tt,rt]=(0,n.useState)({added:0,deleted:0,count:0}),[oe,jt]=(0,n.useState)(!1),qt=(0,n.useRef)(null),Jt=(0,n.useRef)(null),ye=(0,n.useRef)(null),ot=(0,n.useRef)(null),Ue=(0,n.useRef)(null),st=(0,n.useRef)(null),Wt=(0,n.useRef)(null),Le=(0,n.useRef)(null),it=(0,n.useRef)(null),nt=(0,n.useRef)(null),at=(0,n.useRef)(!1),Ve=(0,n.useRef)(!1),fe=u?.repositories||[],me=fe.filter(l=>l.id===h),ie=Or&&me.some(l=>l.type==="git"),Dr=()=>{Le.current?.abort(),ce(null),de(null),Z(""),Tt(!0)};(0,n.useEffect)(()=>{fe.some(l=>l.id===h)&&hr(f?.cwd,h)},[f?.cwd,h,u]);let Pe=()=>{Wt.current?.abort(),Le.current?.abort(),ce(null),de(null),Z(""),Ae("content"),rt({added:0,deleted:0,count:0})},Ge=()=>{Ve.current=!1,Pe(),it.current?.abort(),nt.current=u,y(null),b({}),ve(N.trim()),O(l=>l+1)},xe=()=>{Ve.current||(Ve.current=!0,Pe(),it.current?.abort(),nt.current=null,y(null),b({}),ve(""),O(l=>l+1))},Ut=(l=!1)=>{l||S(E=>E+1),at.current=l,l||Pe(),l||b({}),w(E=>E+1)};(0,n.useEffect)(()=>{let l=new AbortController;return it.current=l,L(""),Ce(!!d),d&&r("vcs/repositories",{sessionId:d,...K?{subdirectory:K}:{}},l.signal).then(E=>{if(!l.signal.aborted){let j=Cr(nt.current,E,K);Ve.current=!1,x(I=>gr(j.repositories,I)),y(j)}}).catch(E=>{l.signal.aborted||L(E.message)}).finally(()=>{l.signal.aborted||Ce(!1)}),()=>l.abort()},[d,k,K]),(0,n.useEffect)(()=>{let l=new AbortController,E=at.current;Wt.current=l,at.current=!1,E||(b({}),Z(""));for(let j of me){let I=Xe(j,i);o(()=>r("vcs/status",{sessionId:d,repositoryId:j.id,mode:I},l.signal),l.signal).then(te=>{l.signal.aborted||b(ae=>({...ae,[j.id]:{...te,mode:I}}))}).catch(te=>{if(!l.signal.aborted){if(te.code==="vcs/rediscover-required"){xe();return}b(ae=>({...ae,[j.id]:{error:te.message,changes:[],mode:I}}))}})}return()=>l.abort()},[d,u,h,i,m]),(0,n.useEffect)(()=>{let l=E=>{E.target===window&&d&&h&&document.visibilityState==="visible"&&Ut(!0)};return window.addEventListener("focus",l),()=>window.removeEventListener("focus",l)},[d,h,i]);let He=fe.find(l=>l.id===J?.repositoryId),we=J?v[J.repositoryId]:null;(0,n.useEffect)(()=>{let l=new AbortController;return Le.current=l,ce(null),Z(""),rt({added:0,deleted:0,count:0}),Ae("content"),Ee(!!J&&!!we),!ie&&J&&we&&He&&r("vcs/compare",{sessionId:d,repositoryId:J.repositoryId,mode:Xe(He,i),id:J.id},l.signal).then(E=>{l.signal.aborted||ce(E)}).catch(E=>{if(!l.signal.aborted){if(E.code==="vcs/rediscover-required"){xe();return}Z(E.message)}}).finally(()=>{l.signal.aborted||Ee(!1)}),()=>l.abort()},[J,we,d,i,ie]),(0,n.useEffect)(()=>{let l=!1,E,j=new AbortController;jt(!1),Lt("");let I=document.createElement("link");return I.rel="stylesheet",I.href=Nr("editor.css"),document.head.appendChild(I),_e(Nr("editor.js")+"?v="+encodeURIComponent(Ye)+"&retry="+Ft,{signal:j.signal}).then(te=>{l||(E=te.createDiff(Jt.current,{onStats:rt}),ye.current=E,jt(!0))}).catch(te=>{l||Lt(te.message)}),()=>{l=!0,j.abort(),E?.dispose(),ye.current=null,I.remove()}},[Ft]),(0,n.useEffect)(()=>{oe&&H&&!H.binary&&ye.current?.setContent(H,JSON.stringify([d,u?.cwd,J?.repositoryId,i,J?.id,H.path]))},[oe,H,d,u,J,i]),(0,n.useEffect)(()=>{ye.current?.options({sideBySide:Ne,ignoreWhitespace:Re,wrap:et})},[oe,Ne,Re,et]);let Oe=kr(me,v,ue,Je),Se=Oe.flatMap(l=>l.changes),Br=Sr(we?.changes),lt=br(Se,J?.id),Vt=()=>{$e(""),Ot("all")},Fr=async()=>{let l=H?.path||pe?.path;if(l)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(l);else{let E=document.createElement("textarea");try{if(E.value=l,E.style.cssText="position:fixed;opacity:0",document.body.appendChild(E),E.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{E.remove()}}Ht(!0),window.setTimeout(()=>Ht(!1),1500)}catch{Z(t("copyFailed"))}};(0,n.useEffect)(()=>{let l=E=>{if(ie)return;let j=pr(E,qt.current,Ue.current,!!ue);j&&(E.preventDefault(),j==="search"?(Ue.current?.focus(),Ue.current?.select()):j==="clear"?$e(""):dt(j))};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[ue,Se,J,ie]);let Gt=l=>Ze(E=>{let j={...E};for(let I of Oe)for(let te of At(Nt(I.changes)))j[I.repository.id+"\0"+te]=!l;return j}),Mr=()=>{let l=pe;!l||!J||(Dt(!0),Vt(),Ze(E=>{let j={...E};for(let I of xr(l.path))j[J.repositoryId+"\0"+I]=!1;return j}),st.current=je(J.repositoryId,l.id))};(0,n.useEffect)(()=>{let l=st.current;if(!l)return;let E=[...ot.current?.querySelectorAll("button[data-vcs-change]")||[]].find(j=>j.dataset.vcsChange===l);E&&(E.scrollIntoView({block:"nearest"}),E.focus(),st.current=null)},[be,ue,Je,Bt,Oe]);let dt=l=>{let E=yr(Se,J?.id,l);E&&(Le.current?.abort(),ce(null),Ae("content"),de({repositoryId:h,id:E.id}))},It=re||me.some(l=>!v[l.id]),pe=we?.changes?.find(l=>l.id===J?.id),he=H?.properties,ct=he?[...new Set([...Object.keys(he.left||{}),...Object.keys(he.right||{})])].filter(l=>he.left?.[l]!==he.right?.[l]):[],De=l=>Er[l?.status]||l?.status?.slice(0,1).toUpperCase()||"M",zt=H?.binary?[H.left.label,H.right.label].filter(Boolean).join(" \u2194 "):"",ke=_||(ge?t("loading"):d?It&&!pe?t("loading"):se||(fe.length?pe?H?.binary?t("binary")+(zt?" "+t("binaryComparison",{files:zt}):""):H?!oe&&!ee?t("loading"):"":t("pick"):t("pick"):t("noRepo")):t("noSession")),Tr=l=>ur(l,ot.current),Kt=({entry:l,compact:E=!1,depth:j=0})=>{let I=l.path.lastIndexOf("/");return n.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":je(h,l.id),"aria-current":J?.repositoryId===h&&J?.id===l.id?"true":void 0,style:{paddingInlineStart:8+j*14},title:(l.oldPath?l.oldPath+" \u2192 ":"")+l.path+" \xB7 "+t(De(l)),onClick:()=>{Le.current?.abort(),ce(null),Ae("content"),de({repositoryId:h,id:l.id})}},n.default.createElement("span",{className:"vcs-status","data-status":De(l)},De(l)),n.default.createElement("span",{className:"vcs-filename"},E?l.path.slice(I+1):l.path,l.oldPath&&n.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",l.oldPath)))},_t=({node:l,repository:E,depth:j=0})=>n.default.createElement(n.default.Fragment,null,l.directories.map(I=>{let te=E.id+"\0"+I.id,ae=!!Bt[te];return n.default.createElement(n.default.Fragment,{key:te},n.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":ae?"closed":"open","aria-expanded":!ae,style:{paddingInlineStart:8+j*14},onClick:()=>Ze(jr=>({...jr,[te]:!ae}))},n.default.createElement("span",{"aria-hidden":"true"},ae?"\u203A":"\u2304"),I.name,n.default.createElement("small",null,I.count)),!ae&&n.default.createElement(_t,{node:I,repository:E,depth:j+1}))}),l.files.map(I=>n.default.createElement(Kt,{key:je(E.id,I.id),entry:I,compact:l.id!=="",depth:j})));return n.default.createElement("section",{ref:qt,className:"vcs-root","aria-label":t("title")},n.default.createElement("style",null,pt),n.default.createElement("header",{className:"vcs-top"},n.default.createElement(Ar,null),n.default.createElement("h1",{className:"vcs-title"},t("title")),n.default.createElement("span",{className:"vcs-badge"},t("readonly")),n.default.createElement("span",{className:"vcs-spacer"}),n.default.createElement("select",{"aria-label":t("repositories"),value:h,disabled:re||!fe.length,onChange:l=>{Pe(),b({}),x(l.target.value)}},!fe.length&&n.default.createElement("option",{value:""},t("repositories")),fe.map(l=>n.default.createElement("option",{key:l.id,value:l.id},qe(l,t("workspaceRoot"))))),n.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",n.default.createElement("select",{"aria-label":t("gitMode"),value:i,disabled:ie||!me.some(l=>l.type==="git"),onChange:l=>{Pe(),b({}),c(l.target.value)}},["all","unstaged","staged"].map(l=>n.default.createElement("option",{key:l,value:l},t(l))))),n.default.createElement("button",{onClick:()=>Ut(!1),disabled:It||!d},t("refresh")),n.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")),n.default.createElement("div",{className:"vcs-path",title:u?.cwd||f?.cwd},t("session"),": ",u?.cwd||f?.cwd||"\u2014"),n.default.createElement("form",{className:"vcs-discovery",onSubmit:l=>{l.preventDefault(),Ge()}},n.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:N,onChange:l=>q(l.target.value)}),n.default.createElement("button",{disabled:!d||re},t("rescan")),n.default.createElement("span",null,t("scanHint"))),u?.truncated&&n.default.createElement("div",{className:"vcs-notice"},t("truncated")),(u?.warnings||[]).map((l,E)=>n.default.createElement("div",{className:"vcs-notice",key:E},typeof l=="string"?l:l.message||JSON.stringify(l)))),me.filter(l=>l.type==="svn").map(l=>n.default.createElement(n.default.Fragment,{key:JSON.stringify([d,l.id,k,m])},n.default.createElement(mt,{repositoryId:l.id,sessionId:d,rpc:r,t,onRediscover:xe}),n.default.createElement(gt,{repositoryId:l.id,sessionId:d,rpc:r,t,onRediscover:xe}))),me.some(l=>l.type==="git")&&n.default.createElement(n.default.Fragment,null,n.default.createElement("nav",{className:"vcs-review-views","aria-label":t("reviewView")},n.default.createElement("button",{"aria-pressed":!ie,onClick:()=>Tt(!1)},t("workspaceView")),n.default.createElement("button",{"aria-pressed":ie,"aria-expanded":ie,onClick:Dr},t("history"))),ie&&n.default.createElement(Et,{key:JSON.stringify([d,h,g,k]),sessionId:d,repositoryId:h,rpc:r,t,onRediscover:xe})),n.default.createElement("div",{className:"vcs-body",hidden:ie,"aria-label":t("workspaceView")},n.default.createElement("aside",{className:"vcs-files"},n.default.createElement("div",{className:"vcs-filter"},n.default.createElement("input",{ref:Ue,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:ue,onChange:l=>$e(l.target.value)}),(ue||Je!=="all")&&n.default.createElement("button",{className:"vcs-clear-filter",onClick:Vt},t("clearFilters"))),n.default.createElement("div",{className:"vcs-status-filter","aria-label":t("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(l=>n.default.createElement("button",{key:l,"aria-pressed":Je===l,onClick:()=>Ot(l)},t(l==="all"?"allFiles":Er[l]||"M")," ",n.default.createElement("small",null,Br[l]||0)))),n.default.createElement("div",{className:"vcs-count"},n.default.createElement("span",null,Se.length," ",t("files")),n.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),n.default.createElement("button",{"aria-pressed":be,onClick:()=>Dt(!be)},t(be?"tree":"list"))),be&&n.default.createElement("div",{className:"vcs-tree-actions"},n.default.createElement("button",{onClick:()=>Gt(!0)},t("expandAll")),n.default.createElement("button",{onClick:()=>Gt(!1)},t("collapseAll")),n.default.createElement("button",{onClick:Mr,disabled:!pe},t("revealSelected"))),n.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:ot,onKeyDown:Tr},Oe.map(l=>{let E=l.repository;return n.default.createElement("section",{className:"vcs-repository",key:E.id,"aria-label":qe(E,t("workspaceRoot"))},n.default.createElement("div",{className:"vcs-repository-heading",title:E.root},n.default.createElement("strong",null,qe(E,t("workspaceRoot"))),n.default.createElement("small",null,E.type==="svn"?t("svnBase"):t(Xe(E,i)))),l.error?n.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},l.error,n.default.createElement("button",{onClick:Ge},t("rescan"))):v[E.id]?be?n.default.createElement(_t,{node:Nt(l.changes),repository:E}):l.changes.map(j=>n.default.createElement(Kt,{key:je(E.id,j.id),entry:j})):n.default.createElement("div",{className:"vcs-message"},t("loading")),!l.error&&v[E.id]&&!l.changes.length&&n.default.createElement("div",{className:"vcs-message"},t(ue?"emptySearch":"clean")))}),!Oe.length&&n.default.createElement("div",{className:"vcs-message"},re?t("loading"):se||t(d?"noRepo":"noSession"),se&&n.default.createElement("button",{onClick:Ge},t("rescan"))))),n.default.createElement("main",{className:"vcs-detail"},n.default.createElement("div",{className:"vcs-filehead"},n.default.createElement("strong",{title:H?.path||pe?.path},He?qe(He,t("workspaceRoot"))+" / ":"",H?.path||pe?.path||t("pick")),n.default.createElement("button",{className:"vcs-copy-path",disabled:!(H?.path||pe?.path),onClick:Fr},t(Pt?"copied":"copyPath")),Pt&&n.default.createElement("span",{className:"vcs-sr-only",role:"status"},t("pathCopied")),n.default.createElement("span",{className:"vcs-spacer"}),H&&!H.binary&&oe&&n.default.createElement(n.default.Fragment,null,n.default.createElement("span",{className:"vcs-add"},"+",tt.added),n.default.createElement("span",{className:"vcs-del"},"\u2212",tt.deleted))),ee&&n.default.createElement("div",{className:"vcs-notice",role:"status"},t("fallback")," ",n.default.createElement("button",{onClick:()=>Mt(l=>l+1)},t("retry")),n.default.createElement("details",null,n.default.createElement("summary",null,t("diagnostics")),ee)),H&&n.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},n.default.createElement("span",{className:"vcs-context-status","data-status":De(H)},t(De(H))),H.oldPath&&n.default.createElement("span",{className:"vcs-context-rename",title:H.oldPath+" \u2192 "+H.path},H.oldPath," ",n.default.createElement("b",null,"\u2192")," ",H.path),n.default.createElement("span",null,H.left.label||"\u2014"," ",n.default.createElement("b",null,"\u2194")," ",H.right.label||"\u2014"),(H.left.encoding||H.right.encoding)&&n.default.createElement("span",null,t("encoding"),": ",H.left.encoding||"\u2014"," / ",H.right.encoding||"\u2014")),H&&He?.type==="git"&&n.default.createElement(Fe,{key:JSON.stringify([d,u?.cwd,J.repositoryId,i,J.id,m,we]),workspace:!0,sessionId:d,repositoryId:J.repositoryId,mode:i,id:J.id,rpc:r,t,onRediscover:xe}),H?.notice&&n.default.createElement("div",{className:"vcs-notice"},H.notice),ct.length>0&&n.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(l=>n.default.createElement("button",{key:l,"aria-pressed":We===l,onClick:()=>Ae(l)},t(l),l==="properties"?" ("+ct.length+")":""))),n.default.createElement("div",{className:"vcs-labels"},n.default.createElement("span",null,H?.left.label||"\u2014",H?.left.encoding?" \xB7 "+H.left.encoding:""),n.default.createElement("span",null,H?.right.label||"\u2014",H?.right.encoding?" \xB7 "+H.right.encoding:"")),n.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!ke||We!=="content",style:We==="properties"?{display:"none"}:void 0},n.default.createElement("div",{className:"vcs-editor",ref:Jt,style:ee?{display:"none"}:void 0}),ee&&H&&!H.binary&&!ke&&n.default.createElement(Be,{comparison:H,labels:ze(t)}),ke&&n.default.createElement("div",{className:"vcs-message "+(se||_||ee?"vcs-error":""),role:"status"},ke,(se||_||ee)&&n.default.createElement("button",{onClick:()=>ee?Mt(l=>l+1):Ge()},t(ee?"retry":"rescan")))),We==="properties"&&n.default.createElement("div",{className:"vcs-properties"},n.default.createElement("table",null,n.default.createElement("thead",null,n.default.createElement("tr",null,n.default.createElement("th",null,t("properties")),n.default.createElement("th",null,H?.left.label||t("before")),n.default.createElement("th",null,H?.right.label||t("after")))),n.default.createElement("tbody",null,ct.map(l=>n.default.createElement("tr",{key:l},n.default.createElement("th",null,l),n.default.createElement("td",null,he.left?.[l]??"\u2014"),n.default.createElement("td",null,he.right?.[l]??"\u2014")))))),n.default.createElement("footer",{className:"vcs-toolbar"},n.default.createElement("button",{disabled:!oe,"aria-pressed":Ne,onClick:()=>Lr(!Ne)},t(Ne?"side":"inline")),n.default.createElement("label",null,n.default.createElement("input",{type:"checkbox",disabled:!oe,checked:Re,onChange:l=>Pr(l.target.checked)}),t("whitespace")),n.default.createElement("label",null,n.default.createElement("input",{type:"checkbox",disabled:!oe,checked:et,onChange:l=>Hr(l.target.checked)}),t("wrap")),n.default.createElement("span",{className:"vcs-spacer"}),oe&&n.default.createElement("span",null,tt.count," ",t("changes")),n.default.createElement("button",{disabled:!oe||!H||!!ke,onClick:()=>ye.current?.navigate("previous")},t("previous")),n.default.createElement("button",{disabled:!oe||!H||!!ke,onClick:()=>ye.current?.navigate("next")},t("next")),lt.index>0&&n.default.createElement("span",{className:"vcs-review-position"},t("reviewPosition",{index:lt.index,total:lt.total})),n.default.createElement("span",{className:"vcs-toolbar-separator"}),n.default.createElement("button",{title:t("fileShortcut"),disabled:!Se.length,onClick:()=>dt("previous")},t("previousFile")),n.default.createElement("button",{title:t("fileShortcut"),disabled:!Se.length,onClick:()=>dt("next")},t("nextFile"))))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},s)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>t("title"),order:65},Ar))}
|
|
97
97
|
return module.exports; }});
|