@feng0531/dsh-vcs 0.3.87 → 0.3.88
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 +1 -1
- package/dist/client.js +1 -1
- package/package.json +1 -1
- package/text-content.mjs +22 -6
package/README.md
CHANGED
|
@@ -76,7 +76,7 @@ profile是DSH的配置和插件环境,不是Session。下面的web是示例,
|
|
|
76
76
|
## 目前的限制
|
|
77
77
|
|
|
78
78
|
- **不是完整的 Fork 客户端**:没有仓库写操作,历史图和列表都有容量限制;分支导航使用本地分支、标签及本地缓存的远程跟踪引用,不连接远端、不 fetch。
|
|
79
|
-
- 普通文本比较每侧最多 **2MiB**。Git提交/A-B
|
|
79
|
+
- 普通文本比较每侧最多 **2MiB**。Git提交/A-B/工作区三个模式比较超限时可手动加载完整文本(UTF-8/GBK/带BOM的UTF-16),每侧最多 **8MiB、10万行**,单行最多65536字符;计算超时会明确提示结果不完整。工作区读取期间发生变化会拒绝结果,但不是系统级原子快照;SVN大文件仍不支持。
|
|
80
80
|
- 历史 UTF-8 正文分段最多 **16MiB**;分段阅读不是完整Diff,与上述完整比较是不同功能。
|
|
81
81
|
- 重命名追溯仅沿第一父链,至少50%相似且确认唯一删除源/新增目标;合并、复制、歧义或累计32次确认后停止。
|
|
82
82
|
- 子模块变更只显示 Index 记录的提交指针与本地检出状态(已检出/未初始化/目录缺失/不可读);不进入子模块、不读取其 HEAD,也不更新或同步。
|
package/dist/client.js
CHANGED
|
@@ -92,6 +92,6 @@ var Ro=Object.create;var Ye=Object.defineProperty;var er=Object.getOwnPropertyDe
|
|
|
92
92
|
.vcs-root .vcs-toolbar{gap:6px}
|
|
93
93
|
.vcs-root .vcs-title{font-size:16px}
|
|
94
94
|
}
|
|
95
|
-
`;function so(e,t){return async(r,o,i)=>{let n=await e.rpc.call("/vcs-rpc",r,o,i);if(!n.ok){let p=new Error(n.error?.message||String(n.error||t()));throw p.code=n.error?.code,p}return n.value}}function yt(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let t=0,r=[];function o(){for(;t<e&&r.length;){let i=r.shift();if(i.signal?.removeEventListener("abort",i.abort),i.signal?.aborted){i.reject(new Error("Aborted"));continue}t++,Promise.resolve().then(()=>{if(i.signal?.aborted)throw new Error("Aborted");return i.run()}).then(i.resolve,i.reject).finally(()=>{t--,o()})}}return(i,n)=>new Promise((p,m)=>{let l={run:i,signal:n,resolve:p,reject:m,abort:null};if(l.abort=()=>{let s=r.indexOf(l);s>=0&&(r.splice(s,1),m(new Error("Aborted")))},n?.aborted){m(new Error("Aborted"));return}n?.addEventListener("abort",l.abort,{once:!0}),r.push(l),o()})}var re=ee(require("react"),1);function no(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function ao(e="",t=""){let r=no(e),o=no(t),i=0;for(;i<r.length&&i<o.length&&r[i]===o[i];)i++;let n=0;for(;n<r.length-i&&n<o.length-i&&r[r.length-n-1]===o[o.length-n-1];)n++;let p=r.length-n,m=o.length-n,l=p-i,s=m-i,d=l&&s?(l+1)*(s+1):0,f=d>2e5,k=[],g=0;function C(u,x){g++,!(k.length>=2e3)&&k.push({left:u===null?null:{number:u+1,text:r[u]},right:x===null?null:{number:x+1,text:o[x]},kind:u===null?"insert":x===null?"delete":r[u]===o[x]?"equal":"replace"})}for(let u=0;u<i;u++)C(u,u);if(f||!l||!s)for(let u=0;u<Math.max(l,s);u++)C(u<l?i+u:null,u<s?i+u:null);else{let u=s+1,x=new Uint32Array(d);for(let h=l-1;h>=0;h--)for(let S=s-1;S>=0;S--)x[h*u+S]=r[i+h]===o[i+S]?x[(h+1)*u+S+1]+1:Math.max(x[(h+1)*u+S],x[h*u+S+1]);let v=0,y=0;for(;v<l||y<s;)v<l&&y<s&&r[i+v]===o[i+y]?C(i+v++,i+y++):v<l&&(y===s||x[(v+1)*u+y]>=x[v*u+y+1])?C(i+v++,null):C(null,i+y++)}for(let u=0;u<n;u++)C(p+u,m+u);return{rows:k,approximate:f,truncated:g>k.length,totalRows:g,omittedRows:g-k.length,leftLineCount:r.length,rightLineCount:o.length,lcsCells:f?0:d}}var lr={before:"Before",after:"After",readonly:"Read-only text comparison",approximate:"Approximate alignment: the changed region is too large for exact matching; lines are paired by position.",truncated:"Preview truncated to the first 2,000 aligned lines; additional lines are not shown.",empty:"Both versions are empty."},vt={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},cr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},dr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},pr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Te({comparison:e,labels:t={}}){let r=e?.left?.text??"",o=e?.right?.text??"",i=(0,re.useMemo)(()=>ao(r,o),[r,o]),n=m=>t[m]??lr[m],p=(m,l,s)=>{let d=m&&s!=="equal";return re.default.createElement("td",{style:{...vt,background:d?l==="left"?"#d6454520":"#259b4920":void 0}},re.default.createElement("div",{style:cr},re.default.createElement("span",{style:dr},m?.number??""),re.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},d?l==="left"?"\u2212":"+":""),re.default.createElement("pre",{style:pr},m?.text??"")))};return re.default.createElement("section",{className:"vcs-text-comparison","aria-label":n("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},i.approximate&&re.default.createElement("div",{role:"status",style:{padding:8}},n("approximate")),i.truncated&&re.default.createElement("div",{role:"status",style:{padding:8}},n("truncated")," (",2e3," / ",i.totalRows,")"),re.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},re.default.createElement("thead",null,re.default.createElement("tr",null,re.default.createElement("th",{scope:"col",style:{...vt,padding:8,overflowWrap:"anywhere"}},e?.left?.label||n("before")),re.default.createElement("th",{scope:"col",style:{...vt,padding:8,overflowWrap:"anywhere"}},e?.right?.label||n("after")))),re.default.createElement("tbody",null,i.rows.map((m,l)=>re.default.createElement("tr",{key:l,"data-kind":m.kind},p(m.left,"left",m.kind),p(m.right,"right",m.kind))))),!i.rows.length&&re.default.createElement("p",{style:{padding:8}},n("empty")))}var U=ee(require("react"),1);function lo(e,{width:t,height:r,signal:o,timeoutMs:i=1e4,createURL:n=l=>URL.createObjectURL(l),revokeURL:p=l=>URL.revokeObjectURL(l),createImage:m=()=>new Image}={}){return new Promise((l,s)=>{if(o?.aborted){s(o.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(t)||!Number.isInteger(r)||t<1||r<1||t>8192||r>8192||t*r>16e6||!Number.isFinite(i)||i<=0){s(new Error("Invalid image preview"));return}let d,f,k,g=!1,C=!1,u=()=>{C||(C=!0,f&&(f.src=""),d&&p(d))},x=()=>{clearTimeout(k),o?.removeEventListener("abort",y)},v=h=>{g||(g=!0,x(),u(),s(h))},y=()=>v(o.reason||new Error("Image cancelled"));try{d=n(e),f=m(),o?.addEventListener("abort",y,{once:!0}),k=setTimeout(()=>v(new Error("Image decode timed out")),i),f.src=d,Promise.resolve(f.decode()).then(()=>{if(!g){if(o?.aborted){y();return}if(f.naturalWidth!==t||f.naturalHeight!==r){v(new Error("Image dimensions mismatch"));return}g=!0,x(),l({url:d,dispose:u})}},v)}catch(h){v(h)}})}function ur({side:e,sessionId:t,repositoryId:r,commit:o,parentIndex:i,base:n,target:p,workspace:m=!1,mode:l,id:s,rpc:d,t:f,onRediscover:k}){let[g,C]=(0,U.useState)(null),[u,x]=(0,U.useState)(""),[v,y]=(0,U.useState)(0);return(0,U.useEffect)(()=>{let h=new AbortController,S;return C(null),x(""),(async()=>{let N=await d(m?"vcs/workspace-image":n?"vcs/revision-image":"vcs/commit-image",m?{sessionId:t,repositoryId:r,mode:l,id:s,side:e}:n?{sessionId:t,repositoryId:r,base:n,target:p,id:s,side:e}:{sessionId:t,repositoryId:r,commit:o,parentIndex:i,id:s,side:e},h.signal);if(h.signal.aborted)return;if(N.absent){C(N);return}if(!["image/png","image/jpeg","image/webp"].includes(N.mime)||typeof N.base64!="string"||N.base64.length>2796204||!Number.isInteger(N.bytes)||N.bytes<1||N.bytes>2097152)throw Error(f("imageInvalid"));let w=atob(N.base64);if(w.length!==N.bytes)throw Error(f("imageInvalid"));let L=new Blob([Uint8Array.from(w,b=>b.charCodeAt(0))],{type:N.mime});if(S=await lo(L,{width:N.width,height:N.height,signal:h.signal}),h.signal.aborted){S.dispose();return}C({...N,url:S.url})})().catch(N=>{h.signal.aborted||(x(N.message),N.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),S?.dispose()}},[e,t,r,o,i,n,p,m,l,s,v]),U.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":f(e==="left"?"imageBefore":"imageAfter")},U.default.createElement("h5",null,f(e==="left"?"imageBefore":"imageAfter")),u?U.default.createElement("p",{role:"alert"},u," ",U.default.createElement("button",{onClick:()=>y(h=>h+1)},f("retry"))):g?U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,U.default.createElement("code",null,g.commit)," \xB7 ",g.path),g.absent?U.default.createElement("p",null,f("imageAbsent")):U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,g.mime,g.encoding?" \xB7 "+g.encoding:""," \xB7 ",g.width," \xD7 ",g.height," \xB7 ",g.bytes," B"),U.default.createElement("img",{src:g.url,alt:g.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),g.metadataStripped&&U.default.createElement("p",null,f("imageMetadata")))):U.default.createElement("p",{role:"status"},f("loading")))}function je(e){let[t,r]=(0,U.useState)(!1);return U.default.createElement("div",null,U.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("imageCompare")),t&&U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,e.t("imageScope")),U.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(o=>U.default.createElement(ur,{key:o,...e,side:o})))))}var J=ee(require("react"),1);var Z=ee(require("react"),1);function Qe(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var ce=require("react");function co({load:e,node:t,comparison:r,key:o,single:i=!1,onReady:n=()=>{},onError:p=()=>{},onComputation:m=()=>{}}){let l=new AbortController,s,d=!1,f=()=>{let g=s;s=void 0,g?.dispose()};return{done:Promise.resolve().then(()=>(l.signal.throwIfAborted(),e(l.signal))).then(g=>{d||(s=g.createDiff(t,{single:i,onComputation:C=>{d||m(C)}}),s.setContent(r,o),d||n(s))}).catch(g=>{try{f()}finally{d||p(g)}}),dispose(){d||(d=!0,l.abort(),f())}}}async function Xe(e,{signal:t,fetcher:r=fetch,importer:o=i=>import(i)}={}){let i=await r(e,{credentials:"same-origin",cache:"no-cache",signal:t});if(!i.ok)throw new Error("Editor resource HTTP "+i.status+" ("+e+"). "+(i.status===401?"Refresh the authenticated DSH page.":i.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let n=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(n))throw new Error("Editor resource returned "+(n||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),t?.throwIfAborted(),o(e)}var $e="0.3.87";function po({comparison:e,identity:t,enabled:r,single:o,line:i,sideBySide:n,ignoreWhitespace:p,wrap:m}){let l=(0,ce.useRef)(null),s=(0,ce.useRef)(null),[d,f]=(0,ce.useState)(!1),[k,g]=(0,ce.useState)(""),[C,u]=(0,ce.useState)("pending");return(0,ce.useEffect)(()=>{if(f(!1),u("pending"),g(""),!r)return;let x=h=>new URL("vcs-assets/"+h,document.baseURI).href,v=document.createElement("link");v.rel="stylesheet",v.href=x("editor.css"),document.head.appendChild(v);let y=co({node:l.current,comparison:e,key:t,single:o,load:h=>Xe(x("editor.js")+"?v="+encodeURIComponent($e)+"&retry=0",{signal:h}),onReady:h=>{s.current=h,f(!0)},onError:h=>g(h.message),onComputation:u});return()=>{s.current=null;try{y.dispose()}finally{v.remove()}}},[r,e,t,o]),(0,ce.useEffect)(()=>{d&&o&&i&&s.current?.revealLine(i)},[d,o,i]),(0,ce.useEffect)(()=>{d&&s.current?.options({sideBySide:n,ignoreWhitespace:p,wrap:m})},[d,n,p,m]),{node:l,viewer:s,ready:d,error:k,computation:C}}function de({comparison:e,identity:t,t:r,single:o=!1,line:i=null}){let[n,p]=(0,Z.useState)(!0),[m,l]=(0,Z.useState)(!1),[s,d]=(0,Z.useState)(!1),[f,k]=(0,Z.useState)(!0),{node:g,viewer:C,ready:u,error:x,computation:v}=po({comparison:e,identity:t,enabled:f,single:o,line:i,sideBySide:n,ignoreWhitespace:m,wrap:s});return Z.default.createElement("div",null,Z.default.createElement("button",{"aria-pressed":f,onClick:()=>k(y=>!y)},r(f?"historyBasic":"historyAdvanced")),u&&!o&&Z.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},Z.default.createElement("button",{"aria-pressed":n,onClick:()=>p(y=>!y)},r(n?"side":"inline")),Z.default.createElement("label",null,Z.default.createElement("input",{type:"checkbox",checked:m,onChange:y=>l(y.target.checked)}),r("whitespace")),Z.default.createElement("label",null,Z.default.createElement("input",{type:"checkbox",checked:s,onChange:y=>d(y.target.checked)}),r("wrap")),Z.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},r("previous")),Z.default.createElement("button",{onClick:()=>C.current?.navigate("next")},r("next"))),f&&!u&&!x&&Z.default.createElement("p",{role:"status"},r("loading")),e.large&&!o&&u&&Z.default.createElement("p",{role:"status"},r(v==="complete"?"diffComplete":v==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!u&&Z.default.createElement("p",{role:"status"},r("largeFallback")),x&&Z.default.createElement("p",{role:"status"},r("fallback")," ",x),Z.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},Z.default.createElement("div",{ref:g,style:{position:"absolute",inset:0,visibility:u?"visible":"hidden"},"aria-hidden":!u}),!u&&Z.default.createElement(Te,{comparison:e,labels:Qe(r)})))}function bt({sessionId:e,repositoryId:t,mode:r,id:o,rpc:i,t:n,onRediscover:p}){let[m,l]=(0,J.useState)(null),[s,d]=(0,J.useState)(""),[f,k]=(0,J.useState)(0),[g,C]=(0,J.useState)(1),[u,x]=(0,J.useState)(3);(0,J.useEffect)(()=>{let b=new AbortController;return l(null),d(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:r,id:o},b.signal).then(W=>{b.signal.aborted||l(W)}).catch(W=>{b.signal.aborted||(d(W.message),W.code==="vcs/rediscover-required"&&p())}),()=>b.abort()},[e,t,r,o,f]);let v={1:n("conflictStage1"),2:n("conflictStage2"),3:n("conflictStage3")},y=n("conflictStageMissing"),h=v[g],S=v[u],N=(0,J.useMemo)(()=>{if(!m)return null;let b=H=>m.stages.find(te=>te.stage===H),W=H=>{let te=b(H);return!te||!te.present?{text:"",label:v[H]}:{text:te.text,label:v[H],...te.binary?{binary:!0}:{},...te.encoding?{encoding:te.encoding}:{},...te.notice?{notice:te.notice}:{}}},z=W(g),j=W(u),ie=[z.notice,j.notice].filter(Boolean);return b(g)?.present&&b(u)?.present||ie.push(y),{path:m.path,left:z,right:j,binary:!!(z.binary||j.binary),...ie.length?{notice:[...new Set(ie)].join(" \xB7 ")}:{}}},[m,g,u,h,S,y]);if(s)return J.default.createElement("section",{"aria-label":n("conflictStages")},J.default.createElement("h4",null,n("conflictStages")),J.default.createElement("p",{role:"alert"},s," ",J.default.createElement("button",{onClick:()=>k(b=>b+1)},n("retry"))));if(!m||!N)return J.default.createElement("section",{"aria-label":n("conflictStages")},J.default.createElement("h4",null,n("conflictStages")),J.default.createElement("p",{role:"status"},n("loading")));let w=b=>m.stages.find(W=>W.stage===b),L=N.binary&&!N.left.text&&!N.right.text;return J.default.createElement("section",{"aria-label":n("conflictStages")},J.default.createElement("h4",null,n("conflictStages")),J.default.createElement("p",null,n("conflictStagesScope")),J.default.createElement("ul",null,[1,2,3].map(b=>J.default.createElement("li",{key:b},J.default.createElement("code",null,v[b])," \xB7 ",w(b)?.present?n("conflictStagePresent"):n("conflictStageAbsent"),w(b)?.kind==="gitlink"&&" \xB7 "+n("conflictStageGitlink"),w(b)?.kind==="symlink"&&" \xB7 "+n("conflictStageSymlink"),w(b)?.present&&w(b)?.notice&&" \xB7 "+w(b).notice))),J.default.createElement("label",null,n("conflictStageLeft")," ",J.default.createElement("select",{"aria-label":n("conflictStageLeft"),value:g,onChange:b=>C(Number(b.target.value))},[1,2,3].map(b=>J.default.createElement("option",{key:b,value:b},v[b])))),J.default.createElement("label",null,n("conflictStageRight")," ",J.default.createElement("select",{"aria-label":n("conflictStageRight"),value:u,onChange:b=>x(Number(b.target.value))},[1,2,3].map(b=>J.default.createElement("option",{key:b,value:b},v[b])))),N.notice&&J.default.createElement("p",{role:"status"},N.notice),L?J.default.createElement("p",{role:"status"},n("binary")):J.default.createElement(de,{key:JSON.stringify([o,g,u,m.snapshot]),comparison:N,identity:JSON.stringify([e,t,r,o,g,u,m.snapshot]),t:n}))}var uo=ee(require("react"),1);function xt({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let r=e.checkout;return uo.default.createElement("span",{className:"vcs-submodule","data-checkout":r,title:e.recorded+" \xB7 "+t("submoduleCheckout_"+r)},t("submoduleBadge")," ",e.recorded.slice(0,10))}var Q=ee(require("react"),1);function wt(e){return Q.default.createElement(mr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function mr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,p]=(0,Q.useState)(!1),[m,l]=(0,Q.useState)(null),[s,d]=(0,Q.useState)(""),[f,k]=(0,Q.useState)(0);return(0,Q.useEffect)(()=>{if(!n)return;let g=new AbortController;return l(null),d(""),r("vcs/svn-identity",{sessionId:e,repositoryId:t},g.signal).then(C=>{g.signal.aborted||l(C)}).catch(C=>{g.signal.aborted||(d(C.message),C.code==="vcs/rediscover-required"&&i())}),()=>g.abort()},[n,e,t,f]),Q.default.createElement("section",null,Q.default.createElement("button",{"aria-expanded":n,onClick:()=>p(g=>!g)},o("svnIdentity")),n&&Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,o("svnOfflineIdentity")),s?Q.default.createElement("p",{role:"alert"},s," ",Q.default.createElement("button",{onClick:()=>k(g=>g+1)},o("retry"))):m?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(g=>Q.default.createElement(Q.default.Fragment,{key:g},Q.default.createElement("dt",null,g),Q.default.createElement("dd",null,Q.default.createElement("code",null,m[g]))))),Q.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))):Q.default.createElement("p",{role:"status"},o("loading"))))}function Ze(e,t,{now:r=Date.now,schedule:o=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=r()||e-r()>3e5)throw Error("Invalid SVN consent expiry");let n=!0,p=o(()=>{n&&(n=!1,t())},e-r());return()=>{n&&(n=!1,i(p))}}function fo(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 oe=ee(require("react"),1);var G=ee(require("react"),1);function St(e){return G.default.createElement(hr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function hr({sessionId:e,repositoryId:t,rpc:r,t:o,onApproved:i,onRediscover:n}){let[p,m]=(0,G.useState)(!1),[l,s]=(0,G.useState)(null),[d,f]=(0,G.useState)(!1),[k,g]=(0,G.useState)(""),[C,u]=(0,G.useState)(!1),[x,v]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!p)return;let S=new AbortController;return s(null),f(!1),g(""),u(!0),r("vcs/svn-describe",{sessionId:e,repositoryId:t},S.signal).then(N=>{S.signal.aborted||s(N)}).catch(N=>{S.signal.aborted||(g(N.message),N.code==="vcs/rediscover-required"&&n())}).finally(()=>{S.signal.aborted||u(!1)}),()=>S.abort()},[p,e,t,x]);let[y,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!p||!l||l.expiresAt===void 0)return;let S=()=>{s(null),f(!1),h(0),u(!1),g(o("svnOfferExpired"))};try{return Ze(l.expiresAt,S)}catch{S()}},[p,l]),(0,G.useEffect)(()=>{if(!y||!p||!l)return;let S=new AbortController;return u(!0),g(""),r("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:l.offer,explicit:!0},S.signal).then(N=>{S.signal.aborted||i(N)}).catch(N=>{S.signal.aborted||(g(N.message),f(!1),N.code==="vcs/rediscover-required"&&n())}).finally(()=>{S.signal.aborted||u(!1)}),()=>S.abort()},[y,p,l]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":p,onClick:()=>{h(0),m(S=>!S)}},o("svnConsentReview")),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,o("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{h(0),v(S=>S+1)}},o("retry"))),l&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(S=>G.default.createElement(G.default.Fragment,{key:S},G.default.createElement("dt",null,S),G.default.createElement("dd",null,G.default.createElement("code",null,l[S]))))),l.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:d,disabled:C,onChange:S=>f(S.target.checked)}),o("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!d,onClick:()=>h(S=>S+1)},o("svnConsentApprove"))):G.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},o("loading"))))}var D=ee(require("react"),1);function kt(e){return D.default.createElement(gr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function gr({sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:p}){let[m,l]=(0,D.useState)(o),[s,d]=(0,D.useState)(null),[f,k]=(0,D.useState)(null),[g,C]=(0,D.useState)(""),[u,x]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let v=new AbortController;return d(null),k(null),C(""),i("vcs/svn-log",{sessionId:e,repositoryId:t,token:r,snapshot:o,cursor:m,limit:50},v.signal).then(y=>{v.signal.aborted||d(y)}).catch(y=>{v.signal.aborted||(C(y.message),y.code==="vcs/rediscover-required"&&p())}),()=>v.abort()},[m,u]),D.default.createElement("section",null,D.default.createElement("p",null,n("svnHistoryScope")," \xB7 r",o),g?D.default.createElement("p",{role:"alert"},g," ",D.default.createElement("button",{onClick:()=>x(v=>v+1)},n("retry"))):s?D.default.createElement(D.default.Fragment,null,D.default.createElement("ol",null,s.entries.map(v=>D.default.createElement("li",{key:v.revision},D.default.createElement("button",{onClick:()=>k(v.revision)},"r",v.revision," \xB7 ",v.message)))),s.nextRevision!==null&&D.default.createElement("button",{onClick:()=>l(s.nextRevision)},n("historyMore"))):D.default.createElement("p",{role:"status"},n("loading")),f&&D.default.createElement(yr,{key:f,sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:p,revision:f}))}function yr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:p,onRediscover:m}){let[l,s]=(0,D.useState)(null),[d,f]=(0,D.useState)(null),[k,g]=(0,D.useState)(""),[C,u]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let x=new AbortController;return s(null),f(null),g(""),n("vcs/svn-detail",{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i},x.signal).then(v=>{x.signal.aborted||s(v)}).catch(v=>{x.signal.aborted||(g(v.message),v.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[C]),D.default.createElement("section",null,k?D.default.createElement("p",{role:"alert"},k," ",D.default.createElement("button",{onClick:()=>u(x=>x+1)},p("retry"))):l?D.default.createElement(D.default.Fragment,null,D.default.createElement("p",null,l.message),l.changes.map(x=>D.default.createElement("div",{key:x.id},D.default.createElement("span",null,x.action," ",x.path),x.kind==="file"&&D.default.createElement(D.default.Fragment,null,D.default.createElement("button",{onClick:()=>f({id:x.id,mode:"compare"})},p("svnHistoricalDiff")),D.default.createElement("button",{onClick:()=>f({id:x.id,mode:"trace"})},p("fileHistory")),x.copyFromPath&&x.copyFromRevision&&D.default.createElement("button",{onClick:()=>f({id:x.id,mode:"copytrace"})},p("svnCopyHistory")," \xB7 ",x.copyFromPath," @r",x.copyFromRevision),x.copySourceOutsideScope&&D.default.createElement("span",null,p("svnCopyOutside")))))):D.default.createElement("p",{role:"status"},p("loading")),d&&D.default.createElement(vr,{key:JSON.stringify(d),sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:p,onRediscover:m,...d}))}function vr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:p,onRediscover:m,id:l,mode:s}){let[d,f]=(0,D.useState)(null),[k,g]=(0,D.useState)(null),[C,u]=(0,D.useState)(""),[x,v]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let y=new AbortController;return f(null),u(""),n("vcs/svn-"+s,{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,id:l,...k===null?{}:{cursor:k}},y.signal).then(h=>{y.signal.aborted||f(h)}).catch(h=>{y.signal.aborted||(u(h.message),h.code==="vcs/rediscover-required"&&m())}),()=>y.abort()},[k,x]),C?D.default.createElement("p",{role:"alert"},C," ",D.default.createElement("button",{onClick:()=>v(y=>y+1)},p("retry"))):d?s==="compare"?d.binary?D.default.createElement("p",null,p("binary")):D.default.createElement(de,{comparison:d,identity:JSON.stringify([e,t,o,i,l]),t:p}):D.default.createElement("section",null,D.default.createElement("p",null,p(s==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",d.path," \xB7 peg r",d.pegRevision),D.default.createElement("ol",null,d.entries.map(y=>D.default.createElement("li",{key:y.revision},"r",y.revision," \xB7 ",y.message))),d.nextRevision!==null&&D.default.createElement("button",{onClick:()=>g(d.nextRevision)},p("historyMore"))):D.default.createElement("p",{role:"status"},p("loading"))}function Ct(e){return oe.default.createElement(br,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function br({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,p]=(0,oe.useState)(null),[m,l]=(0,oe.useState)(!1),[s,d]=(0,oe.useState)(""),[f,k]=(0,oe.useState)(0);(0,oe.useEffect)(()=>{if(n)return()=>{Promise.resolve().then(()=>r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token})).catch(()=>{})}},[n,e,t]),(0,oe.useEffect)(()=>{if(n)try{return Ze(n.expiresAt,()=>{p(null),k(0),l(!1),d(o("svnExpired"))})}catch{p(null),d(o("svnExpired"))}},[n]),(0,oe.useEffect)(()=>{if(!f||!n)return;let u=new AbortController;return l(!0),d(""),r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token},u.signal).then(()=>{u.signal.aborted||p(null)}).catch(x=>{u.signal.aborted||(d(x.message),x.code==="vcs/rediscover-required"&&i())}).finally(()=>{u.signal.aborted||l(!1)}),()=>u.abort()},[f,n]);let g=u=>{try{fo(u),d(""),k(0),p(u)}catch(x){d(x.message)}},C=async(...u)=>{try{return await r(...u)}catch(x){throw x.code==="vcs/svn-consent-required"&&!u[2]?.aborted&&(p(null),k(0),d(o("svnExpired"))),x}};return oe.default.createElement("section",null,!n&&s&&oe.default.createElement("p",{role:"status"},s),n?oe.default.createElement(oe.default.Fragment,null,oe.default.createElement("p",null,o("svnGrantScope")),oe.default.createElement("button",{disabled:m,onClick:()=>k(u=>u+1)},o("svnRevoke")),s&&oe.default.createElement("p",{role:"alert"},s),!m&&oe.default.createElement(kt,{sessionId:e,repositoryId:t,t:o,onRediscover:i,rpc:C,token:n.token,snapshot:n.snapshot})):oe.default.createElement(St,{sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i,onApproved:g}))}var E=ee(require("react"),1);function mo(e){let t=new Map;for(let r of e){let o=t.get(r.commit);o||(o={names:[],hidden:0},t.set(r.commit,o)),o.names.length<3?o.names.push(r.name):o.hidden++}return t}var q=ee(require("react"),1);var T=ee(require("react"),1);var I=ee(require("react"),1);var K=ee(require("react"),1);function Nt(e){return K.default.createElement(xr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function xr({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:p}){let[m,l]=(0,K.useState)(!1),[s,d]=(0,K.useState)([0]),[f,k]=(0,K.useState)(null),[g,C]=(0,K.useState)(""),[u,x]=(0,K.useState)(0),v=s.at(-1);(0,K.useEffect)(()=>{if(!m)return;let h=new AbortController;return k(null),C(""),i("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:r,path:o,offset:v},h.signal).then(S=>{h.signal.aborted||k(S)}).catch(S=>{h.signal.aborted||(C(S.message),S.code==="vcs/rediscover-required"&&p())}),()=>h.abort()},[m,v,e,t,r,o,u]);let y=(0,K.useMemo)(()=>f?{path:o,left:{label:r,text:f.text},right:{label:r,text:f.text}}:null,[f,o,r]);return K.default.createElement("section",null,K.default.createElement("button",{"aria-expanded":m,onClick:()=>l(h=>!h)},n("segments")),m&&K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,n("segmentScope")),g?K.default.createElement("p",{role:"alert"},g," ",K.default.createElement("button",{onClick:()=>x(h=>h+1)},n("retry"))):f?K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,n("segmentBytes"),": ",f.offset,"\u2013",f.endOffset," / ",f.totalBytes," \xB7 ",K.default.createElement("code",null,f.oid)),K.default.createElement("button",{disabled:s.length===1,onClick:()=>d(h=>h.slice(0,-1))},n("previous")),K.default.createElement("button",{disabled:f.nextOffset===null,onClick:()=>d(h=>[...h,f.nextOffset])},n("next")),K.default.createElement(de,{single:!0,comparison:y,identity:JSON.stringify([e,t,r,o,v]),t:n})):K.default.createElement("p",{role:"status"},n("loading"))))}var M=ee(require("react"),1);function wr({sessionId:e,repositoryId:t,commit:r,path:o,follow:i,since:n,until:p,rpc:m,t:l,onRediscover:s,onSelectCommit:d}){let[f,k]=(0,M.useState)({commits:[],nextOffset:null}),[g,C]=(0,M.useState)(0),[u,x]=(0,M.useState)(0),[v,y]=(0,M.useState)(!0),[h,S]=(0,M.useState)("");(0,M.useEffect)(()=>{let w=new AbortController;return y(!0),S(""),m("vcs/tree-history",{sessionId:e,repositoryId:t,commit:r,path:o,offset:g,limit:50,follow:i,...n?{since:n}:{},...p?{until:p}:{}},w.signal).then(L=>{w.signal.aborted||k(b=>({...L,commits:g?[...b.commits,...L.commits]:L.commits}))}).catch(L=>{w.signal.aborted||(S(L.message),L.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||y(!1)}),()=>w.abort()},[e,t,r,o,g,u,i,n,p]);let N=w=>l(w.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":w.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":w.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return M.default.createElement("section",{"aria-label":l("pathHistory"),"aria-busy":v},M.default.createElement("p",null,l("pathHistoryScope")),M.default.createElement("p",{style:{overflowWrap:"anywhere"}},M.default.createElement("code",null,f.path||o)," \xB7 ",M.default.createElement("code",null,r),f.followsRenames!==void 0&&M.default.createElement(M.default.Fragment,null," \xB7 ",l(f.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),M.default.createElement("ol",null,f.commits.map(w=>M.default.createElement("li",{key:w.id},M.default.createElement("code",{title:w.id},w.id.slice(0,10))," \xB7 ",d?M.default.createElement("button",{onClick:()=>d(w.id,w.path||o)},w.subject):w.subject,M.default.createElement("div",null,w.boundary&&M.default.createElement("span",null,N(w)," "),w.path&&M.default.createElement("code",null,w.oldPath?w.oldPath+" \u2192 ":"",w.path)," ",w.similarity!==void 0&&M.default.createElement("span",null,l("fileHistorySimilarity"),": ",w.similarity,"% \xB7 "),w.author," \xB7 ",M.default.createElement("time",{dateTime:w.date},w.date))))),v&&M.default.createElement("p",{role:"status"},l("loading")),h&&M.default.createElement("p",{role:"alert"},h," ",M.default.createElement("button",{onClick:()=>x(w=>w+1)},l("retry"))),!v&&!h&&!f.commits.length&&M.default.createElement("p",null,l("historyEmpty")),f.truncated&&M.default.createElement("p",{role:"status"},l("historyLimit")),!h&&f.nextOffset!==null&&M.default.createElement("button",{disabled:v,onClick:()=>C(f.nextOffset)},l("historyMore")))}function Et(e){let[t,r]=(0,M.useState)(!1),[o,i]=(0,M.useState)(!1),[n,p]=(0,M.useState)(""),[m,l]=(0,M.useState)("");return M.default.createElement("div",null,M.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("pathHistory")),t&&M.default.createElement(M.default.Fragment,null,M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),M.default.createElement("p",null,e.t("pathHistoryFollowScope")),M.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((s,d)=>M.default.createElement("label",{key:s},e.t(s)," ",M.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(s),value:d?m:n,onChange:f=>d?l(f.target.value):p(f.target.value)}))),M.default.createElement(wr,{key:String(o),follow:o,since:n.trim()||null,until:m.trim()||null,...e})))}function Ge({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:p,onClose:m,onSelectCommit:l,line:s=null}){let[d,f]=(0,I.useState)(null),[k,g]=(0,I.useState)(""),[C,u]=(0,I.useState)(0);(0,I.useEffect)(()=>{let v=new AbortController;return f(null),g(""),i("vcs/tree-file",{sessionId:e,repositoryId:t,commit:r,path:o},v.signal).then(y=>{v.signal.aborted||f(y)}).catch(y=>{v.signal.aborted||(g(y.message),y.code==="vcs/rediscover-required"&&p())}),()=>v.abort()},[e,t,r,o,C]);let x=(0,I.useMemo)(()=>d?{path:o,left:{label:r,text:d.text||""},right:{label:r,text:d.text||""}}:null,[d,o,r]);return I.default.createElement("section",{"aria-label":n("treePreview")},I.default.createElement("h4",null,o),I.default.createElement("button",{onClick:m},n("treeClose")),I.default.createElement("p",null,I.default.createElement("code",null,r)),k?I.default.createElement("p",{role:"alert"},k," ",I.default.createElement("button",{onClick:()=>u(v=>v+1)},n("retry"))):d?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,I.default.createElement("code",null,d.oid)," \xB7 ",n("encoding"),": ",d.encoding||"\u2014"),s&&I.default.createElement("p",{role:"status"},n("blameOriginLine"),": ",s,!d.text||s>d.text.split(`
|
|
95
|
+
`;function so(e,t){return async(r,o,i)=>{let n=await e.rpc.call("/vcs-rpc",r,o,i);if(!n.ok){let p=new Error(n.error?.message||String(n.error||t()));throw p.code=n.error?.code,p}return n.value}}function yt(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let t=0,r=[];function o(){for(;t<e&&r.length;){let i=r.shift();if(i.signal?.removeEventListener("abort",i.abort),i.signal?.aborted){i.reject(new Error("Aborted"));continue}t++,Promise.resolve().then(()=>{if(i.signal?.aborted)throw new Error("Aborted");return i.run()}).then(i.resolve,i.reject).finally(()=>{t--,o()})}}return(i,n)=>new Promise((p,m)=>{let l={run:i,signal:n,resolve:p,reject:m,abort:null};if(l.abort=()=>{let s=r.indexOf(l);s>=0&&(r.splice(s,1),m(new Error("Aborted")))},n?.aborted){m(new Error("Aborted"));return}n?.addEventListener("abort",l.abort,{once:!0}),r.push(l),o()})}var re=ee(require("react"),1);function no(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function ao(e="",t=""){let r=no(e),o=no(t),i=0;for(;i<r.length&&i<o.length&&r[i]===o[i];)i++;let n=0;for(;n<r.length-i&&n<o.length-i&&r[r.length-n-1]===o[o.length-n-1];)n++;let p=r.length-n,m=o.length-n,l=p-i,s=m-i,d=l&&s?(l+1)*(s+1):0,f=d>2e5,k=[],g=0;function C(u,x){g++,!(k.length>=2e3)&&k.push({left:u===null?null:{number:u+1,text:r[u]},right:x===null?null:{number:x+1,text:o[x]},kind:u===null?"insert":x===null?"delete":r[u]===o[x]?"equal":"replace"})}for(let u=0;u<i;u++)C(u,u);if(f||!l||!s)for(let u=0;u<Math.max(l,s);u++)C(u<l?i+u:null,u<s?i+u:null);else{let u=s+1,x=new Uint32Array(d);for(let h=l-1;h>=0;h--)for(let S=s-1;S>=0;S--)x[h*u+S]=r[i+h]===o[i+S]?x[(h+1)*u+S+1]+1:Math.max(x[(h+1)*u+S],x[h*u+S+1]);let v=0,y=0;for(;v<l||y<s;)v<l&&y<s&&r[i+v]===o[i+y]?C(i+v++,i+y++):v<l&&(y===s||x[(v+1)*u+y]>=x[v*u+y+1])?C(i+v++,null):C(null,i+y++)}for(let u=0;u<n;u++)C(p+u,m+u);return{rows:k,approximate:f,truncated:g>k.length,totalRows:g,omittedRows:g-k.length,leftLineCount:r.length,rightLineCount:o.length,lcsCells:f?0:d}}var lr={before:"Before",after:"After",readonly:"Read-only text comparison",approximate:"Approximate alignment: the changed region is too large for exact matching; lines are paired by position.",truncated:"Preview truncated to the first 2,000 aligned lines; additional lines are not shown.",empty:"Both versions are empty."},vt={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},cr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},dr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},pr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Te({comparison:e,labels:t={}}){let r=e?.left?.text??"",o=e?.right?.text??"",i=(0,re.useMemo)(()=>ao(r,o),[r,o]),n=m=>t[m]??lr[m],p=(m,l,s)=>{let d=m&&s!=="equal";return re.default.createElement("td",{style:{...vt,background:d?l==="left"?"#d6454520":"#259b4920":void 0}},re.default.createElement("div",{style:cr},re.default.createElement("span",{style:dr},m?.number??""),re.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},d?l==="left"?"\u2212":"+":""),re.default.createElement("pre",{style:pr},m?.text??"")))};return re.default.createElement("section",{className:"vcs-text-comparison","aria-label":n("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},i.approximate&&re.default.createElement("div",{role:"status",style:{padding:8}},n("approximate")),i.truncated&&re.default.createElement("div",{role:"status",style:{padding:8}},n("truncated")," (",2e3," / ",i.totalRows,")"),re.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},re.default.createElement("thead",null,re.default.createElement("tr",null,re.default.createElement("th",{scope:"col",style:{...vt,padding:8,overflowWrap:"anywhere"}},e?.left?.label||n("before")),re.default.createElement("th",{scope:"col",style:{...vt,padding:8,overflowWrap:"anywhere"}},e?.right?.label||n("after")))),re.default.createElement("tbody",null,i.rows.map((m,l)=>re.default.createElement("tr",{key:l,"data-kind":m.kind},p(m.left,"left",m.kind),p(m.right,"right",m.kind))))),!i.rows.length&&re.default.createElement("p",{style:{padding:8}},n("empty")))}var U=ee(require("react"),1);function lo(e,{width:t,height:r,signal:o,timeoutMs:i=1e4,createURL:n=l=>URL.createObjectURL(l),revokeURL:p=l=>URL.revokeObjectURL(l),createImage:m=()=>new Image}={}){return new Promise((l,s)=>{if(o?.aborted){s(o.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(t)||!Number.isInteger(r)||t<1||r<1||t>8192||r>8192||t*r>16e6||!Number.isFinite(i)||i<=0){s(new Error("Invalid image preview"));return}let d,f,k,g=!1,C=!1,u=()=>{C||(C=!0,f&&(f.src=""),d&&p(d))},x=()=>{clearTimeout(k),o?.removeEventListener("abort",y)},v=h=>{g||(g=!0,x(),u(),s(h))},y=()=>v(o.reason||new Error("Image cancelled"));try{d=n(e),f=m(),o?.addEventListener("abort",y,{once:!0}),k=setTimeout(()=>v(new Error("Image decode timed out")),i),f.src=d,Promise.resolve(f.decode()).then(()=>{if(!g){if(o?.aborted){y();return}if(f.naturalWidth!==t||f.naturalHeight!==r){v(new Error("Image dimensions mismatch"));return}g=!0,x(),l({url:d,dispose:u})}},v)}catch(h){v(h)}})}function ur({side:e,sessionId:t,repositoryId:r,commit:o,parentIndex:i,base:n,target:p,workspace:m=!1,mode:l,id:s,rpc:d,t:f,onRediscover:k}){let[g,C]=(0,U.useState)(null),[u,x]=(0,U.useState)(""),[v,y]=(0,U.useState)(0);return(0,U.useEffect)(()=>{let h=new AbortController,S;return C(null),x(""),(async()=>{let N=await d(m?"vcs/workspace-image":n?"vcs/revision-image":"vcs/commit-image",m?{sessionId:t,repositoryId:r,mode:l,id:s,side:e}:n?{sessionId:t,repositoryId:r,base:n,target:p,id:s,side:e}:{sessionId:t,repositoryId:r,commit:o,parentIndex:i,id:s,side:e},h.signal);if(h.signal.aborted)return;if(N.absent){C(N);return}if(!["image/png","image/jpeg","image/webp"].includes(N.mime)||typeof N.base64!="string"||N.base64.length>2796204||!Number.isInteger(N.bytes)||N.bytes<1||N.bytes>2097152)throw Error(f("imageInvalid"));let w=atob(N.base64);if(w.length!==N.bytes)throw Error(f("imageInvalid"));let L=new Blob([Uint8Array.from(w,b=>b.charCodeAt(0))],{type:N.mime});if(S=await lo(L,{width:N.width,height:N.height,signal:h.signal}),h.signal.aborted){S.dispose();return}C({...N,url:S.url})})().catch(N=>{h.signal.aborted||(x(N.message),N.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),S?.dispose()}},[e,t,r,o,i,n,p,m,l,s,v]),U.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":f(e==="left"?"imageBefore":"imageAfter")},U.default.createElement("h5",null,f(e==="left"?"imageBefore":"imageAfter")),u?U.default.createElement("p",{role:"alert"},u," ",U.default.createElement("button",{onClick:()=>y(h=>h+1)},f("retry"))):g?U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,U.default.createElement("code",null,g.commit)," \xB7 ",g.path),g.absent?U.default.createElement("p",null,f("imageAbsent")):U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,g.mime,g.encoding?" \xB7 "+g.encoding:""," \xB7 ",g.width," \xD7 ",g.height," \xB7 ",g.bytes," B"),U.default.createElement("img",{src:g.url,alt:g.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),g.metadataStripped&&U.default.createElement("p",null,f("imageMetadata")))):U.default.createElement("p",{role:"status"},f("loading")))}function je(e){let[t,r]=(0,U.useState)(!1);return U.default.createElement("div",null,U.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("imageCompare")),t&&U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,e.t("imageScope")),U.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(o=>U.default.createElement(ur,{key:o,...e,side:o})))))}var J=ee(require("react"),1);var Z=ee(require("react"),1);function Qe(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var ce=require("react");function co({load:e,node:t,comparison:r,key:o,single:i=!1,onReady:n=()=>{},onError:p=()=>{},onComputation:m=()=>{}}){let l=new AbortController,s,d=!1,f=()=>{let g=s;s=void 0,g?.dispose()};return{done:Promise.resolve().then(()=>(l.signal.throwIfAborted(),e(l.signal))).then(g=>{d||(s=g.createDiff(t,{single:i,onComputation:C=>{d||m(C)}}),s.setContent(r,o),d||n(s))}).catch(g=>{try{f()}finally{d||p(g)}}),dispose(){d||(d=!0,l.abort(),f())}}}async function Xe(e,{signal:t,fetcher:r=fetch,importer:o=i=>import(i)}={}){let i=await r(e,{credentials:"same-origin",cache:"no-cache",signal:t});if(!i.ok)throw new Error("Editor resource HTTP "+i.status+" ("+e+"). "+(i.status===401?"Refresh the authenticated DSH page.":i.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let n=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(n))throw new Error("Editor resource returned "+(n||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),t?.throwIfAborted(),o(e)}var $e="0.3.88";function po({comparison:e,identity:t,enabled:r,single:o,line:i,sideBySide:n,ignoreWhitespace:p,wrap:m}){let l=(0,ce.useRef)(null),s=(0,ce.useRef)(null),[d,f]=(0,ce.useState)(!1),[k,g]=(0,ce.useState)(""),[C,u]=(0,ce.useState)("pending");return(0,ce.useEffect)(()=>{if(f(!1),u("pending"),g(""),!r)return;let x=h=>new URL("vcs-assets/"+h,document.baseURI).href,v=document.createElement("link");v.rel="stylesheet",v.href=x("editor.css"),document.head.appendChild(v);let y=co({node:l.current,comparison:e,key:t,single:o,load:h=>Xe(x("editor.js")+"?v="+encodeURIComponent($e)+"&retry=0",{signal:h}),onReady:h=>{s.current=h,f(!0)},onError:h=>g(h.message),onComputation:u});return()=>{s.current=null;try{y.dispose()}finally{v.remove()}}},[r,e,t,o]),(0,ce.useEffect)(()=>{d&&o&&i&&s.current?.revealLine(i)},[d,o,i]),(0,ce.useEffect)(()=>{d&&s.current?.options({sideBySide:n,ignoreWhitespace:p,wrap:m})},[d,n,p,m]),{node:l,viewer:s,ready:d,error:k,computation:C}}function de({comparison:e,identity:t,t:r,single:o=!1,line:i=null}){let[n,p]=(0,Z.useState)(!0),[m,l]=(0,Z.useState)(!1),[s,d]=(0,Z.useState)(!1),[f,k]=(0,Z.useState)(!0),{node:g,viewer:C,ready:u,error:x,computation:v}=po({comparison:e,identity:t,enabled:f,single:o,line:i,sideBySide:n,ignoreWhitespace:m,wrap:s});return Z.default.createElement("div",null,Z.default.createElement("button",{"aria-pressed":f,onClick:()=>k(y=>!y)},r(f?"historyBasic":"historyAdvanced")),u&&!o&&Z.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},Z.default.createElement("button",{"aria-pressed":n,onClick:()=>p(y=>!y)},r(n?"side":"inline")),Z.default.createElement("label",null,Z.default.createElement("input",{type:"checkbox",checked:m,onChange:y=>l(y.target.checked)}),r("whitespace")),Z.default.createElement("label",null,Z.default.createElement("input",{type:"checkbox",checked:s,onChange:y=>d(y.target.checked)}),r("wrap")),Z.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},r("previous")),Z.default.createElement("button",{onClick:()=>C.current?.navigate("next")},r("next"))),f&&!u&&!x&&Z.default.createElement("p",{role:"status"},r("loading")),e.large&&!o&&u&&Z.default.createElement("p",{role:"status"},r(v==="complete"?"diffComplete":v==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!u&&Z.default.createElement("p",{role:"status"},r("largeFallback")),x&&Z.default.createElement("p",{role:"status"},r("fallback")," ",x),Z.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},Z.default.createElement("div",{ref:g,style:{position:"absolute",inset:0,visibility:u?"visible":"hidden"},"aria-hidden":!u}),!u&&Z.default.createElement(Te,{comparison:e,labels:Qe(r)})))}function bt({sessionId:e,repositoryId:t,mode:r,id:o,rpc:i,t:n,onRediscover:p}){let[m,l]=(0,J.useState)(null),[s,d]=(0,J.useState)(""),[f,k]=(0,J.useState)(0),[g,C]=(0,J.useState)(1),[u,x]=(0,J.useState)(3);(0,J.useEffect)(()=>{let b=new AbortController;return l(null),d(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:r,id:o},b.signal).then(W=>{b.signal.aborted||l(W)}).catch(W=>{b.signal.aborted||(d(W.message),W.code==="vcs/rediscover-required"&&p())}),()=>b.abort()},[e,t,r,o,f]);let v={1:n("conflictStage1"),2:n("conflictStage2"),3:n("conflictStage3")},y=n("conflictStageMissing"),h=v[g],S=v[u],N=(0,J.useMemo)(()=>{if(!m)return null;let b=H=>m.stages.find(te=>te.stage===H),W=H=>{let te=b(H);return!te||!te.present?{text:"",label:v[H]}:{text:te.text,label:v[H],...te.binary?{binary:!0}:{},...te.encoding?{encoding:te.encoding}:{},...te.notice?{notice:te.notice}:{}}},z=W(g),j=W(u),ie=[z.notice,j.notice].filter(Boolean);return b(g)?.present&&b(u)?.present||ie.push(y),{path:m.path,left:z,right:j,binary:!!(z.binary||j.binary),...ie.length?{notice:[...new Set(ie)].join(" \xB7 ")}:{}}},[m,g,u,h,S,y]);if(s)return J.default.createElement("section",{"aria-label":n("conflictStages")},J.default.createElement("h4",null,n("conflictStages")),J.default.createElement("p",{role:"alert"},s," ",J.default.createElement("button",{onClick:()=>k(b=>b+1)},n("retry"))));if(!m||!N)return J.default.createElement("section",{"aria-label":n("conflictStages")},J.default.createElement("h4",null,n("conflictStages")),J.default.createElement("p",{role:"status"},n("loading")));let w=b=>m.stages.find(W=>W.stage===b),L=N.binary&&!N.left.text&&!N.right.text;return J.default.createElement("section",{"aria-label":n("conflictStages")},J.default.createElement("h4",null,n("conflictStages")),J.default.createElement("p",null,n("conflictStagesScope")),J.default.createElement("ul",null,[1,2,3].map(b=>J.default.createElement("li",{key:b},J.default.createElement("code",null,v[b])," \xB7 ",w(b)?.present?n("conflictStagePresent"):n("conflictStageAbsent"),w(b)?.kind==="gitlink"&&" \xB7 "+n("conflictStageGitlink"),w(b)?.kind==="symlink"&&" \xB7 "+n("conflictStageSymlink"),w(b)?.present&&w(b)?.notice&&" \xB7 "+w(b).notice))),J.default.createElement("label",null,n("conflictStageLeft")," ",J.default.createElement("select",{"aria-label":n("conflictStageLeft"),value:g,onChange:b=>C(Number(b.target.value))},[1,2,3].map(b=>J.default.createElement("option",{key:b,value:b},v[b])))),J.default.createElement("label",null,n("conflictStageRight")," ",J.default.createElement("select",{"aria-label":n("conflictStageRight"),value:u,onChange:b=>x(Number(b.target.value))},[1,2,3].map(b=>J.default.createElement("option",{key:b,value:b},v[b])))),N.notice&&J.default.createElement("p",{role:"status"},N.notice),L?J.default.createElement("p",{role:"status"},n("binary")):J.default.createElement(de,{key:JSON.stringify([o,g,u,m.snapshot]),comparison:N,identity:JSON.stringify([e,t,r,o,g,u,m.snapshot]),t:n}))}var uo=ee(require("react"),1);function xt({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let r=e.checkout;return uo.default.createElement("span",{className:"vcs-submodule","data-checkout":r,title:e.recorded+" \xB7 "+t("submoduleCheckout_"+r)},t("submoduleBadge")," ",e.recorded.slice(0,10))}var Q=ee(require("react"),1);function wt(e){return Q.default.createElement(mr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function mr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,p]=(0,Q.useState)(!1),[m,l]=(0,Q.useState)(null),[s,d]=(0,Q.useState)(""),[f,k]=(0,Q.useState)(0);return(0,Q.useEffect)(()=>{if(!n)return;let g=new AbortController;return l(null),d(""),r("vcs/svn-identity",{sessionId:e,repositoryId:t},g.signal).then(C=>{g.signal.aborted||l(C)}).catch(C=>{g.signal.aborted||(d(C.message),C.code==="vcs/rediscover-required"&&i())}),()=>g.abort()},[n,e,t,f]),Q.default.createElement("section",null,Q.default.createElement("button",{"aria-expanded":n,onClick:()=>p(g=>!g)},o("svnIdentity")),n&&Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,o("svnOfflineIdentity")),s?Q.default.createElement("p",{role:"alert"},s," ",Q.default.createElement("button",{onClick:()=>k(g=>g+1)},o("retry"))):m?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(g=>Q.default.createElement(Q.default.Fragment,{key:g},Q.default.createElement("dt",null,g),Q.default.createElement("dd",null,Q.default.createElement("code",null,m[g]))))),Q.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))):Q.default.createElement("p",{role:"status"},o("loading"))))}function Ze(e,t,{now:r=Date.now,schedule:o=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=r()||e-r()>3e5)throw Error("Invalid SVN consent expiry");let n=!0,p=o(()=>{n&&(n=!1,t())},e-r());return()=>{n&&(n=!1,i(p))}}function fo(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 oe=ee(require("react"),1);var G=ee(require("react"),1);function St(e){return G.default.createElement(hr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function hr({sessionId:e,repositoryId:t,rpc:r,t:o,onApproved:i,onRediscover:n}){let[p,m]=(0,G.useState)(!1),[l,s]=(0,G.useState)(null),[d,f]=(0,G.useState)(!1),[k,g]=(0,G.useState)(""),[C,u]=(0,G.useState)(!1),[x,v]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!p)return;let S=new AbortController;return s(null),f(!1),g(""),u(!0),r("vcs/svn-describe",{sessionId:e,repositoryId:t},S.signal).then(N=>{S.signal.aborted||s(N)}).catch(N=>{S.signal.aborted||(g(N.message),N.code==="vcs/rediscover-required"&&n())}).finally(()=>{S.signal.aborted||u(!1)}),()=>S.abort()},[p,e,t,x]);let[y,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!p||!l||l.expiresAt===void 0)return;let S=()=>{s(null),f(!1),h(0),u(!1),g(o("svnOfferExpired"))};try{return Ze(l.expiresAt,S)}catch{S()}},[p,l]),(0,G.useEffect)(()=>{if(!y||!p||!l)return;let S=new AbortController;return u(!0),g(""),r("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:l.offer,explicit:!0},S.signal).then(N=>{S.signal.aborted||i(N)}).catch(N=>{S.signal.aborted||(g(N.message),f(!1),N.code==="vcs/rediscover-required"&&n())}).finally(()=>{S.signal.aborted||u(!1)}),()=>S.abort()},[y,p,l]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":p,onClick:()=>{h(0),m(S=>!S)}},o("svnConsentReview")),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,o("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{h(0),v(S=>S+1)}},o("retry"))),l&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(S=>G.default.createElement(G.default.Fragment,{key:S},G.default.createElement("dt",null,S),G.default.createElement("dd",null,G.default.createElement("code",null,l[S]))))),l.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:d,disabled:C,onChange:S=>f(S.target.checked)}),o("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!d,onClick:()=>h(S=>S+1)},o("svnConsentApprove"))):G.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},o("loading"))))}var D=ee(require("react"),1);function kt(e){return D.default.createElement(gr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function gr({sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:p}){let[m,l]=(0,D.useState)(o),[s,d]=(0,D.useState)(null),[f,k]=(0,D.useState)(null),[g,C]=(0,D.useState)(""),[u,x]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let v=new AbortController;return d(null),k(null),C(""),i("vcs/svn-log",{sessionId:e,repositoryId:t,token:r,snapshot:o,cursor:m,limit:50},v.signal).then(y=>{v.signal.aborted||d(y)}).catch(y=>{v.signal.aborted||(C(y.message),y.code==="vcs/rediscover-required"&&p())}),()=>v.abort()},[m,u]),D.default.createElement("section",null,D.default.createElement("p",null,n("svnHistoryScope")," \xB7 r",o),g?D.default.createElement("p",{role:"alert"},g," ",D.default.createElement("button",{onClick:()=>x(v=>v+1)},n("retry"))):s?D.default.createElement(D.default.Fragment,null,D.default.createElement("ol",null,s.entries.map(v=>D.default.createElement("li",{key:v.revision},D.default.createElement("button",{onClick:()=>k(v.revision)},"r",v.revision," \xB7 ",v.message)))),s.nextRevision!==null&&D.default.createElement("button",{onClick:()=>l(s.nextRevision)},n("historyMore"))):D.default.createElement("p",{role:"status"},n("loading")),f&&D.default.createElement(yr,{key:f,sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:p,revision:f}))}function yr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:p,onRediscover:m}){let[l,s]=(0,D.useState)(null),[d,f]=(0,D.useState)(null),[k,g]=(0,D.useState)(""),[C,u]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let x=new AbortController;return s(null),f(null),g(""),n("vcs/svn-detail",{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i},x.signal).then(v=>{x.signal.aborted||s(v)}).catch(v=>{x.signal.aborted||(g(v.message),v.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[C]),D.default.createElement("section",null,k?D.default.createElement("p",{role:"alert"},k," ",D.default.createElement("button",{onClick:()=>u(x=>x+1)},p("retry"))):l?D.default.createElement(D.default.Fragment,null,D.default.createElement("p",null,l.message),l.changes.map(x=>D.default.createElement("div",{key:x.id},D.default.createElement("span",null,x.action," ",x.path),x.kind==="file"&&D.default.createElement(D.default.Fragment,null,D.default.createElement("button",{onClick:()=>f({id:x.id,mode:"compare"})},p("svnHistoricalDiff")),D.default.createElement("button",{onClick:()=>f({id:x.id,mode:"trace"})},p("fileHistory")),x.copyFromPath&&x.copyFromRevision&&D.default.createElement("button",{onClick:()=>f({id:x.id,mode:"copytrace"})},p("svnCopyHistory")," \xB7 ",x.copyFromPath," @r",x.copyFromRevision),x.copySourceOutsideScope&&D.default.createElement("span",null,p("svnCopyOutside")))))):D.default.createElement("p",{role:"status"},p("loading")),d&&D.default.createElement(vr,{key:JSON.stringify(d),sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:p,onRediscover:m,...d}))}function vr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:p,onRediscover:m,id:l,mode:s}){let[d,f]=(0,D.useState)(null),[k,g]=(0,D.useState)(null),[C,u]=(0,D.useState)(""),[x,v]=(0,D.useState)(0);return(0,D.useEffect)(()=>{let y=new AbortController;return f(null),u(""),n("vcs/svn-"+s,{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,id:l,...k===null?{}:{cursor:k}},y.signal).then(h=>{y.signal.aborted||f(h)}).catch(h=>{y.signal.aborted||(u(h.message),h.code==="vcs/rediscover-required"&&m())}),()=>y.abort()},[k,x]),C?D.default.createElement("p",{role:"alert"},C," ",D.default.createElement("button",{onClick:()=>v(y=>y+1)},p("retry"))):d?s==="compare"?d.binary?D.default.createElement("p",null,p("binary")):D.default.createElement(de,{comparison:d,identity:JSON.stringify([e,t,o,i,l]),t:p}):D.default.createElement("section",null,D.default.createElement("p",null,p(s==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",d.path," \xB7 peg r",d.pegRevision),D.default.createElement("ol",null,d.entries.map(y=>D.default.createElement("li",{key:y.revision},"r",y.revision," \xB7 ",y.message))),d.nextRevision!==null&&D.default.createElement("button",{onClick:()=>g(d.nextRevision)},p("historyMore"))):D.default.createElement("p",{role:"status"},p("loading"))}function Ct(e){return oe.default.createElement(br,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function br({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,p]=(0,oe.useState)(null),[m,l]=(0,oe.useState)(!1),[s,d]=(0,oe.useState)(""),[f,k]=(0,oe.useState)(0);(0,oe.useEffect)(()=>{if(n)return()=>{Promise.resolve().then(()=>r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token})).catch(()=>{})}},[n,e,t]),(0,oe.useEffect)(()=>{if(n)try{return Ze(n.expiresAt,()=>{p(null),k(0),l(!1),d(o("svnExpired"))})}catch{p(null),d(o("svnExpired"))}},[n]),(0,oe.useEffect)(()=>{if(!f||!n)return;let u=new AbortController;return l(!0),d(""),r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token},u.signal).then(()=>{u.signal.aborted||p(null)}).catch(x=>{u.signal.aborted||(d(x.message),x.code==="vcs/rediscover-required"&&i())}).finally(()=>{u.signal.aborted||l(!1)}),()=>u.abort()},[f,n]);let g=u=>{try{fo(u),d(""),k(0),p(u)}catch(x){d(x.message)}},C=async(...u)=>{try{return await r(...u)}catch(x){throw x.code==="vcs/svn-consent-required"&&!u[2]?.aborted&&(p(null),k(0),d(o("svnExpired"))),x}};return oe.default.createElement("section",null,!n&&s&&oe.default.createElement("p",{role:"status"},s),n?oe.default.createElement(oe.default.Fragment,null,oe.default.createElement("p",null,o("svnGrantScope")),oe.default.createElement("button",{disabled:m,onClick:()=>k(u=>u+1)},o("svnRevoke")),s&&oe.default.createElement("p",{role:"alert"},s),!m&&oe.default.createElement(kt,{sessionId:e,repositoryId:t,t:o,onRediscover:i,rpc:C,token:n.token,snapshot:n.snapshot})):oe.default.createElement(St,{sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i,onApproved:g}))}var E=ee(require("react"),1);function mo(e){let t=new Map;for(let r of e){let o=t.get(r.commit);o||(o={names:[],hidden:0},t.set(r.commit,o)),o.names.length<3?o.names.push(r.name):o.hidden++}return t}var q=ee(require("react"),1);var T=ee(require("react"),1);var I=ee(require("react"),1);var K=ee(require("react"),1);function Nt(e){return K.default.createElement(xr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function xr({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:p}){let[m,l]=(0,K.useState)(!1),[s,d]=(0,K.useState)([0]),[f,k]=(0,K.useState)(null),[g,C]=(0,K.useState)(""),[u,x]=(0,K.useState)(0),v=s.at(-1);(0,K.useEffect)(()=>{if(!m)return;let h=new AbortController;return k(null),C(""),i("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:r,path:o,offset:v},h.signal).then(S=>{h.signal.aborted||k(S)}).catch(S=>{h.signal.aborted||(C(S.message),S.code==="vcs/rediscover-required"&&p())}),()=>h.abort()},[m,v,e,t,r,o,u]);let y=(0,K.useMemo)(()=>f?{path:o,left:{label:r,text:f.text},right:{label:r,text:f.text}}:null,[f,o,r]);return K.default.createElement("section",null,K.default.createElement("button",{"aria-expanded":m,onClick:()=>l(h=>!h)},n("segments")),m&&K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,n("segmentScope")),g?K.default.createElement("p",{role:"alert"},g," ",K.default.createElement("button",{onClick:()=>x(h=>h+1)},n("retry"))):f?K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,n("segmentBytes"),": ",f.offset,"\u2013",f.endOffset," / ",f.totalBytes," \xB7 ",K.default.createElement("code",null,f.oid)),K.default.createElement("button",{disabled:s.length===1,onClick:()=>d(h=>h.slice(0,-1))},n("previous")),K.default.createElement("button",{disabled:f.nextOffset===null,onClick:()=>d(h=>[...h,f.nextOffset])},n("next")),K.default.createElement(de,{single:!0,comparison:y,identity:JSON.stringify([e,t,r,o,v]),t:n})):K.default.createElement("p",{role:"status"},n("loading"))))}var M=ee(require("react"),1);function wr({sessionId:e,repositoryId:t,commit:r,path:o,follow:i,since:n,until:p,rpc:m,t:l,onRediscover:s,onSelectCommit:d}){let[f,k]=(0,M.useState)({commits:[],nextOffset:null}),[g,C]=(0,M.useState)(0),[u,x]=(0,M.useState)(0),[v,y]=(0,M.useState)(!0),[h,S]=(0,M.useState)("");(0,M.useEffect)(()=>{let w=new AbortController;return y(!0),S(""),m("vcs/tree-history",{sessionId:e,repositoryId:t,commit:r,path:o,offset:g,limit:50,follow:i,...n?{since:n}:{},...p?{until:p}:{}},w.signal).then(L=>{w.signal.aborted||k(b=>({...L,commits:g?[...b.commits,...L.commits]:L.commits}))}).catch(L=>{w.signal.aborted||(S(L.message),L.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||y(!1)}),()=>w.abort()},[e,t,r,o,g,u,i,n,p]);let N=w=>l(w.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":w.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":w.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return M.default.createElement("section",{"aria-label":l("pathHistory"),"aria-busy":v},M.default.createElement("p",null,l("pathHistoryScope")),M.default.createElement("p",{style:{overflowWrap:"anywhere"}},M.default.createElement("code",null,f.path||o)," \xB7 ",M.default.createElement("code",null,r),f.followsRenames!==void 0&&M.default.createElement(M.default.Fragment,null," \xB7 ",l(f.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),M.default.createElement("ol",null,f.commits.map(w=>M.default.createElement("li",{key:w.id},M.default.createElement("code",{title:w.id},w.id.slice(0,10))," \xB7 ",d?M.default.createElement("button",{onClick:()=>d(w.id,w.path||o)},w.subject):w.subject,M.default.createElement("div",null,w.boundary&&M.default.createElement("span",null,N(w)," "),w.path&&M.default.createElement("code",null,w.oldPath?w.oldPath+" \u2192 ":"",w.path)," ",w.similarity!==void 0&&M.default.createElement("span",null,l("fileHistorySimilarity"),": ",w.similarity,"% \xB7 "),w.author," \xB7 ",M.default.createElement("time",{dateTime:w.date},w.date))))),v&&M.default.createElement("p",{role:"status"},l("loading")),h&&M.default.createElement("p",{role:"alert"},h," ",M.default.createElement("button",{onClick:()=>x(w=>w+1)},l("retry"))),!v&&!h&&!f.commits.length&&M.default.createElement("p",null,l("historyEmpty")),f.truncated&&M.default.createElement("p",{role:"status"},l("historyLimit")),!h&&f.nextOffset!==null&&M.default.createElement("button",{disabled:v,onClick:()=>C(f.nextOffset)},l("historyMore")))}function Et(e){let[t,r]=(0,M.useState)(!1),[o,i]=(0,M.useState)(!1),[n,p]=(0,M.useState)(""),[m,l]=(0,M.useState)("");return M.default.createElement("div",null,M.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("pathHistory")),t&&M.default.createElement(M.default.Fragment,null,M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),M.default.createElement("p",null,e.t("pathHistoryFollowScope")),M.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((s,d)=>M.default.createElement("label",{key:s},e.t(s)," ",M.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(s),value:d?m:n,onChange:f=>d?l(f.target.value):p(f.target.value)}))),M.default.createElement(wr,{key:String(o),follow:o,since:n.trim()||null,until:m.trim()||null,...e})))}function Ge({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:p,onClose:m,onSelectCommit:l,line:s=null}){let[d,f]=(0,I.useState)(null),[k,g]=(0,I.useState)(""),[C,u]=(0,I.useState)(0);(0,I.useEffect)(()=>{let v=new AbortController;return f(null),g(""),i("vcs/tree-file",{sessionId:e,repositoryId:t,commit:r,path:o},v.signal).then(y=>{v.signal.aborted||f(y)}).catch(y=>{v.signal.aborted||(g(y.message),y.code==="vcs/rediscover-required"&&p())}),()=>v.abort()},[e,t,r,o,C]);let x=(0,I.useMemo)(()=>d?{path:o,left:{label:r,text:d.text||""},right:{label:r,text:d.text||""}}:null,[d,o,r]);return I.default.createElement("section",{"aria-label":n("treePreview")},I.default.createElement("h4",null,o),I.default.createElement("button",{onClick:m},n("treeClose")),I.default.createElement("p",null,I.default.createElement("code",null,r)),k?I.default.createElement("p",{role:"alert"},k," ",I.default.createElement("button",{onClick:()=>u(v=>v+1)},n("retry"))):d?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,I.default.createElement("code",null,d.oid)," \xB7 ",n("encoding"),": ",d.encoding||"\u2014"),s&&I.default.createElement("p",{role:"status"},n("blameOriginLine"),": ",s,!d.text||s>d.text.split(`
|
|
96
96
|
`).length?" \xB7 "+n("blameUnmapped"):""),d.notice&&I.default.createElement("p",{role:"status"},d.notice),d.binary?I.default.createElement("p",null,n("binary")):d.text===""?I.default.createElement("p",null,n("treeEmpty")):I.default.createElement(de,{single:!0,line:s,comparison:x,identity:JSON.stringify([e,t,r,o]),t:n})):I.default.createElement("p",{role:"status"},n("loading")),I.default.createElement(Nt,{sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:p}),I.default.createElement(Et,{key:JSON.stringify([e,t,r,o]),sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:p,onSelectCommit:l}))}function ho(e=""){let t=[{path:"",name:"/"}];if(e){let r="";for(let o of e.split("/"))r=r?r+"/"+o:o,t.push({path:r,name:o})}return t}function go(e,t="",r=""){let o=t?t+"/":"",i=r.toLowerCase();return e.filter(n=>{let p=n.path.slice(o.length);return n.path.startsWith(o)&&p.length>0&&!p.includes("/")&&p.toLowerCase().includes(i)}).sort((n,p)=>+(p.type==="tree")-+(n.type==="tree")||(n.path<p.path?-1:n.path>p.path?1:0))}function Sr({sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:p}){let[m,l]=(0,T.useState)(null),[s,d]=(0,T.useState)(""),[f,k]=(0,T.useState)(0),[g,C]=(0,T.useState)(""),[u,x]=(0,T.useState)(0),[v,y]=(0,T.useState)(""),[h,S]=(0,T.useState)(null);if((0,T.useEffect)(()=>{let b=new AbortController;return l(null),d(""),o("vcs/tree",{sessionId:e,repositoryId:t,commit:r},b.signal).then(W=>{b.signal.aborted||l(W)}).catch(W=>{b.signal.aborted||(d(W.message),W.code==="vcs/rediscover-required"&&n())}),()=>b.abort()},[e,t,r,f]),s)return T.default.createElement("p",{role:"alert"},s," ",T.default.createElement("button",{onClick:()=>k(b=>b+1)},i("retry")));if(!m)return T.default.createElement("p",{role:"status"},i("loading"));let N=g?g+"/":"",w=go(m.entries,g,v),L=b=>{C(b),x(0),y(""),S(null)};return T.default.createElement("section",{"aria-label":i("historicalTree")},T.default.createElement("p",null,i("historicalTreeScope")),T.default.createElement("code",null,r),T.default.createElement("p",null,g||"/"," ",g&&T.default.createElement("button",{onClick:()=>L(g.includes("/")?g.slice(0,g.lastIndexOf("/")):"")},i("treeUp"))),T.default.createElement("nav",{"aria-label":i("treeBreadcrumbs")},ho(g).map(b=>T.default.createElement(T.default.Fragment,{key:b.path},b.path&&" / ",b.path===g?T.default.createElement("span",{"aria-current":"location"},b.name):T.default.createElement("button",{onClick:()=>L(b.path)},b.name)))),T.default.createElement("label",null,i("treeSearch")," ",T.default.createElement("input",{"aria-label":i("treeSearch"),value:v,onChange:b=>{y(b.target.value),x(0),S(null)}})),T.default.createElement("p",null,w.length," ",i("treeEntries")),!w.length&&v&&T.default.createElement("p",{role:"status"},i("emptySearch")),T.default.createElement("ul",null,w.slice(u*100,u*100+100).map(b=>T.default.createElement("li",{key:b.path},b.type==="tree"?T.default.createElement("button",{onClick:()=>L(b.path)},b.path.slice(N.length),"/"):b.type==="blob"&&["100644","100755"].includes(b.mode)?T.default.createElement("button",{"aria-pressed":h===b.path,onClick:()=>S(b.path)},b.path.slice(N.length)):T.default.createElement("span",null,b.path.slice(N.length))," \xB7 ",T.default.createElement("code",null,b.mode," ",b.type," ",T.default.createElement("span",{title:b.oid},b.oid.slice(0,10)))))),u>0&&T.default.createElement("button",{onClick:()=>{x(b=>b-1),S(null)}},i("treePrevious")),(u+1)*100<w.length&&T.default.createElement("button",{onClick:()=>{x(b=>b+1),S(null)}},i("treeNext")),h&&T.default.createElement(Ge,{key:JSON.stringify([e,t,r,h]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:p,path:h,onClose:()=>S(null)}))}function Lt(e){return T.default.createElement(kr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function kr(e){let[t,r]=(0,T.useState)(!1);return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historicalTree")),t&&T.default.createElement(Sr,{...e}))}var Y=ee(require("react"),1);var O=ee(require("react"),1);function Cr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,follow:n,since:p,until:m,rpc:l,t:s,onRediscover:d,onSelectCommit:f}){let[k,g]=(0,O.useState)({commits:[],nextOffset:null}),[C,u]=(0,O.useState)(0),[x,v]=(0,O.useState)(0),[y,h]=(0,O.useState)(!0),[S,N]=(0,O.useState)(""),w={...p?{since:p}:{},...m?{until:m}:{}};return(0,O.useEffect)(()=>{let L=new AbortController;return h(!0),N(""),l("vcs/file-history",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,offset:C,limit:50,follow:n,...w},L.signal).then(b=>{L.signal.aborted||g(W=>({...b,commits:C?[...W.commits,...b.commits]:b.commits}))}).catch(b=>{L.signal.aborted||(N(b.message),b.code==="vcs/rediscover-required"&&d())}).finally(()=>{L.signal.aborted||h(!1)}),()=>L.abort()},[e,t,r,o,i,C,x,n,p,m]),O.default.createElement("section",{"aria-label":s("fileHistory"),"aria-busy":y},O.default.createElement("p",null,s("fileHistoryScope")),O.default.createElement("p",{style:{overflowWrap:"anywhere"}},k.path," \xB7 ",O.default.createElement("code",null,r)),O.default.createElement("ol",null,k.commits.map(L=>O.default.createElement("li",{key:L.id},O.default.createElement("code",{title:L.id},L.id.slice(0,10))," \xB7 ",f?O.default.createElement("button",{onClick:()=>f(L.id,L.path||k.path)},L.subject):L.subject,O.default.createElement("div",null,L.boundary&&O.default.createElement("span",null,s(L.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":L.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":L.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),L.path&&O.default.createElement("code",null,L.oldPath?L.oldPath+" \u2192 ":"",L.path)," ",L.similarity!==void 0&&O.default.createElement("span",null,s("fileHistorySimilarity"),": ",L.similarity,"% \xB7 "),L.author," \xB7 ",O.default.createElement("time",{dateTime:L.date},L.date))))),y&&O.default.createElement("p",{role:"status"},s("loading")),S&&O.default.createElement("p",{role:"alert"},S," ",O.default.createElement("button",{onClick:()=>v(L=>L+1)},s("retry"))),!y&&!S&&!k.commits.length&&O.default.createElement("p",null,s("historyEmpty")),k.truncated&&O.default.createElement("p",{role:"status"},s("historyLimit")),!S&&k.nextOffset!==null&&O.default.createElement("button",{disabled:y,onClick:()=>u(k.nextOffset)},s("historyMore")))}function Ht(e){return O.default.createElement(Nr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Nr(e){let[t,r]=(0,O.useState)(!1),[o,i]=(0,O.useState)(!1),[n,p]=(0,O.useState)(""),[m,l]=(0,O.useState)("");return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("fileHistory")),t&&O.default.createElement(O.default.Fragment,null,O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),O.default.createElement("p",null,e.t("fileHistoryFollowScope")),O.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((s,d)=>O.default.createElement("label",{key:s},e.t(s)," ",O.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(s),value:d?m:n,onChange:f=>d?l(f.target.value):p(f.target.value)}))),O.default.createElement(Cr,{key:String(o),follow:o,since:n.trim()||null,until:m.trim()||null,...e})))}var F=ee(require("react"),1);function Er({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,rpc:n,t:p,onRediscover:m,onSelectCommit:l}){let[s,d]=(0,F.useState)(null),[f,k]=(0,F.useState)(""),[g,C]=(0,F.useState)(0),[u,x]=(0,F.useState)(1),[v,y]=(0,F.useState)(null);return(0,F.useEffect)(()=>{let h=new AbortController;return d(null),k(""),y(null),n("vcs/blame",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,startLine:u,lineLimit:500},h.signal).then(S=>{h.signal.aborted||d(S)}).catch(S=>{h.signal.aborted||(k(S.message),S.code==="vcs/rediscover-required"&&m())}),()=>h.abort()},[e,t,r,o,i,g,u]),f?F.default.createElement("p",{role:"alert"},f," ",F.default.createElement("button",{onClick:()=>C(h=>h+1)},p("retry"))):s?F.default.createElement("section",{"aria-label":p("blame")},F.default.createElement("p",null,p("blameScope")),l&&F.default.createElement("p",null,p("blameNavigation")),s.notice&&F.default.createElement("p",{role:"status"},s.notice),s.truncated&&F.default.createElement("p",{role:"status"},p("blameLimit")),!s.notice&&!s.lines.length&&F.default.createElement("p",null,p("blameEmpty")),!!s.lines.length&&F.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},F.default.createElement("table",null,F.default.createElement("thead",null,F.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(h=>F.default.createElement("th",{key:h,scope:"col"},p(h))))),F.default.createElement("tbody",null,s.lines.map(h=>F.default.createElement("tr",{key:h.line},F.default.createElement("th",{scope:"row"},h.line),F.default.createElement("td",null,l?F.default.createElement("button",{title:h.commit,onClick:()=>l(h.commit,h.path||null)},F.default.createElement("code",null,h.commit.slice(0,10))):F.default.createElement("code",{title:h.commit},h.commit.slice(0,10))),F.default.createElement("td",null,h.author),F.default.createElement("td",null,h.summary),F.default.createElement("td",null,F.default.createElement("pre",{style:{margin:0}},h.text),h.path&&h.originalLine?F.default.createElement("button",{onClick:()=>y(h)},p("blameOriginLine"),": ",h.path,":",h.originalLine):F.default.createElement("span",null,p("blameUnmapped")))))))),F.default.createElement("p",null,s.startLine||u,"\u2013",s.lines.at(-1)?.line||u," / ",s.totalLines??"\u2014"),F.default.createElement("button",{disabled:u===1,onClick:()=>x(Math.max(1,u-500))},p("blamePrevious")),F.default.createElement("button",{disabled:s.nextLine==null,onClick:()=>x(s.nextLine)},p("blameNext")),v&&F.default.createElement(Ge,{key:JSON.stringify([v.commit,v.path,v.originalLine]),sessionId:e,repositoryId:t,rpc:n,t:p,onRediscover:m,onSelectCommit:l,commit:v.commit,path:v.path,line:v.originalLine,onClose:()=>y(null)})):F.default.createElement("p",{role:"status"},p("loading"))}function At(e){let[t,r]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("blame")),t&&F.default.createElement(Er,{...e}))}function qe(e){return Y.default.createElement(Lr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function Lr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,base:i,target:n,id:p,rpc:m,t:l,onRediscover:s,onSelectCommit:d}){let[f,k]=(0,Y.useState)(null),[g,C]=(0,Y.useState)(""),[u,x]=(0,Y.useState)(0),[v,y]=(0,Y.useState)(!1);return(0,Y.useEffect)(()=>{let h=new AbortController;return k(null),C(""),m(i?"vcs/revision-compare":"vcs/commit-compare",i?{sessionId:e,repositoryId:t,base:i,target:n,id:p,...v?{large:!0}:{}}:{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:p,...v?{large:!0}:{}},h.signal).then(S=>{h.signal.aborted||k(S)}).catch(S=>{h.signal.aborted||(C(S.message),S.code==="vcs/rediscover-required"&&s())}),()=>h.abort()},[e,t,r,o,i,n,p,u,v]),g?Y.default.createElement("p",{role:"alert"},g," ",Y.default.createElement("button",{onClick:()=>x(h=>h+1)},l("retry")),v&&Y.default.createElement("button",{onClick:()=>y(!1)},l("largeClose"))):f?Y.default.createElement("section",null,Y.default.createElement("h4",null,f.path),Y.default.createElement("p",null,f.left.label," \u2194 ",f.right.label),f.notice&&Y.default.createElement("p",{role:"status"},f.notice),v?Y.default.createElement("p",null,l("largeScope")," ",Y.default.createElement("button",{onClick:()=>y(!1)},l("largeClose"))):f.notice?.includes("2 MiB")&&Y.default.createElement("p",null,l("largeScope")," ",Y.default.createElement("button",{onClick:()=>y(!0)},l("largeLoad"))),f.binary?Y.default.createElement("p",null,l("binary")):Y.default.createElement(de,{comparison:f,identity:JSON.stringify(i?[e,t,i,n,p]:[e,t,r,o,p]),t:l}),r&&!i&&Y.default.createElement(Ht,{onSelectCommit:d,key:"file-history:"+JSON.stringify([e,t,r,o,p]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:p,rpc:m,t:l,onRediscover:s}),r&&!i&&Y.default.createElement(At,{onSelectCommit:d,key:"blame:"+JSON.stringify([e,t,r,o,p]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:p,rpc:m,t:l,onRediscover:s}),(r||i)&&Y.default.createElement(je,{key:"image:"+JSON.stringify([e,t,r,o,i,n,p]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,base:i,target:n,id:p,rpc:m,t:l,onRediscover:s})):Y.default.createElement("p",{role:"status"},l("loading"),v&&Y.default.createElement("button",{onClick:()=>y(!1)},l("largeClose")))}function yo(e,t){if(typeof t!="string"||!t)return null;let r=e.filter(o=>o.path===t);return r.length===1&&typeof r[0].id=="string"&&r[0].id?r[0].id:null}function vo(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.id,o.author,o.subject].some(i=>i?.toLowerCase().includes(r))):e}function Re(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.path,o.oldPath].some(i=>i?.toLowerCase().includes(r))):e}function Pt(e){return q.default.createElement(Hr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Hr({sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:p,initialPath:m}){let l=(0,q.useRef)(!0),[s,d]=(0,q.useState)(null),[f,k]=(0,q.useState)(""),[g,C]=(0,q.useState)(0),[u,x]=(0,q.useState)(null),[v,y]=(0,q.useState)(""),[h,S]=(0,q.useState)(0);if((0,q.useEffect)(()=>{let w=new AbortController;return x(null),y(""),o("vcs/commit",{sessionId:e,repositoryId:t,commit:r,parentIndex:g},w.signal).then(L=>{w.signal.aborted||(x(L),l.current&&(l.current=!1,d(yo(L.changes,m))))}).catch(L=>{w.signal.aborted||(y(L.message),L.code==="vcs/rediscover-required"&&n())}),()=>w.abort()},[e,t,r,g,h]),v)return q.default.createElement("p",{role:"alert"},v," ",q.default.createElement("button",{onClick:()=>S(w=>w+1)},i("retry")));if(!u)return q.default.createElement("p",{role:"status"},i("loading"));let N=Re(u.changes,f);return q.default.createElement("section",{"aria-label":i("commitDetails")},q.default.createElement("h3",null,u.subject),q.default.createElement("code",null,u.id),q.default.createElement("p",null,u.author," \xB7 ",u.date),u.messageTruncated&&q.default.createElement("p",{role:"status"},i("commitMessageLimit")),u.message&&q.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},u.message),u.parents.length>1&&q.default.createElement("label",null,i("commitParent")," ",q.default.createElement("select",{"aria-label":i("commitParent"),value:g,onChange:w=>{d(null),x(null),C(Number(w.target.value))}},u.parents.map((w,L)=>q.default.createElement("option",{key:w,value:L},L+1,": ",w.slice(0,10))))),q.default.createElement("p",null,u.parent||i("commitRoot")," \u2192 ",u.id.slice(0,10)),q.default.createElement("label",null,i("commitFileSearch")," ",q.default.createElement("input",{"aria-label":i("commitFileSearch"),value:f,onChange:w=>{k(w.target.value),d(null)}})),q.default.createElement("span",null," ",N.length," / ",u.changes.length),q.default.createElement("ul",null,N.map(w=>q.default.createElement("li",{key:w.id},q.default.createElement("button",{"aria-pressed":s===w.id,onClick:()=>d(w.id)},w.status," \xB7 ",w.oldPath?w.oldPath+" \u2192 ":"",w.path)))),!!u.changes.length&&!N.length&&q.default.createElement("p",{role:"status"},i("emptySearch")),!u.changes.length&&q.default.createElement("p",null,i("commitNoChanges")),s&&q.default.createElement(qe,{key:s,sessionId:e,repositoryId:t,commit:r,parentIndex:g,id:s,onSelectCommit:p,rpc:o,t:i,onRediscover:n}),q.default.createElement(Lt,{key:JSON.stringify([e,t,r]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:p}))}var $=ee(require("react"),1);function bo(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let t=e.slice(0,200),r=new Map,o=[],i=[],n=m=>typeof m=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(m);for(let[m,l]of t.entries()){if(!l||!n(l.id)||!Array.isArray(l.parents)||r.has(l.id))throw new Error("Invalid graph node");r.set(l.id,m),o.push({id:l.id,row:m})}let p=!1;for(let m of t){let l=new Set;for(let s of m.parents){if(i.length===1e3){p=!0;break}if(!n(s)||s.length!==m.id.length||s===m.id||l.has(s))throw new Error("Invalid graph parent");l.add(s);let d=r.get(s);if(d!==void 0&&d<=r.get(m.id))throw new Error("Graph requires child-before-parent order");i.push({from:m.id,to:s,missing:d===void 0})}if(p)break}return{nodes:o,edges:i,nodesTruncated:e.length>200,edgesTruncated:p}}function xo(e){let t=Array(32).fill(null),r=new Map,o=[],i=new Set,n=!1,p=s=>{if(i.has(s))return null;let d=t.indexOf(s);return d>=0?d:(d=t.indexOf(null),d<0?(n=!0,i.add(s),null):(t[d]=s,d))},m=new Map;for(let s of e.edges){if(s.missing)continue;let d=m.get(s.from)||[];d.push(s.to),m.set(s.from,d)}for(let s of e.nodes){let d=p(s.id);if(r.set(s.id,{...s,lane:d}),o.push({...s,lane:d}),d===null)continue;t[d]=null;let f=m.get(s.id)||[];for(let[k,g]of f.entries())t.includes(g)||(k===0&&t[d]===null?t[d]=g:p(g))}let l=e.edges.filter(s=>!s.missing).flatMap(s=>{let d=r.get(s.from),f=r.get(s.to);return d.lane===null||f.lane===null?[]:[{...s,start:d.row,end:f.row,fromLane:d.lane,toLane:f.lane}]});return{nodes:o,edges:l,lanesTruncated:n,laneCount:Math.max(1,...o.map(s=>(s.lane??0)+1))}}function Ar({commits:e,selected:t,onSelect:r,t:o}){let i;try{i=bo(e)}catch{return $.default.createElement("p",{role:"alert"},o("graphInvalid"))}let n=xo(i),p=n.edges,m=Math.max(100,24+18*n.laneCount),l=Math.max(40,i.nodes.length*36);return $.default.createElement("section",{"aria-label":o("historyGraph")},$.default.createElement("p",null,o("graphScope")),n.lanesTruncated&&$.default.createElement("p",{role:"status"},o("graphLaneLimit")),(i.nodesTruncated||i.edgesTruncated)&&$.default.createElement("p",{role:"status"},o("graphLimit")),$.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},$.default.createElement("svg",{width:m,height:l,"aria-hidden":"true",style:{flexShrink:0}},p.map(s=>{let d=s.start*36+18,f=s.end*36+18,k=12+s.fromLane*18,g=12+s.toLane*18;return $.default.createElement("path",{key:s.from+s.to,d:"M "+k+" "+d+" C "+k+" "+(d+18)+", "+g+" "+(f-18)+", "+g+" "+f,fill:"none",stroke:"currentColor",opacity:"0.45"})}),n.nodes.filter(s=>s.lane!==null).map(s=>$.default.createElement("circle",{key:s.id,cx:12+s.lane*18,cy:s.row*36+18,r:"4",fill:"currentColor"}))),$.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},i.nodes.map(s=>$.default.createElement("li",{key:s.id,style:{height:36,whiteSpace:"nowrap"}},$.default.createElement("button",{title:s.id,"aria-current":t===s.id?!0:void 0,style:t===s.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:d=>{if(d.altKey||d.ctrlKey||d.metaKey||d.shiftKey)return;let f=d.key==="ArrowDown"?Math.min(s.row+1,i.nodes.length-1):d.key==="ArrowUp"?Math.max(0,s.row-1):d.key==="Home"?0:d.key==="End"?i.nodes.length-1:null;f!==null&&(d.preventDefault(),d.stopPropagation(),d.currentTarget.closest("ol").querySelectorAll("button")[f]?.focus())},onClick:()=>r(s.id)},$.default.createElement("code",null,s.id.slice(0,10))," ",e[s.row].subject))))),$.default.createElement("details",null,$.default.createElement("summary",null,o("graphRelations")),$.default.createElement("ul",null,i.edges.map(s=>$.default.createElement("li",{key:s.from+s.to},$.default.createElement("code",null,s.from)," \u2192 ",$.default.createElement("code",null,s.to),s.missing?" \xB7 "+o("graphMissing"):"")))))}function Dt(e){let[t,r]=(0,$.useState)(!1);return $.default.createElement("div",null,$.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historyGraph")),t&&$.default.createElement(Ar,{...e}))}var B=ee(require("react"),1);function Pr({sessionId:e,repositoryId:t,base:r,target:o,rpc:i,t:n,onRediscover:p}){let[m,l]=(0,B.useState)(null),[s,d]=(0,B.useState)(""),[f,k]=(0,B.useState)(0),[g,C]=(0,B.useState)(null),[u,x]=(0,B.useState)("");if((0,B.useEffect)(()=>{let y=new AbortController;return l(null),d(""),C(null),i("vcs/revision-changes",{sessionId:e,repositoryId:t,base:r,target:o},y.signal).then(h=>{y.signal.aborted||l(h)}).catch(h=>{y.signal.aborted||(d(h.message),h.code==="vcs/rediscover-required"&&p())}),()=>y.abort()},[e,t,r,o,f]),s)return B.default.createElement("p",{role:"alert"},s," ",B.default.createElement("button",{onClick:()=>k(y=>y+1)},n("retry")));if(!m)return B.default.createElement("p",{role:"status"},n("loading"));let v=Re(m.changes,u);return B.default.createElement("div",null,B.default.createElement("label",null,n("commitFileSearch")," ",B.default.createElement("input",{"aria-label":n("commitFileSearch"),value:u,onChange:y=>{x(y.target.value),C(null)}})),B.default.createElement("span",null," ",v.length," / ",m.changes.length),!!m.changes.length&&!v.length&&B.default.createElement("p",{role:"status"},n("emptySearch")),!m.changes.length&&B.default.createElement("p",null,n("revisionEmpty")),B.default.createElement("ul",null,v.map(y=>B.default.createElement("li",{key:y.id},B.default.createElement("button",{"aria-pressed":g===y.id,onClick:()=>C(y.id)},y.status," \xB7 ",y.oldPath?y.oldPath+" \u2192 ":"",y.path)))),g&&B.default.createElement(qe,{key:g,sessionId:e,repositoryId:t,base:r,target:o,id:g,rpc:i,t:n,onRediscover:p}))}function Bt(e){return B.default.createElement(Dr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Dr({commits:e,sessionId:t,repositoryId:r,rpc:o,t:i,onRediscover:n,onReferencesLoaded:p}){let[m,l]=(0,B.useState)(""),[s,d]=(0,B.useState)(""),[f,k]=(0,B.useState)([]),[g,C]=(0,B.useState)(!1),[u,x]=(0,B.useState)(0),[v,y]=(0,B.useState)(!1),[h,S]=(0,B.useState)("");return(0,B.useEffect)(()=>{if(!u)return;let N=new AbortController;return y(!0),S(""),o("vcs/references",{sessionId:t,repositoryId:r},N.signal).then(w=>{N.signal.aborted||(k(w.references),C(!0),p?.(w.references))}).catch(w=>{N.signal.aborted||(S(w.message),w.code==="vcs/rediscover-required"&&n())}).finally(()=>{N.signal.aborted||y(!1)}),()=>N.abort()},[t,r,u]),B.default.createElement("section",{"aria-label":i("revisionTitle")},B.default.createElement("h3",null,i("revisionTitle")),B.default.createElement("p",null,i("revisionScope")),B.default.createElement("button",{disabled:v,onClick:()=>x(N=>N+1)},i("revisionLoadRefs")),B.default.createElement("p",null,i("revisionRefsScope")),g&&!v&&!h&&B.default.createElement("p",{role:"status"},f.length?`${i("revisionRefsCount")}: ${f.length}`:i("revisionRefsEmpty")),v&&B.default.createElement("p",{role:"status"},i("loading")),h&&B.default.createElement("p",{role:"alert"},h),[[m,l,"revisionBase"],[s,d,"revisionTarget"]].map(([N,w,L])=>B.default.createElement("label",{key:L},i(L)," ",B.default.createElement("select",{"aria-label":i(L),value:N,onChange:b=>w(b.target.value)},B.default.createElement("option",{value:""},"\u2014"),!!e.length&&B.default.createElement("optgroup",{label:i("revisionLoadedCommits")},e.map(b=>B.default.createElement("option",{key:b.id,value:b.id},b.id.slice(0,10)," \xB7 ",b.subject))),!!f.length&&B.default.createElement("optgroup",{label:i("revisionLocalRefs")},f.map(b=>B.default.createElement("option",{key:b.name,value:b.commit},b.name," \xB7 ",b.commit.slice(0,10)))),N&&!e.some(b=>b.id===N)&&!f.some(b=>b.commit===N)&&B.default.createElement("option",{value:N},N)))),B.default.createElement("button",{disabled:!m||!s,onClick:()=>{l(s),d(m)}},i("revisionSwap")),B.default.createElement("p",{style:{overflowWrap:"anywhere"}},B.default.createElement("code",null,m||"\u2014")," \u2192 ",B.default.createElement("code",null,s||"\u2014")),m&&s&&B.default.createElement(Pr,{key:JSON.stringify([t,r,m,s]),sessionId:t,repositoryId:r,base:m,target:s,rpc:o,t:i,onRediscover:n}))}function wo(e,t,r){let o=r?[...e.commits.filter(i=>!t.commits.some(n=>n.id===i.id)),...t.commits]:t.commits;return{...t,windowEnd:r+t.commits.length,commits:o.slice(-200)}}function Mt(e){return E.default.createElement(Br,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Br({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,p]=(0,E.useState)({id:null,path:null,revision:0}),[m,l]=(0,E.useState)(""),[s,d]=(0,E.useState)(null),[f,k]=(0,E.useState)(""),[g,C]=(0,E.useState)(""),u=A=>{let R=(s||[]).find(me=>JSON.stringify([me.name,me.commit])===A)?.commit||"";C(A),k(R),h(me=>me?{...me,snapshot:R||null}:null),H(0),l(""),W(null),j({commits:[],snapshot:null,nextOffset:null})},[x,v]=(0,E.useState)({message:"",author:"",path:"",since:"",until:""}),[y,h]=(0,E.useState)(null),S=A=>{h({values:A,snapshot:z.snapshot}),H(0),l(""),W(null),j(_=>({..._,commits:[],nextOffset:null}))},N=()=>{ie&&(j(A=>({commits:[],snapshot:A.snapshot,nextOffset:null})),W(null),l(""),H(Math.max(0,ie-50)))},w=(0,E.useMemo)(()=>mo(s||[]),[s]),L=n.id,b=(A,_=null)=>p(R=>({id:A,path:_,revision:R.revision+1})),W=(A,_=null)=>p(R=>({id:A,path:_,revision:R.revision+(_||R.path?1:0)})),[z,j]=(0,E.useState)({commits:[],snapshot:null,nextOffset:null}),[ie,H]=(0,E.useState)(0),[te,Ce]=(0,E.useState)(0),[pe,Ue]=(0,E.useState)(!0),[ge,ue]=(0,E.useState)("");(0,E.useEffect)(()=>{let A=new AbortController;return Ue(!0),ue(""),r("vcs/history",{sessionId:e,repositoryId:t,offset:ie,limit:50,...y?{search:y.values}:{},...y?.snapshot||f||z.snapshot?{snapshot:y?.snapshot||f||z.snapshot}:{}},A.signal).then(_=>{A.signal.aborted||(j(R=>wo(R,_,ie)),ie>=200&&(W(null),l("")))}).catch(_=>{A.signal.aborted||(ue(_.message),_.code==="vcs/rediscover-required"&&i())}).finally(()=>{A.signal.aborted||Ue(!1)}),()=>A.abort()},[e,t,ie,te,y,f]);let Ne=vo(z.commits,m);return E.default.createElement("section",{className:"vcs-history","aria-label":o("history"),"aria-busy":pe},E.default.createElement("div",{className:"vcs-history-list"},E.default.createElement("p",null,o("historyListOnly")),s!==null&&E.default.createElement("p",null,o("historyRefsScope")),E.default.createElement("label",null,o("historyBranch")," ",E.default.createElement("select",{"aria-label":o("historyBranch"),value:g,disabled:pe,onChange:A=>u(A.target.value)},E.default.createElement("option",{value:""},"HEAD"),g&&!(s||[]).some(A=>JSON.stringify([A.name,A.commit])===g)&&E.default.createElement("option",{value:g},JSON.parse(g)[0]," \xB7 ",f.slice(0,10)," \xB7 ",o("historyPinned")),(s||[]).map(A=>{let _=JSON.stringify([A.name,A.commit]);return E.default.createElement("option",{key:_,value:_},A.name," \xB7 ",A.commit.slice(0,10))}))),E.default.createElement("p",null,o("historyBranchScope"),f&&E.default.createElement(E.default.Fragment,null," \xB7 ",E.default.createElement("code",null,f))),E.default.createElement("form",{"aria-label":o("historyServerSearch"),onSubmit:A=>{A.preventDefault(),S({...x})}},E.default.createElement("fieldset",{disabled:pe},E.default.createElement("legend",null,o("historyServerSearch")),E.default.createElement("p",null,o("historyServerScope")),["message","author","path","since","until"].map(A=>E.default.createElement("label",{key:A},o("historyServer_"+A)," ",E.default.createElement("input",{maxLength:A==="since"||A==="until"?40:1024,placeholder:A==="since"||A==="until"?"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]":void 0,"aria-label":o("historyServer_"+A),value:x[A],onChange:_=>v(R=>({...R,[A]:_.target.value}))}))),E.default.createElement("button",{type:"submit"},o("historyServerApply")),E.default.createElement("button",{type:"button",onClick:()=>{v({message:"",author:"",path:"",since:"",until:""}),S({})}},o("historyServerClear")))),y&&E.default.createElement("p",{role:"status"},o("historyServerActive"),": ",JSON.stringify(y.values)," \xB7 ",E.default.createElement("code",null,y.snapshot||z.snapshot)),E.default.createElement("label",null,o("historySearch")," ",E.default.createElement("input",{"aria-label":o("historySearch"),value:m,onChange:A=>{l(A.target.value),W(null)}})),E.default.createElement("span",null," ",Ne.length," / ",z.commits.length),!!z.commits.length&&E.default.createElement("p",{role:"status"},o("historyWindow"),": ",Math.max(0,(z.windowEnd??z.commits.length)-z.commits.length),"\u2013",z.windowEnd??z.commits.length," \xB7 ",o("historyWindowScope")),!!z.commits.length&&!Ne.length&&E.default.createElement("p",{role:"status"},o("historyNoMatch")),E.default.createElement("ol",null,Ne.map(A=>E.default.createElement("li",{key:A.id},E.default.createElement("button",{"aria-pressed":L===A.id,onClick:()=>W(A.id)},A.subject),E.default.createElement("div",null,E.default.createElement("code",{title:A.id},A.id.slice(0,10))," \xB7 ",A.author," \xB7 ",E.default.createElement("time",{dateTime:A.date},A.date)),w.has(A.id)&&E.default.createElement("div",{"aria-label":o("historyRefsLabel"),style:{overflowWrap:"anywhere"}},w.get(A.id).names.map(_=>E.default.createElement("span",{key:_},E.default.createElement("code",null,_)," ")),w.get(A.id).hidden>0&&E.default.createElement("span",null,o("historyRefsMore"),": ",w.get(A.id).hidden))))),pe&&E.default.createElement("p",{role:"status"},o("loading")),ge&&E.default.createElement("p",{role:"alert"},ge," ",E.default.createElement("button",{onClick:()=>Ce(A=>A+1)},o("retry"))),!pe&&!ge&&!z.commits.length&&E.default.createElement("p",null,o("historyEmpty")),z.truncated&&E.default.createElement("p",{role:"status"},o("historyLimit")),!!ie&&E.default.createElement("button",{disabled:pe,onClick:N},o("historyBack")),!ge&&z.nextOffset!==null&&E.default.createElement("button",{disabled:pe,onClick:()=>H(z.nextOffset)},o("historyMore")),!!z.commits.length&&E.default.createElement(Dt,{commits:z.commits,selected:L,onSelect:W,t:o}),E.default.createElement(Bt,{onReferencesLoaded:d,commits:z.commits,sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i})),E.default.createElement("div",{className:"vcs-history-details"},L&&E.default.createElement(Pt,{key:JSON.stringify([L,n.revision]),initialPath:n.path,sessionId:e,repositoryId:t,commit:L,onSelectCommit:b,rpc:r,t:o,onRediscover:i})))}var So={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",svnCopyHistory:"\u67E5\u770B\u590D\u5236\u6765\u6E90\u5386\u53F2",svnCopyOutside:"\u590D\u5236\u6765\u6E90\u5728\u6388\u6743\u8303\u56F4\u5916\uFF0C\u4E0D\u80FD\u6253\u5F00",svnCopyTraceScope:"\u5355\u72EC\u67E5\u770B\u8303\u56F4\u5185\u56FA\u5B9A\u6765\u6E90\uFF0C\u4ECD\u6B62\u4E8E\u5176\u590D\u5236\u8FB9\u754C\uFF1B\u4E0D\u662F\u81EA\u52A8\u8FFD\u6EAF",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",fileHistorySimilarity:"Git\u76F8\u4F3C\u5EA6",fileHistoryAmbiguous:"\u591A\u4E2A\u5019\u9009\u6765\u6E90\uFF0C\u6B64\u5904\u505C\u6B62\u8FFD\u6EAF",fileHistoryRenameLimit:"\u5DF2\u8FBE32\u6B21\u91CD\u547D\u540D\u786E\u8BA4\u4E0A\u9650\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u590D\u5236\u6216\u975E\u7CBE\u786E\u91CD\u547D\u540D\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryFollow:"\u8DDF\u968F\u91CD\u547D\u540D\uFF08\u7B2C\u4E00\u7236\u94FE\uFF09",fileHistoryFollowScope:"\u8DDF\u968FGit\u68C0\u51FA\u7684\u91CD\u547D\u540D\uFF1B50%\u4EE5\u4E0A\u76F8\u4F3C\u91CD\u547D\u540D\u989D\u5916\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u548C\u5408\u5E76\u5904\u505C\u6B62\u3002\u76F8\u4F3C\u5EA6\u4E0D\u662F\u8EAB\u4EFD\u4FDD\u8BC1\uFF1B\u6BCF\u6761\u8BB0\u5F55\u4F7F\u7528\u5F53\u65F6\u8DEF\u5F84\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\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u8FC7\u6EE4\u4E14\u542B\u8FB9\u754C\uFF0C\u4F7F\u7528 --since-as-filter \u907F\u514D\u975E\u5355\u8C03\u5386\u53F2\u88AB\u63D0\u524D\u622A\u65AD\uFF1B\u65E0\u65F6\u533A\u6309\u8FD0\u884C\u673A\u5668\u672C\u5730\u65F6\u533A\u89E3\u91CA\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",historyServer_since:"\u5F00\u59CB\u65F6\u95F4\uFF08\u542B\uFF09",historyServer_until:"\u7ED3\u675F\u65F6\u95F4\uFF08\u542B\uFF09",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",conflictStages:"Index \u51B2\u7A81\u9636\u6BB5",conflictStagesScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u51B2\u7A81\u7684 Index \u9636\u6BB51\uFF0F2\uFF0F3\uFF1B\u9636\u6BB5\u7F16\u53F7\u53EA\u8868\u793A Index \u8EAB\u4EFD\uFF0C\u4E0D\u58F0\u79F0\u5408\u5E76\uFF0F\u53D8\u57FA\u5F52\u5C5E\u3002\u7F3A\u5931\u9636\u6BB5\u663E\u793A\u4E3A\u7A7A\uFF0C\u4E0D\u63A8\u65AD\u5185\u5BB9\uFF1B\u4E0D\u8BFB\u53D6\u5DE5\u4F5C\u6587\u4EF6\uFF0C\u4E0D\u89E3\u51B3\u51B2\u7A81\u3002",conflictStage1:"\u9636\u6BB51\uFF08BASE\uFF09",conflictStage2:"\u9636\u6BB52\uFF08ours\uFF09",conflictStage3:"\u9636\u6BB53\uFF08theirs\uFF09",conflictStagePresent:"\u5B58\u5728",conflictStageAbsent:"\u7F3A\u5931\uFF08\u663E\u793A\u4E3A\u7A7A\uFF09",conflictStageGitlink:"\u5B50\u6A21\u5757\u63D0\u4EA4\u5F15\u7528\uFF0C\u4E0D\u52A0\u8F7D\u5185\u5BB9",conflictStageSymlink:"\u94FE\u63A5\u76EE\u6807\u6587\u672C\uFF0C\u4E0D\u8DDF\u968F",conflictStageLeft:"\u5DE6\u4FA7\u9636\u6BB5",conflictStageRight:"\u53F3\u4FA7\u9636\u6BB5",conflictStageMissing:"\u6240\u9009\u9636\u6BB5\u7F3A\u5931\uFF0C\u6309\u7A7A\u5185\u5BB9\u6BD4\u8F83\uFF1B\u4E0D\u63A8\u65AD\u539F\u59CB\u5185\u5BB9\u3002",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",workspaceLargeScope:"Git\u5DE5\u4F5C\u533A\u5B8C\u6574UTF-8\u6BD4\u8F83\uFF0C\u6BCF\u4FA78MiB\uFF0F10\u4E07\u884C\uFF1B\u8BFB\u53D6\u671F\u95F4\u53D8\u5316\u4F1A\u62D2\u7EDD\u7ED3\u679C\uFF0C\u6210\u529F\u540E\u6587\u4EF6\u4ECD\u53EF\u88AB\u5916\u90E8\u4FEE\u6539\u3002",largeLoad:"\u52A0\u8F7D\u5B8C\u6574\u5927\u6587\u4EF6\u6BD4\u8F83",largeClose:"\u53D6\u6D88\u5927\u6587\u4EF6\u6A21\u5F0F",largeScope:"\u4EC5Git\u5386\u53F2UTF-8\u666E\u901A\u6587\u4EF6\uFF0C\u6BCF\u4FA7\u6700\u591A8MiB\u300110\u4E07\u884C\uFF1B\u4E0D\u662F\u5DE5\u4F5C\u533A\u6216SVN\u5927\u6587\u4EF6\u3002",diffPending:"\u6B63\u5728\u8BA1\u7B97\u5DEE\u5F02\uFF0C\u5C1A\u4E0D\u80FD\u5224\u65AD\u662F\u5426\u76F8\u540C\u3002",diffIncomplete:"\u5DEE\u5F02\u8BA1\u7B97\u672A\u5B8C\u6210\u6216\u8D85\u65F6\uFF0C\u5F53\u524D\u7ED3\u679C\u53EF\u80FD\u4E0D\u5B8C\u6574\u3002",diffComplete:"\u5DEE\u5F02\u8BA1\u7B97\u5B8C\u6210\u3002",largeFallback:"\u57FA\u7840\u89C6\u56FE\u53EA\u5C55\u793A\u6709\u754C\u7247\u6BB5\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5927\u6587\u4EF6\u5DEE\u5F02\u3002",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",historyBack:"\u5386\u53F2\u4E0A\u4E00\u9875",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",fileHistoryDateScope:"\u53EF\u9009\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u542B\u8FB9\u754C\u8FC7\u6EE4\uFF1B\u4E0E\u201C\u8DDF\u968F\u91CD\u547D\u540D\u201D\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\uFF0C\u62A5\u9519\u540E\u53D6\u6D88\u5176\u4E00\u5373\u53EF\u3002",pathHistory:"\u6B64\u8DEF\u5F84\u5386\u53F2",submoduleBadge:"\u5B50\u6A21\u5757",submoduleCheckout_initialized:"\u5B58\u5728\u672C\u5730Git\u6807\u8BB0\uFF08\u672A\u9A8C\u8BC1\u68C0\u51FA\u6709\u6548\u6027\uFF09",submoduleCheckout_uninitialized:"\u672C\u5730\u672A\u521D\u59CB\u5316",submoduleCheckout_absent:"\u672C\u5730\u76EE\u5F55\u7F3A\u5931",submoduleCheckout_unreadable:"\u672C\u5730\u72B6\u6001\u4E0D\u53EF\u8BFB",submoduleScope:"\u9884\u89C8\u53EA\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF0C\u4E0D\u989D\u5916\u89E3\u6790\u5B50\u6A21\u5757HEAD\u6216\u52A0\u8F7D\u5185\u5BB9\u3002Git\u72B6\u6001\u626B\u63CF\u672C\u8EAB\u53EF\u80FD\u68C0\u67E5\u5B50\u6A21\u5757HEAD\u548C\u810F\u72B6\u6001\uFF1B\u4E0D\u66F4\u65B0\u6216\u540C\u6B65\u3002",pathHistoryScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u5386\u53F2\u8DEF\u5F84\u5728\u8BE5\u63D0\u4EA4\u4E0B\u7684\u6587\u4EF6\u5386\u53F2\uFF1B\u8DEF\u5F84\u5FC5\u987B\u5B58\u5728\u4E8E\u8BE5\u63D0\u4EA4\u3002\u5173\u95ED\u8DDF\u968F\u65F6\u4E0D\u8DE8\u91CD\u547D\u540D\u3002",pathHistoryNoFollow:"\u672A\u8DDF\u968F\u91CD\u547D\u540D",pathHistoryFollowScope:"\u8DDF\u968F\u6CBF\u7528\u540C\u4E00\u4FDD\u5B88\u89C4\u5219\uFF1A\u7B2C\u4E00\u7236\u94FE\u3001Git\u76F8\u4F3C\u5EA6\u81F3\u5C1150%\u3001\u6BCF\u6B21\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u621632\u6B21\u786E\u8BA4\u4E0A\u9650\u5904\u505C\u6B62\uFF1B\u53EA\u9002\u7528\u4E8E\u63D0\u4EA4\u4E2D\u7684\u666E\u901A\u6587\u4EF6\u6216\u94FE\u63A5\u3002",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\uFF0C\u5E76\u5C1D\u8BD5\u9009\u4E2D\u8BE5\u63D0\u4EA4\u53D8\u66F4\u4E2D\u8DEF\u5F84\u5B8C\u5168\u4E00\u81F4\u7684\u552F\u4E00\u6587\u4EF6\uFF08\u4E0D\u4F1A\u731C\u6D4B\u91CD\u547D\u540D\u6216\u65E7\u8DEF\u5F84\uFF09\uFF1B\u65E0\u552F\u4E00\u5339\u914D\u65F6\u4E0D\u9884\u9009\u6587\u4EF6\u3002\u9ED8\u8BA4\u4F7F\u7528\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\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\u30018\u4F4D\u57FA\u7EBF/\u6E10\u8FDB JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757\u9759\u6001VP8\uFF0F\u65E0\u635FVP8L WebP\uFF08\u4E0D\u652F\u6301\u7B97\u672F\u7F16\u7801/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:"\u672C\u5730\u5206\u652F\u3001\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\u53CA\u672C\u5730\u7F13\u5B58\u7684\u8FDC\u7A0B\u8DDF\u8E2A\u5F15\u7528\uFF0C\u5171\u6700\u591A1000\u6761\uFF1B\u4E0D\u8FDE\u63A5\u8FDC\u7AEF\u6216fetch\uFF0C\u8FDC\u7A0B\u7F13\u5B58\u53EF\u80FD\u8FC7\u671F\u3002\u91CD\u65B0\u52A0\u8F7D\u65F6\uFF0Corigin/HEAD \u663E\u793A\u5B83\u5F53\u524D\u6307\u5411\u7684\u672C\u5730\u63D0\u4EA4\uFF1B\u5DF2\u9009\u5386\u53F2\u548C\u7248\u672C\u4ECD\u56FA\u5B9A\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\u5F15\u7528\uFF08\u542B\u8FDC\u7A0B\u7F13\u5B58\uFF09",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",svnCopyHistory:"View copy source history",svnCopyOutside:"Copy source is outside the authorized scope",svnCopyTraceScope:"Separate fixed in-scope source history, stopping at its copy boundary; not automatic tracing",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",fileHistorySimilarity:"Git similarity",fileHistoryAmbiguous:"Multiple candidate origins; tracing stopped here",fileHistoryRenameLimit:"32 rename confirmations reached; tracing stopped here",fileHistoryBoundary:"Identity boundary: copy or inexact rename; stopped here",fileHistoryFollow:"Follow renames (first-parent)",fileHistoryFollowScope:"Git-detected renames; similarities of 50% or more require a unique deletion/addition transition. Stops at ambiguity, copies and merges. Similarity is not an identity guarantee; rows use historical paths.",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. Date bounds filter on committer date inclusively and use --since-as-filter to avoid early termination on non-monotonic history; boundary dates without a timezone use the runner local zone. Pagination and runtime are bounded.",historyServer_message:"Commit message",historyServer_author:"Author",historyServer_path:"Path",historyServer_since:"Since (inclusive)",historyServer_until:"Until (inclusive)",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",conflictStages:"Index conflict stages",conflictStagesScope:"Manually reads Index stages 1/2/3 of the selected conflict. Stage numbers are Index identities, not merge/rebase ownership claims. Missing stages show as empty and are never inferred; the working file is not read and the conflict is not resolved.",conflictStage1:"Stage 1 (BASE)",conflictStage2:"Stage 2 (ours)",conflictStage3:"Stage 3 (theirs)",conflictStagePresent:"present",conflictStageAbsent:"absent (shown empty)",conflictStageGitlink:"submodule commit reference, contents not loaded",conflictStageSymlink:"link target text, not followed",conflictStageLeft:"Left stage",conflictStageRight:"Right stage",conflictStageMissing:"A selected stage is absent, so it is compared as empty; original content is not inferred.",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",workspaceLargeScope:"Complete Git working-copy UTF-8 comparison: 8 MiB / 100000 lines per side. Changes during loading reject the result; external edits remain possible afterward.",largeLoad:"Load complete large-file comparison",largeClose:"Cancel large-file mode",largeScope:"Git historical UTF-8 regular files only: 8 MiB and 100000 lines per side, not working-copy or SVN large files.",diffPending:"Computing differences; equality is not yet known.",diffIncomplete:"Difference computation is incomplete or timed out; displayed results may be partial.",diffComplete:"Difference computation completed.",largeFallback:"The basic view shows bounded excerpts, not the complete large-file diff.",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",historyBack:"Previous history page",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",fileHistoryDateScope:"Optional date bounds filter on committer date inclusively; they cannot combine with rename following, so disable one if an error appears.",pathHistory:"History of this path",submoduleBadge:"submodule",submoduleCheckout_initialized:"local Git marker present (checkout validity not verified)",submoduleCheckout_uninitialized:"not initialized locally",submoduleCheckout_absent:"local directory missing",submoduleCheckout_unreadable:"local state unreadable",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence without separately resolving nested HEAD or loading contents. Git status itself may inspect nested HEAD and dirty state; nothing is updated or synchronized.",pathHistoryScope:"Manually reads the file history of the selected historical path at that commit; the path must exist in that commit. Without following, renames are not crossed.",pathHistoryNoFollow:"renames not followed",pathHistoryFollowScope:"Following uses the same conservative rules: first parent, Git similarity of at least 50%, a unique deletion/addition confirmed each time, stopping at ambiguity, copies or the 32-confirmation cap; only committed regular files or links are supported.",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 and preselect the single exactly matching path in that commit; rename or old paths are never guessed, and a missing or ambiguous match preselects nothing. The first parent is used and no line is auto-located.",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, 8-bit baseline or progressive JPEG regular files, or single-chunk static VP8 / lossless VP8L WebP (no arithmetic-coded/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, commit tags and locally cached remote-tracking refs, at most 1000 total; no network or fetch. Remote caches may be stale. Reloading origin/HEAD shows its current local target; selected history and versions stay pinned. 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 refs (including remote caches)",revisionRefsCount:"Selectable references loaded"}};function ko(e,t,r,o){let i=e.target;if(!t?.contains(i)||e.defaultPrevented||e.isComposing||i?.closest?.(".monaco-editor")||i?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&i===r&&o)return"clear";let n=i?.isContentEditable||i?.closest?.('input,textarea,select,[role="textbox"]');if(n&&i!==r)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!n&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function Co(e,t){let r=t?[...t.querySelectorAll("button[data-vcs-item]")]:[],o=r.indexOf(e.target);if(o<0)return;let i;if(e.key==="ArrowDown")i=r[o+1];else if(e.key==="ArrowUp")i=r[o-1];else if(e.key==="Home")i=r[0];else if(e.key==="End")i=r.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(),i?.focus()}var No=e=>"dsh-vcs:project:v1:"+e;function Eo(e,t){if(!e)return"";try{let r=(t??globalThis.localStorage)?.getItem(No(e));return typeof r=="string"&&r.length<=1024?r:""}catch{return""}}function Lo(e,t,r){if(!(!e||!t))try{(r??globalThis.localStorage)?.setItem(No(e),t)}catch{}}function Ao(e,t=""){return e.find(r=>r.id===t)?.id||e.find(r=>r.relativePath===".")?.id||e[0]?.id||""}var Je=(e,t)=>JSON.stringify([e,t]),Ve=(e,t=".")=>[e.type.toUpperCase(),e.relativePath==="."?t:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),et=(e,t="all")=>e.type==="git"&&["staged","unstaged"].includes(t)?t:"all",Ho=(e="",t="")=>e===t?0:e<t?-1:1;function Ot(e=[]){let t={id:"",name:"",directories:new Map,files:[],count:0};for(let o of e){let i=String(o.path||"").split("/").filter(Boolean);if(!i.length)continue;let n=t;for(let p of i.slice(0,-1)){let m=n.id?n.id+"/"+p:p;n.directories.has(p)||n.directories.set(p,{id:m,name:p,directories:new Map,files:[],count:0}),n=n.directories.get(p),n.count++}n.files.push(o)}let r=o=>({...o,directories:[...o.directories.values()].sort((i,n)=>Ho(i.name,n.name)).map(r),files:[...o.files].sort((i,n)=>Ho(i.path,n.path))});return r(t)}function Po(e=[],t){let r=e.findIndex(o=>o.id===t);return{index:r<0?0:r+1,total:e.length}}function Do(e=[],t,r){if(!e.length||!["previous","next"].includes(r))return null;let o=e.findIndex(p=>p.id===t),i=r==="next"?1:-1,n=o<0?r==="next"?-1:0:o;return e[(n+i+e.length)%e.length]||null}function Bo(e=""){let t=String(e).split("/").filter(Boolean);return t.slice(0,-1).map((r,o)=>t.slice(0,o+1).join("/"))}function Ft(e,t=[]){for(let r of e?.directories||[])t.push(r.id),Ft(r,t);return t}function Mo(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function Oo(e=[]){return e.reduce((t,r)=>{let o=Mo(r.status);return t.all++,t[o]=(t[o]||0)+1,t},{all:0})}function Or(e=[],t="",r="all"){let o=t.toLowerCase();return e.filter(i=>(r==="all"||Mo(i.status)===r)&&i.path.toLowerCase().includes(o)).sort((i,n)=>i.path.localeCompare(n.path))}function Fo(e,t,r="",o="all"){return e.map(i=>({...t[i.id],repository:i,changes:Or(t[i.id]?.changes,r,o)}))}function To(e,t,r=""){if(!r||!e||e.cwd!==t.cwd)return t;let o=new Map(e.repositories.map(i=>[i.id,i]));for(let i of t.repositories)o.set(i.id,i);return{...t,repositories:[...o.values()],truncated:e.truncated||t.truncated,warnings:[...e.warnings||[],...t.warnings||[]]}}var jo={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Go=e=>new URL("vcs-assets/"+e,document.baseURI).href;function qo(){return a.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},a.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),a.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var Fr=["slots","layout","locale","connection","uiSession"];function Tr(e){e.effect(()=>e.locale.register("local.vcs",So));let t=e.locale.bind("local.vcs"),r=yt(2),o=so(e.connection,()=>t("error"));function i(m){let l=m.useSessions(s=>Object.values(s.byId).find(d=>(d.retainedBy.mainView??0)>0));return a.default.createElement(n,{key:JSON.stringify([l?.id,l?.cwd])},a.default.createElement(p,{session:l}))}class n extends a.default.Component{state={error:null};static getDerivedStateFromError(l){return{error:l}}render(){return this.state.error?a.default.createElement("section",{className:"vcs-root"},a.default.createElement("style",null,gt),a.default.createElement("div",{className:"vcs-message vcs-error"},t("error"),a.default.createElement("button",{onClick:()=>this.setState({error:null})},t("retry")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")))):this.props.children}}function p({session:m}){(0,a.useSyncExternalStore)(c=>e.locale.subscribe(c),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let l=m?.id,[s,d]=(0,a.useState)("all"),[f,k]=(0,a.useState)(0),[g,C]=(0,a.useState)(0),[u,x]=(0,a.useState)(null),[v,y]=(0,a.useState)({}),[h,S]=(0,a.useState)(()=>Eo(m?.cwd)),[N,w]=(0,a.useState)(0),[L,b]=(0,a.useState)(""),[W,z]=(0,a.useState)(""),[j,ie]=(0,a.useState)(null),[H,te]=(0,a.useState)(null),[Ce,pe]=(0,a.useState)(!1),[Ue,ge]=(0,a.useState)(!1),[ue,Ne]=(0,a.useState)(""),[A,_]=(0,a.useState)(""),[R,me]=(0,a.useState)(""),[Tt,jt]=(0,a.useState)(!1),[ye,tt]=(0,a.useState)(""),[We,Gt]=(0,a.useState)("all"),[Ee,qt]=(0,a.useState)(!0),[Jt,ot]=(0,a.useState)({}),[De,Jo]=(0,a.useState)(!0),[rt,Vo]=(0,a.useState)(!1),[it,Uo]=(0,a.useState)(!1),[Ie,Be]=(0,a.useState)("content"),[Vt,Ut]=(0,a.useState)(0),[Wo,Wt]=(0,a.useState)(!1),[It,zt]=(0,a.useState)(null),[Io,zo]=(0,a.useState)(0),[_t,_o]=(0,a.useState)("pending"),[st,nt]=(0,a.useState)({added:0,deleted:0,count:0}),[ae,Kt]=(0,a.useState)(!1),Yt=(0,a.useRef)(null),Qt=(0,a.useRef)(null),ve=(0,a.useRef)(null),at=(0,a.useRef)(null),ze=(0,a.useRef)(null),lt=(0,a.useRef)(null),Xt=(0,a.useRef)(null),Le=(0,a.useRef)(null),ct=(0,a.useRef)(null),dt=(0,a.useRef)(null),pt=(0,a.useRef)(!1),_e=(0,a.useRef)(!1),be=u?.repositories||[],xe=be.filter(c=>c.id===h),se=Wo&&xe.some(c=>c.type==="git"),Ko=()=>{Le.current?.abort(),te(null),ie(null),_(""),Wt(!0)};(0,a.useEffect)(()=>{be.some(c=>c.id===h)&&Lo(m?.cwd,h)},[m?.cwd,h,u]);let Me=()=>{Xt.current?.abort(),Le.current?.abort(),te(null),ie(null),_(""),Be("content"),nt({added:0,deleted:0,count:0})},Ke=()=>{_e.current=!1,Me(),ct.current?.abort(),dt.current=u,x(null),y({}),z(L.trim()),w(c=>c+1)},we=()=>{_e.current||(_e.current=!0,Me(),ct.current?.abort(),dt.current=null,x(null),y({}),z(""),w(c=>c+1))},$t=(c=!1)=>{c||C(P=>P+1),pt.current=c,c||Me(),c||y({}),k(P=>P+1)};(0,a.useEffect)(()=>{let c=new AbortController;return ct.current=c,Ne(""),pe(!!l),l&&o("vcs/repositories",{sessionId:l,...W?{subdirectory:W}:{}},c.signal).then(P=>{if(!c.signal.aborted){let V=To(dt.current,P,W);_e.current=!1,S(X=>Ao(V.repositories,X)),x(V)}}).catch(P=>{c.signal.aborted||Ne(P.message)}).finally(()=>{c.signal.aborted||pe(!1)}),()=>c.abort()},[l,N,W]),(0,a.useEffect)(()=>{let c=new AbortController,P=pt.current;Xt.current=c,pt.current=!1,P||(y({}),_(""));for(let V of xe){let X=et(V,s);r(()=>o("vcs/status",{sessionId:l,repositoryId:V.id,mode:X},c.signal),c.signal).then(ne=>{c.signal.aborted||y(le=>({...le,[V.id]:{...ne,mode:X}}))}).catch(ne=>{if(!c.signal.aborted){if(ne.code==="vcs/rediscover-required"){we();return}y(le=>({...le,[V.id]:{error:ne.message,changes:[],mode:X}}))}})}return()=>c.abort()},[l,u,h,s,f]),(0,a.useEffect)(()=>{let c=P=>{P.target===window&&l&&h&&document.visibilityState==="visible"&&$t(!0)};return window.addEventListener("focus",c),()=>window.removeEventListener("focus",c)},[l,h,s]);let Se=be.find(c=>c.id===j?.repositoryId),fe=j?v[j.repositoryId]:null,ut=JSON.stringify([l,u?.cwd,j?.repositoryId,s,j?.id]),He=It?.key===ut&&It?.status===fe;(0,a.useEffect)(()=>zt(null),[ut,fe,se]),(0,a.useEffect)(()=>{let c=new AbortController;return Le.current=c,te(null),_(""),nt({added:0,deleted:0,count:0}),Be("content"),ge(!!j&&!!fe),!se&&j&&fe&&Se&&o("vcs/compare",{sessionId:l,repositoryId:j.repositoryId,mode:et(Se,s),id:j.id,...He?{large:!0}:{}},c.signal).then(P=>{c.signal.aborted||te(P)}).catch(P=>{if(!c.signal.aborted){if(P.code==="vcs/rediscover-required"){we();return}_(P.message)}}).finally(()=>{c.signal.aborted||ge(!1)}),()=>c.abort()},[j,fe,l,s,se,He,Io]),(0,a.useEffect)(()=>{let c=!1,P,V=new AbortController;Kt(!1),me("");let X=document.createElement("link");return X.rel="stylesheet",X.href=Go("editor.css"),document.head.appendChild(X),Xe(Go("editor.js")+"?v="+encodeURIComponent($e)+"&retry="+Vt,{signal:V.signal}).then(ne=>{c||(P=ne.createDiff(Qt.current,{onStats:nt,onComputation:le=>{c||_o(le)}}),ve.current=P,Kt(!0))}).catch(ne=>{c||me(ne.message)}),()=>{c=!0,V.abort(),P?.dispose(),ve.current=null,X.remove()}},[Vt]),(0,a.useEffect)(()=>{ae&&(!H||H.binary||se)&&ve.current?.setContent({left:{text:""},right:{text:""}},"empty"),ae&&H&&!H.binary&&!se&&ve.current?.setContent(H,JSON.stringify([l,u?.cwd,j?.repositoryId,s,j?.id,H.path]))},[ae,H,l,u,j,s,se]),(0,a.useEffect)(()=>{ve.current?.options({sideBySide:De,ignoreWhitespace:rt,wrap:it})},[ae,De,rt,it]);let Oe=Fo(xe,v,ye,We),Ae=Oe.flatMap(c=>c.changes),Yo=Oo(fe?.changes),ft=Po(Ae,j?.id),Zt=()=>{tt(""),Gt("all")},Qo=async()=>{let c=H?.path||he?.path;if(c)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(c);else{let P=document.createElement("textarea");try{if(P.value=c,P.style.cssText="position:fixed;opacity:0",document.body.appendChild(P),P.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{P.remove()}}jt(!0),window.setTimeout(()=>jt(!1),1500)}catch{_(t("copyFailed"))}};(0,a.useEffect)(()=>{let c=P=>{if(se)return;let V=ko(P,Yt.current,ze.current,!!ye);V&&(P.preventDefault(),V==="search"?(ze.current?.focus(),ze.current?.select()):V==="clear"?tt(""):mt(V))};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[ye,Ae,j,se]);let Rt=c=>ot(P=>{let V={...P};for(let X of Oe)for(let ne of Ft(Ot(X.changes)))V[X.repository.id+"\0"+ne]=!c;return V}),Xo=()=>{let c=he;!c||!j||(qt(!0),Zt(),ot(P=>{let V={...P};for(let X of Bo(c.path))V[j.repositoryId+"\0"+X]=!1;return V}),lt.current=Je(j.repositoryId,c.id))};(0,a.useEffect)(()=>{let c=lt.current;if(!c)return;let P=[...at.current?.querySelectorAll("button[data-vcs-change]")||[]].find(V=>V.dataset.vcsChange===c);P&&(P.scrollIntoView({block:"nearest"}),P.focus(),lt.current=null)},[Ee,ye,We,Jt,Oe]);let mt=c=>{let P=Do(Ae,j?.id,c);P&&(Le.current?.abort(),te(null),Be("content"),ie({repositoryId:h,id:P.id}))},eo=Ce||xe.some(c=>!v[c.id]),he=fe?.changes?.find(c=>c.id===j?.id),ke=H?.properties,ht=ke?[...new Set([...Object.keys(ke.left||{}),...Object.keys(ke.right||{})])].filter(c=>ke.left?.[c]!==ke.right?.[c]):[],Fe=c=>jo[c?.status]||c?.status?.slice(0,1).toUpperCase()||"M",to=H?.binary?[H.left.label,H.right.label].filter(Boolean).join(" \u2194 "):"",Pe=A||(Ue?t("loading"):l?eo&&!he?t("loading"):ue||(be.length?he?H?.binary?t("binary")+(to?" "+t("binaryComparison",{files:to}):""):H?!ae&&!R?t("loading"):"":t("pick"):t("pick"):t("noRepo")):t("noSession")),$o=c=>Co(c,at.current),oo=({entry:c,compact:P=!1,depth:V=0})=>{let X=c.path.lastIndexOf("/");return a.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":Je(h,c.id),"aria-current":j?.repositoryId===h&&j?.id===c.id?"true":void 0,style:{paddingInlineStart:8+V*14},title:(c.oldPath?c.oldPath+" \u2192 ":"")+c.path+" \xB7 "+t(Fe(c)),onClick:()=>{Le.current?.abort(),te(null),Be("content"),ie({repositoryId:h,id:c.id})}},a.default.createElement("span",{className:"vcs-status","data-status":Fe(c)},Fe(c)),a.default.createElement(xt,{submodule:c.submodule,t}),a.default.createElement("span",{className:"vcs-filename"},P?c.path.slice(X+1):c.path,c.oldPath&&a.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",c.oldPath)))},ro=({node:c,repository:P,depth:V=0})=>a.default.createElement(a.default.Fragment,null,c.directories.map(X=>{let ne=P.id+"\0"+X.id,le=!!Jt[ne];return a.default.createElement(a.default.Fragment,{key:ne},a.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":le?"closed":"open","aria-expanded":!le,style:{paddingInlineStart:8+V*14},onClick:()=>ot(Zo=>({...Zo,[ne]:!le}))},a.default.createElement("span",{"aria-hidden":"true"},le?"\u203A":"\u2304"),X.name,a.default.createElement("small",null,X.count)),!le&&a.default.createElement(ro,{node:X,repository:P,depth:V+1}))}),c.files.map(X=>a.default.createElement(oo,{key:Je(P.id,X.id),entry:X,compact:c.id!=="",depth:V})));return a.default.createElement("section",{ref:Yt,className:"vcs-root","aria-label":t("title")},a.default.createElement("style",null,gt),a.default.createElement("header",{className:"vcs-top"},a.default.createElement(qo,null),a.default.createElement("h1",{className:"vcs-title"},t("title")),a.default.createElement("span",{className:"vcs-badge"},t("readonly")),a.default.createElement("span",{className:"vcs-spacer"}),a.default.createElement("select",{"aria-label":t("repositories"),value:h,disabled:Ce||!be.length,onChange:c=>{Me(),y({}),S(c.target.value)}},!be.length&&a.default.createElement("option",{value:""},t("repositories")),be.map(c=>a.default.createElement("option",{key:c.id,value:c.id},Ve(c,t("workspaceRoot"))))),a.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",a.default.createElement("select",{"aria-label":t("gitMode"),value:s,disabled:se||!xe.some(c=>c.type==="git"),onChange:c=>{Me(),y({}),d(c.target.value)}},["all","unstaged","staged"].map(c=>a.default.createElement("option",{key:c,value:c},t(c))))),a.default.createElement("button",{onClick:()=>$t(!1),disabled:eo||!l},t("refresh")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")),a.default.createElement("div",{className:"vcs-path",title:u?.cwd||m?.cwd},t("session"),": ",u?.cwd||m?.cwd||"\u2014"),a.default.createElement("form",{className:"vcs-discovery",onSubmit:c=>{c.preventDefault(),Ke()}},a.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:L,onChange:c=>b(c.target.value)}),a.default.createElement("button",{disabled:!l||Ce},t("rescan")),a.default.createElement("span",null,t("scanHint"))),u?.truncated&&a.default.createElement("div",{className:"vcs-notice"},t("truncated")),(u?.warnings||[]).map((c,P)=>a.default.createElement("div",{className:"vcs-notice",key:P},typeof c=="string"?c:c.message||JSON.stringify(c)))),xe.filter(c=>c.type==="svn").map(c=>a.default.createElement(a.default.Fragment,{key:JSON.stringify([l,c.id,N,f])},a.default.createElement(wt,{repositoryId:c.id,sessionId:l,rpc:o,t,onRediscover:we}),a.default.createElement(Ct,{repositoryId:c.id,sessionId:l,rpc:o,t,onRediscover:we}))),xe.some(c=>c.type==="git")&&a.default.createElement(a.default.Fragment,null,a.default.createElement("nav",{className:"vcs-review-views","aria-label":t("reviewView")},a.default.createElement("button",{"aria-pressed":!se,onClick:()=>Wt(!1)},t("workspaceView")),a.default.createElement("button",{"aria-pressed":se,"aria-expanded":se,onClick:Ko},t("history"))),se&&a.default.createElement(Mt,{key:JSON.stringify([l,h,g,N]),sessionId:l,repositoryId:h,rpc:o,t,onRediscover:we})),a.default.createElement("div",{className:"vcs-body",hidden:se,"aria-label":t("workspaceView")},a.default.createElement("aside",{className:"vcs-files"},a.default.createElement("div",{className:"vcs-filter"},a.default.createElement("input",{ref:ze,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:ye,onChange:c=>tt(c.target.value)}),(ye||We!=="all")&&a.default.createElement("button",{className:"vcs-clear-filter",onClick:Zt},t("clearFilters"))),a.default.createElement("div",{className:"vcs-status-filter","aria-label":t("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(c=>a.default.createElement("button",{key:c,"aria-pressed":We===c,onClick:()=>Gt(c)},t(c==="all"?"allFiles":jo[c]||"M")," ",a.default.createElement("small",null,Yo[c]||0)))),a.default.createElement("div",{className:"vcs-count"},a.default.createElement("span",null,Ae.length," ",t("files")),a.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),a.default.createElement("button",{"aria-pressed":Ee,onClick:()=>qt(!Ee)},t(Ee?"tree":"list"))),Ee&&a.default.createElement("div",{className:"vcs-tree-actions"},a.default.createElement("button",{onClick:()=>Rt(!0)},t("expandAll")),a.default.createElement("button",{onClick:()=>Rt(!1)},t("collapseAll")),a.default.createElement("button",{onClick:Xo,disabled:!he},t("revealSelected"))),a.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:at,onKeyDown:$o},Oe.map(c=>{let P=c.repository;return a.default.createElement("section",{className:"vcs-repository",key:P.id,"aria-label":Ve(P,t("workspaceRoot"))},a.default.createElement("div",{className:"vcs-repository-heading",title:P.root},a.default.createElement("strong",null,Ve(P,t("workspaceRoot"))),a.default.createElement("small",null,P.type==="svn"?t("svnBase"):t(et(P,s)))),c.error?a.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},c.error,a.default.createElement("button",{onClick:Ke},t("rescan"))):v[P.id]?Ee?a.default.createElement(ro,{node:Ot(c.changes),repository:P}):c.changes.map(V=>a.default.createElement(oo,{key:Je(P.id,V.id),entry:V})):a.default.createElement("div",{className:"vcs-message"},t("loading")),!c.error&&v[P.id]&&!c.changes.length&&a.default.createElement("div",{className:"vcs-message"},t(ye?"emptySearch":"clean")))}),!Oe.length&&a.default.createElement("div",{className:"vcs-message"},Ce?t("loading"):ue||t(l?"noRepo":"noSession"),ue&&a.default.createElement("button",{onClick:Ke},t("rescan"))))),a.default.createElement("main",{className:"vcs-detail"},a.default.createElement("div",{className:"vcs-filehead"},a.default.createElement("strong",{title:H?.path||he?.path},Se?Ve(Se,t("workspaceRoot"))+" / ":"",H?.path||he?.path||t("pick")),a.default.createElement("button",{className:"vcs-copy-path",disabled:!(H?.path||he?.path),onClick:Qo},t(Tt?"copied":"copyPath")),Tt&&a.default.createElement("span",{className:"vcs-sr-only",role:"status"},t("pathCopied")),a.default.createElement("span",{className:"vcs-spacer"}),H&&!H.binary&&ae&&a.default.createElement(a.default.Fragment,null,a.default.createElement("span",{className:"vcs-add"},"+",st.added),a.default.createElement("span",{className:"vcs-del"},"\u2212",st.deleted))),R&&a.default.createElement("div",{className:"vcs-notice",role:"status"},t("fallback")," ",a.default.createElement("button",{onClick:()=>Ut(c=>c+1)},t("retry")),a.default.createElement("details",null,a.default.createElement("summary",null,t("diagnostics")),R)),H&&a.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},a.default.createElement("span",{className:"vcs-context-status","data-status":Fe(H)},t(Fe(H))),H.oldPath&&a.default.createElement("span",{className:"vcs-context-rename",title:H.oldPath+" \u2192 "+H.path},H.oldPath," ",a.default.createElement("b",null,"\u2192")," ",H.path),a.default.createElement("span",null,H.left.label||"\u2014"," ",a.default.createElement("b",null,"\u2194")," ",H.right.label||"\u2014"),(H.left.encoding||H.right.encoding)&&a.default.createElement("span",null,t("encoding"),": ",H.left.encoding||"\u2014"," / ",H.right.encoding||"\u2014")),H&&Se?.type==="git"&&a.default.createElement(je,{key:JSON.stringify([l,u?.cwd,j.repositoryId,s,j.id,f,fe]),workspace:!0,sessionId:l,repositoryId:j.repositoryId,mode:s,id:j.id,rpc:o,t,onRediscover:we}),Se?.type==="git"&&(He||H?.notice?.includes("2 MiB"))&&a.default.createElement("div",{className:"vcs-notice"},a.default.createElement("span",null,t("workspaceLargeScope")),a.default.createElement("button",{onClick:()=>{Le.current?.abort(),te(null),zt(He?null:{key:ut,status:fe})}},t(He?"largeClose":"largeLoad")),He&&A&&a.default.createElement("button",{onClick:()=>zo(c=>c+1)},t("retry"))),H?.large&&a.default.createElement("p",{role:"status"},t(R?"largeFallback":_t==="complete"?"diffComplete":_t==="incomplete"?"diffIncomplete":"diffPending")),H?.notice&&a.default.createElement("div",{className:"vcs-notice"},H.notice),H?.submodule&&a.default.createElement("p",{role:"status"},t("submoduleScope")),H?.status==="conflicted"&&Se?.type==="git"&&a.default.createElement(bt,{key:JSON.stringify([l,j.repositoryId,s,j.id,f]),sessionId:l,repositoryId:j.repositoryId,mode:s,id:j.id,rpc:o,t,onRediscover:we}),ht.length>0&&a.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(c=>a.default.createElement("button",{key:c,"aria-pressed":Ie===c,onClick:()=>Be(c)},t(c),c==="properties"?" ("+ht.length+")":""))),a.default.createElement("div",{className:"vcs-labels"},a.default.createElement("span",null,H?.left.label||"\u2014",H?.left.encoding?" \xB7 "+H.left.encoding:""),a.default.createElement("span",null,H?.right.label||"\u2014",H?.right.encoding?" \xB7 "+H.right.encoding:"")),a.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!Pe||Ie!=="content",style:Ie==="properties"?{display:"none"}:void 0},a.default.createElement("div",{className:"vcs-editor",ref:Qt,style:R?{display:"none"}:void 0}),R&&H&&!H.binary&&!Pe&&a.default.createElement(Te,{comparison:H,labels:Qe(t)}),Pe&&a.default.createElement("div",{className:"vcs-message "+(ue||A||R?"vcs-error":""),role:"status"},Pe,(ue||A||R)&&a.default.createElement("button",{onClick:()=>R?Ut(c=>c+1):Ke()},t(R?"retry":"rescan")))),Ie==="properties"&&a.default.createElement("div",{className:"vcs-properties"},a.default.createElement("table",null,a.default.createElement("thead",null,a.default.createElement("tr",null,a.default.createElement("th",null,t("properties")),a.default.createElement("th",null,H?.left.label||t("before")),a.default.createElement("th",null,H?.right.label||t("after")))),a.default.createElement("tbody",null,ht.map(c=>a.default.createElement("tr",{key:c},a.default.createElement("th",null,c),a.default.createElement("td",null,ke.left?.[c]??"\u2014"),a.default.createElement("td",null,ke.right?.[c]??"\u2014")))))),a.default.createElement("footer",{className:"vcs-toolbar"},a.default.createElement("button",{disabled:!ae,"aria-pressed":De,onClick:()=>Jo(!De)},t(De?"side":"inline")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ae,checked:rt,onChange:c=>Vo(c.target.checked)}),t("whitespace")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ae,checked:it,onChange:c=>Uo(c.target.checked)}),t("wrap")),a.default.createElement("span",{className:"vcs-spacer"}),ae&&a.default.createElement("span",null,st.count," ",t("changes")),a.default.createElement("button",{disabled:!ae||!H||!!Pe,onClick:()=>ve.current?.navigate("previous")},t("previous")),a.default.createElement("button",{disabled:!ae||!H||!!Pe,onClick:()=>ve.current?.navigate("next")},t("next")),ft.index>0&&a.default.createElement("span",{className:"vcs-review-position"},t("reviewPosition",{index:ft.index,total:ft.total})),a.default.createElement("span",{className:"vcs-toolbar-separator"}),a.default.createElement("button",{title:t("fileShortcut"),disabled:!Ae.length,onClick:()=>mt("previous")},t("previousFile")),a.default.createElement("button",{title:t("fileShortcut"),disabled:!Ae.length,onClick:()=>mt("next")},t("nextFile"))))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},i)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>t("title"),order:65},qo))}
|
|
97
97
|
return module.exports; }});
|
package/package.json
CHANGED
package/text-content.mjs
CHANGED
|
@@ -6,12 +6,28 @@ export const MAX_LARGE_TEXT = 8 * 1024 * 1024;
|
|
|
6
6
|
export function decodeLargeText(buffer, signal) {
|
|
7
7
|
signal?.throwIfAborted();
|
|
8
8
|
if (buffer.length > MAX_LARGE_TEXT) throw new Error('Large comparison exceeds 8 MiB per side.');
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
let text, encoding = 'UTF-8';
|
|
10
|
+
if (buffer[0] === 0xff && buffer[1] === 0xfe) {
|
|
11
|
+
if (buffer.length % 2) throw new Error('Large comparison requires valid UTF-16 text.');
|
|
12
|
+
text = buffer.subarray(2).toString('utf16le'); encoding = 'UTF-16LE';
|
|
13
|
+
} else if (buffer[0] === 0xfe && buffer[1] === 0xff) {
|
|
14
|
+
const bytes = Buffer.from(buffer.subarray(2));
|
|
15
|
+
if (bytes.length % 2) throw new Error('Large comparison requires valid UTF-16 text.');
|
|
16
|
+
bytes.swap16(); text = bytes.toString('utf16le'); encoding = 'UTF-16BE';
|
|
17
|
+
} else {
|
|
18
|
+
if (buffer.includes(0)) throw new Error('Large comparison requires UTF-8 text without binary control bytes.');
|
|
19
|
+
if (buffer.some(byte => byte < 32 && ![9, 10, 12, 13].includes(byte))) {
|
|
20
|
+
throw new Error('Large comparison requires UTF-8 text without binary control bytes.');
|
|
21
|
+
}
|
|
22
|
+
try { text = new TextDecoder('utf-8', {fatal: true}).decode(buffer); }
|
|
23
|
+
catch {
|
|
24
|
+
if (buffer.subarray(0, 3).equals(Buffer.from([0xef, 0xbb, 0xbf]))) {
|
|
25
|
+
throw new Error('Large comparison requires valid UTF-8 text.');
|
|
26
|
+
}
|
|
27
|
+
try { text = new TextDecoder('gbk', {fatal: true}).decode(buffer); encoding = 'GBK'; }
|
|
28
|
+
catch { throw new Error('Large comparison requires valid UTF-8, GBK or UTF-16 BOM text.'); }
|
|
29
|
+
}
|
|
11
30
|
}
|
|
12
|
-
let text;
|
|
13
|
-
try { text = new TextDecoder('utf-8', {fatal: true}).decode(buffer); }
|
|
14
|
-
catch { throw new Error('Large comparison requires valid UTF-8 text.'); }
|
|
15
31
|
let lines = 1, length = 0;
|
|
16
32
|
for (let index = 0; index < text.length; index++) {
|
|
17
33
|
if (index % 65536 === 0) signal?.throwIfAborted();
|
|
@@ -22,7 +38,7 @@ export function decodeLargeText(buffer, signal) {
|
|
|
22
38
|
} else if (++length > 65536) throw new Error('Large comparison exceeds 65536 characters per line.');
|
|
23
39
|
}
|
|
24
40
|
signal?.throwIfAborted();
|
|
25
|
-
return {text, encoding
|
|
41
|
+
return {text, encoding, totalBytes: buffer.length, lineCount: lines};
|
|
26
42
|
}
|
|
27
43
|
|
|
28
44
|
export function decode(buffer) {
|