@feng0531/dsh-vcs 0.6.1 → 0.7.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/interface.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export default function(require) { var module = {exports:{}}; var exports=module.exports;
2
- var Zr=Object.create;var Te=Object.defineProperty;var Rr=Object.getOwnPropertyDescriptor;var eo=Object.getOwnPropertyNames;var to=Object.getPrototypeOf,ro=Object.prototype.hasOwnProperty;var oo=(e,r)=>{for(var i in r)Te(e,i,{get:r[i],enumerable:!0})},Vt=(e,r,i,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of eo(r))!ro.call(e,o)&&o!==i&&Te(e,o,{get:()=>r[o],enumerable:!(t=Rr(r,o))||t.enumerable});return e};var ie=(e,r,i)=>(i=e!=null?Zr(to(e)):{},Vt(r||!e||!e.__esModule?Te(i,"default",{value:e,enumerable:!0}):i,e)),io=e=>Vt(Te({},"__esModule",{value:!0}),e);var di={};oo(di,{apply:()=>ci,createPage:()=>Sr,dictionaries:()=>Nt,inject:()=>Go});module.exports=io(di);var a=ie(require("react"),1);var rt=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
2
+ var no=Object.create;var je=Object.defineProperty;var ao=Object.getOwnPropertyDescriptor;var lo=Object.getOwnPropertyNames;var co=Object.getPrototypeOf,po=Object.prototype.hasOwnProperty;var uo=(e,r)=>{for(var o in r)je(e,o,{get:r[o],enumerable:!0})},qt=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of lo(r))!po.call(e,i)&&i!==o&&je(e,i,{get:()=>r[i],enumerable:!(t=ao(r,i))||t.enumerable});return e};var se=(e,r,o)=>(o=e!=null?no(co(e)):{},qt(r||!e||!e.__esModule?je(o,"default",{value:e,enumerable:!0}):o,e)),mo=e=>qt(je({},"__esModule",{value:!0}),e);var gi={};uo(gi,{apply:()=>hi,createPage:()=>Hr,dictionaries:()=>Et,inject:()=>Ko});module.exports=mo(gi);var c=se(require("react"),1);var ot=`.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,5 @@ var Zr=Object.create;var Te=Object.defineProperty;var Rr=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 Wt(e,r){return async(i,t,o)=>{let s=await e.rpc.call("/vcs-rpc",i,t,o);if(!s.ok){let l=new Error(s.error?.message||String(s.error||r()));throw l.code=s.error?.code,l}return s.value}}function ot(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let r=0,i=[];function t(){for(;r<e&&i.length;){let o=i.shift();if(o.signal?.removeEventListener("abort",o.abort),o.signal?.aborted){o.reject(new Error("Aborted"));continue}r++,Promise.resolve().then(()=>{if(o.signal?.aborted)throw new Error("Aborted");return o.run()}).then(o.resolve,o.reject).finally(()=>{r--,t()})}}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),t()})}var ce=ie(require("react"),1);function qt(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Gt(e="",r=""){let i=qt(e),t=qt(r),o=0;for(;o<i.length&&o<t.length&&i[o]===t[o];)o++;let s=0;for(;s<i.length-o&&s<t.length-o&&i[i.length-s-1]===t[t.length-s-1];)s++;let l=i.length-s,d=t.length-s,p=l-o,n=d-o,c=p&&n?(p+1)*(n+1):0,u=c>2e5,v=[],f=0;function b(g,C){f++,!(v.length>=2e3)&&v.push({left:g===null?null:{number:g+1,text:i[g]},right:C===null?null:{number:C+1,text:t[C]},kind:g===null?"insert":C===null?"delete":i[g]===t[C]?"equal":"replace"})}for(let g=0;g<o;g++)b(g,g);if(u||!p||!n)for(let g=0;g<Math.max(p,n);g++)b(g<p?o+g:null,g<n?o+g:null);else{let g=n+1,C=new Uint32Array(c);for(let x=p-1;x>=0;x--)for(let w=n-1;w>=0;w--)C[x*g+w]=i[o+x]===t[o+w]?C[(x+1)*g+w+1]+1:Math.max(C[(x+1)*g+w],C[x*g+w+1]);let k=0,y=0;for(;k<p||y<n;)k<p&&y<n&&i[o+k]===t[o+y]?b(o+k++,o+y++):k<p&&(y===n||C[(k+1)*g+y]>=C[k*g+y+1])?b(o+k++,null):b(null,o+y++)}for(let g=0;g<s;g++)b(l+g,d+g);return{rows:v,approximate:u,truncated:f>v.length,totalRows:f,omittedRows:f-v.length,leftLineCount:i.length,rightLineCount:t.length,lcsCells:u?0:c}}var ao={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."},it={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},lo={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},co={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},po={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Ce({comparison:e,labels:r={}}){let i=e?.left?.text??"",t=e?.right?.text??"",o=(0,ce.useMemo)(()=>Gt(i,t),[i,t]),s=d=>r[d]??ao[d],l=(d,p,n)=>{let c=d&&n!=="equal";return ce.default.createElement("td",{style:{...it,background:c?p==="left"?"#d6454520":"#259b4920":void 0}},ce.default.createElement("div",{style:lo},ce.default.createElement("span",{style:co},d?.number??""),ce.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},c?p==="left"?"\u2212":"+":""),ce.default.createElement("pre",{style:po},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:{...it,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),ce.default.createElement("th",{scope:"col",style:{...it,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=ie(require("react"),1);function It(e,{width:r,height:i,signal:t,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(t?.aborted){n(t.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(r)||!Number.isInteger(i)||r<1||i<1||r>8192||i>8192||r*i>16e6||!Number.isFinite(o)||o<=0){n(new Error("Invalid image preview"));return}let c,u,v,f=!1,b=!1,g=()=>{b||(b=!0,u&&(u.src=""),c&&l(c))},C=()=>{clearTimeout(v),t?.removeEventListener("abort",y)},k=x=>{f||(f=!0,C(),g(),n(x))},y=()=>k(t.reason||new Error("Image cancelled"));try{c=s(e),u=d(),t?.addEventListener("abort",y,{once:!0}),v=setTimeout(()=>k(new Error("Image decode timed out")),o),u.src=c,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){y();return}if(u.naturalWidth!==r||u.naturalHeight!==i){k(new Error("Image dimensions mismatch"));return}f=!0,C(),p({url:c,dispose:g})}},k)}catch(x){k(x)}})}function uo({side:e,sessionId:r,repositoryId:i,commit:t,parentIndex:o,base:s,target:l,workspace:d=!1,mode:p,id:n,rpc:c,t:u,onRediscover:v}){let[f,b]=(0,X.useState)(null),[g,C]=(0,X.useState)(""),[k,y]=(0,X.useState)(0);return(0,X.useEffect)(()=>{let x=new AbortController,w;return b(null),C(""),(async()=>{let m=await c(d?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",d?{sessionId:r,repositoryId:i,mode:p,id:n,side:e}:s?{sessionId:r,repositoryId:i,base:s,target:l,id:n,side:e}:{sessionId:r,repositoryId:i,commit:t,parentIndex:o,id:n,side:e},x.signal);if(x.signal.aborted)return;if(m.absent){b(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 h=atob(m.base64);if(h.length!==m.bytes)throw Error(u("imageInvalid"));let N=new Blob([Uint8Array.from(h,S=>S.charCodeAt(0))],{type:m.mime});if(w=await It(N,{width:m.width,height:m.height,signal:x.signal}),x.signal.aborted){w.dispose();return}b({...m,url:w.url})})().catch(m=>{x.signal.aborted||(C(m.message),m.code==="vcs/rediscover-required"&&v())}),()=>{x.abort(),w?.dispose()}},[e,r,i,t,o,s,l,d,p,n,k]),X.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},X.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),g?X.default.createElement("p",{role:"alert"},g," ",X.default.createElement("button",{onClick:()=>y(x=>x+1)},u("retry"))):f?X.default.createElement(X.default.Fragment,null,X.default.createElement("p",null,X.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?X.default.createElement("p",null,u("imageAbsent")):X.default.createElement(X.default.Fragment,null,X.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),X.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&X.default.createElement("p",null,u("imageMetadata")))):X.default.createElement("p",{role:"status"},u("loading")))}function Ne(e){let[r,i]=(0,X.useState)(!1);return X.default.createElement("div",null,X.default.createElement("button",{"aria-expanded":r,onClick:()=>i(t=>!t)},e.t("imageCompare")),r&&X.default.createElement(X.default.Fragment,null,X.default.createElement("p",null,e.t("imageScope")),X.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(t=>X.default.createElement(uo,{key:t,...e,side:t})))))}var K=ie(require("react"),1);var ne=ie(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 ge=require("react");function Jt({load:e,node:r,comparison:i,key:t,single:o=!1,onReady:s=()=>{},onError:l=()=>{},onComputation:d=()=>{}}){let p=new AbortController,n,c=!1,u=()=>{let f=n;n=void 0,f?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),e(p.signal))).then(f=>{c||(n=f.createDiff(r,{single:o,onComputation:b=>{c||d(b)}}),n.setContent(i,t),c||s(n))}).catch(f=>{try{u()}finally{c||l(f)}}),dispose(){c||(c=!0,p.abort(),u())}}}async function Ve(e,{signal:r,fetcher:i=fetch,importer:t=o=>import(o)}={}){let o=await i(e,{credentials:"same-origin",cache:"no-cache",signal:r});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(),r?.throwIfAborted(),t(e)}var We="0.6.1";function Ut({comparison:e,identity:r,enabled:i,single:t,line:o,sideBySide:s,ignoreWhitespace:l,wrap:d}){let p=(0,ge.useRef)(null),n=(0,ge.useRef)(null),[c,u]=(0,ge.useState)(!1),[v,f]=(0,ge.useState)(""),[b,g]=(0,ge.useState)("pending");return(0,ge.useEffect)(()=>{if(u(!1),g("pending"),f(""),!i)return;let C=x=>new URL("vcs-assets/"+x,document.baseURI).href,k=document.createElement("link");k.rel="stylesheet",k.href=C("editor.css"),document.head.appendChild(k);let y=Jt({node:p.current,comparison:e,key:r,single:t,load:x=>Ve(C("editor.js")+"?v="+encodeURIComponent(We)+"&retry=0",{signal:x}),onReady:x=>{n.current=x,u(!0)},onError:x=>f(x.message),onComputation:g});return()=>{n.current=null;try{y.dispose()}finally{k.remove()}}},[i,e,r,t]),(0,ge.useEffect)(()=>{c&&t&&o&&n.current?.revealLine(o)},[c,t,o]),(0,ge.useEffect)(()=>{c&&n.current?.options({sideBySide:s,ignoreWhitespace:l,wrap:d})},[c,s,l,d]),{node:p,viewer:n,ready:c,error:v,computation:b}}function ve({comparison:e,identity:r,t:i,single:t=!1,line:o=null,initialOptions:s,onOptionsChange:l}){let[d,p]=(0,ne.useState)(s?.sideBySide!==!1),[n,c]=(0,ne.useState)(s?.ignoreWhitespace===!0),[u,v]=(0,ne.useState)(s?.wrap===!0),[f,b]=(0,ne.useState)(s?.enabled!==!1),g=m=>l?.({sideBySide:d,ignoreWhitespace:n,wrap:u,enabled:f,...m}),{node:C,viewer:k,ready:y,error:x,computation:w}=Ut({comparison:e,identity:r,enabled:f,single:t,line:o,sideBySide:d,ignoreWhitespace:n,wrap:u});return ne.default.createElement("div",{className:"vcs-history-viewer"},ne.default.createElement("div",{className:"vcs-history-viewer-toolbar"},ne.default.createElement("button",{"aria-pressed":f,onClick:()=>{b(!f),g({enabled:!f})}},i(f?"historyBasic":"historyAdvanced")),y&&!t&&ne.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},ne.default.createElement("button",{"aria-pressed":d,onClick:()=>{p(!d),g({sideBySide:!d})}},i(d?"side":"inline")),ne.default.createElement("label",null,ne.default.createElement("input",{type:"checkbox",checked:n,onChange:m=>{c(m.target.checked),g({ignoreWhitespace:m.target.checked})}}),i("whitespace")),ne.default.createElement("label",null,ne.default.createElement("input",{type:"checkbox",checked:u,onChange:m=>{v(m.target.checked),g({wrap:m.target.checked})}}),i("wrap")),ne.default.createElement("button",{onClick:()=>k.current?.navigate("previous")},i("previous")),ne.default.createElement("button",{onClick:()=>k.current?.navigate("next")},i("next")))),f&&!y&&!x&&ne.default.createElement("p",{role:"status"},i("loading")),e.large&&!t&&y&&ne.default.createElement("p",{role:"status"},i(w==="complete"?"diffComplete":w==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!y&&ne.default.createElement("p",{role:"status"},i("largeFallback")),x&&ne.default.createElement("p",{role:"status"},i("fallback")," ",x),ne.default.createElement("div",{key:"editor-host",className:"vcs-history-editor-host",style:{position:"relative",height:"var(--vcs-history-editor-height, 360px)"}},ne.default.createElement("div",{ref:C,style:{position:"absolute",inset:0,visibility:y?"visible":"hidden"},"aria-hidden":!y}),!y&&ne.default.createElement(Ce,{comparison:e,labels:je(i)})))}function st({sessionId:e,repositoryId:r,mode:i,id:t,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,K.useState)(null),[n,c]=(0,K.useState)(""),[u,v]=(0,K.useState)(0),[f,b]=(0,K.useState)(1),[g,C]=(0,K.useState)(3);(0,K.useEffect)(()=>{let S=new AbortController;return p(null),c(""),o("vcs/conflict-stages",{sessionId:e,repositoryId:r,mode:i,id:t},S.signal).then(P=>{S.signal.aborted||p(P)}).catch(P=>{S.signal.aborted||(c(P.message),P.code==="vcs/rediscover-required"&&l())}),()=>S.abort()},[e,r,i,t,u]);let k={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},y=s("conflictStageMissing"),x=k[f],w=k[g],m=(0,K.useMemo)(()=>{if(!d)return null;let S=H=>d.stages.find(D=>D.stage===H),P=H=>{let D=S(H);return!D||!D.present?{text:"",label:k[H]}:{text:D.text,label:k[H],...D.binary?{binary:!0}:{},...D.encoding?{encoding:D.encoding}:{},...D.notice?{notice:D.notice}:{}}},F=P(f),I=P(g),Q=[F.notice,I.notice].filter(Boolean);return S(f)?.present&&S(g)?.present||Q.push(y),{path:d.path,left:F,right:I,binary:!!(F.binary||I.binary),...Q.length?{notice:[...new Set(Q)].join(" \xB7 ")}:{}}},[d,f,g,x,w,y]);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:()=>v(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 h=S=>d.stages.find(P=>P.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 ",h(S)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),h(S)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),h(S)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),h(S)?.present&&h(S)?.notice&&" \xB7 "+h(S).notice))),K.default.createElement("label",null,s("conflictStageLeft")," ",K.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:S=>b(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:g,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(ve,{key:JSON.stringify([t,f,g,d.snapshot]),comparison:m,identity:JSON.stringify([e,r,i,t,f,g,d.snapshot]),t:s}))}var zt=ie(require("react"),1);function nt({submodule:e,t:r}){if(!e||typeof e.recorded!="string")return null;let i=e.checkout,t=[];e.pointerMoved&&t.push(r("submodulePointerMoved")),(e.dirty||e.untracked)&&t.push(r("submoduleDirty"));let o=[e.recorded+" \xB7 "+r("submoduleCheckout_"+i),...t].join(" \xB7 ");return zt.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},r("submoduleBadge")," ",e.recorded.slice(0,10),t.length?` \xB7 ${t.join(", ")}`:"")}function qe(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 re=ie(require("react"),1);function at(e){return re.default.createElement(fo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function fo({sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o}){let[s,l]=(0,re.useState)(!1),[d,p]=(0,re.useState)(null),[n,c]=(0,re.useState)(""),[u,v]=(0,re.useState)(0);return(0,re.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),c(""),i("vcs/svn-identity",{sessionId:e,repositoryId:r},f.signal).then(b=>{f.signal.aborted||p(b)}).catch(b=>{f.signal.aborted||(c(b.message),b.code==="vcs/rediscover-required"&&o())}),()=>f.abort()},[s,e,r,u]),re.default.createElement("section",null,re.default.createElement("button",{"aria-expanded":s,onClick:()=>l(f=>!f)},t("svnIdentity")),s&&re.default.createElement(re.default.Fragment,null,re.default.createElement("p",null,t("svnOfflineIdentity")),n?re.default.createElement("p",{role:"alert"},n," ",re.default.createElement("button",{onClick:()=>v(f=>f+1)},t("retry"))):d?re.default.createElement(re.default.Fragment,null,re.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>re.default.createElement(re.default.Fragment,{key:f},re.default.createElement("dt",null,f),re.default.createElement("dd",null,re.default.createElement("code",null,d[f]))))),re.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))):re.default.createElement("p",{role:"status"},t("loading"))))}function Ie(e,r,{now:i=Date.now,schedule:t=setTimeout,cancel:o=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=i()||e-i()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,l=t(()=>{s&&(s=!1,r())},e-i());return()=>{s&&(s=!1,o(l))}}function _t(e,r=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<=r||e.expiresAt-r>3e5)throw Error("Invalid SVN consent response");return e}var le=ie(require("react"),1);var z=ie(require("react"),1);function lt(e){return z.default.createElement(ho,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function ho({sessionId:e,repositoryId:r,rpc:i,t,onApproved:o,onRediscover:s}){let[l,d]=(0,z.useState)(!1),[p,n]=(0,z.useState)(null),[c,u]=(0,z.useState)(!1),[v,f]=(0,z.useState)(""),[b,g]=(0,z.useState)(!1),[C,k]=(0,z.useState)(0);(0,z.useEffect)(()=>{if(!l)return;let w=new AbortController;return n(null),u(!1),f(""),g(!0),i("vcs/svn-describe",{sessionId:e,repositoryId:r},w.signal).then(m=>{w.signal.aborted||n(m)}).catch(m=>{w.signal.aborted||(f(m.message),m.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||g(!1)}),()=>w.abort()},[l,e,r,C]);let[y,x]=(0,z.useState)(0);return(0,z.useEffect)(()=>{if(!l||!p||p.expiresAt===void 0)return;let w=()=>{n(null),u(!1),x(0),g(!1),f(t("svnOfferExpired"))};try{return Ie(p.expiresAt,w)}catch{w()}},[l,p]),(0,z.useEffect)(()=>{if(!y||!l||!p)return;let w=new AbortController;return g(!0),f(""),i("vcs/svn-approve",{sessionId:e,repositoryId:r,offer:p.offer,explicit:!0},w.signal).then(m=>{w.signal.aborted||o(m)}).catch(m=>{w.signal.aborted||(f(m.message),u(!1),m.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||g(!1)}),()=>w.abort()},[y,l,p]),z.default.createElement("section",null,z.default.createElement("button",{"aria-expanded":l,onClick:()=>{x(0),d(w=>!w)}},t("svnConsentReview")),l&&z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,t("svnConsentScope")),v&&z.default.createElement("p",{role:"alert"},v," ",z.default.createElement("button",{disabled:b,onClick:()=>{x(0),k(w=>w+1)}},t("retry"))),p&&z.default.createElement(z.default.Fragment,null,z.default.createElement("dl",null,["origin","root","uuid","scope"].map(w=>z.default.createElement(z.default.Fragment,{key:w},z.default.createElement("dt",null,w),z.default.createElement("dd",null,z.default.createElement("code",null,p[w]))))),p.remoteEnabled?z.default.createElement(z.default.Fragment,null,z.default.createElement("label",null,z.default.createElement("input",{type:"checkbox",checked:c,disabled:b,onChange:w=>u(w.target.checked)}),t("svnConsentExplicit")),z.default.createElement("button",{disabled:b||!c,onClick:()=>x(w=>w+1)},t("svnConsentApprove"))):z.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))),b&&z.default.createElement("p",{role:"status"},t("loading"))))}var E=ie(require("react"),1);function Kt(e,{since:r,until:i}={}){let t=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=t(r),s=t(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 Je(e,r,i){let t=i?[...e.commits.filter(o=>!r.commits.some(s=>s.id===o.id)),...r.commits]:r.commits;return{...r,windowEnd:i+r.commits.length,commits:t.slice(-200)}}function Yt(e,r,i){let t=Je({commits:(e?.entries||[]).map(o=>({...o,id:o.revision}))},{...r,commits:r.entries.map(o=>({...o,id:o.revision}))},i);return{...r,windowEnd:t.windowEnd,entries:t.commits.map(({id:o,...s})=>s)}}var go=9223372036854775807n;function vo(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let r=BigInt(e);if(r>go)throw new Error("SVN revision exceeds supported range");return r}function ct(e){let r=vo(e);return r===0n?null:String(r-1n)}function dt(e){return E.default.createElement(yo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function yo({sessionId:e,repositoryId:r,token:i,snapshot:t,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,E.useState)({cursor:t,offset:0,trail:[]}),[n,c]=(0,E.useState)(null),[u,v]=(0,E.useState)(null),[f,b]=(0,E.useState)(!0),[g,C]=(0,E.useState)(""),[k,y]=(0,E.useState)(0),[x,w]=(0,E.useState)(""),[m,h]=(0,E.useState)(""),{cursor:N,offset:S}=d;(0,E.useEffect)(()=>{let H=new AbortController;return b(!0),C(""),o("vcs/svn-log",{sessionId:e,repositoryId:r,token:i,snapshot:t,cursor:N,limit:50},H.signal).then(D=>{if(!H.signal.aborted){let L=Yt(n,D,S);c(L);let J=new Set((n?.entries||[]).filter(Y=>!L.entries.some(fe=>fe.revision===Y.revision)).map(Y=>Y.revision));v(Y=>J.has(Y)?null:Y)}}).catch(D=>{H.signal.aborted||(C(D.message),D.code==="vcs/rediscover-required"&&l())}).finally(()=>{H.signal.aborted||b(!1)}),()=>H.abort()},[N,S,k]);let P=()=>p(H=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...H.trail,{cursor:N,offset:S}].slice(-200)})),F=()=>{let H=d.trail.at(-1);H&&(v(null),c(null),p({...H,trail:d.trail.slice(0,-1)}))},I=n?.entries||[],Q="";try{I=Kt(I,{since:x,until:m})}catch(H){Q=H.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",t),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((H,D)=>E.default.createElement("label",{key:H},s(H)," ",E.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(H),value:D?m:x,onChange:L=>{v(null),D?h(L.target.value):w(L.target.value)}})))),Q&&E.default.createElement("p",{role:"alert"},Q),!!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"},I.map(H=>E.default.createElement("li",{key:H.revision},E.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===H.revision,onClick:()=>v(H.revision)},E.default.createElement("span",{className:"vcs-commit-subject"},"r",H.revision," \xB7 ",H.message.split(/\r?\n/)[0])),E.default.createElement("div",{className:"vcs-commit-meta"},E.default.createElement("code",null,"r",H.revision)," \xB7 ",H.author," \xB7 ",E.default.createElement("time",{dateTime:H.date},H.date))))),f&&E.default.createElement("p",{role:"status"},s("loading")),g&&E.default.createElement("p",{role:"alert"},g," ",E.default.createElement("button",{onClick:()=>y(H=>H+1)},s("retry"))),!f&&!g&&!n?.entries.length&&E.default.createElement("p",null,s("historyEmpty")),!!n?.entries.length&&!I.length&&E.default.createElement("p",{role:"status"},s("historyNoMatch")),!!d.trail.length&&E.default.createElement("button",{disabled:f,onClick:F},s("historyBack")),!g&&n?.nextRevision!=null&&E.default.createElement("button",{disabled:f,onClick:P},s("historyMore"))),E.default.createElement("div",{className:"vcs-history-details"},u&&E.default.createElement(bo,{key:u,sessionId:e,repositoryId:r,token:i,snapshot:t,rpc:o,t:s,onRediscover:l,revision:u})))}function bo({sessionId:e,repositoryId:r,token:i,snapshot:t,revision:o,rpc:s,t:l,onRediscover:d}){let[p,n]=(0,E.useState)(null),[c,u]=(0,E.useState)(null),[v,f]=(0,E.useState)(""),[b,g]=(0,E.useState)(0),[C,k]=(0,E.useState)(""),[y,x]=(0,E.useState)(!1);(0,E.useEffect)(()=>{let m=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:r,token:i,snapshot:t,revision:o},m.signal).then(h=>{m.signal.aborted||n(h)}).catch(h=>{m.signal.aborted||(f(h.message),h.code==="vcs/rediscover-required"&&d())}),()=>m.abort()},[b]);let w=(p?.changes||[]).filter(m=>m.path.toLocaleLowerCase().includes(C.toLocaleLowerCase()));return E.default.createElement("section",{className:"vcs-commit-details"+(y?" vcs-commit-focused":""),"aria-label":l("commitDetails")},v?E.default.createElement("p",{role:"alert"},v," ",E.default.createElement("button",{onClick:()=>g(m=>m+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,ct(o)===null?l("commitRoot"):"r"+ct(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:C,onChange:m=>{k(m.target.value),u(null)}})),E.default.createElement("span",null,w.length," / ",p.changes.length),E.default.createElement("ul",{className:"vcs-commit-files"},w.map(m=>E.default.createElement("li",{key:m.id},E.default.createElement("button",{disabled:m.kind!=="file","aria-pressed":c?.id===m.id&&c.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"})},l("fileHistory")),m.copyFromPath&&m.copyFromRevision&&!m.copySourceOutsideScope&&E.default.createElement("button",{onClick:()=>u({id:m.id,mode:"copytrace"})},l("svnCopyHistory")," \xB7 ",m.copyFromPath," @r",m.copyFromRevision),m.copySourceOutsideScope&&E.default.createElement("span",null,l("svnCopyOutside")))))),!!p.changes.length&&!w.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")},c&&E.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":y,onClick:()=>x(m=>!m)},l(y?"comparisonRestore":"comparisonFocus")),c?E.default.createElement(wo,{key:JSON.stringify(c),sessionId:e,repositoryId:r,token:i,snapshot:t,revision:o,rpc:s,t:l,onRediscover:d,...c}):E.default.createElement("p",{role:"status"},l("pick")))))}function wo({sessionId:e,repositoryId:r,token:i,snapshot:t,revision:o,rpc:s,t:l,onRediscover:d,id:p,mode:n}){let[c,u]=(0,E.useState)(null),[v,f]=(0,E.useState)({cursor:null,trail:[]}),[b,g]=(0,E.useState)(""),[C,k]=(0,E.useState)(0),{cursor:y,trail:x}=v;return(0,E.useEffect)(()=>{let w=new AbortController;return u(null),g(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:r,token:i,snapshot:t,revision:o,id:p,...y===null?{}:{cursor:y}},w.signal).then(m=>{w.signal.aborted||u(m)}).catch(m=>{w.signal.aborted||(g(m.message),m.code==="vcs/rediscover-required"&&d())}),()=>w.abort()},[y,C]),b?E.default.createElement("p",{role:"alert"},b," ",E.default.createElement("button",{onClick:()=>k(w=>w+1)},l("retry"))):c?n==="compare"?E.default.createElement("section",{className:"vcs-history-comparison"},E.default.createElement("header",{className:"vcs-comparison-heading"},E.default.createElement("h4",null,c.path),E.default.createElement("p",null,c.left?.label," \u2194 ",c.right?.label),c.notice&&E.default.createElement("p",{role:"status"},c.notice)),c.binary?E.default.createElement("p",null,l("binary")):E.default.createElement(ve,{comparison:c,identity:JSON.stringify([e,r,t,o,p]),t:l})):E.default.createElement("section",null,E.default.createElement("p",null,l(n==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",c.path," \xB7 peg r",c.pegRevision),E.default.createElement("ol",null,c.entries.map(w=>E.default.createElement("li",{key:w.revision},"r",w.revision," \xB7 ",w.message))),!!x.length&&E.default.createElement("button",{onClick:()=>f({cursor:x.at(-1),trail:x.slice(0,-1)})},l("historyBack")),c.nextRevision!==null&&E.default.createElement("button",{onClick:()=>f({cursor:c.nextRevision,trail:[...x,y].slice(-200)})},l("historyMore"))):E.default.createElement("p",{role:"status"},l("loading"))}function pt(e){return le.default.createElement(xo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function xo({sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o}){let[s,l]=(0,le.useState)(null),[d,p]=(0,le.useState)(!1),[n,c]=(0,le.useState)(""),[u,v]=(0,le.useState)(0);(0,le.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>i("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token})).catch(()=>{})}},[s,e,r]),(0,le.useEffect)(()=>{if(s)try{return Ie(s.expiresAt,()=>{l(null),v(0),p(!1),c(t("svnExpired"))})}catch{l(null),c(t("svnExpired"))}},[s]),(0,le.useEffect)(()=>{if(!u||!s)return;let g=new AbortController;return p(!0),c(""),i("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token},g.signal).then(()=>{g.signal.aborted||l(null)}).catch(C=>{g.signal.aborted||(c(C.message),C.code==="vcs/rediscover-required"&&o())}).finally(()=>{g.signal.aborted||p(!1)}),()=>g.abort()},[u,s]);let f=g=>{try{_t(g),c(""),v(0),l(g)}catch(C){c(C.message)}},b=async(...g)=>{try{return await i(...g)}catch(C){throw C.code==="vcs/svn-consent-required"&&!g[2]?.aborted&&(l(null),v(0),c(t("svnExpired"))),C}};return le.default.createElement("section",{className:"vcs-svn-remote"},!s&&n&&le.default.createElement("p",{role:"status"},n),s?le.default.createElement(le.default.Fragment,null,le.default.createElement("p",null,t("svnGrantScope")),le.default.createElement("button",{disabled:d,onClick:()=>v(g=>g+1)},t("svnRevoke")),n&&le.default.createElement("p",{role:"alert"},n),!d&&le.default.createElement(dt,{sessionId:e,repositoryId:r,t,onRediscover:o,rpc:b,token:s.token,snapshot:s.snapshot})):le.default.createElement(lt,{sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o,onApproved:f}))}var A=ie(require("react"),1);function Qt(e){let r=new Map;for(let i of e){let t=r.get(i.commit);t||(t={names:[],hidden:0},r.set(i.commit,t)),t.names.length<3?t.names.push(i.name):t.hidden++}return r}var j=ie(require("react"),1);var T=ie(require("react"),1);var R=ie(require("react"),1);var te=ie(require("react"),1);function ut(e){return te.default.createElement(So,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function So({sessionId:e,repositoryId:r,commit:i,path:t,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,te.useState)(!1),[n,c]=(0,te.useState)([0]),[u,v]=(0,te.useState)(null),[f,b]=(0,te.useState)(""),[g,C]=(0,te.useState)(0),k=n.at(-1);(0,te.useEffect)(()=>{if(!d)return;let x=new AbortController;return v(null),b(""),o("vcs/tree-segment",{sessionId:e,repositoryId:r,commit:i,path:t,offset:k},x.signal).then(w=>{x.signal.aborted||v(w)}).catch(w=>{x.signal.aborted||(b(w.message),w.code==="vcs/rediscover-required"&&l())}),()=>x.abort()},[d,k,e,r,i,t,g]);let y=(0,te.useMemo)(()=>u?{path:t,left:{label:i,text:u.text},right:{label:i,text:u.text}}:null,[u,t,i]);return te.default.createElement("section",null,te.default.createElement("button",{"aria-expanded":d,onClick:()=>p(x=>!x)},s("segments")),d&&te.default.createElement(te.default.Fragment,null,te.default.createElement("p",null,s("segmentScope")),f?te.default.createElement("p",{role:"alert"},f," ",te.default.createElement("button",{onClick:()=>C(x=>x+1)},s("retry"))):u?te.default.createElement(te.default.Fragment,null,te.default.createElement("p",null,s("segmentBytes"),": ",u.offset,"\u2013",u.endOffset," / ",u.totalBytes," \xB7 ",te.default.createElement("code",null,u.oid)),te.default.createElement("button",{disabled:n.length===1,onClick:()=>c(x=>x.slice(0,-1))},s("previous")),te.default.createElement("button",{disabled:u.nextOffset===null,onClick:()=>c(x=>[...x,u.nextOffset])},s("next")),te.default.createElement(ve,{single:!0,comparison:y,identity:JSON.stringify([e,r,i,t,k]),t:s})):te.default.createElement("p",{role:"status"},s("loading"))))}var W=ie(require("react"),1);function Ue(e,r,i){let o=i>0&&e.nextOffset===i&&(e.pageOffset??-1)<i?[...e.commits,...r.commits]:r.commits,s=o.filter((l,d)=>o.findIndex(p=>p.id===l.id)===d).slice(-200);return{...r,commits:s,pageOffset:i,windowEnd:i+r.commits.length,windowStart:Math.max(0,i+r.commits.length-s.length)}}function ze(e){return Math.max(0,e-50)}function ko({sessionId:e,repositoryId:r,commit:i,path:t,follow:o,since:s,until:l,rpc:d,t:p,onRediscover:n,onSelectCommit:c}){let[u,v]=(0,W.useState)({commits:[],nextOffset:null}),[f,b]=(0,W.useState)(0),[g,C]=(0,W.useState)(0),[k,y]=(0,W.useState)(!0),[x,w]=(0,W.useState)("");(0,W.useEffect)(()=>{let h=new AbortController;return y(!0),w(""),d("vcs/tree-history",{sessionId:e,repositoryId:r,commit:i,path:t,offset:f,limit:50,follow:o,...s?{since:s}:{},...l?{until:l}:{}},h.signal).then(N=>{h.signal.aborted||v(S=>Ue(S,N,f))}).catch(N=>{h.signal.aborted||(w(N.message),N.code==="vcs/rediscover-required"&&n())}).finally(()=>{h.signal.aborted||y(!1)}),()=>h.abort()},[e,r,i,t,f,g,o,s,l]);let m=h=>p(h.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":h.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":h.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return W.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":k},W.default.createElement("p",null,p("pathHistoryScope")),W.default.createElement("p",{style:{overflowWrap:"anywhere"}},W.default.createElement("code",null,u.path||t)," \xB7 ",W.default.createElement("code",null,i),u.followsRenames!==void 0&&W.default.createElement(W.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),W.default.createElement("ol",null,u.commits.map(h=>W.default.createElement("li",{key:h.id},W.default.createElement("code",{title:h.id},h.id.slice(0,10))," \xB7 ",c?W.default.createElement("button",{onClick:()=>c(h.id,h.path||t)},h.subject):h.subject,W.default.createElement("div",null,h.boundary&&W.default.createElement("span",null,m(h)," "),h.path&&W.default.createElement("code",null,h.oldPath?h.oldPath+" \u2192 ":"",h.path)," ",h.similarity!==void 0&&W.default.createElement("span",null,p("fileHistorySimilarity"),": ",h.similarity,"% \xB7 "),h.author," \xB7 ",W.default.createElement("time",{dateTime:h.date},h.date))))),k&&W.default.createElement("p",{role:"status"},p("loading")),x&&W.default.createElement("p",{role:"alert"},x," ",W.default.createElement("button",{onClick:()=>C(h=>h+1)},p("retry"))),!k&&!x&&!u.commits.length&&W.default.createElement("p",null,p("historyEmpty")),u.truncated&&W.default.createElement("p",{role:"status"},p("historyLimit")),!!f&&W.default.createElement("button",{disabled:k,onClick:()=>b(ze(f))},p("historyBack")),!x&&u.nextOffset!==null&&W.default.createElement("button",{disabled:k,onClick:()=>b(u.nextOffset)},p("historyMore")))}function mt(e){let[r,i]=(0,W.useState)(!1),[t,o]=(0,W.useState)(!1),[s,l]=(0,W.useState)(""),[d,p]=(0,W.useState)("");return W.default.createElement("div",null,W.default.createElement("button",{"aria-expanded":r,onClick:()=>i(n=>!n)},e.t("pathHistory")),r&&W.default.createElement(W.default.Fragment,null,W.default.createElement("label",null,W.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>o(n.target.checked)}),e.t("fileHistoryFollow")),W.default.createElement("p",null,e.t("pathHistoryFollowScope")),W.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,c)=>W.default.createElement("label",{key:n},e.t(n)," ",W.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:c?d:s,onChange:u=>c?p(u.target.value):l(u.target.value)}))),W.default.createElement(ko,{key:JSON.stringify([t,s.trim(),d.trim()]),follow:t,since:s.trim()||null,until:d.trim()||null,...e})))}function Se({sessionId:e,repositoryId:r,commit:i,path:t,rpc:o,t:s,onRediscover:l,onClose:d,onSelectCommit:p,line:n=null,initialViewer:c,onViewerChange:u}){let[v,f]=(0,R.useState)(null),[b,g]=(0,R.useState)(""),[C,k]=(0,R.useState)(0);(0,R.useEffect)(()=>{let x=new AbortController;return f(null),g(""),o("vcs/tree-file",{sessionId:e,repositoryId:r,commit:i,path:t},x.signal).then(w=>{x.signal.aborted||f(w)}).catch(w=>{x.signal.aborted||(g(w.message),w.code==="vcs/rediscover-required"&&l())}),()=>x.abort()},[e,r,i,t,C]);let y=(0,R.useMemo)(()=>v?{path:t,left:{label:i,text:v.text||""},right:{label:i,text:v.text||""}}:null,[v,t,i]);return R.default.createElement("section",{"aria-label":s("treePreview")},R.default.createElement("h4",null,t),R.default.createElement("button",{onClick:d},s("treeClose")),R.default.createElement("p",null,R.default.createElement("code",null,i)),b?R.default.createElement("p",{role:"alert"},b," ",R.default.createElement("button",{onClick:()=>k(x=>x+1)},s("retry"))):v?R.default.createElement(R.default.Fragment,null,R.default.createElement("p",null,R.default.createElement("code",null,v.oid)," \xB7 ",s("encoding"),": ",v.encoding||"\u2014"),n&&R.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,!v.text||n>v.text.split(`
180
- `).length?" \xB7 "+s("blameUnmapped"):""),v.notice&&R.default.createElement("p",{role:"status"},v.notice),v.binary?R.default.createElement("p",null,s("binary")):v.text===""?R.default.createElement("p",null,s("treeEmpty")):R.default.createElement(ve,{initialOptions:c,onOptionsChange:u,single:!0,line:n,comparison:y,identity:JSON.stringify([e,r,i,t]),t:s})):R.default.createElement("p",{role:"status"},s("loading")),R.default.createElement(ut,{sessionId:e,repositoryId:r,commit:i,path:t,rpc:o,t:s,onRediscover:l}),R.default.createElement(mt,{key:JSON.stringify([e,r,i,t]),sessionId:e,repositoryId:r,commit:i,path:t,rpc:o,t:s,onRediscover:l,onSelectCommit:p}))}function $t(e=""){let r=[{path:"",name:"/"}];if(e){let i="";for(let t of e.split("/"))i=i?i+"/"+t:t,r.push({path:i,name:t})}return r}function Xt(e,r="",i=""){let t=r?r+"/":"",o=i.toLowerCase();return e.filter(s=>{let l=s.path.slice(t.length);return s.path.startsWith(t)&&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 Co({sessionId:e,repositoryId:r,commit:i,rpc:t,t:o,onRediscover:s,onSelectCommit:l,initialLocation:d}){let[p,n]=(0,T.useState)(null),[c,u]=(0,T.useState)(""),[v,f]=(0,T.useState)(0),[b,g]=(0,T.useState)(d?.directory||""),[C,k]=(0,T.useState)(d?.offset||0),[y,x]=(0,T.useState)(d?.query||""),[w,m]=(0,T.useState)(d?.path||null),[h,N]=(0,T.useState)(!1),[S,P]=(0,T.useState)(!0),F=(0,T.useRef)(null),I=(0,T.useRef)(d?.path||null),Q=(0,T.useRef)(d?.viewer),H=M=>{I.current=M,Q.current=void 0,m(M)},D=(M,he,de={})=>l?.(M,he,{...de,returnLocation:{source:"tree",tree:{directory:b,offset:C,query:y,path:I.current,viewer:Q.current}}});(0,T.useEffect)(()=>{let M=new AbortController;return P(!0),u(""),(h?Promise.resolve(F.current):(async()=>{try{return await t("vcs/tree-page",{sessionId:e,repositoryId:r,commit:i,path:b,offset:C,limit:100,...y?{query:y}:{}},M.signal)}catch(ee){if(ee.code!=="vcs/not-found"&&ee.code!=="vcs/unsupported")throw ee;return M.signal.throwIfAborted(),{...await t("vcs/tree",{sessionId:e,repositoryId:r,commit:i},M.signal),legacy:!0}}})()).then(ee=>{M.signal.aborted||(n({...ee,requestKey:JSON.stringify([b,C,y])}),ee.legacy&&(F.current=ee,N(!0)))}).catch(ee=>{M.signal.aborted||(u(ee.message),ee.code==="vcs/rediscover-required"&&s())}).finally(()=>{M.signal.aborted||P(!1)}),()=>M.abort()},[e,r,i,b,C,y,v,h]);let L=M=>{g(M),k(0),x(""),H(null)};if(c&&!p)return T.default.createElement("p",{role:"alert"},c," ",T.default.createElement("button",{onClick:()=>f(M=>M+1)},o("retry")));if(!p)return T.default.createElement("p",{role:"status"},o("loading"));let J=p.legacy||p.requestKey===JSON.stringify([b,C,y]),Y=b?b+"/":"",fe=J?Xt(p.entries,b,y):[],xe=p.legacy?fe.slice(C,C+100):fe,ye=J?p.legacy?C+100<fe.length?C+100:null:p.nextOffset:null;return T.default.createElement("section",{"aria-label":o("historicalTree"),"aria-busy":S},S&&T.default.createElement("p",{role:"status"},o("loading")),c&&T.default.createElement("p",{role:"alert"},c," ",T.default.createElement("button",{onClick:()=>f(M=>M+1)},o("retry"))),T.default.createElement("p",null,o("historicalTreeScope")),T.default.createElement("code",null,i),T.default.createElement("p",null,b||"/"," ",b&&T.default.createElement("button",{onClick:()=>L(b.includes("/")?b.slice(0,b.lastIndexOf("/")):"")},o("treeUp"))),T.default.createElement("nav",{"aria-label":o("treeBreadcrumbs")},$t(b).map(M=>T.default.createElement(T.default.Fragment,{key:M.path},M.path&&" / ",M.path===b?T.default.createElement("span",{"aria-current":"location"},M.name):T.default.createElement("button",{onClick:()=>L(M.path)},M.name)))),T.default.createElement("label",null,o("treeSearch")," ",T.default.createElement("input",{"aria-label":o("treeSearch"),maxLength:1024,value:y,onChange:M=>{x(M.target.value),k(0),H(null)}})),T.default.createElement("p",null,xe.length," ",o("treeEntries")),!S&&J&&!xe.length&&y&&T.default.createElement("p",{role:"status"},o("emptySearch")),T.default.createElement("ul",null,xe.map(M=>T.default.createElement("li",{key:M.path},M.type==="tree"?T.default.createElement("button",{onClick:()=>L(M.path)},M.path.slice(Y.length),"/"):M.type==="blob"&&["100644","100755"].includes(M.mode)?T.default.createElement("button",{"aria-pressed":w===M.path,onClick:()=>H(M.path)},M.path.slice(Y.length)):T.default.createElement("span",null,M.path.slice(Y.length))," \xB7 ",T.default.createElement("code",null,M.mode," ",M.type," ",T.default.createElement("span",{title:M.oid},M.oid.slice(0,10)))))),p.truncated&&T.default.createElement("p",{role:"status"},o("historyLimit")),C>0&&T.default.createElement("button",{disabled:S,onClick:()=>{k(Math.max(0,C-100)),H(null)}},o("treePrevious")),ye!=null&&T.default.createElement("button",{disabled:S,onClick:()=>{k(ye),H(null)}},o("treeNext")),w&&T.default.createElement(Se,{key:JSON.stringify([e,r,i,w]),sessionId:e,repositoryId:r,commit:i,rpc:t,t:o,onRediscover:s,onSelectCommit:l?D:void 0,initialViewer:Q.current,onViewerChange:M=>{Q.current=M},path:w,onClose:()=>H(null)}))}function ft(e){return T.default.createElement(No,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function No(e){let[r,i]=(0,T.useState)(!!e.initialLocation);return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":r,onClick:()=>i(t=>!t)},e.t("historicalTree")),r&&T.default.createElement(Co,{...e}))}function ht(e){return{sideBySide:e?.sideBySide!==!1,ignoreWhitespace:e?.ignoreWhitespace===!0,wrap:e?.wrap===!0,enabled:e?.enabled!==!1}}function be(e={}){let r=typeof e.path=="string"&&e.path.length<=32768?e.path:null;return{id:typeof e.id=="string"?e.id:null,path:r,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:ht(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:ht(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:ht(e.viewer)}}function Zt(e,r){return[...e,be(r)].slice(-100)}function gt(e,r){return be({...e,...r,viewer:{...e.viewer,...r.viewer}})}var Z=ie(require("react"),1);var q=ie(require("react"),1);function Eo({sessionId:e,repositoryId:r,commit:i,parentIndex:t,id:o,follow:s,since:l,until:d,rpc:p,t:n,onRediscover:c,onSelectCommit:u}){let[v,f]=(0,q.useState)({commits:[],nextOffset:null}),[b,g]=(0,q.useState)(0),[C,k]=(0,q.useState)(0),[y,x]=(0,q.useState)(!0),[w,m]=(0,q.useState)(""),h={...l?{since:l}:{},...d?{until:d}:{}};return(0,q.useEffect)(()=>{let N=new AbortController;return x(!0),m(""),p("vcs/file-history",{sessionId:e,repositoryId:r,commit:i,parentIndex:t,id:o,offset:b,limit:50,follow:s,...h},N.signal).then(S=>{N.signal.aborted||f(P=>Ue(P,S,b))}).catch(S=>{N.signal.aborted||(m(S.message),S.code==="vcs/rediscover-required"&&c())}).finally(()=>{N.signal.aborted||x(!1)}),()=>N.abort()},[e,r,i,t,o,b,C,s,l,d]),q.default.createElement("section",{"aria-label":n("fileHistory"),"aria-busy":y},q.default.createElement("p",null,n("fileHistoryScope")),q.default.createElement("p",{style:{overflowWrap:"anywhere"}},v.path," \xB7 ",q.default.createElement("code",null,i)),q.default.createElement("ol",null,v.commits.map(N=>q.default.createElement("li",{key:N.id},q.default.createElement("code",{title:N.id},N.id.slice(0,10))," \xB7 ",u?q.default.createElement("button",{onClick:()=>u(N.id,N.path||v.path)},N.subject):N.subject,q.default.createElement("div",null,N.boundary&&q.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&&q.default.createElement("code",null,N.oldPath?N.oldPath+" \u2192 ":"",N.path)," ",N.similarity!==void 0&&q.default.createElement("span",null,n("fileHistorySimilarity"),": ",N.similarity,"% \xB7 "),N.author," \xB7 ",q.default.createElement("time",{dateTime:N.date},N.date))))),y&&q.default.createElement("p",{role:"status"},n("loading")),w&&q.default.createElement("p",{role:"alert"},w," ",q.default.createElement("button",{onClick:()=>k(N=>N+1)},n("retry"))),!y&&!w&&!v.commits.length&&q.default.createElement("p",null,n("historyEmpty")),v.truncated&&q.default.createElement("p",{role:"status"},n("historyLimit")),!!b&&q.default.createElement("button",{disabled:y,onClick:()=>g(ze(b))},n("historyBack")),!w&&v.nextOffset!==null&&q.default.createElement("button",{disabled:y,onClick:()=>g(v.nextOffset)},n("historyMore")))}function vt(e){return q.default.createElement(Lo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Lo(e){let[r,i]=(0,q.useState)(!1),[t,o]=(0,q.useState)(!1),[s,l]=(0,q.useState)(""),[d,p]=(0,q.useState)("");return q.default.createElement("div",null,q.default.createElement("button",{"aria-expanded":r,onClick:()=>i(n=>!n)},e.t("fileHistory")),r&&q.default.createElement(q.default.Fragment,null,q.default.createElement("label",null,q.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>o(n.target.checked)}),e.t("fileHistoryFollow")),q.default.createElement("p",null,e.t("fileHistoryFollowScope")),q.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,c)=>q.default.createElement("label",{key:n},e.t(n)," ",q.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:c?d:s,onChange:u=>c?p(u.target.value):l(u.target.value)}))),q.default.createElement(Eo,{key:JSON.stringify([t,s.trim(),d.trim()]),follow:t,since:s.trim()||null,until:d.trim()||null,...e})))}var G=ie(require("react"),1);function Ho({sessionId:e,repositoryId:r,commit:i,parentIndex:t,id:o,rpc:s,t:l,onRediscover:d,onSelectCommit:p,onSelectLocation:n,initialOrigin:c,initialStartLine:u}){let[v,f]=(0,G.useState)(null),[b,g]=(0,G.useState)(""),[C,k]=(0,G.useState)(0),[y,x]=(0,G.useState)(u||1),[w,m]=(0,G.useState)(c?{commit:c.commit,path:c.path,originalLine:c.line,viewer:c.viewer}:null);return(0,G.useEffect)(()=>{let h=new AbortController;return f(null),g(""),s("vcs/blame",{sessionId:e,repositoryId:r,commit:i,parentIndex:t,id:o,startLine:y,lineLimit:500},h.signal).then(N=>{h.signal.aborted||f(N)}).catch(N=>{h.signal.aborted||(g(N.message),N.code==="vcs/rediscover-required"&&d())}),()=>h.abort()},[e,r,i,t,o,C,y]),b?G.default.createElement("p",{role:"alert"},b," ",G.default.createElement("button",{onClick:()=>k(h=>h+1)},l("retry"))):v?G.default.createElement("section",{"aria-label":l("blame")},G.default.createElement("p",null,l("blameScope")),p&&G.default.createElement("p",null,l("blameNavigation")),v.notice&&G.default.createElement("p",{role:"status"},v.notice),v.truncated&&G.default.createElement("p",{role:"status"},l("blameLimit")),!v.notice&&!v.lines.length&&G.default.createElement("p",null,l("blameEmpty")),!!v.lines.length&&G.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},G.default.createElement("table",null,G.default.createElement("thead",null,G.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(h=>G.default.createElement("th",{key:h,scope:"col"},l(h))))),G.default.createElement("tbody",null,v.lines.map(h=>G.default.createElement("tr",{key:h.line},G.default.createElement("th",{scope:"row"},h.line),G.default.createElement("td",null,p?G.default.createElement("button",{title:h.commit,onClick:()=>n?n(h.commit,h.path||null,{line:h.originalLine||null}):p(h.commit,h.path||null)},G.default.createElement("code",null,h.commit.slice(0,10))):G.default.createElement("code",{title:h.commit},h.commit.slice(0,10))),G.default.createElement("td",null,h.author),G.default.createElement("td",null,h.summary),G.default.createElement("td",null,G.default.createElement("pre",{style:{margin:0}},h.text),h.path&&h.originalLine?G.default.createElement("button",{onClick:()=>m(h)},l("blameOriginLine"),": ",h.path,":",h.originalLine):G.default.createElement("span",null,l("blameUnmapped")))))))),G.default.createElement("p",null,v.startLine||y,"\u2013",v.lines.at(-1)?.line||y," / ",v.totalLines??"\u2014"),G.default.createElement("button",{disabled:y===1,onClick:()=>{m(null),x(Math.max(1,y-500))}},l("blamePrevious")),G.default.createElement("button",{disabled:v.nextLine==null,onClick:()=>{m(null),x(v.nextLine)}},l("blameNext")),w&&G.default.createElement(Se,{key:JSON.stringify([w.commit,w.path,w.originalLine]),sessionId:e,repositoryId:r,rpc:s,t:l,onRediscover:d,initialViewer:w.viewer,onViewerChange:h=>m(N=>N&&{...N,viewer:h}),onSelectCommit:p?(h,N,S={})=>n?n(h,N,{...S,returnLocation:{source:"blame-origin",blameStartLine:y,origin:{commit:w.commit,path:w.path,line:w.originalLine,viewer:w.viewer}}}):p(h,N):void 0,commit:w.commit,path:w.path,line:w.originalLine,onClose:()=>m(null)})):G.default.createElement("p",{role:"status"},l("loading"))}function yt(e){let[r,i]=(0,G.useState)(!!e.initialOrigin);return G.default.createElement("div",null,G.default.createElement("button",{"aria-expanded":r,onClick:()=>i(t=>!t)},e.t("blame")),r&&G.default.createElement(Ho,{...e}))}function Ee(e){return Z.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:r,commit:i,parentIndex:t,base:o,target:s,id:l,rpc:d,t:p,onRediscover:n,onSelectCommit:c,initialViewer:u,onViewerChange:v,initialOrigin:f,initialBlameStartLine:b}){let[g,C]=(0,Z.useState)(null),[k,y]=(0,Z.useState)(""),[x,w]=(0,Z.useState)(0),[m,h]=(0,Z.useState)(!1);return(0,Z.useEffect)(()=>{let N=new AbortController;return C(null),y(""),d(o?"vcs/revision-compare":"vcs/commit-compare",o?{sessionId:e,repositoryId:r,base:o,target:s,id:l,...m?{large:!0}:{}}:{sessionId:e,repositoryId:r,commit:i,parentIndex:t,id:l,...m?{large:!0}:{}},N.signal).then(S=>{N.signal.aborted||C(S)}).catch(S=>{N.signal.aborted||(y(S.message),S.code==="vcs/rediscover-required"&&n())}),()=>N.abort()},[e,r,i,t,o,s,l,x,m]),k?Z.default.createElement("p",{role:"alert"},k," ",Z.default.createElement("button",{onClick:()=>w(N=>N+1)},p("retry")),m&&Z.default.createElement("button",{onClick:()=>h(!1)},p("largeClose"))):g?Z.default.createElement("section",{className:"vcs-history-comparison"},Z.default.createElement("header",{className:"vcs-comparison-heading"},Z.default.createElement("h4",null,g.path),Z.default.createElement("p",null,g.left.label," \u2194 ",g.right.label),g.notice&&Z.default.createElement("p",{role:"status"},g.notice),m?Z.default.createElement("p",null,p("largeScope")," ",Z.default.createElement("button",{onClick:()=>h(!1)},p("largeClose"))):qe(g)&&Z.default.createElement("p",null,p("largeScope")," ",Z.default.createElement("button",{onClick:()=>h(!0)},p("largeLoad")))),g.binary?Z.default.createElement("p",null,p("binary")):Z.default.createElement(ve,{initialOptions:u,onOptionsChange:v,comparison:g,identity:JSON.stringify(o?[e,r,o,s,l]:[e,r,i,t,l]),t:p}),Z.default.createElement("div",{className:"vcs-comparison-extras"},i&&!o&&Z.default.createElement(vt,{onSelectCommit:c,key:"file-history:"+JSON.stringify([e,r,i,t,l]),sessionId:e,repositoryId:r,commit:i,parentIndex:t,id:l,rpc:d,t:p,onRediscover:n}),i&&!o&&Z.default.createElement(yt,{initialOrigin:f,initialStartLine:b,onSelectLocation:c,onSelectCommit:c,key:"blame:"+JSON.stringify([e,r,i,t,l]),sessionId:e,repositoryId:r,commit:i,parentIndex:t,id:l,rpc:d,t:p,onRediscover:n}),(i||o)&&Z.default.createElement(Ne,{key:"image:"+JSON.stringify([e,r,i,t,o,s,l]),sessionId:e,repositoryId:r,commit:i,parentIndex:t,base:o,target:s,id:l,rpc:d,t:p,onRediscover:n}))):Z.default.createElement("p",{role:"status"},p("loading"),m&&Z.default.createElement("button",{onClick:()=>h(!1)},p("largeClose")))}function Rt(e,r){if(typeof r!="string"||!r)return null;let i=e.filter(t=>t.path===r);return i.length===1&&typeof i[0].id=="string"&&i[0].id?i[0].id:null}function er(e,r=""){let i=r.trim().toLowerCase();return i?e.filter(t=>[t.id,t.author,t.subject].some(o=>o?.toLowerCase().includes(i))):e}function _e(e,r=""){let i=r.trim().toLowerCase();return i?e.filter(t=>[t.path,t.oldPath].some(o=>o?.toLowerCase().includes(i))):e}function Le(e){return j.default.createElement(Po,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Po({sessionId:e,repositoryId:r,commit:i,rpc:t,t:o,onRediscover:s,onSelectCommit:l,initialPath:d,initialLocation:p,onLocationChange:n}){let c=(0,j.useRef)(!0),u=be({...p,path:d||p?.path}),v=L=>n?.(L),f=(L,J,Y={})=>l?.(L,J,{returnLocation:{source:"comparison",origin:null},...Y}),[b,g]=(0,j.useState)(null),[C,k]=(0,j.useState)(u.fileQuery),[y,x]=(0,j.useState)(u.focused),[w,m]=(0,j.useState)(u.line),[h,N]=(0,j.useState)(u.parentIndex),[S,P]=(0,j.useState)(null),[F,I]=(0,j.useState)(""),[Q,H]=(0,j.useState)(0);if((0,j.useEffect)(()=>{let L=new AbortController;return P(null),I(""),t("vcs/commit",{sessionId:e,repositoryId:r,commit:i,parentIndex:h},L.signal).then(J=>{L.signal.aborted||(P(J),c.current&&(c.current=!1,g(Rt(J.changes,u.path))))}).catch(J=>{L.signal.aborted||(I(J.message),J.code==="vcs/rediscover-required"&&s())}),()=>L.abort()},[e,r,i,h,Q]),F)return j.default.createElement("p",{role:"alert"},F," ",j.default.createElement("button",{onClick:()=>H(L=>L+1)},o("retry")));if(!S)return j.default.createElement("p",{role:"status"},o("loading"));let D=_e(S.changes,C);return j.default.createElement("section",{className:"vcs-commit-details"+(y?" vcs-commit-focused":""),"aria-label":o("commitDetails")},j.default.createElement("div",{className:"vcs-commit-sidebar"},j.default.createElement("header",{className:"vcs-commit-summary"},j.default.createElement("h3",null,S.subject),j.default.createElement("code",{className:"vcs-commit-oid"},S.id),j.default.createElement("p",null,S.author," \xB7 ",S.date),S.committer&&S.committer!==S.author&&j.default.createElement("p",null,o("commitCommitter")," ",S.committer,S.committerDate?` \xB7 ${S.committerDate}`:""),S.signature?.signed===!0&&j.default.createElement("p",null,j.default.createElement("span",{title:o("commitSignatureUnverified")},o("commitSigned",{format:S.signature.format}))),S.messageTruncated&&j.default.createElement("p",{role:"status"},o("commitMessageLimit")),S.message&&j.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},S.message),S.parents.length>1&&j.default.createElement("label",null,o("commitParent")," ",j.default.createElement("select",{"aria-label":o("commitParent"),value:h,onChange:L=>{g(null),P(null),m(null),N(Number(L.target.value)),v({source:"comparison",origin:null,parentIndex:Number(L.target.value),path:null,line:null})}},S.parents.map((L,J)=>j.default.createElement("option",{key:L,value:J},J+1,": ",L.slice(0,10))))),j.default.createElement("p",null,S.parent||o("commitRoot")," \u2192 ",S.id.slice(0,10))),j.default.createElement("aside",{className:"vcs-commit-picker"},j.default.createElement("label",null,o("commitFileSearch")," ",j.default.createElement("input",{"aria-label":o("commitFileSearch"),value:C,onChange:L=>{k(L.target.value),g(null),m(null),v({fileQuery:L.target.value,path:null,line:null})}})),j.default.createElement("span",null," ",D.length," / ",S.changes.length),j.default.createElement("ul",{className:"vcs-commit-files"},D.map(L=>j.default.createElement("li",{key:L.id},j.default.createElement("button",{"aria-pressed":b===L.id,onClick:()=>{g(L.id),m(null),v({source:"comparison",origin:null,path:L.path,line:null})}},j.default.createElement("span",{className:"vcs-file-status"},L.status," \xB7 "),j.default.createElement("span",{className:"vcs-file-path",title:L.oldPath?L.oldPath+" \u2192 "+L.path:L.path},L.path,L.oldPath&&j.default.createElement("small",null,"\u2190 ",L.oldPath)))))),!!S.changes.length&&!D.length&&j.default.createElement("p",{role:"status"},o("emptySearch")),!S.changes.length&&j.default.createElement("p",null,o("commitNoChanges")),j.default.createElement(ft,{key:JSON.stringify([e,r,i]),initialLocation:u.source==="tree"?u.tree:null,sessionId:e,repositoryId:r,commit:i,rpc:t,t:o,onRediscover:s,onSelectCommit:l}))),j.default.createElement("div",{className:"vcs-commit-review"},j.default.createElement("div",{className:"vcs-commit-comparison","aria-label":o("comparisonContext")},b&&j.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":y,onClick:()=>{x(!y),v({focused:!y})}},o(y?"comparisonRestore":"comparisonFocus")),w&&u.path?j.default.createElement(Se,{sessionId:e,repositoryId:r,commit:i,rpc:t,t:o,onRediscover:s,onSelectCommit:l?f:void 0,path:u.path,line:w,initialViewer:u.viewer,onViewerChange:L=>v({viewer:L}),onClose:()=>{m(null),v({line:null})}}):b?j.default.createElement(Ee,{key:b,sessionId:e,repositoryId:r,commit:i,parentIndex:h,id:b,initialViewer:u.viewer,initialOrigin:u.source==="blame-origin"?u.origin:null,initialBlameStartLine:u.blameStartLine,onViewerChange:L=>v({viewer:L}),onSelectCommit:l?f:void 0,rpc:t,t:o,onRediscover:s}):j.default.createElement("p",{role:"status"},o("pick")))))}var se=ie(require("react"),1);function tr(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let r=e.slice(0,200),i=new Map,t=[],o=[],s=d=>typeof d=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(d);for(let[d,p]of r.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),t.push({id:p.id,row:d})}let l=!1;for(let d of r){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 c=i.get(n);if(c!==void 0&&c<=i.get(d.id))throw new Error("Graph requires child-before-parent order");o.push({from:d.id,to:n,missing:c===void 0})}if(l)break}return{nodes:t,edges:o,nodesTruncated:e.length>200,edgesTruncated:l}}function rr(e){let r=Array(32).fill(null),i=new Map,t=[],o=new Set,s=!1,l=n=>{if(o.has(n))return null;let c=r.indexOf(n);return c>=0?c:(c=r.indexOf(null),c<0?(s=!0,o.add(n),null):(r[c]=n,c))},d=new Map;for(let n of e.edges){if(n.missing)continue;let c=d.get(n.from)||[];c.push(n.to),d.set(n.from,c)}for(let n of e.nodes){let c=l(n.id);if(i.set(n.id,{...n,lane:c}),t.push({...n,lane:c}),c===null)continue;r[c]=null;let u=d.get(n.id)||[];for(let[v,f]of u.entries())r.includes(f)||(v===0&&r[c]===null?r[c]=f:l(f))}let p=e.edges.filter(n=>!n.missing).flatMap(n=>{let c=i.get(n.from),u=i.get(n.to);return c.lane===null||u.lane===null?[]:[{...n,start:c.row,end:u.row,fromLane:c.lane,toLane:u.lane}]});return{nodes:t,edges:p,lanesTruncated:s,laneCount:Math.max(1,...t.map(n=>(n.lane??0)+1))}}function Bo({commits:e,selected:r,onSelect:i,t}){let o;try{o=tr(e)}catch{return se.default.createElement("p",{role:"alert"},t("graphInvalid"))}let s=rr(o),l=s.edges,d=Math.max(100,24+18*s.laneCount),p=Math.max(40,o.nodes.length*36);return se.default.createElement("section",{"aria-label":t("historyGraph")},se.default.createElement("p",null,t("graphScope")),s.lanesTruncated&&se.default.createElement("p",{role:"status"},t("graphLaneLimit")),(o.nodesTruncated||o.edgesTruncated)&&se.default.createElement("p",{role:"status"},t("graphLimit")),se.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},se.default.createElement("svg",{width:d,height:p,"aria-hidden":"true",style:{flexShrink:0}},l.map(n=>{let c=n.start*36+18,u=n.end*36+18,v=12+n.fromLane*18,f=12+n.toLane*18;return se.default.createElement("path",{key:n.from+n.to,d:"M "+v+" "+c+" C "+v+" "+(c+18)+", "+f+" "+(u-18)+", "+f+" "+u,fill:"none",stroke:"currentColor",opacity:"0.45"})}),s.nodes.filter(n=>n.lane!==null).map(n=>se.default.createElement("circle",{key:n.id,cx:12+n.lane*18,cy:n.row*36+18,r:"4",fill:"currentColor"}))),se.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},o.nodes.map(n=>se.default.createElement("li",{key:n.id,style:{height:36,whiteSpace:"nowrap"}},se.default.createElement("button",{title:n.id,"aria-current":r===n.id?!0:void 0,style:r===n.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:c=>{if(c.altKey||c.ctrlKey||c.metaKey||c.shiftKey)return;let u=c.key==="ArrowDown"?Math.min(n.row+1,o.nodes.length-1):c.key==="ArrowUp"?Math.max(0,n.row-1):c.key==="Home"?0:c.key==="End"?o.nodes.length-1:null;u!==null&&(c.preventDefault(),c.stopPropagation(),c.currentTarget.closest("ol").querySelectorAll("button")[u]?.focus())},onClick:()=>i(n.id)},se.default.createElement("code",null,n.id.slice(0,10))," ",e[n.row].subject))))),se.default.createElement("details",null,se.default.createElement("summary",null,t("graphRelations")),se.default.createElement("ul",null,o.edges.map(n=>se.default.createElement("li",{key:n.from+n.to},se.default.createElement("code",null,n.from)," \u2192 ",se.default.createElement("code",null,n.to),n.missing?" \xB7 "+t("graphMissing"):"")))))}function bt(e){let[r,i]=(0,se.useState)(!1);return se.default.createElement("div",null,se.default.createElement("button",{"aria-expanded":r,onClick:()=>i(t=>!t)},e.t("historyGraph")),r&&se.default.createElement(Bo,{...e}))}var V=ie(require("react"),1);function Do({sessionId:e,repositoryId:r,base:i,target:t,rpc:o,t:s,onRediscover:l}){let[d,p]=(0,V.useState)(null),[n,c]=(0,V.useState)(""),[u,v]=(0,V.useState)(0),[f,b]=(0,V.useState)(null),[g,C]=(0,V.useState)("");if((0,V.useEffect)(()=>{let y=new AbortController;return p(null),c(""),b(null),o("vcs/revision-changes",{sessionId:e,repositoryId:r,base:i,target:t},y.signal).then(x=>{y.signal.aborted||p(x)}).catch(x=>{y.signal.aborted||(c(x.message),x.code==="vcs/rediscover-required"&&l())}),()=>y.abort()},[e,r,i,t,u]),n)return V.default.createElement("p",{role:"alert"},n," ",V.default.createElement("button",{onClick:()=>v(y=>y+1)},s("retry")));if(!d)return V.default.createElement("p",{role:"status"},s("loading"));let k=_e(d.changes,g);return V.default.createElement("div",null,V.default.createElement("label",null,s("commitFileSearch")," ",V.default.createElement("input",{"aria-label":s("commitFileSearch"),value:g,onChange:y=>{C(y.target.value),b(null)}})),V.default.createElement("span",null," ",k.length," / ",d.changes.length),!!d.changes.length&&!k.length&&V.default.createElement("p",{role:"status"},s("emptySearch")),!d.changes.length&&V.default.createElement("p",null,s("revisionEmpty")),V.default.createElement("ul",null,k.map(y=>V.default.createElement("li",{key:y.id},V.default.createElement("button",{"aria-pressed":f===y.id,onClick:()=>b(y.id)},y.status," \xB7 ",y.oldPath?y.oldPath+" \u2192 ":"",y.path)))),f&&V.default.createElement(Ee,{key:f,sessionId:e,repositoryId:r,base:i,target:t,id:f,rpc:o,t:s,onRediscover:l}))}function wt(e){return V.default.createElement(Mo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Mo({commits:e,sessionId:r,repositoryId:i,rpc:t,t:o,onRediscover:s,onReferencesLoaded:l}){let[d,p]=(0,V.useState)(""),[n,c]=(0,V.useState)(""),[u,v]=(0,V.useState)([]),[f,b]=(0,V.useState)(!1),[g,C]=(0,V.useState)(0),[k,y]=(0,V.useState)(!1),[x,w]=(0,V.useState)("");return(0,V.useEffect)(()=>{if(!g)return;let m=new AbortController;return y(!0),w(""),t("vcs/references",{sessionId:r,repositoryId:i},m.signal).then(h=>{m.signal.aborted||(v(h.references),b(!0),l?.(h.references))}).catch(h=>{m.signal.aborted||(w(h.message),h.code==="vcs/rediscover-required"&&s())}).finally(()=>{m.signal.aborted||y(!1)}),()=>m.abort()},[r,i,g]),V.default.createElement("section",{"aria-label":o("revisionTitle")},V.default.createElement("h3",null,o("revisionTitle")),V.default.createElement("p",null,o("revisionScope")),V.default.createElement("button",{disabled:k,onClick:()=>C(m=>m+1)},o("revisionLoadRefs")),V.default.createElement("p",null,o("revisionRefsScope")),f&&!k&&!x&&V.default.createElement("p",{role:"status"},u.length?`${o("revisionRefsCount")}: ${u.length}`:o("revisionRefsEmpty")),k&&V.default.createElement("p",{role:"status"},o("loading")),x&&V.default.createElement("p",{role:"alert"},x),[[d,p,"revisionBase"],[n,c,"revisionTarget"]].map(([m,h,N])=>V.default.createElement("label",{key:N},o(N)," ",V.default.createElement("select",{"aria-label":o(N),value:m,onChange:S=>h(S.target.value)},V.default.createElement("option",{value:""},"\u2014"),!!e.length&&V.default.createElement("optgroup",{label:o("revisionLoadedCommits")},e.map(S=>V.default.createElement("option",{key:S.id,value:S.id},S.id.slice(0,10)," \xB7 ",S.subject))),!!u.length&&V.default.createElement("optgroup",{label:o("revisionLocalRefs")},u.map(S=>V.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)&&V.default.createElement("option",{value:m},m)))),V.default.createElement("button",{disabled:!d||!n,onClick:()=>{p(n),c(d)}},o("revisionSwap")),V.default.createElement("p",{style:{overflowWrap:"anywhere"}},V.default.createElement("code",null,d||"\u2014")," \u2192 ",V.default.createElement("code",null,n||"\u2014")),d&&n&&V.default.createElement(Do,{key:JSON.stringify([r,i,d,n]),sessionId:r,repositoryId:i,base:d,target:n,rpc:t,t:o,onRediscover:s}))}function He(e){return A.default.createElement(Fo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Fo({sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o,showSearch:s=!1}){let[l,d]=(0,A.useState)({...be(),revision:0}),[p,n]=(0,A.useState)(""),[c,u]=(0,A.useState)([]),[v,f]=(0,A.useState)(null),[b,g]=(0,A.useState)(""),[C,k]=(0,A.useState)(""),y=B=>{let oe=(v||[]).find(ue=>JSON.stringify([ue.name,ue.commit])===B)?.commit||"";k(B),g(oe),h(ue=>ue?{...ue,snapshot:oe||null}:null),fe(0),n(""),H(null),J({commits:[],snapshot:null,nextOffset:null})},[x,w]=(0,A.useState)({message:"",author:"",path:"",since:"",until:""}),[m,h]=(0,A.useState)(null),N=B=>{h({values:B,snapshot:L.snapshot}),fe(0),n(""),H(null),J(_=>({..._,commits:[],nextOffset:null}))},S=()=>{Y&&(J(B=>({commits:[],snapshot:B.snapshot,nextOffset:null})),H(null),n(""),fe(Math.max(0,Y-50)))},P=(0,A.useMemo)(()=>Qt(v||[]),[v]),F=l.id,I=(B,_=null,oe={})=>{l.id&&u(ue=>Zt(ue,gt(l,oe.returnLocation||{}))),d(ue=>({...be({id:B,path:_,...oe}),revision:ue.revision+1}))},Q=()=>{if(!c.length)return;let B=c[c.length-1];u(_=>_.slice(0,-1)),d(_=>({...be(B),revision:_.revision+1}))},H=(B,_=null)=>{u([]),d(oe=>({...be({id:B,path:_}),revision:oe.revision+1}))},D=B=>d(_=>({...gt(_,B),revision:_.revision})),[L,J]=(0,A.useState)({commits:[],snapshot:null,nextOffset:null}),[Y,fe]=(0,A.useState)(0),[xe,ye]=(0,A.useState)(0),[M,he]=(0,A.useState)(!0),[de,ee]=(0,A.useState)("");(0,A.useEffect)(()=>{let B=new AbortController;return he(!0),ee(""),i("vcs/history",{sessionId:e,repositoryId:r,offset:Y,limit:50,...m?{search:m.values}:{},...m?.snapshot||b||L.snapshot?{snapshot:m?.snapshot||b||L.snapshot}:{}},B.signal).then(_=>{if(!B.signal.aborted){let oe=Je(L,_,Y);J(oe);let ue=new Set(L.commits.filter(me=>!oe.commits.some(Me=>Me.id===me.id)).map(me=>me.id));d(me=>ue.has(me.id)?{...be(),revision:me.revision+1}:me)}}).catch(_=>{B.signal.aborted||(ee(_.message),_.code==="vcs/rediscover-required"&&o())}).finally(()=>{B.signal.aborted||he(!1)}),()=>B.abort()},[e,r,Y,xe,m,b,C]);let pe=er(L.commits,p);return A.default.createElement("section",{className:"vcs-history vcs-history-browser","aria-label":t("history"),"aria-busy":M},A.default.createElement("div",{className:"vcs-history-list"},A.default.createElement("p",null,t("historyListOnly")),v!==null&&A.default.createElement("p",null,t("historyRefsScope")),A.default.createElement("label",null,t("historyBranch")," ",A.default.createElement("select",{"aria-label":t("historyBranch"),value:C,disabled:M,onChange:B=>y(B.target.value)},A.default.createElement("option",{value:""},"HEAD"),C&&!(v||[]).some(B=>JSON.stringify([B.name,B.commit])===C)&&A.default.createElement("option",{value:C},JSON.parse(C)[0]," \xB7 ",b.slice(0,10)," \xB7 ",t("historyPinned")),(v||[]).map(B=>{let _=JSON.stringify([B.name,B.commit]);return A.default.createElement("option",{key:_,value:_},B.name," \xB7 ",B.commit.slice(0,10))}))),s&&A.default.createElement("details",{className:"vcs-help"},A.default.createElement("summary",null,t("historySearchHelp")),A.default.createElement("p",null,t("historyBranchScope"),b&&A.default.createElement(A.default.Fragment,null," \xB7 ",A.default.createElement("code",null,b)))),s&&A.default.createElement("form",{className:"vcs-history-search","aria-label":t("historyServerSearch"),onSubmit:B=>{B.preventDefault(),N({...x})}},A.default.createElement("fieldset",{disabled:M},A.default.createElement("legend",null,t("historyServerSearch")),A.default.createElement("details",{className:"vcs-help"},A.default.createElement("summary",null,t("historySearchHelp")),A.default.createElement("p",null,t("historyServerScope"))),["message","author","path","since","until"].map(B=>A.default.createElement("label",{key:B},t("historyServer_"+B)," ",A.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":t("historyServer_"+B),value:x[B],onChange:_=>w(oe=>({...oe,[B]:_.target.value}))}))),A.default.createElement("button",{type:"submit"},t("historyServerApply")),A.default.createElement("button",{type:"button",onClick:()=>{w({message:"",author:"",path:"",since:"",until:""}),N({})}},t("historyServerClear")))),m&&A.default.createElement("p",{role:"status"},t("historyServerActive"),": ",JSON.stringify(m.values)," \xB7 ",A.default.createElement("code",null,m.snapshot||L.snapshot)),s&&A.default.createElement(A.default.Fragment,null,A.default.createElement("label",null,t("historySearch")," ",A.default.createElement("input",{"aria-label":t("historySearch"),value:p,onChange:B=>{n(B.target.value),H(null)}})),A.default.createElement("span",null," ",pe.length," / ",L.commits.length)),!!L.commits.length&&A.default.createElement(A.default.Fragment,null,A.default.createElement("p",{role:"status"},t("historyWindow"),": ",Math.max(0,(L.windowEnd??L.commits.length)-L.commits.length),"\u2013",L.windowEnd??L.commits.length),s&&A.default.createElement("details",{className:"vcs-help"},A.default.createElement("summary",null,t("historySearchHelp")),A.default.createElement("p",null,t("historyWindowScope")))),!!L.commits.length&&!pe.length&&A.default.createElement("p",{role:"status"},t("historyNoMatch")),A.default.createElement("ol",{className:"vcs-commit-list"},pe.map(B=>A.default.createElement("li",{key:B.id},A.default.createElement("button",{className:"vcs-commit-row","aria-pressed":F===B.id,onClick:()=>H(B.id)},A.default.createElement("span",{className:"vcs-commit-subject"},B.subject)),A.default.createElement("div",{className:"vcs-commit-meta"},A.default.createElement("code",{title:B.id},B.id.slice(0,10))," \xB7 ",B.author," \xB7 ",A.default.createElement("time",{dateTime:B.date},B.date)),P.has(B.id)&&A.default.createElement("div",{"aria-label":t("historyRefsLabel"),style:{overflowWrap:"anywhere"}},P.get(B.id).names.map(_=>A.default.createElement("span",{key:_},A.default.createElement("code",null,_)," ")),P.get(B.id).hidden>0&&A.default.createElement("span",null,t("historyRefsMore"),": ",P.get(B.id).hidden))))),M&&A.default.createElement("p",{role:"status"},t("loading")),de&&A.default.createElement("p",{role:"alert"},de," ",A.default.createElement("button",{onClick:()=>ye(B=>B+1)},t("retry"))),!M&&!de&&!L.commits.length&&A.default.createElement("p",null,t("historyEmpty")),L.truncated&&A.default.createElement("p",{role:"status"},t("historyLimit")),!!Y&&A.default.createElement("button",{disabled:M,onClick:S},t("historyBack")),!de&&L.nextOffset!==null&&A.default.createElement("button",{disabled:M,onClick:()=>fe(L.nextOffset)},t("historyMore")),!!L.commits.length&&A.default.createElement(bt,{commits:L.commits,selected:F,onSelect:H,t}),A.default.createElement(wt,{onReferencesLoaded:f,commits:L.commits,sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o})),A.default.createElement("div",{className:"vcs-history-details"},c.length>0&&A.default.createElement("p",null,A.default.createElement("button",{onClick:Q,"aria-label":t("historyNavigationBack")},t("historyNavigationBack")," \xB7 ",c[c.length-1].id.slice(0,10))),F&&A.default.createElement(Le,{key:JSON.stringify([F,l.revision]),initialPath:l.path,initialLocation:l,onLocationChange:D,sessionId:e,repositoryId:r,commit:F,onSelectCommit:I,rpc:i,t,onRediscover:o})))}var ae=ie(require("react"),1);function xt({sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o}){let[s,l]=(0,ae.useState)(null),[d,p]=(0,ae.useState)(null),[n,c]=(0,ae.useState)(""),[u,v]=(0,ae.useState)(0);return(0,ae.useEffect)(()=>{let f=new AbortController;return c(""),l(null),p(null),i("vcs/stash-list",{sessionId:e,repositoryId:r},f.signal).then(b=>{f.signal.aborted||l(b.stashes)}).catch(b=>{f.signal.aborted||(c(b.message),b.code==="vcs/rediscover-required"&&o())}),()=>f.abort()},[e,r,u]),n?ae.default.createElement("section",{"aria-label":t("stashTitle")},ae.default.createElement("h3",null,t("stashTitle")),ae.default.createElement("p",{role:"alert"},n," ",ae.default.createElement("button",{onClick:()=>v(f=>f+1)},t("retry")))):s?ae.default.createElement("section",{"aria-label":t("stashTitle")},ae.default.createElement("h3",null,t("stashTitle")),ae.default.createElement("p",null,t("stashScope")),s.length?ae.default.createElement("ol",null,s.map(f=>ae.default.createElement("li",{key:f.id},ae.default.createElement("button",{"aria-pressed":d===f.id,onClick:()=>p(f.id)},ae.default.createElement("code",null,f.ref)," \xB7 ",f.message)))):ae.default.createElement("p",{role:"status"},t("stashEmpty")),d&&ae.default.createElement(Le,{sessionId:e,repositoryId:r,commit:d,rpc:i,t,onRediscover:o})):ae.default.createElement("section",{"aria-label":t("stashTitle")},ae.default.createElement("h3",null,t("stashTitle")),ae.default.createElement("p",{role:"status"},t("loading")))}var we=ie(require("react"),1);var U=ie(require("react"),1);function St(e){return U.default.createElement(Oo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Oo({sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o}){let[s,l]=(0,U.useState)(""),[d,p]=(0,U.useState)(null),[n,c]=(0,U.useState)(null),[u,v]=(0,U.useState)(null),[f,b]=(0,U.useState)([]),[g,C]=(0,U.useState)(""),[k,y]=(0,U.useState)(!1),x=(0,U.useRef)(null),w=P=>{x.current?.abort();let F=new AbortController;x.current=F,y(!0),C(""),c(null),v(null),b([]),p(P),i("vcs/grep",{sessionId:e,repositoryId:r,query:P},F.signal).then(I=>{F.signal.aborted||c(I)}).catch(I=>{F.signal.aborted||(C(I.message),I.code==="vcs/rediscover-required"&&o())}).finally(()=>{F.signal.aborted||y(!1)})};(0,U.useEffect)(()=>()=>x.current?.abort(),[]);let m=P=>{P.preventDefault();let F=s.trim();F&&w(F)},h=n?.matches,N=()=>{v(f.at(-1)||null),b(P=>P.slice(0,-1))},S=(P,F,I={})=>{!Ge(P)||!F||(b(Q=>[...Q,u].filter(Boolean).slice(-100)),v({commit:P,path:F,line:I.line||null}))};return U.default.createElement("section",{"aria-label":t("grepTitle")},U.default.createElement("h3",null,t("grepTitle")),U.default.createElement("p",null,t("grepScope")),U.default.createElement("form",{onSubmit:m},U.default.createElement("input",{"aria-label":t("grepQuery"),maxLength:1024,placeholder:t("grepPlaceholder"),value:s,onChange:P=>l(P.target.value)}),U.default.createElement("button",{type:"submit",disabled:k||!s.trim()},t("grepRun"))),u?U.default.createElement(U.default.Fragment,null,U.default.createElement("button",{onClick:N},t("historyBack")),U.default.createElement(Se,{key:JSON.stringify([u.commit,u.path,u.line]),sessionId:e,repositoryId:r,rpc:i,t,onRediscover:o,commit:u.commit,path:u.path,line:u.line,onClose:N,onSelectCommit:S})):g?U.default.createElement("p",{role:"alert"},g," ",U.default.createElement("button",{onClick:()=>d&&w(d)},t("retry"))):k?U.default.createElement("p",{role:"status"},t("loading")):h&&U.default.createElement(U.default.Fragment,null,U.default.createElement("p",{role:"status"},t("grepCount",{count:h.length})),Ge(n.snapshot)&&U.default.createElement("code",null,n.snapshot),h.length?U.default.createElement("ol",null,h.map((P,F)=>U.default.createElement("li",{key:F},Ge(n.snapshot)?U.default.createElement("button",{onClick:()=>{b([]),v({...P,commit:n.snapshot})}},U.default.createElement("code",null,P.path,":",P.line)):U.default.createElement("code",null,P.path,":",P.line)," ",U.default.createElement("pre",{style:{margin:0}},P.text)))):U.default.createElement("p",{role:"status"},t("grepEmpty"))))}function kt(e){return we.default.createElement(To,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function To({t:e,...r}){let[i,t]=(0,we.useState)("content");return we.default.createElement("section",{className:"vcs-search-panel","aria-label":e("searchCenter")},we.default.createElement("nav",{className:"vcs-search-modes","aria-label":e("searchMode")},we.default.createElement("button",{"aria-pressed":i==="content",onClick:()=>t("content")},e("searchContentMode")),we.default.createElement("button",{"aria-pressed":i==="history",onClick:()=>t("history")},e("searchHistoryMode"))),i==="content"?we.default.createElement(St,{...r,t:e}):we.default.createElement(He,{...r,t:e,showSearch:!0}))}var O=ie(require("react"),1);function Ct(e){return O.default.createElement(Vo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}var jo=e=>typeof e=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(e),Ae=e=>e&&typeof e.name=="string"&&e.name.length>0&&e.ref==="refs/heads/"+e.name&&jo(e.commit);function Vo({sessionId:e,repositoryId:r,rpc:i,t,onSwitched:o,onRediscover:s}){let[l,d]=(0,O.useState)(!1),[p,n]=(0,O.useState)(null),[c,u]=(0,O.useState)(""),[v,f]=(0,O.useState)(null),[b,g]=(0,O.useState)(""),[C,k]=(0,O.useState)(""),[y,x]=(0,O.useState)(!1),w=(0,O.useRef)(null),m=(0,O.useRef)(!1),h=(0,O.useRef)(!0),N=(0,O.useRef)(null);(0,O.useEffect)(()=>(h.current=!0,()=>{h.current=!1,N.current=null,w.current?.abort()}),[]);let S=()=>{N.current=null,f(null)};(0,O.useEffect)(()=>{if(!v)return;let H=()=>{N.current===v&&(S(),k(t("branchExpired")))},D=v.expiresAt-Date.now();if(D<=0){H();return}let L=setTimeout(H,D);return()=>clearTimeout(L)},[v]);let P=async()=>{if(m.current||y)return;m.current=!0,w.current?.abort();let H=new AbortController;w.current=H,S(),n(null),u(""),k(""),g("read"),d(!0);try{let D=await i("vcs/branches",{sessionId:e,repositoryId:r},H.signal);if(H.signal.aborted||!h.current)return;if(!Ae(D?.current)||!Array.isArray(D.branches)||!D.branches.every(Ae))throw Error(t("branchInvalid"));n(D)}catch(D){!H.signal.aborted&&h.current&&(k(D.message),D.code==="vcs/rediscover-required"&&s?.())}finally{!H.signal.aborted&&h.current&&(m.current=!1,g(""))}},F=async()=>{if(m.current||y||!p||!c)return;m.current=!0;let H=new AbortController;w.current=H,S(),k(""),g("prepare");try{let D=await i("vcs/branch-switch-prepare",{sessionId:e,repositoryId:r,branch:c},H.signal);if(H.signal.aborted||!h.current)return;if(!Ae(D?.current)||!Ae(D?.target)||D.target.name!==c||typeof D.token!="string"||!/^[a-f0-9]{64}$/.test(D.token)||!Number.isSafeInteger(D.expiresAt)||D.expiresAt<=Date.now()||D.expiresAt>Date.now()+61e3)throw Error(t("branchInvalid"));N.current=D,f(D)}catch(D){!H.signal.aborted&&h.current&&(k(D.message),n(null),u(""),D.code==="vcs/rediscover-required"&&s?.())}finally{!H.signal.aborted&&h.current&&(m.current=!1,g(""))}},I=async()=>{let H=N.current;if(m.current||y||!H)return;if(H.expiresAt<=Date.now()){S(),k(t("branchExpired"));return}m.current=!0,S(),n(null),u(""),g("confirm"),k("");let D=new AbortController;w.current=D;try{let L=await i("vcs/branch-switch-confirm",{sessionId:e,repositoryId:r,token:H.token},D.signal);if(D.signal.aborted||!h.current)return;if(!Ae(L?.current)||L.current.ref!==H.target.ref||L.current.commit!==H.target.commit)throw Error(t("branchInvalid"));d(!1),o()}catch(L){!D.signal.aborted&&h.current&&(x(!0),k(L.message))}finally{!D.signal.aborted&&h.current&&(m.current=!1,g(""))}},Q=()=>{m.current||y||(S(),d(!1),n(null),u(""),k(""))};return O.default.createElement("section",{"aria-label":t("branchSwitcher"),"aria-busy":!!b,style:{padding:"0 12px",flexShrink:0,maxHeight:"45%",overflow:"auto"}},O.default.createElement("button",{disabled:!!b||y,"aria-expanded":l,onClick:()=>l?Q():P()},t("branchSwitcher")),l&&O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,t("branchScope")),b&&O.default.createElement("p",{role:"status"},t(b==="confirm"?"branchPending":"loading")),y?O.default.createElement(O.default.Fragment,null,O.default.createElement("p",{role:"alert"},t("branchUnknown")," ",C),O.default.createElement("button",{onClick:()=>{m.current||o()}},t("branchRecover"))):O.default.createElement(O.default.Fragment,null,C&&O.default.createElement("p",{role:"alert"},C),!b&&O.default.createElement("button",{onClick:P},t("branchRead")),p&&!v&&O.default.createElement(O.default.Fragment,null,O.default.createElement("p",null,t("branchCurrent"),": ",O.default.createElement("code",null,p.current.ref)," \xB7 ",O.default.createElement("code",null,p.current.commit)),O.default.createElement("label",null,t("branchTarget")," ",O.default.createElement("select",{"aria-label":t("branchTarget"),disabled:!!b,value:c,onChange:H=>{S(),u(H.target.value),k("")}},O.default.createElement("option",{value:""},"\u2014"),p.branches.map(H=>O.default.createElement("option",{key:H.ref,value:H.name,disabled:H.ref===p.current.ref},H.name," \xB7 ",H.commit)))),O.default.createElement("button",{disabled:!!b||!c,onClick:F},t("branchPrepare"))),v&&O.default.createElement("section",{role:"group","aria-label":t("branchConfirmation")},O.default.createElement("p",null,t("branchWarning")),O.default.createElement("p",null,t("branchCurrent"),": ",O.default.createElement("code",null,v.current.ref)," \xB7 ",O.default.createElement("code",null,v.current.commit)),O.default.createElement("p",null,t("branchTarget"),": ",O.default.createElement("code",null,v.target.ref)," \xB7 ",O.default.createElement("code",null,v.target.commit)),O.default.createElement("p",null,t("branchExpires"),": ",O.default.createElement("time",{dateTime:new Date(v.expiresAt).toISOString()},new Date(v.expiresAt).toLocaleTimeString())),O.default.createElement("button",{disabled:!!b,onClick:I},t("branchConfirm"))," ",O.default.createElement("button",{disabled:!!b,onClick:S},t("branchCancel"))))))}var Nt={zh:{reviewWithBranchSwitch:"\u53EA\u8BFB\u5BA1\u9605 \xB7 \u5206\u652F\u5207\u6362\u9700\u786E\u8BA4",branchSwitcher:"\u5207\u6362\u672C\u5730 Git \u5206\u652F",branchScope:"\u8FD9\u662F\u5B9E\u9645\u5DE5\u4F5C\u533A\u64CD\u4F5C\uFF0C\u4E0D\u662F\u5386\u53F2\u7B5B\u9009\u3002\u4EC5\u652F\u6301\u5DF2\u6709\u672C\u5730\u5206\u652F\uFF1B\u5FC5\u987B\u5148\u8BFB\u53D6\u5E76\u9884\u68C0\uFF0C\u6838\u5BF9\u6765\u6E90\u53CA\u76EE\u6807\u63D0\u4EA4\u540E\u518D\u6B21\u786E\u8BA4\u3002\u4F1A\u4FEE\u6539 HEAD\u3001\u7D22\u5F15\u53CA\u5DE5\u4F5C\u6587\u4EF6\uFF1B\u4E0D\u5F3A\u5236\u3001\u4E0D\u81EA\u52A8\u6682\u5B58\u3001\u4E0D\u521B\u5EFA\u5206\u652F\u3001\u4E0D\u8054\u7F51\u3002\u810F\u72B6\u6001\u6216\u4E0D\u652F\u6301\u7684\u4ED3\u5E93\u7531\u670D\u52A1\u7AEF\u62D2\u7EDD\u3002",branchRead:"\u91CD\u65B0\u8BFB\u53D6\u672C\u5730\u5206\u652F",branchCurrent:"\u5F53\u524D\u5206\u652F\u4E0E\u63D0\u4EA4",branchTarget:"\u76EE\u6807\u672C\u5730\u5206\u652F",branchPrepare:"\u9884\u68C0\u5E76\u67E5\u770B\u786E\u8BA4\u4FE1\u606F",branchConfirmation:"\u786E\u8BA4\u5B9E\u9645\u5206\u652F\u5207\u6362",branchWarning:"\u786E\u8BA4\u540E\u4F1A\u4FEE\u6539\u5F53\u524D\u4ED3\u5E93\u7684\u5B9E\u9645\u5206\u652F\u3001\u7D22\u5F15\u53CA\u5DE5\u4F5C\u6587\u4EF6\u3002\u8BF7\u5148\u4FDD\u5B58\u7F16\u8F91\u5668\u5185\u5BB9\u3002\u4EC5\u5F53\u524D\u786E\u8BA4\u4FE1\u606F\u6709\u6548\uFF0C\u4E0D\u81EA\u52A8\u91CD\u8BD5\uFF1B\u5207\u6362\u8FDB\u884C\u4E2D\u79BB\u5F00\u9875\u9762\u4E5F\u4E0D\u80FD\u4FDD\u8BC1\u64A4\u9500\u3002",branchConfirm:"\u786E\u8BA4\u5207\u6362\u5B9E\u9645\u5DE5\u4F5C\u533A",branchCancel:"\u53D6\u6D88\u672C\u6B21\u786E\u8BA4",branchExpires:"\u786E\u8BA4\u6709\u6548\u671F\u81F3",branchExpired:"\u786E\u8BA4\u5DF2\u8FC7\u671F\uFF1B\u672A\u53D1\u9001\u5207\u6362\u8BF7\u6C42\u3002\u8BF7\u91CD\u65B0\u9884\u68C0\u3002",branchPending:"\u5207\u6362\u8BF7\u6C42\u5DF2\u53D1\u51FA\uFF1B\u8BF7\u52FF\u91CD\u590D\u64CD\u4F5C\u6216\u79BB\u5F00\u9875\u9762\u3002",branchUnknown:"\u65E0\u6CD5\u786E\u8BA4\u5207\u6362\u7ED3\u679C\u3002\u6B64\u4EE4\u724C\u5DF2\u4F5C\u5E9F\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u8BD5\u3002\u8BF7\u91CD\u65B0\u8BFB\u53D6\u5B9E\u9645\u4ED3\u5E93\u5E76\u5237\u65B0\u5DE5\u4F5C\u533A\uFF0C\u518D\u51B3\u5B9A\u540E\u7EED\u64CD\u4F5C\u3002",branchRecover:"\u91CD\u65B0\u8BFB\u53D6\u5E76\u5237\u65B0\u5DE5\u4F5C\u533A",branchInvalid:"\u5206\u652F\u54CD\u5E94\u4E0D\u5B8C\u6574\u6216\u65E0\u6548\uFF1B\u8BF7\u91CD\u65B0\u8BFB\u53D6\u3002",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:{reviewWithBranchSwitch:"Read-only review \xB7 branch switch requires confirmation",branchSwitcher:"Switch local Git branch",branchScope:"This changes the actual working copy, not the history filter. Existing local branches only. Read and preflight first, then verify source and target commits before confirming. Updates HEAD, index and working files; no force, auto-stash, branch creation or network. Dirty or unsupported repositories are rejected by the host.",branchRead:"Read local branches again",branchCurrent:"Current branch and commit",branchTarget:"Target local branch",branchPrepare:"Preflight and review confirmation",branchConfirmation:"Confirm actual branch switch",branchWarning:"Confirmation changes the actual branch, index and working files. Save editor contents first. This confirmation is single-use and is never retried automatically. Leaving while it runs does not guarantee cancellation.",branchConfirm:"Confirm working-copy switch",branchCancel:"Cancel this confirmation",branchExpires:"Confirmation expires at",branchExpired:"Confirmation expired; no switch request was sent. Preflight again.",branchPending:"Switch request sent. Do not repeat the operation or leave the page.",branchUnknown:"The switch outcome is unknown. This token has been discarded and will not be retried. Read the actual repository and refresh the working copy before deciding what to do next.",branchRecover:"Read again and refresh working copy",branchInvalid:"Invalid or incomplete branch response; read again.",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 or(e,r,i,t){let o=e.target;if(!r?.contains(o)||e.defaultPrevented||e.isComposing||o?.closest?.(".monaco-editor")||o?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&o===i&&t)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 ir(e,r){let i=r?[...r.querySelectorAll("button[data-vcs-item]")]:[],t=i.indexOf(e.target);if(t<0)return;let o;if(e.key==="ArrowDown")o=i[t+1];else if(e.key==="ArrowUp")o=i[t-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 sr=e=>"dsh-vcs:project:v1:"+e;function nr(e,r){if(!e)return"";try{let i=(r??globalThis.localStorage)?.getItem(sr(e));return typeof i=="string"&&i.length<=1024?i:""}catch{return""}}function ar(e,r,i){if(!(!e||!r))try{(i??globalThis.localStorage)?.setItem(sr(e),r)}catch{}}function cr(e,r=""){return e.find(i=>i.id===r)?.id||e.find(i=>i.relativePath===".")?.id||e[0]?.id||""}var Pe=(e,r)=>JSON.stringify([e,r]),Be=(e,r=".")=>[e.type.toUpperCase(),e.relativePath==="."?r:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),Ke=(e,r="all")=>e.type==="git"&&["staged","unstaged"].includes(r)?r:"all",lr=(e="",r="")=>e===r?0:e<r?-1:1;function Et(e=[]){let r={id:"",name:"",directories:new Map,files:[],count:0};for(let t of e){let o=String(t.path||"").split("/").filter(Boolean);if(!o.length)continue;let s=r;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(t)}let i=t=>({...t,directories:[...t.directories.values()].sort((o,s)=>lr(o.name,s.name)).map(i),files:[...t.files].sort((o,s)=>lr(o.path,s.path))});return i(r)}function dr(e=[],r){let i=e.findIndex(t=>t.id===r);return{index:i<0?0:i+1,total:e.length}}function pr(e=[],r,i){if(!e.length||!["previous","next"].includes(i))return null;let t=e.findIndex(l=>l.id===r),o=i==="next"?1:-1,s=t<0?i==="next"?-1:0:t;return e[(s+o+e.length)%e.length]||null}function ur(e=""){let r=String(e).split("/").filter(Boolean);return r.slice(0,-1).map((i,t)=>r.slice(0,t+1).join("/"))}function Lt(e,r=[]){for(let i of e?.directories||[])r.push(i.id),Lt(i,r);return r}function mr(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function fr(e=[]){return e.reduce((r,i)=>{let t=mr(i.status);return r.all++,r[t]=(r[t]||0)+1,r},{all:0})}function qo(e=[],r="",i="all"){let t=r.toLowerCase();return e.filter(o=>(i==="all"||mr(o.status)===i)&&o.path.toLowerCase().includes(t)).sort((o,s)=>o.path.localeCompare(s.path))}function hr(e,r,i="",t="all"){return e.map(o=>({...r[o.id],repository:o,changes:qo(r[o.id]?.changes,i,t)}))}function gr(e,r,i=""){if(!i||!e||e.cwd!==r.cwd)return r;let t=new Map(e.repositories.map(o=>[o.id,o]));for(let o of r.repositories)t.set(o.id,o);return{...r,repositories:[...t.values()],truncated:e.truncated||r.truncated,warnings:[...e.warnings||[],...r.warnings||[]]}}var yr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},vr=e=>new URL("vcs-assets/"+e,document.baseURI).href;function br(){return a.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},a.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),a.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var De=e=>yr[e?.status]||e?.status?.slice(0,1).toUpperCase()||"M",Go=["slots","layout","locale","connection","uiSession"];function Io(){let[e,r]=(0,a.useState)("all"),[i,t]=(0,a.useState)({}),[o,s]=(0,a.useState)(""),[l,d]=(0,a.useState)({added:0,deleted:0,count:0});return{mode:e,setMode:r,statuses:i,setStatuses:t,detailError:o,setDetailError:s,stats:l,setStats:d}}function Jo(e,r){let[i,t]=(0,a.useState)(e);return(0,a.useEffect)(()=>{r?.(i)},[i]),[i,t]}function Uo({session:e,rpc:r,invalidate:i,setStatuses:t}){let o=e?.id,[s,l]=(0,a.useState)(null),[d,p]=(0,a.useState)(()=>nr(e?.cwd)),[n,c]=(0,a.useState)(0),[u,v]=(0,a.useState)(""),[f,b]=(0,a.useState)(""),[g,C]=(0,a.useState)(!1),[k,y]=(0,a.useState)(""),x=(0,a.useRef)(null),w=(0,a.useRef)(null),m=(0,a.useRef)(!1),h=s?.repositories||[];return(0,a.useEffect)(()=>{h.some(P=>P.id===d)&&ar(e?.cwd,d)},[e?.cwd,d,s]),(0,a.useEffect)(()=>{let P=new AbortController;return x.current=P,y(""),C(!!o),o&&r("vcs/repositories",{sessionId:o,...f?{subdirectory:f}:{}},P.signal).then(F=>{if(!P.signal.aborted){let I=gr(w.current,F,f);m.current=!1,p(Q=>cr(I.repositories,Q)),l(I)}}).catch(F=>{P.signal.aborted||y(F.message)}).finally(()=>{P.signal.aborted||C(!1)}),()=>P.abort()},[o,n,f]),{discovery:s,repositories:h,repositoryId:d,setRepositoryId:p,scan:n,subdirectory:u,setSubdirectory:v,scanning:g,error:k,rescan:()=>{m.current=!1,i(),x.current?.abort(),w.current=s,l(null),t({}),b(u.trim()),c(P=>P+1)},rediscover:()=>{m.current||(m.current=!0,i(),x.current?.abort(),w.current=null,l(null),t({}),b(""),c(P=>P+1))}}}function zo({sessionId:e,rpc:r,scheduleStatus:i,discovery:t,repositoryId:o,mode:s,visibleRepositories:l,setStatuses:d,setDetailError:p,rediscover:n,invalidate:c}){let[u,v]=(0,a.useState)(0),[f,b]=(0,a.useState)(0),g=(0,a.useRef)(null),C=(0,a.useRef)(!1),k=(x=!1)=>{x||b(w=>w+1),C.current=x,x||c(),x||d({}),v(w=>w+1)};return(0,a.useEffect)(()=>{let x=new AbortController,w=C.current;g.current=x,C.current=!1,w||(d({}),p(""));for(let m of l){let h=Ke(m,s);i(()=>r("vcs/status",{sessionId:e,repositoryId:m.id,mode:h},x.signal),x.signal).then(N=>{x.signal.aborted||d(S=>({...S,[m.id]:{...N,mode:h}}))}).catch(N=>{if(!x.signal.aborted){if(N.code==="vcs/rediscover-required"){n();return}d(S=>({...S,[m.id]:{error:N.message,changes:[],mode:h}}))}})}return()=>x.abort()},[e,t,o,s,u]),(0,a.useEffect)(()=>{let x=w=>{w.target===window&&e&&o&&document.visibilityState==="visible"&&k(!0)};return window.addEventListener("focus",x),()=>window.removeEventListener("focus",x)},[e,o,s]),{refresh:u,historyRefresh:f,refreshStatuses:k,abortStatus:()=>g.current?.abort()}}function _o({sessionId:e,rpc:r,discovery:i,repositories:t,statuses:o,mode:s,reviewActive:l,setDetailError:d,setStats:p,rediscover:n}){let[c,u]=(0,a.useState)(null),[v,f]=(0,a.useState)(null),[b,g]=(0,a.useState)(!1),[C,k]=(0,a.useState)("content"),[y,x]=(0,a.useState)(null),[w,m]=(0,a.useState)(0),h=(0,a.useRef)(null),N=t.find(J=>J.id===c?.repositoryId),S=c?o[c.repositoryId]:null,P=JSON.stringify([e,i?.cwd,c?.repositoryId,s,c?.id]),F=y?.key===P&&y?.status===S;return(0,a.useEffect)(()=>x(null),[P,S,l]),(0,a.useEffect)(()=>{let J=new AbortController;return h.current=J,f(null),d(""),p({added:0,deleted:0,count:0}),k("content"),g(!!c&&!!S),!l&&c&&S&&N&&r("vcs/compare",{sessionId:e,repositoryId:c.repositoryId,mode:Ke(N,s),id:c.id,...F?{large:!0}:{}},J.signal).then(Y=>{J.signal.aborted||f(Y)}).catch(Y=>{if(!J.signal.aborted){if(Y.code==="vcs/rediscover-required"){n();return}d(Y.message)}}).finally(()=>{J.signal.aborted||g(!1)}),()=>J.abort()},[c,S,e,s,l,F,w]),{selected:c,comparison:v,loading:b,tab:C,setTab:k,large:F,selectionKey:P,selectedRepository:N,selectedStatus:S,reset:()=>{h.current?.abort(),f(null),u(null),d(""),k("content"),p({added:0,deleted:0,count:0})},clearSelection:()=>{h.current?.abort(),f(null),u(null),d("")},selectFile:(J,Y)=>{h.current?.abort(),f(null),k("content"),u({repositoryId:J,id:Y})},toggleLarge:()=>{h.current?.abort(),f(null),x(F?null:{key:P,status:S})},retryCompare:()=>m(J=>J+1)}}function Ko({editorNode:e,viewer:r,setStats:i,comparison:t,sessionId:o,discovery:s,selected:l,mode:d,reviewActive:p}){let[n,c]=(0,a.useState)(0),[u,v]=(0,a.useState)(!1),[f,b]=(0,a.useState)(""),[g,C]=(0,a.useState)("pending"),[k,y]=(0,a.useState)(!0),[x,w]=(0,a.useState)(!1),[m,h]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let N=!1,S,P=new AbortController;v(!1),b("");let F=document.createElement("link");return F.rel="stylesheet",F.href=vr("editor.css"),document.head.appendChild(F),Ve(vr("editor.js")+"?v="+encodeURIComponent(We)+"&retry="+n,{signal:P.signal}).then(I=>{N||(S=I.createDiff(e.current,{onStats:i,onComputation:Q=>{N||C(Q)}}),r.current=S,v(!0))}).catch(I=>{N||b(I.message)}),()=>{N=!0,P.abort(),S?.dispose(),r.current=null,F.remove()}},[n]),(0,a.useEffect)(()=>{u&&(!t||t.binary||p)&&r.current?.setContent({left:{text:""},right:{text:""}},"empty"),u&&t&&!t.binary&&!p&&r.current?.setContent(t,JSON.stringify([o,s?.cwd,l?.repositoryId,d,l?.id,t.path]))},[u,t,o,s,l,d,p]),(0,a.useEffect)(()=>{r.current?.options({sideBySide:k,ignoreWhitespace:x,wrap:m})},[u,k,x,m]),{setEditorRetry:c,editorReady:u,editorError:f,computation:g,sideBySide:k,setSide:y,ignoreWhitespace:x,setWhitespace:w,wrap:m,setWrap:h}}function Yo(){let[e,r]=(0,a.useState)(""),[i,t]=(0,a.useState)("all"),[o,s]=(0,a.useState)(!0),[l,d]=(0,a.useState)({});return{query:e,setQuery:r,statusFilter:i,setStatusFilter:t,tree:o,setTree:s,collapsedDirectories:l,setCollapsedDirectories:d,clearFilters:()=>{r(""),t("all")}}}function Qo({panelNode:e,searchNode:r,fileListNode:i,revealChange:t,query:o,setQuery:s,changes:l,selected:d,reviewActive:p,repositoryId:n,selectFile:c,tree:u,statusFilter:v,collapsedDirectories:f,groups:b,setTree:g,clearFilters:C,chosen:k,setCollapsedDirectories:y}){let x=m=>{let h=pr(l,d?.id,m);h&&c(n,h.id)};return(0,a.useEffect)(()=>{let m=h=>{if(p)return;let N=or(h,e.current,r.current,!!o);N&&(h.preventDefault(),N==="search"?(r.current?.focus(),r.current?.select()):N==="clear"?s(""):x(N))};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[o,l,d,p]),(0,a.useEffect)(()=>{let m=t.current;if(!m)return;let h=[...i.current?.querySelectorAll("button[data-vcs-change]")||[]].find(N=>N.dataset.vcsChange===m);h&&(h.scrollIntoView({block:"nearest"}),h.focus(),t.current=null)},[u,o,v,f,b]),{selectAdjacent:x,revealSelected:()=>{let m=k;!m||!d||(g(!0),C(),y(h=>{let N={...h};for(let S of ur(m.path))N[d.repositoryId+"\0"+S]=!1;return N}),t.current=Pe(d.repositoryId,m.id))}}}function $o({t:e,repositories:r,repositoryId:i,gitSelected:t,scanning:o,mode:s,reviewActive:l,busy:d,sessionId:p,discovery:n,sessionCwd:c,subdirectory:u,onSubdirectoryChange:v,onRescan:f,onRepositoryChange:b,onModeChange:g,onRefresh:C,onBack:k}){return a.default.createElement("header",{className:"vcs-top"},a.default.createElement(br,null),a.default.createElement("h1",{className:"vcs-title"},e("title")),a.default.createElement("span",{className:"vcs-badge"},e(t?"reviewWithBranchSwitch":"readonly")),a.default.createElement("span",{className:"vcs-spacer"}),a.default.createElement("select",{"aria-label":e("repositories"),value:i,disabled:o||!r.length,onChange:y=>b(y.target.value)},!r.length&&a.default.createElement("option",{value:""},e("repositories")),r.map(y=>a.default.createElement("option",{key:y.id,value:y.id},Be(y,e("workspaceRoot"))))),a.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",a.default.createElement("select",{"aria-label":e("gitMode"),value:s,disabled:l||!t,onChange:y=>g(y.target.value)},["all","unstaged","staged"].map(y=>a.default.createElement("option",{key:y,value:y},e(y))))),a.default.createElement("button",{onClick:C,disabled:d||!p},e("refresh")),a.default.createElement("button",{onClick:k},e("back")),a.default.createElement("div",{className:"vcs-path",title:n?.cwd||c},e("session"),": ",n?.cwd||c||"\u2014"),a.default.createElement("form",{className:"vcs-discovery",onSubmit:y=>{y.preventDefault(),f()}},a.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:u,onChange:y=>v(y.target.value)}),a.default.createElement("button",{disabled:!p||o},e("rescan")),a.default.createElement("span",null,e("scanHint"))),n?.truncated&&a.default.createElement("div",{className:"vcs-notice"},e("truncated")),(n?.warnings||[]).map((y,x)=>a.default.createElement("div",{className:"vcs-notice",key:x},typeof y=="string"?y:y.message||JSON.stringify(y))))}function Xo({t:e,gitSelected:r,historyActive:i,stashActive:t,grepActive:o,reviewActive:s,setReviewView:l,openReviewView:d}){return a.default.createElement("nav",{className:"vcs-review-views","aria-label":e("reviewView")},a.default.createElement("button",{"aria-pressed":!s,onClick:()=>l("workspace")},e("workspaceView")),a.default.createElement("button",{"aria-pressed":i,"aria-expanded":i,onClick:()=>d("history")},e("history")),r&&a.default.createElement(a.default.Fragment,null,a.default.createElement("button",{"aria-pressed":t,"aria-expanded":t,onClick:()=>d("stash")},e("stash")),a.default.createElement("button",{"aria-pressed":o,"aria-expanded":o,onClick:()=>d("grep")},e("grep"))))}function Zo({sessionId:e,repositoryId:r,historyRefresh:i,scan:t,rpc:o,t:s,rediscover:l,historyActive:d,stashActive:p,grepActive:n,svnSelected:c,gitSelected:u}){return a.default.createElement(a.default.Fragment,null,d&&c&&a.default.createElement(pt,{key:JSON.stringify([e,r,i,t]),sessionId:e,repositoryId:r,rpc:o,t:s,onRediscover:l}),d&&u&&a.default.createElement(He,{key:JSON.stringify([e,r,i,t]),sessionId:e,repositoryId:r,rpc:o,t:s,onRediscover:l}),p&&a.default.createElement(xt,{sessionId:e,repositoryId:r,rpc:o,t:s,onRediscover:l}),n&&a.default.createElement(kt,{sessionId:e,repositoryId:r,rpc:o,t:s,onRediscover:l}))}function Ro({t:e,statusFilter:r,statusCounts:i,onStatusFilter:t}){return a.default.createElement("div",{className:"vcs-status-filter","aria-label":e("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(o=>a.default.createElement("button",{key:o,"aria-pressed":r===o,onClick:()=>t(o)},e(o==="all"?"allFiles":yr[o]||"M")," ",a.default.createElement("small",null,i[o]||0))))}function wr({entry:e,compact:r=!1,depth:i=0,repositoryId:t,selected:o,t:s,onSelect:l}){let d=e.path.lastIndexOf("/");return a.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":Pe(t,e.id),"aria-current":o?.repositoryId===t&&o?.id===e.id?"true":void 0,style:{paddingInlineStart:8+i*14},title:(e.oldPath?e.oldPath+" \u2192 ":"")+e.path+" \xB7 "+s(De(e)),onClick:()=>l(t,e.id)},a.default.createElement("span",{className:"vcs-status","data-status":De(e)},De(e)),a.default.createElement(nt,{submodule:e.submodule,t:s}),a.default.createElement("span",{className:"vcs-filename"},r?e.path.slice(d+1):e.path,e.oldPath&&a.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",e.oldPath)))}function xr({node:e,repository:r,selected:i,t,collapsedDirectories:o,onToggleDirectory:s,onSelect:l,depth:d=0}){return a.default.createElement(a.default.Fragment,null,e.directories.map(p=>{let n=r.id+"\0"+p.id,c=!!o[n];return a.default.createElement(a.default.Fragment,{key:n},a.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":c?"closed":"open","aria-expanded":!c,style:{paddingInlineStart:8+d*14},onClick:()=>s(n,c)},a.default.createElement("span",{"aria-hidden":"true"},c?"\u203A":"\u2304"),p.name,a.default.createElement("small",null,p.count)),!c&&a.default.createElement(xr,{node:p,repository:r,selected:i,t,collapsedDirectories:o,onToggleDirectory:s,onSelect:l,depth:d+1}))}),e.files.map(p=>a.default.createElement(wr,{key:Pe(r.id,p.id),entry:p,compact:e.id!=="",depth:d,repositoryId:r.id,selected:i,t,onSelect:l})))}function ei({t:e,sessionId:r,scanning:i,error:t,groups:o,statuses:s,query:l,tree:d,collapsedDirectories:p,selected:n,mode:c,fileListNode:u,onSelect:v,onToggleDirectory:f,onRescan:b}){let g=C=>ir(C,u.current);return a.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:u,onKeyDown:g},o.map(C=>{let k=C.repository;return a.default.createElement("section",{className:"vcs-repository",key:k.id,"aria-label":Be(k,e("workspaceRoot"))},a.default.createElement("div",{className:"vcs-repository-heading",title:k.root},a.default.createElement("strong",null,Be(k,e("workspaceRoot"))),a.default.createElement("small",null,k.type==="svn"?e("svnBase"):e(Ke(k,c)))),C.error?a.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},C.error,a.default.createElement("button",{onClick:b},e("rescan"))):s[k.id]?d?a.default.createElement(xr,{node:Et(C.changes),repository:k,selected:n,t:e,collapsedDirectories:p,onToggleDirectory:f,onSelect:v}):C.changes.map(y=>a.default.createElement(wr,{key:Pe(k.id,y.id),entry:y,repositoryId:k.id,selected:n,t:e,onSelect:v})):a.default.createElement("div",{className:"vcs-message"},e("loading")),!C.error&&s[k.id]&&!C.changes.length&&a.default.createElement("div",{className:"vcs-message"},e(l?"emptySearch":"clean")))}),!o.length&&a.default.createElement("div",{className:"vcs-message"},i?e("loading"):t||e(r?"noRepo":"noSession"),t&&a.default.createElement("button",{onClick:b},e("rescan"))))}function ti({t:e,sessionId:r,scanning:i,error:t,groups:o,statuses:s,query:l,statusFilter:d,statusCounts:p,changes:n,tree:c,collapsedDirectories:u,selected:v,mode:f,searchNode:b,fileListNode:g,chosen:C,onQuery:k,onStatusFilter:y,onClearFilters:x,onToggleTree:w,onExpandAll:m,onCollapseAll:h,onRevealSelected:N,onSelect:S,onToggleDirectory:P,onRescan:F}){return a.default.createElement("aside",{className:"vcs-files"},a.default.createElement("div",{className:"vcs-filter"},a.default.createElement("input",{ref:b,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:l,onChange:I=>k(I.target.value)}),(l||d!=="all")&&a.default.createElement("button",{className:"vcs-clear-filter",onClick:x},e("clearFilters"))),a.default.createElement(Ro,{t:e,statusFilter:d,statusCounts:p,onStatusFilter:y}),a.default.createElement("div",{className:"vcs-count"},a.default.createElement("span",null,n.length," ",e("files")),a.default.createElement("span",{className:"vcs-auto"},e("autoRefresh")),a.default.createElement("button",{"aria-pressed":c,onClick:w},e(c?"tree":"list"))),c&&a.default.createElement("div",{className:"vcs-tree-actions"},a.default.createElement("button",{onClick:m},e("expandAll")),a.default.createElement("button",{onClick:h},e("collapseAll")),a.default.createElement("button",{onClick:N,disabled:!C},e("revealSelected"))),a.default.createElement(ei,{t:e,sessionId:r,scanning:i,error:t,groups:o,statuses:s,query:l,tree:c,collapsedDirectories:u,selected:v,mode:f,fileListNode:g,onSelect:S,onToggleDirectory:P,onRescan:F}))}function ri({t:e,comparison:r,chosen:i,selectedRepository:t,editorReady:o,stats:s,onCopyError:l}){let[d,p]=(0,a.useState)(!1),n=async()=>{let c=r?.path||i?.path;if(c)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(c);else{let u=document.createElement("textarea");try{if(u.value=c,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 a.default.createElement("div",{className:"vcs-filehead"},a.default.createElement("strong",{title:r?.path||i?.path},t?Be(t,e("workspaceRoot"))+" / ":"",r?.path||i?.path||e("pick")),a.default.createElement("button",{className:"vcs-copy-path",disabled:!(r?.path||i?.path),onClick:n},e(d?"copied":"copyPath")),d&&a.default.createElement("span",{className:"vcs-sr-only",role:"status"},e("pathCopied")),a.default.createElement("span",{className:"vcs-spacer"}),r&&!r.binary&&o&&a.default.createElement(a.default.Fragment,null,a.default.createElement("span",{className:"vcs-add"},"+",s.added),a.default.createElement("span",{className:"vcs-del"},"\u2212",s.deleted)))}function oi({t:e,comparison:r}){return r?a.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},a.default.createElement("span",{className:"vcs-context-status","data-status":De(r)},e(De(r))),r.oldPath&&a.default.createElement("span",{className:"vcs-context-rename",title:r.oldPath+" \u2192 "+r.path},r.oldPath," ",a.default.createElement("b",null,"\u2192")," ",r.path),a.default.createElement("span",null,r.left.label||"\u2014"," ",a.default.createElement("b",null,"\u2194")," ",r.right.label||"\u2014"),(r.left.encoding||r.right.encoding)&&a.default.createElement("span",null,e("encoding"),": ",r.left.encoding||"\u2014"," / ",r.right.encoding||"\u2014")):null}function ii({t:e,comparison:r,selected:i,selectedRepository:t,selectedStatus:o,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:c,large:u,selectionKey:v,detailError:f,editorError:b,computation:g,onToggleLarge:C,onRetryCompare:k}){return a.default.createElement(a.default.Fragment,null,r&&t?.type==="git"&&a.default.createElement(Ne,{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:c}),t?.type==="git"&&(u||qe(r))&&a.default.createElement("div",{className:"vcs-notice"},a.default.createElement("span",null,e("workspaceLargeScope")),a.default.createElement("button",{onClick:C},e(u?"largeClose":"largeLoad")),u&&f&&a.default.createElement("button",{onClick:k},e("retry"))),r?.large&&a.default.createElement("p",{role:"status"},e(b?"largeFallback":g==="complete"?"diffComplete":g==="incomplete"?"diffIncomplete":"diffPending")),r?.notice&&a.default.createElement("div",{className:"vcs-notice"},r.notice),r?.submodule&&a.default.createElement("p",{role:"status"},e("submoduleScope")),r?.status==="conflicted"&&t?.type==="git"&&a.default.createElement(st,{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:c}))}function si({t:e,comparison:r,editorNode:i,editorError:t,overlay:o,tab:s,error:l,detailError:d,onRetryEditor:p,onRescan:n}){return a.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!o||s!=="content",style:s==="properties"?{display:"none"}:void 0},a.default.createElement("div",{className:"vcs-editor",ref:i,style:t?{display:"none"}:void 0}),t&&r&&!r.binary&&!o&&a.default.createElement(Ce,{comparison:r,labels:je(e)}),o&&a.default.createElement("div",{className:"vcs-message "+(l||d||t?"vcs-error":""),role:"status"},o,(l||d||t)&&a.default.createElement("button",{onClick:()=>t?p():n()},e(t?"retry":"rescan"))))}function ni({t:e,comparison:r,properties:i,propertyNames:t}){return a.default.createElement("div",{className:"vcs-properties"},a.default.createElement("table",null,a.default.createElement("thead",null,a.default.createElement("tr",null,a.default.createElement("th",null,e("properties")),a.default.createElement("th",null,r?.left.label||e("before")),a.default.createElement("th",null,r?.right.label||e("after")))),a.default.createElement("tbody",null,t.map(o=>a.default.createElement("tr",{key:o},a.default.createElement("th",null,o),a.default.createElement("td",null,i.left?.[o]??"\u2014"),a.default.createElement("td",null,i.right?.[o]??"\u2014"))))))}function ai({t:e,editorReady:r,sideBySide:i,setSide:t,ignoreWhitespace:o,setWhitespace:s,wrap:l,setWrap:d,stats:p,overlay:n,comparison:c,viewer:u,changes:v,selected:f,onSelectAdjacent:b}){let g=dr(v,f?.id);return a.default.createElement("footer",{className:"vcs-toolbar"},a.default.createElement("button",{disabled:!r,"aria-pressed":i,onClick:()=>t(!i)},e(i?"side":"inline")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!r,checked:o,onChange:C=>s(C.target.checked)}),e("whitespace")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!r,checked:l,onChange:C=>d(C.target.checked)}),e("wrap")),a.default.createElement("span",{className:"vcs-spacer"}),r&&a.default.createElement("span",null,p.count," ",e("changes")),a.default.createElement("button",{disabled:!r||!c||!!n,onClick:()=>u.current?.navigate("previous")},e("previous")),a.default.createElement("button",{disabled:!r||!c||!!n,onClick:()=>u.current?.navigate("next")},e("next")),g.index>0&&a.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:g.index,total:g.total})),a.default.createElement("span",{className:"vcs-toolbar-separator"}),a.default.createElement("button",{title:e("fileShortcut"),disabled:!v.length,onClick:()=>b("previous")},e("previousFile")),a.default.createElement("button",{title:e("fileShortcut"),disabled:!v.length,onClick:()=>b("next")},e("nextFile")))}function li({t:e,comparison:r,selected:i,selectedRepository:t,selectedStatus:o,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:c,large:u,selectionKey:v,loading:f,detailError:b,error:g,busy:C,chosen:k,repositoryCount:y,editorNode:x,editorReady:w,editorError:m,computation:h,tab:N,setTab:S,stats:P,onRetryEditor:F,onRetryCompare:I,onRescan:Q,onToggleLarge:H,sideBySide:D,setSide:L,ignoreWhitespace:J,setWhitespace:Y,wrap:fe,setWrap:xe,viewer:ye,changes:M,onSelectAdjacent:he,onCopyError:de}){let ee=r?.properties,pe=ee?[...new Set([...Object.keys(ee.left||{}),...Object.keys(ee.right||{})])].filter(oe=>ee.left?.[oe]!==ee.right?.[oe]):[],B=r?.binary?[r.left.label,r.right.label].filter(Boolean).join(" \u2194 "):"",_=b||(f?e("loading"):s?C&&!k?e("loading"):g||(y?k?r?.binary?e("binary")+(B?" "+e("binaryComparison",{files:B}):""):r?!w&&!m?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession"));return a.default.createElement("main",{className:"vcs-detail"},a.default.createElement(ri,{t:e,comparison:r,chosen:k,selectedRepository:t,editorReady:w,stats:P,onCopyError:de}),m&&a.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",a.default.createElement("button",{onClick:F},e("retry")),a.default.createElement("details",null,a.default.createElement("summary",null,e("diagnostics")),m)),a.default.createElement(oi,{t:e,comparison:r}),a.default.createElement(ii,{t:e,comparison:r,selected:i,selectedRepository:t,selectedStatus:o,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:c,large:u,selectionKey:v,detailError:b,editorError:m,computation:h,onToggleLarge:H,onRetryCompare:I}),pe.length>0&&a.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(oe=>a.default.createElement("button",{key:oe,"aria-pressed":N===oe,onClick:()=>S(oe)},e(oe),oe==="properties"?" ("+pe.length+")":""))),a.default.createElement("div",{className:"vcs-labels"},a.default.createElement("span",null,r?.left.label||"\u2014",r?.left.encoding?" \xB7 "+r.left.encoding:""),a.default.createElement("span",null,r?.right.label||"\u2014",r?.right.encoding?" \xB7 "+r.right.encoding:"")),a.default.createElement(si,{t:e,comparison:r,editorNode:x,editorError:m,overlay:_,tab:N,error:g,detailError:b,onRetryEditor:F,onRescan:Q}),N==="properties"&&a.default.createElement(ni,{t:e,comparison:r,properties:ee,propertyNames:pe}),a.default.createElement(ai,{t:e,editorReady:w,sideBySide:D,setSide:L,ignoreWhitespace:J,setWhitespace:Y,wrap:fe,setWrap:xe,stats:P,overlay:_,comparison:r,viewer:ye,changes:M,selected:i,onSelectAdjacent:he}))}function Sr(e,{initialView:r="workspace",onViewChange:i}={}){let t=e.locale.bind("local.vcs"),o=ot(2),s=Wt(e.connection,()=>t("error"));function l(n){let c=n.useSessions(u=>Object.values(u.byId).find(v=>(v.retainedBy.mainView??0)>0));return a.default.createElement(d,{key:JSON.stringify([c?.id,c?.cwd])},a.default.createElement(p,{session:c}))}class d extends a.default.Component{state={error:null};static getDerivedStateFromError(c){return{error:c}}render(){return this.state.error?a.default.createElement("section",{className:"vcs-root"},a.default.createElement("style",null,rt),a.default.createElement("div",{className:"vcs-message vcs-error"},t("error"),a.default.createElement("button",{onClick:()=>this.setState({error:null})},t("retry")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")))):this.props.children}}function p({session:n}){(0,a.useSyncExternalStore)($=>e.locale.subscribe($),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let c=n?.id,u=(0,a.useRef)(null),v=(0,a.useRef)(null),f=(0,a.useRef)(null),b=(0,a.useRef)(null),g=(0,a.useRef)(null),C=(0,a.useRef)(null),k=(0,a.useRef)(null),[y,x]=Jo(r,i),{mode:w,setMode:m,statuses:h,setStatuses:N,detailError:S,setDetailError:P,stats:F,setStats:I}=Io(),Q=()=>k.current?.(),{discovery:H,repositories:D,repositoryId:L,setRepositoryId:J,scan:Y,subdirectory:fe,setSubdirectory:xe,scanning:ye,error:M,rescan:he,rediscover:de}=Uo({session:n,rpc:s,invalidate:Q,setStatuses:N}),ee=D.filter($=>$.id===L),pe=ee.some($=>$.type==="git"),B=ee.some($=>$.type==="svn"),_=(pe||B)&&y==="history",oe=pe&&y==="stash",ue=pe&&y==="grep",me=_||oe||ue,{refresh:Me,historyRefresh:kr,refreshStatuses:Cr,abortStatus:Nr}=zo({sessionId:c,rpc:s,scheduleStatus:o,discovery:H,repositoryId:L,mode:w,visibleRepositories:ee,setStatuses:N,setDetailError:P,rediscover:de,invalidate:Q}),{selected:ke,comparison:Ht,loading:Er,tab:Lr,setTab:Hr,large:Ar,selectionKey:Pr,selectedRepository:Br,selectedStatus:At,reset:Dr,clearSelection:Mr,selectFile:Pt,toggleLarge:Fr,retryCompare:Or}=_o({sessionId:c,rpc:s,discovery:H,repositories:D,statuses:h,mode:w,reviewActive:me,setDetailError:P,setStats:I,rediscover:de}),Ye=()=>{Nr(),Dr()};k.current=Ye;let Tr=$=>{Mr(),x($)},{setEditorRetry:jr,editorReady:Vr,editorError:Wr,computation:qr,sideBySide:Gr,setSide:Ir,ignoreWhitespace:Jr,setWhitespace:Ur,wrap:zr,setWrap:_r}=Ko({editorNode:v,viewer:f,setStats:I,comparison:Ht,sessionId:c,discovery:H,selected:ke,mode:w,reviewActive:me}),{query:Qe,setQuery:Bt,statusFilter:$e,setStatusFilter:Kr,tree:Xe,setTree:Dt,collapsedDirectories:Mt,setCollapsedDirectories:Ze,clearFilters:Ft}=Yo(),Fe=hr(ee,h,Qe,$e),Re=Fe.flatMap($=>$.changes),Yr=fr(h[L]?.changes),et=At?.changes?.find($=>$.id===ke?.id),Ot=$=>Ze(tt=>{let Oe={...tt};for(let jt of Fe)for(let Xr of Lt(Et(jt.changes)))Oe[jt.repository.id+"\0"+Xr]=!$;return Oe}),Tt=ye||ee.some($=>!h[$.id]),{selectAdjacent:Qr,revealSelected:$r}=Qo({panelNode:u,searchNode:g,fileListNode:b,revealChange:C,query:Qe,setQuery:Bt,changes:Re,selected:ke,reviewActive:me,repositoryId:L,selectFile:Pt,tree:Xe,statusFilter:$e,collapsedDirectories:Mt,groups:Fe,setTree:Dt,clearFilters:Ft,chosen:et,setCollapsedDirectories:Ze});return a.default.createElement("section",{ref:u,className:"vcs-root","aria-label":t("title")},a.default.createElement("style",null,rt),a.default.createElement($o,{t,repositories:D,repositoryId:L,gitSelected:pe,scanning:ye,mode:w,reviewActive:me,busy:Tt,sessionId:c,discovery:H,sessionCwd:n?.cwd,subdirectory:fe,onSubdirectoryChange:xe,onRescan:he,onRepositoryChange:$=>{Ye(),N({}),J($)},onModeChange:$=>{Ye(),N({}),m($)},onRefresh:()=>Cr(!1),onBack:()=>e.layout.selectPanel(null)}),pe&&a.default.createElement(Ct,{key:JSON.stringify([c,L,Y]),sessionId:c,repositoryId:L,rpc:s,t,onSwitched:de,onRediscover:de}),ee.filter($=>$.type==="svn"&&!me).map($=>a.default.createElement(a.default.Fragment,{key:JSON.stringify([c,$.id,Y,Me])},a.default.createElement(at,{repositoryId:$.id,sessionId:c,rpc:s,t,onRediscover:de}))),(pe||B)&&a.default.createElement(a.default.Fragment,null,a.default.createElement(Xo,{t,gitSelected:pe,historyActive:_,stashActive:oe,grepActive:ue,reviewActive:me,setReviewView:x,openReviewView:Tr}),a.default.createElement(Zo,{sessionId:c,repositoryId:L,historyRefresh:kr,scan:Y,rpc:s,t,rediscover:de,historyActive:_,stashActive:oe,grepActive:ue,svnSelected:B,gitSelected:pe})),a.default.createElement("div",{className:"vcs-body",hidden:me,"aria-label":t("workspaceView")},a.default.createElement(ti,{t,sessionId:c,scanning:ye,error:M,groups:Fe,statuses:h,query:Qe,statusFilter:$e,statusCounts:Yr,changes:Re,tree:Xe,collapsedDirectories:Mt,selected:ke,mode:w,searchNode:g,fileListNode:b,chosen:et,onQuery:Bt,onStatusFilter:Kr,onClearFilters:Ft,onToggleTree:()=>Dt(!Xe),onExpandAll:()=>Ot(!0),onCollapseAll:()=>Ot(!1),onRevealSelected:$r,onSelect:Pt,onToggleDirectory:($,tt)=>Ze(Oe=>({...Oe,[$]:!tt})),onRescan:he}),a.default.createElement(li,{t,comparison:Ht,selected:ke,selectedRepository:Br,selectedStatus:At,sessionId:c,mode:w,discoveryCwd:H?.cwd,refresh:Me,rpc:s,rediscover:de,large:Ar,selectionKey:Pr,loading:Er,detailError:S,error:M,busy:Tt,chosen:et,repositoryCount:D.length,editorNode:v,editorReady:Vr,editorError:Wr,computation:qr,tab:Lr,setTab:Hr,stats:F,onRetryEditor:()=>jr($=>$+1),onRetryCompare:Or,onRescan:he,onToggleLarge:Fr,sideBySide:Gr,setSide:Ir,ignoreWhitespace:Jr,setWhitespace:Ur,wrap:zr,setWrap:_r,viewer:f,changes:Re,onSelectAdjacent:Qr,onCopyError:P})))}return l}function ci(e){e.effect(()=>e.locale.register("local.vcs",Nt));let r=e.locale.bind("local.vcs"),i=Sr(e);e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},i)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>r("title"),order:65},br))}
179
+ `;function Vt(e,r){return async(o,t,i)=>{let s=await e.rpc.call("/vcs-rpc",o,t,i);if(!s.ok){let l=new Error(s.error?.message||String(s.error||r()));throw l.code=s.error?.code,l}return s.value}}function it(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let r=0,o=[];function t(){for(;r<e&&o.length;){let i=o.shift();if(i.signal?.removeEventListener("abort",i.abort),i.signal?.aborted){i.reject(new Error("Aborted"));continue}r++,Promise.resolve().then(()=>{if(i.signal?.aborted)throw new Error("Aborted");return i.run()}).then(i.resolve,i.reject).finally(()=>{r--,t()})}}return(i,s)=>new Promise((l,d)=>{let p={run:i,signal:s,resolve:l,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),t()})}var _=se(require("react"),1);function ke(e){return Number.isSafeInteger(e)&&e>0}function Gt(e,r=null,o=!1){let t=ke(e?.startLine)&&ke(e?.endLine)&&e.endLine>=e.startLine,i=typeof e?.text=="string"?e.text:"",s=t&&i===""&&e.targetFound===!0&&e.startLine===e.endLine&&e.startLine>1&&Number.isSafeInteger(e.totalBytes)&&e.totalBytes>0&&e.offset===e.totalBytes&&e.endOffset===e.totalBytes&&!e.startsMidLine&&!e.endsMidLine,l=Ne(i,{line:r,startLine:t?e.startLine:1,emptyLine:s}),d=e?.endOffset<e?.totalBytes&&/(?:\r\n|\r|\n)$/.test(i)&&r===l.baseLine+l.totalLines-1,p=t&&l.targetFound&&r<=e.endLine&&!d&&(!o||e.targetFound===!0)?r:null;return{located:t,emptyLine:s,startLine:t?e.startLine:1,target:p,partial:!!(e?.startsMidLine||e?.endsMidLine||e?.lineTruncated)}}function Ne(e="",{line:r=null,startLine:o=1,anchor:t=null,emptyLine:i=!1}={}){let s=ke(o)?o:1,l=ke(r)?r:null,d=/\r\n|\n|\r/g,p=e===""&&i!==!0?0:1;for(;d.exec(e);)p++;let n=l!==null&&l>=s&&l-s<p,a=ke(t)?t:n?l:s,u=Math.max(0,Math.min(Math.max(0,p-500),a-s-Math.floor(500/2))),b=Math.min(p,u+500),f=[],h=0,v=0,k;d.lastIndex=0;let S=w=>{h>=u&&h<b&&f.push({number:s+h,text:e.slice(v,w)}),h++};for(;h<b&&(k=d.exec(e));)S(k.index),v=d.lastIndex;return h<b&&S(e.length),{rows:f,startLine:f[0]?.number??s,endLine:f.at(-1)?.number??s,totalLines:p,baseLine:s,targetFound:n,truncated:f.length<p}}function Ut(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Jt(e="",r=""){let o=Ut(e),t=Ut(r),i=0;for(;i<o.length&&i<t.length&&o[i]===t[i];)i++;let s=0;for(;s<o.length-i&&s<t.length-i&&o[o.length-s-1]===t[t.length-s-1];)s++;let l=o.length-s,d=t.length-s,p=l-i,n=d-i,a=p&&n?(p+1)*(n+1):0,u=a>2e5,b=[],f=0;function h(v,k){f++,!(b.length>=2e3)&&b.push({left:v===null?null:{number:v+1,text:o[v]},right:k===null?null:{number:k+1,text:t[k]},kind:v===null?"insert":k===null?"delete":o[v]===t[k]?"equal":"replace"})}for(let v=0;v<i;v++)h(v,v);if(u||!p||!n)for(let v=0;v<Math.max(p,n);v++)h(v<p?i+v:null,v<n?i+v:null);else{let v=n+1,k=new Uint32Array(a);for(let N=p-1;N>=0;N--)for(let y=n-1;y>=0;y--)k[N*v+y]=o[i+N]===t[i+y]?k[(N+1)*v+y+1]+1:Math.max(k[(N+1)*v+y],k[N*v+y+1]);let S=0,w=0;for(;S<p||w<n;)S<p&&w<n&&o[i+S]===t[i+w]?h(i+S++,i+w++):S<p&&(w===n||k[(S+1)*v+w]>=k[S*v+w+1])?h(i+S++,null):h(null,i+w++)}for(let v=0;v<s;v++)h(l+v,d+v);return{rows:b,approximate:u,truncated:f>b.length,totalRows:f,omittedRows:f-b.length,leftLineCount:o.length,rightLineCount:t.length,lcsCells:u?0:a}}var zt={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."},st={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Kt={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Yt={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Qt={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Le(e){return e.single?_.default.createElement(go,{...e}):_.default.createElement(vo,{...e})}function go({comparison:e,labels:r={},line:o=null,startLine:t=1,emptyLine:i=!1}){let s=e?.right?.text??"",[l,d]=(0,_.useState)(null),p=(0,_.useRef)(null),n=(0,_.useRef)(null);(0,_.useEffect)(()=>d(null),[s,o,t,i]);let a=(0,_.useMemo)(()=>Ne(s,{line:o,startLine:t,anchor:l,emptyLine:i}),[s,o,t,l,i]);return(0,_.useEffect)(()=>{n.current&&(n.current.scrollTop=p.current?Math.max(0,p.current.offsetTop-n.current.clientHeight/2):0)},[a]),_.default.createElement("section",{ref:n,className:"vcs-text-comparison vcs-single-file","aria-label":r.singleReadonly??"Read-only file",style:{overflow:"auto",position:"absolute",inset:0},tabIndex:0},_.default.createElement("p",{role:"status"},r.window??"Lines shown",": ",a.startLine,"\u2013",a.endLine," / ",a.baseLine,"\u2013",a.baseLine+Math.max(0,a.totalLines-1)),o!==null&&!a.targetFound&&_.default.createElement("p",{role:"status"},r.targetMissing??"Requested line is not in the available text"),a.truncated&&_.default.createElement("nav",null,_.default.createElement("button",{disabled:a.startLine<=a.baseLine,onClick:()=>d(Math.max(a.baseLine,a.startLine-500/2))},r.previous??"Previous"),_.default.createElement("button",{disabled:a.endLine>=a.baseLine+a.totalLines-1,onClick:()=>d(a.endLine+500/2+1)},r.next??"Next")),_.default.createElement("div",{"aria-label":e?.right?.label},a.rows.map(u=>_.default.createElement("div",{key:u.number,ref:u.number===o?p:null,"data-line":u.number,"data-target":u.number===o||void 0,"aria-current":u.number===o?"location":void 0,style:{...Kt,background:u.number===o?"var(--dsw-alias-code-diff-added, #259b4940)":void 0,outline:u.number===o?"1px solid currentColor":void 0}},_.default.createElement("span",{style:Yt},u.number),_.default.createElement("pre",{style:Qt},u.text)))),!a.rows.length&&_.default.createElement("p",null,r.empty??zt.empty))}function vo({comparison:e,labels:r={}}){let o=e?.left?.text??"",t=e?.right?.text??"",i=(0,_.useMemo)(()=>Jt(o,t),[o,t]),s=d=>r[d]??zt[d],l=(d,p,n)=>{let a=d&&n!=="equal";return _.default.createElement("td",{style:{...st,background:a?p==="left"?"#d6454520":"#259b4920":void 0}},_.default.createElement("div",{style:Kt},_.default.createElement("span",{style:Yt},d?.number??""),_.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},a?p==="left"?"\u2212":"+":""),_.default.createElement("pre",{style:Qt},d?.text??"")))};return _.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&&_.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),i.truncated&&_.default.createElement("div",{role:"status",style:{padding:8}},s("truncated")," (",2e3," / ",i.totalRows,")"),_.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},_.default.createElement("thead",null,_.default.createElement("tr",null,_.default.createElement("th",{scope:"col",style:{...st,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),_.default.createElement("th",{scope:"col",style:{...st,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),_.default.createElement("tbody",null,i.rows.map((d,p)=>_.default.createElement("tr",{key:p,"data-kind":d.kind},l(d.left,"left",d.kind),l(d.right,"right",d.kind))))),!i.rows.length&&_.default.createElement("p",{style:{padding:8}},s("empty")))}var R=se(require("react"),1);function $t(e,{width:r,height:o,signal:t,timeoutMs:i=1e4,createURL:s=p=>URL.createObjectURL(p),revokeURL:l=p=>URL.revokeObjectURL(p),createImage:d=()=>new Image}={}){return new Promise((p,n)=>{if(t?.aborted){n(t.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(r)||!Number.isInteger(o)||r<1||o<1||r>8192||o>8192||r*o>16e6||!Number.isFinite(i)||i<=0){n(new Error("Invalid image preview"));return}let a,u,b,f=!1,h=!1,v=()=>{h||(h=!0,u&&(u.src=""),a&&l(a))},k=()=>{clearTimeout(b),t?.removeEventListener("abort",w)},S=N=>{f||(f=!0,k(),v(),n(N))},w=()=>S(t.reason||new Error("Image cancelled"));try{a=s(e),u=d(),t?.addEventListener("abort",w,{once:!0}),b=setTimeout(()=>S(new Error("Image decode timed out")),i),u.src=a,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){w();return}if(u.naturalWidth!==r||u.naturalHeight!==o){S(new Error("Image dimensions mismatch"));return}f=!0,k(),p({url:a,dispose:v})}},S)}catch(N){S(N)}})}function yo({side:e,sessionId:r,repositoryId:o,commit:t,parentIndex:i,base:s,target:l,workspace:d=!1,mode:p,id:n,rpc:a,t:u,onRediscover:b}){let[f,h]=(0,R.useState)(null),[v,k]=(0,R.useState)(""),[S,w]=(0,R.useState)(0);return(0,R.useEffect)(()=>{let N=new AbortController,y;return h(null),k(""),(async()=>{let m=await a(d?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",d?{sessionId:r,repositoryId:o,mode:p,id:n,side:e}:s?{sessionId:r,repositoryId:o,base:s,target:l,id:n,side:e}:{sessionId:r,repositoryId:o,commit:t,parentIndex:i,id:n,side:e},N.signal);if(N.signal.aborted)return;if(m.absent){h(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 C=new Blob([Uint8Array.from(g,x=>x.charCodeAt(0))],{type:m.mime});if(y=await $t(C,{width:m.width,height:m.height,signal:N.signal}),N.signal.aborted){y.dispose();return}h({...m,url:y.url})})().catch(m=>{N.signal.aborted||(k(m.message),m.code==="vcs/rediscover-required"&&b())}),()=>{N.abort(),y?.dispose()}},[e,r,o,t,i,s,l,d,p,n,S]),R.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},R.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),v?R.default.createElement("p",{role:"alert"},v," ",R.default.createElement("button",{onClick:()=>w(N=>N+1)},u("retry"))):f?R.default.createElement(R.default.Fragment,null,R.default.createElement("p",null,R.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?R.default.createElement("p",null,u("imageAbsent")):R.default.createElement(R.default.Fragment,null,R.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),R.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&R.default.createElement("p",null,u("imageMetadata")))):R.default.createElement("p",{role:"status"},u("loading")))}function Ee(e){let[r,o]=(0,R.useState)(!1);return R.default.createElement("div",null,R.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("imageCompare")),r&&R.default.createElement(R.default.Fragment,null,R.default.createElement("p",null,e.t("imageScope")),R.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(t=>R.default.createElement(yo,{key:t,...e,side:t})))))}var $=se(require("react"),1);var ae=se(require("react"),1);function Ie(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 Xt({load:e,node:r,comparison:o,key:t,single:i=!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(r,{single:i,onComputation:h=>{a||d(h)}}),n.setContent(o,t),a||s(n))}).catch(f=>{try{u()}finally{a||l(f)}}),dispose(){a||(a=!0,p.abort(),u())}}}async function qe(e,{signal:r,fetcher:o=fetch,importer:t=i=>import(i)}={}){let i=await o(e,{credentials:"same-origin",cache:"no-cache",signal:r});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(),r?.throwIfAborted(),t(e)}var Ve="0.7.1";function Zt({comparison:e,identity:r,enabled:o,single:t,line:i,startLine:s=1,sideBySide:l,ignoreWhitespace:d,wrap:p}){let n=(0,ve.useRef)(null),a=(0,ve.useRef)(null),[u,b]=(0,ve.useState)(!1),[f,h]=(0,ve.useState)(""),[v,k]=(0,ve.useState)("pending");return(0,ve.useEffect)(()=>{if(b(!1),k("pending"),h(""),!o)return;let S=y=>new URL("vcs-assets/"+y,document.baseURI).href,w=document.createElement("link");w.rel="stylesheet",w.href=S("editor.css"),document.head.appendChild(w);let N=Xt({node:n.current,comparison:e,key:r,single:t,load:y=>qe(S("editor.js")+"?v="+encodeURIComponent(Ve)+"&retry=0",{signal:y}),onReady:y=>{a.current=y,b(!0)},onError:y=>h(y.message),onComputation:k});return()=>{a.current=null;try{N.dispose()}finally{w.remove()}}},[o,e,r,t]),(0,ve.useEffect)(()=>{u&&t&&i&&a.current?.revealLine(i)},[u,t,i]),(0,ve.useEffect)(()=>{u&&a.current?.options({sideBySide:l,ignoreWhitespace:d,wrap:p,startLine:s})},[u,l,d,p,s]),{node:n,viewer:a,ready:u,error:f,computation:v}}function ye({comparison:e,identity:r,t:o,single:t=!1,line:i=null,startLine:s=1,emptyLine:l=!1,initialOptions:d,onOptionsChange:p}){let[n,a]=(0,ae.useState)(d?.sideBySide!==!1),[u,b]=(0,ae.useState)(d?.ignoreWhitespace===!0),[f,h]=(0,ae.useState)(d?.wrap===!0),[v,k]=(0,ae.useState)(d?.enabled!==!1),S=C=>p?.({sideBySide:n,ignoreWhitespace:u,wrap:f,enabled:v,...C}),{node:w,viewer:N,ready:y,error:m,computation:g}=Zt({comparison:e,identity:r,enabled:v,single:t,startLine:s,line:t&&Number.isSafeInteger(i)&&i>=s?i-s+1:null,sideBySide:n,ignoreWhitespace:u,wrap:f});return ae.default.createElement("div",{className:"vcs-history-viewer"},ae.default.createElement("div",{className:"vcs-history-viewer-toolbar"},ae.default.createElement("button",{"aria-pressed":v,onClick:()=>{k(!v),S({enabled:!v})}},o(v?"historyBasic":"historyAdvanced")),y&&!t&&ae.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},ae.default.createElement("button",{"aria-pressed":n,onClick:()=>{a(!n),S({sideBySide:!n})}},o(n?"side":"inline")),ae.default.createElement("label",null,ae.default.createElement("input",{type:"checkbox",checked:u,onChange:C=>{b(C.target.checked),S({ignoreWhitespace:C.target.checked})}}),o("whitespace")),ae.default.createElement("label",null,ae.default.createElement("input",{type:"checkbox",checked:f,onChange:C=>{h(C.target.checked),S({wrap:C.target.checked})}}),o("wrap")),ae.default.createElement("button",{onClick:()=>N.current?.navigate("previous")},o("previous")),ae.default.createElement("button",{onClick:()=>N.current?.navigate("next")},o("next")))),v&&!y&&!m&&ae.default.createElement("p",{role:"status"},o("loading")),e.large&&!t&&y&&ae.default.createElement("p",{role:"status"},o(g==="complete"?"diffComplete":g==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!y&&ae.default.createElement("p",{role:"status"},o("largeFallback")),m&&ae.default.createElement("p",{role:"status"},o("fallback")," ",m),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:w,style:{position:"absolute",inset:0,visibility:y?"visible":"hidden"},"aria-hidden":!y}),!y&&ae.default.createElement(Le,{comparison:e,single:t,line:i,startLine:s,emptyLine:l,labels:{...Ie(o),singleReadonly:o("readingReadonly"),window:o("readingWindow"),targetMissing:o("readingTargetMissing"),previous:o("previous"),next:o("next")}})))}function nt({sessionId:e,repositoryId:r,mode:o,id:t,rpc:i,t:s,onRediscover:l}){let[d,p]=(0,$.useState)(null),[n,a]=(0,$.useState)(""),[u,b]=(0,$.useState)(0),[f,h]=(0,$.useState)(1),[v,k]=(0,$.useState)(3);(0,$.useEffect)(()=>{let x=new AbortController;return p(null),a(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:r,mode:o,id:t},x.signal).then(D=>{x.signal.aborted||p(D)}).catch(D=>{x.signal.aborted||(a(D.message),D.code==="vcs/rediscover-required"&&l())}),()=>x.abort()},[e,r,o,t,u]);let S={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},w=s("conflictStageMissing"),N=S[f],y=S[v],m=(0,$.useMemo)(()=>{if(!d)return null;let x=L=>d.stages.find(H=>H.stage===L),D=L=>{let H=x(L);return!H||!H.present?{text:"",label:S[L]}:{text:H.text,label:S[L],...H.binary?{binary:!0}:{},...H.encoding?{encoding:H.encoding}:{},...H.notice?{notice:H.notice}:{}}},U=D(f),j=D(v),K=[U.notice,j.notice].filter(Boolean);return x(f)?.present&&x(v)?.present||K.push(w),{path:d.path,left:U,right:j,binary:!!(U.binary||j.binary),...K.length?{notice:[...new Set(K)].join(" \xB7 ")}:{}}},[d,f,v,N,y,w]);if(n)return $.default.createElement("section",{"aria-label":s("conflictStages")},$.default.createElement("h4",null,s("conflictStages")),$.default.createElement("p",{role:"alert"},n," ",$.default.createElement("button",{onClick:()=>b(x=>x+1)},s("retry"))));if(!d||!m)return $.default.createElement("section",{"aria-label":s("conflictStages")},$.default.createElement("h4",null,s("conflictStages")),$.default.createElement("p",{role:"status"},s("loading")));let g=x=>d.stages.find(D=>D.stage===x),C=m.binary&&!m.left.text&&!m.right.text;return $.default.createElement("section",{"aria-label":s("conflictStages")},$.default.createElement("h4",null,s("conflictStages")),$.default.createElement("p",null,s("conflictStagesScope")),$.default.createElement("ul",null,[1,2,3].map(x=>$.default.createElement("li",{key:x},$.default.createElement("code",null,S[x])," \xB7 ",g(x)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),g(x)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),g(x)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),g(x)?.present&&g(x)?.notice&&" \xB7 "+g(x).notice))),$.default.createElement("label",null,s("conflictStageLeft")," ",$.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:x=>h(Number(x.target.value))},[1,2,3].map(x=>$.default.createElement("option",{key:x,value:x},S[x])))),$.default.createElement("label",null,s("conflictStageRight")," ",$.default.createElement("select",{"aria-label":s("conflictStageRight"),value:v,onChange:x=>k(Number(x.target.value))},[1,2,3].map(x=>$.default.createElement("option",{key:x,value:x},S[x])))),m.notice&&$.default.createElement("p",{role:"status"},m.notice),C?$.default.createElement("p",{role:"status"},s("binary")):$.default.createElement(ye,{key:JSON.stringify([t,f,v,d.snapshot]),comparison:m,identity:JSON.stringify([e,r,o,t,f,v,d.snapshot]),t:s}))}var Rt=se(require("react"),1);function at({submodule:e,t:r}){if(!e||typeof e.recorded!="string")return null;let o=e.checkout,t=[];e.pointerMoved&&t.push(r("submodulePointerMoved")),(e.dirty||e.untracked)&&t.push(r("submoduleDirty"));let i=[e.recorded+" \xB7 "+r("submoduleCheckout_"+o),...t].join(" \xB7 ");return Rt.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},r("submoduleBadge")," ",e.recorded.slice(0,10),t.length?` \xB7 ${t.join(", ")}`:"")}function Ge(e){return e?.preview!==void 0?e.preview?.canLoadLarge===!0:typeof e?.notice=="string"&&e.notice.includes("2 MiB")}function lt(e){return typeof e=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(e)}var oe=se(require("react"),1);function ct(e){return oe.default.createElement(wo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function wo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,l]=(0,oe.useState)(!1),[d,p]=(0,oe.useState)(null),[n,a]=(0,oe.useState)(""),[u,b]=(0,oe.useState)(0);return(0,oe.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),a(""),o("vcs/svn-identity",{sessionId:e,repositoryId:r},f.signal).then(h=>{f.signal.aborted||p(h)}).catch(h=>{f.signal.aborted||(a(h.message),h.code==="vcs/rediscover-required"&&i())}),()=>f.abort()},[s,e,r,u]),oe.default.createElement("section",null,oe.default.createElement("button",{"aria-expanded":s,onClick:()=>l(f=>!f)},t("svnIdentity")),s&&oe.default.createElement(oe.default.Fragment,null,oe.default.createElement("p",null,t("svnOfflineIdentity")),n?oe.default.createElement("p",{role:"alert"},n," ",oe.default.createElement("button",{onClick:()=>b(f=>f+1)},t("retry"))):d?oe.default.createElement(oe.default.Fragment,null,oe.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>oe.default.createElement(oe.default.Fragment,{key:f},oe.default.createElement("dt",null,f),oe.default.createElement("dd",null,oe.default.createElement("code",null,d[f]))))),oe.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))):oe.default.createElement("p",{role:"status"},t("loading"))))}function Ue(e,r,{now:o=Date.now,schedule:t=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=o()||e-o()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,l=t(()=>{s&&(s=!1,r())},e-o());return()=>{s&&(s=!1,i(l))}}function er(e,r=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<=r||e.expiresAt-r>3e5)throw Error("Invalid SVN consent response");return e}var ce=se(require("react"),1);var z=se(require("react"),1);function dt(e){return z.default.createElement(xo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function xo({sessionId:e,repositoryId:r,rpc:o,t,onApproved:i,onRediscover:s}){let[l,d]=(0,z.useState)(!1),[p,n]=(0,z.useState)(null),[a,u]=(0,z.useState)(!1),[b,f]=(0,z.useState)(""),[h,v]=(0,z.useState)(!1),[k,S]=(0,z.useState)(0);(0,z.useEffect)(()=>{if(!l)return;let y=new AbortController;return n(null),u(!1),f(""),v(!0),o("vcs/svn-describe",{sessionId:e,repositoryId:r},y.signal).then(m=>{y.signal.aborted||n(m)}).catch(m=>{y.signal.aborted||(f(m.message),m.code==="vcs/rediscover-required"&&s())}).finally(()=>{y.signal.aborted||v(!1)}),()=>y.abort()},[l,e,r,k]);let[w,N]=(0,z.useState)(0);return(0,z.useEffect)(()=>{if(!l||!p||p.expiresAt===void 0)return;let y=()=>{n(null),u(!1),N(0),v(!1),f(t("svnOfferExpired"))};try{return Ue(p.expiresAt,y)}catch{y()}},[l,p]),(0,z.useEffect)(()=>{if(!w||!l||!p)return;let y=new AbortController;return v(!0),f(""),o("vcs/svn-approve",{sessionId:e,repositoryId:r,offer:p.offer,explicit:!0},y.signal).then(m=>{y.signal.aborted||i(m)}).catch(m=>{y.signal.aborted||(f(m.message),u(!1),m.code==="vcs/rediscover-required"&&s())}).finally(()=>{y.signal.aborted||v(!1)}),()=>y.abort()},[w,l,p]),z.default.createElement("section",null,z.default.createElement("button",{"aria-expanded":l,onClick:()=>{N(0),d(y=>!y)}},t("svnConsentReview")),l&&z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,t("svnConsentScope")),b&&z.default.createElement("p",{role:"alert"},b," ",z.default.createElement("button",{disabled:h,onClick:()=>{N(0),S(y=>y+1)}},t("retry"))),p&&z.default.createElement(z.default.Fragment,null,z.default.createElement("dl",null,["origin","root","uuid","scope"].map(y=>z.default.createElement(z.default.Fragment,{key:y},z.default.createElement("dt",null,y),z.default.createElement("dd",null,z.default.createElement("code",null,p[y]))))),p.remoteEnabled?z.default.createElement(z.default.Fragment,null,z.default.createElement("label",null,z.default.createElement("input",{type:"checkbox",checked:a,disabled:h,onChange:y=>u(y.target.checked)}),t("svnConsentExplicit")),z.default.createElement("button",{disabled:h||!a,onClick:()=>N(y=>y+1)},t("svnConsentApprove"))):z.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))),h&&z.default.createElement("p",{role:"status"},t("loading"))))}var E=se(require("react"),1);function tr(e,{since:r,until:o}={}){let t=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)},i=t(r),s=t(o);return!i&&!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||i&&p<i||s&&p>s)}):[]}function Je(e,r,o){let t=o?[...e.commits.filter(i=>!r.commits.some(s=>s.id===i.id)),...r.commits]:r.commits;return{...r,windowEnd:o+r.commits.length,commits:t.slice(-200)}}function rr(e,r,o){let t=Je({commits:(e?.entries||[]).map(i=>({...i,id:i.revision}))},{...r,commits:r.entries.map(i=>({...i,id:i.revision}))},o);return{...r,windowEnd:t.windowEnd,entries:t.commits.map(({id:i,...s})=>s)}}var So=9223372036854775807n;function ko(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let r=BigInt(e);if(r>So)throw new Error("SVN revision exceeds supported range");return r}function pt(e){let r=ko(e);return r===0n?null:String(r-1n)}function ut(e){return E.default.createElement(Co,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function Co({sessionId:e,repositoryId:r,token:o,snapshot:t,rpc:i,t:s,onRediscover:l}){let[d,p]=(0,E.useState)({cursor:t,offset:0,trail:[]}),[n,a]=(0,E.useState)(null),[u,b]=(0,E.useState)(null),[f,h]=(0,E.useState)(!0),[v,k]=(0,E.useState)(""),[S,w]=(0,E.useState)(0),[N,y]=(0,E.useState)(""),[m,g]=(0,E.useState)(""),{cursor:C,offset:x}=d;(0,E.useEffect)(()=>{let L=new AbortController;return h(!0),k(""),i("vcs/svn-log",{sessionId:e,repositoryId:r,token:o,snapshot:t,cursor:C,limit:50},L.signal).then(H=>{if(!L.signal.aborted){let P=rr(n,H,x);a(P);let I=new Set((n?.entries||[]).filter(Y=>!P.entries.some(he=>he.revision===Y.revision)).map(Y=>Y.revision));b(Y=>I.has(Y)?null:Y)}}).catch(H=>{L.signal.aborted||(k(H.message),H.code==="vcs/rediscover-required"&&l())}).finally(()=>{L.signal.aborted||h(!1)}),()=>L.abort()},[C,x,S]);let D=()=>p(L=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...L.trail,{cursor:C,offset:x}].slice(-200)})),U=()=>{let L=d.trail.at(-1);L&&(b(null),a(null),p({...L,trail:d.trail.slice(0,-1)}))},j=n?.entries||[],K="";try{j=tr(j,{since:N,until:m})}catch(L){K=L.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",t),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((L,H)=>E.default.createElement("label",{key:L},s(L)," ",E.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(L),value:H?m:N,onChange:P=>{b(null),H?g(P.target.value):y(P.target.value)}})))),K&&E.default.createElement("p",{role:"alert"},K),!!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(L=>E.default.createElement("li",{key:L.revision},E.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===L.revision,onClick:()=>b(L.revision)},E.default.createElement("span",{className:"vcs-commit-subject"},"r",L.revision," \xB7 ",L.message.split(/\r?\n/)[0])),E.default.createElement("div",{className:"vcs-commit-meta"},E.default.createElement("code",null,"r",L.revision)," \xB7 ",L.author," \xB7 ",E.default.createElement("time",{dateTime:L.date},L.date))))),f&&E.default.createElement("p",{role:"status"},s("loading")),v&&E.default.createElement("p",{role:"alert"},v," ",E.default.createElement("button",{onClick:()=>w(L=>L+1)},s("retry"))),!f&&!v&&!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:U},s("historyBack")),!v&&n?.nextRevision!=null&&E.default.createElement("button",{disabled:f,onClick:D},s("historyMore"))),E.default.createElement("div",{className:"vcs-history-details"},u&&E.default.createElement(No,{key:u,sessionId:e,repositoryId:r,token:o,snapshot:t,rpc:i,t:s,onRediscover:l,revision:u})))}function No({sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:l,onRediscover:d}){let[p,n]=(0,E.useState)(null),[a,u]=(0,E.useState)(null),[b,f]=(0,E.useState)(""),[h,v]=(0,E.useState)(0),[k,S]=(0,E.useState)(""),[w,N]=(0,E.useState)(!1);(0,E.useEffect)(()=>{let m=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:r,token:o,snapshot:t,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()},[h]);let y=(p?.changes||[]).filter(m=>m.path.toLocaleLowerCase().includes(k.toLocaleLowerCase()));return E.default.createElement("section",{className:"vcs-commit-details"+(w?" vcs-commit-focused":""),"aria-label":l("commitDetails")},b?E.default.createElement("p",{role:"alert"},b," ",E.default.createElement("button",{onClick:()=>v(m=>m+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"+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,pt(i)===null?l("commitRoot"):"r"+pt(i)," \u2192 r",i)),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:m=>{S(m.target.value),u(null)}})),E.default.createElement("span",null,y.length," / ",p.changes.length),E.default.createElement("ul",{className:"vcs-commit-files"},y.map(m=>E.default.createElement("li",{key:m.id},E.default.createElement("button",{disabled:m.kind!=="file","aria-pressed":a?.id===m.id&&a.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"})},l("fileHistory")),m.copyFromPath&&m.copyFromRevision&&!m.copySourceOutsideScope&&E.default.createElement("button",{onClick:()=>u({id:m.id,mode:"copytrace"})},l("svnCopyHistory")," \xB7 ",m.copyFromPath," @r",m.copyFromRevision),m.copySourceOutsideScope&&E.default.createElement("span",null,l("svnCopyOutside")))))),!!p.changes.length&&!y.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":w,onClick:()=>N(m=>!m)},l(w?"comparisonRestore":"comparisonFocus")),a?E.default.createElement(Lo,{key:JSON.stringify(a),sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:l,onRediscover:d,...a}):E.default.createElement("p",{role:"status"},l("pick")))))}function Lo({sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:l,onRediscover:d,id:p,mode:n}){let[a,u]=(0,E.useState)(null),[b,f]=(0,E.useState)({cursor:null,trail:[]}),[h,v]=(0,E.useState)(""),[k,S]=(0,E.useState)(0),{cursor:w,trail:N}=b;return(0,E.useEffect)(()=>{let y=new AbortController;return u(null),v(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,id:p,...w===null?{}:{cursor:w}},y.signal).then(m=>{y.signal.aborted||u(m)}).catch(m=>{y.signal.aborted||(v(m.message),m.code==="vcs/rediscover-required"&&d())}),()=>y.abort()},[w,k]),h?E.default.createElement("p",{role:"alert"},h," ",E.default.createElement("button",{onClick:()=>S(y=>y+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(ye,{comparison:a,identity:JSON.stringify([e,r,t,i,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(y=>E.default.createElement("li",{key:y.revision},"r",y.revision," \xB7 ",y.message))),!!N.length&&E.default.createElement("button",{onClick:()=>f({cursor:N.at(-1),trail:N.slice(0,-1)})},l("historyBack")),a.nextRevision!==null&&E.default.createElement("button",{onClick:()=>f({cursor:a.nextRevision,trail:[...N,w].slice(-200)})},l("historyMore"))):E.default.createElement("p",{role:"status"},l("loading"))}function mt(e){return ce.default.createElement(Eo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Eo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,l]=(0,ce.useState)(null),[d,p]=(0,ce.useState)(!1),[n,a]=(0,ce.useState)(""),[u,b]=(0,ce.useState)(0);(0,ce.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>o("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token})).catch(()=>{})}},[s,e,r]),(0,ce.useEffect)(()=>{if(s)try{return Ue(s.expiresAt,()=>{l(null),b(0),p(!1),a(t("svnExpired"))})}catch{l(null),a(t("svnExpired"))}},[s]),(0,ce.useEffect)(()=>{if(!u||!s)return;let v=new AbortController;return p(!0),a(""),o("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token},v.signal).then(()=>{v.signal.aborted||l(null)}).catch(k=>{v.signal.aborted||(a(k.message),k.code==="vcs/rediscover-required"&&i())}).finally(()=>{v.signal.aborted||p(!1)}),()=>v.abort()},[u,s]);let f=v=>{try{er(v),a(""),b(0),l(v)}catch(k){a(k.message)}},h=async(...v)=>{try{return await o(...v)}catch(k){throw k.code==="vcs/svn-consent-required"&&!v[2]?.aborted&&(l(null),b(0),a(t("svnExpired"))),k}};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,t("svnGrantScope")),ce.default.createElement("button",{disabled:d,onClick:()=>b(v=>v+1)},t("svnRevoke")),n&&ce.default.createElement("p",{role:"alert"},n),!d&&ce.default.createElement(ut,{sessionId:e,repositoryId:r,t,onRediscover:i,rpc:h,token:s.token,snapshot:s.snapshot})):ce.default.createElement(dt,{sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i,onApproved:f}))}var A=se(require("react"),1);function or(e){let r=new Map;for(let o of e){let t=r.get(o.commit);t||(t={names:[],hidden:0},r.set(o.commit,t)),t.names.length<3?t.names.push(o.name):t.hidden++}return r}var O=se(require("react"),1);var F=se(require("react"),1);var ee=se(require("react"),1);var X=se(require("react"),1);function ft(e){return X.default.createElement(Po,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path,e.line]),...e})}function Po({sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:l,line:d=null,initialViewer:p,onViewerChange:n}){let[a,u]=(0,X.useState)(!1),[b,f]=(0,X.useState)([ke(d)?{line:d}:{offset:0}]),[h,v]=(0,X.useState)(null),[k,S]=(0,X.useState)(""),[w,N]=(0,X.useState)(0),y=b.at(-1);(0,X.useEffect)(()=>{if(!a)return;let j=new AbortController;return v(null),S(""),i("vcs/tree-segment",{sessionId:e,repositoryId:r,commit:o,path:t,...y},j.signal).then(K=>{j.signal.aborted||v(K)}).catch(K=>{j.signal.aborted||(S(K.message),K.code==="vcs/rediscover-required"&&l())}),()=>j.abort()},[a,y,e,r,o,t,w]);let m=(0,X.useMemo)(()=>h?{path:t,left:{label:o,text:h.text},right:{label:o,text:h.text}}:null,[h,t,o]),{located:g,startLine:C,target:x,partial:D,emptyLine:U}=Gt(h,d,!!y.line);return X.default.createElement("section",null,X.default.createElement("button",{"aria-expanded":a,onClick:()=>u(j=>!j)},s("segments")),a&&X.default.createElement(X.default.Fragment,null,X.default.createElement("p",null,s("segmentScope")),k?X.default.createElement("p",{role:"alert"},k," ",X.default.createElement("button",{onClick:()=>N(j=>j+1)},s("retry"))):h?X.default.createElement(X.default.Fragment,null,X.default.createElement("p",null,s("segmentBytes"),": ",h.offset,"\u2013",h.endOffset," / ",h.totalBytes," \xB7 ",X.default.createElement("code",null,h.oid)),g&&X.default.createElement("p",null,s("segmentLines"),": ",h.startLine,"\u2013",h.endLine),D&&X.default.createElement("p",{role:"status"},s("segmentPartialLine")),h.notice&&X.default.createElement("p",{role:"status"},h.notice),ke(d)&&x===null&&X.default.createElement("p",{role:"status"},s("readingTargetMissing"),": ",d),X.default.createElement("button",{disabled:b.length===1,onClick:()=>f(j=>j.slice(0,-1))},s("previous")),X.default.createElement("button",{disabled:!Number.isSafeInteger(h.nextOffset)||h.nextOffset<=h.offset,onClick:()=>f(j=>[...j,{offset:h.nextOffset}])},s("next")),!g&&X.default.createElement("p",{role:"status"},s("segmentLocalCoordinates")),X.default.createElement(ye,{key:JSON.stringify([h.oid,h.offset,C]),single:!0,line:x,startLine:C,emptyLine:U,initialOptions:p,onOptionsChange:n,comparison:m,identity:JSON.stringify([e,r,o,t,h.offset]),t:s})):X.default.createElement("p",{role:"status"},s("loading"))))}var q=se(require("react"),1);function _e(e,r,o){let i=o>0&&e.nextOffset===o&&(e.pageOffset??-1)<o?[...e.commits,...r.commits]:r.commits,s=i.filter((l,d)=>i.findIndex(p=>p.id===l.id)===d).slice(-200);return{...r,commits:s,pageOffset:o,windowEnd:o+r.commits.length,windowStart:Math.max(0,o+r.commits.length-s.length)}}function ze(e){return Math.max(0,e-50)}function Ao({sessionId:e,repositoryId:r,commit:o,path:t,follow:i,since:s,until:l,rpc:d,t:p,onRediscover:n,onSelectCommit:a}){let[u,b]=(0,q.useState)({commits:[],nextOffset:null}),[f,h]=(0,q.useState)(0),[v,k]=(0,q.useState)(0),[S,w]=(0,q.useState)(!0),[N,y]=(0,q.useState)("");(0,q.useEffect)(()=>{let g=new AbortController;return w(!0),y(""),d("vcs/tree-history",{sessionId:e,repositoryId:r,commit:o,path:t,offset:f,limit:50,follow:i,...s?{since:s}:{},...l?{until:l}:{}},g.signal).then(C=>{g.signal.aborted||b(x=>_e(x,C,f))}).catch(C=>{g.signal.aborted||(y(C.message),C.code==="vcs/rediscover-required"&&n())}).finally(()=>{g.signal.aborted||w(!1)}),()=>g.abort()},[e,r,o,t,f,v,i,s,l]);let m=g=>p(g.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":g.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":g.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return q.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":S},q.default.createElement("p",null,p("pathHistoryScope")),q.default.createElement("p",{style:{overflowWrap:"anywhere"}},q.default.createElement("code",null,u.path||t)," \xB7 ",q.default.createElement("code",null,o),u.followsRenames!==void 0&&q.default.createElement(q.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),q.default.createElement("ol",null,u.commits.map(g=>q.default.createElement("li",{key:g.id},q.default.createElement("code",{title:g.id},g.id.slice(0,10))," \xB7 ",a?q.default.createElement("button",{onClick:()=>a(g.id,g.path||t)},g.subject):g.subject,q.default.createElement("div",null,g.boundary&&q.default.createElement("span",null,m(g)," "),g.path&&q.default.createElement("code",null,g.oldPath?g.oldPath+" \u2192 ":"",g.path)," ",g.similarity!==void 0&&q.default.createElement("span",null,p("fileHistorySimilarity"),": ",g.similarity,"% \xB7 "),g.author," \xB7 ",q.default.createElement("time",{dateTime:g.date},g.date))))),S&&q.default.createElement("p",{role:"status"},p("loading")),N&&q.default.createElement("p",{role:"alert"},N," ",q.default.createElement("button",{onClick:()=>k(g=>g+1)},p("retry"))),!S&&!N&&!u.commits.length&&q.default.createElement("p",null,p("historyEmpty")),u.truncated&&q.default.createElement("p",{role:"status"},p("historyLimit")),!!f&&q.default.createElement("button",{disabled:S,onClick:()=>h(ze(f))},p("historyBack")),!N&&u.nextOffset!==null&&q.default.createElement("button",{disabled:S,onClick:()=>h(u.nextOffset)},p("historyMore")))}function ht(e){let[r,o]=(0,q.useState)(!1),[t,i]=(0,q.useState)(!1),[s,l]=(0,q.useState)(""),[d,p]=(0,q.useState)("");return q.default.createElement("div",null,q.default.createElement("button",{"aria-expanded":r,onClick:()=>o(n=>!n)},e.t("pathHistory")),r&&q.default.createElement(q.default.Fragment,null,q.default.createElement("label",null,q.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>i(n.target.checked)}),e.t("fileHistoryFollow")),q.default.createElement("p",null,e.t("pathHistoryFollowScope")),q.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,a)=>q.default.createElement("label",{key:n},e.t(n)," ",q.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)}))),q.default.createElement(Ao,{key:JSON.stringify([t,s.trim(),d.trim()]),follow:t,since:s.trim()||null,until:d.trim()||null,...e})))}function Se({sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:l,onClose:d,onSelectCommit:p,line:n=null,initialViewer:a,onViewerChange:u}){let[b,f]=(0,ee.useState)(null),[h,v]=(0,ee.useState)(""),[k,S]=(0,ee.useState)(0);(0,ee.useEffect)(()=>{let y=new AbortController;return f(null),v(""),i("vcs/tree-file",{sessionId:e,repositoryId:r,commit:o,path:t},y.signal).then(m=>{y.signal.aborted||f(m)}).catch(m=>{y.signal.aborted||(v(m.message),m.code==="vcs/rediscover-required"&&l())}),()=>y.abort()},[e,r,o,t,k]);let w=(0,ee.useMemo)(()=>Ne(b?.text||"",{line:n}).targetFound,[b,n]),N=(0,ee.useMemo)(()=>b?{path:t,left:{label:o,text:b.text||""},right:{label:o,text:b.text||""}}:null,[b,t,o]);return ee.default.createElement("section",{"aria-label":s("treePreview")},ee.default.createElement("h4",null,t),ee.default.createElement("button",{onClick:d},s("treeClose")),ee.default.createElement("p",null,ee.default.createElement("code",null,o)),h?ee.default.createElement("p",{role:"alert"},h," ",ee.default.createElement("button",{onClick:()=>S(y=>y+1)},s("retry"))):b?ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("p",null,ee.default.createElement("code",null,b.oid)," \xB7 ",s("encoding"),": ",b.encoding||"\u2014"),n&&ee.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,w?"":" \xB7 "+s("blameUnmapped")),b.notice&&ee.default.createElement("p",{role:"status"},b.notice),b.binary?ee.default.createElement("p",null,s("binary")):b.text===""?ee.default.createElement("p",null,s("treeEmpty")):ee.default.createElement(ye,{initialOptions:a,onOptionsChange:u,single:!0,line:n,comparison:N,identity:JSON.stringify([e,r,o,t]),t:s})):ee.default.createElement("p",{role:"status"},s("loading")),ee.default.createElement(ft,{sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:l,line:n,initialViewer:a,onViewerChange:u}),ee.default.createElement(ht,{key:JSON.stringify([e,r,o,t]),sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:l,onSelectCommit:p}))}function ir(e=""){let r=[{path:"",name:"/"}];if(e){let o="";for(let t of e.split("/"))o=o?o+"/"+t:t,r.push({path:o,name:t})}return r}function sr(e,r="",o=""){let t=r?r+"/":"",i=o.toLowerCase();return e.filter(s=>{let l=s.path.slice(t.length);return s.path.startsWith(t)&&l.length>0&&!l.includes("/")&&l.toLowerCase().includes(i)}).sort((s,l)=>+(l.type==="tree")-+(s.type==="tree")||(s.path<l.path?-1:s.path>l.path?1:0))}function Ho({sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:l,initialLocation:d}){let[p,n]=(0,F.useState)(null),[a,u]=(0,F.useState)(""),[b,f]=(0,F.useState)(0),[h,v]=(0,F.useState)(d?.directory||""),[k,S]=(0,F.useState)(d?.offset||0),[w,N]=(0,F.useState)(d?.query||""),[y,m]=(0,F.useState)(d?.path||null),[g,C]=(0,F.useState)(!1),[x,D]=(0,F.useState)(!0),U=(0,F.useRef)(null),j=(0,F.useRef)(d?.path||null),K=(0,F.useRef)(d?.viewer),L=M=>{j.current=M,K.current=void 0,m(M)},H=(M,ge,de={})=>l?.(M,ge,{...de,returnLocation:{source:"tree",tree:{directory:h,offset:k,query:w,path:j.current,viewer:K.current}}});(0,F.useEffect)(()=>{let M=new AbortController;return D(!0),u(""),(g?Promise.resolve(U.current):(async()=>{try{return await t("vcs/tree-page",{sessionId:e,repositoryId:r,commit:o,path:h,offset:k,limit:100,...w?{query:w}:{}},M.signal)}catch(re){if(re.code!=="vcs/not-found"&&re.code!=="vcs/unsupported")throw re;return M.signal.throwIfAborted(),{...await t("vcs/tree",{sessionId:e,repositoryId:r,commit:o},M.signal),legacy:!0}}})()).then(re=>{M.signal.aborted||(n({...re,requestKey:JSON.stringify([h,k,w])}),re.legacy&&(U.current=re,C(!0)))}).catch(re=>{M.signal.aborted||(u(re.message),re.code==="vcs/rediscover-required"&&s())}).finally(()=>{M.signal.aborted||D(!1)}),()=>M.abort()},[e,r,o,h,k,w,b,g]);let P=M=>{v(M),S(0),N(""),L(null)};if(a&&!p)return F.default.createElement("p",{role:"alert"},a," ",F.default.createElement("button",{onClick:()=>f(M=>M+1)},i("retry")));if(!p)return F.default.createElement("p",{role:"status"},i("loading"));let I=p.legacy||p.requestKey===JSON.stringify([h,k,w]),Y=h?h+"/":"",he=I?sr(p.entries,h,w):[],xe=p.legacy?he.slice(k,k+100):he,be=I?p.legacy?k+100<he.length?k+100:null:p.nextOffset:null;return F.default.createElement("section",{"aria-label":i("historicalTree"),"aria-busy":x},x&&F.default.createElement("p",{role:"status"},i("loading")),a&&F.default.createElement("p",{role:"alert"},a," ",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,h||"/"," ",h&&F.default.createElement("button",{onClick:()=>P(h.includes("/")?h.slice(0,h.lastIndexOf("/")):"")},i("treeUp"))),F.default.createElement("nav",{"aria-label":i("treeBreadcrumbs")},ir(h).map(M=>F.default.createElement(F.default.Fragment,{key:M.path},M.path&&" / ",M.path===h?F.default.createElement("span",{"aria-current":"location"},M.name):F.default.createElement("button",{onClick:()=>P(M.path)},M.name)))),F.default.createElement("label",null,i("treeSearch")," ",F.default.createElement("input",{"aria-label":i("treeSearch"),maxLength:1024,value:w,onChange:M=>{N(M.target.value),S(0),L(null)}})),F.default.createElement("p",null,xe.length," ",i("treeEntries")),!x&&I&&!xe.length&&w&&F.default.createElement("p",{role:"status"},i("emptySearch")),F.default.createElement("ul",null,xe.map(M=>F.default.createElement("li",{key:M.path},M.type==="tree"?F.default.createElement("button",{onClick:()=>P(M.path)},M.path.slice(Y.length),"/"):M.type==="blob"&&["100644","100755"].includes(M.mode)?F.default.createElement("button",{"aria-pressed":y===M.path,onClick:()=>L(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")),k>0&&F.default.createElement("button",{disabled:x,onClick:()=>{S(Math.max(0,k-100)),L(null)}},i("treePrevious")),be!=null&&F.default.createElement("button",{disabled:x,onClick:()=>{S(be),L(null)}},i("treeNext")),y&&F.default.createElement(Se,{key:JSON.stringify([e,r,o,y]),sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:l?H:void 0,initialViewer:K.current,onViewerChange:M=>{K.current=M},path:y,onClose:()=>L(null)}))}function gt(e){return F.default.createElement(Bo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Bo(e){let[r,o]=(0,F.useState)(!!e.initialLocation);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("historicalTree")),r&&F.default.createElement(Ho,{...e}))}function vt(e){return{sideBySide:e?.sideBySide!==!1,ignoreWhitespace:e?.ignoreWhitespace===!0,wrap:e?.wrap===!0,enabled:e?.enabled!==!1}}function fe(e={}){let r=typeof e.path=="string"&&e.path.length<=32768?e.path:null;return{id:typeof e.id=="string"?e.id:null,path:r,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:vt(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:vt(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:vt(e.viewer)}}function nr(e,r){return[...e,fe(r)].slice(-100)}function yt(e,r){return fe({...e,...r,viewer:{...e.viewer,...r.viewer}})}var te=se(require("react"),1);var G=se(require("react"),1);function Do({sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,follow:s,since:l,until:d,rpc:p,t:n,onRediscover:a,onSelectCommit:u}){let[b,f]=(0,G.useState)({commits:[],nextOffset:null}),[h,v]=(0,G.useState)(0),[k,S]=(0,G.useState)(0),[w,N]=(0,G.useState)(!0),[y,m]=(0,G.useState)(""),g={...l?{since:l}:{},...d?{until:d}:{}};return(0,G.useEffect)(()=>{let C=new AbortController;return N(!0),m(""),p("vcs/file-history",{sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,offset:h,limit:50,follow:s,...g},C.signal).then(x=>{C.signal.aborted||f(D=>_e(D,x,h))}).catch(x=>{C.signal.aborted||(m(x.message),x.code==="vcs/rediscover-required"&&a())}).finally(()=>{C.signal.aborted||N(!1)}),()=>C.abort()},[e,r,o,t,i,h,k,s,l,d]),G.default.createElement("section",{"aria-label":n("fileHistory"),"aria-busy":w},G.default.createElement("p",null,n("fileHistoryScope")),G.default.createElement("p",{style:{overflowWrap:"anywhere"}},b.path," \xB7 ",G.default.createElement("code",null,o)),G.default.createElement("ol",null,b.commits.map(C=>G.default.createElement("li",{key:C.id},G.default.createElement("code",{title:C.id},C.id.slice(0,10))," \xB7 ",u?G.default.createElement("button",{onClick:()=>u(C.id,C.path||b.path)},C.subject):C.subject,G.default.createElement("div",null,C.boundary&&G.default.createElement("span",null,n(C.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":C.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":C.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),C.path&&G.default.createElement("code",null,C.oldPath?C.oldPath+" \u2192 ":"",C.path)," ",C.similarity!==void 0&&G.default.createElement("span",null,n("fileHistorySimilarity"),": ",C.similarity,"% \xB7 "),C.author," \xB7 ",G.default.createElement("time",{dateTime:C.date},C.date))))),w&&G.default.createElement("p",{role:"status"},n("loading")),y&&G.default.createElement("p",{role:"alert"},y," ",G.default.createElement("button",{onClick:()=>S(C=>C+1)},n("retry"))),!w&&!y&&!b.commits.length&&G.default.createElement("p",null,n("historyEmpty")),b.truncated&&G.default.createElement("p",{role:"status"},n("historyLimit")),!!h&&G.default.createElement("button",{disabled:w,onClick:()=>v(ze(h))},n("historyBack")),!y&&b.nextOffset!==null&&G.default.createElement("button",{disabled:w,onClick:()=>v(b.nextOffset)},n("historyMore")))}function bt(e){return G.default.createElement(Mo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Mo(e){let[r,o]=(0,G.useState)(!1),[t,i]=(0,G.useState)(!1),[s,l]=(0,G.useState)(""),[d,p]=(0,G.useState)("");return G.default.createElement("div",null,G.default.createElement("button",{"aria-expanded":r,onClick:()=>o(n=>!n)},e.t("fileHistory")),r&&G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>i(n.target.checked)}),e.t("fileHistoryFollow")),G.default.createElement("p",null,e.t("fileHistoryFollowScope")),G.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,a)=>G.default.createElement("label",{key:n},e.t(n)," ",G.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)}))),G.default.createElement(Do,{key:JSON.stringify([t,s.trim(),d.trim()]),follow:t,since:s.trim()||null,until:d.trim()||null,...e})))}var J=se(require("react"),1);function To({sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,rpc:s,t:l,onRediscover:d,onSelectCommit:p,onSelectLocation:n,initialOrigin:a,initialStartLine:u}){let[b,f]=(0,J.useState)(null),[h,v]=(0,J.useState)(""),[k,S]=(0,J.useState)(0),[w,N]=(0,J.useState)(u||1),[y,m]=(0,J.useState)(a?{commit:a.commit,path:a.path,originalLine:a.line,viewer:a.viewer}:null);return(0,J.useEffect)(()=>{let g=new AbortController;return f(null),v(""),s("vcs/blame",{sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,startLine:w,lineLimit:500},g.signal).then(C=>{g.signal.aborted||f(C)}).catch(C=>{g.signal.aborted||(v(C.message),C.code==="vcs/rediscover-required"&&d())}),()=>g.abort()},[e,r,o,t,i,k,w]),h?J.default.createElement("p",{role:"alert"},h," ",J.default.createElement("button",{onClick:()=>S(g=>g+1)},l("retry"))):b?J.default.createElement("section",{"aria-label":l("blame")},J.default.createElement("p",null,l("blameScope")),p&&J.default.createElement("p",null,l("blameNavigation")),b.notice&&J.default.createElement("p",{role:"status"},b.notice),b.truncated&&J.default.createElement("p",{role:"status"},l("blameLimit")),!b.notice&&!b.lines.length&&J.default.createElement("p",null,l("blameEmpty")),!!b.lines.length&&J.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},J.default.createElement("table",null,J.default.createElement("thead",null,J.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(g=>J.default.createElement("th",{key:g,scope:"col"},l(g))))),J.default.createElement("tbody",null,b.lines.map(g=>J.default.createElement("tr",{key:g.line},J.default.createElement("th",{scope:"row"},g.line),J.default.createElement("td",null,p?J.default.createElement("button",{title:g.commit,onClick:()=>n?n(g.commit,g.path||null,{line:g.originalLine||null}):p(g.commit,g.path||null)},J.default.createElement("code",null,g.commit.slice(0,10))):J.default.createElement("code",{title:g.commit},g.commit.slice(0,10))),J.default.createElement("td",null,g.author),J.default.createElement("td",null,g.summary),J.default.createElement("td",null,J.default.createElement("pre",{style:{margin:0}},g.text),g.path&&g.originalLine?J.default.createElement("button",{onClick:()=>m(g)},l("blameOriginLine"),": ",g.path,":",g.originalLine):J.default.createElement("span",null,l("blameUnmapped")))))))),J.default.createElement("p",null,b.startLine||w,"\u2013",b.lines.at(-1)?.line||w," / ",b.totalLines??"\u2014"),J.default.createElement("button",{disabled:w===1,onClick:()=>{m(null),N(Math.max(1,w-500))}},l("blamePrevious")),J.default.createElement("button",{disabled:b.nextLine==null,onClick:()=>{m(null),N(b.nextLine)}},l("blameNext")),y&&J.default.createElement(Se,{key:JSON.stringify([y.commit,y.path,y.originalLine]),sessionId:e,repositoryId:r,rpc:s,t:l,onRediscover:d,initialViewer:y.viewer,onViewerChange:g=>m(C=>C&&{...C,viewer:g}),onSelectCommit:p?(g,C,x={})=>n?n(g,C,{...x,returnLocation:{source:"blame-origin",blameStartLine:w,origin:{commit:y.commit,path:y.path,line:y.originalLine,viewer:y.viewer}}}):p(g,C):void 0,commit:y.commit,path:y.path,line:y.originalLine,onClose:()=>m(null)})):J.default.createElement("p",{role:"status"},l("loading"))}function wt(e){let[r,o]=(0,J.useState)(!!e.initialOrigin);return J.default.createElement("div",null,J.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("blame")),r&&J.default.createElement(To,{...e}))}function Pe(e){return te.default.createElement(Fo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function Fo({sessionId:e,repositoryId:r,commit:o,parentIndex:t,base:i,target:s,id:l,rpc:d,t:p,onRediscover:n,onSelectCommit:a,initialViewer:u,onViewerChange:b,initialOrigin:f,initialBlameStartLine:h}){let[v,k]=(0,te.useState)(null),[S,w]=(0,te.useState)(""),[N,y]=(0,te.useState)(0),[m,g]=(0,te.useState)(!1);return(0,te.useEffect)(()=>{let C=new AbortController;return k(null),w(""),d(i?"vcs/revision-compare":"vcs/commit-compare",i?{sessionId:e,repositoryId:r,base:i,target:s,id:l,...m?{large:!0}:{}}:{sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:l,...m?{large:!0}:{}},C.signal).then(x=>{C.signal.aborted||k(x)}).catch(x=>{C.signal.aborted||(w(x.message),x.code==="vcs/rediscover-required"&&n())}),()=>C.abort()},[e,r,o,t,i,s,l,N,m]),S?te.default.createElement("p",{role:"alert"},S," ",te.default.createElement("button",{onClick:()=>y(C=>C+1)},p("retry")),m&&te.default.createElement("button",{onClick:()=>g(!1)},p("largeClose"))):v?te.default.createElement("section",{className:"vcs-history-comparison"},te.default.createElement("header",{className:"vcs-comparison-heading"},te.default.createElement("h4",null,v.path),te.default.createElement("p",null,v.left.label," \u2194 ",v.right.label),v.notice&&te.default.createElement("p",{role:"status"},v.notice),m?te.default.createElement("p",null,p("largeScope")," ",te.default.createElement("button",{onClick:()=>g(!1)},p("largeClose"))):Ge(v)&&te.default.createElement("p",null,p("largeScope")," ",te.default.createElement("button",{onClick:()=>g(!0)},p("largeLoad")))),v.binary?te.default.createElement("p",null,p("binary")):te.default.createElement(ye,{initialOptions:u,onOptionsChange:b,comparison:v,identity:JSON.stringify(i?[e,r,i,s,l]:[e,r,o,t,l]),t:p}),te.default.createElement("div",{className:"vcs-comparison-extras"},o&&!i&&te.default.createElement(bt,{onSelectCommit:a,key:"file-history:"+JSON.stringify([e,r,o,t,l]),sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:l,rpc:d,t:p,onRediscover:n}),o&&!i&&te.default.createElement(wt,{initialOrigin:f,initialStartLine:h,onSelectLocation:a,onSelectCommit:a,key:"blame:"+JSON.stringify([e,r,o,t,l]),sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:l,rpc:d,t:p,onRediscover:n}),(o||i)&&te.default.createElement(Ee,{key:"image:"+JSON.stringify([e,r,o,t,i,s,l]),sessionId:e,repositoryId:r,commit:o,parentIndex:t,base:i,target:s,id:l,rpc:d,t:p,onRediscover:n}))):te.default.createElement("p",{role:"status"},p("loading"),m&&te.default.createElement("button",{onClick:()=>g(!1)},p("largeClose")))}function ar(e,r){if(typeof r!="string"||!r)return null;let o=e.filter(t=>t.path===r);return o.length===1&&typeof o[0].id=="string"&&o[0].id?o[0].id:null}function lr(e,r=""){let o=r.trim().toLowerCase();return o?e.filter(t=>[t.id,t.author,t.subject].some(i=>i?.toLowerCase().includes(o))):e}function Ke(e,r=""){let o=r.trim().toLowerCase();return o?e.filter(t=>[t.path,t.oldPath].some(i=>i?.toLowerCase().includes(o))):e}function Ae(e){return O.default.createElement(Oo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Oo({sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:l,initialPath:d,initialLocation:p,onLocationChange:n}){let a=(0,O.useRef)(!0),u=fe({...p,path:d||p?.path}),b=P=>n?.(P),f=(P,I,Y={})=>l?.(P,I,{returnLocation:{source:"comparison",origin:null},...Y}),[h,v]=(0,O.useState)(null),[k,S]=(0,O.useState)(u.fileQuery),[w,N]=(0,O.useState)(u.focused),[y,m]=(0,O.useState)(u.line),[g,C]=(0,O.useState)(u.parentIndex),[x,D]=(0,O.useState)(null),[U,j]=(0,O.useState)(""),[K,L]=(0,O.useState)(0);if((0,O.useEffect)(()=>{let P=new AbortController;return D(null),j(""),t("vcs/commit",{sessionId:e,repositoryId:r,commit:o,parentIndex:g},P.signal).then(I=>{P.signal.aborted||(D(I),a.current&&(a.current=!1,v(ar(I.changes,u.path))))}).catch(I=>{P.signal.aborted||(j(I.message),I.code==="vcs/rediscover-required"&&s())}),()=>P.abort()},[e,r,o,g,K]),U)return O.default.createElement("p",{role:"alert"},U," ",O.default.createElement("button",{onClick:()=>L(P=>P+1)},i("retry")));if(!x)return O.default.createElement("p",{role:"status"},i("loading"));let H=Ke(x.changes,k);return O.default.createElement("section",{className:"vcs-commit-details"+(w?" 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,x.subject),O.default.createElement("code",{className:"vcs-commit-oid"},x.id),O.default.createElement("p",null,x.author," \xB7 ",x.date),x.committer&&x.committer!==x.author&&O.default.createElement("p",null,i("commitCommitter")," ",x.committer,x.committerDate?` \xB7 ${x.committerDate}`:""),x.signature?.signed===!0&&O.default.createElement("p",null,O.default.createElement("span",{title:i("commitSignatureUnverified")},i("commitSigned",{format:x.signature.format}))),x.messageTruncated&&O.default.createElement("p",{role:"status"},i("commitMessageLimit")),x.message&&O.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},x.message),x.parents.length>1&&O.default.createElement("label",null,i("commitParent")," ",O.default.createElement("select",{"aria-label":i("commitParent"),value:g,onChange:P=>{v(null),D(null),m(null),C(Number(P.target.value)),b({source:"comparison",origin:null,parentIndex:Number(P.target.value),path:null,line:null})}},x.parents.map((P,I)=>O.default.createElement("option",{key:P,value:I},I+1,": ",P.slice(0,10))))),O.default.createElement("p",null,x.parent||i("commitRoot")," \u2192 ",x.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:k,onChange:P=>{S(P.target.value),v(null),m(null),b({fileQuery:P.target.value,path:null,line:null})}})),O.default.createElement("span",null," ",H.length," / ",x.changes.length),O.default.createElement("ul",{className:"vcs-commit-files"},H.map(P=>O.default.createElement("li",{key:P.id},O.default.createElement("button",{"aria-pressed":h===P.id,onClick:()=>{v(P.id),m(null),b({source:"comparison",origin:null,path:P.path,line:null})}},O.default.createElement("span",{className:"vcs-file-status"},P.status," \xB7 "),O.default.createElement("span",{className:"vcs-file-path",title:P.oldPath?P.oldPath+" \u2192 "+P.path:P.path},P.path,P.oldPath&&O.default.createElement("small",null,"\u2190 ",P.oldPath)))))),!!x.changes.length&&!H.length&&O.default.createElement("p",{role:"status"},i("emptySearch")),!x.changes.length&&O.default.createElement("p",null,i("commitNoChanges")),O.default.createElement(gt,{key:JSON.stringify([e,r,o]),initialLocation:u.source==="tree"?u.tree:null,sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:l}))),O.default.createElement("div",{className:"vcs-commit-review"},O.default.createElement("div",{className:"vcs-commit-comparison","aria-label":i("comparisonContext")},h&&O.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":w,onClick:()=>{N(!w),b({focused:!w})}},i(w?"comparisonRestore":"comparisonFocus")),y&&u.path?O.default.createElement(Se,{sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:l?f:void 0,path:u.path,line:y,initialViewer:u.viewer,onViewerChange:P=>b({viewer:P}),onClose:()=>{m(null),b({line:null})}}):h?O.default.createElement(Pe,{key:h,sessionId:e,repositoryId:r,commit:o,parentIndex:g,id:h,initialViewer:u.viewer,initialOrigin:u.source==="blame-origin"?u.origin:null,initialBlameStartLine:u.blameStartLine,onViewerChange:P=>b({viewer:P}),onSelectCommit:l?f:void 0,rpc:t,t:i,onRediscover:s}):O.default.createElement("p",{role:"status"},i("pick")))))}var ne=se(require("react"),1);function cr(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let r=e.slice(0,200),o=new Map,t=[],i=[],s=d=>typeof d=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(d);for(let[d,p]of r.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),t.push({id:p.id,row:d})}let l=!1;for(let d of r){let p=new Set;for(let n of d.parents){if(i.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=o.get(n);if(a!==void 0&&a<=o.get(d.id))throw new Error("Graph requires child-before-parent order");i.push({from:d.id,to:n,missing:a===void 0})}if(l)break}return{nodes:t,edges:i,nodesTruncated:e.length>200,edgesTruncated:l}}function dr(e){let r=Array(32).fill(null),o=new Map,t=[],i=new Set,s=!1,l=n=>{if(i.has(n))return null;let a=r.indexOf(n);return a>=0?a:(a=r.indexOf(null),a<0?(s=!0,i.add(n),null):(r[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(o.set(n.id,{...n,lane:a}),t.push({...n,lane:a}),a===null)continue;r[a]=null;let u=d.get(n.id)||[];for(let[b,f]of u.entries())r.includes(f)||(b===0&&r[a]===null?r[a]=f:l(f))}let p=e.edges.filter(n=>!n.missing).flatMap(n=>{let a=o.get(n.from),u=o.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:t,edges:p,lanesTruncated:s,laneCount:Math.max(1,...t.map(n=>(n.lane??0)+1))}}function Wo({commits:e,selected:r,onSelect:o,t}){let i;try{i=cr(e)}catch{return ne.default.createElement("p",{role:"alert"},t("graphInvalid"))}let s=dr(i),l=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":t("historyGraph")},ne.default.createElement("p",null,t("graphScope")),s.lanesTruncated&&ne.default.createElement("p",{role:"status"},t("graphLaneLimit")),(i.nodesTruncated||i.edgesTruncated)&&ne.default.createElement("p",{role:"status"},t("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}},l.map(n=>{let a=n.start*36+18,u=n.end*36+18,b=12+n.fromLane*18,f=12+n.toLane*18;return ne.default.createElement("path",{key:n.from+n.to,d:"M "+b+" "+a+" C "+b+" "+(a+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":r===n.id?!0:void 0,style:r===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,i.nodes.length-1):a.key==="ArrowUp"?Math.max(0,n.row-1):a.key==="Home"?0:a.key==="End"?i.nodes.length-1:null;u!==null&&(a.preventDefault(),a.stopPropagation(),a.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,t("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 "+t("graphMissing"):"")))))}function xt(e){let[r,o]=(0,ne.useState)(!1);return ne.default.createElement("div",null,ne.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("historyGraph")),r&&ne.default.createElement(Wo,{...e}))}var W=se(require("react"),1);function jo({sessionId:e,repositoryId:r,base:o,target:t,rpc:i,t:s,onRediscover:l}){let[d,p]=(0,W.useState)(null),[n,a]=(0,W.useState)(""),[u,b]=(0,W.useState)(0),[f,h]=(0,W.useState)(null),[v,k]=(0,W.useState)("");if((0,W.useEffect)(()=>{let w=new AbortController;return p(null),a(""),h(null),i("vcs/revision-changes",{sessionId:e,repositoryId:r,base:o,target:t},w.signal).then(N=>{w.signal.aborted||p(N)}).catch(N=>{w.signal.aborted||(a(N.message),N.code==="vcs/rediscover-required"&&l())}),()=>w.abort()},[e,r,o,t,u]),n)return W.default.createElement("p",{role:"alert"},n," ",W.default.createElement("button",{onClick:()=>b(w=>w+1)},s("retry")));if(!d)return W.default.createElement("p",{role:"status"},s("loading"));let S=Ke(d.changes,v);return W.default.createElement("div",null,W.default.createElement("label",null,s("commitFileSearch")," ",W.default.createElement("input",{"aria-label":s("commitFileSearch"),value:v,onChange:w=>{k(w.target.value),h(null)}})),W.default.createElement("span",null," ",S.length," / ",d.changes.length),!!d.changes.length&&!S.length&&W.default.createElement("p",{role:"status"},s("emptySearch")),!d.changes.length&&W.default.createElement("p",null,s("revisionEmpty")),W.default.createElement("ul",null,S.map(w=>W.default.createElement("li",{key:w.id},W.default.createElement("button",{"aria-pressed":f===w.id,onClick:()=>h(w.id)},w.status," \xB7 ",w.oldPath?w.oldPath+" \u2192 ":"",w.path)))),f&&W.default.createElement(Pe,{key:f,sessionId:e,repositoryId:r,base:o,target:t,id:f,rpc:i,t:s,onRediscover:l}))}function St(e){return W.default.createElement(Io,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Io({commits:e,sessionId:r,repositoryId:o,rpc:t,t:i,onRediscover:s,onReferencesLoaded:l}){let[d,p]=(0,W.useState)(""),[n,a]=(0,W.useState)(""),[u,b]=(0,W.useState)([]),[f,h]=(0,W.useState)(!1),[v,k]=(0,W.useState)(0),[S,w]=(0,W.useState)(!1),[N,y]=(0,W.useState)("");return(0,W.useEffect)(()=>{if(!v)return;let m=new AbortController;return w(!0),y(""),t("vcs/references",{sessionId:r,repositoryId:o},m.signal).then(g=>{m.signal.aborted||(b(g.references),h(!0),l?.(g.references))}).catch(g=>{m.signal.aborted||(y(g.message),g.code==="vcs/rediscover-required"&&s())}).finally(()=>{m.signal.aborted||w(!1)}),()=>m.abort()},[r,o,v]),W.default.createElement("section",{"aria-label":i("revisionTitle")},W.default.createElement("h3",null,i("revisionTitle")),W.default.createElement("p",null,i("revisionScope")),W.default.createElement("button",{disabled:S,onClick:()=>k(m=>m+1)},i("revisionLoadRefs")),W.default.createElement("p",null,i("revisionRefsScope")),f&&!S&&!N&&W.default.createElement("p",{role:"status"},u.length?`${i("revisionRefsCount")}: ${u.length}`:i("revisionRefsEmpty")),S&&W.default.createElement("p",{role:"status"},i("loading")),N&&W.default.createElement("p",{role:"alert"},N),[[d,p,"revisionBase"],[n,a,"revisionTarget"]].map(([m,g,C])=>W.default.createElement("label",{key:C},i(C)," ",W.default.createElement("select",{"aria-label":i(C),value:m,onChange:x=>g(x.target.value)},W.default.createElement("option",{value:""},"\u2014"),!!e.length&&W.default.createElement("optgroup",{label:i("revisionLoadedCommits")},e.map(x=>W.default.createElement("option",{key:x.id,value:x.id},x.id.slice(0,10)," \xB7 ",x.subject))),!!u.length&&W.default.createElement("optgroup",{label:i("revisionLocalRefs")},u.map(x=>W.default.createElement("option",{key:x.name,value:x.commit},x.name," \xB7 ",x.commit.slice(0,10)))),m&&!e.some(x=>x.id===m)&&!u.some(x=>x.commit===m)&&W.default.createElement("option",{value:m},m)))),W.default.createElement("button",{disabled:!d||!n,onClick:()=>{p(n),a(d)}},i("revisionSwap")),W.default.createElement("p",{style:{overflowWrap:"anywhere"}},W.default.createElement("code",null,d||"\u2014")," \u2192 ",W.default.createElement("code",null,n||"\u2014")),d&&n&&W.default.createElement(jo,{key:JSON.stringify([r,o,d,n]),sessionId:r,repositoryId:o,base:d,target:n,rpc:t,t:i,onRediscover:s}))}function He(e){return A.default.createElement(qo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function qo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i,showSearch:s=!1}){let[l,d]=(0,A.useState)({...fe(),revision:0}),[p,n]=(0,A.useState)(""),[a,u]=(0,A.useState)([]),[b,f]=(0,A.useState)(null),[h,v]=(0,A.useState)(""),[k,S]=(0,A.useState)(""),w=B=>{let ie=(b||[]).find(ue=>JSON.stringify([ue.name,ue.commit])===B)?.commit||"";S(B),v(ie),g(ue=>ue?{...ue,snapshot:ie||null}:null),he(0),n(""),L(null),I({commits:[],snapshot:null,nextOffset:null})},[N,y]=(0,A.useState)({message:"",author:"",path:"",since:"",until:""}),[m,g]=(0,A.useState)(null),C=B=>{g({values:B,snapshot:P.snapshot}),he(0),n(""),L(null),I(Q=>({...Q,commits:[],nextOffset:null}))},x=()=>{Y&&(I(B=>({commits:[],snapshot:B.snapshot,nextOffset:null})),L(null),n(""),he(Math.max(0,Y-50)))},D=(0,A.useMemo)(()=>or(b||[]),[b]),U=l.id,j=(B,Q=null,ie={})=>{l.id&&u(ue=>nr(ue,yt(l,ie.returnLocation||{}))),d(ue=>({...fe({id:B,path:Q,...ie}),revision:ue.revision+1}))},K=()=>{if(!a.length)return;let B=a[a.length-1];u(Q=>Q.slice(0,-1)),d(Q=>({...fe(B),revision:Q.revision+1}))},L=(B,Q=null)=>{u([]),d(ie=>({...fe({id:B,path:Q}),revision:ie.revision+1}))},H=B=>d(Q=>({...yt(Q,B),revision:Q.revision})),[P,I]=(0,A.useState)({commits:[],snapshot:null,nextOffset:null}),[Y,he]=(0,A.useState)(0),[xe,be]=(0,A.useState)(0),[M,ge]=(0,A.useState)(!0),[de,re]=(0,A.useState)("");(0,A.useEffect)(()=>{let B=new AbortController;return ge(!0),re(""),o("vcs/history",{sessionId:e,repositoryId:r,offset:Y,limit:50,...m?{search:m.values}:{},...m?.snapshot||h||P.snapshot?{snapshot:m?.snapshot||h||P.snapshot}:{}},B.signal).then(Q=>{if(!B.signal.aborted){let ie=Je(P,Q,Y);I(ie);let ue=new Set(P.commits.filter(me=>!ie.commits.some(Fe=>Fe.id===me.id)).map(me=>me.id));d(me=>ue.has(me.id)?{...fe(),revision:me.revision+1}:me)}}).catch(Q=>{B.signal.aborted||(re(Q.message),Q.code==="vcs/rediscover-required"&&i())}).finally(()=>{B.signal.aborted||ge(!1)}),()=>B.abort()},[e,r,Y,xe,m,h,k]);let pe=lr(P.commits,p);return A.default.createElement("section",{className:"vcs-history vcs-history-browser","aria-label":t("history"),"aria-busy":M},A.default.createElement("div",{className:"vcs-history-list"},A.default.createElement("p",null,t("historyListOnly")),b!==null&&A.default.createElement("p",null,t("historyRefsScope")),A.default.createElement("label",null,t("historyBranch")," ",A.default.createElement("select",{"aria-label":t("historyBranch"),value:k,disabled:M,onChange:B=>w(B.target.value)},A.default.createElement("option",{value:""},"HEAD"),k&&!(b||[]).some(B=>JSON.stringify([B.name,B.commit])===k)&&A.default.createElement("option",{value:k},JSON.parse(k)[0]," \xB7 ",h.slice(0,10)," \xB7 ",t("historyPinned")),(b||[]).map(B=>{let Q=JSON.stringify([B.name,B.commit]);return A.default.createElement("option",{key:Q,value:Q},B.name," \xB7 ",B.commit.slice(0,10))}))),s&&A.default.createElement("details",{className:"vcs-help"},A.default.createElement("summary",null,t("historySearchHelp")),A.default.createElement("p",null,t("historyBranchScope"),h&&A.default.createElement(A.default.Fragment,null," \xB7 ",A.default.createElement("code",null,h)))),s&&A.default.createElement("form",{className:"vcs-history-search","aria-label":t("historyServerSearch"),onSubmit:B=>{B.preventDefault(),C({...N})}},A.default.createElement("fieldset",{disabled:M},A.default.createElement("legend",null,t("historyServerSearch")),A.default.createElement("details",{className:"vcs-help"},A.default.createElement("summary",null,t("historySearchHelp")),A.default.createElement("p",null,t("historyServerScope"))),["message","author","path","since","until"].map(B=>A.default.createElement("label",{key:B},t("historyServer_"+B)," ",A.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":t("historyServer_"+B),value:N[B],onChange:Q=>y(ie=>({...ie,[B]:Q.target.value}))}))),A.default.createElement("button",{type:"submit"},t("historyServerApply")),A.default.createElement("button",{type:"button",onClick:()=>{y({message:"",author:"",path:"",since:"",until:""}),C({})}},t("historyServerClear")))),m&&A.default.createElement("p",{role:"status"},t("historyServerActive"),": ",JSON.stringify(m.values)," \xB7 ",A.default.createElement("code",null,m.snapshot||P.snapshot)),s&&A.default.createElement(A.default.Fragment,null,A.default.createElement("label",null,t("historySearch")," ",A.default.createElement("input",{"aria-label":t("historySearch"),value:p,onChange:B=>{n(B.target.value),L(null)}})),A.default.createElement("span",null," ",pe.length," / ",P.commits.length)),!!P.commits.length&&A.default.createElement(A.default.Fragment,null,A.default.createElement("p",{role:"status"},t("historyWindow"),": ",Math.max(0,(P.windowEnd??P.commits.length)-P.commits.length),"\u2013",P.windowEnd??P.commits.length),s&&A.default.createElement("details",{className:"vcs-help"},A.default.createElement("summary",null,t("historySearchHelp")),A.default.createElement("p",null,t("historyWindowScope")))),!!P.commits.length&&!pe.length&&A.default.createElement("p",{role:"status"},t("historyNoMatch")),A.default.createElement("ol",{className:"vcs-commit-list"},pe.map(B=>A.default.createElement("li",{key:B.id},A.default.createElement("button",{className:"vcs-commit-row","aria-pressed":U===B.id,onClick:()=>L(B.id)},A.default.createElement("span",{className:"vcs-commit-subject"},B.subject)),A.default.createElement("div",{className:"vcs-commit-meta"},A.default.createElement("code",{title:B.id},B.id.slice(0,10))," \xB7 ",B.author," \xB7 ",A.default.createElement("time",{dateTime:B.date},B.date)),D.has(B.id)&&A.default.createElement("div",{"aria-label":t("historyRefsLabel"),style:{overflowWrap:"anywhere"}},D.get(B.id).names.map(Q=>A.default.createElement("span",{key:Q},A.default.createElement("code",null,Q)," ")),D.get(B.id).hidden>0&&A.default.createElement("span",null,t("historyRefsMore"),": ",D.get(B.id).hidden))))),M&&A.default.createElement("p",{role:"status"},t("loading")),de&&A.default.createElement("p",{role:"alert"},de," ",A.default.createElement("button",{onClick:()=>be(B=>B+1)},t("retry"))),!M&&!de&&!P.commits.length&&A.default.createElement("p",null,t("historyEmpty")),P.truncated&&A.default.createElement("p",{role:"status"},t("historyLimit")),!!Y&&A.default.createElement("button",{disabled:M,onClick:x},t("historyBack")),!de&&P.nextOffset!==null&&A.default.createElement("button",{disabled:M,onClick:()=>he(P.nextOffset)},t("historyMore")),!!P.commits.length&&A.default.createElement(xt,{commits:P.commits,selected:U,onSelect:L,t}),A.default.createElement(St,{onReferencesLoaded:f,commits:P.commits,sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i})),A.default.createElement("div",{className:"vcs-history-details"},a.length>0&&A.default.createElement("p",null,A.default.createElement("button",{onClick:K,"aria-label":t("historyNavigationBack")},t("historyNavigationBack")," \xB7 ",a[a.length-1].id.slice(0,10))),U&&A.default.createElement(Ae,{key:JSON.stringify([U,l.revision]),initialPath:l.path,initialLocation:l,onLocationChange:H,sessionId:e,repositoryId:r,commit:U,onSelectCommit:j,rpc:o,t,onRediscover:i})))}var le=se(require("react"),1);function kt({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,l]=(0,le.useState)(null),[d,p]=(0,le.useState)(null),[n,a]=(0,le.useState)(""),[u,b]=(0,le.useState)(0);return(0,le.useEffect)(()=>{let f=new AbortController;return a(""),l(null),p(null),o("vcs/stash-list",{sessionId:e,repositoryId:r},f.signal).then(h=>{f.signal.aborted||l(h.stashes)}).catch(h=>{f.signal.aborted||(a(h.message),h.code==="vcs/rediscover-required"&&i())}),()=>f.abort()},[e,r,u]),n?le.default.createElement("section",{"aria-label":t("stashTitle")},le.default.createElement("h3",null,t("stashTitle")),le.default.createElement("p",{role:"alert"},n," ",le.default.createElement("button",{onClick:()=>b(f=>f+1)},t("retry")))):s?le.default.createElement("section",{"aria-label":t("stashTitle")},le.default.createElement("h3",null,t("stashTitle")),le.default.createElement("p",null,t("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"},t("stashEmpty")),d&&le.default.createElement(Ae,{sessionId:e,repositoryId:r,commit:d,rpc:o,t,onRediscover:i})):le.default.createElement("section",{"aria-label":t("stashTitle")},le.default.createElement("h3",null,t("stashTitle")),le.default.createElement("p",{role:"status"},t("loading")))}var we=se(require("react"),1);var V=se(require("react"),1);function Ct(e){return V.default.createElement(Vo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Vo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,l]=(0,V.useState)(""),[d,p]=(0,V.useState)(null),[n,a]=(0,V.useState)(null),[u,b]=(0,V.useState)([]),[f,h]=(0,V.useState)(null),[v,k]=(0,V.useState)([]),[S,w]=(0,V.useState)(""),[N,y]=(0,V.useState)(!1),m=(0,V.useRef)(null),g=(L,H=[])=>{m.current?.abort();let P=new AbortController;m.current=P,y(!0),w(""),a(null),h(null),k([]),p(L),b(H),o("vcs/grep",{sessionId:e,repositoryId:r,...L},P.signal).then(I=>{if(!P.signal.aborted){if(!lt(I?.snapshot)||L.commit&&L.commit!==I.snapshot||!Array.isArray(I.matches))throw Error(t("grepInvalid"));a(I)}}).catch(I=>{P.signal.aborted||(w(I.message),I.code==="vcs/rediscover-required"&&i())}).finally(()=>{P.signal.aborted||y(!1)})};(0,V.useEffect)(()=>()=>m.current?.abort(),[]);let C=L=>{L.preventDefault();let H=s.trim();H&&g({query:H})},x=n?.matches,D=()=>{h(v.at(-1)||null),k(L=>L.slice(0,-1))},U=(L,H,P={})=>{if(!lt(L)||!H)return;let I=fe({viewer:P.returnLocation?.viewer||f?.viewer}).viewer;k(Y=>[...Y,f&&{...f,viewer:I}].filter(Boolean).slice(-100)),h({commit:L,path:H,line:P.line||null,viewer:fe().viewer})},j=()=>{N||!n?.nextCursor||g({query:d.query,commit:n.snapshot,cursor:n.nextCursor},[...u,{...d,commit:n.snapshot}].slice(-100))},K=()=>{!N&&u.length&&g(u.at(-1),u.slice(0,-1))};return V.default.createElement("section",{"aria-label":t("grepTitle")},V.default.createElement("h3",null,t("grepTitle")),V.default.createElement("p",null,t("grepScope")),V.default.createElement("form",{onSubmit:C},V.default.createElement("input",{"aria-label":t("grepQuery"),maxLength:1024,placeholder:t("grepPlaceholder"),value:s,onChange:L=>l(L.target.value)}),V.default.createElement("button",{type:"submit",disabled:N||!s.trim()},t("grepRun"))),f?V.default.createElement(V.default.Fragment,null,V.default.createElement("button",{onClick:D},t("historyBack")),V.default.createElement(Se,{key:JSON.stringify([f.commit,f.path,f.line]),sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i,commit:f.commit,path:f.path,line:f.line,initialViewer:f.viewer,onViewerChange:L=>h(H=>H&&{...H,viewer:fe({viewer:L}).viewer}),onClose:D,onSelectCommit:U})):V.default.createElement(V.default.Fragment,null,N?V.default.createElement("p",{role:"status"},t("loading")):S?V.default.createElement("p",{role:"alert"},S," ",V.default.createElement("button",{onClick:()=>d&&g(d,u)},t("retry"))):x&&V.default.createElement(V.default.Fragment,null,V.default.createElement("p",{role:"status"},t("grepPageCount",{count:x.length})),V.default.createElement("code",null,n.snapshot),V.default.createElement("p",{role:"status"},t(n.complete===!0?"grepComplete":n.nextCursor?"grepMoreAvailable":"grepPartial")),n.reason&&V.default.createElement("p",{role:"status"},t("grepReason"),": ",t({"page-limit":"grepPageLimit","scan-budget":"grepScanBudget","unsupported-content":"grepUnsupported"}[n.reason]||"grepPartial")),(n.warnings||[]).map((L,H)=>V.default.createElement("p",{role:"status",key:H},typeof L=="string"?L:L.message||L.code)),x.length?V.default.createElement("ol",null,x.map((L,H)=>V.default.createElement("li",{key:H},V.default.createElement("button",{onClick:()=>{k([]),h({path:L.path,line:L.line,commit:n.snapshot,viewer:fe().viewer})}},V.default.createElement("code",null,L.path,":",L.line))," ",V.default.createElement("pre",{style:{margin:0}},L.text),L.textTruncated&&V.default.createElement("span",null," \xB7 ",t("grepTextTruncated"))))):V.default.createElement("p",{role:"status"},t(n.nextCursor?"grepEmptyPage":"grepEmpty"))),!!u.length&&V.default.createElement("button",{disabled:N,onClick:K},t("grepPreviousPage")),!S&&n?.nextCursor&&V.default.createElement("button",{disabled:N,onClick:j},t("grepNextPage"))))}function Nt(e){return we.default.createElement(Go,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Go({t:e,...r}){let[o,t]=(0,we.useState)("content");return we.default.createElement("section",{className:"vcs-search-panel","aria-label":e("searchCenter")},we.default.createElement("nav",{className:"vcs-search-modes","aria-label":e("searchMode")},we.default.createElement("button",{"aria-pressed":o==="content",onClick:()=>t("content")},e("searchContentMode")),we.default.createElement("button",{"aria-pressed":o==="history",onClick:()=>t("history")},e("searchHistoryMode"))),o==="content"?we.default.createElement(Ct,{...r,t:e}):we.default.createElement(He,{...r,t:e,showSearch:!0}))}var T=se(require("react"),1);function Lt(e){return T.default.createElement(Jo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}var Uo=e=>typeof e=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(e),Be=e=>e&&typeof e.name=="string"&&e.name.length>0&&e.ref==="refs/heads/"+e.name&&Uo(e.commit);function Jo({sessionId:e,repositoryId:r,rpc:o,t,onSwitched:i,onRediscover:s}){let[l,d]=(0,T.useState)(!1),[p,n]=(0,T.useState)(null),[a,u]=(0,T.useState)(""),[b,f]=(0,T.useState)(null),[h,v]=(0,T.useState)(""),[k,S]=(0,T.useState)(""),[w,N]=(0,T.useState)(!1),y=(0,T.useRef)(null),m=(0,T.useRef)(!1),g=(0,T.useRef)(!0),C=(0,T.useRef)(null);(0,T.useEffect)(()=>(g.current=!0,()=>{g.current=!1,C.current=null,y.current?.abort()}),[]);let x=()=>{C.current=null,f(null)};(0,T.useEffect)(()=>{if(!b)return;let L=()=>{C.current===b&&(x(),S(t("branchExpired")))},H=b.expiresAt-Date.now();if(H<=0){L();return}let P=setTimeout(L,H);return()=>clearTimeout(P)},[b]);let D=async()=>{if(m.current||w)return;m.current=!0,y.current?.abort();let L=new AbortController;y.current=L,x(),n(null),u(""),S(""),v("read"),d(!0);try{let H=await o("vcs/branches",{sessionId:e,repositoryId:r},L.signal);if(L.signal.aborted||!g.current)return;if(!Be(H?.current)||!Array.isArray(H.branches)||!H.branches.every(Be))throw Error(t("branchInvalid"));n(H)}catch(H){!L.signal.aborted&&g.current&&(S(H.message),H.code==="vcs/rediscover-required"&&s?.())}finally{!L.signal.aborted&&g.current&&(m.current=!1,v(""))}},U=async()=>{if(m.current||w||!p||!a)return;m.current=!0;let L=new AbortController;y.current=L,x(),S(""),v("prepare");try{let H=await o("vcs/branch-switch-prepare",{sessionId:e,repositoryId:r,branch:a},L.signal);if(L.signal.aborted||!g.current)return;if(!Be(H?.current)||!Be(H?.target)||H.target.name!==a||typeof H.token!="string"||!/^[a-f0-9]{64}$/.test(H.token)||!Number.isSafeInteger(H.expiresAt)||H.expiresAt<=Date.now()||H.expiresAt>Date.now()+61e3)throw Error(t("branchInvalid"));C.current=H,f(H)}catch(H){!L.signal.aborted&&g.current&&(S(H.message),n(null),u(""),H.code==="vcs/rediscover-required"&&s?.())}finally{!L.signal.aborted&&g.current&&(m.current=!1,v(""))}},j=async()=>{let L=C.current;if(m.current||w||!L)return;if(L.expiresAt<=Date.now()){x(),S(t("branchExpired"));return}m.current=!0,x(),n(null),u(""),v("confirm"),S("");let H=new AbortController;y.current=H;try{let P=await o("vcs/branch-switch-confirm",{sessionId:e,repositoryId:r,token:L.token},H.signal);if(H.signal.aborted||!g.current)return;if(!Be(P?.current)||P.current.ref!==L.target.ref||P.current.commit!==L.target.commit)throw Error(t("branchInvalid"));d(!1),i()}catch(P){!H.signal.aborted&&g.current&&(N(!0),S(P.message))}finally{!H.signal.aborted&&g.current&&(m.current=!1,v(""))}},K=()=>{m.current||w||(x(),d(!1),n(null),u(""),S(""))};return T.default.createElement("section",{"aria-label":t("branchSwitcher"),"aria-busy":!!h,style:{padding:"0 12px",flexShrink:0,maxHeight:"45%",overflow:"auto"}},T.default.createElement("button",{disabled:!!h||w,"aria-expanded":l,onClick:()=>l?K():D()},t("branchSwitcher")),l&&T.default.createElement(T.default.Fragment,null,T.default.createElement("p",null,t("branchScope")),h&&T.default.createElement("p",{role:"status"},t(h==="confirm"?"branchPending":"loading")),w?T.default.createElement(T.default.Fragment,null,T.default.createElement("p",{role:"alert"},t("branchUnknown")," ",k),T.default.createElement("button",{onClick:()=>{m.current||i()}},t("branchRecover"))):T.default.createElement(T.default.Fragment,null,k&&T.default.createElement("p",{role:"alert"},k),!h&&T.default.createElement("button",{onClick:D},t("branchRead")),p&&!b&&T.default.createElement(T.default.Fragment,null,T.default.createElement("p",null,t("branchCurrent"),": ",T.default.createElement("code",null,p.current.ref)," \xB7 ",T.default.createElement("code",null,p.current.commit)),T.default.createElement("label",null,t("branchTarget")," ",T.default.createElement("select",{"aria-label":t("branchTarget"),disabled:!!h,value:a,onChange:L=>{x(),u(L.target.value),S("")}},T.default.createElement("option",{value:""},"\u2014"),p.branches.map(L=>T.default.createElement("option",{key:L.ref,value:L.name,disabled:L.ref===p.current.ref},L.name," \xB7 ",L.commit)))),T.default.createElement("button",{disabled:!!h||!a,onClick:U},t("branchPrepare"))),b&&T.default.createElement("section",{role:"group","aria-label":t("branchConfirmation")},T.default.createElement("p",null,t("branchWarning")),T.default.createElement("p",null,t("branchCurrent"),": ",T.default.createElement("code",null,b.current.ref)," \xB7 ",T.default.createElement("code",null,b.current.commit)),T.default.createElement("p",null,t("branchTarget"),": ",T.default.createElement("code",null,b.target.ref)," \xB7 ",T.default.createElement("code",null,b.target.commit)),T.default.createElement("p",null,t("branchExpires"),": ",T.default.createElement("time",{dateTime:new Date(b.expiresAt).toISOString()},new Date(b.expiresAt).toLocaleTimeString())),T.default.createElement("button",{disabled:!!h,onClick:j},t("branchConfirm"))," ",T.default.createElement("button",{disabled:!!h,onClick:x},t("branchCancel"))))))}var Et={zh:{grepPageLimit:"\u5DF2\u8FBE\u5230\u672C\u9875\u663E\u793A\u5BB9\u91CF\uFF0C\u53EF\u7EE7\u7EED\u8BFB\u53D6\u3002",grepScanBudget:"\u5DF2\u8FBE\u5230\u672C\u9875\u626B\u63CF\u5BB9\u91CF\uFF0C\u53EF\u7EE7\u7EED\u626B\u63CF\u3002",grepUnsupported:"\u5B58\u5728\u8D85\u8FC7\u6587\u4EF6\u5BB9\u91CF\u9650\u5236\u7684\u5185\u5BB9\uFF0C\u672A\u5305\u542B\u5728\u7ED3\u679C\u4E2D\u3002",grepTextTruncated:"\u547D\u4E2D\u884C\u8F83\u957F\uFF0C\u4EC5\u663E\u793A\u5F00\u5934\u7247\u6BB5\uFF1B\u6253\u5F00\u6587\u4EF6\u67E5\u770B\u547D\u4E2D\u5185\u5BB9\u3002",segmentLocalCoordinates:"\u4EC5\u663E\u793A\u7247\u6BB5\u5185\u884C\u53F7\uFF1B\u6B64\u5BBF\u4E3B\u672A\u63D0\u4F9B\u5168\u5C40\u884C\u5750\u6807\uFF0C\u65E0\u6CD5\u5B9A\u4F4D\u76EE\u6807\u884C\u3002",grepInvalid:"\u641C\u7D22\u54CD\u5E94\u65E0\u6548\u6216\u5FEB\u7167\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u67E5\u8BE2\u3002",grepPageCount:"\u672C\u9875 {count} \u6761\u5339\u914D",grepComplete:"\u56FA\u5B9A\u5FEB\u7167\u5DF2\u641C\u7D22\u5B8C\u6BD5\uFF1B\u6570\u91CF\u4EC5\u8868\u793A\u672C\u9875\u3002",grepMoreAvailable:"\u5C1A\u672A\u641C\u7D22\u5B8C\u6BD5\uFF0C\u53EF\u7EE7\u7EED\u4E0B\u4E00\u9875\uFF1B\u6570\u91CF\u4EC5\u8868\u793A\u672C\u9875\u3002",grepPartial:"\u641C\u7D22\u7ED3\u675F\uFF0C\u4F46\u90E8\u5206\u5185\u5BB9\u53D7\u9650\u6216\u88AB\u8DF3\u8FC7\uFF1B\u7ED3\u679C\u4E0D\u5B8C\u6574\u3002",grepReason:"\u641C\u7D22\u8FB9\u754C",grepEmptyPage:"\u672C\u9875\u6CA1\u6709\u5339\u914D\uFF0C\u4ECD\u6709\u5185\u5BB9\u53EF\u7EE7\u7EED\u641C\u7D22\u3002",grepPreviousPage:"\u4E0A\u4E00\u641C\u7D22\u9875",grepNextPage:"\u7EE7\u7EED\u4E0B\u4E00\u9875",readingWindow:"\u663E\u793A\u884C",readingTargetMissing:"\u76EE\u6807\u884C\u4E0D\u5728\u5F53\u524D\u53EF\u7528\u6587\u672C\u4E2D",segmentLines:"\u5168\u5C40\u884C",readingReadonly:"\u53EA\u8BFB\u6587\u4EF6",segmentPartialLine:"\u6BB5\u9996\u6216\u6BB5\u5C3E\u53EF\u80FD\u4EC5\u5305\u542B\u4E00\u884C\u7684\u90E8\u5206\u5185\u5BB9",reviewWithBranchSwitch:"\u53EA\u8BFB\u5BA1\u9605 \xB7 \u5206\u652F\u5207\u6362\u9700\u786E\u8BA4",branchSwitcher:"\u5207\u6362\u672C\u5730 Git \u5206\u652F",branchScope:"\u8FD9\u662F\u5B9E\u9645\u5DE5\u4F5C\u533A\u64CD\u4F5C\uFF0C\u4E0D\u662F\u5386\u53F2\u7B5B\u9009\u3002\u4EC5\u652F\u6301\u5DF2\u6709\u672C\u5730\u5206\u652F\uFF1B\u5FC5\u987B\u5148\u8BFB\u53D6\u5E76\u9884\u68C0\uFF0C\u6838\u5BF9\u6765\u6E90\u53CA\u76EE\u6807\u63D0\u4EA4\u540E\u518D\u6B21\u786E\u8BA4\u3002\u4F1A\u4FEE\u6539 HEAD\u3001\u7D22\u5F15\u53CA\u5DE5\u4F5C\u6587\u4EF6\uFF1B\u4E0D\u5F3A\u5236\u3001\u4E0D\u81EA\u52A8\u6682\u5B58\u3001\u4E0D\u521B\u5EFA\u5206\u652F\u3001\u4E0D\u8054\u7F51\u3002\u810F\u72B6\u6001\u6216\u4E0D\u652F\u6301\u7684\u4ED3\u5E93\u7531\u670D\u52A1\u7AEF\u62D2\u7EDD\u3002",branchRead:"\u91CD\u65B0\u8BFB\u53D6\u672C\u5730\u5206\u652F",branchCurrent:"\u5F53\u524D\u5206\u652F\u4E0E\u63D0\u4EA4",branchTarget:"\u76EE\u6807\u672C\u5730\u5206\u652F",branchPrepare:"\u9884\u68C0\u5E76\u67E5\u770B\u786E\u8BA4\u4FE1\u606F",branchConfirmation:"\u786E\u8BA4\u5B9E\u9645\u5206\u652F\u5207\u6362",branchWarning:"\u786E\u8BA4\u540E\u4F1A\u4FEE\u6539\u5F53\u524D\u4ED3\u5E93\u7684\u5B9E\u9645\u5206\u652F\u3001\u7D22\u5F15\u53CA\u5DE5\u4F5C\u6587\u4EF6\u3002\u8BF7\u5148\u4FDD\u5B58\u7F16\u8F91\u5668\u5185\u5BB9\u3002\u4EC5\u5F53\u524D\u786E\u8BA4\u4FE1\u606F\u6709\u6548\uFF0C\u4E0D\u81EA\u52A8\u91CD\u8BD5\uFF1B\u5207\u6362\u8FDB\u884C\u4E2D\u79BB\u5F00\u9875\u9762\u4E5F\u4E0D\u80FD\u4FDD\u8BC1\u64A4\u9500\u3002",branchConfirm:"\u786E\u8BA4\u5207\u6362\u5B9E\u9645\u5DE5\u4F5C\u533A",branchCancel:"\u53D6\u6D88\u672C\u6B21\u786E\u8BA4",branchExpires:"\u786E\u8BA4\u6709\u6548\u671F\u81F3",branchExpired:"\u786E\u8BA4\u5DF2\u8FC7\u671F\uFF1B\u672A\u53D1\u9001\u5207\u6362\u8BF7\u6C42\u3002\u8BF7\u91CD\u65B0\u9884\u68C0\u3002",branchPending:"\u5207\u6362\u8BF7\u6C42\u5DF2\u53D1\u51FA\uFF1B\u8BF7\u52FF\u91CD\u590D\u64CD\u4F5C\u6216\u79BB\u5F00\u9875\u9762\u3002",branchUnknown:"\u65E0\u6CD5\u786E\u8BA4\u5207\u6362\u7ED3\u679C\u3002\u6B64\u4EE4\u724C\u5DF2\u4F5C\u5E9F\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u8BD5\u3002\u8BF7\u91CD\u65B0\u8BFB\u53D6\u5B9E\u9645\u4ED3\u5E93\u5E76\u5237\u65B0\u5DE5\u4F5C\u533A\uFF0C\u518D\u51B3\u5B9A\u540E\u7EED\u64CD\u4F5C\u3002",branchRecover:"\u91CD\u65B0\u8BFB\u53D6\u5E76\u5237\u65B0\u5DE5\u4F5C\u533A",branchInvalid:"\u5206\u652F\u54CD\u5E94\u4E0D\u5B8C\u6574\u6216\u65E0\u6548\uFF1B\u8BF7\u91CD\u65B0\u8BFB\u53D6\u3002",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\u663E\u793A\u539F\u6587\u4EF6\u5168\u5C40\u884C\u53F7\uFF0C\u53EF\u5B9A\u4F4D\u76EE\u6807\u884C\uFF1B\u7247\u6BB5\u8FB9\u754C\u53EF\u80FD\u5728\u884C\u4E2D\u95F4\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\u56FA\u5B9A\u7684 HEAD \u63D0\u4EA4\u6811\u4E2D\u5206\u9875\u8FDB\u884C\u5B57\u9762\u6587\u672C\u641C\u7D22\uFF1B\u6BCF\u9875\u6700\u591A100\u6761\uFF0C\u626B\u63CF\u3001\u6587\u4EF6\u4E0E\u8F93\u51FA\u5BB9\u91CF\u6709\u754C\u3002\u53EF\u80FD\u51FA\u73B0\u65E0\u547D\u4E2D\u7684\u7EED\u67E5\u9875\uFF1B\u8DF3\u8FC7\u6216\u53D7\u9650\u5185\u5BB9\u4F1A\u660E\u786E\u63D0\u793A\u3002\u53EA\u8BFB\uFF0C\u4E0D\u641C\u7D22\u672A\u63D0\u4EA4\u6539\u52A8\uFF0C\u4E0D\u8054\u7F51\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\u6253\u5F00\u56FA\u5B9A\u63D0\u4EA4\u6587\u4EF6\u5E76\u5C1D\u8BD5\u5728\u9AD8\u7EA7\u6216\u57FA\u7840\u89C6\u56FE\u5B9A\u4F4D\u8BE5\u884C\uFF0C\u8F83\u5927 UTF-8 \u6587\u4EF6\u53EF\u624B\u52A8\u6253\u5F00\u5206\u6BB5\u5B9A\u4F4D\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\uFF1B\u8D8A\u754C\u6216\u4E0D\u652F\u6301\u5185\u5BB9\u4F1A\u660E\u786E\u63D0\u793A\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:{grepPageLimit:"This page reached its display budget; continue to read more.",grepScanBudget:"This page reached its scan budget; continue to scan more.",grepUnsupported:"Files exceeding the per-file budget were not searched.",grepTextTruncated:"Long matching line: only its beginning is shown. Open the file to read the match.",segmentLocalCoordinates:"Segment-local line numbers only; this host did not provide global coordinates, so the requested line cannot be located.",grepInvalid:"Invalid search response or changed snapshot. Start a new search.",grepPageCount:"{count} matches on this page",grepComplete:"Fixed snapshot search exhausted; the count is for this page only.",grepMoreAvailable:"More remains to scan; the count is for this page only.",grepPartial:"Search ended with limited or skipped content; results are incomplete.",grepReason:"Search boundary",grepEmptyPage:"No matches on this page; more content remains to scan.",grepPreviousPage:"Previous search page",grepNextPage:"Continue to next page",readingWindow:"Lines shown",readingTargetMissing:"Requested line is not in the available text",segmentLines:"Global lines",readingReadonly:"Read-only file",segmentPartialLine:"A segment boundary may contain only part of a line",reviewWithBranchSwitch:"Read-only review \xB7 branch switch requires confirmation",branchSwitcher:"Switch local Git branch",branchScope:"This changes the actual working copy, not the history filter. Existing local branches only. Read and preflight first, then verify source and target commits before confirming. Updates HEAD, index and working files; no force, auto-stash, branch creation or network. Dirty or unsupported repositories are rejected by the host.",branchRead:"Read local branches again",branchCurrent:"Current branch and commit",branchTarget:"Target local branch",branchPrepare:"Preflight and review confirmation",branchConfirmation:"Confirm actual branch switch",branchWarning:"Confirmation changes the actual branch, index and working files. Save editor contents first. This confirmation is single-use and is never retried automatically. Leaving while it runs does not guarantee cancellation.",branchConfirm:"Confirm working-copy switch",branchCancel:"Cancel this confirmation",branchExpires:"Confirmation expires at",branchExpired:"Confirmation expired; no switch request was sent. Preflight again.",branchPending:"Switch request sent. Do not repeat the operation or leave the page.",branchUnknown:"The switch outcome is unknown. This token has been discarded and will not be retried. Read the actual repository and refresh the working copy before deciding what to do next.",branchRecover:"Read again and refresh working copy",branchInvalid:"Invalid or incomplete branch response; read again.",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 with original global line numbers and target-line location. Segment boundaries may split a line; 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:"Paged literal-text search in a fixed HEAD commit tree, up to 100 matches per page with bounded scan, file and output budgets. An empty page may have more to scan; skipped or limited content is reported. Read-only; no uncommitted changes or network.",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 in advanced or basic mode; larger UTF-8 files can be opened manually as located segments. Without a line, only a unique same-path change is preselected; old paths and missing mappings are not guessed. Out-of-range or unsupported content is reported.",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 pr(e,r,o,t){let i=e.target;if(!r?.contains(i)||e.defaultPrevented||e.isComposing||i?.closest?.(".monaco-editor")||i?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&i===o&&t)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 ur(e,r){let o=r?[...r.querySelectorAll("button[data-vcs-item]")]:[],t=o.indexOf(e.target);if(t<0)return;let i;if(e.key==="ArrowDown")i=o[t+1];else if(e.key==="ArrowUp")i=o[t-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 mr=e=>"dsh-vcs:project:v1:"+e;function fr(e,r){if(!e)return"";try{let o=(r??globalThis.localStorage)?.getItem(mr(e));return typeof o=="string"&&o.length<=1024?o:""}catch{return""}}function hr(e,r,o){if(!(!e||!r))try{(o??globalThis.localStorage)?.setItem(mr(e),r)}catch{}}function vr(e,r=""){return e.find(o=>o.id===r)?.id||e.find(o=>o.relativePath===".")?.id||e[0]?.id||""}var De=(e,r)=>JSON.stringify([e,r]),Me=(e,r=".")=>[e.type.toUpperCase(),e.relativePath==="."?r:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),Ye=(e,r="all")=>e.type==="git"&&["staged","unstaged"].includes(r)?r:"all",gr=(e="",r="")=>e===r?0:e<r?-1:1;function Pt(e=[]){let r={id:"",name:"",directories:new Map,files:[],count:0};for(let t of e){let i=String(t.path||"").split("/").filter(Boolean);if(!i.length)continue;let s=r;for(let l of i.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(t)}let o=t=>({...t,directories:[...t.directories.values()].sort((i,s)=>gr(i.name,s.name)).map(o),files:[...t.files].sort((i,s)=>gr(i.path,s.path))});return o(r)}function yr(e=[],r){let o=e.findIndex(t=>t.id===r);return{index:o<0?0:o+1,total:e.length}}function br(e=[],r,o){if(!e.length||!["previous","next"].includes(o))return null;let t=e.findIndex(l=>l.id===r),i=o==="next"?1:-1,s=t<0?o==="next"?-1:0:t;return e[(s+i+e.length)%e.length]||null}function wr(e=""){let r=String(e).split("/").filter(Boolean);return r.slice(0,-1).map((o,t)=>r.slice(0,t+1).join("/"))}function At(e,r=[]){for(let o of e?.directories||[])r.push(o.id),At(o,r);return r}function xr(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function Sr(e=[]){return e.reduce((r,o)=>{let t=xr(o.status);return r.all++,r[t]=(r[t]||0)+1,r},{all:0})}function zo(e=[],r="",o="all"){let t=r.toLowerCase();return e.filter(i=>(o==="all"||xr(i.status)===o)&&i.path.toLowerCase().includes(t)).sort((i,s)=>i.path.localeCompare(s.path))}function kr(e,r,o="",t="all"){return e.map(i=>({...r[i.id],repository:i,changes:zo(r[i.id]?.changes,o,t)}))}function Cr(e,r,o=""){if(!o||!e||e.cwd!==r.cwd)return r;let t=new Map(e.repositories.map(i=>[i.id,i]));for(let i of r.repositories)t.set(i.id,i);return{...r,repositories:[...t.values()],truncated:e.truncated||r.truncated,warnings:[...e.warnings||[],...r.warnings||[]]}}var Lr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Nr=e=>new URL("vcs-assets/"+e,document.baseURI).href;function Er(){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 Te=e=>Lr[e?.status]||e?.status?.slice(0,1).toUpperCase()||"M",Ko=["slots","layout","locale","connection","uiSession"];function Yo(){let[e,r]=(0,c.useState)("all"),[o,t]=(0,c.useState)({}),[i,s]=(0,c.useState)(""),[l,d]=(0,c.useState)({added:0,deleted:0,count:0});return{mode:e,setMode:r,statuses:o,setStatuses:t,detailError:i,setDetailError:s,stats:l,setStats:d}}function Qo(e,r){let[o,t]=(0,c.useState)(e);return(0,c.useEffect)(()=>{r?.(o)},[o]),[o,t]}function $o({session:e,rpc:r,invalidate:o,setStatuses:t}){let i=e?.id,[s,l]=(0,c.useState)(null),[d,p]=(0,c.useState)(()=>fr(e?.cwd)),[n,a]=(0,c.useState)(0),[u,b]=(0,c.useState)(""),[f,h]=(0,c.useState)(""),[v,k]=(0,c.useState)(!1),[S,w]=(0,c.useState)(""),N=(0,c.useRef)(null),y=(0,c.useRef)(null),m=(0,c.useRef)(!1),g=s?.repositories||[];return(0,c.useEffect)(()=>{g.some(D=>D.id===d)&&hr(e?.cwd,d)},[e?.cwd,d,s]),(0,c.useEffect)(()=>{let D=new AbortController;return N.current=D,w(""),k(!!i),i&&r("vcs/repositories",{sessionId:i,...f?{subdirectory:f}:{}},D.signal).then(U=>{if(!D.signal.aborted){let j=Cr(y.current,U,f);m.current=!1,p(K=>vr(j.repositories,K)),l(j)}}).catch(U=>{D.signal.aborted||w(U.message)}).finally(()=>{D.signal.aborted||k(!1)}),()=>D.abort()},[i,n,f]),{discovery:s,repositories:g,repositoryId:d,setRepositoryId:p,scan:n,subdirectory:u,setSubdirectory:b,scanning:v,error:S,rescan:()=>{m.current=!1,o(),N.current?.abort(),y.current=s,l(null),t({}),h(u.trim()),a(D=>D+1)},rediscover:()=>{m.current||(m.current=!0,o(),N.current?.abort(),y.current=null,l(null),t({}),h(""),a(D=>D+1))}}}function Xo({sessionId:e,rpc:r,scheduleStatus:o,discovery:t,repositoryId:i,mode:s,visibleRepositories:l,setStatuses:d,setDetailError:p,rediscover:n,invalidate:a}){let[u,b]=(0,c.useState)(0),[f,h]=(0,c.useState)(0),v=(0,c.useRef)(null),k=(0,c.useRef)(!1),S=(N=!1)=>{N||h(y=>y+1),k.current=N,N||a(),N||d({}),b(y=>y+1)};return(0,c.useEffect)(()=>{let N=new AbortController,y=k.current;v.current=N,k.current=!1,y||(d({}),p(""));for(let m of l){let g=Ye(m,s);o(()=>r("vcs/status",{sessionId:e,repositoryId:m.id,mode:g},N.signal),N.signal).then(C=>{N.signal.aborted||d(x=>({...x,[m.id]:{...C,mode:g}}))}).catch(C=>{if(!N.signal.aborted){if(C.code==="vcs/rediscover-required"){n();return}d(x=>({...x,[m.id]:{error:C.message,changes:[],mode:g}}))}})}return()=>N.abort()},[e,t,i,s,u]),(0,c.useEffect)(()=>{let N=y=>{y.target===window&&e&&i&&document.visibilityState==="visible"&&S(!0)};return window.addEventListener("focus",N),()=>window.removeEventListener("focus",N)},[e,i,s]),{refresh:u,historyRefresh:f,refreshStatuses:S,abortStatus:()=>v.current?.abort()}}function Zo({sessionId:e,rpc:r,discovery:o,repositories:t,statuses:i,mode:s,reviewActive:l,setDetailError:d,setStats:p,rediscover:n}){let[a,u]=(0,c.useState)(null),[b,f]=(0,c.useState)(null),[h,v]=(0,c.useState)(!1),[k,S]=(0,c.useState)("content"),[w,N]=(0,c.useState)(null),[y,m]=(0,c.useState)(0),g=(0,c.useRef)(null),C=t.find(I=>I.id===a?.repositoryId),x=a?i[a.repositoryId]:null,D=JSON.stringify([e,o?.cwd,a?.repositoryId,s,a?.id]),U=w?.key===D&&w?.status===x;return(0,c.useEffect)(()=>N(null),[D,x,l]),(0,c.useEffect)(()=>{let I=new AbortController;return g.current=I,f(null),d(""),p({added:0,deleted:0,count:0}),S("content"),v(!!a&&!!x),!l&&a&&x&&C&&r("vcs/compare",{sessionId:e,repositoryId:a.repositoryId,mode:Ye(C,s),id:a.id,...U?{large:!0}:{}},I.signal).then(Y=>{I.signal.aborted||f(Y)}).catch(Y=>{if(!I.signal.aborted){if(Y.code==="vcs/rediscover-required"){n();return}d(Y.message)}}).finally(()=>{I.signal.aborted||v(!1)}),()=>I.abort()},[a,x,e,s,l,U,y]),{selected:a,comparison:b,loading:h,tab:k,setTab:S,large:U,selectionKey:D,selectedRepository:C,selectedStatus:x,reset:()=>{g.current?.abort(),f(null),u(null),d(""),S("content"),p({added:0,deleted:0,count:0})},clearSelection:()=>{g.current?.abort(),f(null),u(null),d("")},selectFile:(I,Y)=>{g.current?.abort(),f(null),S("content"),u({repositoryId:I,id:Y})},toggleLarge:()=>{g.current?.abort(),f(null),N(U?null:{key:D,status:x})},retryCompare:()=>m(I=>I+1)}}function Ro({editorNode:e,viewer:r,setStats:o,comparison:t,sessionId:i,discovery:s,selected:l,mode:d,reviewActive:p}){let[n,a]=(0,c.useState)(0),[u,b]=(0,c.useState)(!1),[f,h]=(0,c.useState)(""),[v,k]=(0,c.useState)("pending"),[S,w]=(0,c.useState)(!0),[N,y]=(0,c.useState)(!1),[m,g]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let C=!1,x,D=new AbortController;b(!1),h("");let U=document.createElement("link");return U.rel="stylesheet",U.href=Nr("editor.css"),document.head.appendChild(U),qe(Nr("editor.js")+"?v="+encodeURIComponent(Ve)+"&retry="+n,{signal:D.signal}).then(j=>{C||(x=j.createDiff(e.current,{onStats:o,onComputation:K=>{C||k(K)}}),r.current=x,b(!0))}).catch(j=>{C||h(j.message)}),()=>{C=!0,D.abort(),x?.dispose(),r.current=null,U.remove()}},[n]),(0,c.useEffect)(()=>{u&&(!t||t.binary||p)&&r.current?.setContent({left:{text:""},right:{text:""}},"empty"),u&&t&&!t.binary&&!p&&r.current?.setContent(t,JSON.stringify([i,s?.cwd,l?.repositoryId,d,l?.id,t.path]))},[u,t,i,s,l,d,p]),(0,c.useEffect)(()=>{r.current?.options({sideBySide:S,ignoreWhitespace:N,wrap:m})},[u,S,N,m]),{setEditorRetry:a,editorReady:u,editorError:f,computation:v,sideBySide:S,setSide:w,ignoreWhitespace:N,setWhitespace:y,wrap:m,setWrap:g}}function ei(){let[e,r]=(0,c.useState)(""),[o,t]=(0,c.useState)("all"),[i,s]=(0,c.useState)(!0),[l,d]=(0,c.useState)({});return{query:e,setQuery:r,statusFilter:o,setStatusFilter:t,tree:i,setTree:s,collapsedDirectories:l,setCollapsedDirectories:d,clearFilters:()=>{r(""),t("all")}}}function ti({panelNode:e,searchNode:r,fileListNode:o,revealChange:t,query:i,setQuery:s,changes:l,selected:d,reviewActive:p,repositoryId:n,selectFile:a,tree:u,statusFilter:b,collapsedDirectories:f,groups:h,setTree:v,clearFilters:k,chosen:S,setCollapsedDirectories:w}){let N=m=>{let g=br(l,d?.id,m);g&&a(n,g.id)};return(0,c.useEffect)(()=>{let m=g=>{if(p)return;let C=pr(g,e.current,r.current,!!i);C&&(g.preventDefault(),C==="search"?(r.current?.focus(),r.current?.select()):C==="clear"?s(""):N(C))};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[i,l,d,p]),(0,c.useEffect)(()=>{let m=t.current;if(!m)return;let g=[...o.current?.querySelectorAll("button[data-vcs-change]")||[]].find(C=>C.dataset.vcsChange===m);g&&(g.scrollIntoView({block:"nearest"}),g.focus(),t.current=null)},[u,i,b,f,h]),{selectAdjacent:N,revealSelected:()=>{let m=S;!m||!d||(v(!0),k(),w(g=>{let C={...g};for(let x of wr(m.path))C[d.repositoryId+"\0"+x]=!1;return C}),t.current=De(d.repositoryId,m.id))}}}function ri({t:e,repositories:r,repositoryId:o,gitSelected:t,scanning:i,mode:s,reviewActive:l,busy:d,sessionId:p,discovery:n,sessionCwd:a,subdirectory:u,onSubdirectoryChange:b,onRescan:f,onRepositoryChange:h,onModeChange:v,onRefresh:k,onBack:S}){return c.default.createElement("header",{className:"vcs-top"},c.default.createElement(Er,null),c.default.createElement("h1",{className:"vcs-title"},e("title")),c.default.createElement("span",{className:"vcs-badge"},e(t?"reviewWithBranchSwitch":"readonly")),c.default.createElement("span",{className:"vcs-spacer"}),c.default.createElement("select",{"aria-label":e("repositories"),value:o,disabled:i||!r.length,onChange:w=>h(w.target.value)},!r.length&&c.default.createElement("option",{value:""},e("repositories")),r.map(w=>c.default.createElement("option",{key:w.id,value:w.id},Me(w,e("workspaceRoot"))))),c.default.createElement("label",{className:"vcs-mode"},e("gitMode")," ",c.default.createElement("select",{"aria-label":e("gitMode"),value:s,disabled:l||!t,onChange:w=>v(w.target.value)},["all","unstaged","staged"].map(w=>c.default.createElement("option",{key:w,value:w},e(w))))),c.default.createElement("button",{onClick:k,disabled:d||!p},e("refresh")),c.default.createElement("button",{onClick:S},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:w=>{w.preventDefault(),f()}},c.default.createElement("input",{"aria-label":e("subdirectory"),placeholder:e("subdirectory"),value:u,onChange:w=>b(w.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((w,N)=>c.default.createElement("div",{className:"vcs-notice",key:N},typeof w=="string"?w:w.message||JSON.stringify(w))))}function oi({t:e,gitSelected:r,historyActive:o,stashActive:t,grepActive:i,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":o,"aria-expanded":o,onClick:()=>d("history")},e("history")),r&&c.default.createElement(c.default.Fragment,null,c.default.createElement("button",{"aria-pressed":t,"aria-expanded":t,onClick:()=>d("stash")},e("stash")),c.default.createElement("button",{"aria-pressed":i,"aria-expanded":i,onClick:()=>d("grep")},e("grep"))))}function ii({sessionId:e,repositoryId:r,historyRefresh:o,scan:t,rpc:i,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(mt,{key:JSON.stringify([e,r,o,t]),sessionId:e,repositoryId:r,rpc:i,t:s,onRediscover:l}),d&&u&&c.default.createElement(He,{key:JSON.stringify([e,r,o,t]),sessionId:e,repositoryId:r,rpc:i,t:s,onRediscover:l}),p&&c.default.createElement(kt,{sessionId:e,repositoryId:r,rpc:i,t:s,onRediscover:l}),n&&c.default.createElement(Nt,{sessionId:e,repositoryId:r,rpc:i,t:s,onRediscover:l}))}function si({t:e,statusFilter:r,statusCounts:o,onStatusFilter:t}){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":r===i,onClick:()=>t(i)},e(i==="all"?"allFiles":Lr[i]||"M")," ",c.default.createElement("small",null,o[i]||0))))}function Pr({entry:e,compact:r=!1,depth:o=0,repositoryId:t,selected:i,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(t,e.id),"aria-current":i?.repositoryId===t&&i?.id===e.id?"true":void 0,style:{paddingInlineStart:8+o*14},title:(e.oldPath?e.oldPath+" \u2192 ":"")+e.path+" \xB7 "+s(Te(e)),onClick:()=>l(t,e.id)},c.default.createElement("span",{className:"vcs-status","data-status":Te(e)},Te(e)),c.default.createElement(at,{submodule:e.submodule,t:s}),c.default.createElement("span",{className:"vcs-filename"},r?e.path.slice(d+1):e.path,e.oldPath&&c.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",e.oldPath)))}function Ar({node:e,repository:r,selected:o,t,collapsedDirectories:i,onToggleDirectory:s,onSelect:l,depth:d=0}){return c.default.createElement(c.default.Fragment,null,e.directories.map(p=>{let n=r.id+"\0"+p.id,a=!!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":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(Ar,{node:p,repository:r,selected:o,t,collapsedDirectories:i,onToggleDirectory:s,onSelect:l,depth:d+1}))}),e.files.map(p=>c.default.createElement(Pr,{key:De(r.id,p.id),entry:p,compact:e.id!=="",depth:d,repositoryId:r.id,selected:o,t,onSelect:l})))}function ni({t:e,sessionId:r,scanning:o,error:t,groups:i,statuses:s,query:l,tree:d,collapsedDirectories:p,selected:n,mode:a,fileListNode:u,onSelect:b,onToggleDirectory:f,onRescan:h}){let v=k=>ur(k,u.current);return c.default.createElement("nav",{className:"vcs-filelist","aria-label":e("title"),ref:u,onKeyDown:v},i.map(k=>{let S=k.repository;return c.default.createElement("section",{className:"vcs-repository",key:S.id,"aria-label":Me(S,e("workspaceRoot"))},c.default.createElement("div",{className:"vcs-repository-heading",title:S.root},c.default.createElement("strong",null,Me(S,e("workspaceRoot"))),c.default.createElement("small",null,S.type==="svn"?e("svnBase"):e(Ye(S,a)))),k.error?c.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},k.error,c.default.createElement("button",{onClick:h},e("rescan"))):s[S.id]?d?c.default.createElement(Ar,{node:Pt(k.changes),repository:S,selected:n,t:e,collapsedDirectories:p,onToggleDirectory:f,onSelect:b}):k.changes.map(w=>c.default.createElement(Pr,{key:De(S.id,w.id),entry:w,repositoryId:S.id,selected:n,t:e,onSelect:b})):c.default.createElement("div",{className:"vcs-message"},e("loading")),!k.error&&s[S.id]&&!k.changes.length&&c.default.createElement("div",{className:"vcs-message"},e(l?"emptySearch":"clean")))}),!i.length&&c.default.createElement("div",{className:"vcs-message"},o?e("loading"):t||e(r?"noRepo":"noSession"),t&&c.default.createElement("button",{onClick:h},e("rescan"))))}function ai({t:e,sessionId:r,scanning:o,error:t,groups:i,statuses:s,query:l,statusFilter:d,statusCounts:p,changes:n,tree:a,collapsedDirectories:u,selected:b,mode:f,searchNode:h,fileListNode:v,chosen:k,onQuery:S,onStatusFilter:w,onClearFilters:N,onToggleTree:y,onExpandAll:m,onCollapseAll:g,onRevealSelected:C,onSelect:x,onToggleDirectory:D,onRescan:U}){return c.default.createElement("aside",{className:"vcs-files"},c.default.createElement("div",{className:"vcs-filter"},c.default.createElement("input",{ref:h,"aria-label":e("search"),placeholder:e("search"),title:e("searchShortcut"),value:l,onChange:j=>S(j.target.value)}),(l||d!=="all")&&c.default.createElement("button",{className:"vcs-clear-filter",onClick:N},e("clearFilters"))),c.default.createElement(si,{t:e,statusFilter:d,statusCounts:p,onStatusFilter:w}),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:y},e(a?"tree":"list"))),a&&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:C,disabled:!k},e("revealSelected"))),c.default.createElement(ni,{t:e,sessionId:r,scanning:o,error:t,groups:i,statuses:s,query:l,tree:a,collapsedDirectories:u,selected:b,mode:f,fileListNode:v,onSelect:x,onToggleDirectory:D,onRescan:U}))}function li({t:e,comparison:r,chosen:o,selectedRepository:t,editorReady:i,stats:s,onCopyError:l}){let[d,p]=(0,c.useState)(!1),n=async()=>{let a=r?.path||o?.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:r?.path||o?.path},t?Me(t,e("workspaceRoot"))+" / ":"",r?.path||o?.path||e("pick")),c.default.createElement("button",{className:"vcs-copy-path",disabled:!(r?.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"}),r&&!r.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 ci({t:e,comparison:r}){return r?c.default.createElement("div",{className:"vcs-context","aria-label":e("comparisonContext")},c.default.createElement("span",{className:"vcs-context-status","data-status":Te(r)},e(Te(r))),r.oldPath&&c.default.createElement("span",{className:"vcs-context-rename",title:r.oldPath+" \u2192 "+r.path},r.oldPath," ",c.default.createElement("b",null,"\u2192")," ",r.path),c.default.createElement("span",null,r.left.label||"\u2014"," ",c.default.createElement("b",null,"\u2194")," ",r.right.label||"\u2014"),(r.left.encoding||r.right.encoding)&&c.default.createElement("span",null,e("encoding"),": ",r.left.encoding||"\u2014"," / ",r.right.encoding||"\u2014")):null}function di({t:e,comparison:r,selected:o,selectedRepository:t,selectedStatus:i,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:a,large:u,selectionKey:b,detailError:f,editorError:h,computation:v,onToggleLarge:k,onRetryCompare:S}){return c.default.createElement(c.default.Fragment,null,r&&t?.type==="git"&&c.default.createElement(Ee,{key:JSON.stringify([s,d,o.repositoryId,l,o.id,p,i]),workspace:!0,sessionId:s,repositoryId:o.repositoryId,mode:l,id:o.id,rpc:n,t:e,onRediscover:a}),t?.type==="git"&&(u||Ge(r))&&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:S},e("retry"))),r?.large&&c.default.createElement("p",{role:"status"},e(h?"largeFallback":v==="complete"?"diffComplete":v==="incomplete"?"diffIncomplete":"diffPending")),r?.notice&&c.default.createElement("div",{className:"vcs-notice"},r.notice),r?.submodule&&c.default.createElement("p",{role:"status"},e("submoduleScope")),r?.status==="conflicted"&&t?.type==="git"&&c.default.createElement(nt,{key:JSON.stringify([s,o.repositoryId,l,o.id,p]),sessionId:s,repositoryId:o.repositoryId,mode:l,id:o.id,rpc:n,t:e,onRediscover:a}))}function pi({t:e,comparison:r,editorNode:o,editorError:t,overlay:i,tab:s,error:l,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:t?{display:"none"}:void 0}),t&&r&&!r.binary&&!i&&c.default.createElement(Le,{comparison:r,labels:Ie(e)}),i&&c.default.createElement("div",{className:"vcs-message "+(l||d||t?"vcs-error":""),role:"status"},i,(l||d||t)&&c.default.createElement("button",{onClick:()=>t?p():n()},e(t?"retry":"rescan"))))}function ui({t:e,comparison:r,properties:o,propertyNames:t}){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,r?.left.label||e("before")),c.default.createElement("th",null,r?.right.label||e("after")))),c.default.createElement("tbody",null,t.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 mi({t:e,editorReady:r,sideBySide:o,setSide:t,ignoreWhitespace:i,setWhitespace:s,wrap:l,setWrap:d,stats:p,overlay:n,comparison:a,viewer:u,changes:b,selected:f,onSelectAdjacent:h}){let v=yr(b,f?.id);return c.default.createElement("footer",{className:"vcs-toolbar"},c.default.createElement("button",{disabled:!r,"aria-pressed":o,onClick:()=>t(!o)},e(o?"side":"inline")),c.default.createElement("label",null,c.default.createElement("input",{type:"checkbox",disabled:!r,checked:i,onChange:k=>s(k.target.checked)}),e("whitespace")),c.default.createElement("label",null,c.default.createElement("input",{type:"checkbox",disabled:!r,checked:l,onChange:k=>d(k.target.checked)}),e("wrap")),c.default.createElement("span",{className:"vcs-spacer"}),r&&c.default.createElement("span",null,p.count," ",e("changes")),c.default.createElement("button",{disabled:!r||!a||!!n,onClick:()=>u.current?.navigate("previous")},e("previous")),c.default.createElement("button",{disabled:!r||!a||!!n,onClick:()=>u.current?.navigate("next")},e("next")),v.index>0&&c.default.createElement("span",{className:"vcs-review-position"},e("reviewPosition",{index:v.index,total:v.total})),c.default.createElement("span",{className:"vcs-toolbar-separator"}),c.default.createElement("button",{title:e("fileShortcut"),disabled:!b.length,onClick:()=>h("previous")},e("previousFile")),c.default.createElement("button",{title:e("fileShortcut"),disabled:!b.length,onClick:()=>h("next")},e("nextFile")))}function fi({t:e,comparison:r,selected:o,selectedRepository:t,selectedStatus:i,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:a,large:u,selectionKey:b,loading:f,detailError:h,error:v,busy:k,chosen:S,repositoryCount:w,editorNode:N,editorReady:y,editorError:m,computation:g,tab:C,setTab:x,stats:D,onRetryEditor:U,onRetryCompare:j,onRescan:K,onToggleLarge:L,sideBySide:H,setSide:P,ignoreWhitespace:I,setWhitespace:Y,wrap:he,setWrap:xe,viewer:be,changes:M,onSelectAdjacent:ge,onCopyError:de}){let re=r?.properties,pe=re?[...new Set([...Object.keys(re.left||{}),...Object.keys(re.right||{})])].filter(ie=>re.left?.[ie]!==re.right?.[ie]):[],B=r?.binary?[r.left.label,r.right.label].filter(Boolean).join(" \u2194 "):"",Q=h||(f?e("loading"):s?k&&!S?e("loading"):v||(w?S?r?.binary?e("binary")+(B?" "+e("binaryComparison",{files:B}):""):r?!y&&!m?e("loading"):"":e("pick"):e("pick"):e("noRepo")):e("noSession"));return c.default.createElement("main",{className:"vcs-detail"},c.default.createElement(li,{t:e,comparison:r,chosen:S,selectedRepository:t,editorReady:y,stats:D,onCopyError:de}),m&&c.default.createElement("div",{className:"vcs-notice",role:"status"},e("fallback")," ",c.default.createElement("button",{onClick:U},e("retry")),c.default.createElement("details",null,c.default.createElement("summary",null,e("diagnostics")),m)),c.default.createElement(ci,{t:e,comparison:r}),c.default.createElement(di,{t:e,comparison:r,selected:o,selectedRepository:t,selectedStatus:i,sessionId:s,mode:l,discoveryCwd:d,refresh:p,rpc:n,rediscover:a,large:u,selectionKey:b,detailError:h,editorError:m,computation:g,onToggleLarge:L,onRetryCompare:j}),pe.length>0&&c.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(ie=>c.default.createElement("button",{key:ie,"aria-pressed":C===ie,onClick:()=>x(ie)},e(ie),ie==="properties"?" ("+pe.length+")":""))),c.default.createElement("div",{className:"vcs-labels"},c.default.createElement("span",null,r?.left.label||"\u2014",r?.left.encoding?" \xB7 "+r.left.encoding:""),c.default.createElement("span",null,r?.right.label||"\u2014",r?.right.encoding?" \xB7 "+r.right.encoding:"")),c.default.createElement(pi,{t:e,comparison:r,editorNode:N,editorError:m,overlay:Q,tab:C,error:v,detailError:h,onRetryEditor:U,onRescan:K}),C==="properties"&&c.default.createElement(ui,{t:e,comparison:r,properties:re,propertyNames:pe}),c.default.createElement(mi,{t:e,editorReady:y,sideBySide:H,setSide:P,ignoreWhitespace:I,setWhitespace:Y,wrap:he,setWrap:xe,stats:D,overlay:Q,comparison:r,viewer:be,changes:M,selected:o,onSelectAdjacent:ge}))}function Hr(e,{initialView:r="workspace",onViewChange:o}={}){let t=e.locale.bind("local.vcs"),i=it(2),s=Vt(e.connection,()=>t("error"));function l(n){let a=n.useSessions(u=>Object.values(u.byId).find(b=>(b.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,ot),c.default.createElement("div",{className:"vcs-message vcs-error"},t("error"),c.default.createElement("button",{onClick:()=>this.setState({error:null})},t("retry")),c.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("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),b=(0,c.useRef)(null),f=(0,c.useRef)(null),h=(0,c.useRef)(null),v=(0,c.useRef)(null),k=(0,c.useRef)(null),S=(0,c.useRef)(null),[w,N]=Qo(r,o),{mode:y,setMode:m,statuses:g,setStatuses:C,detailError:x,setDetailError:D,stats:U,setStats:j}=Yo(),K=()=>S.current?.(),{discovery:L,repositories:H,repositoryId:P,setRepositoryId:I,scan:Y,subdirectory:he,setSubdirectory:xe,scanning:be,error:M,rescan:ge,rediscover:de}=$o({session:n,rpc:s,invalidate:K,setStatuses:C}),re=H.filter(Z=>Z.id===P),pe=re.some(Z=>Z.type==="git"),B=re.some(Z=>Z.type==="svn"),Q=(pe||B)&&w==="history",ie=pe&&w==="stash",ue=pe&&w==="grep",me=Q||ie||ue,{refresh:Fe,historyRefresh:Br,refreshStatuses:Dr,abortStatus:Mr}=Xo({sessionId:a,rpc:s,scheduleStatus:i,discovery:L,repositoryId:P,mode:y,visibleRepositories:re,setStatuses:C,setDetailError:D,rediscover:de,invalidate:K}),{selected:Ce,comparison:Ht,loading:Tr,tab:Fr,setTab:Or,large:Wr,selectionKey:jr,selectedRepository:Ir,selectedStatus:Bt,reset:qr,clearSelection:Vr,selectFile:Dt,toggleLarge:Gr,retryCompare:Ur}=Zo({sessionId:a,rpc:s,discovery:L,repositories:H,statuses:g,mode:y,reviewActive:me,setDetailError:D,setStats:j,rediscover:de}),Qe=()=>{Mr(),qr()};S.current=Qe;let Jr=Z=>{Vr(),N(Z)},{setEditorRetry:_r,editorReady:zr,editorError:Kr,computation:Yr,sideBySide:Qr,setSide:$r,ignoreWhitespace:Xr,setWhitespace:Zr,wrap:Rr,setWrap:eo}=Ro({editorNode:b,viewer:f,setStats:j,comparison:Ht,sessionId:a,discovery:L,selected:Ce,mode:y,reviewActive:me}),{query:$e,setQuery:Mt,statusFilter:Xe,setStatusFilter:to,tree:Ze,setTree:Tt,collapsedDirectories:Ft,setCollapsedDirectories:Re,clearFilters:Ot}=ei(),Oe=kr(re,g,$e,Xe),et=Oe.flatMap(Z=>Z.changes),ro=Sr(g[P]?.changes),tt=Bt?.changes?.find(Z=>Z.id===Ce?.id),Wt=Z=>Re(rt=>{let We={...rt};for(let It of Oe)for(let so of At(Pt(It.changes)))We[It.repository.id+"\0"+so]=!Z;return We}),jt=be||re.some(Z=>!g[Z.id]),{selectAdjacent:oo,revealSelected:io}=ti({panelNode:u,searchNode:v,fileListNode:h,revealChange:k,query:$e,setQuery:Mt,changes:et,selected:Ce,reviewActive:me,repositoryId:P,selectFile:Dt,tree:Ze,statusFilter:Xe,collapsedDirectories:Ft,groups:Oe,setTree:Tt,clearFilters:Ot,chosen:tt,setCollapsedDirectories:Re});return c.default.createElement("section",{ref:u,className:"vcs-root","aria-label":t("title")},c.default.createElement("style",null,ot),c.default.createElement(ri,{t,repositories:H,repositoryId:P,gitSelected:pe,scanning:be,mode:y,reviewActive:me,busy:jt,sessionId:a,discovery:L,sessionCwd:n?.cwd,subdirectory:he,onSubdirectoryChange:xe,onRescan:ge,onRepositoryChange:Z=>{Qe(),C({}),I(Z)},onModeChange:Z=>{Qe(),C({}),m(Z)},onRefresh:()=>Dr(!1),onBack:()=>e.layout.selectPanel(null)}),pe&&c.default.createElement(Lt,{key:JSON.stringify([a,P,Y]),sessionId:a,repositoryId:P,rpc:s,t,onSwitched:de,onRediscover:de}),re.filter(Z=>Z.type==="svn"&&!me).map(Z=>c.default.createElement(c.default.Fragment,{key:JSON.stringify([a,Z.id,Y,Fe])},c.default.createElement(ct,{repositoryId:Z.id,sessionId:a,rpc:s,t,onRediscover:de}))),(pe||B)&&c.default.createElement(c.default.Fragment,null,c.default.createElement(oi,{t,gitSelected:pe,historyActive:Q,stashActive:ie,grepActive:ue,reviewActive:me,setReviewView:N,openReviewView:Jr}),c.default.createElement(ii,{sessionId:a,repositoryId:P,historyRefresh:Br,scan:Y,rpc:s,t,rediscover:de,historyActive:Q,stashActive:ie,grepActive:ue,svnSelected:B,gitSelected:pe})),c.default.createElement("div",{className:"vcs-body",hidden:me,"aria-label":t("workspaceView")},c.default.createElement(ai,{t,sessionId:a,scanning:be,error:M,groups:Oe,statuses:g,query:$e,statusFilter:Xe,statusCounts:ro,changes:et,tree:Ze,collapsedDirectories:Ft,selected:Ce,mode:y,searchNode:v,fileListNode:h,chosen:tt,onQuery:Mt,onStatusFilter:to,onClearFilters:Ot,onToggleTree:()=>Tt(!Ze),onExpandAll:()=>Wt(!0),onCollapseAll:()=>Wt(!1),onRevealSelected:io,onSelect:Dt,onToggleDirectory:(Z,rt)=>Re(We=>({...We,[Z]:!rt})),onRescan:ge}),c.default.createElement(fi,{t,comparison:Ht,selected:Ce,selectedRepository:Ir,selectedStatus:Bt,sessionId:a,mode:y,discoveryCwd:L?.cwd,refresh:Fe,rpc:s,rediscover:de,large:Wr,selectionKey:jr,loading:Tr,detailError:x,error:M,busy:jt,chosen:tt,repositoryCount:H.length,editorNode:b,editorReady:zr,editorError:Kr,computation:Yr,tab:Fr,setTab:Or,stats:U,onRetryEditor:()=>_r(Z=>Z+1),onRetryCompare:Ur,onRescan:ge,onToggleLarge:Gr,sideBySide:Qr,setSide:$r,ignoreWhitespace:Xr,setWhitespace:Zr,wrap:Rr,setWrap:eo,viewer:f,changes:et,onSelectAdjacent:oo,onCopyError:D})))}return l}function hi(e){e.effect(()=>e.locale.register("local.vcs",Et));let r=e.locale.bind("local.vcs"),o=Hr(e);e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},o)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>r("title"),order:65},Er))}
181
180
  return module.exports; }