@feng0531/dsh-vcs 0.4.10 → 0.5.1

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/dist/client.js CHANGED
@@ -1,5 +1,5 @@
1
1
  window.__ModuleLoader__.load({ id: "@feng0531/dsh-vcs", factory(require) { var module = { exports: {} }; var exports = module.exports;
2
- var Xr=Object.create;var Te=Object.defineProperty;var Zr=Object.getOwnPropertyDescriptor;var Rr=Object.getOwnPropertyNames;var eo=Object.getPrototypeOf,to=Object.prototype.hasOwnProperty;var ro=(e,t)=>{for(var i in t)Te(e,i,{get:t[i],enumerable:!0})},Ft=(e,t,i,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Rr(t))!to.call(e,o)&&o!==i&&Te(e,o,{get:()=>t[o],enumerable:!(r=Zr(t,o))||r.enumerable});return e};var X=(e,t,i)=>(i=e!=null?Xr(eo(e)):{},Ft(t||!e||!e.__esModule?Te(i,"default",{value:e,enumerable:!0}):i,e)),oo=e=>Ft(Te({},"__esModule",{value:!0}),e);var di={};ro(di,{apply:()=>ci,inject:()=>li});module.exports=oo(di);var I=X(require("react"),1);var c=X(require("react"),1);var et=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
2
+ var so=Object.create;var je=Object.defineProperty;var no=Object.getOwnPropertyDescriptor;var ao=Object.getOwnPropertyNames;var lo=Object.getPrototypeOf,co=Object.prototype.hasOwnProperty;var po=(e,t)=>{for(var o in t)je(e,o,{get:t[o],enumerable:!0})},It=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ao(t))!co.call(e,i)&&i!==o&&je(e,i,{get:()=>t[i],enumerable:!(r=no(t,i))||r.enumerable});return e};var oe=(e,t,o)=>(o=e!=null?so(lo(e)):{},It(t||!e||!e.__esModule?je(o,"default",{value:e,enumerable:!0}):o,e)),uo=e=>It(je({},"__esModule",{value:!0}),e);var yi={};po(yi,{apply:()=>vi,inject:()=>gi});module.exports=uo(yi);var z=oe(require("react"),1);var c=oe(require("react"),1);var st=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
3
3
  .vcs-root .vcs-discovery input{min-width:160px;max-width:100%;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-base);padding:6px 9px}
4
4
  .vcs-root .vcs-discovery span{font-size:12px;color:var(--dsw-alias-label-secondary)}
5
5
  .vcs-root .vcs-mode{display:flex;align-items:center;gap:6px}
@@ -176,6 +176,6 @@ var Xr=Object.create;var Te=Object.defineProperty;var Zr=Object.getOwnPropertyDe
176
176
  .vcs-root .vcs-svn-remote>p,.vcs-root .vcs-svn-remote>button{flex-shrink:0;margin:4px 16px;align-self:flex-start}
177
177
  .vcs-root .vcs-history-browser>.vcs-history-details>p{grid-column:2;grid-row:1;overflow:auto;padding:12px}
178
178
  @container(max-width:650px){.vcs-root .vcs-history-browser{grid-template-columns:minmax(130px,42%) minmax(0,1fr);grid-template-rows:minmax(120px,38%) minmax(0,1fr)}.vcs-root .vcs-history-browser .vcs-commit-sidebar,.vcs-root .vcs-history-browser .vcs-commit-review{padding:8px}}
