@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 CHANGED
@@ -1,12 +1,14 @@
1
1
  # DSH VCS
2
2
 
3
- DeepSeek Harness(DSH)Web 的只读 Git / SVN 变更预览插件。最新正式发布版本 **0.3.36**,包名 **@feng0531/dsh-vcs**;GitHub 与 npm 安装包均已可下载,latest=0.3.36,两端下载包摘要一致。本次应用户明确要求在真实 DSH GUI 尚未验收时发布;自动验证不代表真实 GUI 验收通过。详见[发布核验记录](<docs/RELEASE-0.3.36.md>)。非商业许可证不变。
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
- - 支持 Git 本地 HEAD 历史分页、提交详情、父提交选择及历史 Diff;可筛选已加载提交和提交内文件。历史 Diff 默认基础文本,可按需加载只读 Monaco。此功能尚待真实 DSH GUI 验收。
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
- 见 [贡献指南](<CONTRIBUTING.md>)、[发布清单](<docs/RELEASING.md>)、[变更记录](<CHANGELOG.md>) 和 [安全说明](<SECURITY.md>)。
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 kr=Object.create;var Je=Object.defineProperty;var Cr=Object.getOwnPropertyDescriptor;var Nr=Object.getOwnPropertyNames;var Er=Object.getPrototypeOf,Lr=Object.prototype.hasOwnProperty;var Ar=(t,e)=>{for(var s in e)Je(t,s,{get:e[s],enumerable:!0})},jt=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Nr(e))!Lr.call(t,o)&&o!==s&&Je(t,o,{get:()=>e[o],enumerable:!(r=Cr(e,o))||r.enumerable});return t};var $=(t,e,s)=>(s=t!=null?kr(Er(t)):{},jt(e||!t||!t.__esModule?Je(s,"default",{value:t,enumerable:!0}):s,t)),Pr=t=>jt(Je({},"__esModule",{value:!0}),t);var Rr={};Ar(Rr,{apply:()=>Zr,inject:()=>$r});module.exports=Pr(Rr);var i=$(require("react"),1);var nt=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
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; }});