179
- `;function Ve(e,t){return async(i,r,o)=>{let s=await e.rpc.call("/vcs-rpc",i,r,o);if(!s.ok){let l=new Error(s.error?.message||String(s.error||t()));throw l.code=s.error?.code,l}return s.value}}function tt(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let t=0,i=[];function r(){for(;t<e&&i.length;){let o=i.shift();if(o.signal?.removeEventListener("abort",o.abort),o.signal?.aborted){o.reject(new Error("Aborted"));continue}t++,Promise.resolve().then(()=>{if(o.signal?.aborted)throw new Error("Aborted");return o.run()}).then(o.resolve,o.reject).finally(()=>{t--,r()})}}return(o,s)=>new Promise((l,d)=>{let p={run:o,signal:s,resolve:l,reject:d,abort:null};if(p.abort=()=>{let n=i.indexOf(p);n>=0&&(i.splice(n,1),d(new Error("Aborted")))},s?.aborted){d(new Error("Aborted"));return}s?.addEventListener("abort",p.abort,{once:!0}),i.push(p),r()})}var ce=X(require("react"),1);function Ot(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Tt(e="",t=""){let i=Ot(e),r=Ot(t),o=0;for(;o<i.length&&o<r.length&&i[o]===r[o];)o++;let s=0;for(;s<i.length-o&&s<r.length-o&&i[i.length-s-1]===r[r.length-s-1];)s++;let l=i.length-s,d=r.length-s,p=l-o,n=d-o,a=p&&n?(p+1)*(n+1):0,u=a>2e5,w=[],f=0;function S(h,k){f++,!(w.length>=2e3)&&w.push({left:h===null?null:{number:h+1,text:i[h]},right:k===null?null:{number:k+1,text:r[k]},kind:h===null?"insert":k===null?"delete":i[h]===r[k]?"equal":"replace"})}for(let h=0;h<o;h++)S(h,h);if(u||!p||!n)for(let h=0;h<Math.max(p,n);h++)S(h<p?o+h:null,h<n?o+h:null);else{let h=n+1,k=new Uint32Array(a);for(let m=p-1;m>=0;m--)for(let x=n-1;x>=0;x--)k[m*h+x]=i[o+m]===r[o+x]?k[(m+1)*h+x+1]+1:Math.max(k[(m+1)*h+x],k[m*h+x+1]);let g=0,b=0;for(;g<p||b<n;)g<p&&b<n&&i[o+g]===r[o+b]?S(o+g++,o+b++):g<p&&(b===n||k[(g+1)*h+b]>=k[g*h+b+1])?S(o+g++,null):S(null,o+b++)}for(let h=0;h<s;h++)S(l+h,d+h);return{rows:w,approximate:u,truncated:f>w.length,totalRows:f,omittedRows:f-w.length,leftLineCount:i.length,rightLineCount:r.length,lcsCells:u?0:a}}var no={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."},rt={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},ao={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},lo={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},co={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Ne({comparison:e,labels:t={}}){let i=e?.left?.text??"",r=e?.right?.text??"",o=(0,ce.useMemo)(()=>Tt(i,r),[i,r]),s=d=>t[d]??no[d],l=(d,p,n)=>{let a=d&&n!=="equal";return ce.default.createElement("td",{style:{...rt,background:a?p==="left"?"#d6454520":"#259b4920":void 0}},ce.default.createElement("div",{style:ao},ce.default.createElement("span",{style:lo},d?.number??""),ce.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},a?p==="left"?"\u2212":"+":""),ce.default.createElement("pre",{style:co},d?.text??"")))};return ce.default.createElement("section",{className:"vcs-text-comparison","aria-label":s("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},o.approximate&&ce.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),o.truncated&&ce.default.createElement("div",{role:"status",style:{padding:8}},s("truncated")," (",2e3," / ",o.totalRows,")"),ce.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},ce.default.createElement("thead",null,ce.default.createElement("tr",null,ce.default.createElement("th",{scope:"col",style:{...rt,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),ce.default.createElement("th",{scope:"col",style:{...rt,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),ce.default.createElement("tbody",null,o.rows.map((d,p)=>ce.default.createElement("tr",{key:p,"data-kind":d.kind},l(d.left,"left",d.kind),l(d.right,"right",d.kind))))),!o.rows.length&&ce.default.createElement("p",{style:{padding:8}},s("empty")))}var _=X(require("react"),1);function Vt(e,{width:t,height:i,signal:r,timeoutMs:o=1e4,createURL:s=p=>URL.createObjectURL(p),revokeURL:l=p=>URL.revokeObjectURL(p),createImage:d=()=>new Image}={}){return new Promise((p,n)=>{if(r?.aborted){n(r.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(t)||!Number.isInteger(i)||t<1||i<1||t>8192||i>8192||t*i>16e6||!Number.isFinite(o)||o<=0){n(new Error("Invalid image preview"));return}let a,u,w,f=!1,S=!1,h=()=>{S||(S=!0,u&&(u.src=""),a&&l(a))},k=()=>{clearTimeout(w),r?.removeEventListener("abort",b)},g=m=>{f||(f=!0,k(),h(),n(m))},b=()=>g(r.reason||new Error("Image cancelled"));try{a=s(e),u=d(),r?.addEventListener("abort",b,{once:!0}),w=setTimeout(()=>g(new Error("Image decode timed out")),o),u.src=a,Promise.resolve(u.decode()).then(()=>{if(!f){if(r?.aborted){b();return}if(u.naturalWidth!==t||u.naturalHeight!==i){g(new Error("Image dimensions mismatch"));return}f=!0,k(),p({url:a,dispose:h})}},g)}catch(m){g(m)}})}function po({side:e,sessionId:t,repositoryId:i,commit:r,parentIndex:o,base:s,target:l,workspace:d=!1,mode:p,id:n,rpc:a,t:u,onRediscover:w}){let[f,S]=(0,_.useState)(null),[h,k]=(0,_.useState)(""),[g,b]=(0,_.useState)(0);return(0,_.useEffect)(()=>{let m=new AbortController,x;return S(null),k(""),(async()=>{let y=await a(d?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",d?{sessionId:t,repositoryId:i,mode:p,id:n,side:e}:s?{sessionId:t,repositoryId:i,base:s,target:l,id:n,side:e}:{sessionId:t,repositoryId:i,commit:r,parentIndex:o,id:n,side:e},m.signal);if(m.signal.aborted)return;if(y.absent){S(y);return}if(!["image/png","image/jpeg","image/webp"].includes(y.mime)||typeof y.base64!="string"||y.base64.length>2796204||!Number.isInteger(y.bytes)||y.bytes<1||y.bytes>2097152)throw Error(u("imageInvalid"));let C=atob(y.base64);if(C.length!==y.bytes)throw Error(u("imageInvalid"));let N=new Blob([Uint8Array.from(C,v=>v.charCodeAt(0))],{type:y.mime});if(x=await Vt(N,{width:y.width,height:y.height,signal:m.signal}),m.signal.aborted){x.dispose();return}S({...y,url:x.url})})().catch(y=>{m.signal.aborted||(k(y.message),y.code==="vcs/rediscover-required"&&w())}),()=>{m.abort(),x?.dispose()}},[e,t,i,r,o,s,l,d,p,n,g]),_.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},_.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),h?_.default.createElement("p",{role:"alert"},h," ",_.default.createElement("button",{onClick:()=>b(m=>m+1)},u("retry"))):f?_.default.createElement(_.default.Fragment,null,_.default.createElement("p",null,_.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?_.default.createElement("p",null,u("imageAbsent")):_.default.createElement(_.default.Fragment,null,_.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),_.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&_.default.createElement("p",null,u("imageMetadata")))):_.default.createElement("p",{role:"status"},u("loading")))}function Ee(e){let[t,i]=(0,_.useState)(!1);return _.default.createElement("div",null,_.default.createElement("button",{"aria-expanded":t,onClick:()=>i(r=>!r)},e.t("imageCompare")),t&&_.default.createElement(_.default.Fragment,null,_.default.createElement("p",null,e.t("imageScope")),_.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(r=>_.default.createElement(po,{key:r,...e,side:r})))))}var q=X(require("react"),1);var te=X(require("react"),1);function je(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var me=require("react");function jt({load:e,node:t,comparison:i,key:r,single:o=!1,onReady:s=()=>{},onError:l=()=>{},onComputation:d=()=>{}}){let p=new AbortController,n,a=!1,u=()=>{let f=n;n=void 0,f?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),e(p.signal))).then(f=>{a||(n=f.createDiff(t,{single:o,onComputation:S=>{a||d(S)}}),n.setContent(i,r),a||s(n))}).catch(f=>{try{u()}finally{a||l(f)}}),dispose(){a||(a=!0,p.abort(),u())}}}async function Ue(e,{signal:t,fetcher:i=fetch,importer:r=o=>import(o)}={}){let o=await i(e,{credentials:"same-origin",cache:"no-cache",signal:t});if(!o.ok)throw new Error("Editor resource HTTP "+o.status+" ("+e+"). "+(o.status===401?"Refresh the authenticated DSH page.":o.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let s=o.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(s))throw new Error("Editor resource returned "+(s||"no Content-Type")+" instead of JavaScript.");return await o.arrayBuffer(),t?.throwIfAborted(),r(e)}var Se="0.4.10";function Ut({comparison:e,identity:t,enabled:i,single:r,line:o,sideBySide:s,ignoreWhitespace:l,wrap:d}){let p=(0,me.useRef)(null),n=(0,me.useRef)(null),[a,u]=(0,me.useState)(!1),[w,f]=(0,me.useState)(""),[S,h]=(0,me.useState)("pending");return(0,me.useEffect)(()=>{if(u(!1),h("pending"),f(""),!i)return;let k=m=>new URL("vcs-assets/"+m,document.baseURI).href,g=document.createElement("link");g.rel="stylesheet",g.href=k("editor.css"),document.head.appendChild(g);let b=jt({node:p.current,comparison:e,key:t,single:r,load:m=>Ue(k("editor.js")+"?v="+encodeURIComponent(Se)+"&retry=0",{signal:m}),onReady:m=>{n.current=m,u(!0)},onError:m=>f(m.message),onComputation:h});return()=>{n.current=null;try{b.dispose()}finally{g.remove()}}},[i,e,t,r]),(0,me.useEffect)(()=>{a&&r&&o&&n.current?.revealLine(o)},[a,r,o]),(0,me.useEffect)(()=>{a&&n.current?.options({sideBySide:s,ignoreWhitespace:l,wrap:d})},[a,s,l,d]),{node:p,viewer:n,ready:a,error:w,computation:S}}function fe({comparison:e,identity:t,t:i,single:r=!1,line:o=null}){let[s,l]=(0,te.useState)(!0),[d,p]=(0,te.useState)(!1),[n,a]=(0,te.useState)(!1),[u,w]=(0,te.useState)(!0),{node:f,viewer:S,ready:h,error:k,computation:g}=Ut({comparison:e,identity:t,enabled:u,single:r,line:o,sideBySide:s,ignoreWhitespace:d,wrap:n});return te.default.createElement("div",{className:"vcs-history-viewer"},te.default.createElement("div",{className:"vcs-history-viewer-toolbar"},te.default.createElement("button",{"aria-pressed":u,onClick:()=>w(b=>!b)},i(u?"historyBasic":"historyAdvanced")),h&&!r&&te.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},te.default.createElement("button",{"aria-pressed":s,onClick:()=>l(b=>!b)},i(s?"side":"inline")),te.default.createElement("label",null,te.default.createElement("input",{type:"checkbox",checked:d,onChange:b=>p(b.target.checked)}),i("whitespace")),te.default.createElement("label",null,te.default.createElement("input",{type:"checkbox",checked:n,onChange:b=>a(b.target.checked)}),i("wrap")),te.default.createElement("button",{onClick:()=>S.current?.navigate("previous")},i("previous")),te.default.createElement("button",{onClick:()=>S.current?.navigate("next")},i("next")))),u&&!h&&!k&&te.default.createElement("p",{role:"status"},i("loading")),e.large&&!r&&h&&te.default.createElement("p",{role:"status"},i(g==="complete"?"diffComplete":g==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!h&&te.default.createElement("p",{role:"status"},i("largeFallback")),k&&te.default.createElement("p",{role:"status"},i("fallback")," ",k),te.default.createElement("div",{key:"editor-host",className:"vcs-history-editor-host",style:{position:"relative",height:"var(--vcs-history-editor-height, 360px)"}},te.default.createElement("div",{ref:f,style:{position:"absolute",inset:0,visibility:h?"visible":"hidden"},"aria-hidden":!h}),!h&&te.default.createElement(Ne,{comparison:e,labels:je(i)})))}function ot({sessionId:e,repositoryId:t,mode:i,id:r,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,q.useState)(null),[n,a]=(0,q.useState)(""),[u,w]=(0,q.useState)(0),[f,S]=(0,q.useState)(1),[h,k]=(0,q.useState)(3);(0,q.useEffect)(()=>{let v=new AbortController;return p(null),a(""),o("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:i,id:r},v.signal).then(A=>{v.signal.aborted||p(A)}).catch(A=>{v.signal.aborted||(a(A.message),A.code==="vcs/rediscover-required"&&l())}),()=>v.abort()},[e,t,i,r,u]);let g={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},b=s("conflictStageMissing"),m=g[f],x=g[h],y=(0,q.useMemo)(()=>{if(!d)return null;let v=M=>d.stages.find(D=>D.stage===M),A=M=>{let D=v(M);return!D||!D.present?{text:"",label:g[M]}:{text:D.text,label:g[M],...D.binary?{binary:!0}:{},...D.encoding?{encoding:D.encoding}:{},...D.notice?{notice:D.notice}:{}}},L=A(f),J=A(h),ie=[L.notice,J.notice].filter(Boolean);return v(f)?.present&&v(h)?.present||ie.push(b),{path:d.path,left:L,right:J,binary:!!(L.binary||J.binary),...ie.length?{notice:[...new Set(ie)].join(" \xB7 ")}:{}}},[d,f,h,m,x,b]);if(n)return q.default.createElement("section",{"aria-label":s("conflictStages")},q.default.createElement("h4",null,s("conflictStages")),q.default.createElement("p",{role:"alert"},n," ",q.default.createElement("button",{onClick:()=>w(v=>v+1)},s("retry"))));if(!d||!y)return q.default.createElement("section",{"aria-label":s("conflictStages")},q.default.createElement("h4",null,s("conflictStages")),q.default.createElement("p",{role:"status"},s("loading")));let C=v=>d.stages.find(A=>A.stage===v),N=y.binary&&!y.left.text&&!y.right.text;return q.default.createElement("section",{"aria-label":s("conflictStages")},q.default.createElement("h4",null,s("conflictStages")),q.default.createElement("p",null,s("conflictStagesScope")),q.default.createElement("ul",null,[1,2,3].map(v=>q.default.createElement("li",{key:v},q.default.createElement("code",null,g[v])," \xB7 ",C(v)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),C(v)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),C(v)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),C(v)?.present&&C(v)?.notice&&" \xB7 "+C(v).notice))),q.default.createElement("label",null,s("conflictStageLeft")," ",q.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:v=>S(Number(v.target.value))},[1,2,3].map(v=>q.default.createElement("option",{key:v,value:v},g[v])))),q.default.createElement("label",null,s("conflictStageRight")," ",q.default.createElement("select",{"aria-label":s("conflictStageRight"),value:h,onChange:v=>k(Number(v.target.value))},[1,2,3].map(v=>q.default.createElement("option",{key:v,value:v},g[v])))),y.notice&&q.default.createElement("p",{role:"status"},y.notice),N?q.default.createElement("p",{role:"status"},s("binary")):q.default.createElement(fe,{key:JSON.stringify([r,f,h,d.snapshot]),comparison:y,identity:JSON.stringify([e,t,i,r,f,h,d.snapshot]),t:s}))}var It=X(require("react"),1);function it({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let i=e.checkout,r=[];e.pointerMoved&&r.push(t("submodulePointerMoved")),(e.dirty||e.untracked)&&r.push(t("submoduleDirty"));let o=[e.recorded+" \xB7 "+t("submoduleCheckout_"+i),...r].join(" \xB7 ");return It.default.createElement("span",{className:"vcs-submodule","data-checkout":i,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:o},t("submoduleBadge")," ",e.recorded.slice(0,10),r.length?` \xB7 ${r.join(", ")}`:"")}var Z=X(require("react"),1);function st(e){return Z.default.createElement(mo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function mo({sessionId:e,repositoryId:t,rpc:i,t:r,onRediscover:o}){let[s,l]=(0,Z.useState)(!1),[d,p]=(0,Z.useState)(null),[n,a]=(0,Z.useState)(""),[u,w]=(0,Z.useState)(0);return(0,Z.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),a(""),i("vcs/svn-identity",{sessionId:e,repositoryId:t},f.signal).then(S=>{f.signal.aborted||p(S)}).catch(S=>{f.signal.aborted||(a(S.message),S.code==="vcs/rediscover-required"&&o())}),()=>f.abort()},[s,e,t,u]),Z.default.createElement("section",null,Z.default.createElement("button",{"aria-expanded":s,onClick:()=>l(f=>!f)},r("svnIdentity")),s&&Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,r("svnOfflineIdentity")),n?Z.default.createElement("p",{role:"alert"},n," ",Z.default.createElement("button",{onClick:()=>w(f=>f+1)},r("retry"))):d?Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>Z.default.createElement(Z.default.Fragment,{key:f},Z.default.createElement("dt",null,f),Z.default.createElement("dd",null,Z.default.createElement("code",null,d[f]))))),Z.default.createElement("p",{role:"status"},r("svnRemoteDisabled"))):Z.default.createElement("p",{role:"status"},r("loading"))))}function Ie(e,t,{now:i=Date.now,schedule:r=setTimeout,cancel:o=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=i()||e-i()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,l=r(()=>{s&&(s=!1,t())},e-i());return()=>{s&&(s=!1,o(l))}}function qt(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 ae=X(require("react"),1);var U=X(require("react"),1);function nt(e){return U.default.createElement(fo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function fo({sessionId:e,repositoryId:t,rpc:i,t:r,onApproved:o,onRediscover:s}){let[l,d]=(0,U.useState)(!1),[p,n]=(0,U.useState)(null),[a,u]=(0,U.useState)(!1),[w,f]=(0,U.useState)(""),[S,h]=(0,U.useState)(!1),[k,g]=(0,U.useState)(0);(0,U.useEffect)(()=>{if(!l)return;let x=new AbortController;return n(null),u(!1),f(""),h(!0),i("vcs/svn-describe",{sessionId:e,repositoryId:t},x.signal).then(y=>{x.signal.aborted||n(y)}).catch(y=>{x.signal.aborted||(f(y.message),y.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||h(!1)}),()=>x.abort()},[l,e,t,k]);let[b,m]=(0,U.useState)(0);return(0,U.useEffect)(()=>{if(!l||!p||p.expiresAt===void 0)return;let x=()=>{n(null),u(!1),m(0),h(!1),f(r("svnOfferExpired"))};try{return Ie(p.expiresAt,x)}catch{x()}},[l,p]),(0,U.useEffect)(()=>{if(!b||!l||!p)return;let x=new AbortController;return h(!0),f(""),i("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:p.offer,explicit:!0},x.signal).then(y=>{x.signal.aborted||o(y)}).catch(y=>{x.signal.aborted||(f(y.message),u(!1),y.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||h(!1)}),()=>x.abort()},[b,l,p]),U.default.createElement("section",null,U.default.createElement("button",{"aria-expanded":l,onClick:()=>{m(0),d(x=>!x)}},r("svnConsentReview")),l&&U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,r("svnConsentScope")),w&&U.default.createElement("p",{role:"alert"},w," ",U.default.createElement("button",{disabled:S,onClick:()=>{m(0),g(x=>x+1)}},r("retry"))),p&&U.default.createElement(U.default.Fragment,null,U.default.createElement("dl",null,["origin","root","uuid","scope"].map(x=>U.default.createElement(U.default.Fragment,{key:x},U.default.createElement("dt",null,x),U.default.createElement("dd",null,U.default.createElement("code",null,p[x]))))),p.remoteEnabled?U.default.createElement(U.default.Fragment,null,U.default.createElement("label",null,U.default.createElement("input",{type:"checkbox",checked:a,disabled:S,onChange:x=>u(x.target.checked)}),r("svnConsentExplicit")),U.default.createElement("button",{disabled:S||!a,onClick:()=>m(x=>x+1)},r("svnConsentApprove"))):U.default.createElement("p",{role:"status"},r("svnRemoteDisabled"))),S&&U.default.createElement("p",{role:"status"},r("loading"))))}var E=X(require("react"),1);function Gt(e,{since:t,until:i}={}){let r=l=>{if(l==null||l==="")return null;if(typeof l!="string")throw new Error("Invalid SVN history date bound.");let d=l.trim();if(!d)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(d))throw new Error("Invalid SVN history date bound.");return d.slice(0,10)},o=r(t),s=r(i);return!o&&!s?e:Array.isArray(e)?e.filter(l=>{let d=l&&typeof l.date=="string"?l.date.trim():"",p=/^\d{4}-\d{2}-\d{2}/.test(d)?d.slice(0,10):"";return!(!p||o&&p<o||s&&p>s)}):[]}function qe(e,t,i){let r=i?[...e.commits.filter(o=>!t.commits.some(s=>s.id===o.id)),...t.commits]:t.commits;return{...t,windowEnd:i+t.commits.length,commits:r.slice(-200)}}function Wt(e,t,i){let r=qe({commits:(e?.entries||[]).map(o=>({...o,id:o.revision}))},{...t,commits:t.entries.map(o=>({...o,id:o.revision}))},i);return{...t,windowEnd:r.windowEnd,entries:r.commits.map(({id:o,...s})=>s)}}var ho=9223372036854775807n;function go(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let t=BigInt(e);if(t>ho)throw new Error("SVN revision exceeds supported range");return t}function at(e){let t=go(e);return t===0n?null:String(t-1n)}function lt(e){return E.default.createElement(vo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function vo({sessionId:e,repositoryId:t,token:i,snapshot:r,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,E.useState)({cursor:r,offset:0,trail:[]}),[n,a]=(0,E.useState)(null),[u,w]=(0,E.useState)(null),[f,S]=(0,E.useState)(!0),[h,k]=(0,E.useState)(""),[g,b]=(0,E.useState)(0),[m,x]=(0,E.useState)(""),[y,C]=(0,E.useState)(""),{cursor:N,offset:v}=d;(0,E.useEffect)(()=>{let M=new AbortController;return S(!0),k(""),o("vcs/svn-log",{sessionId:e,repositoryId:t,token:i,snapshot:r,cursor:N,limit:50},M.signal).then(D=>{if(!M.signal.aborted){let le=Wt(n,D,v);a(le);let R=new Set((n?.entries||[]).filter(oe=>!le.entries.some(be=>be.revision===oe.revision)).map(oe=>oe.revision));w(oe=>R.has(oe)?null:oe)}}).catch(D=>{M.signal.aborted||(k(D.message),D.code==="vcs/rediscover-required"&&l())}).finally(()=>{M.signal.aborted||S(!1)}),()=>M.abort()},[N,v,g]);let A=()=>p(M=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...M.trail,{cursor:N,offset:v}].slice(-200)})),L=()=>{let M=d.trail.at(-1);M&&(w(null),a(null),p({...M,trail:d.trail.slice(0,-1)}))},J=n?.entries||[],ie="";try{J=Gt(J,{since:m,until:y})}catch(M){ie=M.message}return E.default.createElement("section",{className:"vcs-history vcs-history-browser vcs-svn-history","aria-label":s("history"),"aria-busy":f},E.default.createElement("div",{className:"vcs-history-list"},E.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",r),E.default.createElement("details",{className:"vcs-help"},E.default.createElement("summary",null,s("historySearchHelp")),E.default.createElement("p",null,s("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((M,D)=>E.default.createElement("label",{key:M},s(M)," ",E.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(M),value:D?y:m,onChange:le=>{w(null),D?C(le.target.value):x(le.target.value)}})))),ie&&E.default.createElement("p",{role:"alert"},ie),!!n?.entries.length&&E.default.createElement("p",{role:"status"},s("historyWindow"),": ",n.windowEnd-n.entries.length,"\u2013",n.windowEnd),E.default.createElement("ol",{className:"vcs-commit-list"},J.map(M=>E.default.createElement("li",{key:M.revision},E.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===M.revision,onClick:()=>w(M.revision)},E.default.createElement("span",{className:"vcs-commit-subject"},"r",M.revision," \xB7 ",M.message.split(/\r?\n/)[0])),E.default.createElement("div",{className:"vcs-commit-meta"},E.default.createElement("code",null,"r",M.revision)," \xB7 ",M.author," \xB7 ",E.default.createElement("time",{dateTime:M.date},M.date))))),f&&E.default.createElement("p",{role:"status"},s("loading")),h&&E.default.createElement("p",{role:"alert"},h," ",E.default.createElement("button",{onClick:()=>b(M=>M+1)},s("retry"))),!f&&!h&&!n?.entries.length&&E.default.createElement("p",null,s("historyEmpty")),!!n?.entries.length&&!J.length&&E.default.createElement("p",{role:"status"},s("historyNoMatch")),!!d.trail.length&&E.default.createElement("button",{disabled:f,onClick:L},s("historyBack")),!h&&n?.nextRevision!=null&&E.default.createElement("button",{disabled:f,onClick:A},s("historyMore"))),E.default.createElement("div",{className:"vcs-history-details"},u&&E.default.createElement(yo,{key:u,sessionId:e,repositoryId:t,token:i,snapshot:r,rpc:o,t:s,onRediscover:l,revision:u})))}function yo({sessionId:e,repositoryId:t,token:i,snapshot:r,revision:o,rpc:s,t:l,onRediscover:d}){let[p,n]=(0,E.useState)(null),[a,u]=(0,E.useState)(null),[w,f]=(0,E.useState)(""),[S,h]=(0,E.useState)(0),[k,g]=(0,E.useState)(""),[b,m]=(0,E.useState)(!1);(0,E.useEffect)(()=>{let y=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:t,token:i,snapshot:r,revision:o},y.signal).then(C=>{y.signal.aborted||n(C)}).catch(C=>{y.signal.aborted||(f(C.message),C.code==="vcs/rediscover-required"&&d())}),()=>y.abort()},[S]);let x=(p?.changes||[]).filter(y=>y.path.toLocaleLowerCase().includes(k.toLocaleLowerCase()));return E.default.createElement("section",{className:"vcs-commit-details"+(b?" vcs-commit-focused":""),"aria-label":l("commitDetails")},w?E.default.createElement("p",{role:"alert"},w," ",E.default.createElement("button",{onClick:()=>h(y=>y+1)},l("retry"))):p?E.default.createElement("div",{className:"vcs-commit-sidebar"},E.default.createElement("header",{className:"vcs-commit-summary"},E.default.createElement("h3",null,p.message?.split(/\r?\n/)[0]||"r"+o),E.default.createElement("code",{className:"vcs-commit-oid"},"r",o),E.default.createElement("p",null,p.author," \xB7 ",p.date),E.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},p.message),E.default.createElement("p",null,at(o)===null?l("commitRoot"):"r"+at(o)," \u2192 r",o)),E.default.createElement("aside",{className:"vcs-commit-picker"},E.default.createElement("label",null,l("commitFileSearch")," ",E.default.createElement("input",{"aria-label":l("commitFileSearch"),value:k,onChange:y=>{g(y.target.value),u(null)}})),E.default.createElement("span",null,x.length," / ",p.changes.length),E.default.createElement("ul",{className:"vcs-commit-files"},x.map(y=>E.default.createElement("li",{key:y.id},E.default.createElement("button",{disabled:y.kind!=="file","aria-pressed":a?.id===y.id&&a.mode==="compare",onClick:()=>u({id:y.id,mode:"compare"})},E.default.createElement("span",{className:"vcs-file-status"},y.action," \xB7 "),E.default.createElement("span",{className:"vcs-file-path",title:y.path},y.path,y.copyFromPath&&E.default.createElement("small",null,"\u2190 ",y.copyFromPath," @r",y.copyFromRevision))),y.kind==="file"&&E.default.createElement("div",{className:"vcs-svn-file-actions"},E.default.createElement("button",{onClick:()=>u({id:y.id,mode:"trace"})},l("fileHistory")),y.copyFromPath&&y.copyFromRevision&&!y.copySourceOutsideScope&&E.default.createElement("button",{onClick:()=>u({id:y.id,mode:"copytrace"})},l("svnCopyHistory")," \xB7 ",y.copyFromPath," @r",y.copyFromRevision),y.copySourceOutsideScope&&E.default.createElement("span",null,l("svnCopyOutside")))))),!!p.changes.length&&!x.length&&E.default.createElement("p",{role:"status"},l("emptySearch")),!p.changes.length&&E.default.createElement("p",null,l("commitNoChanges")))):E.default.createElement("p",{role:"status"},l("loading")),E.default.createElement("div",{className:"vcs-commit-review"},E.default.createElement("div",{className:"vcs-commit-comparison","aria-label":l("comparisonContext")},a&&E.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":b,onClick:()=>m(y=>!y)},l(b?"comparisonRestore":"comparisonFocus")),a?E.default.createElement(bo,{key:JSON.stringify(a),sessionId:e,repositoryId:t,token:i,snapshot:r,revision:o,rpc:s,t:l,onRediscover:d,...a}):E.default.createElement("p",{role:"status"},l("pick")))))}function bo({sessionId:e,repositoryId:t,token:i,snapshot:r,revision:o,rpc:s,t:l,onRediscover:d,id:p,mode:n}){let[a,u]=(0,E.useState)(null),[w,f]=(0,E.useState)({cursor:null,trail:[]}),[S,h]=(0,E.useState)(""),[k,g]=(0,E.useState)(0),{cursor:b,trail:m}=w;return(0,E.useEffect)(()=>{let x=new AbortController;return u(null),h(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:t,token:i,snapshot:r,revision:o,id:p,...b===null?{}:{cursor:b}},x.signal).then(y=>{x.signal.aborted||u(y)}).catch(y=>{x.signal.aborted||(h(y.message),y.code==="vcs/rediscover-required"&&d())}),()=>x.abort()},[b,k]),S?E.default.createElement("p",{role:"alert"},S," ",E.default.createElement("button",{onClick:()=>g(x=>x+1)},l("retry"))):a?n==="compare"?E.default.createElement("section",{className:"vcs-history-comparison"},E.default.createElement("header",{className:"vcs-comparison-heading"},E.default.createElement("h4",null,a.path),E.default.createElement("p",null,a.left?.label," \u2194 ",a.right?.label),a.notice&&E.default.createElement("p",{role:"status"},a.notice)),a.binary?E.default.createElement("p",null,l("binary")):E.default.createElement(fe,{comparison:a,identity:JSON.stringify([e,t,r,o,p]),t:l})):E.default.createElement("section",null,E.default.createElement("p",null,l(n==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",a.path," \xB7 peg r",a.pegRevision),E.default.createElement("ol",null,a.entries.map(x=>E.default.createElement("li",{key:x.revision},"r",x.revision," \xB7 ",x.message))),!!m.length&&E.default.createElement("button",{onClick:()=>f({cursor:m.at(-1),trail:m.slice(0,-1)})},l("historyBack")),a.nextRevision!==null&&E.default.createElement("button",{onClick:()=>f({cursor:a.nextRevision,trail:[...m,b].slice(-200)})},l("historyMore"))):E.default.createElement("p",{role:"status"},l("loading"))}function ct(e){return ae.default.createElement(xo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function xo({sessionId:e,repositoryId:t,rpc:i,t:r,onRediscover:o}){let[s,l]=(0,ae.useState)(null),[d,p]=(0,ae.useState)(!1),[n,a]=(0,ae.useState)(""),[u,w]=(0,ae.useState)(0);(0,ae.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>i("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token})).catch(()=>{})}},[s,e,t]),(0,ae.useEffect)(()=>{if(s)try{return Ie(s.expiresAt,()=>{l(null),w(0),p(!1),a(r("svnExpired"))})}catch{l(null),a(r("svnExpired"))}},[s]),(0,ae.useEffect)(()=>{if(!u||!s)return;let h=new AbortController;return p(!0),a(""),i("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token},h.signal).then(()=>{h.signal.aborted||l(null)}).catch(k=>{h.signal.aborted||(a(k.message),k.code==="vcs/rediscover-required"&&o())}).finally(()=>{h.signal.aborted||p(!1)}),()=>h.abort()},[u,s]);let f=h=>{try{qt(h),a(""),w(0),l(h)}catch(k){a(k.message)}},S=async(...h)=>{try{return await i(...h)}catch(k){throw k.code==="vcs/svn-consent-required"&&!h[2]?.aborted&&(l(null),w(0),a(r("svnExpired"))),k}};return ae.default.createElement("section",{className:"vcs-svn-remote"},!s&&n&&ae.default.createElement("p",{role:"status"},n),s?ae.default.createElement(ae.default.Fragment,null,ae.default.createElement("p",null,r("svnGrantScope")),ae.default.createElement("button",{disabled:d,onClick:()=>w(h=>h+1)},r("svnRevoke")),n&&ae.default.createElement("p",{role:"alert"},n),!d&&ae.default.createElement(lt,{sessionId:e,repositoryId:t,t:r,onRediscover:o,rpc:S,token:s.token,snapshot:s.snapshot})):ae.default.createElement(nt,{sessionId:e,repositoryId:t,rpc:i,t:r,onRediscover:o,onApproved:f}))}var H=X(require("react"),1);function Jt(e){let t=new Map;for(let i of e){let r=t.get(i.commit);r||(r={names:[],hidden:0},t.set(i.commit,r)),r.names.length<3?r.names.push(i.name):r.hidden++}return t}var F=X(require("react"),1);var j=X(require("react"),1);var Q=X(require("react"),1);var $=X(require("react"),1);function dt(e){return $.default.createElement(wo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function wo({sessionId:e,repositoryId:t,commit:i,path:r,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,$.useState)(!1),[n,a]=(0,$.useState)([0]),[u,w]=(0,$.useState)(null),[f,S]=(0,$.useState)(""),[h,k]=(0,$.useState)(0),g=n.at(-1);(0,$.useEffect)(()=>{if(!d)return;let m=new AbortController;return w(null),S(""),o("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:i,path:r,offset:g},m.signal).then(x=>{m.signal.aborted||w(x)}).catch(x=>{m.signal.aborted||(S(x.message),x.code==="vcs/rediscover-required"&&l())}),()=>m.abort()},[d,g,e,t,i,r,h]);let b=(0,$.useMemo)(()=>u?{path:r,left:{label:i,text:u.text},right:{label:i,text:u.text}}:null,[u,r,i]);return $.default.createElement("section",null,$.default.createElement("button",{"aria-expanded":d,onClick:()=>p(m=>!m)},s("segments")),d&&$.default.createElement($.default.Fragment,null,$.default.createElement("p",null,s("segmentScope")),f?$.default.createElement("p",{role:"alert"},f," ",$.default.createElement("button",{onClick:()=>k(m=>m+1)},s("retry"))):u?$.default.createElement($.default.Fragment,null,$.default.createElement("p",null,s("segmentBytes"),": ",u.offset,"\u2013",u.endOffset," / ",u.totalBytes," \xB7 ",$.default.createElement("code",null,u.oid)),$.default.createElement("button",{disabled:n.length===1,onClick:()=>a(m=>m.slice(0,-1))},s("previous")),$.default.createElement("button",{disabled:u.nextOffset===null,onClick:()=>a(m=>[...m,u.nextOffset])},s("next")),$.default.createElement(fe,{single:!0,comparison:b,identity:JSON.stringify([e,t,i,r,g]),t:s})):$.default.createElement("p",{role:"status"},s("loading"))))}var O=X(require("react"),1);function So({sessionId:e,repositoryId:t,commit:i,path:r,follow:o,since:s,until:l,rpc:d,t:p,onRediscover:n,onSelectCommit:a}){let[u,w]=(0,O.useState)({commits:[],nextOffset:null}),[f,S]=(0,O.useState)(0),[h,k]=(0,O.useState)(0),[g,b]=(0,O.useState)(!0),[m,x]=(0,O.useState)("");(0,O.useEffect)(()=>{let C=new AbortController;return b(!0),x(""),d("vcs/tree-history",{sessionId:e,repositoryId:t,commit:i,path:r,offset:f,limit:50,follow:o,...s?{since:s}:{},...l?{until:l}:{}},C.signal).then(N=>{C.signal.aborted||w(v=>({...N,commits:f?[...v.commits,...N.commits]:N.commits}))}).catch(N=>{C.signal.aborted||(x(N.message),N.code==="vcs/rediscover-required"&&n())}).finally(()=>{C.signal.aborted||b(!1)}),()=>C.abort()},[e,t,i,r,f,h,o,s,l]);let y=C=>p(C.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":C.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":C.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return O.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":g},O.default.createElement("p",null,p("pathHistoryScope")),O.default.createElement("p",{style:{overflowWrap:"anywhere"}},O.default.createElement("code",null,u.path||r)," \xB7 ",O.default.createElement("code",null,i),u.followsRenames!==void 0&&O.default.createElement(O.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),O.default.createElement("ol",null,u.commits.map(C=>O.default.createElement("li",{key:C.id},O.default.createElement("code",{title:C.id},C.id.slice(0,10))," \xB7 ",a?O.default.createElement("button",{onClick:()=>a(C.id,C.path||r)},C.subject):C.subject,O.default.createElement("div",null,C.boundary&&O.default.createElement("span",null,y(C)," "),C.path&&O.default.createElement("code",null,C.oldPath?C.oldPath+" \u2192 ":"",C.path)," ",C.similarity!==void 0&&O.default.createElement("span",null,p("fileHistorySimilarity"),": ",C.similarity,"% \xB7 "),C.author," \xB7 ",O.default.createElement("time",{dateTime:C.date},C.date))))),g&&O.default.createElement("p",{role:"status"},p("loading")),m&&O.default.createElement("p",{role:"alert"},m," ",O.default.createElement("button",{onClick:()=>k(C=>C+1)},p("retry"))),!g&&!m&&!u.commits.length&&O.default.createElement("p",null,p("historyEmpty")),u.truncated&&O.default.createElement("p",{role:"status"},p("historyLimit")),!m&&u.nextOffset!==null&&O.default.createElement("button",{disabled:g,onClick:()=>S(u.nextOffset)},p("historyMore")))}function pt(e){let[t,i]=(0,O.useState)(!1),[r,o]=(0,O.useState)(!1),[s,l]=(0,O.useState)(""),[d,p]=(0,O.useState)("");return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":t,onClick:()=>i(n=>!n)},e.t("pathHistory")),t&&O.default.createElement(O.default.Fragment,null,O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:r,onChange:n=>o(n.target.checked)}),e.t("fileHistoryFollow")),O.default.createElement("p",null,e.t("pathHistoryFollowScope")),O.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,a)=>O.default.createElement("label",{key:n},e.t(n)," ",O.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:a?d:s,onChange:u=>a?p(u.target.value):l(u.target.value)}))),O.default.createElement(So,{key:JSON.stringify([r,s.trim(),d.trim()]),follow:r,since:s.trim()||null,until:d.trim()||null,...e})))}function He({sessionId:e,repositoryId:t,commit:i,path:r,rpc:o,t:s,onRediscover:l,onClose:d,onSelectCommit:p,line:n=null}){let[a,u]=(0,Q.useState)(null),[w,f]=(0,Q.useState)(""),[S,h]=(0,Q.useState)(0);(0,Q.useEffect)(()=>{let g=new AbortController;return u(null),f(""),o("vcs/tree-file",{sessionId:e,repositoryId:t,commit:i,path:r},g.signal).then(b=>{g.signal.aborted||u(b)}).catch(b=>{g.signal.aborted||(f(b.message),b.code==="vcs/rediscover-required"&&l())}),()=>g.abort()},[e,t,i,r,S]);let k=(0,Q.useMemo)(()=>a?{path:r,left:{label:i,text:a.text||""},right:{label:i,text:a.text||""}}:null,[a,r,i]);return Q.default.createElement("section",{"aria-label":s("treePreview")},Q.default.createElement("h4",null,r),Q.default.createElement("button",{onClick:d},s("treeClose")),Q.default.createElement("p",null,Q.default.createElement("code",null,i)),w?Q.default.createElement("p",{role:"alert"},w," ",Q.default.createElement("button",{onClick:()=>h(g=>g+1)},s("retry"))):a?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,Q.default.createElement("code",null,a.oid)," \xB7 ",s("encoding"),": ",a.encoding||"\u2014"),n&&Q.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,!a.text||n>a.text.split(`
180
- `).length?" \xB7 "+s("blameUnmapped"):""),a.notice&&Q.default.createElement("p",{role:"status"},a.notice),a.binary?Q.default.createElement("p",null,s("binary")):a.text===""?Q.default.createElement("p",null,s("treeEmpty")):Q.default.createElement(fe,{single:!0,line:n,comparison:k,identity:JSON.stringify([e,t,i,r]),t:s})):Q.default.createElement("p",{role:"status"},s("loading")),Q.default.createElement(dt,{sessionId:e,repositoryId:t,commit:i,path:r,rpc:o,t:s,onRediscover:l}),Q.default.createElement(pt,{key:JSON.stringify([e,t,i,r]),sessionId:e,repositoryId:t,commit:i,path:r,rpc:o,t:s,onRediscover:l,onSelectCommit:p}))}function zt(e=""){let t=[{path:"",name:"/"}];if(e){let i="";for(let r of e.split("/"))i=i?i+"/"+r:r,t.push({path:i,name:r})}return t}function _t(e,t="",i=""){let r=t?t+"/":"",o=i.toLowerCase();return e.filter(s=>{let l=s.path.slice(r.length);return s.path.startsWith(r)&&l.length>0&&!l.includes("/")&&l.toLowerCase().includes(o)}).sort((s,l)=>+(l.type==="tree")-+(s.type==="tree")||(s.path<l.path?-1:s.path>l.path?1:0))}function ko({sessionId:e,repositoryId:t,commit:i,rpc:r,t:o,onRediscover:s,onSelectCommit:l}){let[d,p]=(0,j.useState)(null),[n,a]=(0,j.useState)(""),[u,w]=(0,j.useState)(0),[f,S]=(0,j.useState)(""),[h,k]=(0,j.useState)(0),[g,b]=(0,j.useState)(""),[m,x]=(0,j.useState)(null);if((0,j.useEffect)(()=>{let v=new AbortController;return p(null),a(""),r("vcs/tree",{sessionId:e,repositoryId:t,commit:i},v.signal).then(A=>{v.signal.aborted||p(A)}).catch(A=>{v.signal.aborted||(a(A.message),A.code==="vcs/rediscover-required"&&s())}),()=>v.abort()},[e,t,i,u]),n)return j.default.createElement("p",{role:"alert"},n," ",j.default.createElement("button",{onClick:()=>w(v=>v+1)},o("retry")));if(!d)return j.default.createElement("p",{role:"status"},o("loading"));let y=f?f+"/":"",C=_t(d.entries,f,g),N=v=>{S(v),k(0),b(""),x(null)};return j.default.createElement("section",{"aria-label":o("historicalTree")},j.default.createElement("p",null,o("historicalTreeScope")),j.default.createElement("code",null,i),j.default.createElement("p",null,f||"/"," ",f&&j.default.createElement("button",{onClick:()=>N(f.includes("/")?f.slice(0,f.lastIndexOf("/")):"")},o("treeUp"))),j.default.createElement("nav",{"aria-label":o("treeBreadcrumbs")},zt(f).map(v=>j.default.createElement(j.default.Fragment,{key:v.path},v.path&&" / ",v.path===f?j.default.createElement("span",{"aria-current":"location"},v.name):j.default.createElement("button",{onClick:()=>N(v.path)},v.name)))),j.default.createElement("label",null,o("treeSearch")," ",j.default.createElement("input",{"aria-label":o("treeSearch"),value:g,onChange:v=>{b(v.target.value),k(0),x(null)}})),j.default.createElement("p",null,C.length," ",o("treeEntries")),!C.length&&g&&j.default.createElement("p",{role:"status"},o("emptySearch")),j.default.createElement("ul",null,C.slice(h*100,h*100+100).map(v=>j.default.createElement("li",{key:v.path},v.type==="tree"?j.default.createElement("button",{onClick:()=>N(v.path)},v.path.slice(y.length),"/"):v.type==="blob"&&["100644","100755"].includes(v.mode)?j.default.createElement("button",{"aria-pressed":m===v.path,onClick:()=>x(v.path)},v.path.slice(y.length)):j.default.createElement("span",null,v.path.slice(y.length))," \xB7 ",j.default.createElement("code",null,v.mode," ",v.type," ",j.default.createElement("span",{title:v.oid},v.oid.slice(0,10)))))),h>0&&j.default.createElement("button",{onClick:()=>{k(v=>v-1),x(null)}},o("treePrevious")),(h+1)*100<C.length&&j.default.createElement("button",{onClick:()=>{k(v=>v+1),x(null)}},o("treeNext")),m&&j.default.createElement(He,{key:JSON.stringify([e,t,i,m]),sessionId:e,repositoryId:t,commit:i,rpc:r,t:o,onRediscover:s,onSelectCommit:l,path:m,onClose:()=>x(null)}))}function ut(e){return j.default.createElement(Co,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Co(e){let[t,i]=(0,j.useState)(!1);return j.default.createElement("div",null,j.default.createElement("button",{"aria-expanded":t,onClick:()=>i(r=>!r)},e.t("historicalTree")),t&&j.default.createElement(ko,{...e}))}var K=X(require("react"),1);var T=X(require("react"),1);function No({sessionId:e,repositoryId:t,commit:i,parentIndex:r,id:o,follow:s,since:l,until:d,rpc:p,t:n,onRediscover:a,onSelectCommit:u}){let[w,f]=(0,T.useState)({commits:[],nextOffset:null}),[S,h]=(0,T.useState)(0),[k,g]=(0,T.useState)(0),[b,m]=(0,T.useState)(!0),[x,y]=(0,T.useState)(""),C={...l?{since:l}:{},...d?{until:d}:{}};return(0,T.useEffect)(()=>{let N=new AbortController;return m(!0),y(""),p("vcs/file-history",{sessionId:e,repositoryId:t,commit:i,parentIndex:r,id:o,offset:S,limit:50,follow:s,...C},N.signal).then(v=>{N.signal.aborted||f(A=>({...v,commits:S?[...A.commits,...v.commits]:v.commits}))}).catch(v=>{N.signal.aborted||(y(v.message),v.code==="vcs/rediscover-required"&&a())}).finally(()=>{N.signal.aborted||m(!1)}),()=>N.abort()},[e,t,i,r,o,S,k,s,l,d]),T.default.createElement("section",{"aria-label":n("fileHistory"),"aria-busy":b},T.default.createElement("p",null,n("fileHistoryScope")),T.default.createElement("p",{style:{overflowWrap:"anywhere"}},w.path," \xB7 ",T.default.createElement("code",null,i)),T.default.createElement("ol",null,w.commits.map(N=>T.default.createElement("li",{key:N.id},T.default.createElement("code",{title:N.id},N.id.slice(0,10))," \xB7 ",u?T.default.createElement("button",{onClick:()=>u(N.id,N.path||w.path)},N.subject):N.subject,T.default.createElement("div",null,N.boundary&&T.default.createElement("span",null,n(N.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":N.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":N.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),N.path&&T.default.createElement("code",null,N.oldPath?N.oldPath+" \u2192 ":"",N.path)," ",N.similarity!==void 0&&T.default.createElement("span",null,n("fileHistorySimilarity"),": ",N.similarity,"% \xB7 "),N.author," \xB7 ",T.default.createElement("time",{dateTime:N.date},N.date))))),b&&T.default.createElement("p",{role:"status"},n("loading")),x&&T.default.createElement("p",{role:"alert"},x," ",T.default.createElement("button",{onClick:()=>g(N=>N+1)},n("retry"))),!b&&!x&&!w.commits.length&&T.default.createElement("p",null,n("historyEmpty")),w.truncated&&T.default.createElement("p",{role:"status"},n("historyLimit")),!x&&w.nextOffset!==null&&T.default.createElement("button",{disabled:b,onClick:()=>h(w.nextOffset)},n("historyMore")))}function mt(e){return T.default.createElement(Eo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Eo(e){let[t,i]=(0,T.useState)(!1),[r,o]=(0,T.useState)(!1),[s,l]=(0,T.useState)(""),[d,p]=(0,T.useState)("");return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":t,onClick:()=>i(n=>!n)},e.t("fileHistory")),t&&T.default.createElement(T.default.Fragment,null,T.default.createElement("label",null,T.default.createElement("input",{type:"checkbox",checked:r,onChange:n=>o(n.target.checked)}),e.t("fileHistoryFollow")),T.default.createElement("p",null,e.t("fileHistoryFollowScope")),T.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,a)=>T.default.createElement("label",{key:n},e.t(n)," ",T.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:a?d:s,onChange:u=>a?p(u.target.value):l(u.target.value)}))),T.default.createElement(No,{key:JSON.stringify([r,s.trim(),d.trim()]),follow:r,since:s.trim()||null,until:d.trim()||null,...e})))}var V=X(require("react"),1);function Ho({sessionId:e,repositoryId:t,commit:i,parentIndex:r,id:o,rpc:s,t:l,onRediscover:d,onSelectCommit:p}){let[n,a]=(0,V.useState)(null),[u,w]=(0,V.useState)(""),[f,S]=(0,V.useState)(0),[h,k]=(0,V.useState)(1),[g,b]=(0,V.useState)(null);return(0,V.useEffect)(()=>{let m=new AbortController;return a(null),w(""),b(null),s("vcs/blame",{sessionId:e,repositoryId:t,commit:i,parentIndex:r,id:o,startLine:h,lineLimit:500},m.signal).then(x=>{m.signal.aborted||a(x)}).catch(x=>{m.signal.aborted||(w(x.message),x.code==="vcs/rediscover-required"&&d())}),()=>m.abort()},[e,t,i,r,o,f,h]),u?V.default.createElement("p",{role:"alert"},u," ",V.default.createElement("button",{onClick:()=>S(m=>m+1)},l("retry"))):n?V.default.createElement("section",{"aria-label":l("blame")},V.default.createElement("p",null,l("blameScope")),p&&V.default.createElement("p",null,l("blameNavigation")),n.notice&&V.default.createElement("p",{role:"status"},n.notice),n.truncated&&V.default.createElement("p",{role:"status"},l("blameLimit")),!n.notice&&!n.lines.length&&V.default.createElement("p",null,l("blameEmpty")),!!n.lines.length&&V.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},V.default.createElement("table",null,V.default.createElement("thead",null,V.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(m=>V.default.createElement("th",{key:m,scope:"col"},l(m))))),V.default.createElement("tbody",null,n.lines.map(m=>V.default.createElement("tr",{key:m.line},V.default.createElement("th",{scope:"row"},m.line),V.default.createElement("td",null,p?V.default.createElement("button",{title:m.commit,onClick:()=>p(m.commit,m.path||null)},V.default.createElement("code",null,m.commit.slice(0,10))):V.default.createElement("code",{title:m.commit},m.commit.slice(0,10))),V.default.createElement("td",null,m.author),V.default.createElement("td",null,m.summary),V.default.createElement("td",null,V.default.createElement("pre",{style:{margin:0}},m.text),m.path&&m.originalLine?V.default.createElement("button",{onClick:()=>b(m)},l("blameOriginLine"),": ",m.path,":",m.originalLine):V.default.createElement("span",null,l("blameUnmapped")))))))),V.default.createElement("p",null,n.startLine||h,"\u2013",n.lines.at(-1)?.line||h," / ",n.totalLines??"\u2014"),V.default.createElement("button",{disabled:h===1,onClick:()=>k(Math.max(1,h-500))},l("blamePrevious")),V.default.createElement("button",{disabled:n.nextLine==null,onClick:()=>k(n.nextLine)},l("blameNext")),g&&V.default.createElement(He,{key:JSON.stringify([g.commit,g.path,g.originalLine]),sessionId:e,repositoryId:t,rpc:s,t:l,onRediscover:d,onSelectCommit:p,commit:g.commit,path:g.path,line:g.originalLine,onClose:()=>b(null)})):V.default.createElement("p",{role:"status"},l("loading"))}function ft(e){let[t,i]=(0,V.useState)(!1);return V.default.createElement("div",null,V.default.createElement("button",{"aria-expanded":t,onClick:()=>i(r=>!r)},e.t("blame")),t&&V.default.createElement(Ho,{...e}))}function Ae(e){return K.default.createElement(Ao,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function Ao({sessionId:e,repositoryId:t,commit:i,parentIndex:r,base:o,target:s,id:l,rpc:d,t:p,onRediscover:n,onSelectCommit:a}){let[u,w]=(0,K.useState)(null),[f,S]=(0,K.useState)(""),[h,k]=(0,K.useState)(0),[g,b]=(0,K.useState)(!1);return(0,K.useEffect)(()=>{let m=new AbortController;return w(null),S(""),d(o?"vcs/revision-compare":"vcs/commit-compare",o?{sessionId:e,repositoryId:t,base:o,target:s,id:l,...g?{large:!0}:{}}:{sessionId:e,repositoryId:t,commit:i,parentIndex:r,id:l,...g?{large:!0}:{}},m.signal).then(x=>{m.signal.aborted||w(x)}).catch(x=>{m.signal.aborted||(S(x.message),x.code==="vcs/rediscover-required"&&n())}),()=>m.abort()},[e,t,i,r,o,s,l,h,g]),f?K.default.createElement("p",{role:"alert"},f," ",K.default.createElement("button",{onClick:()=>k(m=>m+1)},p("retry")),g&&K.default.createElement("button",{onClick:()=>b(!1)},p("largeClose"))):u?K.default.createElement("section",{className:"vcs-history-comparison"},K.default.createElement("header",{className:"vcs-comparison-heading"},K.default.createElement("h4",null,u.path),K.default.createElement("p",null,u.left.label," \u2194 ",u.right.label),u.notice&&K.default.createElement("p",{role:"status"},u.notice),g?K.default.createElement("p",null,p("largeScope")," ",K.default.createElement("button",{onClick:()=>b(!1)},p("largeClose"))):u.notice?.includes("2 MiB")&&K.default.createElement("p",null,p("largeScope")," ",K.default.createElement("button",{onClick:()=>b(!0)},p("largeLoad")))),u.binary?K.default.createElement("p",null,p("binary")):K.default.createElement(fe,{comparison:u,identity:JSON.stringify(o?[e,t,o,s,l]:[e,t,i,r,l]),t:p}),K.default.createElement("div",{className:"vcs-comparison-extras"},i&&!o&&K.default.createElement(mt,{onSelectCommit:a,key:"file-history:"+JSON.stringify([e,t,i,r,l]),sessionId:e,repositoryId:t,commit:i,parentIndex:r,id:l,rpc:d,t:p,onRediscover:n}),i&&!o&&K.default.createElement(ft,{onSelectCommit:a,key:"blame:"+JSON.stringify([e,t,i,r,l]),sessionId:e,repositoryId:t,commit:i,parentIndex:r,id:l,rpc:d,t:p,onRediscover:n}),(i||o)&&K.default.createElement(Ee,{key:"image:"+JSON.stringify([e,t,i,r,o,s,l]),sessionId:e,repositoryId:t,commit:i,parentIndex:r,base:o,target:s,id:l,rpc:d,t:p,onRediscover:n}))):K.default.createElement("p",{role:"status"},p("loading"),g&&K.default.createElement("button",{onClick:()=>b(!1)},p("largeClose")))}function Kt(e,t){if(typeof t!="string"||!t)return null;let i=e.filter(r=>r.path===t);return i.length===1&&typeof i[0].id=="string"&&i[0].id?i[0].id:null}function Yt(e,t=""){let i=t.trim().toLowerCase();return i?e.filter(r=>[r.id,r.author,r.subject].some(o=>o?.toLowerCase().includes(i))):e}function Ge(e,t=""){let i=t.trim().toLowerCase();return i?e.filter(r=>[r.path,r.oldPath].some(o=>o?.toLowerCase().includes(i))):e}function Pe(e){return F.default.createElement(Po,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Po({sessionId:e,repositoryId:t,commit:i,rpc:r,t:o,onRediscover:s,onSelectCommit:l,initialPath:d}){let p=(0,F.useRef)(!0),[n,a]=(0,F.useState)(null),[u,w]=(0,F.useState)(""),[f,S]=(0,F.useState)(!1),[h,k]=(0,F.useState)(0),[g,b]=(0,F.useState)(null),[m,x]=(0,F.useState)(""),[y,C]=(0,F.useState)(0);if((0,F.useEffect)(()=>{let v=new AbortController;return b(null),x(""),r("vcs/commit",{sessionId:e,repositoryId:t,commit:i,parentIndex:h},v.signal).then(A=>{v.signal.aborted||(b(A),p.current&&(p.current=!1,a(Kt(A.changes,d))))}).catch(A=>{v.signal.aborted||(x(A.message),A.code==="vcs/rediscover-required"&&s())}),()=>v.abort()},[e,t,i,h,y]),m)return F.default.createElement("p",{role:"alert"},m," ",F.default.createElement("button",{onClick:()=>C(v=>v+1)},o("retry")));if(!g)return F.default.createElement("p",{role:"status"},o("loading"));let N=Ge(g.changes,u);return F.default.createElement("section",{className:"vcs-commit-details"+(f?" vcs-commit-focused":""),"aria-label":o("commitDetails")},F.default.createElement("div",{className:"vcs-commit-sidebar"},F.default.createElement("header",{className:"vcs-commit-summary"},F.default.createElement("h3",null,g.subject),F.default.createElement("code",{className:"vcs-commit-oid"},g.id),F.default.createElement("p",null,g.author," \xB7 ",g.date),g.committer&&g.committer!==g.author&&F.default.createElement("p",null,o("commitCommitter")," ",g.committer,g.committerDate?` \xB7 ${g.committerDate}`:""),g.signature?.signed===!0&&F.default.createElement("p",null,F.default.createElement("span",{title:o("commitSignatureUnverified")},o("commitSigned",{format:g.signature.format}))),g.messageTruncated&&F.default.createElement("p",{role:"status"},o("commitMessageLimit")),g.message&&F.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},g.message),g.parents.length>1&&F.default.createElement("label",null,o("commitParent")," ",F.default.createElement("select",{"aria-label":o("commitParent"),value:h,onChange:v=>{a(null),b(null),k(Number(v.target.value))}},g.parents.map((v,A)=>F.default.createElement("option",{key:v,value:A},A+1,": ",v.slice(0,10))))),F.default.createElement("p",null,g.parent||o("commitRoot")," \u2192 ",g.id.slice(0,10))),F.default.createElement("aside",{className:"vcs-commit-picker"},F.default.createElement("label",null,o("commitFileSearch")," ",F.default.createElement("input",{"aria-label":o("commitFileSearch"),value:u,onChange:v=>{w(v.target.value),a(null)}})),F.default.createElement("span",null," ",N.length," / ",g.changes.length),F.default.createElement("ul",{className:"vcs-commit-files"},N.map(v=>F.default.createElement("li",{key:v.id},F.default.createElement("button",{"aria-pressed":n===v.id,onClick:()=>a(v.id)},F.default.createElement("span",{className:"vcs-file-status"},v.status," \xB7 "),F.default.createElement("span",{className:"vcs-file-path",title:v.oldPath?v.oldPath+" \u2192 "+v.path:v.path},v.path,v.oldPath&&F.default.createElement("small",null,"\u2190 ",v.oldPath)))))),!!g.changes.length&&!N.length&&F.default.createElement("p",{role:"status"},o("emptySearch")),!g.changes.length&&F.default.createElement("p",null,o("commitNoChanges")),F.default.createElement(ut,{key:JSON.stringify([e,t,i]),sessionId:e,repositoryId:t,commit:i,rpc:r,t:o,onRediscover:s,onSelectCommit:l}))),F.default.createElement("div",{className:"vcs-commit-review"},F.default.createElement("div",{className:"vcs-commit-comparison","aria-label":o("comparisonContext")},n&&F.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":f,onClick:()=>S(v=>!v)},o(f?"comparisonRestore":"comparisonFocus")),n?F.default.createElement(Ae,{key:n,sessionId:e,repositoryId:t,commit:i,parentIndex:h,id:n,onSelectCommit:l,rpc:r,t:o,onRediscover:s}):F.default.createElement("p",{role:"status"},o("pick")))))}var ee=X(require("react"),1);function Qt(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let t=e.slice(0,200),i=new Map,r=[],o=[],s=d=>typeof d=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(d);for(let[d,p]of t.entries()){if(!p||!s(p.id)||!Array.isArray(p.parents)||i.has(p.id))throw new Error("Invalid graph node");i.set(p.id,d),r.push({id:p.id,row:d})}let l=!1;for(let d of t){let p=new Set;for(let n of d.parents){if(o.length===1e3){l=!0;break}if(!s(n)||n.length!==d.id.length||n===d.id||p.has(n))throw new Error("Invalid graph parent");p.add(n);let a=i.get(n);if(a!==void 0&&a<=i.get(d.id))throw new Error("Graph requires child-before-parent order");o.push({from:d.id,to:n,missing:a===void 0})}if(l)break}return{nodes:r,edges:o,nodesTruncated:e.length>200,edgesTruncated:l}}function $t(e){let t=Array(32).fill(null),i=new Map,r=[],o=new Set,s=!1,l=n=>{if(o.has(n))return null;let a=t.indexOf(n);return a>=0?a:(a=t.indexOf(null),a<0?(s=!0,o.add(n),null):(t[a]=n,a))},d=new Map;for(let n of e.edges){if(n.missing)continue;let a=d.get(n.from)||[];a.push(n.to),d.set(n.from,a)}for(let n of e.nodes){let a=l(n.id);if(i.set(n.id,{...n,lane:a}),r.push({...n,lane:a}),a===null)continue;t[a]=null;let u=d.get(n.id)||[];for(let[w,f]of u.entries())t.includes(f)||(w===0&&t[a]===null?t[a]=f:l(f))}let p=e.edges.filter(n=>!n.missing).flatMap(n=>{let a=i.get(n.from),u=i.get(n.to);return a.lane===null||u.lane===null?[]:[{...n,start:a.row,end:u.row,fromLane:a.lane,toLane:u.lane}]});return{nodes:r,edges:p,lanesTruncated:s,laneCount:Math.max(1,...r.map(n=>(n.lane??0)+1))}}function Lo({commits:e,selected:t,onSelect:i,t:r}){let o;try{o=Qt(e)}catch{return ee.default.createElement("p",{role:"alert"},r("graphInvalid"))}let s=$t(o),l=s.edges,d=Math.max(100,24+18*s.laneCount),p=Math.max(40,o.nodes.length*36);return ee.default.createElement("section",{"aria-label":r("historyGraph")},ee.default.createElement("p",null,r("graphScope")),s.lanesTruncated&&ee.default.createElement("p",{role:"status"},r("graphLaneLimit")),(o.nodesTruncated||o.edgesTruncated)&&ee.default.createElement("p",{role:"status"},r("graphLimit")),ee.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},ee.default.createElement("svg",{width:d,height:p,"aria-hidden":"true",style:{flexShrink:0}},l.map(n=>{let a=n.start*36+18,u=n.end*36+18,w=12+n.fromLane*18,f=12+n.toLane*18;return ee.default.createElement("path",{key:n.from+n.to,d:"M "+w+" "+a+" C "+w+" "+(a+18)+", "+f+" "+(u-18)+", "+f+" "+u,fill:"none",stroke:"currentColor",opacity:"0.45"})}),s.nodes.filter(n=>n.lane!==null).map(n=>ee.default.createElement("circle",{key:n.id,cx:12+n.lane*18,cy:n.row*36+18,r:"4",fill:"currentColor"}))),ee.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},o.nodes.map(n=>ee.default.createElement("li",{key:n.id,style:{height:36,whiteSpace:"nowrap"}},ee.default.createElement("button",{title:n.id,"aria-current":t===n.id?!0:void 0,style:t===n.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:a=>{if(a.altKey||a.ctrlKey||a.metaKey||a.shiftKey)return;let u=a.key==="ArrowDown"?Math.min(n.row+1,o.nodes.length-1):a.key==="ArrowUp"?Math.max(0,n.row-1):a.key==="Home"?0:a.key==="End"?o.nodes.length-1:null;u!==null&&(a.preventDefault(),a.stopPropagation(),a.currentTarget.closest("ol").querySelectorAll("button")[u]?.focus())},onClick:()=>i(n.id)},ee.default.createElement("code",null,n.id.slice(0,10))," ",e[n.row].subject))))),ee.default.createElement("details",null,ee.default.createElement("summary",null,r("graphRelations")),ee.default.createElement("ul",null,o.edges.map(n=>ee.default.createElement("li",{key:n.from+n.to},ee.default.createElement("code",null,n.from)," \u2192 ",ee.default.createElement("code",null,n.to),n.missing?" \xB7 "+r("graphMissing"):"")))))}function ht(e){let[t,i]=(0,ee.useState)(!1);return ee.default.createElement("div",null,ee.default.createElement("button",{"aria-expanded":t,onClick:()=>i(r=>!r)},e.t("historyGraph")),t&&ee.default.createElement(Lo,{...e}))}var B=X(require("react"),1);function Do({sessionId:e,repositoryId:t,base:i,target:r,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,B.useState)(null),[n,a]=(0,B.useState)(""),[u,w]=(0,B.useState)(0),[f,S]=(0,B.useState)(null),[h,k]=(0,B.useState)("");if((0,B.useEffect)(()=>{let b=new AbortController;return p(null),a(""),S(null),o("vcs/revision-changes",{sessionId:e,repositoryId:t,base:i,target:r},b.signal).then(m=>{b.signal.aborted||p(m)}).catch(m=>{b.signal.aborted||(a(m.message),m.code==="vcs/rediscover-required"&&l())}),()=>b.abort()},[e,t,i,r,u]),n)return B.default.createElement("p",{role:"alert"},n," ",B.default.createElement("button",{onClick:()=>w(b=>b+1)},s("retry")));if(!d)return B.default.createElement("p",{role:"status"},s("loading"));let g=Ge(d.changes,h);return B.default.createElement("div",null,B.default.createElement("label",null,s("commitFileSearch")," ",B.default.createElement("input",{"aria-label":s("commitFileSearch"),value:h,onChange:b=>{k(b.target.value),S(null)}})),B.default.createElement("span",null," ",g.length," / ",d.changes.length),!!d.changes.length&&!g.length&&B.default.createElement("p",{role:"status"},s("emptySearch")),!d.changes.length&&B.default.createElement("p",null,s("revisionEmpty")),B.default.createElement("ul",null,g.map(b=>B.default.createElement("li",{key:b.id},B.default.createElement("button",{"aria-pressed":f===b.id,onClick:()=>S(b.id)},b.status," \xB7 ",b.oldPath?b.oldPath+" \u2192 ":"",b.path)))),f&&B.default.createElement(Ae,{key:f,sessionId:e,repositoryId:t,base:i,target:r,id:f,rpc:o,t:s,onRediscover:l}))}function gt(e){return B.default.createElement(Mo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Mo({commits:e,sessionId:t,repositoryId:i,rpc:r,t:o,onRediscover:s,onReferencesLoaded:l}){let[d,p]=(0,B.useState)(""),[n,a]=(0,B.useState)(""),[u,w]=(0,B.useState)([]),[f,S]=(0,B.useState)(!1),[h,k]=(0,B.useState)(0),[g,b]=(0,B.useState)(!1),[m,x]=(0,B.useState)("");return(0,B.useEffect)(()=>{if(!h)return;let y=new AbortController;return b(!0),x(""),r("vcs/references",{sessionId:t,repositoryId:i},y.signal).then(C=>{y.signal.aborted||(w(C.references),S(!0),l?.(C.references))}).catch(C=>{y.signal.aborted||(x(C.message),C.code==="vcs/rediscover-required"&&s())}).finally(()=>{y.signal.aborted||b(!1)}),()=>y.abort()},[t,i,h]),B.default.createElement("section",{"aria-label":o("revisionTitle")},B.default.createElement("h3",null,o("revisionTitle")),B.default.createElement("p",null,o("revisionScope")),B.default.createElement("button",{disabled:g,onClick:()=>k(y=>y+1)},o("revisionLoadRefs")),B.default.createElement("p",null,o("revisionRefsScope")),f&&!g&&!m&&B.default.createElement("p",{role:"status"},u.length?`${o("revisionRefsCount")}: ${u.length}`:o("revisionRefsEmpty")),g&&B.default.createElement("p",{role:"status"},o("loading")),m&&B.default.createElement("p",{role:"alert"},m),[[d,p,"revisionBase"],[n,a,"revisionTarget"]].map(([y,C,N])=>B.default.createElement("label",{key:N},o(N)," ",B.default.createElement("select",{"aria-label":o(N),value:y,onChange:v=>C(v.target.value)},B.default.createElement("option",{value:""},"\u2014"),!!e.length&&B.default.createElement("optgroup",{label:o("revisionLoadedCommits")},e.map(v=>B.default.createElement("option",{key:v.id,value:v.id},v.id.slice(0,10)," \xB7 ",v.subject))),!!u.length&&B.default.createElement("optgroup",{label:o("revisionLocalRefs")},u.map(v=>B.default.createElement("option",{key:v.name,value:v.commit},v.name," \xB7 ",v.commit.slice(0,10)))),y&&!e.some(v=>v.id===y)&&!u.some(v=>v.commit===y)&&B.default.createElement("option",{value:y},y)))),B.default.createElement("button",{disabled:!d||!n,onClick:()=>{p(n),a(d)}},o("revisionSwap")),B.default.createElement("p",{style:{overflowWrap:"anywhere"}},B.default.createElement("code",null,d||"\u2014")," \u2192 ",B.default.createElement("code",null,n||"\u2014")),d&&n&&B.default.createElement(Do,{key:JSON.stringify([t,i,d,n]),sessionId:t,repositoryId:i,base:d,target:n,rpc:r,t:o,onRediscover:s}))}function Le(e){return H.default.createElement(Bo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Bo({sessionId:e,repositoryId:t,rpc:i,t:r,onRediscover:o,showSearch:s=!1}){let[l,d]=(0,H.useState)({id:null,path:null,revision:0}),[p,n]=(0,H.useState)(""),[a,u]=(0,H.useState)([]),[w,f]=(0,H.useState)(null),[S,h]=(0,H.useState)(""),[k,g]=(0,H.useState)(""),b=P=>{let se=(w||[]).find(ne=>JSON.stringify([ne.name,ne.commit])===P)?.commit||"";g(P),h(se),C(ne=>ne?{...ne,snapshot:se||null}:null),oe(0),n(""),M(null),le({commits:[],snapshot:null,nextOffset:null})},[m,x]=(0,H.useState)({message:"",author:"",path:"",since:"",until:""}),[y,C]=(0,H.useState)(null),N=P=>{C({values:P,snapshot:D.snapshot}),oe(0),n(""),M(null),le(G=>({...G,commits:[],nextOffset:null}))},v=()=>{R&&(le(P=>({commits:[],snapshot:P.snapshot,nextOffset:null})),M(null),n(""),oe(Math.max(0,R-50)))},A=(0,H.useMemo)(()=>Jt(w||[]),[w]),L=l.id,J=(P,G=null)=>{l.id&&u(se=>[...se,l]),d(se=>({id:P,path:G,revision:se.revision+1}))},ie=()=>{if(!a.length)return;let P=a[a.length-1];u(G=>G.slice(0,-1)),d(G=>({id:P.id,path:P.path,revision:G.revision+1}))},M=(P,G=null)=>d(se=>({id:P,path:G,revision:se.revision+(G||se.path?1:0)})),[D,le]=(0,H.useState)({commits:[],snapshot:null,nextOffset:null}),[R,oe]=(0,H.useState)(0),[be,ke]=(0,H.useState)(0),[pe,xe]=(0,H.useState)(!0),[he,ge]=(0,H.useState)("");(0,H.useEffect)(()=>{let P=new AbortController;return xe(!0),ge(""),i("vcs/history",{sessionId:e,repositoryId:t,offset:R,limit:50,...y?{search:y.values}:{},...y?.snapshot||S||D.snapshot?{snapshot:y?.snapshot||S||D.snapshot}:{}},P.signal).then(G=>{if(!P.signal.aborted){let se=qe(D,G,R);le(se);let ne=new Set(D.commits.filter(ue=>!se.commits.some(ye=>ye.id===ue.id)).map(ue=>ue.id));d(ue=>ne.has(ue.id)?{id:null,path:null,revision:ue.revision+1}:ue)}}).catch(G=>{P.signal.aborted||(ge(G.message),G.code==="vcs/rediscover-required"&&o())}).finally(()=>{P.signal.aborted||xe(!1)}),()=>P.abort()},[e,t,R,be,y,S]);let de=Yt(D.commits,p);return H.default.createElement("section",{className:"vcs-history vcs-history-browser","aria-label":r("history"),"aria-busy":pe},H.default.createElement("div",{className:"vcs-history-list"},H.default.createElement("p",null,r("historyListOnly")),w!==null&&H.default.createElement("p",null,r("historyRefsScope")),H.default.createElement("label",null,r("historyBranch")," ",H.default.createElement("select",{"aria-label":r("historyBranch"),value:k,disabled:pe,onChange:P=>b(P.target.value)},H.default.createElement("option",{value:""},"HEAD"),k&&!(w||[]).some(P=>JSON.stringify([P.name,P.commit])===k)&&H.default.createElement("option",{value:k},JSON.parse(k)[0]," \xB7 ",S.slice(0,10)," \xB7 ",r("historyPinned")),(w||[]).map(P=>{let G=JSON.stringify([P.name,P.commit]);return H.default.createElement("option",{key:G,value:G},P.name," \xB7 ",P.commit.slice(0,10))}))),s&&H.default.createElement("details",{className:"vcs-help"},H.default.createElement("summary",null,r("historySearchHelp")),H.default.createElement("p",null,r("historyBranchScope"),S&&H.default.createElement(H.default.Fragment,null," \xB7 ",H.default.createElement("code",null,S)))),s&&H.default.createElement("form",{className:"vcs-history-search","aria-label":r("historyServerSearch"),onSubmit:P=>{P.preventDefault(),N({...m})}},H.default.createElement("fieldset",{disabled:pe},H.default.createElement("legend",null,r("historyServerSearch")),H.default.createElement("details",{className:"vcs-help"},H.default.createElement("summary",null,r("historySearchHelp")),H.default.createElement("p",null,r("historyServerScope"))),["message","author","path","since","until"].map(P=>H.default.createElement("label",{key:P},r("historyServer_"+P)," ",H.default.createElement("input",{maxLength:P==="since"||P==="until"?40:1024,placeholder:P==="since"||P==="until"?"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]":void 0,"aria-label":r("historyServer_"+P),value:m[P],onChange:G=>x(se=>({...se,[P]:G.target.value}))}))),H.default.createElement("button",{type:"submit"},r("historyServerApply")),H.default.createElement("button",{type:"button",onClick:()=>{x({message:"",author:"",path:"",since:"",until:""}),N({})}},r("historyServerClear")))),y&&H.default.createElement("p",{role:"status"},r("historyServerActive"),": ",JSON.stringify(y.values)," \xB7 ",H.default.createElement("code",null,y.snapshot||D.snapshot)),s&&H.default.createElement(H.default.Fragment,null,H.default.createElement("label",null,r("historySearch")," ",H.default.createElement("input",{"aria-label":r("historySearch"),value:p,onChange:P=>{n(P.target.value),M(null)}})),H.default.createElement("span",null," ",de.length," / ",D.commits.length)),!!D.commits.length&&H.default.createElement(H.default.Fragment,null,H.default.createElement("p",{role:"status"},r("historyWindow"),": ",Math.max(0,(D.windowEnd??D.commits.length)-D.commits.length),"\u2013",D.windowEnd??D.commits.length),s&&H.default.createElement("details",{className:"vcs-help"},H.default.createElement("summary",null,r("historySearchHelp")),H.default.createElement("p",null,r("historyWindowScope")))),!!D.commits.length&&!de.length&&H.default.createElement("p",{role:"status"},r("historyNoMatch")),H.default.createElement("ol",{className:"vcs-commit-list"},de.map(P=>H.default.createElement("li",{key:P.id},H.default.createElement("button",{className:"vcs-commit-row","aria-pressed":L===P.id,onClick:()=>M(P.id)},H.default.createElement("span",{className:"vcs-commit-subject"},P.subject)),H.default.createElement("div",{className:"vcs-commit-meta"},H.default.createElement("code",{title:P.id},P.id.slice(0,10))," \xB7 ",P.author," \xB7 ",H.default.createElement("time",{dateTime:P.date},P.date)),A.has(P.id)&&H.default.createElement("div",{"aria-label":r("historyRefsLabel"),style:{overflowWrap:"anywhere"}},A.get(P.id).names.map(G=>H.default.createElement("span",{key:G},H.default.createElement("code",null,G)," ")),A.get(P.id).hidden>0&&H.default.createElement("span",null,r("historyRefsMore"),": ",A.get(P.id).hidden))))),pe&&H.default.createElement("p",{role:"status"},r("loading")),he&&H.default.createElement("p",{role:"alert"},he," ",H.default.createElement("button",{onClick:()=>ke(P=>P+1)},r("retry"))),!pe&&!he&&!D.commits.length&&H.default.createElement("p",null,r("historyEmpty")),D.truncated&&H.default.createElement("p",{role:"status"},r("historyLimit")),!!R&&H.default.createElement("button",{disabled:pe,onClick:v},r("historyBack")),!he&&D.nextOffset!==null&&H.default.createElement("button",{disabled:pe,onClick:()=>oe(D.nextOffset)},r("historyMore")),!!D.commits.length&&H.default.createElement(ht,{commits:D.commits,selected:L,onSelect:M,t:r}),H.default.createElement(gt,{onReferencesLoaded:f,commits:D.commits,sessionId:e,repositoryId:t,rpc:i,t:r,onRediscover:o})),H.default.createElement("div",{className:"vcs-history-details"},a.length>0&&H.default.createElement("p",null,H.default.createElement("button",{onClick:ie,"aria-label":r("historyNavigationBack")},r("historyNavigationBack")," \xB7 ",a[a.length-1].id.slice(0,10))),L&&H.default.createElement(Pe,{key:JSON.stringify([L,l.revision]),initialPath:l.path,sessionId:e,repositoryId:t,commit:L,onSelectCommit:J,rpc:i,t:r,onRediscover:o})))}var re=X(require("react"),1);function vt({sessionId:e,repositoryId:t,rpc:i,t:r,onRediscover:o}){let[s,l]=(0,re.useState)(null),[d,p]=(0,re.useState)(null),[n,a]=(0,re.useState)(""),[u,w]=(0,re.useState)(0);return(0,re.useEffect)(()=>{let f=new AbortController;return a(""),l(null),p(null),i("vcs/stash-list",{sessionId:e,repositoryId:t},f.signal).then(S=>{f.signal.aborted||l(S.stashes)}).catch(S=>{f.signal.aborted||(a(S.message),S.code==="vcs/rediscover-required"&&o())}),()=>f.abort()},[e,t,u]),n?re.default.createElement("section",{"aria-label":r("stashTitle")},re.default.createElement("h3",null,r("stashTitle")),re.default.createElement("p",{role:"alert"},n," ",re.default.createElement("button",{onClick:()=>w(f=>f+1)},r("retry")))):s?re.default.createElement("section",{"aria-label":r("stashTitle")},re.default.createElement("h3",null,r("stashTitle")),re.default.createElement("p",null,r("stashScope")),s.length?re.default.createElement("ol",null,s.map(f=>re.default.createElement("li",{key:f.id},re.default.createElement("button",{"aria-pressed":d===f.id,onClick:()=>p(f.id)},re.default.createElement("code",null,f.ref)," \xB7 ",f.message)))):re.default.createElement("p",{role:"status"},r("stashEmpty")),d&&re.default.createElement(Pe,{sessionId:e,repositoryId:t,commit:d,onSelectCommit:()=>{},rpc:i,t:r,onRediscover:o})):re.default.createElement("section",{"aria-label":r("stashTitle")},re.default.createElement("h3",null,r("stashTitle")),re.default.createElement("p",{role:"status"},r("loading")))}var ve=X(require("react"),1);var Y=X(require("react"),1);function yt(e){return Y.default.createElement(Fo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Fo({sessionId:e,repositoryId:t,rpc:i,t:r,onRediscover:o}){let[s,l]=(0,Y.useState)(""),[d,p]=(0,Y.useState)(null),[n,a]=(0,Y.useState)(null),[u,w]=(0,Y.useState)(""),[f,S]=(0,Y.useState)(!1),h=(0,Y.useRef)(null),k=b=>{h.current?.abort();let m=new AbortController;h.current=m,S(!0),w(""),a(null),p(b),i("vcs/grep",{sessionId:e,repositoryId:t,query:b},m.signal).then(x=>{m.signal.aborted||a(x.matches)}).catch(x=>{m.signal.aborted||(w(x.message),x.code==="vcs/rediscover-required"&&o())}).finally(()=>{m.signal.aborted||S(!1)})};(0,Y.useEffect)(()=>()=>h.current?.abort(),[]);let g=b=>{b.preventDefault();let m=s.trim();m&&k(m)};return Y.default.createElement("section",{"aria-label":r("grepTitle")},Y.default.createElement("h3",null,r("grepTitle")),Y.default.createElement("p",null,r("grepScope")),Y.default.createElement("form",{onSubmit:g},Y.default.createElement("input",{"aria-label":r("grepQuery"),maxLength:1024,placeholder:r("grepPlaceholder"),value:s,onChange:b=>l(b.target.value)}),Y.default.createElement("button",{type:"submit",disabled:f||!s.trim()},r("grepRun"))),u?Y.default.createElement("p",{role:"alert"},u," ",Y.default.createElement("button",{onClick:()=>d&&k(d)},r("retry"))):f?Y.default.createElement("p",{role:"status"},r("loading")):n&&Y.default.createElement(Y.default.Fragment,null,Y.default.createElement("p",{role:"status"},r("grepCount",{count:n.length})),n.length?Y.default.createElement("ol",null,n.map((b,m)=>Y.default.createElement("li",{key:m},Y.default.createElement("code",null,b.path,":",b.line)," ",Y.default.createElement("pre",{style:{margin:0}},b.text)))):Y.default.createElement("p",{role:"status"},r("grepEmpty"))))}function bt(e){return ve.default.createElement(Oo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Oo({t:e,...t}){let[i,r]=(0,ve.useState)("content");return ve.default.createElement("section",{className:"vcs-search-panel","aria-label":e("searchCenter")},ve.default.createElement("nav",{className:"vcs-search-modes","aria-label":e("searchMode")},ve.default.createElement("button",{"aria-pressed":i==="content",onClick:()=>r("content")},e("searchContentMode")),ve.default.createElement("button",{"aria-pressed":i==="history",onClick:()=>r("history")},e("searchHistoryMode"))),i==="content"?ve.default.createElement(yt,{...t,t:e}):ve.default.createElement(Le,{...t,t:e,showSearch:!0}))}var xt={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 revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u4FDD\u7559\u6700\u8FD1 200 \u6761\uFF0C\u53EF\u52A0\u8F7D\u66F4\u591A\u6216\u8FD4\u56DE",svnHistoryDateScope:"\u6309\u65E5\u671F\uFF08svn:date \u7684\u65E5\u671F\u90E8\u5206\uFF09\u5728\u5DF2\u52A0\u8F7D\u7A97\u53E3\u5185\u6709\u754C\u8FC7\u6EE4\uFF1BSVN REPORT \u4EC5\u652F\u6301 revision \u533A\u95F4\uFF0C\u6545\u4E0D\u5BA3\u79F0\u8DE8\u7A97\u53E3\u5B8C\u6574\u626B\u63CF\u3002",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",historySearchHelp:"\u67E5\u8BE2\u8303\u56F4\u4E0E\u9650\u5236",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",comparisonFocus:"\u4E13\u6CE8\u5BF9\u6BD4",comparisonRestore:"\u6062\u590D\u6587\u4EF6\u5217\u8868",commitSigned:"\u5DF2\u7B7E\u540D \xB7 {format}",commitSignatureUnverified:"\u4EC5\u68C0\u6D4B\u7B7E\u540D\u5934\uFF0C\u672A\u505A\u4FE1\u4EFB\u9A8C\u8BC1\u3002",commitCommitter:"\u63D0\u4EA4\u8005",stashTitle:"\u53EA\u8BFB Stash \u89C6\u56FE",stashScope:"\u4EC5\u8BFB\u53D6\u672C\u5730 refs/stash\uFF0C\u5217\u51FA\u5DF2\u6682\u5B58\u7684\u5DE5\u4F5C\u533A\u5FEB\u7167\uFF1B\u9009\u62E9\u540E\u590D\u7528\u63D0\u4EA4\u8BE6\u60C5\u53EA\u8BFB\u67E5\u770B\u5176\u5DEE\u5F02\u3002\u4E0D\u521B\u5EFA\u3001\u5E94\u7528\u3001\u5220\u9664\u6216\u5F39\u51FA stash\u3002",stashEmpty:"\u5F53\u524D\u4ED3\u5E93\u6CA1\u6709 stash\u3002",stash:"Stash",grep:"\u5185\u5BB9\u641C\u7D22",searchCenter:"\u7EDF\u4E00\u641C\u7D22",searchMode:"\u641C\u7D22\u7C7B\u578B",searchContentMode:"\u6587\u4EF6\u6B63\u6587",searchHistoryMode:"\u63D0\u4EA4\u5386\u53F2",grepTitle:"\u4ED3\u5E93\u5185\u5BB9\u641C\u7D22",grepScope:"\u5728\u5F53\u524D HEAD \u63D0\u4EA4\u6811\u5185\u505A\u6709\u754C\u5B57\u9762\u6587\u672C\u641C\u7D22\uFF08\u6700\u591A500\u6761\u5339\u914D\u3001\u6BCF\u6587\u4EF6100\u6761\u3001\u8F93\u51FA2MiB\uFF09\u3002\u53EA\u8BFB\uFF0C\u4E0D\u641C\u7D22\u672A\u63D0\u4EA4\u6539\u52A8\uFF0C\u4E0D\u65B0\u589E\u7F51\u7EDC\u6216\u5199\u64CD\u4F5C\u3002",grepQuery:"\u641C\u7D22\u5185\u5BB9",grepPlaceholder:"\u8F93\u5165\u8981\u641C\u7D22\u7684\u6587\u672C",grepRun:"\u641C\u7D22",grepCount:"\u5339\u914D {count} \u6761",grepEmpty:"\u6CA1\u6709\u5339\u914D\u3002",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",historyNavigationBack:"\u8FD4\u56DE\u4E0A\u4E00\u5904",historyNavigationScope:"\u4ECE\u67D0\u4E2A\u63D0\u4EA4\u7684\u6587\u4EF6\u5386\u53F2\u6216 Blame \u8DF3\u8F6C\u5230\u53E6\u4E00\u4E2A\u63D0\u4EA4\u540E\uFF0C\u201C\u8FD4\u56DE\u4E0A\u4E00\u5904\u201D\u4F1A\u56DE\u5230\u8DF3\u8F6C\u524D\u7684\u63D0\u4EA4\uFF0C\u5E76\u5C1D\u8BD5\u9884\u9009\u552F\u4E00\u5B8C\u5168\u5339\u914D\u7684\u8DEF\u5F84\uFF1B\u8FD9\u662F\u672C\u4F1A\u8BDD\u5185\u7684\u9875\u9762\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u8BFB\u53D6\u6216\u5199\u5165\u4ED3\u5E93\u3002",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",submodulePointerMoved:"\u6307\u9488\u5DF2\u79FB\u52A8\uFF08\u68C0\u51FAHEAD\u4E0E\u8BB0\u5F55\u4E0D\u540C\uFF09",submoduleDirty:"\u5DE5\u4F5C\u6811\u6709\u672A\u63D0\u4EA4\u6539\u52A8",submoduleScope:"\u9884\u89C8\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF1B\u5DF2\u521D\u59CB\u5316\u68C0\u51FA\u65F6\uFF0C\u6765\u81EA\u7236\u4ED3\u5E93\u81EA\u8EAB git status \u7684\u6307\u9488\u79FB\u52A8\uFF0F\u672A\u63D0\u4EA4\u6539\u52A8\uFF0F\u672A\u8DDF\u8E2A\u5185\u5BB9\u4F1A\u4E00\u5E76\u6807\u6CE8\uFF0C\u4E0D\u8FDB\u5165\u5B50\u6A21\u5757\u3001\u4E0D\u989D\u5916\u89E3\u6790\u5176HEAD\u3001\u4E0D\u52A0\u8F7D\u5185\u5BB9\u3001\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",updatePlugin:"\u66F4\u65B0\u63D2\u4EF6",reloadInterface:"\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0",reloadDone:"\u5DF2\u91CD\u65B0\u52A0\u8F7D VCS \u754C\u9762\uFF1B\u65E7\u8BF7\u6C42\u3001\u7F16\u8F91\u5668\u53CA SVN \u6388\u6743\u5DF2\u6E05\u7406\u3002",reloadRestart:"\u5DF2\u5B89\u88C5\u66F4\u65B0\u6D89\u53CA\u540E\u7AEF\uFF0C\u8BF7\u81EA\u884C\u91CD\u542F DSH \u540E\u5237\u65B0\u9875\u9762\u3002",reloadFailed:"\u52A0\u8F7D\u5931\u8D25\uFF0C\u5DF2\u4FDD\u7559\u539F\u754C\u9762\uFF1B\u8BF7\u91CD\u8BD5\u6216\u91CD\u542F DSH\u3002",updateScope:"\u6B64\u6309\u94AE\u4E0D\u81EA\u52A8\u5B89\u88C5\u3002\u8BF7\u5728\u63D2\u4EF6\u7BA1\u7406\u5668\u4E2D\u68C0\u67E5\u5B89\u88C5\u65B9\u5F0F\uFF1B\u5F53\u524D\u5BBF\u4E3B\u53EF\u80FD\u8981\u6C42\u5148\u5378\u8F7D\u518D\u5B89\u88C5\u3002\u4E5F\u53EF\u5728\u7EC8\u7AEF\u6309\u5B9E\u9645 profile \u548C\u5DF2\u6838\u9A8C\u7248\u672C\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u3002",updateRestart:"\u5B89\u88C5\u540E\u70B9\u51FB\u201C\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0\u201D\u3002\u4EC5\u5728\u540E\u7AEF\u6307\u7EB9\u4E00\u81F4\u65F6\u52A0\u8F7D\u65B0\u754C\u9762\uFF1B\u5426\u5219\u63D0\u793A\u91CD\u542F\u3002\u4E0D\u81EA\u52A8\u91CD\u542F DSH\u3002",updateManager:"\u6253\u5F00\u63D2\u4EF6\u7BA1\u7406",updateRelease:"\u67E5\u770B\u6700\u65B0\u53D1\u5E03"},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 revision snapshot; retain up to 200 rows, load more or go back",svnHistoryDateScope:"Bounded in-window date filter on the svn:date day portion; SVN REPORT supports revision ranges only, so cross-window completeness is never claimed.",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",historySearchHelp:"Search scope and limits",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",comparisonFocus:"Focus comparison",comparisonRestore:"Restore file list",commitSigned:"Signed \xB7 {format}",commitSignatureUnverified:"Signature presence detected; not trust-verified.",commitCommitter:"Committer",stashTitle:"Read-only stashes",stashScope:"Reads only the local refs/stash to list stashed working-copy snapshots; selecting one reuses commit details to review its diff read-only. Never creates, applies, drops, or pops a stash.",stashEmpty:"This repository has no stashes.",stash:"Stash",grep:"Search",searchCenter:"Search center",searchMode:"Search type",searchContentMode:"File contents",searchHistoryMode:"Commit history",grepTitle:"Repository content search",grepScope:"Bounded literal-text search in the current HEAD commit tree (max 500 matches, 100 per file, 2 MiB output). Read-only; never searches uncommitted changes, adds no network or write.",grepQuery:"Search text",grepPlaceholder:"Text to search",grepRun:"Search",grepCount:"{count} matches",grepEmpty:"No matches.",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",historyNavigationBack:"Back",historyNavigationScope:"After jumping from one commit's file history or Blame into another commit, \u201CBack\u201D returns to the commit you came from and tries to preselect the single exactly matching path; this is in-page context and reads or writes no repository state.",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",submodulePointerMoved:"pointer moved (checkout HEAD differs from recorded)",submoduleDirty:"uncommitted working-tree changes",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence; for an initialized checkout, pointer movement, uncommitted changes and untracked content reported by the parent repository's own git status are annotated, without entering the submodule, separately resolving its HEAD, loading contents, or updating anything.",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",updatePlugin:"Update plugin",reloadInterface:"Check and load installed update",reloadDone:"VCS interface reloaded; old requests, editors and SVN grants were cleaned up.",reloadRestart:"Installed update changes the backend. Restart DSH and refresh the page.",reloadFailed:"Reload failed. Previous interface retained; retry or restart DSH.",updateScope:"This button does not install packages. Check installation options in the plugin manager; this host may require uninstalling before reinstalling. Alternatively run this command with your actual profile and verified version.",updateRestart:"After installation, check and load the installed update. Reload is allowed only when backend fingerprints match; otherwise restart DSH manually. DSH is never restarted automatically.",updateManager:"Open plugin manager",updateRelease:"Latest release"}};function Xt(e,t,i,r){let o=e.target;if(!t?.contains(o)||e.defaultPrevented||e.isComposing||o?.closest?.(".monaco-editor")||o?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&o===i&&r)return"clear";let s=o?.isContentEditable||o?.closest?.('input,textarea,select,[role="textbox"]');if(s&&o!==i)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!s&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function Zt(e,t){let i=t?[...t.querySelectorAll("button[data-vcs-item]")]:[],r=i.indexOf(e.target);if(r<0)return;let o;if(e.key==="ArrowDown")o=i[r+1];else if(e.key==="ArrowUp")o=i[r-1];else if(e.key==="Home")o=i[0];else if(e.key==="End")o=i.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(),o?.focus()}var Rt=e=>"dsh-vcs:project:v1:"+e;function er(e,t){if(!e)return"";try{let i=(t??globalThis.localStorage)?.getItem(Rt(e));return typeof i=="string"&&i.length<=1024?i:""}catch{return""}}function tr(e,t,i){if(!(!e||!t))try{(i??globalThis.localStorage)?.setItem(Rt(e),t)}catch{}}function or(e,t=""){return e.find(i=>i.id===t)?.id||e.find(i=>i.relativePath===".")?.id||e[0]?.id||""}var De=(e,t)=>JSON.stringify([e,t]),Me=(e,t=".")=>[e.type.toUpperCase(),e.relativePath==="."?t:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),We=(e,t="all")=>e.type==="git"&&["staged","unstaged"].includes(t)?t:"all",rr=(e="",t="")=>e===t?0:e<t?-1:1;function wt(e=[]){let t={id:"",name:"",directories:new Map,files:[],count:0};for(let r of e){let o=String(r.path||"").split("/").filter(Boolean);if(!o.length)continue;let s=t;for(let l of o.slice(0,-1)){let d=s.id?s.id+"/"+l:l;s.directories.has(l)||s.directories.set(l,{id:d,name:l,directories:new Map,files:[],count:0}),s=s.directories.get(l),s.count++}s.files.push(r)}let i=r=>({...r,directories:[...r.directories.values()].sort((o,s)=>rr(o.name,s.name)).map(i),files:[...r.files].sort((o,s)=>rr(o.path,s.path))});return i(t)}function ir(e=[],t){let i=e.findIndex(r=>r.id===t);return{index:i<0?0:i+1,total:e.length}}function sr(e=[],t,i){if(!e.length||!["previous","next"].includes(i))return null;let r=e.findIndex(l=>l.id===t),o=i==="next"?1:-1,s=r<0?i==="next"?-1:0:r;return e[(s+o+e.length)%e.length]||null}function nr(e=""){let t=String(e).split("/").filter(Boolean);return t.slice(0,-1).map((i,r)=>t.slice(0,r+1).join("/"))}function St(e,t=[]){for(let i of e?.directories||[])t.push(i.id),St(i,t);return t}function ar(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function lr(e=[]){return e.reduce((t,i)=>{let r=ar(i.status);return t.all++,t[r]=(t[r]||0)+1,t},{all:0})}function Vo(e=[],t="",i="all"){let r=t.toLowerCase();return e.filter(o=>(i==="all"||ar(o.status)===i)&&o.path.toLowerCase().includes(r)).sort((o,s)=>o.path.localeCompare(s.path))}function cr(e,t,i="",r="all"){return e.map(o=>({...t[o.id],repository:o,changes:Vo(t[o.id]?.changes,i,r)}))}function dr(e,t,i=""){if(!i||!e||e.cwd!==t.cwd)return t;let r=new Map(e.repositories.map(o=>[o.id,o]));for(let o of t.repositories)r.set(o.id,o);return{...t,repositories:[...r.values()],truncated:e.truncated||t.truncated,warnings:[...e.warnings||[],...t.warnings||[]]}}var ur={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},pr=e=>new URL("vcs-assets/"+e,document.baseURI).href;function jo(){return c.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},c.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),c.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var Be=e=>ur[e?.status]||e?.status?.slice(0,1).toUpperCase()||"M",mr=["slots","layout","locale","connection","uiSession"];function Uo(){let[e,t]=(0,c.useState)("all"),[i,r]=(0,c.useState)({}),[o,s]=(0,c.useState)(""),[l,d]=(0,c.useState)({added:0,deleted:0,count:0});return{mode:e,setMode:t,statuses:i,setStatuses:r,detailError:o,setDetailError:s,stats:l,setStats:d}}function Io(e,t){let[i,r]=(0,c.useState)(e);return(0,c.useEffect)(()=>{t?.(i)},[i]),[i,r]}function qo({session:e,rpc:t,invalidate:i,setStatuses:r}){let o=e?.id,[s,l]=(0,c.useState)(null),[d,p]=(0,c.useState)(()=>er(e?.cwd)),[n,a]=(0,c.useState)(0),[u,w]=(0,c.useState)(""),[f,S]=(0,c.useState)(""),[h,k]=(0,c.useState)(!1),[g,b]=(0,c.useState)(""),m=(0,c.useRef)(null),x=(0,c.useRef)(null),y=(0,c.useRef)(!1),C=s?.repositories||[];return(0,c.useEffect)(()=>{C.some(A=>A.id===d)&&tr(e?.cwd,d)},[e?.cwd,d,s]),(0,c.useEffect)(()=>{let A=new AbortController;return m.current=A,b(""),k(!!o),o&&t("vcs/repositories",{sessionId:o,...f?{subdirectory:f}:{}},A.signal).then(L=>{if(!A.signal.aborted){let J=dr(x.current,L,f);y.current=!1,p(ie=>or(J.repositories,ie)),l(J)}}).catch(L=>{A.signal.aborted||b(L.message)}).finally(()=>{A.signal.aborted||k(!1)}),()=>A.abort()},[o,n,f]),{discovery:s,repositories:C,repositoryId:d,setRepositoryId:p,scan:n,subdirectory:u,setSubdirectory:w,scanning:h,error:g,rescan:()=>{y.current=!1,i(),m.current?.abort(),x.current=s,l(null),r({}),S(u.trim()),a(A=>A+1)},rediscover:()=>{y.current||(y.current=!0,i(),m.current?.abort(),x.current=null,l(null),r({}),S(""),a(A=>A+1))}}}function Go({sessionId:e,rpc:t,scheduleStatus:i,discovery:r,repositoryId:o,mode:s,visibleRepositories:l,setStatuses:d,setDetailError:p,rediscover:n,invalidate:a}){let[u,w]=(0,c.useState)(0),[f,S]=(0,c.useState)(0),h=(0,c.useRef)(null),k=(0,c.useRef)(!1),g=(m=!1)=>{m||S(x=>x+1),k.current=m,m||a(),m||d({}),w(x=>x+1)};return(0,c.useEffect)(()=>{let m=new AbortController,x=k.current;h.current=m,k.current=!1,x||(d({}),p(""));for(let y of l){let C=We(y,s);i(()=>t("vcs/status",{sessionId:e,repositoryId:y.id,mode:C},m.signal),m.signal).then(N=>{m.signal.aborted||d(v=>({...v,[y.id]:{...N,mode:C}}))}).catch(N=>{if(!m.signal.aborted){if(N.code==="vcs/rediscover-required"){n();return}d(v=>({...v,[y.id]:{error:N.message,changes:[],mode:C}}))}})}return()=>m.abort()},[e,r,o,s,u]),(0,c.useEffect)(()=>{let m=x=>{x.target===window&&e&&o&&document.visibilityState==="visible"&&g(!0)};return window.addEventListener("focus",m),()=>window.removeEventListener("focus",m)},[e,o,s]),{refresh:u,historyRefresh:f,refreshStatuses:g,abortStatus:()=>h.current?.abort()}}function Wo({sessionId:e,rpc:t,discovery:i,repositories:r,statuses:o,mode:s,reviewActive:l,setDetailError:d,setStats:p,rediscover:n}){let[a,u]=(0,c.useState)(null),[w,f]=(0,c.useState)(null),[S,h]=(0,c.useState)(!1),[k,g]=(0,c.useState)("content"),[b,m]=(0,c.useState)(null),[x,y]=(0,c.useState)(0),C=(0,c.useRef)(null),N=r.find(R=>R.id===a?.repositoryId),v=a?o[a.repositoryId]:null,A=JSON.stringify([e,i?.cwd,a?.repositoryId,s,a?.id]),L=b?.key===A&&b?.status===v;return(0,c.useEffect)(()=>m(null),[A,v,l]),(0,c.useEffect)(()=>{let R=new AbortController;return C.current=R,f(null),d(""),p({added:0,deleted:0,count:0}),g("content"),h(!!a&&!!v),!l&&a&&v&&N&&t("vcs/compare",{sessionId:e,repositoryId:a.repositoryId,mode:We(N,s),id:a.id,...L?{large:!0}:{}},R.signal).then(oe=>{R.signal.aborted||f(oe)}).catch(oe=>{if(!R.signal.aborted){if(oe.code==="vcs/rediscover-required"){n();return}d(oe.message)}}).finally(()=>{R.signal.aborted||h(!1)}),()=>R.abort()},[a,v,e,s,l,L,x]),{selected:a,comparison:w,loading:S,tab:k,setTab:g,large:L,selectionKey:A,selectedRepository:N,selectedStatus:v,reset:()=>{C.current?.abort(),f(null),u(null),d(""),g("content"),p({added:0,deleted:0,count:0})},clearSelection:()=>{C.current?.abort(),f(null),u(null),d("")},selectFile:(R,oe)=>{C.current?.abort(),f(null),g("content"),u({repositoryId:R,id:oe})},toggleLarge:()=>{C.current?.abort(),f(null),m(L?null:{key:A,status:v})},retryCompare:()=>y(R=>R+1)}}function Jo({editorNode:e,viewer:t,setStats:i,comparison:r,sessionId:o,discovery:s,selected:l,mode:d,reviewActive:p}){let[n,a]=(0,c.useState)(0),[u,w]=(0,c.useState)(!1),[f,S]=(0,c.useState)(""),[h,k]=(0,c.useState)("pending"),[g,b]=(0,c.useState)(!0),[m,x]=(0,c.useState)(!1),[y,C]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let N=!1,v,A=new AbortController;w(!1),S("");let L=document.createElement("link");return L.rel="stylesheet",L.href=pr("editor.css"),document.head.appendChild(L),Ue(pr("editor.js")+"?v="+encodeURIComponent(Se)+"&retry="+n,{signal:A.signal}).then(J=>{N||(v=J.createDiff(e.current,{onStats:i,onComputation:ie=>{N||k(ie)}}),t.current=v,w(!0))}).catch(J=>{N||S(J.message)}),()=>{N=!0,A.abort(),v?.dispose(),t.current=null,L.remove()}},[n]),(0,c.useEffect)(()=>{u&&(!r||r.binary||p)&&t.current?.setContent({left:{text:""},right:{text:""}},"empty"),u&&r&&!r.binary&&!p&&t.current?.setContent(r,JSON.stringify([o,s?.cwd,l?.repositoryId,d,l?.id,r.path]))},[u,r,o,s,l,d,p]),(0,c.useEffect)(()=>{t.current?.options({sideBySide:g,ignoreWhitespace:m,wrap:y})},[u,g,m,y]),{setEditorRetry:a,editorReady:u,editorError:f,computation:h,sideBySide:g,setSide:b,ignoreWhitespace:m,setWhitespace:x,wrap:y,setWrap:C}}function zo(){let[e,t]=(0,c.useState)(""),[i,r]=(0,c.useState)("all"),[o,s]=(0,c.useState)(!0),[l,d]=(0,c.useState)({});return{query:e,setQuery:t,statusFilter:i,setStatusFilter:r,tree:o,setTree:s,collapsedDirectories:l,setCollapsedDirectories:d,clearFilters:()=>{t(""),r("all")}}}function _o({panelNode:e,searchNode:t,fileListNode:i,revealChange:r,query:o,setQuery:s,changes:l,selected:d,reviewActive:p,repositoryId:n,selectFile:a,tree:u,statusFilter:w,collapsedDirectories:f,groups:S,setTree:h,clearFilters:k,chosen:g,setCollapsedDirectories:b}){let m=y=>{let C=sr(l,d?.id,y);C&&a(n,C.id)};return(0,c.useEffect)(()=>{let y=C=>{if(p)return;let N=Xt(C,e.current,t.current,!!o);N&&(C.preventDefault(),N==="search"?(t.current?.focus(),t.current?.select()):N==="clear"?s(""):m(N))};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[o,l,d,p]),(0,c.useEffect)(()=>{let y=r.current;if(!y)return;let C=[...i.current?.querySelectorAll("button[data-vcs-change]")||[]].find(N=>N.dataset.vcsChange===y);C&&(C.scrollIntoView({block:"nearest"}),C.focus(),r.current=null)},[u,o,w,f,S]),{selectAdjacent:m,revealSelected:()=>{let y=g;!y||!d||(h(!0),k(),b(C=>{let N={...C};for(let v of nr(y.path))N[d.repositoryId+"\0"+v]=!1;return N}),r.current=De(d.repositoryId,y.id))}}}function Ko({t:e,repositories:t,repositoryId:i,gitSelected:r,scanning:o,mode:s,reviewActive:l,busy:d,sessionId:p,discovery:n,sessionCwd:a,subdirectory:u,onSubdirectoryChange:w,onRescan:f,onRepositoryChange:S,onModeChange:h,onRefresh:k,onBack:g}){return c.default.createElement("header",{className:"vcs-top"},c.default.createElement(jo,null),c.default.createElement("h1",{className:"vcs-title"},e("title")),c.default.createElement("span",{className:"vcs-badge"},e("readonly")),c.default.createElement("span",{className:"vcs-spacer"}),c.default.createElement("select",{"aria-label":e("repositories"),value:i,disabled:o||!t.length,onChange:b=>S(b.target.value)},!t.length&&c.default.createElement("option",{value:""},e("repositories")),t.map(b=>c.default.createElement("option",{key:b.id,value:b.id},Me(b,e("workspaceRoot"))))),c.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",c.default.createElement("select",{"aria-label":e("gitMode"),value:s,disabled:l||!r,onChange:b=>h(b.target.value)},["all","unstaged","staged"].map(b=>c.default.createElement("option",{key:b,value:b},e(b))))),c.default.createElement("button",{onClick:k,disabled:d||!p},e("refresh")),c.default.createElement("button",{onClick:g},e("back")),c.default.createElement("div",{className:"vcs-path",title:n?.cwd||a},e("session"),": ",n?.cwd||a||"\u2014"),c.default.createElement("form",{className:"vcs-discovery",onSubmit:b=>{b.preventDefault(),f()}},c.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:u,onChange:b=>w(b.target.value)}),c.default.createElement("button",{disabled:!p||o},e("rescan")),c.default.createElement("span",null,e("scanHint"))),n?.truncated&&c.default.createElement("div",{className:"vcs-notice"},e("truncated")),(n?.warnings||[]).map((b,m)=>c.default.createElement("div",{className:"vcs-notice",key:m},typeof b=="string"?b:b.message||JSON.stringify(b))))}function Yo({t:e,gitSelected:t,historyActive:i,stashActive:r,grepActive:o,reviewActive:s,setReviewView:l,openReviewView:d}){return c.default.createElement("nav",{className:"vcs-review-views","aria-label":e("reviewView")},c.default.createElement("button",{"aria-pressed":!s,onClick:()=>l("workspace")},e("workspaceView")),c.default.createElement("button",{"aria-pressed":i,"aria-expanded":i,onClick:()=>d("history")},e("history")),t&&c.default.createElement(c.default.Fragment,null,c.default.createElement("button",{"aria-pressed":r,"aria-expanded":r,onClick:()=>d("stash")},e("stash")),c.default.createElement("button",{"aria-pressed":o,"aria-expanded":o,onClick:()=>d("grep")},e("grep"))))}function Qo({sessionId:e,repositoryId:t,historyRefresh:i,scan:r,rpc:o,t:s,rediscover:l,historyActive:d,stashActive:p,grepActive:n,svnSelected:a,gitSelected:u}){return c.default.createElement(c.default.Fragment,null,d&&a&&c.default.createElement(ct,{key:JSON.stringify([e,t,i,r]),sessionId:e,rpc:o,t:s,onRediscover:l}),d&&u&&c.default.createElement(Le,{key:JSON.stringify([e,t,i,r]),sessionId:e,repositoryId:t,rpc:o,t:s,onRediscover:l}),p&&c.default.createElement(vt,{sessionId:e,repositoryId:t,rpc:o,t:s,onRediscover:l}),n&&c.default.createElement(bt,{sessionId:e,repositoryId:t,rpc:o,t:s,onRediscover:l}))}function $o({t:e,statusFilter:t,statusCounts:i,onStatusFilter:r}){return c.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(o=>c.default.createElement("button",{key:o,"aria-pressed":t===o,onClick:()=>r(o)},e(o==="all"?"allFiles":ur[o]||"M")," ",c.default.createElement("small",null,i[o]||0))))}function fr({entry:e,compact:t=!1,depth:i=0,repositoryId:r,selected:o,t:s,onSelect:l}){let d=e.path.lastIndexOf("/");return c.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":De(r,e.id),"aria-current":o?.repositoryId===r&&o?.id===e.id?"true":void 0,style:{paddingInlineStart:8+i*14},title:(e.oldPath?e.oldPath+" \u2192 ":"")+e.path+" \xB7 "+s(Be(e)),onClick:()=>l(r,e.id)},c.default.createElement("span",{className:"vcs-status","data-status":Be(e)},Be(e)),c.default.createElement(it,{submodule:e.submodule,t:s}),c.default.createElement("span",{className:"vcs-filename"},t?e.path.slice(d+1):e.path,e.oldPath&&c.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",e.oldPath)))}function hr({node:e,repository:t,selected:i,t:r,collapsedDirectories:o,onToggleDirectory:s,onSelect:l,depth:d=0}){return c.default.createElement(c.default.Fragment,null,e.directories.map(p=>{let n=t.id+"\0"+p.id,a=!!o[n];return c.default.createElement(c.default.Fragment,{key:n},c.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":a?"closed":"open","aria-expanded":!a,style:{paddingInlineStart:8+d*14},onClick:()=>s(n,a)},c.default.createElement("span",{"aria-hidden":"true"},a?"\u203A":"\u2304"),p.name,c.default.createElement("small",null,p.count)),!a&&c.default.createElement(hr,{node:p,repository:t,selected:i,t:r,collapsedDirectories:o,onToggleDirectory:s,onSelect:l,depth:d+1}))}),e.files.map(p=>c.default.createElement(fr,{key:De(t.id,p.id),entry:p,compact:e.id!=="",depth:d,repositoryId:t.id,selected:i,t:r,onSelect:l})))}function Xo({t:e,sessionId:t,scanning:i,error:r,groups:o,statuses:s,query:l,tree:d,collapsedDirectories:p,selected:n,mode:a,fileListNode:u,onSelect:w,onToggleDirectory:f,onRescan:S}){let h=k=>Zt(k,u.current);return c.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:u,onKeyDown:h},o.map(k=>{let g=k.repository;return c.default.createElement("section",{className:"vcs-repository",key:g.id,"aria-label":Me(g,e("workspaceRoot"))},c.default.createElement("div",{className:"vcs-repository-heading",title:g.root},c.default.createElement("strong",null,Me(g,e("workspaceRoot"))),c.default.createElement("small",null,g.type==="svn"?e("svnBase"):e(We(g,a)))),k.error?c.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},k.error,c.default.createElement("button",{onClick:S},e("rescan"))):s[g.id]?d?c.default.createElement(hr,{node:wt(k.changes),repository:g,selected:n,t:e,collapsedDirectories:p,onToggleDirectory:f,onSelect:w}):k.changes.map(b=>c.default.createElement(fr,{key:De(g.id,b.id),entry:b,repositoryId:g.id,selected:n,t:e,onSelect:w})):c.default.createElement("div",{className:"vcs-message"},e("loading")),!k.error&&s[g.id]&&!k.changes.length&&c.default.createElement("div",{className:"vcs-message"},e(l?"emptySearch":"clean")))}),!o.length&&c.default.createElement("div",{className:"vcs-message"},i?e("loading"):r||e(t?"noRepo":"noSession"),r&&c.default.createElement("button",{onClick:S},e("rescan"))))}function Zo({t:e,sessionId:t,scanning:i,error:r,groups:o,statuses:s,query:l,statusFilter:d,statusCounts:p,changes:n,tree:a,collapsedDirectories:u,selected:w,mode:f,searchNode:S,fileListNode:h,chosen:k,onQuery:g,onStatusFilter:b,onClearFilters:m,onToggleTree:x,onExpandAll:y,onCollapseAll:C,onRevealSelected:N,onSelect:v,onToggleDirectory:A,onRescan:L}){return c.default.createElement("aside",{className:"vcs-files"},c.default.createElement("div",{className:"vcs-filter"},c.default.createElement("input",{ref:S,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:l,onChange:J=>g(J.target.value)}),(l||d!=="all")&&c.default.createElement("button",{className:"vcs-clear-filter",onClick:m},e("clearFilters"))),c.default.createElement($o,{t:e,statusFilter:d,statusCounts:p,onStatusFilter:b}),c.default.createElement("div",{className:"vcs-count"},c.default.createElement("span",null,n.length," ",e("files")),c.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),c.default.createElement("button",{"aria-pressed":a,onClick:x},e(a?"tree":"list"))),a&&c.default.createElement("div",{className:"vcs-tree-actions"},c.default.createElement("button",{onClick:y},e("expandAll")),c.default.createElement("button",{onClick:C},e("collapseAll")),c.default.createElement("button",{onClick:N,disabled:!k},e("revealSelected"))),c.default.createElement(Xo,{t:e,sessionId:t,scanning:i,error:r,groups:o,statuses:s,query:l,tree:a,collapsedDirectories:u,selected:w,mode:f,fileListNode:h,onSelect:v,onToggleDirectory:A,onRescan:L}))}function Ro({t:e,comparison:t,chosen:i,selectedRepository:r,editorReady:o,stats:s,onCopyError:l}){let[d,p]=(0,c.useState)(!1),n=async()=>{let a=t?.path||i?.path;if(a)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(a);else{let u=document.createElement("textarea");try{if(u.value=a,u.style.cssText="position:fixed;opacity:0",document.body.appendChild(u),u.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{u.remove()}}p(!0),window.setTimeout(()=>p(!1),1500)}catch{l(e("copyFailed"))}};return c.default.createElement("div",{className:"vcs-filehead"},c.default.createElement("strong",{title:t?.path||i?.path},r?Me(r,e("workspaceRoot"))+" / ":"",t?.path||i?.path||e("pick")),c.default.createElement("button",{className:"vcs-copy-path",disabled:!(t?.path||i?.path),onClick:n},e(d?"copied":"copyPath")),d&&c.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),c.default.createElement("span",{className:"vcs-spacer"}),t&&!t.binary&&o&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"vcs-add"},"+",s.added),c.default.createElement("span",{className:"vcs-del"},"\u2212",s.deleted)))}function ei({t:e,comparison:t}){return t?c.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},c.default.createElement("span",{className:"vcs-context-status","data-status":Be(t)},e(Be(t))),t.oldPath&&c.default.createElement("span",{className:"vcs-context-rename",title:t.oldPath+" \u2192 "+t.path},t.oldPath," ",c.default.createElement("b",null,"\u2192")," ",t.path),c.default.createElement("span",null,t.left.label||"\u2014"," ",c.default.createElement("b",null,"\u2194")," ",t.right.label||"\u2014"),(t.left.encoding||t.right.encoding)&&c.default.createElement("span",null,e("encoding"),": ",t.left.encoding||"\u2014"," / ",t.right.encoding||"\u2014")):null}function ti({t:e,comparison:t,selected:i,selectedRepository:r,selectedStatus:o,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:a,large:u,selectionKey:w,detailError:f,editorError:S,computation:h,onToggleLarge:k,onRetryCompare:g}){return c.default.createElement(c.default.Fragment,null,t&&r?.type==="git"&&c.default.createElement(Ee,{key:JSON.stringify([s,d,i.repositoryId,l,i.id,p,o]),workspace:!0,sessionId:s,repositoryId:i.repositoryId,mode:l,id:i.id,rpc:n,t:e,onRediscover:a}),r?.type==="git"&&(u||t?.notice?.includes("2 MiB"))&&c.default.createElement("div",{className:"vcs-notice"},c.default.createElement("span",null,e("workspaceLargeScope")),c.default.createElement("button",{onClick:k},e(u?"largeClose":"largeLoad")),u&&f&&c.default.createElement("button",{onClick:g},e("retry"))),t?.large&&c.default.createElement("p",{role:"status"},e(S?"largeFallback":h==="complete"?"diffComplete":h==="incomplete"?"diffIncomplete":"diffPending")),t?.notice&&c.default.createElement("div",{className:"vcs-notice"},t.notice),t?.submodule&&c.default.createElement("p",{role:"status"},e("submoduleScope")),t?.status==="conflicted"&&r?.type==="git"&&c.default.createElement(ot,{key:JSON.stringify([s,i.repositoryId,l,i.id,p]),sessionId:s,repositoryId:i.repositoryId,mode:l,id:i.id,rpc:n,t:e,onRediscover:a}))}function ri({t:e,comparison:t,editorNode:i,editorError:r,overlay:o,tab:s,error:l,detailError:d,onRetryEditor:p,onRescan:n}){return c.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!o||s!=="content",style:s==="properties"?{display:"none"}:void 0},c.default.createElement("div",{className:"vcs-editor",ref:i,style:r?{display:"none"}:void 0}),r&&t&&!t.binary&&!o&&c.default.createElement(Ne,{comparison:t,labels:je(e)}),o&&c.default.createElement("div",{className:"vcs-message "+(l||d||r?"vcs-error":""),role:"status"},o,(l||d||r)&&c.default.createElement("button",{onClick:()=>r?p():n()},e(r?"retry":"rescan"))))}function oi({t:e,comparison:t,properties:i,propertyNames:r}){return c.default.createElement("div",{className:"vcs-properties"},c.default.createElement("table",null,c.default.createElement("thead",null,c.default.createElement("tr",null,c.default.createElement("th",null,e("properties")),c.default.createElement("th",null,t?.left.label||e("before")),c.default.createElement("th",null,t?.right.label||e("after")))),c.default.createElement("tbody",null,r.map(o=>c.default.createElement("tr",{key:o},c.default.createElement("th",null,o),c.default.createElement("td",null,i.left?.[o]??"\u2014"),c.default.createElement("td",null,i.right?.[o]??"\u2014"))))))}function ii({t:e,editorReady:t,sideBySide:i,setSide:r,ignoreWhitespace:o,setWhitespace:s,wrap:l,setWrap:d,stats:p,overlay:n,comparison:a,viewer:u,changes:w,selected:f,onSelectAdjacent:S}){let h=ir(w,f?.id);return c.default.createElement("footer",{className:"vcs-toolbar"},c.default.createElement("button",{disabled:!t,"aria-pressed":i,onClick:()=>r(!i)},e(i?"side":"inline")),c.default.createElement("label",null,c.default.createElement("input",{type:"checkbox",disabled:!t,checked:o,onChange:k=>s(k.target.checked)}),e("whitespace")),c.default.createElement("label",null,c.default.createElement("input",{type:"checkbox",disabled:!t,checked:l,onChange:k=>d(k.target.checked)}),e("wrap")),c.default.createElement("span",{className:"vcs-spacer"}),t&&c.default.createElement("span",null,p.count," ",e("changes")),c.default.createElement("button",{disabled:!t||!a||!!n,onClick:()=>u.current?.navigate("previous")},e("previous")),c.default.createElement("button",{disabled:!t||!a||!!n,onClick:()=>u.current?.navigate("next")},e("next")),h.index>0&&c.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:h.index,total:h.total})),c.default.createElement("span",{className:"vcs-toolbar-separator"}),c.default.createElement("button",{title:e("fileShortcut"),disabled:!w.length,onClick:()=>S("previous")},e("previousFile")),c.default.createElement("button",{title:e("fileShortcut"),disabled:!w.length,onClick:()=>S("next")},e("nextFile")))}function si({t:e,comparison:t,selected:i,selectedRepository:r,selectedStatus:o,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:a,large:u,selectionKey:w,loading:f,detailError:S,error:h,busy:k,chosen:g,repositoryCount:b,editorNode:m,editorReady:x,editorError:y,computation:C,tab:N,setTab:v,stats:A,onRetryEditor:L,onRetryCompare:J,onRescan:ie,onToggleLarge:M,sideBySide:D,setSide:le,ignoreWhitespace:R,setWhitespace:oe,wrap:be,setWrap:ke,viewer:pe,changes:xe,onSelectAdjacent:he,onCopyError:ge}){let de=t?.properties,P=de?[...new Set([...Object.keys(de.left||{}),...Object.keys(de.right||{})])].filter(ne=>de.left?.[ne]!==de.right?.[ne]):[],G=t?.binary?[t.left.label,t.right.label].filter(Boolean).join(" \u2194 "):"",se=S||(f?e("loading"):s?k&&!g?e("loading"):h||(b?g?t?.binary?e("binary")+(G?" "+e("binaryComparison",{files:G}):""):t?!x&&!y?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession"));return c.default.createElement("main",{className:"vcs-detail"},c.default.createElement(Ro,{t:e,comparison:t,chosen:g,selectedRepository:r,editorReady:x,stats:A,onCopyError:ge}),y&&c.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",c.default.createElement("button",{onClick:L},e("retry")),c.default.createElement("details",null,c.default.createElement("summary",null,e("diagnostics")),y)),c.default.createElement(ei,{t:e,comparison:t}),c.default.createElement(ti,{t:e,comparison:t,selected:i,selectedRepository:r,selectedStatus:o,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:a,large:u,selectionKey:w,detailError:S,editorError:y,computation:C,onToggleLarge:M,onRetryCompare:J}),P.length>0&&c.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(ne=>c.default.createElement("button",{key:ne,"aria-pressed":N===ne,onClick:()=>v(ne)},e(ne),ne==="properties"?" ("+P.length+")":""))),c.default.createElement("div",{className:"vcs-labels"},c.default.createElement("span",null,t?.left.label||"\u2014",t?.left.encoding?" \xB7 "+t.left.encoding:""),c.default.createElement("span",null,t?.right.label||"\u2014",t?.right.encoding?" \xB7 "+t.right.encoding:"")),c.default.createElement(ri,{t:e,comparison:t,editorNode:m,editorError:y,overlay:se,tab:N,error:h,detailError:S,onRetryEditor:L,onRescan:ie}),N==="properties"&&c.default.createElement(oi,{t:e,comparison:t,properties:de,propertyNames:P}),c.default.createElement(ii,{t:e,editorReady:x,sideBySide:D,setSide:le,ignoreWhitespace:R,setWhitespace:oe,wrap:be,setWrap:ke,stats:A,overlay:se,comparison:t,viewer:pe,changes:xe,selected:i,onSelectAdjacent:he}))}function gr(e,{initialView:t="workspace",onViewChange:i}={}){let r=e.locale.bind("local.vcs"),o=tt(2),s=Ve(e.connection,()=>r("error"));function l(n){let a=n.useSessions(u=>Object.values(u.byId).find(w=>(w.retainedBy.mainView??0)>0));return c.default.createElement(d,{key:JSON.stringify([a?.id,a?.cwd])},c.default.createElement(p,{session:a}))}class d extends c.default.Component{state={error:null};static getDerivedStateFromError(a){return{error:a}}render(){return this.state.error?c.default.createElement("section",{className:"vcs-root"},c.default.createElement("style",null,et),c.default.createElement("div",{className:"vcs-message vcs-error"},r("error"),c.default.createElement("button",{onClick:()=>this.setState({error:null})},r("retry")),c.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},r("back")))):this.props.children}}function p({session:n}){(0,c.useSyncExternalStore)(z=>e.locale.subscribe(z),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let a=n?.id,u=(0,c.useRef)(null),w=(0,c.useRef)(null),f=(0,c.useRef)(null),S=(0,c.useRef)(null),h=(0,c.useRef)(null),k=(0,c.useRef)(null),g=(0,c.useRef)(null),[b,m]=Io(t,i),{mode:x,setMode:y,statuses:C,setStatuses:N,detailError:v,setDetailError:A,stats:L,setStats:J}=Uo(),ie=()=>g.current?.(),{discovery:M,repositories:D,repositoryId:le,setRepositoryId:R,scan:oe,subdirectory:be,setSubdirectory:ke,scanning:pe,error:xe,rescan:he,rediscover:ge}=qo({session:n,rpc:s,invalidate:ie,setStatuses:N}),de=D.filter(z=>z.id===le),P=de.some(z=>z.type==="git"),G=de.some(z=>z.type==="svn"),se=(P||G)&&b==="history",ne=P&&b==="stash",ue=P&&b==="grep",ye=se||ne||ue,{refresh:Ct,historyRefresh:Sr,refreshStatuses:kr,abortStatus:Cr}=Go({sessionId:a,rpc:s,scheduleStatus:o,discovery:M,repositoryId:le,mode:x,visibleRepositories:de,setStatuses:N,setDetailError:A,rediscover:ge,invalidate:ie}),{selected:Ce,comparison:Nt,loading:Nr,tab:Er,setTab:Hr,large:Ar,selectionKey:Pr,selectedRepository:Lr,selectedStatus:ze,reset:Dr,clearSelection:Mr,selectFile:Et,toggleLarge:Br,retryCompare:Fr}=Wo({sessionId:a,rpc:s,discovery:M,repositories:D,statuses:C,mode:x,reviewActive:ye,setDetailError:A,setStats:J,rediscover:ge}),_e=()=>{Cr(),Dr()};g.current=_e;let Or=z=>{Mr(),m(z)},{setEditorRetry:Tr,editorReady:Vr,editorError:jr,computation:Ur,sideBySide:Ir,setSide:qr,ignoreWhitespace:Gr,setWhitespace:Wr,wrap:Jr,setWrap:zr}=Jo({editorNode:w,viewer:f,setStats:J,comparison:Nt,sessionId:a,discovery:M,selected:Ce,mode:x,reviewActive:ye}),{query:Ke,setQuery:Ht,statusFilter:Ye,setStatusFilter:_r,tree:Qe,setTree:At,collapsedDirectories:Pt,setCollapsedDirectories:$e,clearFilters:Lt}=zo(),Fe=cr(de,C,Ke,Ye),Xe=Fe.flatMap(z=>z.changes),Kr=lr(ze?.changes),Ze=ze?.changes?.find(z=>z.id===Ce?.id),Dt=z=>$e(Re=>{let Oe={...Re};for(let Bt of Fe)for(let $r of St(wt(Bt.changes)))Oe[Bt.repository.id+"\0"+$r]=!z;return Oe}),Mt=pe||de.some(z=>!C[z.id]),{selectAdjacent:Yr,revealSelected:Qr}=_o({panelNode:u,searchNode:h,fileListNode:S,revealChange:k,query:Ke,setQuery:Ht,changes:Xe,selected:Ce,reviewActive:ye,repositoryId:le,selectFile:Et,tree:Qe,statusFilter:Ye,collapsedDirectories:Pt,groups:Fe,setTree:At,clearFilters:Lt,chosen:Ze,setCollapsedDirectories:$e});return c.default.createElement("section",{ref:u,className:"vcs-root","aria-label":r("title")},c.default.createElement("style",null,et),c.default.createElement(Ko,{t:r,repositories:D,repositoryId:le,gitSelected:P,scanning:pe,mode:x,reviewActive:ye,busy:Mt,sessionId:a,discovery:M,sessionCwd:n?.cwd,subdirectory:be,onSubdirectoryChange:ke,onRescan:he,onRepositoryChange:z=>{_e(),N({}),R(z)},onModeChange:z=>{_e(),N({}),y(z)},onRefresh:()=>kr(!1),onBack:()=>e.layout.selectPanel(null)}),de.filter(z=>z.type==="svn"&&!ye).map(z=>c.default.createElement(c.default.Fragment,{key:JSON.stringify([a,z.id,oe,Ct])},c.default.createElement(st,{repositoryId:z.id,sessionId:a,rpc:s,t:r,onRediscover:ge}))),(P||G)&&c.default.createElement(c.default.Fragment,null,c.default.createElement(Yo,{t:r,gitSelected:P,historyActive:se,stashActive:ne,grepActive:ue,reviewActive:ye,setReviewView:m,openReviewView:Or}),c.default.createElement(Qo,{sessionId:a,repositoryId:le,historyRefresh:Sr,scan:oe,rpc:s,t:r,rediscover:ge,historyActive:se,stashActive:ne,grepActive:ue,svnSelected:G,gitSelected:P})),c.default.createElement("div",{className:"vcs-body",hidden:ye,"aria-label":r("workspaceView")},c.default.createElement(Zo,{t:r,sessionId:a,scanning:pe,error:xe,groups:Fe,statuses:C,query:Ke,statusFilter:Ye,statusCounts:Kr,changes:Xe,tree:Qe,collapsedDirectories:Pt,selected:Ce,mode:x,searchNode:h,fileListNode:S,chosen:Ze,onQuery:Ht,onStatusFilter:_r,onClearFilters:Lt,onToggleTree:()=>At(!Qe),onExpandAll:()=>Dt(!0),onCollapseAll:()=>Dt(!1),onRevealSelected:Qr,onSelect:Et,onToggleDirectory:(z,Re)=>$e(Oe=>({...Oe,[z]:!Re})),onRescan:he}),c.default.createElement(si,{t:r,comparison:Nt,selected:Ce,selectedRepository:Lr,selectedStatus:ze,sessionId:a,mode:x,discoveryCwd:M?.cwd,refresh:Ct,rpc:s,rediscover:ge,large:Ar,selectionKey:Pr,loading:Nr,detailError:v,error:xe,busy:Mt,chosen:Ze,repositoryCount:D.length,editorNode:w,editorReady:Vr,editorError:jr,computation:Ur,tab:Er,setTab:Hr,stats:L,onRetryEditor:()=>Tr(z=>z+1),onRetryCompare:Fr,onRescan:he,onToggleLarge:Br,sideBySide:Ir,setSide:qr,ignoreWhitespace:Gr,setWhitespace:Wr,wrap:Jr,setWrap:zr,viewer:f,changes:Xe,onSelectAdjacent:Yr,onCopyError:A})))}return l}function ai(e){if(e?.protocol!==1||!/^\d+\.\d+\.\d+$/.test(e.version)||!["backend","runningBackend","interface"].every(t=>/^[a-f0-9]{64}$/.test(e[t])))throw Error("Invalid frontend manifest");if(e.backend!==e.runningBackend)throw Object.assign(Error("Backend changed; restart DSH."),{code:"restart-required"});return e}async function vr({base:e,fetcher:t=fetch,importer:i=s=>import(s),signal:r,requireModule:o}){let s=new URL("vcs-assets/frontend.json",e),l=await t(s,{credentials:"same-origin",cache:"no-store",redirect:"error",signal:r});if(!l.ok)throw Error("Frontend manifest HTTP "+l.status);if(!l.headers.get("content-type")?.includes("application/json"))throw Error("Invalid frontend manifest Content-Type");let d=ai(await l.json());r?.throwIfAborted();let p=new URL("interface.js",s);p.searchParams.set("hash",d.interface);let n=await i(p.href);r?.throwIfAborted();let a=n.default(o);if(typeof a.createPage!="function"||!a.dictionaries)throw Error("Invalid frontend module");return{ui:a,manifest:d}}var W=X(require("react"),1);var Je="@feng0531/dsh-vcs";function we(e){return typeof e=="string"&&/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(e)&&e.length<50}function yr(e,t){if(!we(e)||!we(t))return!1;let i=e.split(".").map(BigInt),r=t.split(".").map(BigInt);for(let o=0;o<3;o++)if(i[o]!==r[o])return i[o]>r[o];return!1}function br(e){if(!e?.ok)return{state:"unknown",message:"\u672A\u6536\u5230\u53EF\u9760\u7684\u66F4\u65B0\u7ED3\u679C\u3002\u5B89\u88C5\u53EF\u80FD\u4ECD\u5728\u8FDB\u884C\uFF0C\u8BF7\u5230 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u68C0\u67E5\uFF0C\u4E0D\u8981\u91CD\u590D\u70B9\u51FB\u66F4\u65B0\u3002"};let t=e.value;return t?.application==="failed"?{state:"failed",message:"\u66F4\u65B0\u5931\u8D25\uFF0C\u672A\u786E\u8BA4\u65B0\u7248\u751F\u6548\u3002\u8BF7\u5728 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u67E5\u770B\u8BE6\u60C5\uFF1A"+(t.error?.code||"\u5B89\u88C5\u9519\u8BEF")}:t?.application==="cancelled"?{state:"cancelled",message:"\u66F4\u65B0\u5DF2\u53D6\u6D88\uFF0C\u65B0\u7248\u672A\u786E\u8BA4\u751F\u6548\u3002"}:t?.application==="restart-required"?{state:"restart-required",message:"\u65B0\u7248\u5DF2\u5B89\u88C5\uFF0C\u4F46\u5F53\u524D DSH \u540E\u53F0\u4ECD\u5728\u8FD0\u884C\u65E7\u7248\u3002\u8BF7\u5148\u7ED3\u675F\u5F53\u524D\u6D4F\u89C8\uFF0C\u518D\u81EA\u884C\u91CD\u542F DSH \u5E76\u5237\u65B0\u9875\u9762\u3002\u63D2\u4EF6\u4E0D\u4F1A\u81EA\u52A8\u91CD\u542F\u3002"}:t?.application==="applied"?{state:"applied",message:"\u5BBF\u4E3B\u62A5\u544A\u66F4\u65B0\u5DF2\u5E94\u7528\u3002\u8BF7\u5237\u65B0\u9875\u9762\u52A0\u8F7D\u65B0\u7248\u754C\u9762\uFF1B\u82E5\u524D\u540E\u7AEF\u7248\u672C\u4ECD\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u624B\u52A8\u91CD\u542F DSH\u3002"}:{state:"unknown",message:"\u5BBF\u4E3B\u672A\u786E\u8BA4\u65B0\u7248\u5DF2\u751F\u6548\uFF0C\u8BF7\u5230 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u68C0\u67E5\u5B89\u88C5\u4E0E\u542F\u7528\u72B6\u6001\u3002"}}async function xr(e,t,{confirmed:i=!1,requestId:r}={}){if(!i)throw new Error("\u9700\u8981\u5148\u786E\u8BA4\u66F4\u65B0");if(!we(t?.latestVersion)||!yr(t.latestVersion,t.runningVersion))throw new Error("\u6CA1\u6709\u53EF\u5B89\u88C5\u7684\u65B0\u7248\u672C");if(!e||typeof e.installBundle!="function")throw new Error("\u5F53\u524D DSH \u4E0D\u652F\u6301\u6B64\u66F4\u65B0\u63A5\u53E3\uFF0C\u8BF7\u5230\u300C\u63D2\u4EF6\u300D\u9875\u9762\u624B\u52A8\u66F4\u65B0");try{return br(await e.installBundle(Je+"@"+t.latestVersion,{enabled:!1,registry:"https://registry.npmjs.org/",requestId:r}))}catch{return br(null)}}function kt({rpc:e,manager:t,clientVersion:i,reloadBusy:r,onLock:o,onManager:s,t:l}){let[d,p]=(0,W.useState)(null),[n,a]=(0,W.useState)(null),[u,w]=(0,W.useState)(""),[f,S]=(0,W.useState)(""),[h,k]=(0,W.useState)(null),[g,b]=(0,W.useState)(!1),m=(0,W.useRef)(!1),x=(0,W.useRef)(!1),y=(0,W.useRef)(null),C=!!h&&["restart-required","applied","unknown"].includes(h.state);(0,W.useEffect)(()=>{m.current=!0;let A=new AbortController;return y.current=A,e("vcs/runtime-info",{},A.signal).then(L=>{A.signal.aborted||p(L)}).catch(L=>{A.signal.aborted||S(L.message)}),()=>{m.current=!1,y.current?.abort()}},[]);let N=async()=>{if(x.current||r||C)return;x.current=!0,y.current?.abort();let A=new AbortController;y.current=A,w("\u6B63\u5728\u68C0\u67E5\u66F4\u65B0"),S(""),a(null),b(!1);try{let L=await e("vcs/check-update",{},A.signal);if(m.current&&!A.signal.aborted){if(L.packageName!==Je||!we(L.latestVersion)||!we(L.runningVersion)||L.protocol!==1)throw Error("\u540E\u53F0\u8FD4\u56DE\u7684\u7248\u672C\u4FE1\u606F\u65E0\u6548");a(L),p(L),k(null)}}catch(L){m.current&&!A.signal.aborted&&S(L.message)}finally{x.current=!1,m.current&&w("")}},v=async()=>{if(!(x.current||r||!g||!n||C)){x.current=!0,w("\u6B63\u5728\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8BF7\u52FF\u5173\u95ED\u9875\u9762"),S(""),o(!0);try{let A=await xr(t,n,{confirmed:g,requestId:crypto.randomUUID()});m.current&&(k(A),b(!1))}catch(A){m.current&&S(A.message)}finally{x.current=!1,o(!1),m.current&&w("")}}};return W.default.createElement("section",{style:{padding:12,flexShrink:0,maxHeight:"45%",overflow:"auto"},"aria-label":l("updatePlugin")},W.default.createElement("p",null,"\u754C\u9762\u7248\u672C\uFF1A",i," \xB7 \u540E\u53F0\u7248\u672C\uFF1A",d?.runningVersion||"\u5C1A\u672A\u8BFB\u53D6"),d&&(d.runningVersion!==i||d.protocol!==1)&&W.default.createElement("p",{role:"alert"},"\u754C\u9762\u4E0E\u540E\u53F0\u7248\u672C\u4E0D\u4E00\u81F4\u3002\u8BF7\u5237\u65B0\u9875\u9762\uFF1B\u82E5\u4ECD\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u624B\u52A8\u91CD\u542F DSH\u3002"),W.default.createElement("button",{disabled:!!u||r||C,onClick:N},"\u68C0\u67E5\u66F4\u65B0")," ",W.default.createElement("button",{disabled:!!u,onClick:s},l("updateManager")),W.default.createElement("a",{href:n?"https://github.com/f-e-n-g-0531/dsh-vcs/releases/tag/v"+n.latestVersion:"https://github.com/f-e-n-g-0531/dsh-vcs/releases/latest",target:"_blank",rel:"noopener noreferrer"},l("updateRelease")),n&&!C&&W.default.createElement("p",null,n.available?"\u53D1\u73B0\u65B0\u7248\u672C "+n.latestVersion:"\u5F53\u524D\u8FD0\u884C\u7248\u672C\u6CA1\u6709\u66F4\u65B0\u7684\u6B63\u5F0F\u7248\u672C\u3002"),n?.available&&!C&&W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,"\u66F4\u65B0\u4F1A\u4FEE\u6539\u5F53\u524D DSH \u7684\u63D2\u4EF6\u5B89\u88C5\u73AF\u5883\u3002\u8BF7\u5148\u5907\u4EFD\u914D\u7F6E\u3002\u66F4\u65B0\u5DF2\u6709\u63D2\u4EF6\u53EF\u80FD\u9700\u8981\u624B\u52A8\u91CD\u542F\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u542F\uFF1B\u4E0D\u652F\u6301\u6B64\u63A5\u53E3\u65F6\u8BF7\u5230\u63D2\u4EF6\u7BA1\u7406\u9875\u9762\u5904\u7406\u3002"),W.default.createElement("label",null,W.default.createElement("input",{type:"checkbox",checked:g,disabled:!!u||r,onChange:A=>b(A.target.checked)})," \u6211\u786E\u8BA4\u5C06\u6B64\u63D2\u4EF6\u66F4\u65B0\u5230 ",n.latestVersion),W.default.createElement("button",{disabled:!g||!!u||r,onClick:v},"\u66F4\u65B0\u5230 ",n.latestVersion)),u&&W.default.createElement("p",{role:"status"},u,W.default.createElement("progress",{"aria-label":"\u66F4\u65B0\u8FDB\u5EA6"})),f&&W.default.createElement("p",{role:"alert"},f),h&&W.default.createElement("p",{role:"status","data-update-state":h.state},h.message))}var li=[...mr,"remote","remote.pluginManager"];function ci(e,{loader:t=vr}={}){e.effect(()=>e.locale.register("local.vcs",xt));let i=e.locale.bind("local.vcs"),r=Ve(e.connection,()=>i("error"));class o extends I.default.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",{role:"alert"},i("reloadFailed")),I.default.createElement("button",{onClick:this.props.restore},i("retry"))):this.props.children}}function s(l){(0,I.useSyncExternalStore)(L=>e.locale.subscribe(L),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let[d,p]=(0,I.useState)(0),[n,a]=(0,I.useState)(!1),[u,w]=(0,I.useState)(""),[f,S]=(0,I.useState)(!1),[h,k]=(0,I.useState)(!1),g=(0,I.useRef)(null),b=(0,I.useRef)("workspace"),m=(0,I.useRef)(null),x=(0,I.useRef)(!0),y=(0,I.useRef)(!1),[C,N]=(0,I.useState)(()=>({Component:gr(e,{initialView:b.current,onViewChange:L=>{b.current=L}}),version:Se}));(0,I.useEffect)(()=>(x.current=!0,()=>{x.current=!1,m.current?.abort()}),[]);let v=async()=>{if(y.current||h)return;y.current=!0,m.current?.abort();let L=new AbortController;m.current=L,a(!0),w("");try{let{ui:J,manifest:ie}=await t({base:document.baseURI,signal:L.signal,requireModule:D=>{if(D==="react")return I.default;throw Error("Unsupported interface dependency")}});if(!x.current||L.signal.aborted)return;let M=J.createPage(e,{initialView:b.current,onViewChange:D=>{b.current=D}});g.current=C,N({Component:M,version:ie.version}),p(D=>D+1),w(i("reloadDone"))}catch(J){x.current&&!L.signal.aborted&&w(i(J.code==="restart-required"?"reloadRestart":"reloadFailed")+" "+J.message)}finally{y.current=!1,x.current&&!L.signal.aborted&&a(!1)}},A=C.Component;return I.default.createElement("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0}},I.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8,padding:8,flexShrink:0}},I.default.createElement("span",null,"VCS ",C.version),I.default.createElement("button",{disabled:n||h,onClick:()=>S(L=>!L),"aria-expanded":f},i("updatePlugin")),I.default.createElement("button",{disabled:n||h,onClick:v},i(n?"loading":"reloadInterface"))),I.default.createElement("div",{hidden:!f},I.default.createElement(kt,{rpc:r,manager:e.remote?.pluginManager,clientVersion:C.version,reloadBusy:n,onLock:k,onManager:()=>e.layout.selectPanel("plugins"),t:i})),u&&I.default.createElement("p",{role:"status",style:{padding:"0 12px",flexShrink:0}},u),I.default.createElement("div",{style:{flex:1,minHeight:0}},I.default.createElement(o,{key:d,restore:()=>{g.current&&(N(g.current),g.current=null),p(L=>L+1)}},I.default.createElement(A,{...l}))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},s)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>i("title"),order:65},()=>I.default.createElement("span",{"aria-hidden":"true"},"\u25A3")))}
179
+ `;function We(e,t){return async(o,r,i)=>{let s=await e.rpc.call("/vcs-rpc",o,r,i);if(!s.ok){let a=new Error(s.error?.message||String(s.error||t()));throw a.code=s.error?.code,a}return s.value}}function nt(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let t=0,o=[];function r(){for(;t<e&&o.length;){let i=o.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--,r()})}}return(i,s)=>new Promise((a,d)=>{let p={run:i,signal:s,resolve:a,reject:d,abort:null};if(p.abort=()=>{let n=o.indexOf(p);n>=0&&(o.splice(n,1),d(new Error("Aborted")))},s?.aborted){d(new Error("Aborted"));return}s?.addEventListener("abort",p.abort,{once:!0}),o.push(p),r()})}var de=oe(require("react"),1);function Ut(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Gt(e="",t=""){let o=Ut(e),r=Ut(t),i=0;for(;i<o.length&&i<r.length&&o[i]===r[i];)i++;let s=0;for(;s<o.length-i&&s<r.length-i&&o[o.length-s-1]===r[r.length-s-1];)s++;let a=o.length-s,d=r.length-s,p=a-i,n=d-i,l=p&&n?(p+1)*(n+1):0,u=l>2e5,w=[],f=0;function x(h,C){f++,!(w.length>=2e3)&&w.push({left:h===null?null:{number:h+1,text:o[h]},right:C===null?null:{number:C+1,text:r[C]},kind:h===null?"insert":C===null?"delete":o[h]===r[C]?"equal":"replace"})}for(let h=0;h<i;h++)x(h,h);if(u||!p||!n)for(let h=0;h<Math.max(p,n);h++)x(h<p?i+h:null,h<n?i+h:null);else{let h=n+1,C=new Uint32Array(l);for(let y=p-1;y>=0;y--)for(let b=n-1;b>=0;b--)C[y*h+b]=o[i+y]===r[i+b]?C[(y+1)*h+b+1]+1:Math.max(C[(y+1)*h+b],C[y*h+b+1]);let k=0,v=0;for(;k<p||v<n;)k<p&&v<n&&o[i+k]===r[i+v]?x(i+k++,i+v++):k<p&&(v===n||C[(k+1)*h+v]>=C[k*h+v+1])?x(i+k++,null):x(null,i+v++)}for(let h=0;h<s;h++)x(a+h,d+h);return{rows:w,approximate:u,truncated:f>w.length,totalRows:f,omittedRows:f-w.length,leftLineCount:o.length,rightLineCount:r.length,lcsCells:u?0:l}}var ho={before:"Before",after:"After",readonly:"Read-only text comparison",approximate:"Approximate alignment: the changed region is too large for exact matching; lines are paired by position.",truncated:"Preview truncated to the first 2,000 aligned lines; additional lines are not shown.",empty:"Both versions are empty."},at={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},go={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},vo={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},yo={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Le({comparison:e,labels:t={}}){let o=e?.left?.text??"",r=e?.right?.text??"",i=(0,de.useMemo)(()=>Gt(o,r),[o,r]),s=d=>t[d]??ho[d],a=(d,p,n)=>{let l=d&&n!=="equal";return de.default.createElement("td",{style:{...at,background:l?p==="left"?"#d6454520":"#259b4920":void 0}},de.default.createElement("div",{style:go},de.default.createElement("span",{style:vo},d?.number??""),de.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},l?p==="left"?"\u2212":"+":""),de.default.createElement("pre",{style:yo},d?.text??"")))};return de.default.createElement("section",{className:"vcs-text-comparison","aria-label":s("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},i.approximate&&de.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),i.truncated&&de.default.createElement("div",{role:"status",style:{padding:8}},s("truncated")," (",2e3," / ",i.totalRows,")"),de.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},de.default.createElement("thead",null,de.default.createElement("tr",null,de.default.createElement("th",{scope:"col",style:{...at,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),de.default.createElement("th",{scope:"col",style:{...at,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),de.default.createElement("tbody",null,i.rows.map((d,p)=>de.default.createElement("tr",{key:p,"data-kind":d.kind},a(d.left,"left",d.kind),a(d.right,"right",d.kind))))),!i.rows.length&&de.default.createElement("p",{style:{padding:8}},s("empty")))}var Z=oe(require("react"),1);function Jt(e,{width:t,height:o,signal:r,timeoutMs:i=1e4,createURL:s=p=>URL.createObjectURL(p),revokeURL:a=p=>URL.revokeObjectURL(p),createImage:d=()=>new Image}={}){return new Promise((p,n)=>{if(r?.aborted){n(r.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(t)||!Number.isInteger(o)||t<1||o<1||t>8192||o>8192||t*o>16e6||!Number.isFinite(i)||i<=0){n(new Error("Invalid image preview"));return}let l,u,w,f=!1,x=!1,h=()=>{x||(x=!0,u&&(u.src=""),l&&a(l))},C=()=>{clearTimeout(w),r?.removeEventListener("abort",v)},k=y=>{f||(f=!0,C(),h(),n(y))},v=()=>k(r.reason||new Error("Image cancelled"));try{l=s(e),u=d(),r?.addEventListener("abort",v,{once:!0}),w=setTimeout(()=>k(new Error("Image decode timed out")),i),u.src=l,Promise.resolve(u.decode()).then(()=>{if(!f){if(r?.aborted){v();return}if(u.naturalWidth!==t||u.naturalHeight!==o){k(new Error("Image dimensions mismatch"));return}f=!0,C(),p({url:l,dispose:h})}},k)}catch(y){k(y)}})}function bo({side:e,sessionId:t,repositoryId:o,commit:r,parentIndex:i,base:s,target:a,workspace:d=!1,mode:p,id:n,rpc:l,t:u,onRediscover:w}){let[f,x]=(0,Z.useState)(null),[h,C]=(0,Z.useState)(""),[k,v]=(0,Z.useState)(0);return(0,Z.useEffect)(()=>{let y=new AbortController,b;return x(null),C(""),(async()=>{let m=await l(d?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",d?{sessionId:t,repositoryId:o,mode:p,id:n,side:e}:s?{sessionId:t,repositoryId:o,base:s,target:a,id:n,side:e}:{sessionId:t,repositoryId:o,commit:r,parentIndex:i,id:n,side:e},y.signal);if(y.signal.aborted)return;if(m.absent){x(m);return}if(!["image/png","image/jpeg","image/webp"].includes(m.mime)||typeof m.base64!="string"||m.base64.length>2796204||!Number.isInteger(m.bytes)||m.bytes<1||m.bytes>2097152)throw Error(u("imageInvalid"));let g=atob(m.base64);if(g.length!==m.bytes)throw Error(u("imageInvalid"));let N=new Blob([Uint8Array.from(g,S=>S.charCodeAt(0))],{type:m.mime});if(b=await Jt(N,{width:m.width,height:m.height,signal:y.signal}),y.signal.aborted){b.dispose();return}x({...m,url:b.url})})().catch(m=>{y.signal.aborted||(C(m.message),m.code==="vcs/rediscover-required"&&w())}),()=>{y.abort(),b?.dispose()}},[e,t,o,r,i,s,a,d,p,n,k]),Z.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},Z.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),h?Z.default.createElement("p",{role:"alert"},h," ",Z.default.createElement("button",{onClick:()=>v(y=>y+1)},u("retry"))):f?Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,Z.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?Z.default.createElement("p",null,u("imageAbsent")):Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),Z.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&Z.default.createElement("p",null,u("imageMetadata")))):Z.default.createElement("p",{role:"status"},u("loading")))}function He(e){let[t,o]=(0,Z.useState)(!1);return Z.default.createElement("div",null,Z.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("imageCompare")),t&&Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,e.t("imageScope")),Z.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(r=>Z.default.createElement(bo,{key:r,...e,side:r})))))}var K=oe(require("react"),1);var ae=oe(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 ve=require("react");function zt({load:e,node:t,comparison:o,key:r,single:i=!1,onReady:s=()=>{},onError:a=()=>{},onComputation:d=()=>{}}){let p=new AbortController,n,l=!1,u=()=>{let f=n;n=void 0,f?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),e(p.signal))).then(f=>{l||(n=f.createDiff(t,{single:i,onComputation:x=>{l||d(x)}}),n.setContent(o,r),l||s(n))}).catch(f=>{try{u()}finally{l||a(f)}}),dispose(){l||(l=!0,p.abort(),u())}}}async function Ie(e,{signal:t,fetcher:o=fetch,importer:r=i=>import(i)}={}){let i=await o(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 s=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(s))throw new Error("Editor resource returned "+(s||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),t?.throwIfAborted(),r(e)}var Ne="0.5.1";function _t({comparison:e,identity:t,enabled:o,single:r,line:i,sideBySide:s,ignoreWhitespace:a,wrap:d}){let p=(0,ve.useRef)(null),n=(0,ve.useRef)(null),[l,u]=(0,ve.useState)(!1),[w,f]=(0,ve.useState)(""),[x,h]=(0,ve.useState)("pending");return(0,ve.useEffect)(()=>{if(u(!1),h("pending"),f(""),!o)return;let C=y=>new URL("vcs-assets/"+y,document.baseURI).href,k=document.createElement("link");k.rel="stylesheet",k.href=C("editor.css"),document.head.appendChild(k);let v=zt({node:p.current,comparison:e,key:t,single:r,load:y=>Ie(C("editor.js")+"?v="+encodeURIComponent(Ne)+"&retry=0",{signal:y}),onReady:y=>{n.current=y,u(!0)},onError:y=>f(y.message),onComputation:h});return()=>{n.current=null;try{v.dispose()}finally{k.remove()}}},[o,e,t,r]),(0,ve.useEffect)(()=>{l&&r&&i&&n.current?.revealLine(i)},[l,r,i]),(0,ve.useEffect)(()=>{l&&n.current?.options({sideBySide:s,ignoreWhitespace:a,wrap:d})},[l,s,a,d]),{node:p,viewer:n,ready:l,error:w,computation:x}}function ye({comparison:e,identity:t,t:o,single:r=!1,line:i=null,initialOptions:s,onOptionsChange:a}){let[d,p]=(0,ae.useState)(s?.sideBySide!==!1),[n,l]=(0,ae.useState)(s?.ignoreWhitespace===!0),[u,w]=(0,ae.useState)(s?.wrap===!0),[f,x]=(0,ae.useState)(s?.enabled!==!1),h=m=>a?.({sideBySide:d,ignoreWhitespace:n,wrap:u,enabled:f,...m}),{node:C,viewer:k,ready:v,error:y,computation:b}=_t({comparison:e,identity:t,enabled:f,single:r,line:i,sideBySide:d,ignoreWhitespace:n,wrap:u});return ae.default.createElement("div",{className:"vcs-history-viewer"},ae.default.createElement("div",{className:"vcs-history-viewer-toolbar"},ae.default.createElement("button",{"aria-pressed":f,onClick:()=>{x(!f),h({enabled:!f})}},o(f?"historyBasic":"historyAdvanced")),v&&!r&&ae.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},ae.default.createElement("button",{"aria-pressed":d,onClick:()=>{p(!d),h({sideBySide:!d})}},o(d?"side":"inline")),ae.default.createElement("label",null,ae.default.createElement("input",{type:"checkbox",checked:n,onChange:m=>{l(m.target.checked),h({ignoreWhitespace:m.target.checked})}}),o("whitespace")),ae.default.createElement("label",null,ae.default.createElement("input",{type:"checkbox",checked:u,onChange:m=>{w(m.target.checked),h({wrap:m.target.checked})}}),o("wrap")),ae.default.createElement("button",{onClick:()=>k.current?.navigate("previous")},o("previous")),ae.default.createElement("button",{onClick:()=>k.current?.navigate("next")},o("next")))),f&&!v&&!y&&ae.default.createElement("p",{role:"status"},o("loading")),e.large&&!r&&v&&ae.default.createElement("p",{role:"status"},o(b==="complete"?"diffComplete":b==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!v&&ae.default.createElement("p",{role:"status"},o("largeFallback")),y&&ae.default.createElement("p",{role:"status"},o("fallback")," ",y),ae.default.createElement("div",{key:"editor-host",className:"vcs-history-editor-host",style:{position:"relative",height:"var(--vcs-history-editor-height, 360px)"}},ae.default.createElement("div",{ref:C,style:{position:"absolute",inset:0,visibility:v?"visible":"hidden"},"aria-hidden":!v}),!v&&ae.default.createElement(Le,{comparison:e,labels:qe(o)})))}function lt({sessionId:e,repositoryId:t,mode:o,id:r,rpc:i,t:s,onRediscover:a}){let[d,p]=(0,K.useState)(null),[n,l]=(0,K.useState)(""),[u,w]=(0,K.useState)(0),[f,x]=(0,K.useState)(1),[h,C]=(0,K.useState)(3);(0,K.useEffect)(()=>{let S=new AbortController;return p(null),l(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:o,id:r},S.signal).then(L=>{S.signal.aborted||p(L)}).catch(L=>{S.signal.aborted||(l(L.message),L.code==="vcs/rediscover-required"&&a())}),()=>S.abort()},[e,t,o,r,u]);let k={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},v=s("conflictStageMissing"),y=k[f],b=k[h],m=(0,K.useMemo)(()=>{if(!d)return null;let S=D=>d.stages.find(I=>I.stage===D),L=D=>{let I=S(D);return!I||!I.present?{text:"",label:k[D]}:{text:I.text,label:k[D],...I.binary?{binary:!0}:{},...I.encoding?{encoding:I.encoding}:{},...I.notice?{notice:I.notice}:{}}},P=L(f),q=L(h),$=[P.notice,q.notice].filter(Boolean);return S(f)?.present&&S(h)?.present||$.push(v),{path:d.path,left:P,right:q,binary:!!(P.binary||q.binary),...$.length?{notice:[...new Set($)].join(" \xB7 ")}:{}}},[d,f,h,y,b,v]);if(n)return K.default.createElement("section",{"aria-label":s("conflictStages")},K.default.createElement("h4",null,s("conflictStages")),K.default.createElement("p",{role:"alert"},n," ",K.default.createElement("button",{onClick:()=>w(S=>S+1)},s("retry"))));if(!d||!m)return K.default.createElement("section",{"aria-label":s("conflictStages")},K.default.createElement("h4",null,s("conflictStages")),K.default.createElement("p",{role:"status"},s("loading")));let g=S=>d.stages.find(L=>L.stage===S),N=m.binary&&!m.left.text&&!m.right.text;return K.default.createElement("section",{"aria-label":s("conflictStages")},K.default.createElement("h4",null,s("conflictStages")),K.default.createElement("p",null,s("conflictStagesScope")),K.default.createElement("ul",null,[1,2,3].map(S=>K.default.createElement("li",{key:S},K.default.createElement("code",null,k[S])," \xB7 ",g(S)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),g(S)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),g(S)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),g(S)?.present&&g(S)?.notice&&" \xB7 "+g(S).notice))),K.default.createElement("label",null,s("conflictStageLeft")," ",K.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:S=>x(Number(S.target.value))},[1,2,3].map(S=>K.default.createElement("option",{key:S,value:S},k[S])))),K.default.createElement("label",null,s("conflictStageRight")," ",K.default.createElement("select",{"aria-label":s("conflictStageRight"),value:h,onChange:S=>C(Number(S.target.value))},[1,2,3].map(S=>K.default.createElement("option",{key:S,value:S},k[S])))),m.notice&&K.default.createElement("p",{role:"status"},m.notice),N?K.default.createElement("p",{role:"status"},s("binary")):K.default.createElement(ye,{key:JSON.stringify([r,f,h,d.snapshot]),comparison:m,identity:JSON.stringify([e,t,o,r,f,h,d.snapshot]),t:s}))}var Kt=oe(require("react"),1);function ct({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let o=e.checkout,r=[];e.pointerMoved&&r.push(t("submodulePointerMoved")),(e.dirty||e.untracked)&&r.push(t("submoduleDirty"));let i=[e.recorded+" \xB7 "+t("submoduleCheckout_"+o),...r].join(" \xB7 ");return Kt.default.createElement("span",{className:"vcs-submodule","data-checkout":o,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:i},t("submoduleBadge")," ",e.recorded.slice(0,10),r.length?` \xB7 ${r.join(", ")}`:"")}function Ue(e){return e?.preview!==void 0?e.preview?.canLoadLarge===!0:typeof e?.notice=="string"&&e.notice.includes("2 MiB")}function Ge(e){return typeof e=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(e)}var ie=oe(require("react"),1);function dt(e){return ie.default.createElement(xo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function xo({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i}){let[s,a]=(0,ie.useState)(!1),[d,p]=(0,ie.useState)(null),[n,l]=(0,ie.useState)(""),[u,w]=(0,ie.useState)(0);return(0,ie.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),l(""),o("vcs/svn-identity",{sessionId:e,repositoryId:t},f.signal).then(x=>{f.signal.aborted||p(x)}).catch(x=>{f.signal.aborted||(l(x.message),x.code==="vcs/rediscover-required"&&i())}),()=>f.abort()},[s,e,t,u]),ie.default.createElement("section",null,ie.default.createElement("button",{"aria-expanded":s,onClick:()=>a(f=>!f)},r("svnIdentity")),s&&ie.default.createElement(ie.default.Fragment,null,ie.default.createElement("p",null,r("svnOfflineIdentity")),n?ie.default.createElement("p",{role:"alert"},n," ",ie.default.createElement("button",{onClick:()=>w(f=>f+1)},r("retry"))):d?ie.default.createElement(ie.default.Fragment,null,ie.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>ie.default.createElement(ie.default.Fragment,{key:f},ie.default.createElement("dt",null,f),ie.default.createElement("dd",null,ie.default.createElement("code",null,d[f]))))),ie.default.createElement("p",{role:"status"},r("svnRemoteDisabled"))):ie.default.createElement("p",{role:"status"},r("loading"))))}function Je(e,t,{now:o=Date.now,schedule:r=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=o()||e-o()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,a=r(()=>{s&&(s=!1,t())},e-o());return()=>{s&&(s=!1,i(a))}}function Yt(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 ce=oe(require("react"),1);var J=oe(require("react"),1);function pt(e){return J.default.createElement(So,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function So({sessionId:e,repositoryId:t,rpc:o,t:r,onApproved:i,onRediscover:s}){let[a,d]=(0,J.useState)(!1),[p,n]=(0,J.useState)(null),[l,u]=(0,J.useState)(!1),[w,f]=(0,J.useState)(""),[x,h]=(0,J.useState)(!1),[C,k]=(0,J.useState)(0);(0,J.useEffect)(()=>{if(!a)return;let b=new AbortController;return n(null),u(!1),f(""),h(!0),o("vcs/svn-describe",{sessionId:e,repositoryId:t},b.signal).then(m=>{b.signal.aborted||n(m)}).catch(m=>{b.signal.aborted||(f(m.message),m.code==="vcs/rediscover-required"&&s())}).finally(()=>{b.signal.aborted||h(!1)}),()=>b.abort()},[a,e,t,C]);let[v,y]=(0,J.useState)(0);return(0,J.useEffect)(()=>{if(!a||!p||p.expiresAt===void 0)return;let b=()=>{n(null),u(!1),y(0),h(!1),f(r("svnOfferExpired"))};try{return Je(p.expiresAt,b)}catch{b()}},[a,p]),(0,J.useEffect)(()=>{if(!v||!a||!p)return;let b=new AbortController;return h(!0),f(""),o("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:p.offer,explicit:!0},b.signal).then(m=>{b.signal.aborted||i(m)}).catch(m=>{b.signal.aborted||(f(m.message),u(!1),m.code==="vcs/rediscover-required"&&s())}).finally(()=>{b.signal.aborted||h(!1)}),()=>b.abort()},[v,a,p]),J.default.createElement("section",null,J.default.createElement("button",{"aria-expanded":a,onClick:()=>{y(0),d(b=>!b)}},r("svnConsentReview")),a&&J.default.createElement(J.default.Fragment,null,J.default.createElement("p",null,r("svnConsentScope")),w&&J.default.createElement("p",{role:"alert"},w," ",J.default.createElement("button",{disabled:x,onClick:()=>{y(0),k(b=>b+1)}},r("retry"))),p&&J.default.createElement(J.default.Fragment,null,J.default.createElement("dl",null,["origin","root","uuid","scope"].map(b=>J.default.createElement(J.default.Fragment,{key:b},J.default.createElement("dt",null,b),J.default.createElement("dd",null,J.default.createElement("code",null,p[b]))))),p.remoteEnabled?J.default.createElement(J.default.Fragment,null,J.default.createElement("label",null,J.default.createElement("input",{type:"checkbox",checked:l,disabled:x,onChange:b=>u(b.target.checked)}),r("svnConsentExplicit")),J.default.createElement("button",{disabled:x||!l,onClick:()=>y(b=>b+1)},r("svnConsentApprove"))):J.default.createElement("p",{role:"status"},r("svnRemoteDisabled"))),x&&J.default.createElement("p",{role:"status"},r("loading"))))}var E=oe(require("react"),1);function Qt(e,{since:t,until:o}={}){let r=a=>{if(a==null||a==="")return null;if(typeof a!="string")throw new Error("Invalid SVN history date bound.");let d=a.trim();if(!d)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(d))throw new Error("Invalid SVN history date bound.");return d.slice(0,10)},i=r(t),s=r(o);return!i&&!s?e:Array.isArray(e)?e.filter(a=>{let d=a&&typeof a.date=="string"?a.date.trim():"",p=/^\d{4}-\d{2}-\d{2}/.test(d)?d.slice(0,10):"";return!(!p||i&&p<i||s&&p>s)}):[]}function ze(e,t,o){let r=o?[...e.commits.filter(i=>!t.commits.some(s=>s.id===i.id)),...t.commits]:t.commits;return{...t,windowEnd:o+t.commits.length,commits:r.slice(-200)}}function $t(e,t,o){let r=ze({commits:(e?.entries||[]).map(i=>({...i,id:i.revision}))},{...t,commits:t.entries.map(i=>({...i,id:i.revision}))},o);return{...t,windowEnd:r.windowEnd,entries:r.commits.map(({id:i,...s})=>s)}}var ko=9223372036854775807n;function Co(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let t=BigInt(e);if(t>ko)throw new Error("SVN revision exceeds supported range");return t}function ut(e){let t=Co(e);return t===0n?null:String(t-1n)}function mt(e){return E.default.createElement(No,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function No({sessionId:e,repositoryId:t,token:o,snapshot:r,rpc:i,t:s,onRediscover:a}){let[d,p]=(0,E.useState)({cursor:r,offset:0,trail:[]}),[n,l]=(0,E.useState)(null),[u,w]=(0,E.useState)(null),[f,x]=(0,E.useState)(!0),[h,C]=(0,E.useState)(""),[k,v]=(0,E.useState)(0),[y,b]=(0,E.useState)(""),[m,g]=(0,E.useState)(""),{cursor:N,offset:S}=d;(0,E.useEffect)(()=>{let D=new AbortController;return x(!0),C(""),i("vcs/svn-log",{sessionId:e,repositoryId:t,token:o,snapshot:r,cursor:N,limit:50},D.signal).then(I=>{if(!D.signal.aborted){let A=$t(n,I,S);l(A);let U=new Set((n?.entries||[]).filter(Y=>!A.entries.some(he=>he.revision===Y.revision)).map(Y=>Y.revision));w(Y=>U.has(Y)?null:Y)}}).catch(I=>{D.signal.aborted||(C(I.message),I.code==="vcs/rediscover-required"&&a())}).finally(()=>{D.signal.aborted||x(!1)}),()=>D.abort()},[N,S,k]);let L=()=>p(D=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...D.trail,{cursor:N,offset:S}].slice(-200)})),P=()=>{let D=d.trail.at(-1);D&&(w(null),l(null),p({...D,trail:d.trail.slice(0,-1)}))},q=n?.entries||[],$="";try{q=Qt(q,{since:y,until:m})}catch(D){$=D.message}return E.default.createElement("section",{className:"vcs-history vcs-history-browser vcs-svn-history","aria-label":s("history"),"aria-busy":f},E.default.createElement("div",{className:"vcs-history-list"},E.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",r),E.default.createElement("details",{className:"vcs-help"},E.default.createElement("summary",null,s("historySearchHelp")),E.default.createElement("p",null,s("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((D,I)=>E.default.createElement("label",{key:D},s(D)," ",E.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(D),value:I?m:y,onChange:A=>{w(null),I?g(A.target.value):b(A.target.value)}})))),$&&E.default.createElement("p",{role:"alert"},$),!!n?.entries.length&&E.default.createElement("p",{role:"status"},s("historyWindow"),": ",n.windowEnd-n.entries.length,"\u2013",n.windowEnd),E.default.createElement("ol",{className:"vcs-commit-list"},q.map(D=>E.default.createElement("li",{key:D.revision},E.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===D.revision,onClick:()=>w(D.revision)},E.default.createElement("span",{className:"vcs-commit-subject"},"r",D.revision," \xB7 ",D.message.split(/\r?\n/)[0])),E.default.createElement("div",{className:"vcs-commit-meta"},E.default.createElement("code",null,"r",D.revision)," \xB7 ",D.author," \xB7 ",E.default.createElement("time",{dateTime:D.date},D.date))))),f&&E.default.createElement("p",{role:"status"},s("loading")),h&&E.default.createElement("p",{role:"alert"},h," ",E.default.createElement("button",{onClick:()=>v(D=>D+1)},s("retry"))),!f&&!h&&!n?.entries.length&&E.default.createElement("p",null,s("historyEmpty")),!!n?.entries.length&&!q.length&&E.default.createElement("p",{role:"status"},s("historyNoMatch")),!!d.trail.length&&E.default.createElement("button",{disabled:f,onClick:P},s("historyBack")),!h&&n?.nextRevision!=null&&E.default.createElement("button",{disabled:f,onClick:L},s("historyMore"))),E.default.createElement("div",{className:"vcs-history-details"},u&&E.default.createElement(Eo,{key:u,sessionId:e,repositoryId:t,token:o,snapshot:r,rpc:i,t:s,onRediscover:a,revision:u})))}function Eo({sessionId:e,repositoryId:t,token:o,snapshot:r,revision:i,rpc:s,t:a,onRediscover:d}){let[p,n]=(0,E.useState)(null),[l,u]=(0,E.useState)(null),[w,f]=(0,E.useState)(""),[x,h]=(0,E.useState)(0),[C,k]=(0,E.useState)(""),[v,y]=(0,E.useState)(!1);(0,E.useEffect)(()=>{let m=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:t,token:o,snapshot:r,revision:i},m.signal).then(g=>{m.signal.aborted||n(g)}).catch(g=>{m.signal.aborted||(f(g.message),g.code==="vcs/rediscover-required"&&d())}),()=>m.abort()},[x]);let b=(p?.changes||[]).filter(m=>m.path.toLocaleLowerCase().includes(C.toLocaleLowerCase()));return E.default.createElement("section",{className:"vcs-commit-details"+(v?" vcs-commit-focused":""),"aria-label":a("commitDetails")},w?E.default.createElement("p",{role:"alert"},w," ",E.default.createElement("button",{onClick:()=>h(m=>m+1)},a("retry"))):p?E.default.createElement("div",{className:"vcs-commit-sidebar"},E.default.createElement("header",{className:"vcs-commit-summary"},E.default.createElement("h3",null,p.message?.split(/\r?\n/)[0]||"r"+i),E.default.createElement("code",{className:"vcs-commit-oid"},"r",i),E.default.createElement("p",null,p.author," \xB7 ",p.date),E.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},p.message),E.default.createElement("p",null,ut(i)===null?a("commitRoot"):"r"+ut(i)," \u2192 r",i)),E.default.createElement("aside",{className:"vcs-commit-picker"},E.default.createElement("label",null,a("commitFileSearch")," ",E.default.createElement("input",{"aria-label":a("commitFileSearch"),value:C,onChange:m=>{k(m.target.value),u(null)}})),E.default.createElement("span",null,b.length," / ",p.changes.length),E.default.createElement("ul",{className:"vcs-commit-files"},b.map(m=>E.default.createElement("li",{key:m.id},E.default.createElement("button",{disabled:m.kind!=="file","aria-pressed":l?.id===m.id&&l.mode==="compare",onClick:()=>u({id:m.id,mode:"compare"})},E.default.createElement("span",{className:"vcs-file-status"},m.action," \xB7 "),E.default.createElement("span",{className:"vcs-file-path",title:m.path},m.path,m.copyFromPath&&E.default.createElement("small",null,"\u2190 ",m.copyFromPath," @r",m.copyFromRevision))),m.kind==="file"&&E.default.createElement("div",{className:"vcs-svn-file-actions"},E.default.createElement("button",{onClick:()=>u({id:m.id,mode:"trace"})},a("fileHistory")),m.copyFromPath&&m.copyFromRevision&&!m.copySourceOutsideScope&&E.default.createElement("button",{onClick:()=>u({id:m.id,mode:"copytrace"})},a("svnCopyHistory")," \xB7 ",m.copyFromPath," @r",m.copyFromRevision),m.copySourceOutsideScope&&E.default.createElement("span",null,a("svnCopyOutside")))))),!!p.changes.length&&!b.length&&E.default.createElement("p",{role:"status"},a("emptySearch")),!p.changes.length&&E.default.createElement("p",null,a("commitNoChanges")))):E.default.createElement("p",{role:"status"},a("loading")),E.default.createElement("div",{className:"vcs-commit-review"},E.default.createElement("div",{className:"vcs-commit-comparison","aria-label":a("comparisonContext")},l&&E.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":v,onClick:()=>y(m=>!m)},a(v?"comparisonRestore":"comparisonFocus")),l?E.default.createElement(Lo,{key:JSON.stringify(l),sessionId:e,repositoryId:t,token:o,snapshot:r,revision:i,rpc:s,t:a,onRediscover:d,...l}):E.default.createElement("p",{role:"status"},a("pick")))))}function Lo({sessionId:e,repositoryId:t,token:o,snapshot:r,revision:i,rpc:s,t:a,onRediscover:d,id:p,mode:n}){let[l,u]=(0,E.useState)(null),[w,f]=(0,E.useState)({cursor:null,trail:[]}),[x,h]=(0,E.useState)(""),[C,k]=(0,E.useState)(0),{cursor:v,trail:y}=w;return(0,E.useEffect)(()=>{let b=new AbortController;return u(null),h(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:t,token:o,snapshot:r,revision:i,id:p,...v===null?{}:{cursor:v}},b.signal).then(m=>{b.signal.aborted||u(m)}).catch(m=>{b.signal.aborted||(h(m.message),m.code==="vcs/rediscover-required"&&d())}),()=>b.abort()},[v,C]),x?E.default.createElement("p",{role:"alert"},x," ",E.default.createElement("button",{onClick:()=>k(b=>b+1)},a("retry"))):l?n==="compare"?E.default.createElement("section",{className:"vcs-history-comparison"},E.default.createElement("header",{className:"vcs-comparison-heading"},E.default.createElement("h4",null,l.path),E.default.createElement("p",null,l.left?.label," \u2194 ",l.right?.label),l.notice&&E.default.createElement("p",{role:"status"},l.notice)),l.binary?E.default.createElement("p",null,a("binary")):E.default.createElement(ye,{comparison:l,identity:JSON.stringify([e,t,r,i,p]),t:a})):E.default.createElement("section",null,E.default.createElement("p",null,a(n==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",l.path," \xB7 peg r",l.pegRevision),E.default.createElement("ol",null,l.entries.map(b=>E.default.createElement("li",{key:b.revision},"r",b.revision," \xB7 ",b.message))),!!y.length&&E.default.createElement("button",{onClick:()=>f({cursor:y.at(-1),trail:y.slice(0,-1)})},a("historyBack")),l.nextRevision!==null&&E.default.createElement("button",{onClick:()=>f({cursor:l.nextRevision,trail:[...y,v].slice(-200)})},a("historyMore"))):E.default.createElement("p",{role:"status"},a("loading"))}function ft(e){return ce.default.createElement(Ho,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Ho({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i}){let[s,a]=(0,ce.useState)(null),[d,p]=(0,ce.useState)(!1),[n,l]=(0,ce.useState)(""),[u,w]=(0,ce.useState)(0);(0,ce.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>o("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token})).catch(()=>{})}},[s,e,t]),(0,ce.useEffect)(()=>{if(s)try{return Je(s.expiresAt,()=>{a(null),w(0),p(!1),l(r("svnExpired"))})}catch{a(null),l(r("svnExpired"))}},[s]),(0,ce.useEffect)(()=>{if(!u||!s)return;let h=new AbortController;return p(!0),l(""),o("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token},h.signal).then(()=>{h.signal.aborted||a(null)}).catch(C=>{h.signal.aborted||(l(C.message),C.code==="vcs/rediscover-required"&&i())}).finally(()=>{h.signal.aborted||p(!1)}),()=>h.abort()},[u,s]);let f=h=>{try{Yt(h),l(""),w(0),a(h)}catch(C){l(C.message)}},x=async(...h)=>{try{return await o(...h)}catch(C){throw C.code==="vcs/svn-consent-required"&&!h[2]?.aborted&&(a(null),w(0),l(r("svnExpired"))),C}};return ce.default.createElement("section",{className:"vcs-svn-remote"},!s&&n&&ce.default.createElement("p",{role:"status"},n),s?ce.default.createElement(ce.default.Fragment,null,ce.default.createElement("p",null,r("svnGrantScope")),ce.default.createElement("button",{disabled:d,onClick:()=>w(h=>h+1)},r("svnRevoke")),n&&ce.default.createElement("p",{role:"alert"},n),!d&&ce.default.createElement(mt,{sessionId:e,repositoryId:t,t:r,onRediscover:i,rpc:x,token:s.token,snapshot:s.snapshot})):ce.default.createElement(pt,{sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i,onApproved:f}))}var H=oe(require("react"),1);function Xt(e){let t=new Map;for(let o of e){let r=t.get(o.commit);r||(r={names:[],hidden:0},t.set(o.commit,r)),r.names.length<3?r.names.push(o.name):r.hidden++}return t}var O=oe(require("react"),1);var F=oe(require("react"),1);var ee=oe(require("react"),1);var re=oe(require("react"),1);function ht(e){return re.default.createElement(Po,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function Po({sessionId:e,repositoryId:t,commit:o,path:r,rpc:i,t:s,onRediscover:a}){let[d,p]=(0,re.useState)(!1),[n,l]=(0,re.useState)([0]),[u,w]=(0,re.useState)(null),[f,x]=(0,re.useState)(""),[h,C]=(0,re.useState)(0),k=n.at(-1);(0,re.useEffect)(()=>{if(!d)return;let y=new AbortController;return w(null),x(""),i("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:o,path:r,offset:k},y.signal).then(b=>{y.signal.aborted||w(b)}).catch(b=>{y.signal.aborted||(x(b.message),b.code==="vcs/rediscover-required"&&a())}),()=>y.abort()},[d,k,e,t,o,r,h]);let v=(0,re.useMemo)(()=>u?{path:r,left:{label:o,text:u.text},right:{label:o,text:u.text}}:null,[u,r,o]);return re.default.createElement("section",null,re.default.createElement("button",{"aria-expanded":d,onClick:()=>p(y=>!y)},s("segments")),d&&re.default.createElement(re.default.Fragment,null,re.default.createElement("p",null,s("segmentScope")),f?re.default.createElement("p",{role:"alert"},f," ",re.default.createElement("button",{onClick:()=>C(y=>y+1)},s("retry"))):u?re.default.createElement(re.default.Fragment,null,re.default.createElement("p",null,s("segmentBytes"),": ",u.offset,"\u2013",u.endOffset," / ",u.totalBytes," \xB7 ",re.default.createElement("code",null,u.oid)),re.default.createElement("button",{disabled:n.length===1,onClick:()=>l(y=>y.slice(0,-1))},s("previous")),re.default.createElement("button",{disabled:u.nextOffset===null,onClick:()=>l(y=>[...y,u.nextOffset])},s("next")),re.default.createElement(ye,{single:!0,comparison:v,identity:JSON.stringify([e,t,o,r,k]),t:s})):re.default.createElement("p",{role:"status"},s("loading"))))}var V=oe(require("react"),1);function _e(e,t,o){let i=o>0&&e.nextOffset===o&&(e.pageOffset??-1)<o?[...e.commits,...t.commits]:t.commits,s=i.filter((a,d)=>i.findIndex(p=>p.id===a.id)===d).slice(-200);return{...t,commits:s,pageOffset:o,windowEnd:o+t.commits.length,windowStart:Math.max(0,o+t.commits.length-s.length)}}function Ke(e){return Math.max(0,e-50)}function Ao({sessionId:e,repositoryId:t,commit:o,path:r,follow:i,since:s,until:a,rpc:d,t:p,onRediscover:n,onSelectCommit:l}){let[u,w]=(0,V.useState)({commits:[],nextOffset:null}),[f,x]=(0,V.useState)(0),[h,C]=(0,V.useState)(0),[k,v]=(0,V.useState)(!0),[y,b]=(0,V.useState)("");(0,V.useEffect)(()=>{let g=new AbortController;return v(!0),b(""),d("vcs/tree-history",{sessionId:e,repositoryId:t,commit:o,path:r,offset:f,limit:50,follow:i,...s?{since:s}:{},...a?{until:a}:{}},g.signal).then(N=>{g.signal.aborted||w(S=>_e(S,N,f))}).catch(N=>{g.signal.aborted||(b(N.message),N.code==="vcs/rediscover-required"&&n())}).finally(()=>{g.signal.aborted||v(!1)}),()=>g.abort()},[e,t,o,r,f,h,i,s,a]);let m=g=>p(g.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":g.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":g.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return V.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":k},V.default.createElement("p",null,p("pathHistoryScope")),V.default.createElement("p",{style:{overflowWrap:"anywhere"}},V.default.createElement("code",null,u.path||r)," \xB7 ",V.default.createElement("code",null,o),u.followsRenames!==void 0&&V.default.createElement(V.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),V.default.createElement("ol",null,u.commits.map(g=>V.default.createElement("li",{key:g.id},V.default.createElement("code",{title:g.id},g.id.slice(0,10))," \xB7 ",l?V.default.createElement("button",{onClick:()=>l(g.id,g.path||r)},g.subject):g.subject,V.default.createElement("div",null,g.boundary&&V.default.createElement("span",null,m(g)," "),g.path&&V.default.createElement("code",null,g.oldPath?g.oldPath+" \u2192 ":"",g.path)," ",g.similarity!==void 0&&V.default.createElement("span",null,p("fileHistorySimilarity"),": ",g.similarity,"% \xB7 "),g.author," \xB7 ",V.default.createElement("time",{dateTime:g.date},g.date))))),k&&V.default.createElement("p",{role:"status"},p("loading")),y&&V.default.createElement("p",{role:"alert"},y," ",V.default.createElement("button",{onClick:()=>C(g=>g+1)},p("retry"))),!k&&!y&&!u.commits.length&&V.default.createElement("p",null,p("historyEmpty")),u.truncated&&V.default.createElement("p",{role:"status"},p("historyLimit")),!!f&&V.default.createElement("button",{disabled:k,onClick:()=>x(Ke(f))},p("historyBack")),!y&&u.nextOffset!==null&&V.default.createElement("button",{disabled:k,onClick:()=>x(u.nextOffset)},p("historyMore")))}function gt(e){let[t,o]=(0,V.useState)(!1),[r,i]=(0,V.useState)(!1),[s,a]=(0,V.useState)(""),[d,p]=(0,V.useState)("");return V.default.createElement("div",null,V.default.createElement("button",{"aria-expanded":t,onClick:()=>o(n=>!n)},e.t("pathHistory")),t&&V.default.createElement(V.default.Fragment,null,V.default.createElement("label",null,V.default.createElement("input",{type:"checkbox",checked:r,onChange:n=>i(n.target.checked)}),e.t("fileHistoryFollow")),V.default.createElement("p",null,e.t("pathHistoryFollowScope")),V.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>V.default.createElement("label",{key:n},e.t(n)," ",V.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?d:s,onChange:u=>l?p(u.target.value):a(u.target.value)}))),V.default.createElement(Ao,{key:JSON.stringify([r,s.trim(),d.trim()]),follow:r,since:s.trim()||null,until:d.trim()||null,...e})))}function ke({sessionId:e,repositoryId:t,commit:o,path:r,rpc:i,t:s,onRediscover:a,onClose:d,onSelectCommit:p,line:n=null,initialViewer:l,onViewerChange:u}){let[w,f]=(0,ee.useState)(null),[x,h]=(0,ee.useState)(""),[C,k]=(0,ee.useState)(0);(0,ee.useEffect)(()=>{let y=new AbortController;return f(null),h(""),i("vcs/tree-file",{sessionId:e,repositoryId:t,commit:o,path:r},y.signal).then(b=>{y.signal.aborted||f(b)}).catch(b=>{y.signal.aborted||(h(b.message),b.code==="vcs/rediscover-required"&&a())}),()=>y.abort()},[e,t,o,r,C]);let v=(0,ee.useMemo)(()=>w?{path:r,left:{label:o,text:w.text||""},right:{label:o,text:w.text||""}}:null,[w,r,o]);return ee.default.createElement("section",{"aria-label":s("treePreview")},ee.default.createElement("h4",null,r),ee.default.createElement("button",{onClick:d},s("treeClose")),ee.default.createElement("p",null,ee.default.createElement("code",null,o)),x?ee.default.createElement("p",{role:"alert"},x," ",ee.default.createElement("button",{onClick:()=>k(y=>y+1)},s("retry"))):w?ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("p",null,ee.default.createElement("code",null,w.oid)," \xB7 ",s("encoding"),": ",w.encoding||"\u2014"),n&&ee.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,!w.text||n>w.text.split(`
180
+ `).length?" \xB7 "+s("blameUnmapped"):""),w.notice&&ee.default.createElement("p",{role:"status"},w.notice),w.binary?ee.default.createElement("p",null,s("binary")):w.text===""?ee.default.createElement("p",null,s("treeEmpty")):ee.default.createElement(ye,{initialOptions:l,onOptionsChange:u,single:!0,line:n,comparison:v,identity:JSON.stringify([e,t,o,r]),t:s})):ee.default.createElement("p",{role:"status"},s("loading")),ee.default.createElement(ht,{sessionId:e,repositoryId:t,commit:o,path:r,rpc:i,t:s,onRediscover:a}),ee.default.createElement(gt,{key:JSON.stringify([e,t,o,r]),sessionId:e,repositoryId:t,commit:o,path:r,rpc:i,t:s,onRediscover:a,onSelectCommit:p}))}function Zt(e=""){let t=[{path:"",name:"/"}];if(e){let o="";for(let r of e.split("/"))o=o?o+"/"+r:r,t.push({path:o,name:r})}return t}function Rt(e,t="",o=""){let r=t?t+"/":"",i=o.toLowerCase();return e.filter(s=>{let a=s.path.slice(r.length);return s.path.startsWith(r)&&a.length>0&&!a.includes("/")&&a.toLowerCase().includes(i)}).sort((s,a)=>+(a.type==="tree")-+(s.type==="tree")||(s.path<a.path?-1:s.path>a.path?1:0))}function Bo({sessionId:e,repositoryId:t,commit:o,rpc:r,t:i,onRediscover:s,onSelectCommit:a,initialLocation:d}){let[p,n]=(0,F.useState)(null),[l,u]=(0,F.useState)(""),[w,f]=(0,F.useState)(0),[x,h]=(0,F.useState)(d?.directory||""),[C,k]=(0,F.useState)(d?.offset||0),[v,y]=(0,F.useState)(d?.query||""),[b,m]=(0,F.useState)(d?.path||null),[g,N]=(0,F.useState)(!1),[S,L]=(0,F.useState)(!0),P=(0,F.useRef)(null),q=(0,F.useRef)(d?.path||null),$=(0,F.useRef)(d?.viewer),D=M=>{q.current=M,$.current=void 0,m(M)},I=(M,ge,ue={})=>a?.(M,ge,{...ue,returnLocation:{source:"tree",tree:{directory:x,offset:C,query:v,path:q.current,viewer:$.current}}});(0,F.useEffect)(()=>{let M=new AbortController;return L(!0),u(""),(g?Promise.resolve(P.current):(async()=>{try{return await r("vcs/tree-page",{sessionId:e,repositoryId:t,commit:o,path:x,offset:C,limit:100,...v?{query:v}:{}},M.signal)}catch(te){if(te.code!=="vcs/not-found"&&te.code!=="vcs/unsupported")throw te;return M.signal.throwIfAborted(),{...await r("vcs/tree",{sessionId:e,repositoryId:t,commit:o},M.signal),legacy:!0}}})()).then(te=>{M.signal.aborted||(n({...te,requestKey:JSON.stringify([x,C,v])}),te.legacy&&(P.current=te,N(!0)))}).catch(te=>{M.signal.aborted||(u(te.message),te.code==="vcs/rediscover-required"&&s())}).finally(()=>{M.signal.aborted||L(!1)}),()=>M.abort()},[e,t,o,x,C,v,w,g]);let A=M=>{h(M),k(0),y(""),D(null)};if(l&&!p)return F.default.createElement("p",{role:"alert"},l," ",F.default.createElement("button",{onClick:()=>f(M=>M+1)},i("retry")));if(!p)return F.default.createElement("p",{role:"status"},i("loading"));let U=p.legacy||p.requestKey===JSON.stringify([x,C,v]),Y=x?x+"/":"",he=U?Rt(p.entries,x,v):[],Se=p.legacy?he.slice(C,C+100):he,be=U?p.legacy?C+100<he.length?C+100:null:p.nextOffset:null;return F.default.createElement("section",{"aria-label":i("historicalTree"),"aria-busy":S},S&&F.default.createElement("p",{role:"status"},i("loading")),l&&F.default.createElement("p",{role:"alert"},l," ",F.default.createElement("button",{onClick:()=>f(M=>M+1)},i("retry"))),F.default.createElement("p",null,i("historicalTreeScope")),F.default.createElement("code",null,o),F.default.createElement("p",null,x||"/"," ",x&&F.default.createElement("button",{onClick:()=>A(x.includes("/")?x.slice(0,x.lastIndexOf("/")):"")},i("treeUp"))),F.default.createElement("nav",{"aria-label":i("treeBreadcrumbs")},Zt(x).map(M=>F.default.createElement(F.default.Fragment,{key:M.path},M.path&&" / ",M.path===x?F.default.createElement("span",{"aria-current":"location"},M.name):F.default.createElement("button",{onClick:()=>A(M.path)},M.name)))),F.default.createElement("label",null,i("treeSearch")," ",F.default.createElement("input",{"aria-label":i("treeSearch"),maxLength:1024,value:v,onChange:M=>{y(M.target.value),k(0),D(null)}})),F.default.createElement("p",null,Se.length," ",i("treeEntries")),!S&&U&&!Se.length&&v&&F.default.createElement("p",{role:"status"},i("emptySearch")),F.default.createElement("ul",null,Se.map(M=>F.default.createElement("li",{key:M.path},M.type==="tree"?F.default.createElement("button",{onClick:()=>A(M.path)},M.path.slice(Y.length),"/"):M.type==="blob"&&["100644","100755"].includes(M.mode)?F.default.createElement("button",{"aria-pressed":b===M.path,onClick:()=>D(M.path)},M.path.slice(Y.length)):F.default.createElement("span",null,M.path.slice(Y.length))," \xB7 ",F.default.createElement("code",null,M.mode," ",M.type," ",F.default.createElement("span",{title:M.oid},M.oid.slice(0,10)))))),p.truncated&&F.default.createElement("p",{role:"status"},i("historyLimit")),C>0&&F.default.createElement("button",{disabled:S,onClick:()=>{k(Math.max(0,C-100)),D(null)}},i("treePrevious")),be!=null&&F.default.createElement("button",{disabled:S,onClick:()=>{k(be),D(null)}},i("treeNext")),b&&F.default.createElement(ke,{key:JSON.stringify([e,t,o,b]),sessionId:e,repositoryId:t,commit:o,rpc:r,t:i,onRediscover:s,onSelectCommit:a?I:void 0,initialViewer:$.current,onViewerChange:M=>{$.current=M},path:b,onClose:()=>D(null)}))}function vt(e){return F.default.createElement(Do,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Do(e){let[t,o]=(0,F.useState)(!!e.initialLocation);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("historicalTree")),t&&F.default.createElement(Bo,{...e}))}function yt(e){return{sideBySide:e?.sideBySide!==!1,ignoreWhitespace:e?.ignoreWhitespace===!0,wrap:e?.wrap===!0,enabled:e?.enabled!==!1}}function we(e={}){let t=typeof e.path=="string"&&e.path.length<=32768?e.path:null;return{id:typeof e.id=="string"?e.id:null,path:t,source:["tree","blame-origin"].includes(e.source)?e.source:"comparison",tree:{directory:typeof e.tree?.directory=="string"?e.tree.directory.slice(0,32768):"",offset:Number.isInteger(e.tree?.offset)&&e.tree.offset>=0&&e.tree.offset<=1e5?e.tree.offset:0,query:typeof e.tree?.query=="string"?e.tree.query.slice(0,1024):"",path:typeof e.tree?.path=="string"&&e.tree.path.length<=32768?e.tree.path:null,viewer:yt(e.tree?.viewer)},origin:e.origin&&typeof e.origin.commit=="string"&&typeof e.origin.path=="string"?{commit:e.origin.commit,path:e.origin.path.slice(0,32768),line:Number.isInteger(e.origin.line)&&e.origin.line>0?e.origin.line:null,viewer:yt(e.origin.viewer)}:null,blameStartLine:Number.isInteger(e.blameStartLine)&&e.blameStartLine>0?e.blameStartLine:1,parentIndex:Number.isInteger(e.parentIndex)&&e.parentIndex>=0&&e.parentIndex<=100?e.parentIndex:0,line:Number.isInteger(e.line)&&e.line>0?e.line:null,fileQuery:typeof e.fileQuery=="string"?e.fileQuery.slice(0,1024):"",focused:e.focused===!0,viewer:yt(e.viewer)}}function er(e,t){return[...e,we(t)].slice(-100)}function bt(e,t){return we({...e,...t,viewer:{...e.viewer,...t.viewer}})}var R=oe(require("react"),1);var j=oe(require("react"),1);function Mo({sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:i,follow:s,since:a,until:d,rpc:p,t:n,onRediscover:l,onSelectCommit:u}){let[w,f]=(0,j.useState)({commits:[],nextOffset:null}),[x,h]=(0,j.useState)(0),[C,k]=(0,j.useState)(0),[v,y]=(0,j.useState)(!0),[b,m]=(0,j.useState)(""),g={...a?{since:a}:{},...d?{until:d}:{}};return(0,j.useEffect)(()=>{let N=new AbortController;return y(!0),m(""),p("vcs/file-history",{sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:i,offset:x,limit:50,follow:s,...g},N.signal).then(S=>{N.signal.aborted||f(L=>_e(L,S,x))}).catch(S=>{N.signal.aborted||(m(S.message),S.code==="vcs/rediscover-required"&&l())}).finally(()=>{N.signal.aborted||y(!1)}),()=>N.abort()},[e,t,o,r,i,x,C,s,a,d]),j.default.createElement("section",{"aria-label":n("fileHistory"),"aria-busy":v},j.default.createElement("p",null,n("fileHistoryScope")),j.default.createElement("p",{style:{overflowWrap:"anywhere"}},w.path," \xB7 ",j.default.createElement("code",null,o)),j.default.createElement("ol",null,w.commits.map(N=>j.default.createElement("li",{key:N.id},j.default.createElement("code",{title:N.id},N.id.slice(0,10))," \xB7 ",u?j.default.createElement("button",{onClick:()=>u(N.id,N.path||w.path)},N.subject):N.subject,j.default.createElement("div",null,N.boundary&&j.default.createElement("span",null,n(N.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":N.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":N.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),N.path&&j.default.createElement("code",null,N.oldPath?N.oldPath+" \u2192 ":"",N.path)," ",N.similarity!==void 0&&j.default.createElement("span",null,n("fileHistorySimilarity"),": ",N.similarity,"% \xB7 "),N.author," \xB7 ",j.default.createElement("time",{dateTime:N.date},N.date))))),v&&j.default.createElement("p",{role:"status"},n("loading")),b&&j.default.createElement("p",{role:"alert"},b," ",j.default.createElement("button",{onClick:()=>k(N=>N+1)},n("retry"))),!v&&!b&&!w.commits.length&&j.default.createElement("p",null,n("historyEmpty")),w.truncated&&j.default.createElement("p",{role:"status"},n("historyLimit")),!!x&&j.default.createElement("button",{disabled:v,onClick:()=>h(Ke(x))},n("historyBack")),!b&&w.nextOffset!==null&&j.default.createElement("button",{disabled:v,onClick:()=>h(w.nextOffset)},n("historyMore")))}function wt(e){return j.default.createElement(Fo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Fo(e){let[t,o]=(0,j.useState)(!1),[r,i]=(0,j.useState)(!1),[s,a]=(0,j.useState)(""),[d,p]=(0,j.useState)("");return j.default.createElement("div",null,j.default.createElement("button",{"aria-expanded":t,onClick:()=>o(n=>!n)},e.t("fileHistory")),t&&j.default.createElement(j.default.Fragment,null,j.default.createElement("label",null,j.default.createElement("input",{type:"checkbox",checked:r,onChange:n=>i(n.target.checked)}),e.t("fileHistoryFollow")),j.default.createElement("p",null,e.t("fileHistoryFollowScope")),j.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>j.default.createElement("label",{key:n},e.t(n)," ",j.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?d:s,onChange:u=>l?p(u.target.value):a(u.target.value)}))),j.default.createElement(Mo,{key:JSON.stringify([r,s.trim(),d.trim()]),follow:r,since:s.trim()||null,until:d.trim()||null,...e})))}var W=oe(require("react"),1);function Oo({sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:i,rpc:s,t:a,onRediscover:d,onSelectCommit:p,onSelectLocation:n,initialOrigin:l,initialStartLine:u}){let[w,f]=(0,W.useState)(null),[x,h]=(0,W.useState)(""),[C,k]=(0,W.useState)(0),[v,y]=(0,W.useState)(u||1),[b,m]=(0,W.useState)(l?{commit:l.commit,path:l.path,originalLine:l.line,viewer:l.viewer}:null);return(0,W.useEffect)(()=>{let g=new AbortController;return f(null),h(""),s("vcs/blame",{sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:i,startLine:v,lineLimit:500},g.signal).then(N=>{g.signal.aborted||f(N)}).catch(N=>{g.signal.aborted||(h(N.message),N.code==="vcs/rediscover-required"&&d())}),()=>g.abort()},[e,t,o,r,i,C,v]),x?W.default.createElement("p",{role:"alert"},x," ",W.default.createElement("button",{onClick:()=>k(g=>g+1)},a("retry"))):w?W.default.createElement("section",{"aria-label":a("blame")},W.default.createElement("p",null,a("blameScope")),p&&W.default.createElement("p",null,a("blameNavigation")),w.notice&&W.default.createElement("p",{role:"status"},w.notice),w.truncated&&W.default.createElement("p",{role:"status"},a("blameLimit")),!w.notice&&!w.lines.length&&W.default.createElement("p",null,a("blameEmpty")),!!w.lines.length&&W.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},W.default.createElement("table",null,W.default.createElement("thead",null,W.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(g=>W.default.createElement("th",{key:g,scope:"col"},a(g))))),W.default.createElement("tbody",null,w.lines.map(g=>W.default.createElement("tr",{key:g.line},W.default.createElement("th",{scope:"row"},g.line),W.default.createElement("td",null,p?W.default.createElement("button",{title:g.commit,onClick:()=>n?n(g.commit,g.path||null,{line:g.originalLine||null}):p(g.commit,g.path||null)},W.default.createElement("code",null,g.commit.slice(0,10))):W.default.createElement("code",{title:g.commit},g.commit.slice(0,10))),W.default.createElement("td",null,g.author),W.default.createElement("td",null,g.summary),W.default.createElement("td",null,W.default.createElement("pre",{style:{margin:0}},g.text),g.path&&g.originalLine?W.default.createElement("button",{onClick:()=>m(g)},a("blameOriginLine"),": ",g.path,":",g.originalLine):W.default.createElement("span",null,a("blameUnmapped")))))))),W.default.createElement("p",null,w.startLine||v,"\u2013",w.lines.at(-1)?.line||v," / ",w.totalLines??"\u2014"),W.default.createElement("button",{disabled:v===1,onClick:()=>{m(null),y(Math.max(1,v-500))}},a("blamePrevious")),W.default.createElement("button",{disabled:w.nextLine==null,onClick:()=>{m(null),y(w.nextLine)}},a("blameNext")),b&&W.default.createElement(ke,{key:JSON.stringify([b.commit,b.path,b.originalLine]),sessionId:e,repositoryId:t,rpc:s,t:a,onRediscover:d,initialViewer:b.viewer,onViewerChange:g=>m(N=>N&&{...N,viewer:g}),onSelectCommit:p?(g,N,S={})=>n?n(g,N,{...S,returnLocation:{source:"blame-origin",blameStartLine:v,origin:{commit:b.commit,path:b.path,line:b.originalLine,viewer:b.viewer}}}):p(g,N):void 0,commit:b.commit,path:b.path,line:b.originalLine,onClose:()=>m(null)})):W.default.createElement("p",{role:"status"},a("loading"))}function xt(e){let[t,o]=(0,W.useState)(!!e.initialOrigin);return W.default.createElement("div",null,W.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("blame")),t&&W.default.createElement(Oo,{...e}))}function Pe(e){return R.default.createElement(To,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function To({sessionId:e,repositoryId:t,commit:o,parentIndex:r,base:i,target:s,id:a,rpc:d,t:p,onRediscover:n,onSelectCommit:l,initialViewer:u,onViewerChange:w,initialOrigin:f,initialBlameStartLine:x}){let[h,C]=(0,R.useState)(null),[k,v]=(0,R.useState)(""),[y,b]=(0,R.useState)(0),[m,g]=(0,R.useState)(!1);return(0,R.useEffect)(()=>{let N=new AbortController;return C(null),v(""),d(i?"vcs/revision-compare":"vcs/commit-compare",i?{sessionId:e,repositoryId:t,base:i,target:s,id:a,...m?{large:!0}:{}}:{sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:a,...m?{large:!0}:{}},N.signal).then(S=>{N.signal.aborted||C(S)}).catch(S=>{N.signal.aborted||(v(S.message),S.code==="vcs/rediscover-required"&&n())}),()=>N.abort()},[e,t,o,r,i,s,a,y,m]),k?R.default.createElement("p",{role:"alert"},k," ",R.default.createElement("button",{onClick:()=>b(N=>N+1)},p("retry")),m&&R.default.createElement("button",{onClick:()=>g(!1)},p("largeClose"))):h?R.default.createElement("section",{className:"vcs-history-comparison"},R.default.createElement("header",{className:"vcs-comparison-heading"},R.default.createElement("h4",null,h.path),R.default.createElement("p",null,h.left.label," \u2194 ",h.right.label),h.notice&&R.default.createElement("p",{role:"status"},h.notice),m?R.default.createElement("p",null,p("largeScope")," ",R.default.createElement("button",{onClick:()=>g(!1)},p("largeClose"))):Ue(h)&&R.default.createElement("p",null,p("largeScope")," ",R.default.createElement("button",{onClick:()=>g(!0)},p("largeLoad")))),h.binary?R.default.createElement("p",null,p("binary")):R.default.createElement(ye,{initialOptions:u,onOptionsChange:w,comparison:h,identity:JSON.stringify(i?[e,t,i,s,a]:[e,t,o,r,a]),t:p}),R.default.createElement("div",{className:"vcs-comparison-extras"},o&&!i&&R.default.createElement(wt,{onSelectCommit:l,key:"file-history:"+JSON.stringify([e,t,o,r,a]),sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:a,rpc:d,t:p,onRediscover:n}),o&&!i&&R.default.createElement(xt,{initialOrigin:f,initialStartLine:x,onSelectLocation:l,onSelectCommit:l,key:"blame:"+JSON.stringify([e,t,o,r,a]),sessionId:e,repositoryId:t,commit:o,parentIndex:r,id:a,rpc:d,t:p,onRediscover:n}),(o||i)&&R.default.createElement(He,{key:"image:"+JSON.stringify([e,t,o,r,i,s,a]),sessionId:e,repositoryId:t,commit:o,parentIndex:r,base:i,target:s,id:a,rpc:d,t:p,onRediscover:n}))):R.default.createElement("p",{role:"status"},p("loading"),m&&R.default.createElement("button",{onClick:()=>g(!1)},p("largeClose")))}function tr(e,t){if(typeof t!="string"||!t)return null;let o=e.filter(r=>r.path===t);return o.length===1&&typeof o[0].id=="string"&&o[0].id?o[0].id:null}function rr(e,t=""){let o=t.trim().toLowerCase();return o?e.filter(r=>[r.id,r.author,r.subject].some(i=>i?.toLowerCase().includes(o))):e}function Ye(e,t=""){let o=t.trim().toLowerCase();return o?e.filter(r=>[r.path,r.oldPath].some(i=>i?.toLowerCase().includes(o))):e}function Ae(e){return O.default.createElement(Vo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Vo({sessionId:e,repositoryId:t,commit:o,rpc:r,t:i,onRediscover:s,onSelectCommit:a,initialPath:d,initialLocation:p,onLocationChange:n}){let l=(0,O.useRef)(!0),u=we({...p,path:d||p?.path}),w=A=>n?.(A),f=(A,U,Y={})=>a?.(A,U,{returnLocation:{source:"comparison",origin:null},...Y}),[x,h]=(0,O.useState)(null),[C,k]=(0,O.useState)(u.fileQuery),[v,y]=(0,O.useState)(u.focused),[b,m]=(0,O.useState)(u.line),[g,N]=(0,O.useState)(u.parentIndex),[S,L]=(0,O.useState)(null),[P,q]=(0,O.useState)(""),[$,D]=(0,O.useState)(0);if((0,O.useEffect)(()=>{let A=new AbortController;return L(null),q(""),r("vcs/commit",{sessionId:e,repositoryId:t,commit:o,parentIndex:g},A.signal).then(U=>{A.signal.aborted||(L(U),l.current&&(l.current=!1,h(tr(U.changes,u.path))))}).catch(U=>{A.signal.aborted||(q(U.message),U.code==="vcs/rediscover-required"&&s())}),()=>A.abort()},[e,t,o,g,$]),P)return O.default.createElement("p",{role:"alert"},P," ",O.default.createElement("button",{onClick:()=>D(A=>A+1)},i("retry")));if(!S)return O.default.createElement("p",{role:"status"},i("loading"));let I=Ye(S.changes,C);return O.default.createElement("section",{className:"vcs-commit-details"+(v?" vcs-commit-focused":""),"aria-label":i("commitDetails")},O.default.createElement("div",{className:"vcs-commit-sidebar"},O.default.createElement("header",{className:"vcs-commit-summary"},O.default.createElement("h3",null,S.subject),O.default.createElement("code",{className:"vcs-commit-oid"},S.id),O.default.createElement("p",null,S.author," \xB7 ",S.date),S.committer&&S.committer!==S.author&&O.default.createElement("p",null,i("commitCommitter")," ",S.committer,S.committerDate?` \xB7 ${S.committerDate}`:""),S.signature?.signed===!0&&O.default.createElement("p",null,O.default.createElement("span",{title:i("commitSignatureUnverified")},i("commitSigned",{format:S.signature.format}))),S.messageTruncated&&O.default.createElement("p",{role:"status"},i("commitMessageLimit")),S.message&&O.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},S.message),S.parents.length>1&&O.default.createElement("label",null,i("commitParent")," ",O.default.createElement("select",{"aria-label":i("commitParent"),value:g,onChange:A=>{h(null),L(null),m(null),N(Number(A.target.value)),w({source:"comparison",origin:null,parentIndex:Number(A.target.value),path:null,line:null})}},S.parents.map((A,U)=>O.default.createElement("option",{key:A,value:U},U+1,": ",A.slice(0,10))))),O.default.createElement("p",null,S.parent||i("commitRoot")," \u2192 ",S.id.slice(0,10))),O.default.createElement("aside",{className:"vcs-commit-picker"},O.default.createElement("label",null,i("commitFileSearch")," ",O.default.createElement("input",{"aria-label":i("commitFileSearch"),value:C,onChange:A=>{k(A.target.value),h(null),m(null),w({fileQuery:A.target.value,path:null,line:null})}})),O.default.createElement("span",null," ",I.length," / ",S.changes.length),O.default.createElement("ul",{className:"vcs-commit-files"},I.map(A=>O.default.createElement("li",{key:A.id},O.default.createElement("button",{"aria-pressed":x===A.id,onClick:()=>{h(A.id),m(null),w({source:"comparison",origin:null,path:A.path,line:null})}},O.default.createElement("span",{className:"vcs-file-status"},A.status," \xB7 "),O.default.createElement("span",{className:"vcs-file-path",title:A.oldPath?A.oldPath+" \u2192 "+A.path:A.path},A.path,A.oldPath&&O.default.createElement("small",null,"\u2190 ",A.oldPath)))))),!!S.changes.length&&!I.length&&O.default.createElement("p",{role:"status"},i("emptySearch")),!S.changes.length&&O.default.createElement("p",null,i("commitNoChanges")),O.default.createElement(vt,{key:JSON.stringify([e,t,o]),initialLocation:u.source==="tree"?u.tree:null,sessionId:e,repositoryId:t,commit:o,rpc:r,t:i,onRediscover:s,onSelectCommit:a}))),O.default.createElement("div",{className:"vcs-commit-review"},O.default.createElement("div",{className:"vcs-commit-comparison","aria-label":i("comparisonContext")},x&&O.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":v,onClick:()=>{y(!v),w({focused:!v})}},i(v?"comparisonRestore":"comparisonFocus")),b&&u.path?O.default.createElement(ke,{sessionId:e,repositoryId:t,commit:o,rpc:r,t:i,onRediscover:s,onSelectCommit:a?f:void 0,path:u.path,line:b,initialViewer:u.viewer,onViewerChange:A=>w({viewer:A}),onClose:()=>{m(null),w({line:null})}}):x?O.default.createElement(Pe,{key:x,sessionId:e,repositoryId:t,commit:o,parentIndex:g,id:x,initialViewer:u.viewer,initialOrigin:u.source==="blame-origin"?u.origin:null,initialBlameStartLine:u.blameStartLine,onViewerChange:A=>w({viewer:A}),onSelectCommit:a?f:void 0,rpc:r,t:i,onRediscover:s}):O.default.createElement("p",{role:"status"},i("pick")))))}var ne=oe(require("react"),1);function or(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let t=e.slice(0,200),o=new Map,r=[],i=[],s=d=>typeof d=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(d);for(let[d,p]of t.entries()){if(!p||!s(p.id)||!Array.isArray(p.parents)||o.has(p.id))throw new Error("Invalid graph node");o.set(p.id,d),r.push({id:p.id,row:d})}let a=!1;for(let d of t){let p=new Set;for(let n of d.parents){if(i.length===1e3){a=!0;break}if(!s(n)||n.length!==d.id.length||n===d.id||p.has(n))throw new Error("Invalid graph parent");p.add(n);let l=o.get(n);if(l!==void 0&&l<=o.get(d.id))throw new Error("Graph requires child-before-parent order");i.push({from:d.id,to:n,missing:l===void 0})}if(a)break}return{nodes:r,edges:i,nodesTruncated:e.length>200,edgesTruncated:a}}function ir(e){let t=Array(32).fill(null),o=new Map,r=[],i=new Set,s=!1,a=n=>{if(i.has(n))return null;let l=t.indexOf(n);return l>=0?l:(l=t.indexOf(null),l<0?(s=!0,i.add(n),null):(t[l]=n,l))},d=new Map;for(let n of e.edges){if(n.missing)continue;let l=d.get(n.from)||[];l.push(n.to),d.set(n.from,l)}for(let n of e.nodes){let l=a(n.id);if(o.set(n.id,{...n,lane:l}),r.push({...n,lane:l}),l===null)continue;t[l]=null;let u=d.get(n.id)||[];for(let[w,f]of u.entries())t.includes(f)||(w===0&&t[l]===null?t[l]=f:a(f))}let p=e.edges.filter(n=>!n.missing).flatMap(n=>{let l=o.get(n.from),u=o.get(n.to);return l.lane===null||u.lane===null?[]:[{...n,start:l.row,end:u.row,fromLane:l.lane,toLane:u.lane}]});return{nodes:r,edges:p,lanesTruncated:s,laneCount:Math.max(1,...r.map(n=>(n.lane??0)+1))}}function jo({commits:e,selected:t,onSelect:o,t:r}){let i;try{i=or(e)}catch{return ne.default.createElement("p",{role:"alert"},r("graphInvalid"))}let s=ir(i),a=s.edges,d=Math.max(100,24+18*s.laneCount),p=Math.max(40,i.nodes.length*36);return ne.default.createElement("section",{"aria-label":r("historyGraph")},ne.default.createElement("p",null,r("graphScope")),s.lanesTruncated&&ne.default.createElement("p",{role:"status"},r("graphLaneLimit")),(i.nodesTruncated||i.edgesTruncated)&&ne.default.createElement("p",{role:"status"},r("graphLimit")),ne.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},ne.default.createElement("svg",{width:d,height:p,"aria-hidden":"true",style:{flexShrink:0}},a.map(n=>{let l=n.start*36+18,u=n.end*36+18,w=12+n.fromLane*18,f=12+n.toLane*18;return ne.default.createElement("path",{key:n.from+n.to,d:"M "+w+" "+l+" C "+w+" "+(l+18)+", "+f+" "+(u-18)+", "+f+" "+u,fill:"none",stroke:"currentColor",opacity:"0.45"})}),s.nodes.filter(n=>n.lane!==null).map(n=>ne.default.createElement("circle",{key:n.id,cx:12+n.lane*18,cy:n.row*36+18,r:"4",fill:"currentColor"}))),ne.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},i.nodes.map(n=>ne.default.createElement("li",{key:n.id,style:{height:36,whiteSpace:"nowrap"}},ne.default.createElement("button",{title:n.id,"aria-current":t===n.id?!0:void 0,style:t===n.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:l=>{if(l.altKey||l.ctrlKey||l.metaKey||l.shiftKey)return;let u=l.key==="ArrowDown"?Math.min(n.row+1,i.nodes.length-1):l.key==="ArrowUp"?Math.max(0,n.row-1):l.key==="Home"?0:l.key==="End"?i.nodes.length-1:null;u!==null&&(l.preventDefault(),l.stopPropagation(),l.currentTarget.closest("ol").querySelectorAll("button")[u]?.focus())},onClick:()=>o(n.id)},ne.default.createElement("code",null,n.id.slice(0,10))," ",e[n.row].subject))))),ne.default.createElement("details",null,ne.default.createElement("summary",null,r("graphRelations")),ne.default.createElement("ul",null,i.edges.map(n=>ne.default.createElement("li",{key:n.from+n.to},ne.default.createElement("code",null,n.from)," \u2192 ",ne.default.createElement("code",null,n.to),n.missing?" \xB7 "+r("graphMissing"):"")))))}function St(e){let[t,o]=(0,ne.useState)(!1);return ne.default.createElement("div",null,ne.default.createElement("button",{"aria-expanded":t,onClick:()=>o(r=>!r)},e.t("historyGraph")),t&&ne.default.createElement(jo,{...e}))}var T=oe(require("react"),1);function Wo({sessionId:e,repositoryId:t,base:o,target:r,rpc:i,t:s,onRediscover:a}){let[d,p]=(0,T.useState)(null),[n,l]=(0,T.useState)(""),[u,w]=(0,T.useState)(0),[f,x]=(0,T.useState)(null),[h,C]=(0,T.useState)("");if((0,T.useEffect)(()=>{let v=new AbortController;return p(null),l(""),x(null),i("vcs/revision-changes",{sessionId:e,repositoryId:t,base:o,target:r},v.signal).then(y=>{v.signal.aborted||p(y)}).catch(y=>{v.signal.aborted||(l(y.message),y.code==="vcs/rediscover-required"&&a())}),()=>v.abort()},[e,t,o,r,u]),n)return T.default.createElement("p",{role:"alert"},n," ",T.default.createElement("button",{onClick:()=>w(v=>v+1)},s("retry")));if(!d)return T.default.createElement("p",{role:"status"},s("loading"));let k=Ye(d.changes,h);return T.default.createElement("div",null,T.default.createElement("label",null,s("commitFileSearch")," ",T.default.createElement("input",{"aria-label":s("commitFileSearch"),value:h,onChange:v=>{C(v.target.value),x(null)}})),T.default.createElement("span",null," ",k.length," / ",d.changes.length),!!d.changes.length&&!k.length&&T.default.createElement("p",{role:"status"},s("emptySearch")),!d.changes.length&&T.default.createElement("p",null,s("revisionEmpty")),T.default.createElement("ul",null,k.map(v=>T.default.createElement("li",{key:v.id},T.default.createElement("button",{"aria-pressed":f===v.id,onClick:()=>x(v.id)},v.status," \xB7 ",v.oldPath?v.oldPath+" \u2192 ":"",v.path)))),f&&T.default.createElement(Pe,{key:f,sessionId:e,repositoryId:t,base:o,target:r,id:f,rpc:i,t:s,onRediscover:a}))}function kt(e){return T.default.createElement(qo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function qo({commits:e,sessionId:t,repositoryId:o,rpc:r,t:i,onRediscover:s,onReferencesLoaded:a}){let[d,p]=(0,T.useState)(""),[n,l]=(0,T.useState)(""),[u,w]=(0,T.useState)([]),[f,x]=(0,T.useState)(!1),[h,C]=(0,T.useState)(0),[k,v]=(0,T.useState)(!1),[y,b]=(0,T.useState)("");return(0,T.useEffect)(()=>{if(!h)return;let m=new AbortController;return v(!0),b(""),r("vcs/references",{sessionId:t,repositoryId:o},m.signal).then(g=>{m.signal.aborted||(w(g.references),x(!0),a?.(g.references))}).catch(g=>{m.signal.aborted||(b(g.message),g.code==="vcs/rediscover-required"&&s())}).finally(()=>{m.signal.aborted||v(!1)}),()=>m.abort()},[t,o,h]),T.default.createElement("section",{"aria-label":i("revisionTitle")},T.default.createElement("h3",null,i("revisionTitle")),T.default.createElement("p",null,i("revisionScope")),T.default.createElement("button",{disabled:k,onClick:()=>C(m=>m+1)},i("revisionLoadRefs")),T.default.createElement("p",null,i("revisionRefsScope")),f&&!k&&!y&&T.default.createElement("p",{role:"status"},u.length?`${i("revisionRefsCount")}: ${u.length}`:i("revisionRefsEmpty")),k&&T.default.createElement("p",{role:"status"},i("loading")),y&&T.default.createElement("p",{role:"alert"},y),[[d,p,"revisionBase"],[n,l,"revisionTarget"]].map(([m,g,N])=>T.default.createElement("label",{key:N},i(N)," ",T.default.createElement("select",{"aria-label":i(N),value:m,onChange:S=>g(S.target.value)},T.default.createElement("option",{value:""},"\u2014"),!!e.length&&T.default.createElement("optgroup",{label:i("revisionLoadedCommits")},e.map(S=>T.default.createElement("option",{key:S.id,value:S.id},S.id.slice(0,10)," \xB7 ",S.subject))),!!u.length&&T.default.createElement("optgroup",{label:i("revisionLocalRefs")},u.map(S=>T.default.createElement("option",{key:S.name,value:S.commit},S.name," \xB7 ",S.commit.slice(0,10)))),m&&!e.some(S=>S.id===m)&&!u.some(S=>S.commit===m)&&T.default.createElement("option",{value:m},m)))),T.default.createElement("button",{disabled:!d||!n,onClick:()=>{p(n),l(d)}},i("revisionSwap")),T.default.createElement("p",{style:{overflowWrap:"anywhere"}},T.default.createElement("code",null,d||"\u2014")," \u2192 ",T.default.createElement("code",null,n||"\u2014")),d&&n&&T.default.createElement(Wo,{key:JSON.stringify([t,o,d,n]),sessionId:t,repositoryId:o,base:d,target:n,rpc:r,t:i,onRediscover:s}))}function Be(e){return H.default.createElement(Io,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Io({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i,showSearch:s=!1}){let[a,d]=(0,H.useState)({...we(),revision:0}),[p,n]=(0,H.useState)(""),[l,u]=(0,H.useState)([]),[w,f]=(0,H.useState)(null),[x,h]=(0,H.useState)(""),[C,k]=(0,H.useState)(""),v=B=>{let se=(w||[]).find(me=>JSON.stringify([me.name,me.commit])===B)?.commit||"";k(B),h(se),g(me=>me?{...me,snapshot:se||null}:null),he(0),n(""),D(null),U({commits:[],snapshot:null,nextOffset:null})},[y,b]=(0,H.useState)({message:"",author:"",path:"",since:"",until:""}),[m,g]=(0,H.useState)(null),N=B=>{g({values:B,snapshot:A.snapshot}),he(0),n(""),D(null),U(_=>({..._,commits:[],nextOffset:null}))},S=()=>{Y&&(U(B=>({commits:[],snapshot:B.snapshot,nextOffset:null})),D(null),n(""),he(Math.max(0,Y-50)))},L=(0,H.useMemo)(()=>Xt(w||[]),[w]),P=a.id,q=(B,_=null,se={})=>{a.id&&u(me=>er(me,bt(a,se.returnLocation||{}))),d(me=>({...we({id:B,path:_,...se}),revision:me.revision+1}))},$=()=>{if(!l.length)return;let B=l[l.length-1];u(_=>_.slice(0,-1)),d(_=>({...we(B),revision:_.revision+1}))},D=(B,_=null)=>{u([]),d(se=>({...we({id:B,path:_}),revision:se.revision+1}))},I=B=>d(_=>({...bt(_,B),revision:_.revision})),[A,U]=(0,H.useState)({commits:[],snapshot:null,nextOffset:null}),[Y,he]=(0,H.useState)(0),[Se,be]=(0,H.useState)(0),[M,ge]=(0,H.useState)(!0),[ue,te]=(0,H.useState)("");(0,H.useEffect)(()=>{let B=new AbortController;return ge(!0),te(""),o("vcs/history",{sessionId:e,repositoryId:t,offset:Y,limit:50,...m?{search:m.values}:{},...m?.snapshot||x||A.snapshot?{snapshot:m?.snapshot||x||A.snapshot}:{}},B.signal).then(_=>{if(!B.signal.aborted){let se=ze(A,_,Y);U(se);let me=new Set(A.commits.filter(fe=>!se.commits.some(Oe=>Oe.id===fe.id)).map(fe=>fe.id));d(fe=>me.has(fe.id)?{...we(),revision:fe.revision+1}:fe)}}).catch(_=>{B.signal.aborted||(te(_.message),_.code==="vcs/rediscover-required"&&i())}).finally(()=>{B.signal.aborted||ge(!1)}),()=>B.abort()},[e,t,Y,Se,m,x,C]);let pe=rr(A.commits,p);return H.default.createElement("section",{className:"vcs-history vcs-history-browser","aria-label":r("history"),"aria-busy":M},H.default.createElement("div",{className:"vcs-history-list"},H.default.createElement("p",null,r("historyListOnly")),w!==null&&H.default.createElement("p",null,r("historyRefsScope")),H.default.createElement("label",null,r("historyBranch")," ",H.default.createElement("select",{"aria-label":r("historyBranch"),value:C,disabled:M,onChange:B=>v(B.target.value)},H.default.createElement("option",{value:""},"HEAD"),C&&!(w||[]).some(B=>JSON.stringify([B.name,B.commit])===C)&&H.default.createElement("option",{value:C},JSON.parse(C)[0]," \xB7 ",x.slice(0,10)," \xB7 ",r("historyPinned")),(w||[]).map(B=>{let _=JSON.stringify([B.name,B.commit]);return H.default.createElement("option",{key:_,value:_},B.name," \xB7 ",B.commit.slice(0,10))}))),s&&H.default.createElement("details",{className:"vcs-help"},H.default.createElement("summary",null,r("historySearchHelp")),H.default.createElement("p",null,r("historyBranchScope"),x&&H.default.createElement(H.default.Fragment,null," \xB7 ",H.default.createElement("code",null,x)))),s&&H.default.createElement("form",{className:"vcs-history-search","aria-label":r("historyServerSearch"),onSubmit:B=>{B.preventDefault(),N({...y})}},H.default.createElement("fieldset",{disabled:M},H.default.createElement("legend",null,r("historyServerSearch")),H.default.createElement("details",{className:"vcs-help"},H.default.createElement("summary",null,r("historySearchHelp")),H.default.createElement("p",null,r("historyServerScope"))),["message","author","path","since","until"].map(B=>H.default.createElement("label",{key:B},r("historyServer_"+B)," ",H.default.createElement("input",{maxLength:B==="since"||B==="until"?40:1024,placeholder:B==="since"||B==="until"?"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]":void 0,"aria-label":r("historyServer_"+B),value:y[B],onChange:_=>b(se=>({...se,[B]:_.target.value}))}))),H.default.createElement("button",{type:"submit"},r("historyServerApply")),H.default.createElement("button",{type:"button",onClick:()=>{b({message:"",author:"",path:"",since:"",until:""}),N({})}},r("historyServerClear")))),m&&H.default.createElement("p",{role:"status"},r("historyServerActive"),": ",JSON.stringify(m.values)," \xB7 ",H.default.createElement("code",null,m.snapshot||A.snapshot)),s&&H.default.createElement(H.default.Fragment,null,H.default.createElement("label",null,r("historySearch")," ",H.default.createElement("input",{"aria-label":r("historySearch"),value:p,onChange:B=>{n(B.target.value),D(null)}})),H.default.createElement("span",null," ",pe.length," / ",A.commits.length)),!!A.commits.length&&H.default.createElement(H.default.Fragment,null,H.default.createElement("p",{role:"status"},r("historyWindow"),": ",Math.max(0,(A.windowEnd??A.commits.length)-A.commits.length),"\u2013",A.windowEnd??A.commits.length),s&&H.default.createElement("details",{className:"vcs-help"},H.default.createElement("summary",null,r("historySearchHelp")),H.default.createElement("p",null,r("historyWindowScope")))),!!A.commits.length&&!pe.length&&H.default.createElement("p",{role:"status"},r("historyNoMatch")),H.default.createElement("ol",{className:"vcs-commit-list"},pe.map(B=>H.default.createElement("li",{key:B.id},H.default.createElement("button",{className:"vcs-commit-row","aria-pressed":P===B.id,onClick:()=>D(B.id)},H.default.createElement("span",{className:"vcs-commit-subject"},B.subject)),H.default.createElement("div",{className:"vcs-commit-meta"},H.default.createElement("code",{title:B.id},B.id.slice(0,10))," \xB7 ",B.author," \xB7 ",H.default.createElement("time",{dateTime:B.date},B.date)),L.has(B.id)&&H.default.createElement("div",{"aria-label":r("historyRefsLabel"),style:{overflowWrap:"anywhere"}},L.get(B.id).names.map(_=>H.default.createElement("span",{key:_},H.default.createElement("code",null,_)," ")),L.get(B.id).hidden>0&&H.default.createElement("span",null,r("historyRefsMore"),": ",L.get(B.id).hidden))))),M&&H.default.createElement("p",{role:"status"},r("loading")),ue&&H.default.createElement("p",{role:"alert"},ue," ",H.default.createElement("button",{onClick:()=>be(B=>B+1)},r("retry"))),!M&&!ue&&!A.commits.length&&H.default.createElement("p",null,r("historyEmpty")),A.truncated&&H.default.createElement("p",{role:"status"},r("historyLimit")),!!Y&&H.default.createElement("button",{disabled:M,onClick:S},r("historyBack")),!ue&&A.nextOffset!==null&&H.default.createElement("button",{disabled:M,onClick:()=>he(A.nextOffset)},r("historyMore")),!!A.commits.length&&H.default.createElement(St,{commits:A.commits,selected:P,onSelect:D,t:r}),H.default.createElement(kt,{onReferencesLoaded:f,commits:A.commits,sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i})),H.default.createElement("div",{className:"vcs-history-details"},l.length>0&&H.default.createElement("p",null,H.default.createElement("button",{onClick:$,"aria-label":r("historyNavigationBack")},r("historyNavigationBack")," \xB7 ",l[l.length-1].id.slice(0,10))),P&&H.default.createElement(Ae,{key:JSON.stringify([P,a.revision]),initialPath:a.path,initialLocation:a,onLocationChange:I,sessionId:e,repositoryId:t,commit:P,onSelectCommit:q,rpc:o,t:r,onRediscover:i})))}var le=oe(require("react"),1);function Ct({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i}){let[s,a]=(0,le.useState)(null),[d,p]=(0,le.useState)(null),[n,l]=(0,le.useState)(""),[u,w]=(0,le.useState)(0);return(0,le.useEffect)(()=>{let f=new AbortController;return l(""),a(null),p(null),o("vcs/stash-list",{sessionId:e,repositoryId:t},f.signal).then(x=>{f.signal.aborted||a(x.stashes)}).catch(x=>{f.signal.aborted||(l(x.message),x.code==="vcs/rediscover-required"&&i())}),()=>f.abort()},[e,t,u]),n?le.default.createElement("section",{"aria-label":r("stashTitle")},le.default.createElement("h3",null,r("stashTitle")),le.default.createElement("p",{role:"alert"},n," ",le.default.createElement("button",{onClick:()=>w(f=>f+1)},r("retry")))):s?le.default.createElement("section",{"aria-label":r("stashTitle")},le.default.createElement("h3",null,r("stashTitle")),le.default.createElement("p",null,r("stashScope")),s.length?le.default.createElement("ol",null,s.map(f=>le.default.createElement("li",{key:f.id},le.default.createElement("button",{"aria-pressed":d===f.id,onClick:()=>p(f.id)},le.default.createElement("code",null,f.ref)," \xB7 ",f.message)))):le.default.createElement("p",{role:"status"},r("stashEmpty")),d&&le.default.createElement(Ae,{sessionId:e,repositoryId:t,commit:d,rpc:o,t:r,onRediscover:i})):le.default.createElement("section",{"aria-label":r("stashTitle")},le.default.createElement("h3",null,r("stashTitle")),le.default.createElement("p",{role:"status"},r("loading")))}var xe=oe(require("react"),1);var G=oe(require("react"),1);function Nt(e){return G.default.createElement(Uo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Uo({sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i}){let[s,a]=(0,G.useState)(""),[d,p]=(0,G.useState)(null),[n,l]=(0,G.useState)(null),[u,w]=(0,G.useState)(null),[f,x]=(0,G.useState)([]),[h,C]=(0,G.useState)(""),[k,v]=(0,G.useState)(!1),y=(0,G.useRef)(null),b=L=>{y.current?.abort();let P=new AbortController;y.current=P,v(!0),C(""),l(null),w(null),x([]),p(L),o("vcs/grep",{sessionId:e,repositoryId:t,query:L},P.signal).then(q=>{P.signal.aborted||l(q)}).catch(q=>{P.signal.aborted||(C(q.message),q.code==="vcs/rediscover-required"&&i())}).finally(()=>{P.signal.aborted||v(!1)})};(0,G.useEffect)(()=>()=>y.current?.abort(),[]);let m=L=>{L.preventDefault();let P=s.trim();P&&b(P)},g=n?.matches,N=()=>{w(f.at(-1)||null),x(L=>L.slice(0,-1))},S=(L,P,q={})=>{!Ge(L)||!P||(x($=>[...$,u].filter(Boolean).slice(-100)),w({commit:L,path:P,line:q.line||null}))};return G.default.createElement("section",{"aria-label":r("grepTitle")},G.default.createElement("h3",null,r("grepTitle")),G.default.createElement("p",null,r("grepScope")),G.default.createElement("form",{onSubmit:m},G.default.createElement("input",{"aria-label":r("grepQuery"),maxLength:1024,placeholder:r("grepPlaceholder"),value:s,onChange:L=>a(L.target.value)}),G.default.createElement("button",{type:"submit",disabled:k||!s.trim()},r("grepRun"))),u?G.default.createElement(G.default.Fragment,null,G.default.createElement("button",{onClick:N},r("historyBack")),G.default.createElement(ke,{key:JSON.stringify([u.commit,u.path,u.line]),sessionId:e,repositoryId:t,rpc:o,t:r,onRediscover:i,commit:u.commit,path:u.path,line:u.line,onClose:N,onSelectCommit:S})):h?G.default.createElement("p",{role:"alert"},h," ",G.default.createElement("button",{onClick:()=>d&&b(d)},r("retry"))):k?G.default.createElement("p",{role:"status"},r("loading")):g&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",{role:"status"},r("grepCount",{count:g.length})),Ge(n.snapshot)&&G.default.createElement("code",null,n.snapshot),g.length?G.default.createElement("ol",null,g.map((L,P)=>G.default.createElement("li",{key:P},Ge(n.snapshot)?G.default.createElement("button",{onClick:()=>{x([]),w({...L,commit:n.snapshot})}},G.default.createElement("code",null,L.path,":",L.line)):G.default.createElement("code",null,L.path,":",L.line)," ",G.default.createElement("pre",{style:{margin:0}},L.text)))):G.default.createElement("p",{role:"status"},r("grepEmpty"))))}function Et(e){return xe.default.createElement(Go,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Go({t:e,...t}){let[o,r]=(0,xe.useState)("content");return xe.default.createElement("section",{className:"vcs-search-panel","aria-label":e("searchCenter")},xe.default.createElement("nav",{className:"vcs-search-modes","aria-label":e("searchMode")},xe.default.createElement("button",{"aria-pressed":o==="content",onClick:()=>r("content")},e("searchContentMode")),xe.default.createElement("button",{"aria-pressed":o==="history",onClick:()=>r("history")},e("searchHistoryMode"))),o==="content"?xe.default.createElement(Nt,{...t,t:e}):xe.default.createElement(Be,{...t,t:e,showSearch:!0}))}var Lt={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 revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u4FDD\u7559\u6700\u8FD1 200 \u6761\uFF0C\u53EF\u52A0\u8F7D\u66F4\u591A\u6216\u8FD4\u56DE",svnHistoryDateScope:"\u6309\u65E5\u671F\uFF08svn:date \u7684\u65E5\u671F\u90E8\u5206\uFF09\u5728\u5DF2\u52A0\u8F7D\u7A97\u53E3\u5185\u6709\u754C\u8FC7\u6EE4\uFF1BSVN REPORT \u4EC5\u652F\u6301 revision \u533A\u95F4\uFF0C\u6545\u4E0D\u5BA3\u79F0\u8DE8\u7A97\u53E3\u5B8C\u6574\u626B\u63CF\u3002",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",historySearchHelp:"\u67E5\u8BE2\u8303\u56F4\u4E0E\u9650\u5236",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",comparisonFocus:"\u4E13\u6CE8\u5BF9\u6BD4",comparisonRestore:"\u6062\u590D\u6587\u4EF6\u5217\u8868",commitSigned:"\u5DF2\u7B7E\u540D \xB7 {format}",commitSignatureUnverified:"\u4EC5\u68C0\u6D4B\u7B7E\u540D\u5934\uFF0C\u672A\u505A\u4FE1\u4EFB\u9A8C\u8BC1\u3002",commitCommitter:"\u63D0\u4EA4\u8005",stashTitle:"\u53EA\u8BFB Stash \u89C6\u56FE",stashScope:"\u4EC5\u8BFB\u53D6\u672C\u5730 refs/stash\uFF0C\u5217\u51FA\u5DF2\u6682\u5B58\u7684\u5DE5\u4F5C\u533A\u5FEB\u7167\uFF1B\u9009\u62E9\u540E\u590D\u7528\u63D0\u4EA4\u8BE6\u60C5\u53EA\u8BFB\u67E5\u770B\u5176\u5DEE\u5F02\u3002\u6B64\u89C6\u56FE\u4E0D\u652F\u6301\u8DE8\u63D0\u4EA4\u5BFC\u822A\uFF0C\u8DEF\u5F84\u5386\u53F2\u4E0E Blame \u63D0\u4EA4\u4EC5\u663E\u793A\u4E3A\u6587\u5B57\uFF1B\u6765\u6E90\u884C\u6587\u4EF6\u9884\u89C8\u4ECD\u53EF\u4F7F\u7528\u3002\u4E0D\u521B\u5EFA\u3001\u5E94\u7528\u3001\u5220\u9664\u6216\u5F39\u51FA stash\u3002",stashEmpty:"\u5F53\u524D\u4ED3\u5E93\u6CA1\u6709 stash\u3002",stash:"Stash",grep:"\u5185\u5BB9\u641C\u7D22",searchCenter:"\u7EDF\u4E00\u641C\u7D22",searchMode:"\u641C\u7D22\u7C7B\u578B",searchContentMode:"\u6587\u4EF6\u6B63\u6587",searchHistoryMode:"\u63D0\u4EA4\u5386\u53F2",grepTitle:"\u4ED3\u5E93\u5185\u5BB9\u641C\u7D22",grepScope:"\u5728\u5F53\u524D HEAD \u63D0\u4EA4\u6811\u5185\u505A\u6709\u754C\u5B57\u9762\u6587\u672C\u641C\u7D22\uFF08\u6700\u591A500\u6761\u5339\u914D\u3001\u6BCF\u6587\u4EF6100\u6761\u3001\u8F93\u51FA2MiB\uFF09\u3002\u53EA\u8BFB\uFF0C\u4E0D\u641C\u7D22\u672A\u63D0\u4EA4\u6539\u52A8\uFF0C\u4E0D\u65B0\u589E\u7F51\u7EDC\u6216\u5199\u64CD\u4F5C\u3002",grepQuery:"\u641C\u7D22\u5185\u5BB9",grepPlaceholder:"\u8F93\u5165\u8981\u641C\u7D22\u7684\u6587\u672C",grepRun:"\u641C\u7D22",grepCount:"\u5339\u914D {count} \u6761",grepEmpty:"\u6CA1\u6709\u5339\u914D\u3002",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\u6574\u6587\u672C\u6BD4\u8F83\uFF0C\u652F\u6301UTF-8\u3001GBK\u53CA\u5E26BOM\u7684UTF-16\uFF1B\u6BCF\u4FA78MiB\uFF0F10\u4E07\u884C\u3002\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\u53F2\u666E\u901A\u6587\u672C\u6587\u4EF6\uFF0C\u652F\u6301UTF-8\u3001GBK\u53CA\u5E26BOM\u7684UTF-16\uFF1B\u6BCF\u4FA7\u6700\u591A8MiB\u300110\u4E07\u884C\u3002\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",historyNavigationBack:"\u8FD4\u56DE\u4E0A\u4E00\u5904",historyNavigationScope:"\u4ECE\u67D0\u4E2A\u63D0\u4EA4\u7684\u6587\u4EF6\u5386\u53F2\u6216 Blame \u8DF3\u8F6C\u5230\u53E6\u4E00\u4E2A\u63D0\u4EA4\u540E\uFF0C\u201C\u8FD4\u56DE\u4E0A\u4E00\u5904\u201D\u4F1A\u56DE\u5230\u8DF3\u8F6C\u524D\u7684\u63D0\u4EA4\uFF0C\u5E76\u5C1D\u8BD5\u9884\u9009\u552F\u4E00\u5B8C\u5168\u5339\u914D\u7684\u8DEF\u5F84\uFF1B\u8FD9\u662F\u672C\u4F1A\u8BDD\u5185\u7684\u9875\u9762\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u8BFB\u53D6\u6216\u5199\u5165\u4ED3\u5E93\u3002",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",submodulePointerMoved:"\u6307\u9488\u5DF2\u79FB\u52A8\uFF08\u68C0\u51FAHEAD\u4E0E\u8BB0\u5F55\u4E0D\u540C\uFF09",submoduleDirty:"\u5DE5\u4F5C\u6811\u6709\u672A\u63D0\u4EA4\u6539\u52A8",submoduleScope:"\u9884\u89C8\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF1B\u5DF2\u521D\u59CB\u5316\u68C0\u51FA\u65F6\uFF0C\u6765\u81EA\u7236\u4ED3\u5E93\u81EA\u8EAB git status \u7684\u6307\u9488\u79FB\u52A8\uFF0F\u672A\u63D0\u4EA4\u6539\u52A8\uFF0F\u672A\u8DDF\u8E2A\u5185\u5BB9\u4F1A\u4E00\u5E76\u6807\u6CE8\uFF0C\u4E0D\u8FDB\u5165\u5B50\u6A21\u5757\u3001\u4E0D\u989D\u5916\u89E3\u6790\u5176HEAD\u3001\u4E0D\u52A0\u8F7D\u5185\u5BB9\u3001\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\uFF1B\u6709\u7CBE\u786E\u6765\u6E90\u8DEF\u5F84\u53CA\u884C\u53F7\u65F6\uFF0C\u5C1D\u8BD5\u6253\u5F00\u56FA\u5B9A\u63D0\u4EA4\u6587\u4EF6\u5E76\u5728\u9AD8\u7EA7\u89C6\u56FE\u5B9A\u4F4D\u8BE5\u884C\u3002\u6CA1\u6709\u884C\u53F7\u65F6\u4EC5\u9884\u9009\u53D8\u66F4\u4E2D\u8DEF\u5F84\u5B8C\u5168\u4E00\u81F4\u7684\u552F\u4E00\u6587\u4EF6\uFF0C\u4E0D\u731C\u6D4B\u65E7\u8DEF\u5F84\u6216\u7F3A\u5931\u6620\u5C04\u3002\u57FA\u7840\u6587\u672C\u53CA\u5206\u6BB5\u9884\u89C8\u4E0D\u63D0\u4F9B\u7B49\u4EF7\u76EE\u6807\u884C\u5B9A\u4F4D\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6BCF\u9875\u6700\u591A 500 \u884C\uFF0C\u53EF\u5207\u6362\u884C\u9875\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u5F53\u524D\u884C\u9875\u5DF2\u8FBE\u5230\u663E\u793A\u4E0A\u9650\uFF1B\u82E5\u6709\u4E0B\u4E00\u9875\uFF0C\u53EF\u7EE7\u7EED\u8BFB\u53D6\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 / JPEG / WebP \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",updatePlugin:"\u66F4\u65B0\u63D2\u4EF6",reloadInterface:"\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0",reloadDone:"\u5DF2\u91CD\u65B0\u52A0\u8F7D VCS \u754C\u9762\uFF1B\u65E7\u8BF7\u6C42\u3001\u7F16\u8F91\u5668\u53CA SVN \u6388\u6743\u5DF2\u6E05\u7406\u3002",reloadRestart:"\u5DF2\u5B89\u88C5\u66F4\u65B0\u6D89\u53CA\u540E\u7AEF\uFF0C\u8BF7\u81EA\u884C\u91CD\u542F DSH \u540E\u5237\u65B0\u9875\u9762\u3002",reloadFailed:"\u52A0\u8F7D\u5931\u8D25\uFF0C\u5DF2\u4FDD\u7559\u539F\u754C\u9762\uFF1B\u8BF7\u91CD\u8BD5\u6216\u91CD\u542F DSH\u3002",updateScope:"\u6B64\u6309\u94AE\u4E0D\u81EA\u52A8\u5B89\u88C5\u3002\u8BF7\u5728\u63D2\u4EF6\u7BA1\u7406\u5668\u4E2D\u68C0\u67E5\u5B89\u88C5\u65B9\u5F0F\uFF1B\u5F53\u524D\u5BBF\u4E3B\u53EF\u80FD\u8981\u6C42\u5148\u5378\u8F7D\u518D\u5B89\u88C5\u3002\u4E5F\u53EF\u5728\u7EC8\u7AEF\u6309\u5B9E\u9645 profile \u548C\u5DF2\u6838\u9A8C\u7248\u672C\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u3002",updateRestart:"\u5B89\u88C5\u540E\u70B9\u51FB\u201C\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0\u201D\u3002\u4EC5\u5728\u540E\u7AEF\u6307\u7EB9\u4E00\u81F4\u65F6\u52A0\u8F7D\u65B0\u754C\u9762\uFF1B\u5426\u5219\u63D0\u793A\u91CD\u542F\u3002\u4E0D\u81EA\u52A8\u91CD\u542F DSH\u3002",updateManager:"\u6253\u5F00\u63D2\u4EF6\u7BA1\u7406",updateRelease:"\u67E5\u770B\u6700\u65B0\u53D1\u5E03"},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 revision snapshot; retain up to 200 rows, load more or go back",svnHistoryDateScope:"Bounded in-window date filter on the svn:date day portion; SVN REPORT supports revision ranges only, so cross-window completeness is never claimed.",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",historySearchHelp:"Search scope and limits",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",comparisonFocus:"Focus comparison",comparisonRestore:"Restore file list",commitSigned:"Signed \xB7 {format}",commitSignatureUnverified:"Signature presence detected; not trust-verified.",commitCommitter:"Committer",stashTitle:"Read-only stashes",stashScope:"Reads local refs/stash and reuses commit details for read-only diffs. Cross-commit navigation is not supported here: path-history and Blame commits are plain text; origin-line file previews remain available. Never creates, applies, drops, or pops a stash.",stashEmpty:"This repository has no stashes.",stash:"Stash",grep:"Search",searchCenter:"Search center",searchMode:"Search type",searchContentMode:"File contents",searchHistoryMode:"Commit history",grepTitle:"Repository content search",grepScope:"Bounded literal-text search in the current HEAD commit tree (max 500 matches, 100 per file, 2 MiB output). Read-only; never searches uncommitted changes, adds no network or write.",grepQuery:"Search text",grepPlaceholder:"Text to search",grepRun:"Search",grepCount:"{count} matches",grepEmpty:"No matches.",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 text comparison supports UTF-8, GBK and BOM-marked UTF-16; 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 regular text files support UTF-8, GBK and BOM-marked UTF-16; at most 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",historyNavigationBack:"Back",historyNavigationScope:"After jumping from one commit's file history or Blame into another commit, \u201CBack\u201D returns to the commit you came from and tries to preselect the single exactly matching path; this is in-page context and reads or writes no repository state.",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",submodulePointerMoved:"pointer moved (checkout HEAD differs from recorded)",submoduleDirty:"uncommitted working-tree changes",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence; for an initialized checkout, pointer movement, uncommitted changes and untracked content reported by the parent repository's own git status are annotated, without entering the submodule, separately resolving its HEAD, loading contents, or updating anything.",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. Exact origin paths and lines open the pinned file and attempt line location in the advanced view. Without a line, only a unique same-path change is preselected; old paths and missing mappings are not guessed. Basic text and segmented previews do not provide equivalent target-line location.",blameScope:"UTF-8 regular text at the selected commit, at most 500 lines per page with line-page navigation. Working changes are excluded.",blameLimit:"The current line page reached its display limit; continue if a next page is available.",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 / JPEG / WebP 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",updatePlugin:"Update plugin",reloadInterface:"Check and load installed update",reloadDone:"VCS interface reloaded; old requests, editors and SVN grants were cleaned up.",reloadRestart:"Installed update changes the backend. Restart DSH and refresh the page.",reloadFailed:"Reload failed. Previous interface retained; retry or restart DSH.",updateScope:"This button does not install packages. Check installation options in the plugin manager; this host may require uninstalling before reinstalling. Alternatively run this command with your actual profile and verified version.",updateRestart:"After installation, check and load the installed update. Reload is allowed only when backend fingerprints match; otherwise restart DSH manually. DSH is never restarted automatically.",updateManager:"Open plugin manager",updateRelease:"Latest release"}};function sr(e,t,o,r){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===o&&r)return"clear";let s=i?.isContentEditable||i?.closest?.('input,textarea,select,[role="textbox"]');if(s&&i!==o)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!s&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function nr(e,t){let o=t?[...t.querySelectorAll("button[data-vcs-item]")]:[],r=o.indexOf(e.target);if(r<0)return;let i;if(e.key==="ArrowDown")i=o[r+1];else if(e.key==="ArrowUp")i=o[r-1];else if(e.key==="Home")i=o[0];else if(e.key==="End")i=o.at(-1);else if(e.key==="ArrowRight"&&e.target.dataset.vcsDirectory==="closed"||e.key==="ArrowLeft"&&e.target.dataset.vcsDirectory==="open"){e.preventDefault(),e.target.click();return}else return;e.preventDefault(),i?.focus()}var ar=e=>"dsh-vcs:project:v1:"+e;function lr(e,t){if(!e)return"";try{let o=(t??globalThis.localStorage)?.getItem(ar(e));return typeof o=="string"&&o.length<=1024?o:""}catch{return""}}function cr(e,t,o){if(!(!e||!t))try{(o??globalThis.localStorage)?.setItem(ar(e),t)}catch{}}function pr(e,t=""){return e.find(o=>o.id===t)?.id||e.find(o=>o.relativePath===".")?.id||e[0]?.id||""}var De=(e,t)=>JSON.stringify([e,t]),Me=(e,t=".")=>[e.type.toUpperCase(),e.relativePath==="."?t:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),Qe=(e,t="all")=>e.type==="git"&&["staged","unstaged"].includes(t)?t:"all",dr=(e="",t="")=>e===t?0:e<t?-1:1;function Ht(e=[]){let t={id:"",name:"",directories:new Map,files:[],count:0};for(let r of e){let i=String(r.path||"").split("/").filter(Boolean);if(!i.length)continue;let s=t;for(let a of i.slice(0,-1)){let d=s.id?s.id+"/"+a:a;s.directories.has(a)||s.directories.set(a,{id:d,name:a,directories:new Map,files:[],count:0}),s=s.directories.get(a),s.count++}s.files.push(r)}let o=r=>({...r,directories:[...r.directories.values()].sort((i,s)=>dr(i.name,s.name)).map(o),files:[...r.files].sort((i,s)=>dr(i.path,s.path))});return o(t)}function ur(e=[],t){let o=e.findIndex(r=>r.id===t);return{index:o<0?0:o+1,total:e.length}}function mr(e=[],t,o){if(!e.length||!["previous","next"].includes(o))return null;let r=e.findIndex(a=>a.id===t),i=o==="next"?1:-1,s=r<0?o==="next"?-1:0:r;return e[(s+i+e.length)%e.length]||null}function fr(e=""){let t=String(e).split("/").filter(Boolean);return t.slice(0,-1).map((o,r)=>t.slice(0,r+1).join("/"))}function Pt(e,t=[]){for(let o of e?.directories||[])t.push(o.id),Pt(o,t);return t}function hr(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function gr(e=[]){return e.reduce((t,o)=>{let r=hr(o.status);return t.all++,t[r]=(t[r]||0)+1,t},{all:0})}function zo(e=[],t="",o="all"){let r=t.toLowerCase();return e.filter(i=>(o==="all"||hr(i.status)===o)&&i.path.toLowerCase().includes(r)).sort((i,s)=>i.path.localeCompare(s.path))}function vr(e,t,o="",r="all"){return e.map(i=>({...t[i.id],repository:i,changes:zo(t[i.id]?.changes,o,r)}))}function yr(e,t,o=""){if(!o||!e||e.cwd!==t.cwd)return t;let r=new Map(e.repositories.map(i=>[i.id,i]));for(let i of t.repositories)r.set(i.id,i);return{...t,repositories:[...r.values()],truncated:e.truncated||t.truncated,warnings:[...e.warnings||[],...t.warnings||[]]}}var wr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},br=e=>new URL("vcs-assets/"+e,document.baseURI).href;function _o(){return c.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},c.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),c.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var Fe=e=>wr[e?.status]||e?.status?.slice(0,1).toUpperCase()||"M",xr=["slots","layout","locale","connection","uiSession"];function Ko(){let[e,t]=(0,c.useState)("all"),[o,r]=(0,c.useState)({}),[i,s]=(0,c.useState)(""),[a,d]=(0,c.useState)({added:0,deleted:0,count:0});return{mode:e,setMode:t,statuses:o,setStatuses:r,detailError:i,setDetailError:s,stats:a,setStats:d}}function Yo(e,t){let[o,r]=(0,c.useState)(e);return(0,c.useEffect)(()=>{t?.(o)},[o]),[o,r]}function Qo({session:e,rpc:t,invalidate:o,setStatuses:r}){let i=e?.id,[s,a]=(0,c.useState)(null),[d,p]=(0,c.useState)(()=>lr(e?.cwd)),[n,l]=(0,c.useState)(0),[u,w]=(0,c.useState)(""),[f,x]=(0,c.useState)(""),[h,C]=(0,c.useState)(!1),[k,v]=(0,c.useState)(""),y=(0,c.useRef)(null),b=(0,c.useRef)(null),m=(0,c.useRef)(!1),g=s?.repositories||[];return(0,c.useEffect)(()=>{g.some(L=>L.id===d)&&cr(e?.cwd,d)},[e?.cwd,d,s]),(0,c.useEffect)(()=>{let L=new AbortController;return y.current=L,v(""),C(!!i),i&&t("vcs/repositories",{sessionId:i,...f?{subdirectory:f}:{}},L.signal).then(P=>{if(!L.signal.aborted){let q=yr(b.current,P,f);m.current=!1,p($=>pr(q.repositories,$)),a(q)}}).catch(P=>{L.signal.aborted||v(P.message)}).finally(()=>{L.signal.aborted||C(!1)}),()=>L.abort()},[i,n,f]),{discovery:s,repositories:g,repositoryId:d,setRepositoryId:p,scan:n,subdirectory:u,setSubdirectory:w,scanning:h,error:k,rescan:()=>{m.current=!1,o(),y.current?.abort(),b.current=s,a(null),r({}),x(u.trim()),l(L=>L+1)},rediscover:()=>{m.current||(m.current=!0,o(),y.current?.abort(),b.current=null,a(null),r({}),x(""),l(L=>L+1))}}}function $o({sessionId:e,rpc:t,scheduleStatus:o,discovery:r,repositoryId:i,mode:s,visibleRepositories:a,setStatuses:d,setDetailError:p,rediscover:n,invalidate:l}){let[u,w]=(0,c.useState)(0),[f,x]=(0,c.useState)(0),h=(0,c.useRef)(null),C=(0,c.useRef)(!1),k=(y=!1)=>{y||x(b=>b+1),C.current=y,y||l(),y||d({}),w(b=>b+1)};return(0,c.useEffect)(()=>{let y=new AbortController,b=C.current;h.current=y,C.current=!1,b||(d({}),p(""));for(let m of a){let g=Qe(m,s);o(()=>t("vcs/status",{sessionId:e,repositoryId:m.id,mode:g},y.signal),y.signal).then(N=>{y.signal.aborted||d(S=>({...S,[m.id]:{...N,mode:g}}))}).catch(N=>{if(!y.signal.aborted){if(N.code==="vcs/rediscover-required"){n();return}d(S=>({...S,[m.id]:{error:N.message,changes:[],mode:g}}))}})}return()=>y.abort()},[e,r,i,s,u]),(0,c.useEffect)(()=>{let y=b=>{b.target===window&&e&&i&&document.visibilityState==="visible"&&k(!0)};return window.addEventListener("focus",y),()=>window.removeEventListener("focus",y)},[e,i,s]),{refresh:u,historyRefresh:f,refreshStatuses:k,abortStatus:()=>h.current?.abort()}}function Xo({sessionId:e,rpc:t,discovery:o,repositories:r,statuses:i,mode:s,reviewActive:a,setDetailError:d,setStats:p,rediscover:n}){let[l,u]=(0,c.useState)(null),[w,f]=(0,c.useState)(null),[x,h]=(0,c.useState)(!1),[C,k]=(0,c.useState)("content"),[v,y]=(0,c.useState)(null),[b,m]=(0,c.useState)(0),g=(0,c.useRef)(null),N=r.find(U=>U.id===l?.repositoryId),S=l?i[l.repositoryId]:null,L=JSON.stringify([e,o?.cwd,l?.repositoryId,s,l?.id]),P=v?.key===L&&v?.status===S;return(0,c.useEffect)(()=>y(null),[L,S,a]),(0,c.useEffect)(()=>{let U=new AbortController;return g.current=U,f(null),d(""),p({added:0,deleted:0,count:0}),k("content"),h(!!l&&!!S),!a&&l&&S&&N&&t("vcs/compare",{sessionId:e,repositoryId:l.repositoryId,mode:Qe(N,s),id:l.id,...P?{large:!0}:{}},U.signal).then(Y=>{U.signal.aborted||f(Y)}).catch(Y=>{if(!U.signal.aborted){if(Y.code==="vcs/rediscover-required"){n();return}d(Y.message)}}).finally(()=>{U.signal.aborted||h(!1)}),()=>U.abort()},[l,S,e,s,a,P,b]),{selected:l,comparison:w,loading:x,tab:C,setTab:k,large:P,selectionKey:L,selectedRepository:N,selectedStatus:S,reset:()=>{g.current?.abort(),f(null),u(null),d(""),k("content"),p({added:0,deleted:0,count:0})},clearSelection:()=>{g.current?.abort(),f(null),u(null),d("")},selectFile:(U,Y)=>{g.current?.abort(),f(null),k("content"),u({repositoryId:U,id:Y})},toggleLarge:()=>{g.current?.abort(),f(null),y(P?null:{key:L,status:S})},retryCompare:()=>m(U=>U+1)}}function Zo({editorNode:e,viewer:t,setStats:o,comparison:r,sessionId:i,discovery:s,selected:a,mode:d,reviewActive:p}){let[n,l]=(0,c.useState)(0),[u,w]=(0,c.useState)(!1),[f,x]=(0,c.useState)(""),[h,C]=(0,c.useState)("pending"),[k,v]=(0,c.useState)(!0),[y,b]=(0,c.useState)(!1),[m,g]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let N=!1,S,L=new AbortController;w(!1),x("");let P=document.createElement("link");return P.rel="stylesheet",P.href=br("editor.css"),document.head.appendChild(P),Ie(br("editor.js")+"?v="+encodeURIComponent(Ne)+"&retry="+n,{signal:L.signal}).then(q=>{N||(S=q.createDiff(e.current,{onStats:o,onComputation:$=>{N||C($)}}),t.current=S,w(!0))}).catch(q=>{N||x(q.message)}),()=>{N=!0,L.abort(),S?.dispose(),t.current=null,P.remove()}},[n]),(0,c.useEffect)(()=>{u&&(!r||r.binary||p)&&t.current?.setContent({left:{text:""},right:{text:""}},"empty"),u&&r&&!r.binary&&!p&&t.current?.setContent(r,JSON.stringify([i,s?.cwd,a?.repositoryId,d,a?.id,r.path]))},[u,r,i,s,a,d,p]),(0,c.useEffect)(()=>{t.current?.options({sideBySide:k,ignoreWhitespace:y,wrap:m})},[u,k,y,m]),{setEditorRetry:l,editorReady:u,editorError:f,computation:h,sideBySide:k,setSide:v,ignoreWhitespace:y,setWhitespace:b,wrap:m,setWrap:g}}function Ro(){let[e,t]=(0,c.useState)(""),[o,r]=(0,c.useState)("all"),[i,s]=(0,c.useState)(!0),[a,d]=(0,c.useState)({});return{query:e,setQuery:t,statusFilter:o,setStatusFilter:r,tree:i,setTree:s,collapsedDirectories:a,setCollapsedDirectories:d,clearFilters:()=>{t(""),r("all")}}}function ei({panelNode:e,searchNode:t,fileListNode:o,revealChange:r,query:i,setQuery:s,changes:a,selected:d,reviewActive:p,repositoryId:n,selectFile:l,tree:u,statusFilter:w,collapsedDirectories:f,groups:x,setTree:h,clearFilters:C,chosen:k,setCollapsedDirectories:v}){let y=m=>{let g=mr(a,d?.id,m);g&&l(n,g.id)};return(0,c.useEffect)(()=>{let m=g=>{if(p)return;let N=sr(g,e.current,t.current,!!i);N&&(g.preventDefault(),N==="search"?(t.current?.focus(),t.current?.select()):N==="clear"?s(""):y(N))};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[i,a,d,p]),(0,c.useEffect)(()=>{let m=r.current;if(!m)return;let g=[...o.current?.querySelectorAll("button[data-vcs-change]")||[]].find(N=>N.dataset.vcsChange===m);g&&(g.scrollIntoView({block:"nearest"}),g.focus(),r.current=null)},[u,i,w,f,x]),{selectAdjacent:y,revealSelected:()=>{let m=k;!m||!d||(h(!0),C(),v(g=>{let N={...g};for(let S of fr(m.path))N[d.repositoryId+"\0"+S]=!1;return N}),r.current=De(d.repositoryId,m.id))}}}function ti({t:e,repositories:t,repositoryId:o,gitSelected:r,scanning:i,mode:s,reviewActive:a,busy:d,sessionId:p,discovery:n,sessionCwd:l,subdirectory:u,onSubdirectoryChange:w,onRescan:f,onRepositoryChange:x,onModeChange:h,onRefresh:C,onBack:k}){return c.default.createElement("header",{className:"vcs-top"},c.default.createElement(_o,null),c.default.createElement("h1",{className:"vcs-title"},e("title")),c.default.createElement("span",{className:"vcs-badge"},e("readonly")),c.default.createElement("span",{className:"vcs-spacer"}),c.default.createElement("select",{"aria-label":e("repositories"),value:o,disabled:i||!t.length,onChange:v=>x(v.target.value)},!t.length&&c.default.createElement("option",{value:""},e("repositories")),t.map(v=>c.default.createElement("option",{key:v.id,value:v.id},Me(v,e("workspaceRoot"))))),c.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",c.default.createElement("select",{"aria-label":e("gitMode"),value:s,disabled:a||!r,onChange:v=>h(v.target.value)},["all","unstaged","staged"].map(v=>c.default.createElement("option",{key:v,value:v},e(v))))),c.default.createElement("button",{onClick:C,disabled:d||!p},e("refresh")),c.default.createElement("button",{onClick:k},e("back")),c.default.createElement("div",{className:"vcs-path",title:n?.cwd||l},e("session"),": ",n?.cwd||l||"\u2014"),c.default.createElement("form",{className:"vcs-discovery",onSubmit:v=>{v.preventDefault(),f()}},c.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:u,onChange:v=>w(v.target.value)}),c.default.createElement("button",{disabled:!p||i},e("rescan")),c.default.createElement("span",null,e("scanHint"))),n?.truncated&&c.default.createElement("div",{className:"vcs-notice"},e("truncated")),(n?.warnings||[]).map((v,y)=>c.default.createElement("div",{className:"vcs-notice",key:y},typeof v=="string"?v:v.message||JSON.stringify(v))))}function ri({t:e,gitSelected:t,historyActive:o,stashActive:r,grepActive:i,reviewActive:s,setReviewView:a,openReviewView:d}){return c.default.createElement("nav",{className:"vcs-review-views","aria-label":e("reviewView")},c.default.createElement("button",{"aria-pressed":!s,onClick:()=>a("workspace")},e("workspaceView")),c.default.createElement("button",{"aria-pressed":o,"aria-expanded":o,onClick:()=>d("history")},e("history")),t&&c.default.createElement(c.default.Fragment,null,c.default.createElement("button",{"aria-pressed":r,"aria-expanded":r,onClick:()=>d("stash")},e("stash")),c.default.createElement("button",{"aria-pressed":i,"aria-expanded":i,onClick:()=>d("grep")},e("grep"))))}function oi({sessionId:e,repositoryId:t,historyRefresh:o,scan:r,rpc:i,t:s,rediscover:a,historyActive:d,stashActive:p,grepActive:n,svnSelected:l,gitSelected:u}){return c.default.createElement(c.default.Fragment,null,d&&l&&c.default.createElement(ft,{key:JSON.stringify([e,t,o,r]),sessionId:e,repositoryId:t,rpc:i,t:s,onRediscover:a}),d&&u&&c.default.createElement(Be,{key:JSON.stringify([e,t,o,r]),sessionId:e,repositoryId:t,rpc:i,t:s,onRediscover:a}),p&&c.default.createElement(Ct,{sessionId:e,repositoryId:t,rpc:i,t:s,onRediscover:a}),n&&c.default.createElement(Et,{sessionId:e,repositoryId:t,rpc:i,t:s,onRediscover:a}))}function ii({t:e,statusFilter:t,statusCounts:o,onStatusFilter:r}){return c.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(i=>c.default.createElement("button",{key:i,"aria-pressed":t===i,onClick:()=>r(i)},e(i==="all"?"allFiles":wr[i]||"M")," ",c.default.createElement("small",null,o[i]||0))))}function Sr({entry:e,compact:t=!1,depth:o=0,repositoryId:r,selected:i,t:s,onSelect:a}){let d=e.path.lastIndexOf("/");return c.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":De(r,e.id),"aria-current":i?.repositoryId===r&&i?.id===e.id?"true":void 0,style:{paddingInlineStart:8+o*14},title:(e.oldPath?e.oldPath+" \u2192 ":"")+e.path+" \xB7 "+s(Fe(e)),onClick:()=>a(r,e.id)},c.default.createElement("span",{className:"vcs-status","data-status":Fe(e)},Fe(e)),c.default.createElement(ct,{submodule:e.submodule,t:s}),c.default.createElement("span",{className:"vcs-filename"},t?e.path.slice(d+1):e.path,e.oldPath&&c.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",e.oldPath)))}function kr({node:e,repository:t,selected:o,t:r,collapsedDirectories:i,onToggleDirectory:s,onSelect:a,depth:d=0}){return c.default.createElement(c.default.Fragment,null,e.directories.map(p=>{let n=t.id+"\0"+p.id,l=!!i[n];return c.default.createElement(c.default.Fragment,{key:n},c.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":l?"closed":"open","aria-expanded":!l,style:{paddingInlineStart:8+d*14},onClick:()=>s(n,l)},c.default.createElement("span",{"aria-hidden":"true"},l?"\u203A":"\u2304"),p.name,c.default.createElement("small",null,p.count)),!l&&c.default.createElement(kr,{node:p,repository:t,selected:o,t:r,collapsedDirectories:i,onToggleDirectory:s,onSelect:a,depth:d+1}))}),e.files.map(p=>c.default.createElement(Sr,{key:De(t.id,p.id),entry:p,compact:e.id!=="",depth:d,repositoryId:t.id,selected:o,t:r,onSelect:a})))}function si({t:e,sessionId:t,scanning:o,error:r,groups:i,statuses:s,query:a,tree:d,collapsedDirectories:p,selected:n,mode:l,fileListNode:u,onSelect:w,onToggleDirectory:f,onRescan:x}){let h=C=>nr(C,u.current);return c.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:u,onKeyDown:h},i.map(C=>{let k=C.repository;return c.default.createElement("section",{className:"vcs-repository",key:k.id,"aria-label":Me(k,e("workspaceRoot"))},c.default.createElement("div",{className:"vcs-repository-heading",title:k.root},c.default.createElement("strong",null,Me(k,e("workspaceRoot"))),c.default.createElement("small",null,k.type==="svn"?e("svnBase"):e(Qe(k,l)))),C.error?c.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},C.error,c.default.createElement("button",{onClick:x},e("rescan"))):s[k.id]?d?c.default.createElement(kr,{node:Ht(C.changes),repository:k,selected:n,t:e,collapsedDirectories:p,onToggleDirectory:f,onSelect:w}):C.changes.map(v=>c.default.createElement(Sr,{key:De(k.id,v.id),entry:v,repositoryId:k.id,selected:n,t:e,onSelect:w})):c.default.createElement("div",{className:"vcs-message"},e("loading")),!C.error&&s[k.id]&&!C.changes.length&&c.default.createElement("div",{className:"vcs-message"},e(a?"emptySearch":"clean")))}),!i.length&&c.default.createElement("div",{className:"vcs-message"},o?e("loading"):r||e(t?"noRepo":"noSession"),r&&c.default.createElement("button",{onClick:x},e("rescan"))))}function ni({t:e,sessionId:t,scanning:o,error:r,groups:i,statuses:s,query:a,statusFilter:d,statusCounts:p,changes:n,tree:l,collapsedDirectories:u,selected:w,mode:f,searchNode:x,fileListNode:h,chosen:C,onQuery:k,onStatusFilter:v,onClearFilters:y,onToggleTree:b,onExpandAll:m,onCollapseAll:g,onRevealSelected:N,onSelect:S,onToggleDirectory:L,onRescan:P}){return c.default.createElement("aside",{className:"vcs-files"},c.default.createElement("div",{className:"vcs-filter"},c.default.createElement("input",{ref:x,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:a,onChange:q=>k(q.target.value)}),(a||d!=="all")&&c.default.createElement("button",{className:"vcs-clear-filter",onClick:y},e("clearFilters"))),c.default.createElement(ii,{t:e,statusFilter:d,statusCounts:p,onStatusFilter:v}),c.default.createElement("div",{className:"vcs-count"},c.default.createElement("span",null,n.length," ",e("files")),c.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),c.default.createElement("button",{"aria-pressed":l,onClick:b},e(l?"tree":"list"))),l&&c.default.createElement("div",{className:"vcs-tree-actions"},c.default.createElement("button",{onClick:m},e("expandAll")),c.default.createElement("button",{onClick:g},e("collapseAll")),c.default.createElement("button",{onClick:N,disabled:!C},e("revealSelected"))),c.default.createElement(si,{t:e,sessionId:t,scanning:o,error:r,groups:i,statuses:s,query:a,tree:l,collapsedDirectories:u,selected:w,mode:f,fileListNode:h,onSelect:S,onToggleDirectory:L,onRescan:P}))}function ai({t:e,comparison:t,chosen:o,selectedRepository:r,editorReady:i,stats:s,onCopyError:a}){let[d,p]=(0,c.useState)(!1),n=async()=>{let l=t?.path||o?.path;if(l)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(l);else{let u=document.createElement("textarea");try{if(u.value=l,u.style.cssText="position:fixed;opacity:0",document.body.appendChild(u),u.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{u.remove()}}p(!0),window.setTimeout(()=>p(!1),1500)}catch{a(e("copyFailed"))}};return c.default.createElement("div",{className:"vcs-filehead"},c.default.createElement("strong",{title:t?.path||o?.path},r?Me(r,e("workspaceRoot"))+" / ":"",t?.path||o?.path||e("pick")),c.default.createElement("button",{className:"vcs-copy-path",disabled:!(t?.path||o?.path),onClick:n},e(d?"copied":"copyPath")),d&&c.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),c.default.createElement("span",{className:"vcs-spacer"}),t&&!t.binary&&i&&c.default.createElement(c.default.Fragment,null,c.default.createElement("span",{className:"vcs-add"},"+",s.added),c.default.createElement("span",{className:"vcs-del"},"\u2212",s.deleted)))}function li({t:e,comparison:t}){return t?c.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},c.default.createElement("span",{className:"vcs-context-status","data-status":Fe(t)},e(Fe(t))),t.oldPath&&c.default.createElement("span",{className:"vcs-context-rename",title:t.oldPath+" \u2192 "+t.path},t.oldPath," ",c.default.createElement("b",null,"\u2192")," ",t.path),c.default.createElement("span",null,t.left.label||"\u2014"," ",c.default.createElement("b",null,"\u2194")," ",t.right.label||"\u2014"),(t.left.encoding||t.right.encoding)&&c.default.createElement("span",null,e("encoding"),": ",t.left.encoding||"\u2014"," / ",t.right.encoding||"\u2014")):null}function ci({t:e,comparison:t,selected:o,selectedRepository:r,selectedStatus:i,sessionId:s,mode:a,discoveryCwd:d,refresh:p,rpc:n,rediscover:l,large:u,selectionKey:w,detailError:f,editorError:x,computation:h,onToggleLarge:C,onRetryCompare:k}){return c.default.createElement(c.default.Fragment,null,t&&r?.type==="git"&&c.default.createElement(He,{key:JSON.stringify([s,d,o.repositoryId,a,o.id,p,i]),workspace:!0,sessionId:s,repositoryId:o.repositoryId,mode:a,id:o.id,rpc:n,t:e,onRediscover:l}),r?.type==="git"&&(u||Ue(t))&&c.default.createElement("div",{className:"vcs-notice"},c.default.createElement("span",null,e("workspaceLargeScope")),c.default.createElement("button",{onClick:C},e(u?"largeClose":"largeLoad")),u&&f&&c.default.createElement("button",{onClick:k},e("retry"))),t?.large&&c.default.createElement("p",{role:"status"},e(x?"largeFallback":h==="complete"?"diffComplete":h==="incomplete"?"diffIncomplete":"diffPending")),t?.notice&&c.default.createElement("div",{className:"vcs-notice"},t.notice),t?.submodule&&c.default.createElement("p",{role:"status"},e("submoduleScope")),t?.status==="conflicted"&&r?.type==="git"&&c.default.createElement(lt,{key:JSON.stringify([s,o.repositoryId,a,o.id,p]),sessionId:s,repositoryId:o.repositoryId,mode:a,id:o.id,rpc:n,t:e,onRediscover:l}))}function di({t:e,comparison:t,editorNode:o,editorError:r,overlay:i,tab:s,error:a,detailError:d,onRetryEditor:p,onRescan:n}){return c.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!i||s!=="content",style:s==="properties"?{display:"none"}:void 0},c.default.createElement("div",{className:"vcs-editor",ref:o,style:r?{display:"none"}:void 0}),r&&t&&!t.binary&&!i&&c.default.createElement(Le,{comparison:t,labels:qe(e)}),i&&c.default.createElement("div",{className:"vcs-message "+(a||d||r?"vcs-error":""),role:"status"},i,(a||d||r)&&c.default.createElement("button",{onClick:()=>r?p():n()},e(r?"retry":"rescan"))))}function pi({t:e,comparison:t,properties:o,propertyNames:r}){return c.default.createElement("div",{className:"vcs-properties"},c.default.createElement("table",null,c.default.createElement("thead",null,c.default.createElement("tr",null,c.default.createElement("th",null,e("properties")),c.default.createElement("th",null,t?.left.label||e("before")),c.default.createElement("th",null,t?.right.label||e("after")))),c.default.createElement("tbody",null,r.map(i=>c.default.createElement("tr",{key:i},c.default.createElement("th",null,i),c.default.createElement("td",null,o.left?.[i]??"\u2014"),c.default.createElement("td",null,o.right?.[i]??"\u2014"))))))}function ui({t:e,editorReady:t,sideBySide:o,setSide:r,ignoreWhitespace:i,setWhitespace:s,wrap:a,setWrap:d,stats:p,overlay:n,comparison:l,viewer:u,changes:w,selected:f,onSelectAdjacent:x}){let h=ur(w,f?.id);return c.default.createElement("footer",{className:"vcs-toolbar"},c.default.createElement("button",{disabled:!t,"aria-pressed":o,onClick:()=>r(!o)},e(o?"side":"inline")),c.default.createElement("label",null,c.default.createElement("input",{type:"checkbox",disabled:!t,checked:i,onChange:C=>s(C.target.checked)}),e("whitespace")),c.default.createElement("label",null,c.default.createElement("input",{type:"checkbox",disabled:!t,checked:a,onChange:C=>d(C.target.checked)}),e("wrap")),c.default.createElement("span",{className:"vcs-spacer"}),t&&c.default.createElement("span",null,p.count," ",e("changes")),c.default.createElement("button",{disabled:!t||!l||!!n,onClick:()=>u.current?.navigate("previous")},e("previous")),c.default.createElement("button",{disabled:!t||!l||!!n,onClick:()=>u.current?.navigate("next")},e("next")),h.index>0&&c.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:h.index,total:h.total})),c.default.createElement("span",{className:"vcs-toolbar-separator"}),c.default.createElement("button",{title:e("fileShortcut"),disabled:!w.length,onClick:()=>x("previous")},e("previousFile")),c.default.createElement("button",{title:e("fileShortcut"),disabled:!w.length,onClick:()=>x("next")},e("nextFile")))}function mi({t:e,comparison:t,selected:o,selectedRepository:r,selectedStatus:i,sessionId:s,mode:a,discoveryCwd:d,refresh:p,rpc:n,rediscover:l,large:u,selectionKey:w,loading:f,detailError:x,error:h,busy:C,chosen:k,repositoryCount:v,editorNode:y,editorReady:b,editorError:m,computation:g,tab:N,setTab:S,stats:L,onRetryEditor:P,onRetryCompare:q,onRescan:$,onToggleLarge:D,sideBySide:I,setSide:A,ignoreWhitespace:U,setWhitespace:Y,wrap:he,setWrap:Se,viewer:be,changes:M,onSelectAdjacent:ge,onCopyError:ue}){let te=t?.properties,pe=te?[...new Set([...Object.keys(te.left||{}),...Object.keys(te.right||{})])].filter(se=>te.left?.[se]!==te.right?.[se]):[],B=t?.binary?[t.left.label,t.right.label].filter(Boolean).join(" \u2194 "):"",_=x||(f?e("loading"):s?C&&!k?e("loading"):h||(v?k?t?.binary?e("binary")+(B?" "+e("binaryComparison",{files:B}):""):t?!b&&!m?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession"));return c.default.createElement("main",{className:"vcs-detail"},c.default.createElement(ai,{t:e,comparison:t,chosen:k,selectedRepository:r,editorReady:b,stats:L,onCopyError:ue}),m&&c.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",c.default.createElement("button",{onClick:P},e("retry")),c.default.createElement("details",null,c.default.createElement("summary",null,e("diagnostics")),m)),c.default.createElement(li,{t:e,comparison:t}),c.default.createElement(ci,{t:e,comparison:t,selected:o,selectedRepository:r,selectedStatus:i,sessionId:s,mode:a,discoveryCwd:d,refresh:p,rpc:n,rediscover:l,large:u,selectionKey:w,detailError:x,editorError:m,computation:g,onToggleLarge:D,onRetryCompare:q}),pe.length>0&&c.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(se=>c.default.createElement("button",{key:se,"aria-pressed":N===se,onClick:()=>S(se)},e(se),se==="properties"?" ("+pe.length+")":""))),c.default.createElement("div",{className:"vcs-labels"},c.default.createElement("span",null,t?.left.label||"\u2014",t?.left.encoding?" \xB7 "+t.left.encoding:""),c.default.createElement("span",null,t?.right.label||"\u2014",t?.right.encoding?" \xB7 "+t.right.encoding:"")),c.default.createElement(di,{t:e,comparison:t,editorNode:y,editorError:m,overlay:_,tab:N,error:h,detailError:x,onRetryEditor:P,onRescan:$}),N==="properties"&&c.default.createElement(pi,{t:e,comparison:t,properties:te,propertyNames:pe}),c.default.createElement(ui,{t:e,editorReady:b,sideBySide:I,setSide:A,ignoreWhitespace:U,setWhitespace:Y,wrap:he,setWrap:Se,stats:L,overlay:_,comparison:t,viewer:be,changes:M,selected:o,onSelectAdjacent:ge}))}function Cr(e,{initialView:t="workspace",onViewChange:o}={}){let r=e.locale.bind("local.vcs"),i=nt(2),s=We(e.connection,()=>r("error"));function a(n){let l=n.useSessions(u=>Object.values(u.byId).find(w=>(w.retainedBy.mainView??0)>0));return c.default.createElement(d,{key:JSON.stringify([l?.id,l?.cwd])},c.default.createElement(p,{session:l}))}class d extends c.default.Component{state={error:null};static getDerivedStateFromError(l){return{error:l}}render(){return this.state.error?c.default.createElement("section",{className:"vcs-root"},c.default.createElement("style",null,st),c.default.createElement("div",{className:"vcs-message vcs-error"},r("error"),c.default.createElement("button",{onClick:()=>this.setState({error:null})},r("retry")),c.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},r("back")))):this.props.children}}function p({session:n}){(0,c.useSyncExternalStore)(X=>e.locale.subscribe(X),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let l=n?.id,u=(0,c.useRef)(null),w=(0,c.useRef)(null),f=(0,c.useRef)(null),x=(0,c.useRef)(null),h=(0,c.useRef)(null),C=(0,c.useRef)(null),k=(0,c.useRef)(null),[v,y]=Yo(t,o),{mode:b,setMode:m,statuses:g,setStatuses:N,detailError:S,setDetailError:L,stats:P,setStats:q}=Ko(),$=()=>k.current?.(),{discovery:D,repositories:I,repositoryId:A,setRepositoryId:U,scan:Y,subdirectory:he,setSubdirectory:Se,scanning:be,error:M,rescan:ge,rediscover:ue}=Qo({session:n,rpc:s,invalidate:$,setStatuses:N}),te=I.filter(X=>X.id===A),pe=te.some(X=>X.type==="git"),B=te.some(X=>X.type==="svn"),_=(pe||B)&&v==="history",se=pe&&v==="stash",me=pe&&v==="grep",fe=_||se||me,{refresh:Oe,historyRefresh:Ar,refreshStatuses:Br,abortStatus:Dr}=$o({sessionId:l,rpc:s,scheduleStatus:i,discovery:D,repositoryId:A,mode:b,visibleRepositories:te,setStatuses:N,setDetailError:L,rediscover:ue,invalidate:$}),{selected:Ee,comparison:Bt,loading:Mr,tab:Fr,setTab:Or,large:Tr,selectionKey:Vr,selectedRepository:jr,selectedStatus:Dt,reset:Wr,clearSelection:qr,selectFile:Mt,toggleLarge:Ir,retryCompare:Ur}=Xo({sessionId:l,rpc:s,discovery:D,repositories:I,statuses:g,mode:b,reviewActive:fe,setDetailError:L,setStats:q,rediscover:ue}),Xe=()=>{Dr(),Wr()};k.current=Xe;let Gr=X=>{qr(),y(X)},{setEditorRetry:Jr,editorReady:zr,editorError:_r,computation:Kr,sideBySide:Yr,setSide:Qr,ignoreWhitespace:$r,setWhitespace:Xr,wrap:Zr,setWrap:Rr}=Zo({editorNode:w,viewer:f,setStats:q,comparison:Bt,sessionId:l,discovery:D,selected:Ee,mode:b,reviewActive:fe}),{query:Ze,setQuery:Ft,statusFilter:Re,setStatusFilter:eo,tree:et,setTree:Ot,collapsedDirectories:Tt,setCollapsedDirectories:tt,clearFilters:Vt}=Ro(),Te=vr(te,g,Ze,Re),rt=Te.flatMap(X=>X.changes),to=gr(g[A]?.changes),ot=Dt?.changes?.find(X=>X.id===Ee?.id),jt=X=>tt(it=>{let Ve={...it};for(let qt of Te)for(let io of Pt(Ht(qt.changes)))Ve[qt.repository.id+"\0"+io]=!X;return Ve}),Wt=be||te.some(X=>!g[X.id]),{selectAdjacent:ro,revealSelected:oo}=ei({panelNode:u,searchNode:h,fileListNode:x,revealChange:C,query:Ze,setQuery:Ft,changes:rt,selected:Ee,reviewActive:fe,repositoryId:A,selectFile:Mt,tree:et,statusFilter:Re,collapsedDirectories:Tt,groups:Te,setTree:Ot,clearFilters:Vt,chosen:ot,setCollapsedDirectories:tt});return c.default.createElement("section",{ref:u,className:"vcs-root","aria-label":r("title")},c.default.createElement("style",null,st),c.default.createElement(ti,{t:r,repositories:I,repositoryId:A,gitSelected:pe,scanning:be,mode:b,reviewActive:fe,busy:Wt,sessionId:l,discovery:D,sessionCwd:n?.cwd,subdirectory:he,onSubdirectoryChange:Se,onRescan:ge,onRepositoryChange:X=>{Xe(),N({}),U(X)},onModeChange:X=>{Xe(),N({}),m(X)},onRefresh:()=>Br(!1),onBack:()=>e.layout.selectPanel(null)}),te.filter(X=>X.type==="svn"&&!fe).map(X=>c.default.createElement(c.default.Fragment,{key:JSON.stringify([l,X.id,Y,Oe])},c.default.createElement(dt,{repositoryId:X.id,sessionId:l,rpc:s,t:r,onRediscover:ue}))),(pe||B)&&c.default.createElement(c.default.Fragment,null,c.default.createElement(ri,{t:r,gitSelected:pe,historyActive:_,stashActive:se,grepActive:me,reviewActive:fe,setReviewView:y,openReviewView:Gr}),c.default.createElement(oi,{sessionId:l,repositoryId:A,historyRefresh:Ar,scan:Y,rpc:s,t:r,rediscover:ue,historyActive:_,stashActive:se,grepActive:me,svnSelected:B,gitSelected:pe})),c.default.createElement("div",{className:"vcs-body",hidden:fe,"aria-label":r("workspaceView")},c.default.createElement(ni,{t:r,sessionId:l,scanning:be,error:M,groups:Te,statuses:g,query:Ze,statusFilter:Re,statusCounts:to,changes:rt,tree:et,collapsedDirectories:Tt,selected:Ee,mode:b,searchNode:h,fileListNode:x,chosen:ot,onQuery:Ft,onStatusFilter:eo,onClearFilters:Vt,onToggleTree:()=>Ot(!et),onExpandAll:()=>jt(!0),onCollapseAll:()=>jt(!1),onRevealSelected:oo,onSelect:Mt,onToggleDirectory:(X,it)=>tt(Ve=>({...Ve,[X]:!it})),onRescan:ge}),c.default.createElement(mi,{t:r,comparison:Bt,selected:Ee,selectedRepository:jr,selectedStatus:Dt,sessionId:l,mode:b,discoveryCwd:D?.cwd,refresh:Oe,rpc:s,rediscover:ue,large:Tr,selectionKey:Vr,loading:Mr,detailError:S,error:M,busy:Wt,chosen:ot,repositoryCount:I.length,editorNode:w,editorReady:zr,editorError:_r,computation:Kr,tab:Fr,setTab:Or,stats:P,onRetryEditor:()=>Jr(X=>X+1),onRetryCompare:Ur,onRescan:ge,onToggleLarge:Ir,sideBySide:Yr,setSide:Qr,ignoreWhitespace:$r,setWhitespace:Xr,wrap:Zr,setWrap:Rr,viewer:f,changes:rt,onSelectAdjacent:ro,onCopyError:L})))}return a}function hi(e){if(e?.protocol!==1||!/^\d+\.\d+\.\d+$/.test(e.version)||!["backend","runningBackend","interface"].every(t=>/^[a-f0-9]{64}$/.test(e[t])))throw Error("Invalid frontend manifest");if(e.backend!==e.runningBackend)throw Object.assign(Error("Backend changed; restart DSH."),{code:"restart-required"});return e}async function Nr({base:e,fetcher:t=fetch,importer:o=s=>import(s),signal:r,requireModule:i}){let s=new URL("vcs-assets/frontend.json",e),a=await t(s,{credentials:"same-origin",cache:"no-store",redirect:"error",signal:r});if(!a.ok)throw Error("Frontend manifest HTTP "+a.status);if(!a.headers.get("content-type")?.includes("application/json"))throw Error("Invalid frontend manifest Content-Type");let d=hi(await a.json());r?.throwIfAborted();let p=new URL("interface.js",s);p.searchParams.set("hash",d.interface);let n=await o(p.href);r?.throwIfAborted();let l=n.default(i);if(typeof l.createPage!="function"||!l.dictionaries)throw Error("Invalid frontend module");return{ui:l,manifest:d}}var Q=oe(require("react"),1);var $e="@feng0531/dsh-vcs";function Ce(e){return typeof e=="string"&&/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(e)&&e.length<50}function Er(e,t){if(!Ce(e)||!Ce(t))return!1;let o=e.split(".").map(BigInt),r=t.split(".").map(BigInt);for(let i=0;i<3;i++)if(o[i]!==r[i])return o[i]>r[i];return!1}function Lr(e){if(!e?.ok)return{state:"unknown",message:"\u672A\u6536\u5230\u53EF\u9760\u7684\u66F4\u65B0\u7ED3\u679C\u3002\u5B89\u88C5\u53EF\u80FD\u4ECD\u5728\u8FDB\u884C\uFF0C\u8BF7\u5230 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u68C0\u67E5\uFF0C\u4E0D\u8981\u91CD\u590D\u70B9\u51FB\u66F4\u65B0\u3002"};let t=e.value;return t?.application==="failed"?{state:"failed",message:"\u66F4\u65B0\u5931\u8D25\uFF0C\u672A\u786E\u8BA4\u65B0\u7248\u751F\u6548\u3002\u8BF7\u5728 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u67E5\u770B\u8BE6\u60C5\uFF1A"+(t.error?.code||"\u5B89\u88C5\u9519\u8BEF")}:t?.application==="cancelled"?{state:"cancelled",message:"\u66F4\u65B0\u5DF2\u53D6\u6D88\uFF0C\u65B0\u7248\u672A\u786E\u8BA4\u751F\u6548\u3002"}:t?.application==="restart-required"?{state:"restart-required",message:"\u65B0\u7248\u5DF2\u5B89\u88C5\uFF0C\u4F46\u5F53\u524D DSH \u540E\u53F0\u4ECD\u5728\u8FD0\u884C\u65E7\u7248\u3002\u8BF7\u5148\u7ED3\u675F\u5F53\u524D\u6D4F\u89C8\uFF0C\u518D\u81EA\u884C\u91CD\u542F DSH \u5E76\u5237\u65B0\u9875\u9762\u3002\u63D2\u4EF6\u4E0D\u4F1A\u81EA\u52A8\u91CD\u542F\u3002"}:t?.application==="applied"?{state:"applied",message:"\u5BBF\u4E3B\u62A5\u544A\u66F4\u65B0\u5DF2\u5E94\u7528\u3002\u8BF7\u5237\u65B0\u9875\u9762\u52A0\u8F7D\u65B0\u7248\u754C\u9762\uFF1B\u82E5\u524D\u540E\u7AEF\u7248\u672C\u4ECD\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u624B\u52A8\u91CD\u542F DSH\u3002"}:{state:"unknown",message:"\u5BBF\u4E3B\u672A\u786E\u8BA4\u65B0\u7248\u5DF2\u751F\u6548\uFF0C\u8BF7\u5230 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u68C0\u67E5\u5B89\u88C5\u4E0E\u542F\u7528\u72B6\u6001\u3002"}}async function Hr(e,t,{confirmed:o=!1,requestId:r}={}){if(!o)throw new Error("\u9700\u8981\u5148\u786E\u8BA4\u66F4\u65B0");if(!Ce(t?.latestVersion)||!Er(t.latestVersion,t.runningVersion))throw new Error("\u6CA1\u6709\u53EF\u5B89\u88C5\u7684\u65B0\u7248\u672C");if(!e||typeof e.installBundle!="function")throw new Error("\u5F53\u524D DSH \u4E0D\u652F\u6301\u6B64\u66F4\u65B0\u63A5\u53E3\uFF0C\u8BF7\u5230\u300C\u63D2\u4EF6\u300D\u9875\u9762\u624B\u52A8\u66F4\u65B0");try{return Lr(await e.installBundle($e+"@"+t.latestVersion,{enabled:!1,registry:"https://registry.npmjs.org/",requestId:r}))}catch{return Lr(null)}}function At({rpc:e,manager:t,clientVersion:o,reloadBusy:r,onLock:i,onManager:s,t:a}){let[d,p]=(0,Q.useState)(null),[n,l]=(0,Q.useState)(null),[u,w]=(0,Q.useState)(""),[f,x]=(0,Q.useState)(""),[h,C]=(0,Q.useState)(null),[k,v]=(0,Q.useState)(!1),y=(0,Q.useRef)(!1),b=(0,Q.useRef)(!1),m=(0,Q.useRef)(null),g=!!h&&["restart-required","applied","unknown"].includes(h.state);(0,Q.useEffect)(()=>{y.current=!0;let L=new AbortController;return m.current=L,e("vcs/runtime-info",{},L.signal).then(P=>{L.signal.aborted||p(P)}).catch(P=>{L.signal.aborted||x(P.message)}),()=>{y.current=!1,m.current?.abort()}},[]);let N=async()=>{if(b.current||r||g)return;b.current=!0,m.current?.abort();let L=new AbortController;m.current=L,w("\u6B63\u5728\u68C0\u67E5\u66F4\u65B0"),x(""),l(null),v(!1);try{let P=await e("vcs/check-update",{},L.signal);if(y.current&&!L.signal.aborted){if(P.packageName!==$e||!Ce(P.latestVersion)||!Ce(P.runningVersion)||P.protocol!==1)throw Error("\u540E\u53F0\u8FD4\u56DE\u7684\u7248\u672C\u4FE1\u606F\u65E0\u6548");l(P),p(P),C(null)}}catch(P){y.current&&!L.signal.aborted&&x(P.message)}finally{b.current=!1,y.current&&w("")}},S=async()=>{if(!(b.current||r||!k||!n||g)){b.current=!0,w("\u6B63\u5728\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8BF7\u52FF\u5173\u95ED\u9875\u9762"),x(""),i(!0);try{let L=await Hr(t,n,{confirmed:k,requestId:crypto.randomUUID()});y.current&&(C(L),v(!1))}catch(L){y.current&&x(L.message)}finally{b.current=!1,i(!1),y.current&&w("")}}};return Q.default.createElement("section",{style:{padding:12,flexShrink:0,maxHeight:"45%",overflow:"auto"},"aria-label":a("updatePlugin")},Q.default.createElement("p",null,"\u754C\u9762\u7248\u672C\uFF1A",o," \xB7 \u540E\u53F0\u7248\u672C\uFF1A",d?.runningVersion||"\u5C1A\u672A\u8BFB\u53D6"),d&&(d.runningVersion!==o||d.protocol!==1)&&Q.default.createElement("p",{role:"alert"},"\u754C\u9762\u4E0E\u540E\u53F0\u7248\u672C\u4E0D\u4E00\u81F4\u3002\u8BF7\u5237\u65B0\u9875\u9762\uFF1B\u82E5\u4ECD\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u624B\u52A8\u91CD\u542F DSH\u3002"),Q.default.createElement("button",{disabled:!!u||r||g,onClick:N},"\u68C0\u67E5\u66F4\u65B0")," ",Q.default.createElement("button",{disabled:!!u,onClick:s},a("updateManager")),Q.default.createElement("a",{href:n?"https://github.com/f-e-n-g-0531/dsh-vcs/releases/tag/v"+n.latestVersion:"https://github.com/f-e-n-g-0531/dsh-vcs/releases/latest",target:"_blank",rel:"noopener noreferrer"},a("updateRelease")),n&&!g&&Q.default.createElement("p",null,n.available?"\u53D1\u73B0\u65B0\u7248\u672C "+n.latestVersion:"\u5F53\u524D\u8FD0\u884C\u7248\u672C\u6CA1\u6709\u66F4\u65B0\u7684\u6B63\u5F0F\u7248\u672C\u3002"),n?.available&&!g&&Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,"\u66F4\u65B0\u4F1A\u4FEE\u6539\u5F53\u524D DSH \u7684\u63D2\u4EF6\u5B89\u88C5\u73AF\u5883\u3002\u8BF7\u5148\u5907\u4EFD\u914D\u7F6E\u3002\u66F4\u65B0\u5DF2\u6709\u63D2\u4EF6\u53EF\u80FD\u9700\u8981\u624B\u52A8\u91CD\u542F\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u542F\uFF1B\u4E0D\u652F\u6301\u6B64\u63A5\u53E3\u65F6\u8BF7\u5230\u63D2\u4EF6\u7BA1\u7406\u9875\u9762\u5904\u7406\u3002"),Q.default.createElement("label",null,Q.default.createElement("input",{type:"checkbox",checked:k,disabled:!!u||r,onChange:L=>v(L.target.checked)})," \u6211\u786E\u8BA4\u5C06\u6B64\u63D2\u4EF6\u66F4\u65B0\u5230 ",n.latestVersion),Q.default.createElement("button",{disabled:!k||!!u||r,onClick:S},"\u66F4\u65B0\u5230 ",n.latestVersion)),u&&Q.default.createElement("p",{role:"status"},u,Q.default.createElement("progress",{"aria-label":"\u66F4\u65B0\u8FDB\u5EA6"})),f&&Q.default.createElement("p",{role:"alert"},f),h&&Q.default.createElement("p",{role:"status","data-update-state":h.state},h.message))}var gi=[...xr,"remote","remote.pluginManager"];function vi(e,{loader:t=Nr}={}){e.effect(()=>e.locale.register("local.vcs",Lt));let o=e.locale.bind("local.vcs"),r=We(e.connection,()=>o("error"));class i extends z.default.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?z.default.createElement(z.default.Fragment,null,z.default.createElement("p",{role:"alert"},o("reloadFailed")),z.default.createElement("button",{onClick:this.props.restore},o("retry"))):this.props.children}}function s(a){(0,z.useSyncExternalStore)(P=>e.locale.subscribe(P),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let[d,p]=(0,z.useState)(0),[n,l]=(0,z.useState)(!1),[u,w]=(0,z.useState)(""),[f,x]=(0,z.useState)(!1),[h,C]=(0,z.useState)(!1),k=(0,z.useRef)(null),v=(0,z.useRef)("workspace"),y=(0,z.useRef)(null),b=(0,z.useRef)(!0),m=(0,z.useRef)(!1),[g,N]=(0,z.useState)(()=>({Component:Cr(e,{initialView:v.current,onViewChange:P=>{v.current=P}}),version:Ne}));(0,z.useEffect)(()=>(b.current=!0,()=>{b.current=!1,y.current?.abort()}),[]);let S=async()=>{if(m.current||h)return;m.current=!0,y.current?.abort();let P=new AbortController;y.current=P,l(!0),w("");try{let{ui:q,manifest:$}=await t({base:document.baseURI,signal:P.signal,requireModule:I=>{if(I==="react")return z.default;throw Error("Unsupported interface dependency")}});if(!b.current||P.signal.aborted)return;let D=q.createPage(e,{initialView:v.current,onViewChange:I=>{v.current=I}});k.current=g,N({Component:D,version:$.version}),p(I=>I+1),w(o("reloadDone"))}catch(q){b.current&&!P.signal.aborted&&w(o(q.code==="restart-required"?"reloadRestart":"reloadFailed")+" "+q.message)}finally{m.current=!1,b.current&&!P.signal.aborted&&l(!1)}},L=g.Component;return z.default.createElement("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0}},z.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8,padding:8,flexShrink:0}},z.default.createElement("span",null,"VCS ",g.version),z.default.createElement("button",{disabled:n||h,onClick:()=>x(P=>!P),"aria-expanded":f},o("updatePlugin")),z.default.createElement("button",{disabled:n||h,onClick:S},o(n?"loading":"reloadInterface"))),z.default.createElement("div",{hidden:!f},z.default.createElement(At,{rpc:r,manager:e.remote?.pluginManager,clientVersion:g.version,reloadBusy:n,onLock:C,onManager:()=>e.layout.selectPanel("plugins"),t:o})),u&&z.default.createElement("p",{role:"status",style:{padding:"0 12px",flexShrink:0}},u),z.default.createElement("div",{style:{flex:1,minHeight:0}},z.default.createElement(i,{key:d,restore:()=>{k.current&&(N(k.current),k.current=null),p(P=>P+1)}},z.default.createElement(L,{...a}))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},s)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>o("title"),order:65},()=>z.default.createElement("span",{"aria-hidden":"true"},"\u25A3")))}
181
181
  return module.exports; }});