@feng0531/dsh-vcs 0.3.92 → 0.3.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -1,5 +1,5 @@
1
1
  window.__ModuleLoader__.load({ id: "@feng0531/dsh-vcs", factory(require) { var module = { exports: {} }; var exports = module.exports;
2
- var er=Object.create;var $e=Object.defineProperty;var tr=Object.getOwnPropertyDescriptor;var or=Object.getOwnPropertyNames;var rr=Object.getPrototypeOf,ir=Object.prototype.hasOwnProperty;var sr=(e,t)=>{for(var r in t)$e(e,r,{get:t[r],enumerable:!0})},io=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of or(t))!ir.call(e,i)&&i!==r&&$e(e,i,{get:()=>t[i],enumerable:!(o=tr(t,i))||o.enumerable});return e};var R=(e,t,r)=>(r=e!=null?er(rr(e)):{},io(t||!e||!e.__esModule?$e(r,"default",{value:e,enumerable:!0}):r,e)),nr=e=>io($e({},"__esModule",{value:!0}),e);var Gr={};sr(Gr,{apply:()=>jr,inject:()=>Tr});module.exports=nr(Gr);var a=R(require("react"),1);var yt=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
2
+ var nr=Object.create;var Ze=Object.defineProperty;var ar=Object.getOwnPropertyDescriptor;var lr=Object.getOwnPropertyNames;var cr=Object.getPrototypeOf,dr=Object.prototype.hasOwnProperty;var pr=(e,t)=>{for(var r in t)Ze(e,r,{get:t[r],enumerable:!0})},lo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of lr(t))!dr.call(e,i)&&i!==r&&Ze(e,i,{get:()=>t[i],enumerable:!(o=ar(t,i))||o.enumerable});return e};var ee=(e,t,r)=>(r=e!=null?nr(cr(e)):{},lo(t||!e||!e.__esModule?Ze(r,"default",{value:e,enumerable:!0}):r,e)),ur=e=>lo(Ze({},"__esModule",{value:!0}),e);var Wr={};pr(Wr,{apply:()=>Ir,inject:()=>Jr});module.exports=ur(Wr);var a=ee(require("react"),1);var kt=`.vcs-root .vcs-discovery{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%}
3
3
  .vcs-root .vcs-discovery input{min-width:160px;max-width:100%;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-base);padding:6px 9px}
4
4
  .vcs-root .vcs-discovery span{font-size:12px;color:var(--dsw-alias-label-secondary)}
5
5
  .vcs-root .vcs-mode{display:flex;align-items:center;gap:6px}
@@ -92,6 +92,6 @@ var er=Object.create;var $e=Object.defineProperty;var tr=Object.getOwnPropertyDe
92
92
  .vcs-root .vcs-toolbar{gap:6px}
93
93
  .vcs-root .vcs-title{font-size:16px}
94
94
  }
95
- `;function so(e,t){return async(r,o,i)=>{let n=await e.rpc.call("/vcs-rpc",r,o,i);if(!n.ok){let c=new Error(n.error?.message||String(n.error||t()));throw c.code=n.error?.code,c}return n.value}}function bt(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let t=0,r=[];function o(){for(;t<e&&r.length;){let i=r.shift();if(i.signal?.removeEventListener("abort",i.abort),i.signal?.aborted){i.reject(new Error("Aborted"));continue}t++,Promise.resolve().then(()=>{if(i.signal?.aborted)throw new Error("Aborted");return i.run()}).then(i.resolve,i.reject).finally(()=>{t--,o()})}}return(i,n)=>new Promise((c,f)=>{let l={run:i,signal:n,resolve:c,reject:f,abort:null};if(l.abort=()=>{let s=r.indexOf(l);s>=0&&(r.splice(s,1),f(new Error("Aborted")))},n?.aborted){f(new Error("Aborted"));return}n?.addEventListener("abort",l.abort,{once:!0}),r.push(l),o()})}var te=R(require("react"),1);function no(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function ao(e="",t=""){let r=no(e),o=no(t),i=0;for(;i<r.length&&i<o.length&&r[i]===o[i];)i++;let n=0;for(;n<r.length-i&&n<o.length-i&&r[r.length-n-1]===o[o.length-n-1];)n++;let c=r.length-n,f=o.length-n,l=c-i,s=f-i,p=l&&s?(l+1)*(s+1):0,m=p>2e5,N=[],g=0;function H(u,x){g++,!(N.length>=2e3)&&N.push({left:u===null?null:{number:u+1,text:r[u]},right:x===null?null:{number:x+1,text:o[x]},kind:u===null?"insert":x===null?"delete":r[u]===o[x]?"equal":"replace"})}for(let u=0;u<i;u++)H(u,u);if(m||!l||!s)for(let u=0;u<Math.max(l,s);u++)H(u<l?i+u:null,u<s?i+u:null);else{let u=s+1,x=new Uint32Array(p);for(let h=l-1;h>=0;h--)for(let w=s-1;w>=0;w--)x[h*u+w]=r[i+h]===o[i+w]?x[(h+1)*u+w+1]+1:Math.max(x[(h+1)*u+w],x[h*u+w+1]);let b=0,y=0;for(;b<l||y<s;)b<l&&y<s&&r[i+b]===o[i+y]?H(i+b++,i+y++):b<l&&(y===s||x[(b+1)*u+y]>=x[b*u+y+1])?H(i+b++,null):H(null,i+y++)}for(let u=0;u<n;u++)H(c+u,f+u);return{rows:N,approximate:m,truncated:g>N.length,totalRows:g,omittedRows:g-N.length,leftLineCount:r.length,rightLineCount:o.length,lcsCells:m?0:p}}var dr={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."},xt={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},cr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},pr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},ur={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function je({comparison:e,labels:t={}}){let r=e?.left?.text??"",o=e?.right?.text??"",i=(0,te.useMemo)(()=>ao(r,o),[r,o]),n=f=>t[f]??dr[f],c=(f,l,s)=>{let p=f&&s!=="equal";return te.default.createElement("td",{style:{...xt,background:p?l==="left"?"#d6454520":"#259b4920":void 0}},te.default.createElement("div",{style:cr},te.default.createElement("span",{style:pr},f?.number??""),te.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},p?l==="left"?"\u2212":"+":""),te.default.createElement("pre",{style:ur},f?.text??"")))};return te.default.createElement("section",{className:"vcs-text-comparison","aria-label":n("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},i.approximate&&te.default.createElement("div",{role:"status",style:{padding:8}},n("approximate")),i.truncated&&te.default.createElement("div",{role:"status",style:{padding:8}},n("truncated")," (",2e3," / ",i.totalRows,")"),te.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},te.default.createElement("thead",null,te.default.createElement("tr",null,te.default.createElement("th",{scope:"col",style:{...xt,padding:8,overflowWrap:"anywhere"}},e?.left?.label||n("before")),te.default.createElement("th",{scope:"col",style:{...xt,padding:8,overflowWrap:"anywhere"}},e?.right?.label||n("after")))),te.default.createElement("tbody",null,i.rows.map((f,l)=>te.default.createElement("tr",{key:l,"data-kind":f.kind},c(f.left,"left",f.kind),c(f.right,"right",f.kind))))),!i.rows.length&&te.default.createElement("p",{style:{padding:8}},n("empty")))}var I=R(require("react"),1);function lo(e,{width:t,height:r,signal:o,timeoutMs:i=1e4,createURL:n=l=>URL.createObjectURL(l),revokeURL:c=l=>URL.revokeObjectURL(l),createImage:f=()=>new Image}={}){return new Promise((l,s)=>{if(o?.aborted){s(o.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(t)||!Number.isInteger(r)||t<1||r<1||t>8192||r>8192||t*r>16e6||!Number.isFinite(i)||i<=0){s(new Error("Invalid image preview"));return}let p,m,N,g=!1,H=!1,u=()=>{H||(H=!0,m&&(m.src=""),p&&c(p))},x=()=>{clearTimeout(N),o?.removeEventListener("abort",y)},b=h=>{g||(g=!0,x(),u(),s(h))},y=()=>b(o.reason||new Error("Image cancelled"));try{p=n(e),m=f(),o?.addEventListener("abort",y,{once:!0}),N=setTimeout(()=>b(new Error("Image decode timed out")),i),m.src=p,Promise.resolve(m.decode()).then(()=>{if(!g){if(o?.aborted){y();return}if(m.naturalWidth!==t||m.naturalHeight!==r){b(new Error("Image dimensions mismatch"));return}g=!0,x(),l({url:p,dispose:u})}},b)}catch(h){b(h)}})}function fr({side:e,sessionId:t,repositoryId:r,commit:o,parentIndex:i,base:n,target:c,workspace:f=!1,mode:l,id:s,rpc:p,t:m,onRediscover:N}){let[g,H]=(0,I.useState)(null),[u,x]=(0,I.useState)(""),[b,y]=(0,I.useState)(0);return(0,I.useEffect)(()=>{let h=new AbortController,w;return H(null),x(""),(async()=>{let E=await p(f?"vcs/workspace-image":n?"vcs/revision-image":"vcs/commit-image",f?{sessionId:t,repositoryId:r,mode:l,id:s,side:e}:n?{sessionId:t,repositoryId:r,base:n,target:c,id:s,side:e}:{sessionId:t,repositoryId:r,commit:o,parentIndex:i,id:s,side:e},h.signal);if(h.signal.aborted)return;if(E.absent){H(E);return}if(!["image/png","image/jpeg","image/webp"].includes(E.mime)||typeof E.base64!="string"||E.base64.length>2796204||!Number.isInteger(E.bytes)||E.bytes<1||E.bytes>2097152)throw Error(m("imageInvalid"));let S=atob(E.base64);if(S.length!==E.bytes)throw Error(m("imageInvalid"));let C=new Blob([Uint8Array.from(S,v=>v.charCodeAt(0))],{type:E.mime});if(w=await lo(C,{width:E.width,height:E.height,signal:h.signal}),h.signal.aborted){w.dispose();return}H({...E,url:w.url})})().catch(E=>{h.signal.aborted||(x(E.message),E.code==="vcs/rediscover-required"&&N())}),()=>{h.abort(),w?.dispose()}},[e,t,r,o,i,n,c,f,l,s,b]),I.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":m(e==="left"?"imageBefore":"imageAfter")},I.default.createElement("h5",null,m(e==="left"?"imageBefore":"imageAfter")),u?I.default.createElement("p",{role:"alert"},u," ",I.default.createElement("button",{onClick:()=>y(h=>h+1)},m("retry"))):g?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,I.default.createElement("code",null,g.commit)," \xB7 ",g.path),g.absent?I.default.createElement("p",null,m("imageAbsent")):I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,g.mime,g.encoding?" \xB7 "+g.encoding:""," \xB7 ",g.width," \xD7 ",g.height," \xB7 ",g.bytes," B"),I.default.createElement("img",{src:g.url,alt:g.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),g.metadataStripped&&I.default.createElement("p",null,m("imageMetadata")))):I.default.createElement("p",{role:"status"},m("loading")))}function Ge(e){let[t,r]=(0,I.useState)(!1);return I.default.createElement("div",null,I.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("imageCompare")),t&&I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,e.t("imageScope")),I.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(o=>I.default.createElement(fr,{key:o,...e,side:o})))))}var U=R(require("react"),1);var Z=R(require("react"),1);function Qe(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var ue=require("react");function co({load:e,node:t,comparison:r,key:o,single:i=!1,onReady:n=()=>{},onError:c=()=>{},onComputation:f=()=>{}}){let l=new AbortController,s,p=!1,m=()=>{let g=s;s=void 0,g?.dispose()};return{done:Promise.resolve().then(()=>(l.signal.throwIfAborted(),e(l.signal))).then(g=>{p||(s=g.createDiff(t,{single:i,onComputation:H=>{p||f(H)}}),s.setContent(r,o),p||n(s))}).catch(g=>{try{m()}finally{p||c(g)}}),dispose(){p||(p=!0,l.abort(),m())}}}async function Xe(e,{signal:t,fetcher:r=fetch,importer:o=i=>import(i)}={}){let i=await r(e,{credentials:"same-origin",cache:"no-cache",signal:t});if(!i.ok)throw new Error("Editor resource HTTP "+i.status+" ("+e+"). "+(i.status===401?"Refresh the authenticated DSH page.":i.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let n=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(n))throw new Error("Editor resource returned "+(n||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),t?.throwIfAborted(),o(e)}var Ze="0.3.92";function po({comparison:e,identity:t,enabled:r,single:o,line:i,sideBySide:n,ignoreWhitespace:c,wrap:f}){let l=(0,ue.useRef)(null),s=(0,ue.useRef)(null),[p,m]=(0,ue.useState)(!1),[N,g]=(0,ue.useState)(""),[H,u]=(0,ue.useState)("pending");return(0,ue.useEffect)(()=>{if(m(!1),u("pending"),g(""),!r)return;let x=h=>new URL("vcs-assets/"+h,document.baseURI).href,b=document.createElement("link");b.rel="stylesheet",b.href=x("editor.css"),document.head.appendChild(b);let y=co({node:l.current,comparison:e,key:t,single:o,load:h=>Xe(x("editor.js")+"?v="+encodeURIComponent(Ze)+"&retry=0",{signal:h}),onReady:h=>{s.current=h,m(!0)},onError:h=>g(h.message),onComputation:u});return()=>{s.current=null;try{y.dispose()}finally{b.remove()}}},[r,e,t,o]),(0,ue.useEffect)(()=>{p&&o&&i&&s.current?.revealLine(i)},[p,o,i]),(0,ue.useEffect)(()=>{p&&s.current?.options({sideBySide:n,ignoreWhitespace:c,wrap:f})},[p,n,c,f]),{node:l,viewer:s,ready:p,error:N,computation:H}}function fe({comparison:e,identity:t,t:r,single:o=!1,line:i=null}){let[n,c]=(0,Z.useState)(!0),[f,l]=(0,Z.useState)(!1),[s,p]=(0,Z.useState)(!1),[m,N]=(0,Z.useState)(!0),{node:g,viewer:H,ready:u,error:x,computation:b}=po({comparison:e,identity:t,enabled:m,single:o,line:i,sideBySide:n,ignoreWhitespace:f,wrap:s});return Z.default.createElement("div",null,Z.default.createElement("button",{"aria-pressed":m,onClick:()=>N(y=>!y)},r(m?"historyBasic":"historyAdvanced")),u&&!o&&Z.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},Z.default.createElement("button",{"aria-pressed":n,onClick:()=>c(y=>!y)},r(n?"side":"inline")),Z.default.createElement("label",null,Z.default.createElement("input",{type:"checkbox",checked:f,onChange:y=>l(y.target.checked)}),r("whitespace")),Z.default.createElement("label",null,Z.default.createElement("input",{type:"checkbox",checked:s,onChange:y=>p(y.target.checked)}),r("wrap")),Z.default.createElement("button",{onClick:()=>H.current?.navigate("previous")},r("previous")),Z.default.createElement("button",{onClick:()=>H.current?.navigate("next")},r("next"))),m&&!u&&!x&&Z.default.createElement("p",{role:"status"},r("loading")),e.large&&!o&&u&&Z.default.createElement("p",{role:"status"},r(b==="complete"?"diffComplete":b==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!u&&Z.default.createElement("p",{role:"status"},r("largeFallback")),x&&Z.default.createElement("p",{role:"status"},r("fallback")," ",x),Z.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},Z.default.createElement("div",{ref:g,style:{position:"absolute",inset:0,visibility:u?"visible":"hidden"},"aria-hidden":!u}),!u&&Z.default.createElement(je,{comparison:e,labels:Qe(r)})))}function wt({sessionId:e,repositoryId:t,mode:r,id:o,rpc:i,t:n,onRediscover:c}){let[f,l]=(0,U.useState)(null),[s,p]=(0,U.useState)(""),[m,N]=(0,U.useState)(0),[g,H]=(0,U.useState)(1),[u,x]=(0,U.useState)(3);(0,U.useEffect)(()=>{let v=new AbortController;return l(null),p(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:r,id:o},v.signal).then(J=>{v.signal.aborted||l(J)}).catch(J=>{v.signal.aborted||(p(J.message),J.code==="vcs/rediscover-required"&&c())}),()=>v.abort()},[e,t,r,o,m]);let b={1:n("conflictStage1"),2:n("conflictStage2"),3:n("conflictStage3")},y=n("conflictStageMissing"),h=b[g],w=b[u],E=(0,U.useMemo)(()=>{if(!f)return null;let v=k=>f.stages.find(X=>X.stage===k),J=k=>{let X=v(k);return!X||!X.present?{text:"",label:b[k]}:{text:X.text,label:b[k],...X.binary?{binary:!0}:{},...X.encoding?{encoding:X.encoding}:{},...X.notice?{notice:X.notice}:{}}},ve=J(g),G=J(u),oe=[ve.notice,G.notice].filter(Boolean);return v(g)?.present&&v(u)?.present||oe.push(y),{path:f.path,left:ve,right:G,binary:!!(ve.binary||G.binary),...oe.length?{notice:[...new Set(oe)].join(" \xB7 ")}:{}}},[f,g,u,h,w,y]);if(s)return U.default.createElement("section",{"aria-label":n("conflictStages")},U.default.createElement("h4",null,n("conflictStages")),U.default.createElement("p",{role:"alert"},s," ",U.default.createElement("button",{onClick:()=>N(v=>v+1)},n("retry"))));if(!f||!E)return U.default.createElement("section",{"aria-label":n("conflictStages")},U.default.createElement("h4",null,n("conflictStages")),U.default.createElement("p",{role:"status"},n("loading")));let S=v=>f.stages.find(J=>J.stage===v),C=E.binary&&!E.left.text&&!E.right.text;return U.default.createElement("section",{"aria-label":n("conflictStages")},U.default.createElement("h4",null,n("conflictStages")),U.default.createElement("p",null,n("conflictStagesScope")),U.default.createElement("ul",null,[1,2,3].map(v=>U.default.createElement("li",{key:v},U.default.createElement("code",null,b[v])," \xB7 ",S(v)?.present?n("conflictStagePresent"):n("conflictStageAbsent"),S(v)?.kind==="gitlink"&&" \xB7 "+n("conflictStageGitlink"),S(v)?.kind==="symlink"&&" \xB7 "+n("conflictStageSymlink"),S(v)?.present&&S(v)?.notice&&" \xB7 "+S(v).notice))),U.default.createElement("label",null,n("conflictStageLeft")," ",U.default.createElement("select",{"aria-label":n("conflictStageLeft"),value:g,onChange:v=>H(Number(v.target.value))},[1,2,3].map(v=>U.default.createElement("option",{key:v,value:v},b[v])))),U.default.createElement("label",null,n("conflictStageRight")," ",U.default.createElement("select",{"aria-label":n("conflictStageRight"),value:u,onChange:v=>x(Number(v.target.value))},[1,2,3].map(v=>U.default.createElement("option",{key:v,value:v},b[v])))),E.notice&&U.default.createElement("p",{role:"status"},E.notice),C?U.default.createElement("p",{role:"status"},n("binary")):U.default.createElement(fe,{key:JSON.stringify([o,g,u,f.snapshot]),comparison:E,identity:JSON.stringify([e,t,r,o,g,u,f.snapshot]),t:n}))}var uo=R(require("react"),1);function St({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let r=e.checkout,o=[];e.pointerMoved&&o.push(t("submodulePointerMoved")),(e.dirty||e.untracked)&&o.push(t("submoduleDirty"));let i=[e.recorded+" \xB7 "+t("submoduleCheckout_"+r),...o].join(" \xB7 ");return uo.default.createElement("span",{className:"vcs-submodule","data-checkout":r,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:i},t("submoduleBadge")," ",e.recorded.slice(0,10),o.length?` \xB7 ${o.join(", ")}`:"")}var Y=R(require("react"),1);function kt(e){return Y.default.createElement(hr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function hr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,c]=(0,Y.useState)(!1),[f,l]=(0,Y.useState)(null),[s,p]=(0,Y.useState)(""),[m,N]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{if(!n)return;let g=new AbortController;return l(null),p(""),r("vcs/svn-identity",{sessionId:e,repositoryId:t},g.signal).then(H=>{g.signal.aborted||l(H)}).catch(H=>{g.signal.aborted||(p(H.message),H.code==="vcs/rediscover-required"&&i())}),()=>g.abort()},[n,e,t,m]),Y.default.createElement("section",null,Y.default.createElement("button",{"aria-expanded":n,onClick:()=>c(g=>!g)},o("svnIdentity")),n&&Y.default.createElement(Y.default.Fragment,null,Y.default.createElement("p",null,o("svnOfflineIdentity")),s?Y.default.createElement("p",{role:"alert"},s," ",Y.default.createElement("button",{onClick:()=>N(g=>g+1)},o("retry"))):f?Y.default.createElement(Y.default.Fragment,null,Y.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(g=>Y.default.createElement(Y.default.Fragment,{key:g},Y.default.createElement("dt",null,g),Y.default.createElement("dd",null,Y.default.createElement("code",null,f[g]))))),Y.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))):Y.default.createElement("p",{role:"status"},o("loading"))))}function Re(e,t,{now:r=Date.now,schedule:o=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=r()||e-r()>3e5)throw Error("Invalid SVN consent expiry");let n=!0,c=o(()=>{n&&(n=!1,t())},e-r());return()=>{n&&(n=!1,i(c))}}function fo(e,t=Date.now()){if(!e||typeof e.token!="string"||!/^[a-f0-9]{64}$/.test(e.token)||typeof e.snapshot!="string"||!/^(0|[1-9][0-9]*)$/.test(e.snapshot)||BigInt(e.snapshot)>9223372036854775807n||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=t||e.expiresAt-t>3e5)throw Error("Invalid SVN consent response");return e}var ee=R(require("react"),1);var V=R(require("react"),1);function Ct(e){return V.default.createElement(gr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function gr({sessionId:e,repositoryId:t,rpc:r,t:o,onApproved:i,onRediscover:n}){let[c,f]=(0,V.useState)(!1),[l,s]=(0,V.useState)(null),[p,m]=(0,V.useState)(!1),[N,g]=(0,V.useState)(""),[H,u]=(0,V.useState)(!1),[x,b]=(0,V.useState)(0);(0,V.useEffect)(()=>{if(!c)return;let w=new AbortController;return s(null),m(!1),g(""),u(!0),r("vcs/svn-describe",{sessionId:e,repositoryId:t},w.signal).then(E=>{w.signal.aborted||s(E)}).catch(E=>{w.signal.aborted||(g(E.message),E.code==="vcs/rediscover-required"&&n())}).finally(()=>{w.signal.aborted||u(!1)}),()=>w.abort()},[c,e,t,x]);let[y,h]=(0,V.useState)(0);return(0,V.useEffect)(()=>{if(!c||!l||l.expiresAt===void 0)return;let w=()=>{s(null),m(!1),h(0),u(!1),g(o("svnOfferExpired"))};try{return Re(l.expiresAt,w)}catch{w()}},[c,l]),(0,V.useEffect)(()=>{if(!y||!c||!l)return;let w=new AbortController;return u(!0),g(""),r("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:l.offer,explicit:!0},w.signal).then(E=>{w.signal.aborted||i(E)}).catch(E=>{w.signal.aborted||(g(E.message),m(!1),E.code==="vcs/rediscover-required"&&n())}).finally(()=>{w.signal.aborted||u(!1)}),()=>w.abort()},[y,c,l]),V.default.createElement("section",null,V.default.createElement("button",{"aria-expanded":c,onClick:()=>{h(0),f(w=>!w)}},o("svnConsentReview")),c&&V.default.createElement(V.default.Fragment,null,V.default.createElement("p",null,o("svnConsentScope")),N&&V.default.createElement("p",{role:"alert"},N," ",V.default.createElement("button",{disabled:H,onClick:()=>{h(0),b(w=>w+1)}},o("retry"))),l&&V.default.createElement(V.default.Fragment,null,V.default.createElement("dl",null,["origin","root","uuid","scope"].map(w=>V.default.createElement(V.default.Fragment,{key:w},V.default.createElement("dt",null,w),V.default.createElement("dd",null,V.default.createElement("code",null,l[w]))))),l.remoteEnabled?V.default.createElement(V.default.Fragment,null,V.default.createElement("label",null,V.default.createElement("input",{type:"checkbox",checked:p,disabled:H,onChange:w=>m(w.target.checked)}),o("svnConsentExplicit")),V.default.createElement("button",{disabled:H||!p,onClick:()=>h(w=>w+1)},o("svnConsentApprove"))):V.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))),H&&V.default.createElement("p",{role:"status"},o("loading"))))}var A=R(require("react"),1);function mo(e,{since:t,until:r}={}){let o=c=>{if(c==null||c==="")return null;if(typeof c!="string")throw new Error("Invalid SVN history date bound.");let f=c.trim();if(!f)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(f))throw new Error("Invalid SVN history date bound.");return f.slice(0,10)},i=o(t),n=o(r);return!i&&!n?e:Array.isArray(e)?e.filter(c=>{let f=c&&typeof c.date=="string"?c.date.trim():"",l=/^\d{4}-\d{2}-\d{2}/.test(f)?f.slice(0,10):"";return!(!l||i&&l<i||n&&l>n)}):[]}function Nt(e){return A.default.createElement(vr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function vr({sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:c}){let[f,l]=(0,A.useState)(o),[s,p]=(0,A.useState)(null),[m,N]=(0,A.useState)(null),[g,H]=(0,A.useState)(""),[u,x]=(0,A.useState)(0),[b,y]=(0,A.useState)(""),[h,w]=(0,A.useState)("");(0,A.useEffect)(()=>{let C=new AbortController;return p(null),N(null),H(""),i("vcs/svn-log",{sessionId:e,repositoryId:t,token:r,snapshot:o,cursor:f,limit:50},C.signal).then(v=>{C.signal.aborted||p(v)}).catch(v=>{C.signal.aborted||(H(v.message),v.code==="vcs/rediscover-required"&&c())}),()=>C.abort()},[f,u]);let E=s?s.entries:[],S="";try{E=mo(s?s.entries:[],{since:b,until:h})}catch(C){S=C.message}return A.default.createElement("section",null,A.default.createElement("p",null,n("svnHistoryScope")," \xB7 r",o),A.default.createElement("p",null,n("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((C,v)=>A.default.createElement("label",{key:C},n(C)," ",A.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":n(C),value:v?h:b,onChange:J=>v?w(J.target.value):y(J.target.value)}))),S&&A.default.createElement("p",{role:"alert"},S),g?A.default.createElement("p",{role:"alert"},g," ",A.default.createElement("button",{onClick:()=>x(C=>C+1)},n("retry"))):s?A.default.createElement(A.default.Fragment,null,A.default.createElement("ol",null,E.map(C=>A.default.createElement("li",{key:C.revision},A.default.createElement("button",{onClick:()=>N(C.revision)},"r",C.revision," \xB7 ",C.message)))),!E.length&&A.default.createElement("p",{role:"status"},n("historyNoMatch")),s.nextRevision!==null&&A.default.createElement("button",{onClick:()=>l(s.nextRevision)},n("historyMore"))):A.default.createElement("p",{role:"status"},n("loading")),m&&A.default.createElement(yr,{key:m,sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:c,revision:m}))}function yr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:c,onRediscover:f}){let[l,s]=(0,A.useState)(null),[p,m]=(0,A.useState)(null),[N,g]=(0,A.useState)(""),[H,u]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let x=new AbortController;return s(null),m(null),g(""),n("vcs/svn-detail",{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i},x.signal).then(b=>{x.signal.aborted||s(b)}).catch(b=>{x.signal.aborted||(g(b.message),b.code==="vcs/rediscover-required"&&f())}),()=>x.abort()},[H]),A.default.createElement("section",null,N?A.default.createElement("p",{role:"alert"},N," ",A.default.createElement("button",{onClick:()=>u(x=>x+1)},c("retry"))):l?A.default.createElement(A.default.Fragment,null,A.default.createElement("p",null,l.message),l.changes.map(x=>A.default.createElement("div",{key:x.id},A.default.createElement("span",null,x.action," ",x.path),x.kind==="file"&&A.default.createElement(A.default.Fragment,null,A.default.createElement("button",{onClick:()=>m({id:x.id,mode:"compare"})},c("svnHistoricalDiff")),A.default.createElement("button",{onClick:()=>m({id:x.id,mode:"trace"})},c("fileHistory")),x.copyFromPath&&x.copyFromRevision&&A.default.createElement("button",{onClick:()=>m({id:x.id,mode:"copytrace"})},c("svnCopyHistory")," \xB7 ",x.copyFromPath," @r",x.copyFromRevision),x.copySourceOutsideScope&&A.default.createElement("span",null,c("svnCopyOutside")))))):A.default.createElement("p",{role:"status"},c("loading")),p&&A.default.createElement(br,{key:JSON.stringify(p),sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:c,onRediscover:f,...p}))}function br({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:c,onRediscover:f,id:l,mode:s}){let[p,m]=(0,A.useState)(null),[N,g]=(0,A.useState)(null),[H,u]=(0,A.useState)(""),[x,b]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let y=new AbortController;return m(null),u(""),n("vcs/svn-"+s,{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,id:l,...N===null?{}:{cursor:N}},y.signal).then(h=>{y.signal.aborted||m(h)}).catch(h=>{y.signal.aborted||(u(h.message),h.code==="vcs/rediscover-required"&&f())}),()=>y.abort()},[N,x]),H?A.default.createElement("p",{role:"alert"},H," ",A.default.createElement("button",{onClick:()=>b(y=>y+1)},c("retry"))):p?s==="compare"?p.binary?A.default.createElement("p",null,c("binary")):A.default.createElement(fe,{comparison:p,identity:JSON.stringify([e,t,o,i,l]),t:c}):A.default.createElement("section",null,A.default.createElement("p",null,c(s==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",p.path," \xB7 peg r",p.pegRevision),A.default.createElement("ol",null,p.entries.map(y=>A.default.createElement("li",{key:y.revision},"r",y.revision," \xB7 ",y.message))),p.nextRevision!==null&&A.default.createElement("button",{onClick:()=>g(p.nextRevision)},c("historyMore"))):A.default.createElement("p",{role:"status"},c("loading"))}function Et(e){return ee.default.createElement(xr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function xr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,c]=(0,ee.useState)(null),[f,l]=(0,ee.useState)(!1),[s,p]=(0,ee.useState)(""),[m,N]=(0,ee.useState)(0);(0,ee.useEffect)(()=>{if(n)return()=>{Promise.resolve().then(()=>r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token})).catch(()=>{})}},[n,e,t]),(0,ee.useEffect)(()=>{if(n)try{return Re(n.expiresAt,()=>{c(null),N(0),l(!1),p(o("svnExpired"))})}catch{c(null),p(o("svnExpired"))}},[n]),(0,ee.useEffect)(()=>{if(!m||!n)return;let u=new AbortController;return l(!0),p(""),r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token},u.signal).then(()=>{u.signal.aborted||c(null)}).catch(x=>{u.signal.aborted||(p(x.message),x.code==="vcs/rediscover-required"&&i())}).finally(()=>{u.signal.aborted||l(!1)}),()=>u.abort()},[m,n]);let g=u=>{try{fo(u),p(""),N(0),c(u)}catch(x){p(x.message)}},H=async(...u)=>{try{return await r(...u)}catch(x){throw x.code==="vcs/svn-consent-required"&&!u[2]?.aborted&&(c(null),N(0),p(o("svnExpired"))),x}};return ee.default.createElement("section",null,!n&&s&&ee.default.createElement("p",{role:"status"},s),n?ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("p",null,o("svnGrantScope")),ee.default.createElement("button",{disabled:f,onClick:()=>N(u=>u+1)},o("svnRevoke")),s&&ee.default.createElement("p",{role:"alert"},s),!f&&ee.default.createElement(Nt,{sessionId:e,repositoryId:t,t:o,onRediscover:i,rpc:H,token:n.token,snapshot:n.snapshot})):ee.default.createElement(Ct,{sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i,onApproved:g}))}var L=R(require("react"),1);function ho(e){let t=new Map;for(let r of e){let o=t.get(r.commit);o||(o={names:[],hidden:0},t.set(r.commit,o)),o.names.length<3?o.names.push(r.name):o.hidden++}return t}var j=R(require("react"),1);var T=R(require("react"),1);var W=R(require("react"),1);var z=R(require("react"),1);function Ht(e){return z.default.createElement(wr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function wr({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:c}){let[f,l]=(0,z.useState)(!1),[s,p]=(0,z.useState)([0]),[m,N]=(0,z.useState)(null),[g,H]=(0,z.useState)(""),[u,x]=(0,z.useState)(0),b=s.at(-1);(0,z.useEffect)(()=>{if(!f)return;let h=new AbortController;return N(null),H(""),i("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:r,path:o,offset:b},h.signal).then(w=>{h.signal.aborted||N(w)}).catch(w=>{h.signal.aborted||(H(w.message),w.code==="vcs/rediscover-required"&&c())}),()=>h.abort()},[f,b,e,t,r,o,u]);let y=(0,z.useMemo)(()=>m?{path:o,left:{label:r,text:m.text},right:{label:r,text:m.text}}:null,[m,o,r]);return z.default.createElement("section",null,z.default.createElement("button",{"aria-expanded":f,onClick:()=>l(h=>!h)},n("segments")),f&&z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,n("segmentScope")),g?z.default.createElement("p",{role:"alert"},g," ",z.default.createElement("button",{onClick:()=>x(h=>h+1)},n("retry"))):m?z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,n("segmentBytes"),": ",m.offset,"\u2013",m.endOffset," / ",m.totalBytes," \xB7 ",z.default.createElement("code",null,m.oid)),z.default.createElement("button",{disabled:s.length===1,onClick:()=>p(h=>h.slice(0,-1))},n("previous")),z.default.createElement("button",{disabled:m.nextOffset===null,onClick:()=>p(h=>[...h,m.nextOffset])},n("next")),z.default.createElement(fe,{single:!0,comparison:y,identity:JSON.stringify([e,t,r,o,b]),t:n})):z.default.createElement("p",{role:"status"},n("loading"))))}var M=R(require("react"),1);function Sr({sessionId:e,repositoryId:t,commit:r,path:o,follow:i,since:n,until:c,rpc:f,t:l,onRediscover:s,onSelectCommit:p}){let[m,N]=(0,M.useState)({commits:[],nextOffset:null}),[g,H]=(0,M.useState)(0),[u,x]=(0,M.useState)(0),[b,y]=(0,M.useState)(!0),[h,w]=(0,M.useState)("");(0,M.useEffect)(()=>{let S=new AbortController;return y(!0),w(""),f("vcs/tree-history",{sessionId:e,repositoryId:t,commit:r,path:o,offset:g,limit:50,follow:i,...n?{since:n}:{},...c?{until:c}:{}},S.signal).then(C=>{S.signal.aborted||N(v=>({...C,commits:g?[...v.commits,...C.commits]:C.commits}))}).catch(C=>{S.signal.aborted||(w(C.message),C.code==="vcs/rediscover-required"&&s())}).finally(()=>{S.signal.aborted||y(!1)}),()=>S.abort()},[e,t,r,o,g,u,i,n,c]);let E=S=>l(S.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":S.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":S.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return M.default.createElement("section",{"aria-label":l("pathHistory"),"aria-busy":b},M.default.createElement("p",null,l("pathHistoryScope")),M.default.createElement("p",{style:{overflowWrap:"anywhere"}},M.default.createElement("code",null,m.path||o)," \xB7 ",M.default.createElement("code",null,r),m.followsRenames!==void 0&&M.default.createElement(M.default.Fragment,null," \xB7 ",l(m.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),M.default.createElement("ol",null,m.commits.map(S=>M.default.createElement("li",{key:S.id},M.default.createElement("code",{title:S.id},S.id.slice(0,10))," \xB7 ",p?M.default.createElement("button",{onClick:()=>p(S.id,S.path||o)},S.subject):S.subject,M.default.createElement("div",null,S.boundary&&M.default.createElement("span",null,E(S)," "),S.path&&M.default.createElement("code",null,S.oldPath?S.oldPath+" \u2192 ":"",S.path)," ",S.similarity!==void 0&&M.default.createElement("span",null,l("fileHistorySimilarity"),": ",S.similarity,"% \xB7 "),S.author," \xB7 ",M.default.createElement("time",{dateTime:S.date},S.date))))),b&&M.default.createElement("p",{role:"status"},l("loading")),h&&M.default.createElement("p",{role:"alert"},h," ",M.default.createElement("button",{onClick:()=>x(S=>S+1)},l("retry"))),!b&&!h&&!m.commits.length&&M.default.createElement("p",null,l("historyEmpty")),m.truncated&&M.default.createElement("p",{role:"status"},l("historyLimit")),!h&&m.nextOffset!==null&&M.default.createElement("button",{disabled:b,onClick:()=>H(m.nextOffset)},l("historyMore")))}function Lt(e){let[t,r]=(0,M.useState)(!1),[o,i]=(0,M.useState)(!1),[n,c]=(0,M.useState)(""),[f,l]=(0,M.useState)("");return M.default.createElement("div",null,M.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("pathHistory")),t&&M.default.createElement(M.default.Fragment,null,M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),M.default.createElement("p",null,e.t("pathHistoryFollowScope")),M.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((s,p)=>M.default.createElement("label",{key:s},e.t(s)," ",M.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(s),value:p?f:n,onChange:m=>p?l(m.target.value):c(m.target.value)}))),M.default.createElement(Sr,{key:String(o),follow:o,since:n.trim()||null,until:f.trim()||null,...e})))}function Ve({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:c,onClose:f,onSelectCommit:l,line:s=null}){let[p,m]=(0,W.useState)(null),[N,g]=(0,W.useState)(""),[H,u]=(0,W.useState)(0);(0,W.useEffect)(()=>{let b=new AbortController;return m(null),g(""),i("vcs/tree-file",{sessionId:e,repositoryId:t,commit:r,path:o},b.signal).then(y=>{b.signal.aborted||m(y)}).catch(y=>{b.signal.aborted||(g(y.message),y.code==="vcs/rediscover-required"&&c())}),()=>b.abort()},[e,t,r,o,H]);let x=(0,W.useMemo)(()=>p?{path:o,left:{label:r,text:p.text||""},right:{label:r,text:p.text||""}}:null,[p,o,r]);return W.default.createElement("section",{"aria-label":n("treePreview")},W.default.createElement("h4",null,o),W.default.createElement("button",{onClick:f},n("treeClose")),W.default.createElement("p",null,W.default.createElement("code",null,r)),N?W.default.createElement("p",{role:"alert"},N," ",W.default.createElement("button",{onClick:()=>u(b=>b+1)},n("retry"))):p?W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,W.default.createElement("code",null,p.oid)," \xB7 ",n("encoding"),": ",p.encoding||"\u2014"),s&&W.default.createElement("p",{role:"status"},n("blameOriginLine"),": ",s,!p.text||s>p.text.split(`
96
- `).length?" \xB7 "+n("blameUnmapped"):""),p.notice&&W.default.createElement("p",{role:"status"},p.notice),p.binary?W.default.createElement("p",null,n("binary")):p.text===""?W.default.createElement("p",null,n("treeEmpty")):W.default.createElement(fe,{single:!0,line:s,comparison:x,identity:JSON.stringify([e,t,r,o]),t:n})):W.default.createElement("p",{role:"status"},n("loading")),W.default.createElement(Ht,{sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:c}),W.default.createElement(Lt,{key:JSON.stringify([e,t,r,o]),sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:c,onSelectCommit:l}))}function go(e=""){let t=[{path:"",name:"/"}];if(e){let r="";for(let o of e.split("/"))r=r?r+"/"+o:o,t.push({path:r,name:o})}return t}function vo(e,t="",r=""){let o=t?t+"/":"",i=r.toLowerCase();return e.filter(n=>{let c=n.path.slice(o.length);return n.path.startsWith(o)&&c.length>0&&!c.includes("/")&&c.toLowerCase().includes(i)}).sort((n,c)=>+(c.type==="tree")-+(n.type==="tree")||(n.path<c.path?-1:n.path>c.path?1:0))}function kr({sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:c}){let[f,l]=(0,T.useState)(null),[s,p]=(0,T.useState)(""),[m,N]=(0,T.useState)(0),[g,H]=(0,T.useState)(""),[u,x]=(0,T.useState)(0),[b,y]=(0,T.useState)(""),[h,w]=(0,T.useState)(null);if((0,T.useEffect)(()=>{let v=new AbortController;return l(null),p(""),o("vcs/tree",{sessionId:e,repositoryId:t,commit:r},v.signal).then(J=>{v.signal.aborted||l(J)}).catch(J=>{v.signal.aborted||(p(J.message),J.code==="vcs/rediscover-required"&&n())}),()=>v.abort()},[e,t,r,m]),s)return T.default.createElement("p",{role:"alert"},s," ",T.default.createElement("button",{onClick:()=>N(v=>v+1)},i("retry")));if(!f)return T.default.createElement("p",{role:"status"},i("loading"));let E=g?g+"/":"",S=vo(f.entries,g,b),C=v=>{H(v),x(0),y(""),w(null)};return T.default.createElement("section",{"aria-label":i("historicalTree")},T.default.createElement("p",null,i("historicalTreeScope")),T.default.createElement("code",null,r),T.default.createElement("p",null,g||"/"," ",g&&T.default.createElement("button",{onClick:()=>C(g.includes("/")?g.slice(0,g.lastIndexOf("/")):"")},i("treeUp"))),T.default.createElement("nav",{"aria-label":i("treeBreadcrumbs")},go(g).map(v=>T.default.createElement(T.default.Fragment,{key:v.path},v.path&&" / ",v.path===g?T.default.createElement("span",{"aria-current":"location"},v.name):T.default.createElement("button",{onClick:()=>C(v.path)},v.name)))),T.default.createElement("label",null,i("treeSearch")," ",T.default.createElement("input",{"aria-label":i("treeSearch"),value:b,onChange:v=>{y(v.target.value),x(0),w(null)}})),T.default.createElement("p",null,S.length," ",i("treeEntries")),!S.length&&b&&T.default.createElement("p",{role:"status"},i("emptySearch")),T.default.createElement("ul",null,S.slice(u*100,u*100+100).map(v=>T.default.createElement("li",{key:v.path},v.type==="tree"?T.default.createElement("button",{onClick:()=>C(v.path)},v.path.slice(E.length),"/"):v.type==="blob"&&["100644","100755"].includes(v.mode)?T.default.createElement("button",{"aria-pressed":h===v.path,onClick:()=>w(v.path)},v.path.slice(E.length)):T.default.createElement("span",null,v.path.slice(E.length))," \xB7 ",T.default.createElement("code",null,v.mode," ",v.type," ",T.default.createElement("span",{title:v.oid},v.oid.slice(0,10)))))),u>0&&T.default.createElement("button",{onClick:()=>{x(v=>v-1),w(null)}},i("treePrevious")),(u+1)*100<S.length&&T.default.createElement("button",{onClick:()=>{x(v=>v+1),w(null)}},i("treeNext")),h&&T.default.createElement(Ve,{key:JSON.stringify([e,t,r,h]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:c,path:h,onClose:()=>w(null)}))}function At(e){return T.default.createElement(Cr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Cr(e){let[t,r]=(0,T.useState)(!1);return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historicalTree")),t&&T.default.createElement(kr,{...e}))}var K=R(require("react"),1);var O=R(require("react"),1);function Nr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,follow:n,since:c,until:f,rpc:l,t:s,onRediscover:p,onSelectCommit:m}){let[N,g]=(0,O.useState)({commits:[],nextOffset:null}),[H,u]=(0,O.useState)(0),[x,b]=(0,O.useState)(0),[y,h]=(0,O.useState)(!0),[w,E]=(0,O.useState)(""),S={...c?{since:c}:{},...f?{until:f}:{}};return(0,O.useEffect)(()=>{let C=new AbortController;return h(!0),E(""),l("vcs/file-history",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,offset:H,limit:50,follow:n,...S},C.signal).then(v=>{C.signal.aborted||g(J=>({...v,commits:H?[...J.commits,...v.commits]:v.commits}))}).catch(v=>{C.signal.aborted||(E(v.message),v.code==="vcs/rediscover-required"&&p())}).finally(()=>{C.signal.aborted||h(!1)}),()=>C.abort()},[e,t,r,o,i,H,x,n,c,f]),O.default.createElement("section",{"aria-label":s("fileHistory"),"aria-busy":y},O.default.createElement("p",null,s("fileHistoryScope")),O.default.createElement("p",{style:{overflowWrap:"anywhere"}},N.path," \xB7 ",O.default.createElement("code",null,r)),O.default.createElement("ol",null,N.commits.map(C=>O.default.createElement("li",{key:C.id},O.default.createElement("code",{title:C.id},C.id.slice(0,10))," \xB7 ",m?O.default.createElement("button",{onClick:()=>m(C.id,C.path||N.path)},C.subject):C.subject,O.default.createElement("div",null,C.boundary&&O.default.createElement("span",null,s(C.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":C.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":C.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),C.path&&O.default.createElement("code",null,C.oldPath?C.oldPath+" \u2192 ":"",C.path)," ",C.similarity!==void 0&&O.default.createElement("span",null,s("fileHistorySimilarity"),": ",C.similarity,"% \xB7 "),C.author," \xB7 ",O.default.createElement("time",{dateTime:C.date},C.date))))),y&&O.default.createElement("p",{role:"status"},s("loading")),w&&O.default.createElement("p",{role:"alert"},w," ",O.default.createElement("button",{onClick:()=>b(C=>C+1)},s("retry"))),!y&&!w&&!N.commits.length&&O.default.createElement("p",null,s("historyEmpty")),N.truncated&&O.default.createElement("p",{role:"status"},s("historyLimit")),!w&&N.nextOffset!==null&&O.default.createElement("button",{disabled:y,onClick:()=>u(N.nextOffset)},s("historyMore")))}function Pt(e){return O.default.createElement(Er,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Er(e){let[t,r]=(0,O.useState)(!1),[o,i]=(0,O.useState)(!1),[n,c]=(0,O.useState)(""),[f,l]=(0,O.useState)("");return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("fileHistory")),t&&O.default.createElement(O.default.Fragment,null,O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),O.default.createElement("p",null,e.t("fileHistoryFollowScope")),O.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((s,p)=>O.default.createElement("label",{key:s},e.t(s)," ",O.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(s),value:p?f:n,onChange:m=>p?l(m.target.value):c(m.target.value)}))),O.default.createElement(Nr,{key:String(o),follow:o,since:n.trim()||null,until:f.trim()||null,...e})))}var F=R(require("react"),1);function Hr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,rpc:n,t:c,onRediscover:f,onSelectCommit:l}){let[s,p]=(0,F.useState)(null),[m,N]=(0,F.useState)(""),[g,H]=(0,F.useState)(0),[u,x]=(0,F.useState)(1),[b,y]=(0,F.useState)(null);return(0,F.useEffect)(()=>{let h=new AbortController;return p(null),N(""),y(null),n("vcs/blame",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,startLine:u,lineLimit:500},h.signal).then(w=>{h.signal.aborted||p(w)}).catch(w=>{h.signal.aborted||(N(w.message),w.code==="vcs/rediscover-required"&&f())}),()=>h.abort()},[e,t,r,o,i,g,u]),m?F.default.createElement("p",{role:"alert"},m," ",F.default.createElement("button",{onClick:()=>H(h=>h+1)},c("retry"))):s?F.default.createElement("section",{"aria-label":c("blame")},F.default.createElement("p",null,c("blameScope")),l&&F.default.createElement("p",null,c("blameNavigation")),s.notice&&F.default.createElement("p",{role:"status"},s.notice),s.truncated&&F.default.createElement("p",{role:"status"},c("blameLimit")),!s.notice&&!s.lines.length&&F.default.createElement("p",null,c("blameEmpty")),!!s.lines.length&&F.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},F.default.createElement("table",null,F.default.createElement("thead",null,F.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(h=>F.default.createElement("th",{key:h,scope:"col"},c(h))))),F.default.createElement("tbody",null,s.lines.map(h=>F.default.createElement("tr",{key:h.line},F.default.createElement("th",{scope:"row"},h.line),F.default.createElement("td",null,l?F.default.createElement("button",{title:h.commit,onClick:()=>l(h.commit,h.path||null)},F.default.createElement("code",null,h.commit.slice(0,10))):F.default.createElement("code",{title:h.commit},h.commit.slice(0,10))),F.default.createElement("td",null,h.author),F.default.createElement("td",null,h.summary),F.default.createElement("td",null,F.default.createElement("pre",{style:{margin:0}},h.text),h.path&&h.originalLine?F.default.createElement("button",{onClick:()=>y(h)},c("blameOriginLine"),": ",h.path,":",h.originalLine):F.default.createElement("span",null,c("blameUnmapped")))))))),F.default.createElement("p",null,s.startLine||u,"\u2013",s.lines.at(-1)?.line||u," / ",s.totalLines??"\u2014"),F.default.createElement("button",{disabled:u===1,onClick:()=>x(Math.max(1,u-500))},c("blamePrevious")),F.default.createElement("button",{disabled:s.nextLine==null,onClick:()=>x(s.nextLine)},c("blameNext")),b&&F.default.createElement(Ve,{key:JSON.stringify([b.commit,b.path,b.originalLine]),sessionId:e,repositoryId:t,rpc:n,t:c,onRediscover:f,onSelectCommit:l,commit:b.commit,path:b.path,line:b.originalLine,onClose:()=>y(null)})):F.default.createElement("p",{role:"status"},c("loading"))}function Bt(e){let[t,r]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("blame")),t&&F.default.createElement(Hr,{...e}))}function Ue(e){return K.default.createElement(Lr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function Lr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,base:i,target:n,id:c,rpc:f,t:l,onRediscover:s,onSelectCommit:p}){let[m,N]=(0,K.useState)(null),[g,H]=(0,K.useState)(""),[u,x]=(0,K.useState)(0),[b,y]=(0,K.useState)(!1);return(0,K.useEffect)(()=>{let h=new AbortController;return N(null),H(""),f(i?"vcs/revision-compare":"vcs/commit-compare",i?{sessionId:e,repositoryId:t,base:i,target:n,id:c,...b?{large:!0}:{}}:{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:c,...b?{large:!0}:{}},h.signal).then(w=>{h.signal.aborted||N(w)}).catch(w=>{h.signal.aborted||(H(w.message),w.code==="vcs/rediscover-required"&&s())}),()=>h.abort()},[e,t,r,o,i,n,c,u,b]),g?K.default.createElement("p",{role:"alert"},g," ",K.default.createElement("button",{onClick:()=>x(h=>h+1)},l("retry")),b&&K.default.createElement("button",{onClick:()=>y(!1)},l("largeClose"))):m?K.default.createElement("section",null,K.default.createElement("h4",null,m.path),K.default.createElement("p",null,m.left.label," \u2194 ",m.right.label),m.notice&&K.default.createElement("p",{role:"status"},m.notice),b?K.default.createElement("p",null,l("largeScope")," ",K.default.createElement("button",{onClick:()=>y(!1)},l("largeClose"))):m.notice?.includes("2 MiB")&&K.default.createElement("p",null,l("largeScope")," ",K.default.createElement("button",{onClick:()=>y(!0)},l("largeLoad"))),m.binary?K.default.createElement("p",null,l("binary")):K.default.createElement(fe,{comparison:m,identity:JSON.stringify(i?[e,t,i,n,c]:[e,t,r,o,c]),t:l}),r&&!i&&K.default.createElement(Pt,{onSelectCommit:p,key:"file-history:"+JSON.stringify([e,t,r,o,c]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:c,rpc:f,t:l,onRediscover:s}),r&&!i&&K.default.createElement(Bt,{onSelectCommit:p,key:"blame:"+JSON.stringify([e,t,r,o,c]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:c,rpc:f,t:l,onRediscover:s}),(r||i)&&K.default.createElement(Ge,{key:"image:"+JSON.stringify([e,t,r,o,i,n,c]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,base:i,target:n,id:c,rpc:f,t:l,onRediscover:s})):K.default.createElement("p",{role:"status"},l("loading"),b&&K.default.createElement("button",{onClick:()=>y(!1)},l("largeClose")))}function yo(e,t){if(typeof t!="string"||!t)return null;let r=e.filter(o=>o.path===t);return r.length===1&&typeof r[0].id=="string"&&r[0].id?r[0].id:null}function bo(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.id,o.author,o.subject].some(i=>i?.toLowerCase().includes(r))):e}function et(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.path,o.oldPath].some(i=>i?.toLowerCase().includes(r))):e}function Dt(e){return j.default.createElement(Ar,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Ar({sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:c,initialPath:f}){let l=(0,j.useRef)(!0),[s,p]=(0,j.useState)(null),[m,N]=(0,j.useState)(""),[g,H]=(0,j.useState)(0),[u,x]=(0,j.useState)(null),[b,y]=(0,j.useState)(""),[h,w]=(0,j.useState)(0);if((0,j.useEffect)(()=>{let S=new AbortController;return x(null),y(""),o("vcs/commit",{sessionId:e,repositoryId:t,commit:r,parentIndex:g},S.signal).then(C=>{S.signal.aborted||(x(C),l.current&&(l.current=!1,p(yo(C.changes,f))))}).catch(C=>{S.signal.aborted||(y(C.message),C.code==="vcs/rediscover-required"&&n())}),()=>S.abort()},[e,t,r,g,h]),b)return j.default.createElement("p",{role:"alert"},b," ",j.default.createElement("button",{onClick:()=>w(S=>S+1)},i("retry")));if(!u)return j.default.createElement("p",{role:"status"},i("loading"));let E=et(u.changes,m);return j.default.createElement("section",{"aria-label":i("commitDetails")},j.default.createElement("h3",null,u.subject),j.default.createElement("code",null,u.id),j.default.createElement("p",null,u.author," \xB7 ",u.date),u.signature?.signed===!0&&j.default.createElement("p",null,j.default.createElement("span",{title:i("commitSignatureUnverified")},i("commitSigned",{format:u.signature.format}))),u.messageTruncated&&j.default.createElement("p",{role:"status"},i("commitMessageLimit")),u.message&&j.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},u.message),u.parents.length>1&&j.default.createElement("label",null,i("commitParent")," ",j.default.createElement("select",{"aria-label":i("commitParent"),value:g,onChange:S=>{p(null),x(null),H(Number(S.target.value))}},u.parents.map((S,C)=>j.default.createElement("option",{key:S,value:C},C+1,": ",S.slice(0,10))))),j.default.createElement("p",null,u.parent||i("commitRoot")," \u2192 ",u.id.slice(0,10)),j.default.createElement("label",null,i("commitFileSearch")," ",j.default.createElement("input",{"aria-label":i("commitFileSearch"),value:m,onChange:S=>{N(S.target.value),p(null)}})),j.default.createElement("span",null," ",E.length," / ",u.changes.length),j.default.createElement("ul",null,E.map(S=>j.default.createElement("li",{key:S.id},j.default.createElement("button",{"aria-pressed":s===S.id,onClick:()=>p(S.id)},S.status," \xB7 ",S.oldPath?S.oldPath+" \u2192 ":"",S.path)))),!!u.changes.length&&!E.length&&j.default.createElement("p",{role:"status"},i("emptySearch")),!u.changes.length&&j.default.createElement("p",null,i("commitNoChanges")),s&&j.default.createElement(Ue,{key:s,sessionId:e,repositoryId:t,commit:r,parentIndex:g,id:s,onSelectCommit:c,rpc:o,t:i,onRediscover:n}),j.default.createElement(At,{key:JSON.stringify([e,t,r]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:c}))}var Q=R(require("react"),1);function xo(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let t=e.slice(0,200),r=new Map,o=[],i=[],n=f=>typeof f=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(f);for(let[f,l]of t.entries()){if(!l||!n(l.id)||!Array.isArray(l.parents)||r.has(l.id))throw new Error("Invalid graph node");r.set(l.id,f),o.push({id:l.id,row:f})}let c=!1;for(let f of t){let l=new Set;for(let s of f.parents){if(i.length===1e3){c=!0;break}if(!n(s)||s.length!==f.id.length||s===f.id||l.has(s))throw new Error("Invalid graph parent");l.add(s);let p=r.get(s);if(p!==void 0&&p<=r.get(f.id))throw new Error("Graph requires child-before-parent order");i.push({from:f.id,to:s,missing:p===void 0})}if(c)break}return{nodes:o,edges:i,nodesTruncated:e.length>200,edgesTruncated:c}}function wo(e){let t=Array(32).fill(null),r=new Map,o=[],i=new Set,n=!1,c=s=>{if(i.has(s))return null;let p=t.indexOf(s);return p>=0?p:(p=t.indexOf(null),p<0?(n=!0,i.add(s),null):(t[p]=s,p))},f=new Map;for(let s of e.edges){if(s.missing)continue;let p=f.get(s.from)||[];p.push(s.to),f.set(s.from,p)}for(let s of e.nodes){let p=c(s.id);if(r.set(s.id,{...s,lane:p}),o.push({...s,lane:p}),p===null)continue;t[p]=null;let m=f.get(s.id)||[];for(let[N,g]of m.entries())t.includes(g)||(N===0&&t[p]===null?t[p]=g:c(g))}let l=e.edges.filter(s=>!s.missing).flatMap(s=>{let p=r.get(s.from),m=r.get(s.to);return p.lane===null||m.lane===null?[]:[{...s,start:p.row,end:m.row,fromLane:p.lane,toLane:m.lane}]});return{nodes:o,edges:l,lanesTruncated:n,laneCount:Math.max(1,...o.map(s=>(s.lane??0)+1))}}function Pr({commits:e,selected:t,onSelect:r,t:o}){let i;try{i=xo(e)}catch{return Q.default.createElement("p",{role:"alert"},o("graphInvalid"))}let n=wo(i),c=n.edges,f=Math.max(100,24+18*n.laneCount),l=Math.max(40,i.nodes.length*36);return Q.default.createElement("section",{"aria-label":o("historyGraph")},Q.default.createElement("p",null,o("graphScope")),n.lanesTruncated&&Q.default.createElement("p",{role:"status"},o("graphLaneLimit")),(i.nodesTruncated||i.edgesTruncated)&&Q.default.createElement("p",{role:"status"},o("graphLimit")),Q.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},Q.default.createElement("svg",{width:f,height:l,"aria-hidden":"true",style:{flexShrink:0}},c.map(s=>{let p=s.start*36+18,m=s.end*36+18,N=12+s.fromLane*18,g=12+s.toLane*18;return Q.default.createElement("path",{key:s.from+s.to,d:"M "+N+" "+p+" C "+N+" "+(p+18)+", "+g+" "+(m-18)+", "+g+" "+m,fill:"none",stroke:"currentColor",opacity:"0.45"})}),n.nodes.filter(s=>s.lane!==null).map(s=>Q.default.createElement("circle",{key:s.id,cx:12+s.lane*18,cy:s.row*36+18,r:"4",fill:"currentColor"}))),Q.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},i.nodes.map(s=>Q.default.createElement("li",{key:s.id,style:{height:36,whiteSpace:"nowrap"}},Q.default.createElement("button",{title:s.id,"aria-current":t===s.id?!0:void 0,style:t===s.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:p=>{if(p.altKey||p.ctrlKey||p.metaKey||p.shiftKey)return;let m=p.key==="ArrowDown"?Math.min(s.row+1,i.nodes.length-1):p.key==="ArrowUp"?Math.max(0,s.row-1):p.key==="Home"?0:p.key==="End"?i.nodes.length-1:null;m!==null&&(p.preventDefault(),p.stopPropagation(),p.currentTarget.closest("ol").querySelectorAll("button")[m]?.focus())},onClick:()=>r(s.id)},Q.default.createElement("code",null,s.id.slice(0,10))," ",e[s.row].subject))))),Q.default.createElement("details",null,Q.default.createElement("summary",null,o("graphRelations")),Q.default.createElement("ul",null,i.edges.map(s=>Q.default.createElement("li",{key:s.from+s.to},Q.default.createElement("code",null,s.from)," \u2192 ",Q.default.createElement("code",null,s.to),s.missing?" \xB7 "+o("graphMissing"):"")))))}function Mt(e){let[t,r]=(0,Q.useState)(!1);return Q.default.createElement("div",null,Q.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historyGraph")),t&&Q.default.createElement(Pr,{...e}))}var D=R(require("react"),1);function Br({sessionId:e,repositoryId:t,base:r,target:o,rpc:i,t:n,onRediscover:c}){let[f,l]=(0,D.useState)(null),[s,p]=(0,D.useState)(""),[m,N]=(0,D.useState)(0),[g,H]=(0,D.useState)(null),[u,x]=(0,D.useState)("");if((0,D.useEffect)(()=>{let y=new AbortController;return l(null),p(""),H(null),i("vcs/revision-changes",{sessionId:e,repositoryId:t,base:r,target:o},y.signal).then(h=>{y.signal.aborted||l(h)}).catch(h=>{y.signal.aborted||(p(h.message),h.code==="vcs/rediscover-required"&&c())}),()=>y.abort()},[e,t,r,o,m]),s)return D.default.createElement("p",{role:"alert"},s," ",D.default.createElement("button",{onClick:()=>N(y=>y+1)},n("retry")));if(!f)return D.default.createElement("p",{role:"status"},n("loading"));let b=et(f.changes,u);return D.default.createElement("div",null,D.default.createElement("label",null,n("commitFileSearch")," ",D.default.createElement("input",{"aria-label":n("commitFileSearch"),value:u,onChange:y=>{x(y.target.value),H(null)}})),D.default.createElement("span",null," ",b.length," / ",f.changes.length),!!f.changes.length&&!b.length&&D.default.createElement("p",{role:"status"},n("emptySearch")),!f.changes.length&&D.default.createElement("p",null,n("revisionEmpty")),D.default.createElement("ul",null,b.map(y=>D.default.createElement("li",{key:y.id},D.default.createElement("button",{"aria-pressed":g===y.id,onClick:()=>H(y.id)},y.status," \xB7 ",y.oldPath?y.oldPath+" \u2192 ":"",y.path)))),g&&D.default.createElement(Ue,{key:g,sessionId:e,repositoryId:t,base:r,target:o,id:g,rpc:i,t:n,onRediscover:c}))}function Ot(e){return D.default.createElement(Dr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Dr({commits:e,sessionId:t,repositoryId:r,rpc:o,t:i,onRediscover:n,onReferencesLoaded:c}){let[f,l]=(0,D.useState)(""),[s,p]=(0,D.useState)(""),[m,N]=(0,D.useState)([]),[g,H]=(0,D.useState)(!1),[u,x]=(0,D.useState)(0),[b,y]=(0,D.useState)(!1),[h,w]=(0,D.useState)("");return(0,D.useEffect)(()=>{if(!u)return;let E=new AbortController;return y(!0),w(""),o("vcs/references",{sessionId:t,repositoryId:r},E.signal).then(S=>{E.signal.aborted||(N(S.references),H(!0),c?.(S.references))}).catch(S=>{E.signal.aborted||(w(S.message),S.code==="vcs/rediscover-required"&&n())}).finally(()=>{E.signal.aborted||y(!1)}),()=>E.abort()},[t,r,u]),D.default.createElement("section",{"aria-label":i("revisionTitle")},D.default.createElement("h3",null,i("revisionTitle")),D.default.createElement("p",null,i("revisionScope")),D.default.createElement("button",{disabled:b,onClick:()=>x(E=>E+1)},i("revisionLoadRefs")),D.default.createElement("p",null,i("revisionRefsScope")),g&&!b&&!h&&D.default.createElement("p",{role:"status"},m.length?`${i("revisionRefsCount")}: ${m.length}`:i("revisionRefsEmpty")),b&&D.default.createElement("p",{role:"status"},i("loading")),h&&D.default.createElement("p",{role:"alert"},h),[[f,l,"revisionBase"],[s,p,"revisionTarget"]].map(([E,S,C])=>D.default.createElement("label",{key:C},i(C)," ",D.default.createElement("select",{"aria-label":i(C),value:E,onChange:v=>S(v.target.value)},D.default.createElement("option",{value:""},"\u2014"),!!e.length&&D.default.createElement("optgroup",{label:i("revisionLoadedCommits")},e.map(v=>D.default.createElement("option",{key:v.id,value:v.id},v.id.slice(0,10)," \xB7 ",v.subject))),!!m.length&&D.default.createElement("optgroup",{label:i("revisionLocalRefs")},m.map(v=>D.default.createElement("option",{key:v.name,value:v.commit},v.name," \xB7 ",v.commit.slice(0,10)))),E&&!e.some(v=>v.id===E)&&!m.some(v=>v.commit===E)&&D.default.createElement("option",{value:E},E)))),D.default.createElement("button",{disabled:!f||!s,onClick:()=>{l(s),p(f)}},i("revisionSwap")),D.default.createElement("p",{style:{overflowWrap:"anywhere"}},D.default.createElement("code",null,f||"\u2014")," \u2192 ",D.default.createElement("code",null,s||"\u2014")),f&&s&&D.default.createElement(Br,{key:JSON.stringify([t,r,f,s]),sessionId:t,repositoryId:r,base:f,target:s,rpc:o,t:i,onRediscover:n}))}function So(e,t,r){let o=r?[...e.commits.filter(i=>!t.commits.some(n=>n.id===i.id)),...t.commits]:t.commits;return{...t,windowEnd:r+t.commits.length,commits:o.slice(-200)}}function Ft(e){return L.default.createElement(Mr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Mr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,c]=(0,L.useState)({id:null,path:null,revision:0}),[f,l]=(0,L.useState)(""),[s,p]=(0,L.useState)([]),[m,N]=(0,L.useState)(null),[g,H]=(0,L.useState)(""),[u,x]=(0,L.useState)(""),b=P=>{let re=(m||[]).find(le=>JSON.stringify([le.name,le.commit])===P)?.commit||"";x(P),H(re),E(le=>le?{...le,snapshot:re||null}:null),be(0),l(""),oe(null),X({commits:[],snapshot:null,nextOffset:null})},[y,h]=(0,L.useState)({message:"",author:"",path:"",since:"",until:""}),[w,E]=(0,L.useState)(null),S=P=>{E({values:P,snapshot:k.snapshot}),be(0),l(""),oe(null),X(_=>({..._,commits:[],nextOffset:null}))},C=()=>{de&&(X(P=>({commits:[],snapshot:P.snapshot,nextOffset:null})),oe(null),l(""),be(Math.max(0,de-50)))},v=(0,L.useMemo)(()=>ho(m||[]),[m]),J=n.id,ve=(P,_=null)=>{n.id&&p(re=>[...re,n]),c(re=>({id:P,path:_,revision:re.revision+1}))},G=()=>{if(!s.length)return;let P=s[s.length-1];p(_=>_.slice(0,-1)),c(_=>({id:P.id,path:P.path,revision:_.revision+1}))},oe=(P,_=null)=>c(re=>({id:P,path:_,revision:re.revision+(_||re.path?1:0)})),[k,X]=(0,L.useState)({commits:[],snapshot:null,nextOffset:null}),[de,be]=(0,L.useState)(0),[ot,Ie]=(0,L.useState)(0),[ie,Be]=(0,L.useState)(!0),[me,he]=(0,L.useState)("");(0,L.useEffect)(()=>{let P=new AbortController;return Be(!0),he(""),r("vcs/history",{sessionId:e,repositoryId:t,offset:de,limit:50,...w?{search:w.values}:{},...w?.snapshot||g||k.snapshot?{snapshot:w?.snapshot||g||k.snapshot}:{}},P.signal).then(_=>{P.signal.aborted||(X(re=>So(re,_,de)),de>=200&&(oe(null),l("")))}).catch(_=>{P.signal.aborted||(he(_.message),_.code==="vcs/rediscover-required"&&i())}).finally(()=>{P.signal.aborted||Be(!1)}),()=>P.abort()},[e,t,de,ot,w,g]);let se=bo(k.commits,f);return L.default.createElement("section",{className:"vcs-history","aria-label":o("history"),"aria-busy":ie},L.default.createElement("div",{className:"vcs-history-list"},L.default.createElement("p",null,o("historyListOnly")),m!==null&&L.default.createElement("p",null,o("historyRefsScope")),L.default.createElement("label",null,o("historyBranch")," ",L.default.createElement("select",{"aria-label":o("historyBranch"),value:u,disabled:ie,onChange:P=>b(P.target.value)},L.default.createElement("option",{value:""},"HEAD"),u&&!(m||[]).some(P=>JSON.stringify([P.name,P.commit])===u)&&L.default.createElement("option",{value:u},JSON.parse(u)[0]," \xB7 ",g.slice(0,10)," \xB7 ",o("historyPinned")),(m||[]).map(P=>{let _=JSON.stringify([P.name,P.commit]);return L.default.createElement("option",{key:_,value:_},P.name," \xB7 ",P.commit.slice(0,10))}))),L.default.createElement("p",null,o("historyBranchScope"),g&&L.default.createElement(L.default.Fragment,null," \xB7 ",L.default.createElement("code",null,g))),L.default.createElement("form",{"aria-label":o("historyServerSearch"),onSubmit:P=>{P.preventDefault(),S({...y})}},L.default.createElement("fieldset",{disabled:ie},L.default.createElement("legend",null,o("historyServerSearch")),L.default.createElement("p",null,o("historyServerScope")),["message","author","path","since","until"].map(P=>L.default.createElement("label",{key:P},o("historyServer_"+P)," ",L.default.createElement("input",{maxLength:P==="since"||P==="until"?40:1024,placeholder:P==="since"||P==="until"?"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]":void 0,"aria-label":o("historyServer_"+P),value:y[P],onChange:_=>h(re=>({...re,[P]:_.target.value}))}))),L.default.createElement("button",{type:"submit"},o("historyServerApply")),L.default.createElement("button",{type:"button",onClick:()=>{h({message:"",author:"",path:"",since:"",until:""}),S({})}},o("historyServerClear")))),w&&L.default.createElement("p",{role:"status"},o("historyServerActive"),": ",JSON.stringify(w.values)," \xB7 ",L.default.createElement("code",null,w.snapshot||k.snapshot)),L.default.createElement("label",null,o("historySearch")," ",L.default.createElement("input",{"aria-label":o("historySearch"),value:f,onChange:P=>{l(P.target.value),oe(null)}})),L.default.createElement("span",null," ",se.length," / ",k.commits.length),!!k.commits.length&&L.default.createElement("p",{role:"status"},o("historyWindow"),": ",Math.max(0,(k.windowEnd??k.commits.length)-k.commits.length),"\u2013",k.windowEnd??k.commits.length," \xB7 ",o("historyWindowScope")),!!k.commits.length&&!se.length&&L.default.createElement("p",{role:"status"},o("historyNoMatch")),L.default.createElement("ol",null,se.map(P=>L.default.createElement("li",{key:P.id},L.default.createElement("button",{"aria-pressed":J===P.id,onClick:()=>oe(P.id)},P.subject),L.default.createElement("div",null,L.default.createElement("code",{title:P.id},P.id.slice(0,10))," \xB7 ",P.author," \xB7 ",L.default.createElement("time",{dateTime:P.date},P.date)),v.has(P.id)&&L.default.createElement("div",{"aria-label":o("historyRefsLabel"),style:{overflowWrap:"anywhere"}},v.get(P.id).names.map(_=>L.default.createElement("span",{key:_},L.default.createElement("code",null,_)," ")),v.get(P.id).hidden>0&&L.default.createElement("span",null,o("historyRefsMore"),": ",v.get(P.id).hidden))))),ie&&L.default.createElement("p",{role:"status"},o("loading")),me&&L.default.createElement("p",{role:"alert"},me," ",L.default.createElement("button",{onClick:()=>Ie(P=>P+1)},o("retry"))),!ie&&!me&&!k.commits.length&&L.default.createElement("p",null,o("historyEmpty")),k.truncated&&L.default.createElement("p",{role:"status"},o("historyLimit")),!!de&&L.default.createElement("button",{disabled:ie,onClick:C},o("historyBack")),!me&&k.nextOffset!==null&&L.default.createElement("button",{disabled:ie,onClick:()=>be(k.nextOffset)},o("historyMore")),!!k.commits.length&&L.default.createElement(Mt,{commits:k.commits,selected:J,onSelect:oe,t:o}),L.default.createElement(Ot,{onReferencesLoaded:N,commits:k.commits,sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i})),L.default.createElement("div",{className:"vcs-history-details"},s.length>0&&L.default.createElement("p",null,L.default.createElement("button",{onClick:G,"aria-label":o("historyNavigationBack")},o("historyNavigationBack")," \xB7 ",s[s.length-1].id.slice(0,10))),J&&L.default.createElement(Dt,{key:JSON.stringify([J,n.revision]),initialPath:n.path,sessionId:e,repositoryId:t,commit:J,onSelectCommit:ve,rpc:r,t:o,onRediscover:i})))}var ko={zh:{svnOfferExpired:"\u7F51\u7EDC\u8BBF\u95EE\u63D0\u6848\u5DF2\u8FC7\u671F\uFF1B\u8BF7\u624B\u52A8\u91CD\u8BD5\uFF0C\u5E76\u91CD\u65B0\u52FE\u9009\u540C\u610F\u3002",svnExpired:"SVN \u7F51\u7EDC\u6388\u6743\u5DF2\u8FC7\u671F\uFF0C\u5386\u53F2\u8BF7\u6C42\u5DF2\u505C\u6B62\uFF1B\u8BF7\u91CD\u65B0\u5BA1\u9605\u5E76\u540C\u610F\u3002",svnConsentReview:"\u5BA1\u9605 SVN \u7F51\u7EDC\u8BBF\u95EE\u8303\u56F4",svnConsentScope:"\u540C\u610F\u524D\u4EC5\u8BFB\u53D6\u672C\u5730\u8EAB\u4EFD\u3002\u6388\u6743\u53EA\u9002\u7528\u4E8E\u6240\u5217\u4ED3\u5E93\u3001Session \u4E0E\u76EE\u5F55\uFF0C\u4E94\u5206\u949F\u6709\u6548\uFF1B\u4E0D\u6388\u6743\u91CD\u5B9A\u5411\u6216\u5199\u64CD\u4F5C\u3002",svnConsentExplicit:"\u6211\u540C\u610F\u8BBF\u95EE\u4EE5\u4E0A HTTPS SVN \u4ED3\u5E93",svnConsentApprove:"\u540C\u610F\u5E76\u8BFB\u53D6\u5386\u53F2",svnHistoryScope:"\u56FA\u5B9A\u672C\u5730 revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u5206\u9875\u66FF\u6362\u663E\u793A",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",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",commitSigned:"\u5DF2\u7B7E\u540D \xB7 {format}",commitSignatureUnverified:"\u4EC5\u68C0\u6D4B\u7B7E\u540D\u5934\uFF0C\u672A\u505A\u4FE1\u4EFB\u9A8C\u8BC1\u3002",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",workspaceLargeScope:"Git\u5DE5\u4F5C\u533A\u5B8C\u6574UTF-8\u6BD4\u8F83\uFF0C\u6BCF\u4FA78MiB\uFF0F10\u4E07\u884C\uFF1B\u8BFB\u53D6\u671F\u95F4\u53D8\u5316\u4F1A\u62D2\u7EDD\u7ED3\u679C\uFF0C\u6210\u529F\u540E\u6587\u4EF6\u4ECD\u53EF\u88AB\u5916\u90E8\u4FEE\u6539\u3002",largeLoad:"\u52A0\u8F7D\u5B8C\u6574\u5927\u6587\u4EF6\u6BD4\u8F83",largeClose:"\u53D6\u6D88\u5927\u6587\u4EF6\u6A21\u5F0F",largeScope:"\u4EC5Git\u5386\u53F2UTF-8\u666E\u901A\u6587\u4EF6\uFF0C\u6BCF\u4FA7\u6700\u591A8MiB\u300110\u4E07\u884C\uFF1B\u4E0D\u662F\u5DE5\u4F5C\u533A\u6216SVN\u5927\u6587\u4EF6\u3002",diffPending:"\u6B63\u5728\u8BA1\u7B97\u5DEE\u5F02\uFF0C\u5C1A\u4E0D\u80FD\u5224\u65AD\u662F\u5426\u76F8\u540C\u3002",diffIncomplete:"\u5DEE\u5F02\u8BA1\u7B97\u672A\u5B8C\u6210\u6216\u8D85\u65F6\uFF0C\u5F53\u524D\u7ED3\u679C\u53EF\u80FD\u4E0D\u5B8C\u6574\u3002",diffComplete:"\u5DEE\u5F02\u8BA1\u7B97\u5B8C\u6210\u3002",largeFallback:"\u57FA\u7840\u89C6\u56FE\u53EA\u5C55\u793A\u6709\u754C\u7247\u6BB5\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5927\u6587\u4EF6\u5DEE\u5F02\u3002",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyBack:"\u5386\u53F2\u4E0A\u4E00\u9875",historyNavigationBack:"\u8FD4\u56DE\u4E0A\u4E00\u5904",historyNavigationScope:"\u4ECE\u67D0\u4E2A\u63D0\u4EA4\u7684\u6587\u4EF6\u5386\u53F2\u6216 Blame \u8DF3\u8F6C\u5230\u53E6\u4E00\u4E2A\u63D0\u4EA4\u540E\uFF0C\u201C\u8FD4\u56DE\u4E0A\u4E00\u5904\u201D\u4F1A\u56DE\u5230\u8DF3\u8F6C\u524D\u7684\u63D0\u4EA4\uFF0C\u5E76\u5C1D\u8BD5\u9884\u9009\u552F\u4E00\u5B8C\u5168\u5339\u914D\u7684\u8DEF\u5F84\uFF1B\u8FD9\u662F\u672C\u4F1A\u8BDD\u5185\u7684\u9875\u9762\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u8BFB\u53D6\u6216\u5199\u5165\u4ED3\u5E93\u3002",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryDateScope:"\u53EF\u9009\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u542B\u8FB9\u754C\u8FC7\u6EE4\uFF1B\u4E0E\u201C\u8DDF\u968F\u91CD\u547D\u540D\u201D\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\uFF0C\u62A5\u9519\u540E\u53D6\u6D88\u5176\u4E00\u5373\u53EF\u3002",pathHistory:"\u6B64\u8DEF\u5F84\u5386\u53F2",submoduleBadge:"\u5B50\u6A21\u5757",submoduleCheckout_initialized:"\u5B58\u5728\u672C\u5730Git\u6807\u8BB0\uFF08\u672A\u9A8C\u8BC1\u68C0\u51FA\u6709\u6548\u6027\uFF09",submoduleCheckout_uninitialized:"\u672C\u5730\u672A\u521D\u59CB\u5316",submoduleCheckout_absent:"\u672C\u5730\u76EE\u5F55\u7F3A\u5931",submoduleCheckout_unreadable:"\u672C\u5730\u72B6\u6001\u4E0D\u53EF\u8BFB",submodulePointerMoved:"\u6307\u9488\u5DF2\u79FB\u52A8\uFF08\u68C0\u51FAHEAD\u4E0E\u8BB0\u5F55\u4E0D\u540C\uFF09",submoduleDirty:"\u5DE5\u4F5C\u6811\u6709\u672A\u63D0\u4EA4\u6539\u52A8",submoduleScope:"\u9884\u89C8\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF1B\u5DF2\u521D\u59CB\u5316\u68C0\u51FA\u65F6\uFF0C\u6765\u81EA\u7236\u4ED3\u5E93\u81EA\u8EAB git status \u7684\u6307\u9488\u79FB\u52A8\uFF0F\u672A\u63D0\u4EA4\u6539\u52A8\uFF0F\u672A\u8DDF\u8E2A\u5185\u5BB9\u4F1A\u4E00\u5E76\u6807\u6CE8\uFF0C\u4E0D\u8FDB\u5165\u5B50\u6A21\u5757\u3001\u4E0D\u989D\u5916\u89E3\u6790\u5176HEAD\u3001\u4E0D\u52A0\u8F7D\u5185\u5BB9\u3001\u4E0D\u66F4\u65B0\u6216\u540C\u6B65\u3002",pathHistoryScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u5386\u53F2\u8DEF\u5F84\u5728\u8BE5\u63D0\u4EA4\u4E0B\u7684\u6587\u4EF6\u5386\u53F2\uFF1B\u8DEF\u5F84\u5FC5\u987B\u5B58\u5728\u4E8E\u8BE5\u63D0\u4EA4\u3002\u5173\u95ED\u8DDF\u968F\u65F6\u4E0D\u8DE8\u91CD\u547D\u540D\u3002",pathHistoryNoFollow:"\u672A\u8DDF\u968F\u91CD\u547D\u540D",pathHistoryFollowScope:"\u8DDF\u968F\u6CBF\u7528\u540C\u4E00\u4FDD\u5B88\u89C4\u5219\uFF1A\u7B2C\u4E00\u7236\u94FE\u3001Git\u76F8\u4F3C\u5EA6\u81F3\u5C1150%\u3001\u6BCF\u6B21\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u621632\u6B21\u786E\u8BA4\u4E0A\u9650\u5904\u505C\u6B62\uFF1B\u53EA\u9002\u7528\u4E8E\u63D0\u4EA4\u4E2D\u7684\u666E\u901A\u6587\u4EF6\u6216\u94FE\u63A5\u3002",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF0C\u5E76\u5C1D\u8BD5\u9009\u4E2D\u8BE5\u63D0\u4EA4\u53D8\u66F4\u4E2D\u8DEF\u5F84\u5B8C\u5168\u4E00\u81F4\u7684\u552F\u4E00\u6587\u4EF6\uFF08\u4E0D\u4F1A\u731C\u6D4B\u91CD\u547D\u540D\u6216\u65E7\u8DEF\u5F84\uFF09\uFF1B\u65E0\u552F\u4E00\u5339\u914D\u65F6\u4E0D\u9884\u9009\u6587\u4EF6\u3002\u9ED8\u8BA4\u4F7F\u7528\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG\u30018\u4F4D\u57FA\u7EBF/\u6E10\u8FDB JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757\u9759\u6001VP8\uFF0F\u65E0\u635FVP8L WebP\uFF08\u4E0D\u652F\u6301\u7B97\u672F\u7F16\u7801/CMYK JPEG\u3001\u6269\u5C55/\u52A8\u753B WebP\uFF09\uFF1B\u6BCF\u4FA7\u6700\u591A 2 MiB\u30011600 \u4E07\u50CF\u7D20\u3002\u5143\u6570\u636E\u88AB\u79FB\u9664\uFF0C\u4E0D\u9002\u7528\u4E8E\u8272\u5F69\u7CBE\u786E\u6027\u5BA1\u9605\u3002\u652F\u6301\u5386\u53F2\u63D0\u4EA4\u3001\u56FA\u5B9A A/B \u53CA Git \u5DE5\u4F5C\u533A\uFF1B\u6309\u6240\u9009\u6A21\u5F0F\u8BFB\u53D6 HEAD\u3001\u6682\u5B58\u533A\u6216\u5DE5\u4F5C\u6587\u4EF6\u3002\u51B2\u7A81\u56FE\u7247\u4E0D\u652F\u6301\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u672C\u5730\u5206\u652F\u3001\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\u53CA\u672C\u5730\u7F13\u5B58\u7684\u8FDC\u7A0B\u8DDF\u8E2A\u5F15\u7528\uFF0C\u5171\u6700\u591A1000\u6761\uFF1B\u4E0D\u8FDE\u63A5\u8FDC\u7AEF\u6216fetch\uFF0C\u8FDC\u7A0B\u7F13\u5B58\u53EF\u80FD\u8FC7\u671F\u3002\u91CD\u65B0\u52A0\u8F7D\u65F6\uFF0Corigin/HEAD \u663E\u793A\u5B83\u5F53\u524D\u6307\u5411\u7684\u672C\u5730\u63D0\u4EA4\uFF1B\u5DF2\u9009\u5386\u53F2\u548C\u7248\u672C\u4ECD\u56FA\u5B9A\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5F15\u7528\uFF08\u542B\u8FDC\u7A0B\u7F13\u5B58\uFF09",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{svnOfferExpired:"Network access offer expired. Retry manually and check consent again.",svnExpired:"SVN network consent expired; history requests stopped. Review and consent again.",svnConsentReview:"Review SVN network access",svnConsentScope:"Before consent, read local identity only. Access binds this repository, Session and cwd for five minutes; redirects and writes are not authorized.",svnConsentExplicit:"I consent to access the HTTPS SVN repository above",svnConsentApprove:"Consent and read history",svnHistoryScope:"SVN history at a fixed local revision snapshot; pages replace displayed rows",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",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",commitSigned:"Signed \xB7 {format}",commitSignatureUnverified:"Signature presence detected; not trust-verified.",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",workspaceLargeScope:"Complete Git working-copy UTF-8 comparison: 8 MiB / 100000 lines per side. Changes during loading reject the result; external edits remain possible afterward.",largeLoad:"Load complete large-file comparison",largeClose:"Cancel large-file mode",largeScope:"Git historical UTF-8 regular files only: 8 MiB and 100000 lines per side, not working-copy or SVN large files.",diffPending:"Computing differences; equality is not yet known.",diffIncomplete:"Difference computation is incomplete or timed out; displayed results may be partial.",diffComplete:"Difference computation completed.",largeFallback:"The basic view shows bounded excerpts, not the complete large-file diff.",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyBack:"Previous history page",historyNavigationBack:"Back",historyNavigationScope:"After jumping from one commit's file history or Blame into another commit, \u201CBack\u201D returns to the commit you came from and tries to preselect the single exactly matching path; this is in-page context and reads or writes no repository state.",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryDateScope:"Optional date bounds filter on committer date inclusively; they cannot combine with rename following, so disable one if an error appears.",pathHistory:"History of this path",submoduleBadge:"submodule",submoduleCheckout_initialized:"local Git marker present (checkout validity not verified)",submoduleCheckout_uninitialized:"not initialized locally",submoduleCheckout_absent:"local directory missing",submoduleCheckout_unreadable:"local state unreadable",submodulePointerMoved:"pointer moved (checkout HEAD differs from recorded)",submoduleDirty:"uncommitted working-tree changes",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence; for an initialized checkout, pointer movement, uncommitted changes and untracked content reported by the parent repository's own git status are annotated, without entering the submodule, separately resolving its HEAD, loading contents, or updating anything.",pathHistoryScope:"Manually reads the file history of the selected historical path at that commit; the path must exist in that commit. Without following, renames are not crossed.",pathHistoryNoFollow:"renames not followed",pathHistoryFollowScope:"Following uses the same conservative rules: first parent, Git similarity of at least 50%, a unique deletion/addition confirmed each time, stopping at ambiguity, copies or the 32-confirmation cap; only committed regular files or links are supported.",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details and preselect the single exactly matching path in that commit; rename or old paths are never guessed, and a missing or ambiguous match preselects nothing. The first parent is used and no line is auto-located.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeBreadcrumbs:"Historical directory path",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG, 8-bit baseline or progressive JPEG regular files, or single-chunk static VP8 / lossless VP8L WebP (no arithmetic-coded/CMYK JPEG or extended/animated WebP); at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Supports commits, fixed A/B and Git working changes; HEAD, index or working bytes follow the selected mode. Conflicted images are unsupported.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches, commit tags and locally cached remote-tracking refs, at most 1000 total; no network or fetch. Remote caches may be stale. Reloading origin/HEAD shows its current local target; selected history and versions stay pinned. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local refs (including remote caches)",revisionRefsCount:"Selectable references loaded"}};function Co(e,t,r,o){let i=e.target;if(!t?.contains(i)||e.defaultPrevented||e.isComposing||i?.closest?.(".monaco-editor")||i?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&i===r&&o)return"clear";let n=i?.isContentEditable||i?.closest?.('input,textarea,select,[role="textbox"]');if(n&&i!==r)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!n&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function No(e,t){let r=t?[...t.querySelectorAll("button[data-vcs-item]")]:[],o=r.indexOf(e.target);if(o<0)return;let i;if(e.key==="ArrowDown")i=r[o+1];else if(e.key==="ArrowUp")i=r[o-1];else if(e.key==="Home")i=r[0];else if(e.key==="End")i=r.at(-1);else if(e.key==="ArrowRight"&&e.target.dataset.vcsDirectory==="closed"||e.key==="ArrowLeft"&&e.target.dataset.vcsDirectory==="open"){e.preventDefault(),e.target.click();return}else return;e.preventDefault(),i?.focus()}var Eo=e=>"dsh-vcs:project:v1:"+e;function Ho(e,t){if(!e)return"";try{let r=(t??globalThis.localStorage)?.getItem(Eo(e));return typeof r=="string"&&r.length<=1024?r:""}catch{return""}}function Lo(e,t,r){if(!(!e||!t))try{(r??globalThis.localStorage)?.setItem(Eo(e),t)}catch{}}function Po(e,t=""){return e.find(r=>r.id===t)?.id||e.find(r=>r.relativePath===".")?.id||e[0]?.id||""}var qe=(e,t)=>JSON.stringify([e,t]),Je=(e,t=".")=>[e.type.toUpperCase(),e.relativePath==="."?t:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),tt=(e,t="all")=>e.type==="git"&&["staged","unstaged"].includes(t)?t:"all",Ao=(e="",t="")=>e===t?0:e<t?-1:1;function Tt(e=[]){let t={id:"",name:"",directories:new Map,files:[],count:0};for(let o of e){let i=String(o.path||"").split("/").filter(Boolean);if(!i.length)continue;let n=t;for(let c of i.slice(0,-1)){let f=n.id?n.id+"/"+c:c;n.directories.has(c)||n.directories.set(c,{id:f,name:c,directories:new Map,files:[],count:0}),n=n.directories.get(c),n.count++}n.files.push(o)}let r=o=>({...o,directories:[...o.directories.values()].sort((i,n)=>Ao(i.name,n.name)).map(r),files:[...o.files].sort((i,n)=>Ao(i.path,n.path))});return r(t)}function Bo(e=[],t){let r=e.findIndex(o=>o.id===t);return{index:r<0?0:r+1,total:e.length}}function Do(e=[],t,r){if(!e.length||!["previous","next"].includes(r))return null;let o=e.findIndex(c=>c.id===t),i=r==="next"?1:-1,n=o<0?r==="next"?-1:0:o;return e[(n+i+e.length)%e.length]||null}function Mo(e=""){let t=String(e).split("/").filter(Boolean);return t.slice(0,-1).map((r,o)=>t.slice(0,o+1).join("/"))}function jt(e,t=[]){for(let r of e?.directories||[])t.push(r.id),jt(r,t);return t}function Oo(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function Fo(e=[]){return e.reduce((t,r)=>{let o=Oo(r.status);return t.all++,t[o]=(t[o]||0)+1,t},{all:0})}function Fr(e=[],t="",r="all"){let o=t.toLowerCase();return e.filter(i=>(r==="all"||Oo(i.status)===r)&&i.path.toLowerCase().includes(o)).sort((i,n)=>i.path.localeCompare(n.path))}function To(e,t,r="",o="all"){return e.map(i=>({...t[i.id],repository:i,changes:Fr(t[i.id]?.changes,r,o)}))}function jo(e,t,r=""){if(!r||!e||e.cwd!==t.cwd)return t;let o=new Map(e.repositories.map(i=>[i.id,i]));for(let i of t.repositories)o.set(i.id,i);return{...t,repositories:[...o.values()],truncated:e.truncated||t.truncated,warnings:[...e.warnings||[],...t.warnings||[]]}}var Go={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Vo=e=>new URL("vcs-assets/"+e,document.baseURI).href;function Uo(){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 Tr=["slots","layout","locale","connection","uiSession"];function jr(e){e.effect(()=>e.locale.register("local.vcs",ko));let t=e.locale.bind("local.vcs"),r=bt(2),o=so(e.connection,()=>t("error"));function i(f){let l=f.useSessions(s=>Object.values(s.byId).find(p=>(p.retainedBy.mainView??0)>0));return a.default.createElement(n,{key:JSON.stringify([l?.id,l?.cwd])},a.default.createElement(c,{session:l}))}class n extends a.default.Component{state={error:null};static getDerivedStateFromError(l){return{error:l}}render(){return this.state.error?a.default.createElement("section",{className:"vcs-root"},a.default.createElement("style",null,yt),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 c({session:f}){(0,a.useSyncExternalStore)(d=>e.locale.subscribe(d),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let l=f?.id,[s,p]=(0,a.useState)("all"),[m,N]=(0,a.useState)(0),[g,H]=(0,a.useState)(0),[u,x]=(0,a.useState)(null),[b,y]=(0,a.useState)({}),[h,w]=(0,a.useState)(()=>Ho(f?.cwd)),[E,S]=(0,a.useState)(0),[C,v]=(0,a.useState)(""),[J,ve]=(0,a.useState)(""),[G,oe]=(0,a.useState)(null),[k,X]=(0,a.useState)(null),[de,be]=(0,a.useState)(!1),[ot,Ie]=(0,a.useState)(!1),[ie,Be]=(0,a.useState)(""),[me,he]=(0,a.useState)(""),[se,P]=(0,a.useState)(""),[_,re]=(0,a.useState)(!1),[le,rt]=(0,a.useState)(""),[We,Gt]=(0,a.useState)("all"),[Ee,Vt]=(0,a.useState)(!0),[Ut,it]=(0,a.useState)({}),[De,qo]=(0,a.useState)(!0),[st,Jo]=(0,a.useState)(!1),[nt,Io]=(0,a.useState)(!1),[_e,Me]=(0,a.useState)("content"),[qt,Jt]=(0,a.useState)(0),[Wo,It]=(0,a.useState)(!1),[Wt,_t]=(0,a.useState)(null),[_o,zo]=(0,a.useState)(0),[zt,Ko]=(0,a.useState)("pending"),[at,lt]=(0,a.useState)({added:0,deleted:0,count:0}),[ce,Kt]=(0,a.useState)(!1),Yt=(0,a.useRef)(null),$t=(0,a.useRef)(null),xe=(0,a.useRef)(null),dt=(0,a.useRef)(null),ze=(0,a.useRef)(null),ct=(0,a.useRef)(null),Qt=(0,a.useRef)(null),He=(0,a.useRef)(null),pt=(0,a.useRef)(null),ut=(0,a.useRef)(null),ft=(0,a.useRef)(!1),Ke=(0,a.useRef)(!1),we=u?.repositories||[],Se=we.filter(d=>d.id===h),ne=Wo&&Se.some(d=>d.type==="git"),Yo=()=>{He.current?.abort(),X(null),oe(null),he(""),It(!0)};(0,a.useEffect)(()=>{we.some(d=>d.id===h)&&Lo(f?.cwd,h)},[f?.cwd,h,u]);let Oe=()=>{Qt.current?.abort(),He.current?.abort(),X(null),oe(null),he(""),Me("content"),lt({added:0,deleted:0,count:0})},Ye=()=>{Ke.current=!1,Oe(),pt.current?.abort(),ut.current=u,x(null),y({}),ve(C.trim()),S(d=>d+1)},ke=()=>{Ke.current||(Ke.current=!0,Oe(),pt.current?.abort(),ut.current=null,x(null),y({}),ve(""),S(d=>d+1))},Xt=(d=!1)=>{d||H(B=>B+1),ft.current=d,d||Oe(),d||y({}),N(B=>B+1)};(0,a.useEffect)(()=>{let d=new AbortController;return pt.current=d,Be(""),be(!!l),l&&o("vcs/repositories",{sessionId:l,...J?{subdirectory:J}:{}},d.signal).then(B=>{if(!d.signal.aborted){let q=jo(ut.current,B,J);Ke.current=!1,w($=>Po(q.repositories,$)),x(q)}}).catch(B=>{d.signal.aborted||Be(B.message)}).finally(()=>{d.signal.aborted||be(!1)}),()=>d.abort()},[l,E,J]),(0,a.useEffect)(()=>{let d=new AbortController,B=ft.current;Qt.current=d,ft.current=!1,B||(y({}),he(""));for(let q of Se){let $=tt(q,s);r(()=>o("vcs/status",{sessionId:l,repositoryId:q.id,mode:$},d.signal),d.signal).then(ae=>{d.signal.aborted||y(pe=>({...pe,[q.id]:{...ae,mode:$}}))}).catch(ae=>{if(!d.signal.aborted){if(ae.code==="vcs/rediscover-required"){ke();return}y(pe=>({...pe,[q.id]:{error:ae.message,changes:[],mode:$}}))}})}return()=>d.abort()},[l,u,h,s,m]),(0,a.useEffect)(()=>{let d=B=>{B.target===window&&l&&h&&document.visibilityState==="visible"&&Xt(!0)};return window.addEventListener("focus",d),()=>window.removeEventListener("focus",d)},[l,h,s]);let Ce=we.find(d=>d.id===G?.repositoryId),ge=G?b[G.repositoryId]:null,mt=JSON.stringify([l,u?.cwd,G?.repositoryId,s,G?.id]),Le=Wt?.key===mt&&Wt?.status===ge;(0,a.useEffect)(()=>_t(null),[mt,ge,ne]),(0,a.useEffect)(()=>{let d=new AbortController;return He.current=d,X(null),he(""),lt({added:0,deleted:0,count:0}),Me("content"),Ie(!!G&&!!ge),!ne&&G&&ge&&Ce&&o("vcs/compare",{sessionId:l,repositoryId:G.repositoryId,mode:tt(Ce,s),id:G.id,...Le?{large:!0}:{}},d.signal).then(B=>{d.signal.aborted||X(B)}).catch(B=>{if(!d.signal.aborted){if(B.code==="vcs/rediscover-required"){ke();return}he(B.message)}}).finally(()=>{d.signal.aborted||Ie(!1)}),()=>d.abort()},[G,ge,l,s,ne,Le,_o]),(0,a.useEffect)(()=>{let d=!1,B,q=new AbortController;Kt(!1),P("");let $=document.createElement("link");return $.rel="stylesheet",$.href=Vo("editor.css"),document.head.appendChild($),Xe(Vo("editor.js")+"?v="+encodeURIComponent(Ze)+"&retry="+qt,{signal:q.signal}).then(ae=>{d||(B=ae.createDiff($t.current,{onStats:lt,onComputation:pe=>{d||Ko(pe)}}),xe.current=B,Kt(!0))}).catch(ae=>{d||P(ae.message)}),()=>{d=!0,q.abort(),B?.dispose(),xe.current=null,$.remove()}},[qt]),(0,a.useEffect)(()=>{ce&&(!k||k.binary||ne)&&xe.current?.setContent({left:{text:""},right:{text:""}},"empty"),ce&&k&&!k.binary&&!ne&&xe.current?.setContent(k,JSON.stringify([l,u?.cwd,G?.repositoryId,s,G?.id,k.path]))},[ce,k,l,u,G,s,ne]),(0,a.useEffect)(()=>{xe.current?.options({sideBySide:De,ignoreWhitespace:st,wrap:nt})},[ce,De,st,nt]);let Fe=To(Se,b,le,We),Ae=Fe.flatMap(d=>d.changes),$o=Fo(ge?.changes),ht=Bo(Ae,G?.id),Zt=()=>{rt(""),Gt("all")},Qo=async()=>{let d=k?.path||ye?.path;if(d)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(d);else{let B=document.createElement("textarea");try{if(B.value=d,B.style.cssText="position:fixed;opacity:0",document.body.appendChild(B),B.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{B.remove()}}re(!0),window.setTimeout(()=>re(!1),1500)}catch{he(t("copyFailed"))}};(0,a.useEffect)(()=>{let d=B=>{if(ne)return;let q=Co(B,Yt.current,ze.current,!!le);q&&(B.preventDefault(),q==="search"?(ze.current?.focus(),ze.current?.select()):q==="clear"?rt(""):gt(q))};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[le,Ae,G,ne]);let Rt=d=>it(B=>{let q={...B};for(let $ of Fe)for(let ae of jt(Tt($.changes)))q[$.repository.id+"\0"+ae]=!d;return q}),Xo=()=>{let d=ye;!d||!G||(Vt(!0),Zt(),it(B=>{let q={...B};for(let $ of Mo(d.path))q[G.repositoryId+"\0"+$]=!1;return q}),ct.current=qe(G.repositoryId,d.id))};(0,a.useEffect)(()=>{let d=ct.current;if(!d)return;let B=[...dt.current?.querySelectorAll("button[data-vcs-change]")||[]].find(q=>q.dataset.vcsChange===d);B&&(B.scrollIntoView({block:"nearest"}),B.focus(),ct.current=null)},[Ee,le,We,Ut,Fe]);let gt=d=>{let B=Do(Ae,G?.id,d);B&&(He.current?.abort(),X(null),Me("content"),oe({repositoryId:h,id:B.id}))},eo=de||Se.some(d=>!b[d.id]),ye=ge?.changes?.find(d=>d.id===G?.id),Ne=k?.properties,vt=Ne?[...new Set([...Object.keys(Ne.left||{}),...Object.keys(Ne.right||{})])].filter(d=>Ne.left?.[d]!==Ne.right?.[d]):[],Te=d=>Go[d?.status]||d?.status?.slice(0,1).toUpperCase()||"M",to=k?.binary?[k.left.label,k.right.label].filter(Boolean).join(" \u2194 "):"",Pe=me||(ot?t("loading"):l?eo&&!ye?t("loading"):ie||(we.length?ye?k?.binary?t("binary")+(to?" "+t("binaryComparison",{files:to}):""):k?!ce&&!se?t("loading"):"":t("pick"):t("pick"):t("noRepo")):t("noSession")),Zo=d=>No(d,dt.current),oo=({entry:d,compact:B=!1,depth:q=0})=>{let $=d.path.lastIndexOf("/");return a.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":qe(h,d.id),"aria-current":G?.repositoryId===h&&G?.id===d.id?"true":void 0,style:{paddingInlineStart:8+q*14},title:(d.oldPath?d.oldPath+" \u2192 ":"")+d.path+" \xB7 "+t(Te(d)),onClick:()=>{He.current?.abort(),X(null),Me("content"),oe({repositoryId:h,id:d.id})}},a.default.createElement("span",{className:"vcs-status","data-status":Te(d)},Te(d)),a.default.createElement(St,{submodule:d.submodule,t}),a.default.createElement("span",{className:"vcs-filename"},B?d.path.slice($+1):d.path,d.oldPath&&a.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",d.oldPath)))},ro=({node:d,repository:B,depth:q=0})=>a.default.createElement(a.default.Fragment,null,d.directories.map($=>{let ae=B.id+"\0"+$.id,pe=!!Ut[ae];return a.default.createElement(a.default.Fragment,{key:ae},a.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":pe?"closed":"open","aria-expanded":!pe,style:{paddingInlineStart:8+q*14},onClick:()=>it(Ro=>({...Ro,[ae]:!pe}))},a.default.createElement("span",{"aria-hidden":"true"},pe?"\u203A":"\u2304"),$.name,a.default.createElement("small",null,$.count)),!pe&&a.default.createElement(ro,{node:$,repository:B,depth:q+1}))}),d.files.map($=>a.default.createElement(oo,{key:qe(B.id,$.id),entry:$,compact:d.id!=="",depth:q})));return a.default.createElement("section",{ref:Yt,className:"vcs-root","aria-label":t("title")},a.default.createElement("style",null,yt),a.default.createElement("header",{className:"vcs-top"},a.default.createElement(Uo,null),a.default.createElement("h1",{className:"vcs-title"},t("title")),a.default.createElement("span",{className:"vcs-badge"},t("readonly")),a.default.createElement("span",{className:"vcs-spacer"}),a.default.createElement("select",{"aria-label":t("repositories"),value:h,disabled:de||!we.length,onChange:d=>{Oe(),y({}),w(d.target.value)}},!we.length&&a.default.createElement("option",{value:""},t("repositories")),we.map(d=>a.default.createElement("option",{key:d.id,value:d.id},Je(d,t("workspaceRoot"))))),a.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",a.default.createElement("select",{"aria-label":t("gitMode"),value:s,disabled:ne||!Se.some(d=>d.type==="git"),onChange:d=>{Oe(),y({}),p(d.target.value)}},["all","unstaged","staged"].map(d=>a.default.createElement("option",{key:d,value:d},t(d))))),a.default.createElement("button",{onClick:()=>Xt(!1),disabled:eo||!l},t("refresh")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")),a.default.createElement("div",{className:"vcs-path",title:u?.cwd||f?.cwd},t("session"),": ",u?.cwd||f?.cwd||"\u2014"),a.default.createElement("form",{className:"vcs-discovery",onSubmit:d=>{d.preventDefault(),Ye()}},a.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:C,onChange:d=>v(d.target.value)}),a.default.createElement("button",{disabled:!l||de},t("rescan")),a.default.createElement("span",null,t("scanHint"))),u?.truncated&&a.default.createElement("div",{className:"vcs-notice"},t("truncated")),(u?.warnings||[]).map((d,B)=>a.default.createElement("div",{className:"vcs-notice",key:B},typeof d=="string"?d:d.message||JSON.stringify(d)))),Se.filter(d=>d.type==="svn").map(d=>a.default.createElement(a.default.Fragment,{key:JSON.stringify([l,d.id,E,m])},a.default.createElement(kt,{repositoryId:d.id,sessionId:l,rpc:o,t,onRediscover:ke}),a.default.createElement(Et,{repositoryId:d.id,sessionId:l,rpc:o,t,onRediscover:ke}))),Se.some(d=>d.type==="git")&&a.default.createElement(a.default.Fragment,null,a.default.createElement("nav",{className:"vcs-review-views","aria-label":t("reviewView")},a.default.createElement("button",{"aria-pressed":!ne,onClick:()=>It(!1)},t("workspaceView")),a.default.createElement("button",{"aria-pressed":ne,"aria-expanded":ne,onClick:Yo},t("history"))),ne&&a.default.createElement(Ft,{key:JSON.stringify([l,h,g,E]),sessionId:l,repositoryId:h,rpc:o,t,onRediscover:ke})),a.default.createElement("div",{className:"vcs-body",hidden:ne,"aria-label":t("workspaceView")},a.default.createElement("aside",{className:"vcs-files"},a.default.createElement("div",{className:"vcs-filter"},a.default.createElement("input",{ref:ze,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:le,onChange:d=>rt(d.target.value)}),(le||We!=="all")&&a.default.createElement("button",{className:"vcs-clear-filter",onClick:Zt},t("clearFilters"))),a.default.createElement("div",{className:"vcs-status-filter","aria-label":t("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(d=>a.default.createElement("button",{key:d,"aria-pressed":We===d,onClick:()=>Gt(d)},t(d==="all"?"allFiles":Go[d]||"M")," ",a.default.createElement("small",null,$o[d]||0)))),a.default.createElement("div",{className:"vcs-count"},a.default.createElement("span",null,Ae.length," ",t("files")),a.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),a.default.createElement("button",{"aria-pressed":Ee,onClick:()=>Vt(!Ee)},t(Ee?"tree":"list"))),Ee&&a.default.createElement("div",{className:"vcs-tree-actions"},a.default.createElement("button",{onClick:()=>Rt(!0)},t("expandAll")),a.default.createElement("button",{onClick:()=>Rt(!1)},t("collapseAll")),a.default.createElement("button",{onClick:Xo,disabled:!ye},t("revealSelected"))),a.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:dt,onKeyDown:Zo},Fe.map(d=>{let B=d.repository;return a.default.createElement("section",{className:"vcs-repository",key:B.id,"aria-label":Je(B,t("workspaceRoot"))},a.default.createElement("div",{className:"vcs-repository-heading",title:B.root},a.default.createElement("strong",null,Je(B,t("workspaceRoot"))),a.default.createElement("small",null,B.type==="svn"?t("svnBase"):t(tt(B,s)))),d.error?a.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},d.error,a.default.createElement("button",{onClick:Ye},t("rescan"))):b[B.id]?Ee?a.default.createElement(ro,{node:Tt(d.changes),repository:B}):d.changes.map(q=>a.default.createElement(oo,{key:qe(B.id,q.id),entry:q})):a.default.createElement("div",{className:"vcs-message"},t("loading")),!d.error&&b[B.id]&&!d.changes.length&&a.default.createElement("div",{className:"vcs-message"},t(le?"emptySearch":"clean")))}),!Fe.length&&a.default.createElement("div",{className:"vcs-message"},de?t("loading"):ie||t(l?"noRepo":"noSession"),ie&&a.default.createElement("button",{onClick:Ye},t("rescan"))))),a.default.createElement("main",{className:"vcs-detail"},a.default.createElement("div",{className:"vcs-filehead"},a.default.createElement("strong",{title:k?.path||ye?.path},Ce?Je(Ce,t("workspaceRoot"))+" / ":"",k?.path||ye?.path||t("pick")),a.default.createElement("button",{className:"vcs-copy-path",disabled:!(k?.path||ye?.path),onClick:Qo},t(_?"copied":"copyPath")),_&&a.default.createElement("span",{className:"vcs-sr-only",role:"status"},t("pathCopied")),a.default.createElement("span",{className:"vcs-spacer"}),k&&!k.binary&&ce&&a.default.createElement(a.default.Fragment,null,a.default.createElement("span",{className:"vcs-add"},"+",at.added),a.default.createElement("span",{className:"vcs-del"},"\u2212",at.deleted))),se&&a.default.createElement("div",{className:"vcs-notice",role:"status"},t("fallback")," ",a.default.createElement("button",{onClick:()=>Jt(d=>d+1)},t("retry")),a.default.createElement("details",null,a.default.createElement("summary",null,t("diagnostics")),se)),k&&a.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},a.default.createElement("span",{className:"vcs-context-status","data-status":Te(k)},t(Te(k))),k.oldPath&&a.default.createElement("span",{className:"vcs-context-rename",title:k.oldPath+" \u2192 "+k.path},k.oldPath," ",a.default.createElement("b",null,"\u2192")," ",k.path),a.default.createElement("span",null,k.left.label||"\u2014"," ",a.default.createElement("b",null,"\u2194")," ",k.right.label||"\u2014"),(k.left.encoding||k.right.encoding)&&a.default.createElement("span",null,t("encoding"),": ",k.left.encoding||"\u2014"," / ",k.right.encoding||"\u2014")),k&&Ce?.type==="git"&&a.default.createElement(Ge,{key:JSON.stringify([l,u?.cwd,G.repositoryId,s,G.id,m,ge]),workspace:!0,sessionId:l,repositoryId:G.repositoryId,mode:s,id:G.id,rpc:o,t,onRediscover:ke}),Ce?.type==="git"&&(Le||k?.notice?.includes("2 MiB"))&&a.default.createElement("div",{className:"vcs-notice"},a.default.createElement("span",null,t("workspaceLargeScope")),a.default.createElement("button",{onClick:()=>{He.current?.abort(),X(null),_t(Le?null:{key:mt,status:ge})}},t(Le?"largeClose":"largeLoad")),Le&&me&&a.default.createElement("button",{onClick:()=>zo(d=>d+1)},t("retry"))),k?.large&&a.default.createElement("p",{role:"status"},t(se?"largeFallback":zt==="complete"?"diffComplete":zt==="incomplete"?"diffIncomplete":"diffPending")),k?.notice&&a.default.createElement("div",{className:"vcs-notice"},k.notice),k?.submodule&&a.default.createElement("p",{role:"status"},t("submoduleScope")),k?.status==="conflicted"&&Ce?.type==="git"&&a.default.createElement(wt,{key:JSON.stringify([l,G.repositoryId,s,G.id,m]),sessionId:l,repositoryId:G.repositoryId,mode:s,id:G.id,rpc:o,t,onRediscover:ke}),vt.length>0&&a.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(d=>a.default.createElement("button",{key:d,"aria-pressed":_e===d,onClick:()=>Me(d)},t(d),d==="properties"?" ("+vt.length+")":""))),a.default.createElement("div",{className:"vcs-labels"},a.default.createElement("span",null,k?.left.label||"\u2014",k?.left.encoding?" \xB7 "+k.left.encoding:""),a.default.createElement("span",null,k?.right.label||"\u2014",k?.right.encoding?" \xB7 "+k.right.encoding:"")),a.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!Pe||_e!=="content",style:_e==="properties"?{display:"none"}:void 0},a.default.createElement("div",{className:"vcs-editor",ref:$t,style:se?{display:"none"}:void 0}),se&&k&&!k.binary&&!Pe&&a.default.createElement(je,{comparison:k,labels:Qe(t)}),Pe&&a.default.createElement("div",{className:"vcs-message "+(ie||me||se?"vcs-error":""),role:"status"},Pe,(ie||me||se)&&a.default.createElement("button",{onClick:()=>se?Jt(d=>d+1):Ye()},t(se?"retry":"rescan")))),_e==="properties"&&a.default.createElement("div",{className:"vcs-properties"},a.default.createElement("table",null,a.default.createElement("thead",null,a.default.createElement("tr",null,a.default.createElement("th",null,t("properties")),a.default.createElement("th",null,k?.left.label||t("before")),a.default.createElement("th",null,k?.right.label||t("after")))),a.default.createElement("tbody",null,vt.map(d=>a.default.createElement("tr",{key:d},a.default.createElement("th",null,d),a.default.createElement("td",null,Ne.left?.[d]??"\u2014"),a.default.createElement("td",null,Ne.right?.[d]??"\u2014")))))),a.default.createElement("footer",{className:"vcs-toolbar"},a.default.createElement("button",{disabled:!ce,"aria-pressed":De,onClick:()=>qo(!De)},t(De?"side":"inline")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ce,checked:st,onChange:d=>Jo(d.target.checked)}),t("whitespace")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ce,checked:nt,onChange:d=>Io(d.target.checked)}),t("wrap")),a.default.createElement("span",{className:"vcs-spacer"}),ce&&a.default.createElement("span",null,at.count," ",t("changes")),a.default.createElement("button",{disabled:!ce||!k||!!Pe,onClick:()=>xe.current?.navigate("previous")},t("previous")),a.default.createElement("button",{disabled:!ce||!k||!!Pe,onClick:()=>xe.current?.navigate("next")},t("next")),ht.index>0&&a.default.createElement("span",{className:"vcs-review-position"},t("reviewPosition",{index:ht.index,total:ht.total})),a.default.createElement("span",{className:"vcs-toolbar-separator"}),a.default.createElement("button",{title:t("fileShortcut"),disabled:!Ae.length,onClick:()=>gt("previous")},t("previousFile")),a.default.createElement("button",{title:t("fileShortcut"),disabled:!Ae.length,onClick:()=>gt("next")},t("nextFile"))))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},i)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>t("title"),order:65},Uo))}
95
+ `;function co(e,t){return async(r,o,i)=>{let n=await e.rpc.call("/vcs-rpc",r,o,i);if(!n.ok){let d=new Error(n.error?.message||String(n.error||t()));throw d.code=n.error?.code,d}return n.value}}function Ct(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let t=0,r=[];function o(){for(;t<e&&r.length;){let i=r.shift();if(i.signal?.removeEventListener("abort",i.abort),i.signal?.aborted){i.reject(new Error("Aborted"));continue}t++,Promise.resolve().then(()=>{if(i.signal?.aborted)throw new Error("Aborted");return i.run()}).then(i.resolve,i.reject).finally(()=>{t--,o()})}}return(i,n)=>new Promise((d,f)=>{let l={run:i,signal:n,resolve:d,reject:f,abort:null};if(l.abort=()=>{let s=r.indexOf(l);s>=0&&(r.splice(s,1),f(new Error("Aborted")))},n?.aborted){f(new Error("Aborted"));return}n?.addEventListener("abort",l.abort,{once:!0}),r.push(l),o()})}var oe=ee(require("react"),1);function po(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function uo(e="",t=""){let r=po(e),o=po(t),i=0;for(;i<r.length&&i<o.length&&r[i]===o[i];)i++;let n=0;for(;n<r.length-i&&n<o.length-i&&r[r.length-n-1]===o[o.length-n-1];)n++;let d=r.length-n,f=o.length-n,l=d-i,s=f-i,p=l&&s?(l+1)*(s+1):0,m=p>2e5,N=[],h=0;function E(u,x){h++,!(N.length>=2e3)&&N.push({left:u===null?null:{number:u+1,text:r[u]},right:x===null?null:{number:x+1,text:o[x]},kind:u===null?"insert":x===null?"delete":r[u]===o[x]?"equal":"replace"})}for(let u=0;u<i;u++)E(u,u);if(m||!l||!s)for(let u=0;u<Math.max(l,s);u++)E(u<l?i+u:null,u<s?i+u:null);else{let u=s+1,x=new Uint32Array(p);for(let g=l-1;g>=0;g--)for(let w=s-1;w>=0;w--)x[g*u+w]=r[i+g]===o[i+w]?x[(g+1)*u+w+1]+1:Math.max(x[(g+1)*u+w],x[g*u+w+1]);let b=0,y=0;for(;b<l||y<s;)b<l&&y<s&&r[i+b]===o[i+y]?E(i+b++,i+y++):b<l&&(y===s||x[(b+1)*u+y]>=x[b*u+y+1])?E(i+b++,null):E(null,i+y++)}for(let u=0;u<n;u++)E(d+u,f+u);return{rows:N,approximate:m,truncated:h>N.length,totalRows:h,omittedRows:h-N.length,leftLineCount:r.length,rightLineCount:o.length,lcsCells:m?0:p}}var hr={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."},Nt={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},gr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},vr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},yr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Ve({comparison:e,labels:t={}}){let r=e?.left?.text??"",o=e?.right?.text??"",i=(0,oe.useMemo)(()=>uo(r,o),[r,o]),n=f=>t[f]??hr[f],d=(f,l,s)=>{let p=f&&s!=="equal";return oe.default.createElement("td",{style:{...Nt,background:p?l==="left"?"#d6454520":"#259b4920":void 0}},oe.default.createElement("div",{style:gr},oe.default.createElement("span",{style:vr},f?.number??""),oe.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},p?l==="left"?"\u2212":"+":""),oe.default.createElement("pre",{style:yr},f?.text??"")))};return oe.default.createElement("section",{className:"vcs-text-comparison","aria-label":n("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},i.approximate&&oe.default.createElement("div",{role:"status",style:{padding:8}},n("approximate")),i.truncated&&oe.default.createElement("div",{role:"status",style:{padding:8}},n("truncated")," (",2e3," / ",i.totalRows,")"),oe.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},oe.default.createElement("thead",null,oe.default.createElement("tr",null,oe.default.createElement("th",{scope:"col",style:{...Nt,padding:8,overflowWrap:"anywhere"}},e?.left?.label||n("before")),oe.default.createElement("th",{scope:"col",style:{...Nt,padding:8,overflowWrap:"anywhere"}},e?.right?.label||n("after")))),oe.default.createElement("tbody",null,i.rows.map((f,l)=>oe.default.createElement("tr",{key:l,"data-kind":f.kind},d(f.left,"left",f.kind),d(f.right,"right",f.kind))))),!i.rows.length&&oe.default.createElement("p",{style:{padding:8}},n("empty")))}var I=ee(require("react"),1);function fo(e,{width:t,height:r,signal:o,timeoutMs:i=1e4,createURL:n=l=>URL.createObjectURL(l),revokeURL:d=l=>URL.revokeObjectURL(l),createImage:f=()=>new Image}={}){return new Promise((l,s)=>{if(o?.aborted){s(o.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(t)||!Number.isInteger(r)||t<1||r<1||t>8192||r>8192||t*r>16e6||!Number.isFinite(i)||i<=0){s(new Error("Invalid image preview"));return}let p,m,N,h=!1,E=!1,u=()=>{E||(E=!0,m&&(m.src=""),p&&d(p))},x=()=>{clearTimeout(N),o?.removeEventListener("abort",y)},b=g=>{h||(h=!0,x(),u(),s(g))},y=()=>b(o.reason||new Error("Image cancelled"));try{p=n(e),m=f(),o?.addEventListener("abort",y,{once:!0}),N=setTimeout(()=>b(new Error("Image decode timed out")),i),m.src=p,Promise.resolve(m.decode()).then(()=>{if(!h){if(o?.aborted){y();return}if(m.naturalWidth!==t||m.naturalHeight!==r){b(new Error("Image dimensions mismatch"));return}h=!0,x(),l({url:p,dispose:u})}},b)}catch(g){b(g)}})}function br({side:e,sessionId:t,repositoryId:r,commit:o,parentIndex:i,base:n,target:d,workspace:f=!1,mode:l,id:s,rpc:p,t:m,onRediscover:N}){let[h,E]=(0,I.useState)(null),[u,x]=(0,I.useState)(""),[b,y]=(0,I.useState)(0);return(0,I.useEffect)(()=>{let g=new AbortController,w;return E(null),x(""),(async()=>{let H=await p(f?"vcs/workspace-image":n?"vcs/revision-image":"vcs/commit-image",f?{sessionId:t,repositoryId:r,mode:l,id:s,side:e}:n?{sessionId:t,repositoryId:r,base:n,target:d,id:s,side:e}:{sessionId:t,repositoryId:r,commit:o,parentIndex:i,id:s,side:e},g.signal);if(g.signal.aborted)return;if(H.absent){E(H);return}if(!["image/png","image/jpeg","image/webp"].includes(H.mime)||typeof H.base64!="string"||H.base64.length>2796204||!Number.isInteger(H.bytes)||H.bytes<1||H.bytes>2097152)throw Error(m("imageInvalid"));let S=atob(H.base64);if(S.length!==H.bytes)throw Error(m("imageInvalid"));let C=new Blob([Uint8Array.from(S,v=>v.charCodeAt(0))],{type:H.mime});if(w=await fo(C,{width:H.width,height:H.height,signal:g.signal}),g.signal.aborted){w.dispose();return}E({...H,url:w.url})})().catch(H=>{g.signal.aborted||(x(H.message),H.code==="vcs/rediscover-required"&&N())}),()=>{g.abort(),w?.dispose()}},[e,t,r,o,i,n,d,f,l,s,b]),I.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":m(e==="left"?"imageBefore":"imageAfter")},I.default.createElement("h5",null,m(e==="left"?"imageBefore":"imageAfter")),u?I.default.createElement("p",{role:"alert"},u," ",I.default.createElement("button",{onClick:()=>y(g=>g+1)},m("retry"))):h?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,I.default.createElement("code",null,h.commit)," \xB7 ",h.path),h.absent?I.default.createElement("p",null,m("imageAbsent")):I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,h.mime,h.encoding?" \xB7 "+h.encoding:""," \xB7 ",h.width," \xD7 ",h.height," \xB7 ",h.bytes," B"),I.default.createElement("img",{src:h.url,alt:h.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),h.metadataStripped&&I.default.createElement("p",null,m("imageMetadata")))):I.default.createElement("p",{role:"status"},m("loading")))}function qe(e){let[t,r]=(0,I.useState)(!1);return I.default.createElement("div",null,I.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("imageCompare")),t&&I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,e.t("imageScope")),I.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(o=>I.default.createElement(br,{key:o,...e,side:o})))))}var q=ee(require("react"),1);var R=ee(require("react"),1);function Re(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var me=require("react");function mo({load:e,node:t,comparison:r,key:o,single:i=!1,onReady:n=()=>{},onError:d=()=>{},onComputation:f=()=>{}}){let l=new AbortController,s,p=!1,m=()=>{let h=s;s=void 0,h?.dispose()};return{done:Promise.resolve().then(()=>(l.signal.throwIfAborted(),e(l.signal))).then(h=>{p||(s=h.createDiff(t,{single:i,onComputation:E=>{p||f(E)}}),s.setContent(r,o),p||n(s))}).catch(h=>{try{m()}finally{p||d(h)}}),dispose(){p||(p=!0,l.abort(),m())}}}async function et(e,{signal:t,fetcher:r=fetch,importer:o=i=>import(i)}={}){let i=await r(e,{credentials:"same-origin",cache:"no-cache",signal:t});if(!i.ok)throw new Error("Editor resource HTTP "+i.status+" ("+e+"). "+(i.status===401?"Refresh the authenticated DSH page.":i.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let n=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(n))throw new Error("Editor resource returned "+(n||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),t?.throwIfAborted(),o(e)}var tt="0.3.94";function ho({comparison:e,identity:t,enabled:r,single:o,line:i,sideBySide:n,ignoreWhitespace:d,wrap:f}){let l=(0,me.useRef)(null),s=(0,me.useRef)(null),[p,m]=(0,me.useState)(!1),[N,h]=(0,me.useState)(""),[E,u]=(0,me.useState)("pending");return(0,me.useEffect)(()=>{if(m(!1),u("pending"),h(""),!r)return;let x=g=>new URL("vcs-assets/"+g,document.baseURI).href,b=document.createElement("link");b.rel="stylesheet",b.href=x("editor.css"),document.head.appendChild(b);let y=mo({node:l.current,comparison:e,key:t,single:o,load:g=>et(x("editor.js")+"?v="+encodeURIComponent(tt)+"&retry=0",{signal:g}),onReady:g=>{s.current=g,m(!0)},onError:g=>h(g.message),onComputation:u});return()=>{s.current=null;try{y.dispose()}finally{b.remove()}}},[r,e,t,o]),(0,me.useEffect)(()=>{p&&o&&i&&s.current?.revealLine(i)},[p,o,i]),(0,me.useEffect)(()=>{p&&s.current?.options({sideBySide:n,ignoreWhitespace:d,wrap:f})},[p,n,d,f]),{node:l,viewer:s,ready:p,error:N,computation:E}}function he({comparison:e,identity:t,t:r,single:o=!1,line:i=null}){let[n,d]=(0,R.useState)(!0),[f,l]=(0,R.useState)(!1),[s,p]=(0,R.useState)(!1),[m,N]=(0,R.useState)(!0),{node:h,viewer:E,ready:u,error:x,computation:b}=ho({comparison:e,identity:t,enabled:m,single:o,line:i,sideBySide:n,ignoreWhitespace:f,wrap:s});return R.default.createElement("div",null,R.default.createElement("button",{"aria-pressed":m,onClick:()=>N(y=>!y)},r(m?"historyBasic":"historyAdvanced")),u&&!o&&R.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},R.default.createElement("button",{"aria-pressed":n,onClick:()=>d(y=>!y)},r(n?"side":"inline")),R.default.createElement("label",null,R.default.createElement("input",{type:"checkbox",checked:f,onChange:y=>l(y.target.checked)}),r("whitespace")),R.default.createElement("label",null,R.default.createElement("input",{type:"checkbox",checked:s,onChange:y=>p(y.target.checked)}),r("wrap")),R.default.createElement("button",{onClick:()=>E.current?.navigate("previous")},r("previous")),R.default.createElement("button",{onClick:()=>E.current?.navigate("next")},r("next"))),m&&!u&&!x&&R.default.createElement("p",{role:"status"},r("loading")),e.large&&!o&&u&&R.default.createElement("p",{role:"status"},r(b==="complete"?"diffComplete":b==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!u&&R.default.createElement("p",{role:"status"},r("largeFallback")),x&&R.default.createElement("p",{role:"status"},r("fallback")," ",x),R.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},R.default.createElement("div",{ref:h,style:{position:"absolute",inset:0,visibility:u?"visible":"hidden"},"aria-hidden":!u}),!u&&R.default.createElement(Ve,{comparison:e,labels:Re(r)})))}function Et({sessionId:e,repositoryId:t,mode:r,id:o,rpc:i,t:n,onRediscover:d}){let[f,l]=(0,q.useState)(null),[s,p]=(0,q.useState)(""),[m,N]=(0,q.useState)(0),[h,E]=(0,q.useState)(1),[u,x]=(0,q.useState)(3);(0,q.useEffect)(()=>{let v=new AbortController;return l(null),p(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:r,id:o},v.signal).then(J=>{v.signal.aborted||l(J)}).catch(J=>{v.signal.aborted||(p(J.message),J.code==="vcs/rediscover-required"&&d())}),()=>v.abort()},[e,t,r,o,m]);let b={1:n("conflictStage1"),2:n("conflictStage2"),3:n("conflictStage3")},y=n("conflictStageMissing"),g=b[h],w=b[u],H=(0,q.useMemo)(()=>{if(!f)return null;let v=k=>f.stages.find(X=>X.stage===k),J=k=>{let X=v(k);return!X||!X.present?{text:"",label:b[k]}:{text:X.text,label:b[k],...X.binary?{binary:!0}:{},...X.encoding?{encoding:X.encoding}:{},...X.notice?{notice:X.notice}:{}}},be=J(h),G=J(u),re=[be.notice,G.notice].filter(Boolean);return v(h)?.present&&v(u)?.present||re.push(y),{path:f.path,left:be,right:G,binary:!!(be.binary||G.binary),...re.length?{notice:[...new Set(re)].join(" \xB7 ")}:{}}},[f,h,u,g,w,y]);if(s)return q.default.createElement("section",{"aria-label":n("conflictStages")},q.default.createElement("h4",null,n("conflictStages")),q.default.createElement("p",{role:"alert"},s," ",q.default.createElement("button",{onClick:()=>N(v=>v+1)},n("retry"))));if(!f||!H)return q.default.createElement("section",{"aria-label":n("conflictStages")},q.default.createElement("h4",null,n("conflictStages")),q.default.createElement("p",{role:"status"},n("loading")));let S=v=>f.stages.find(J=>J.stage===v),C=H.binary&&!H.left.text&&!H.right.text;return q.default.createElement("section",{"aria-label":n("conflictStages")},q.default.createElement("h4",null,n("conflictStages")),q.default.createElement("p",null,n("conflictStagesScope")),q.default.createElement("ul",null,[1,2,3].map(v=>q.default.createElement("li",{key:v},q.default.createElement("code",null,b[v])," \xB7 ",S(v)?.present?n("conflictStagePresent"):n("conflictStageAbsent"),S(v)?.kind==="gitlink"&&" \xB7 "+n("conflictStageGitlink"),S(v)?.kind==="symlink"&&" \xB7 "+n("conflictStageSymlink"),S(v)?.present&&S(v)?.notice&&" \xB7 "+S(v).notice))),q.default.createElement("label",null,n("conflictStageLeft")," ",q.default.createElement("select",{"aria-label":n("conflictStageLeft"),value:h,onChange:v=>E(Number(v.target.value))},[1,2,3].map(v=>q.default.createElement("option",{key:v,value:v},b[v])))),q.default.createElement("label",null,n("conflictStageRight")," ",q.default.createElement("select",{"aria-label":n("conflictStageRight"),value:u,onChange:v=>x(Number(v.target.value))},[1,2,3].map(v=>q.default.createElement("option",{key:v,value:v},b[v])))),H.notice&&q.default.createElement("p",{role:"status"},H.notice),C?q.default.createElement("p",{role:"status"},n("binary")):q.default.createElement(he,{key:JSON.stringify([o,h,u,f.snapshot]),comparison:H,identity:JSON.stringify([e,t,r,o,h,u,f.snapshot]),t:n}))}var go=ee(require("react"),1);function Ht({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let r=e.checkout,o=[];e.pointerMoved&&o.push(t("submodulePointerMoved")),(e.dirty||e.untracked)&&o.push(t("submoduleDirty"));let i=[e.recorded+" \xB7 "+t("submoduleCheckout_"+r),...o].join(" \xB7 ");return go.default.createElement("span",{className:"vcs-submodule","data-checkout":r,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:i},t("submoduleBadge")," ",e.recorded.slice(0,10),o.length?` \xB7 ${o.join(", ")}`:"")}var Y=ee(require("react"),1);function At(e){return Y.default.createElement(wr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function wr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,d]=(0,Y.useState)(!1),[f,l]=(0,Y.useState)(null),[s,p]=(0,Y.useState)(""),[m,N]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{if(!n)return;let h=new AbortController;return l(null),p(""),r("vcs/svn-identity",{sessionId:e,repositoryId:t},h.signal).then(E=>{h.signal.aborted||l(E)}).catch(E=>{h.signal.aborted||(p(E.message),E.code==="vcs/rediscover-required"&&i())}),()=>h.abort()},[n,e,t,m]),Y.default.createElement("section",null,Y.default.createElement("button",{"aria-expanded":n,onClick:()=>d(h=>!h)},o("svnIdentity")),n&&Y.default.createElement(Y.default.Fragment,null,Y.default.createElement("p",null,o("svnOfflineIdentity")),s?Y.default.createElement("p",{role:"alert"},s," ",Y.default.createElement("button",{onClick:()=>N(h=>h+1)},o("retry"))):f?Y.default.createElement(Y.default.Fragment,null,Y.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(h=>Y.default.createElement(Y.default.Fragment,{key:h},Y.default.createElement("dt",null,h),Y.default.createElement("dd",null,Y.default.createElement("code",null,f[h]))))),Y.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))):Y.default.createElement("p",{role:"status"},o("loading"))))}function ot(e,t,{now:r=Date.now,schedule:o=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=r()||e-r()>3e5)throw Error("Invalid SVN consent expiry");let n=!0,d=o(()=>{n&&(n=!1,t())},e-r());return()=>{n&&(n=!1,i(d))}}function vo(e,t=Date.now()){if(!e||typeof e.token!="string"||!/^[a-f0-9]{64}$/.test(e.token)||typeof e.snapshot!="string"||!/^(0|[1-9][0-9]*)$/.test(e.snapshot)||BigInt(e.snapshot)>9223372036854775807n||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=t||e.expiresAt-t>3e5)throw Error("Invalid SVN consent response");return e}var te=ee(require("react"),1);var V=ee(require("react"),1);function Lt(e){return V.default.createElement(Sr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Sr({sessionId:e,repositoryId:t,rpc:r,t:o,onApproved:i,onRediscover:n}){let[d,f]=(0,V.useState)(!1),[l,s]=(0,V.useState)(null),[p,m]=(0,V.useState)(!1),[N,h]=(0,V.useState)(""),[E,u]=(0,V.useState)(!1),[x,b]=(0,V.useState)(0);(0,V.useEffect)(()=>{if(!d)return;let w=new AbortController;return s(null),m(!1),h(""),u(!0),r("vcs/svn-describe",{sessionId:e,repositoryId:t},w.signal).then(H=>{w.signal.aborted||s(H)}).catch(H=>{w.signal.aborted||(h(H.message),H.code==="vcs/rediscover-required"&&n())}).finally(()=>{w.signal.aborted||u(!1)}),()=>w.abort()},[d,e,t,x]);let[y,g]=(0,V.useState)(0);return(0,V.useEffect)(()=>{if(!d||!l||l.expiresAt===void 0)return;let w=()=>{s(null),m(!1),g(0),u(!1),h(o("svnOfferExpired"))};try{return ot(l.expiresAt,w)}catch{w()}},[d,l]),(0,V.useEffect)(()=>{if(!y||!d||!l)return;let w=new AbortController;return u(!0),h(""),r("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:l.offer,explicit:!0},w.signal).then(H=>{w.signal.aborted||i(H)}).catch(H=>{w.signal.aborted||(h(H.message),m(!1),H.code==="vcs/rediscover-required"&&n())}).finally(()=>{w.signal.aborted||u(!1)}),()=>w.abort()},[y,d,l]),V.default.createElement("section",null,V.default.createElement("button",{"aria-expanded":d,onClick:()=>{g(0),f(w=>!w)}},o("svnConsentReview")),d&&V.default.createElement(V.default.Fragment,null,V.default.createElement("p",null,o("svnConsentScope")),N&&V.default.createElement("p",{role:"alert"},N," ",V.default.createElement("button",{disabled:E,onClick:()=>{g(0),b(w=>w+1)}},o("retry"))),l&&V.default.createElement(V.default.Fragment,null,V.default.createElement("dl",null,["origin","root","uuid","scope"].map(w=>V.default.createElement(V.default.Fragment,{key:w},V.default.createElement("dt",null,w),V.default.createElement("dd",null,V.default.createElement("code",null,l[w]))))),l.remoteEnabled?V.default.createElement(V.default.Fragment,null,V.default.createElement("label",null,V.default.createElement("input",{type:"checkbox",checked:p,disabled:E,onChange:w=>m(w.target.checked)}),o("svnConsentExplicit")),V.default.createElement("button",{disabled:E||!p,onClick:()=>g(w=>w+1)},o("svnConsentApprove"))):V.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))),E&&V.default.createElement("p",{role:"status"},o("loading"))))}var L=ee(require("react"),1);function yo(e,{since:t,until:r}={}){let o=d=>{if(d==null||d==="")return null;if(typeof d!="string")throw new Error("Invalid SVN history date bound.");let f=d.trim();if(!f)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(f))throw new Error("Invalid SVN history date bound.");return f.slice(0,10)},i=o(t),n=o(r);return!i&&!n?e:Array.isArray(e)?e.filter(d=>{let f=d&&typeof d.date=="string"?d.date.trim():"",l=/^\d{4}-\d{2}-\d{2}/.test(f)?f.slice(0,10):"";return!(!l||i&&l<i||n&&l>n)}):[]}function Pt(e){return L.default.createElement(kr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function kr({sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:d}){let[f,l]=(0,L.useState)(o),[s,p]=(0,L.useState)(null),[m,N]=(0,L.useState)(null),[h,E]=(0,L.useState)(""),[u,x]=(0,L.useState)(0),[b,y]=(0,L.useState)(""),[g,w]=(0,L.useState)("");(0,L.useEffect)(()=>{let C=new AbortController;return p(null),N(null),E(""),i("vcs/svn-log",{sessionId:e,repositoryId:t,token:r,snapshot:o,cursor:f,limit:50},C.signal).then(v=>{C.signal.aborted||p(v)}).catch(v=>{C.signal.aborted||(E(v.message),v.code==="vcs/rediscover-required"&&d())}),()=>C.abort()},[f,u]);let H=s?s.entries:[],S="";try{H=yo(s?s.entries:[],{since:b,until:g})}catch(C){S=C.message}return L.default.createElement("section",null,L.default.createElement("p",null,n("svnHistoryScope")," \xB7 r",o),L.default.createElement("p",null,n("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((C,v)=>L.default.createElement("label",{key:C},n(C)," ",L.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":n(C),value:v?g:b,onChange:J=>v?w(J.target.value):y(J.target.value)}))),S&&L.default.createElement("p",{role:"alert"},S),h?L.default.createElement("p",{role:"alert"},h," ",L.default.createElement("button",{onClick:()=>x(C=>C+1)},n("retry"))):s?L.default.createElement(L.default.Fragment,null,L.default.createElement("ol",null,H.map(C=>L.default.createElement("li",{key:C.revision},L.default.createElement("button",{onClick:()=>N(C.revision)},"r",C.revision," \xB7 ",C.message)))),!H.length&&L.default.createElement("p",{role:"status"},n("historyNoMatch")),s.nextRevision!==null&&L.default.createElement("button",{onClick:()=>l(s.nextRevision)},n("historyMore"))):L.default.createElement("p",{role:"status"},n("loading")),m&&L.default.createElement(Cr,{key:m,sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:n,onRediscover:d,revision:m}))}function Cr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:d,onRediscover:f}){let[l,s]=(0,L.useState)(null),[p,m]=(0,L.useState)(null),[N,h]=(0,L.useState)(""),[E,u]=(0,L.useState)(0);return(0,L.useEffect)(()=>{let x=new AbortController;return s(null),m(null),h(""),n("vcs/svn-detail",{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i},x.signal).then(b=>{x.signal.aborted||s(b)}).catch(b=>{x.signal.aborted||(h(b.message),b.code==="vcs/rediscover-required"&&f())}),()=>x.abort()},[E]),L.default.createElement("section",null,N?L.default.createElement("p",{role:"alert"},N," ",L.default.createElement("button",{onClick:()=>u(x=>x+1)},d("retry"))):l?L.default.createElement(L.default.Fragment,null,L.default.createElement("p",null,l.message),l.changes.map(x=>L.default.createElement("div",{key:x.id},L.default.createElement("span",null,x.action," ",x.path),x.kind==="file"&&L.default.createElement(L.default.Fragment,null,L.default.createElement("button",{onClick:()=>m({id:x.id,mode:"compare"})},d("svnHistoricalDiff")),L.default.createElement("button",{onClick:()=>m({id:x.id,mode:"trace"})},d("fileHistory")),x.copyFromPath&&x.copyFromRevision&&L.default.createElement("button",{onClick:()=>m({id:x.id,mode:"copytrace"})},d("svnCopyHistory")," \xB7 ",x.copyFromPath," @r",x.copyFromRevision),x.copySourceOutsideScope&&L.default.createElement("span",null,d("svnCopyOutside")))))):L.default.createElement("p",{role:"status"},d("loading")),p&&L.default.createElement(Nr,{key:JSON.stringify(p),sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:d,onRediscover:f,...p}))}function Nr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:n,t:d,onRediscover:f,id:l,mode:s}){let[p,m]=(0,L.useState)(null),[N,h]=(0,L.useState)(null),[E,u]=(0,L.useState)(""),[x,b]=(0,L.useState)(0);return(0,L.useEffect)(()=>{let y=new AbortController;return m(null),u(""),n("vcs/svn-"+s,{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,id:l,...N===null?{}:{cursor:N}},y.signal).then(g=>{y.signal.aborted||m(g)}).catch(g=>{y.signal.aborted||(u(g.message),g.code==="vcs/rediscover-required"&&f())}),()=>y.abort()},[N,x]),E?L.default.createElement("p",{role:"alert"},E," ",L.default.createElement("button",{onClick:()=>b(y=>y+1)},d("retry"))):p?s==="compare"?p.binary?L.default.createElement("p",null,d("binary")):L.default.createElement(he,{comparison:p,identity:JSON.stringify([e,t,o,i,l]),t:d}):L.default.createElement("section",null,L.default.createElement("p",null,d(s==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",p.path," \xB7 peg r",p.pegRevision),L.default.createElement("ol",null,p.entries.map(y=>L.default.createElement("li",{key:y.revision},"r",y.revision," \xB7 ",y.message))),p.nextRevision!==null&&L.default.createElement("button",{onClick:()=>h(p.nextRevision)},d("historyMore"))):L.default.createElement("p",{role:"status"},d("loading"))}function Dt(e){return te.default.createElement(Er,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Er({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,d]=(0,te.useState)(null),[f,l]=(0,te.useState)(!1),[s,p]=(0,te.useState)(""),[m,N]=(0,te.useState)(0);(0,te.useEffect)(()=>{if(n)return()=>{Promise.resolve().then(()=>r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token})).catch(()=>{})}},[n,e,t]),(0,te.useEffect)(()=>{if(n)try{return ot(n.expiresAt,()=>{d(null),N(0),l(!1),p(o("svnExpired"))})}catch{d(null),p(o("svnExpired"))}},[n]),(0,te.useEffect)(()=>{if(!m||!n)return;let u=new AbortController;return l(!0),p(""),r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:n.token},u.signal).then(()=>{u.signal.aborted||d(null)}).catch(x=>{u.signal.aborted||(p(x.message),x.code==="vcs/rediscover-required"&&i())}).finally(()=>{u.signal.aborted||l(!1)}),()=>u.abort()},[m,n]);let h=u=>{try{vo(u),p(""),N(0),d(u)}catch(x){p(x.message)}},E=async(...u)=>{try{return await r(...u)}catch(x){throw x.code==="vcs/svn-consent-required"&&!u[2]?.aborted&&(d(null),N(0),p(o("svnExpired"))),x}};return te.default.createElement("section",null,!n&&s&&te.default.createElement("p",{role:"status"},s),n?te.default.createElement(te.default.Fragment,null,te.default.createElement("p",null,o("svnGrantScope")),te.default.createElement("button",{disabled:f,onClick:()=>N(u=>u+1)},o("svnRevoke")),s&&te.default.createElement("p",{role:"alert"},s),!f&&te.default.createElement(Pt,{sessionId:e,repositoryId:t,t:o,onRediscover:i,rpc:E,token:n.token,snapshot:n.snapshot})):te.default.createElement(Lt,{sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i,onApproved:h}))}var A=ee(require("react"),1);function bo(e){let t=new Map;for(let r of e){let o=t.get(r.commit);o||(o={names:[],hidden:0},t.set(r.commit,o)),o.names.length<3?o.names.push(r.name):o.hidden++}return t}var j=ee(require("react"),1);var T=ee(require("react"),1);var W=ee(require("react"),1);var z=ee(require("react"),1);function Bt(e){return z.default.createElement(Hr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function Hr({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:d}){let[f,l]=(0,z.useState)(!1),[s,p]=(0,z.useState)([0]),[m,N]=(0,z.useState)(null),[h,E]=(0,z.useState)(""),[u,x]=(0,z.useState)(0),b=s.at(-1);(0,z.useEffect)(()=>{if(!f)return;let g=new AbortController;return N(null),E(""),i("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:r,path:o,offset:b},g.signal).then(w=>{g.signal.aborted||N(w)}).catch(w=>{g.signal.aborted||(E(w.message),w.code==="vcs/rediscover-required"&&d())}),()=>g.abort()},[f,b,e,t,r,o,u]);let y=(0,z.useMemo)(()=>m?{path:o,left:{label:r,text:m.text},right:{label:r,text:m.text}}:null,[m,o,r]);return z.default.createElement("section",null,z.default.createElement("button",{"aria-expanded":f,onClick:()=>l(g=>!g)},n("segments")),f&&z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,n("segmentScope")),h?z.default.createElement("p",{role:"alert"},h," ",z.default.createElement("button",{onClick:()=>x(g=>g+1)},n("retry"))):m?z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,n("segmentBytes"),": ",m.offset,"\u2013",m.endOffset," / ",m.totalBytes," \xB7 ",z.default.createElement("code",null,m.oid)),z.default.createElement("button",{disabled:s.length===1,onClick:()=>p(g=>g.slice(0,-1))},n("previous")),z.default.createElement("button",{disabled:m.nextOffset===null,onClick:()=>p(g=>[...g,m.nextOffset])},n("next")),z.default.createElement(he,{single:!0,comparison:y,identity:JSON.stringify([e,t,r,o,b]),t:n})):z.default.createElement("p",{role:"status"},n("loading"))))}var M=ee(require("react"),1);function Ar({sessionId:e,repositoryId:t,commit:r,path:o,follow:i,since:n,until:d,rpc:f,t:l,onRediscover:s,onSelectCommit:p}){let[m,N]=(0,M.useState)({commits:[],nextOffset:null}),[h,E]=(0,M.useState)(0),[u,x]=(0,M.useState)(0),[b,y]=(0,M.useState)(!0),[g,w]=(0,M.useState)("");(0,M.useEffect)(()=>{let S=new AbortController;return y(!0),w(""),f("vcs/tree-history",{sessionId:e,repositoryId:t,commit:r,path:o,offset:h,limit:50,follow:i,...n?{since:n}:{},...d?{until:d}:{}},S.signal).then(C=>{S.signal.aborted||N(v=>({...C,commits:h?[...v.commits,...C.commits]:C.commits}))}).catch(C=>{S.signal.aborted||(w(C.message),C.code==="vcs/rediscover-required"&&s())}).finally(()=>{S.signal.aborted||y(!1)}),()=>S.abort()},[e,t,r,o,h,u,i,n,d]);let H=S=>l(S.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":S.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":S.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return M.default.createElement("section",{"aria-label":l("pathHistory"),"aria-busy":b},M.default.createElement("p",null,l("pathHistoryScope")),M.default.createElement("p",{style:{overflowWrap:"anywhere"}},M.default.createElement("code",null,m.path||o)," \xB7 ",M.default.createElement("code",null,r),m.followsRenames!==void 0&&M.default.createElement(M.default.Fragment,null," \xB7 ",l(m.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),M.default.createElement("ol",null,m.commits.map(S=>M.default.createElement("li",{key:S.id},M.default.createElement("code",{title:S.id},S.id.slice(0,10))," \xB7 ",p?M.default.createElement("button",{onClick:()=>p(S.id,S.path||o)},S.subject):S.subject,M.default.createElement("div",null,S.boundary&&M.default.createElement("span",null,H(S)," "),S.path&&M.default.createElement("code",null,S.oldPath?S.oldPath+" \u2192 ":"",S.path)," ",S.similarity!==void 0&&M.default.createElement("span",null,l("fileHistorySimilarity"),": ",S.similarity,"% \xB7 "),S.author," \xB7 ",M.default.createElement("time",{dateTime:S.date},S.date))))),b&&M.default.createElement("p",{role:"status"},l("loading")),g&&M.default.createElement("p",{role:"alert"},g," ",M.default.createElement("button",{onClick:()=>x(S=>S+1)},l("retry"))),!b&&!g&&!m.commits.length&&M.default.createElement("p",null,l("historyEmpty")),m.truncated&&M.default.createElement("p",{role:"status"},l("historyLimit")),!g&&m.nextOffset!==null&&M.default.createElement("button",{disabled:b,onClick:()=>E(m.nextOffset)},l("historyMore")))}function Mt(e){let[t,r]=(0,M.useState)(!1),[o,i]=(0,M.useState)(!1),[n,d]=(0,M.useState)(""),[f,l]=(0,M.useState)("");return M.default.createElement("div",null,M.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("pathHistory")),t&&M.default.createElement(M.default.Fragment,null,M.default.createElement("label",null,M.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),M.default.createElement("p",null,e.t("pathHistoryFollowScope")),M.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((s,p)=>M.default.createElement("label",{key:s},e.t(s)," ",M.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(s),value:p?f:n,onChange:m=>p?l(m.target.value):d(m.target.value)}))),M.default.createElement(Ar,{key:String(o),follow:o,since:n.trim()||null,until:f.trim()||null,...e})))}function Ue({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:d,onClose:f,onSelectCommit:l,line:s=null}){let[p,m]=(0,W.useState)(null),[N,h]=(0,W.useState)(""),[E,u]=(0,W.useState)(0);(0,W.useEffect)(()=>{let b=new AbortController;return m(null),h(""),i("vcs/tree-file",{sessionId:e,repositoryId:t,commit:r,path:o},b.signal).then(y=>{b.signal.aborted||m(y)}).catch(y=>{b.signal.aborted||(h(y.message),y.code==="vcs/rediscover-required"&&d())}),()=>b.abort()},[e,t,r,o,E]);let x=(0,W.useMemo)(()=>p?{path:o,left:{label:r,text:p.text||""},right:{label:r,text:p.text||""}}:null,[p,o,r]);return W.default.createElement("section",{"aria-label":n("treePreview")},W.default.createElement("h4",null,o),W.default.createElement("button",{onClick:f},n("treeClose")),W.default.createElement("p",null,W.default.createElement("code",null,r)),N?W.default.createElement("p",{role:"alert"},N," ",W.default.createElement("button",{onClick:()=>u(b=>b+1)},n("retry"))):p?W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,W.default.createElement("code",null,p.oid)," \xB7 ",n("encoding"),": ",p.encoding||"\u2014"),s&&W.default.createElement("p",{role:"status"},n("blameOriginLine"),": ",s,!p.text||s>p.text.split(`
96
+ `).length?" \xB7 "+n("blameUnmapped"):""),p.notice&&W.default.createElement("p",{role:"status"},p.notice),p.binary?W.default.createElement("p",null,n("binary")):p.text===""?W.default.createElement("p",null,n("treeEmpty")):W.default.createElement(he,{single:!0,line:s,comparison:x,identity:JSON.stringify([e,t,r,o]),t:n})):W.default.createElement("p",{role:"status"},n("loading")),W.default.createElement(Bt,{sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:d}),W.default.createElement(Mt,{key:JSON.stringify([e,t,r,o]),sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:n,onRediscover:d,onSelectCommit:l}))}function xo(e=""){let t=[{path:"",name:"/"}];if(e){let r="";for(let o of e.split("/"))r=r?r+"/"+o:o,t.push({path:r,name:o})}return t}function wo(e,t="",r=""){let o=t?t+"/":"",i=r.toLowerCase();return e.filter(n=>{let d=n.path.slice(o.length);return n.path.startsWith(o)&&d.length>0&&!d.includes("/")&&d.toLowerCase().includes(i)}).sort((n,d)=>+(d.type==="tree")-+(n.type==="tree")||(n.path<d.path?-1:n.path>d.path?1:0))}function Lr({sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:d}){let[f,l]=(0,T.useState)(null),[s,p]=(0,T.useState)(""),[m,N]=(0,T.useState)(0),[h,E]=(0,T.useState)(""),[u,x]=(0,T.useState)(0),[b,y]=(0,T.useState)(""),[g,w]=(0,T.useState)(null);if((0,T.useEffect)(()=>{let v=new AbortController;return l(null),p(""),o("vcs/tree",{sessionId:e,repositoryId:t,commit:r},v.signal).then(J=>{v.signal.aborted||l(J)}).catch(J=>{v.signal.aborted||(p(J.message),J.code==="vcs/rediscover-required"&&n())}),()=>v.abort()},[e,t,r,m]),s)return T.default.createElement("p",{role:"alert"},s," ",T.default.createElement("button",{onClick:()=>N(v=>v+1)},i("retry")));if(!f)return T.default.createElement("p",{role:"status"},i("loading"));let H=h?h+"/":"",S=wo(f.entries,h,b),C=v=>{E(v),x(0),y(""),w(null)};return T.default.createElement("section",{"aria-label":i("historicalTree")},T.default.createElement("p",null,i("historicalTreeScope")),T.default.createElement("code",null,r),T.default.createElement("p",null,h||"/"," ",h&&T.default.createElement("button",{onClick:()=>C(h.includes("/")?h.slice(0,h.lastIndexOf("/")):"")},i("treeUp"))),T.default.createElement("nav",{"aria-label":i("treeBreadcrumbs")},xo(h).map(v=>T.default.createElement(T.default.Fragment,{key:v.path},v.path&&" / ",v.path===h?T.default.createElement("span",{"aria-current":"location"},v.name):T.default.createElement("button",{onClick:()=>C(v.path)},v.name)))),T.default.createElement("label",null,i("treeSearch")," ",T.default.createElement("input",{"aria-label":i("treeSearch"),value:b,onChange:v=>{y(v.target.value),x(0),w(null)}})),T.default.createElement("p",null,S.length," ",i("treeEntries")),!S.length&&b&&T.default.createElement("p",{role:"status"},i("emptySearch")),T.default.createElement("ul",null,S.slice(u*100,u*100+100).map(v=>T.default.createElement("li",{key:v.path},v.type==="tree"?T.default.createElement("button",{onClick:()=>C(v.path)},v.path.slice(H.length),"/"):v.type==="blob"&&["100644","100755"].includes(v.mode)?T.default.createElement("button",{"aria-pressed":g===v.path,onClick:()=>w(v.path)},v.path.slice(H.length)):T.default.createElement("span",null,v.path.slice(H.length))," \xB7 ",T.default.createElement("code",null,v.mode," ",v.type," ",T.default.createElement("span",{title:v.oid},v.oid.slice(0,10)))))),u>0&&T.default.createElement("button",{onClick:()=>{x(v=>v-1),w(null)}},i("treePrevious")),(u+1)*100<S.length&&T.default.createElement("button",{onClick:()=>{x(v=>v+1),w(null)}},i("treeNext")),g&&T.default.createElement(Ue,{key:JSON.stringify([e,t,r,g]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:d,path:g,onClose:()=>w(null)}))}function Ot(e){return T.default.createElement(Pr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Pr(e){let[t,r]=(0,T.useState)(!1);return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historicalTree")),t&&T.default.createElement(Lr,{...e}))}var K=ee(require("react"),1);var O=ee(require("react"),1);function Dr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,follow:n,since:d,until:f,rpc:l,t:s,onRediscover:p,onSelectCommit:m}){let[N,h]=(0,O.useState)({commits:[],nextOffset:null}),[E,u]=(0,O.useState)(0),[x,b]=(0,O.useState)(0),[y,g]=(0,O.useState)(!0),[w,H]=(0,O.useState)(""),S={...d?{since:d}:{},...f?{until:f}:{}};return(0,O.useEffect)(()=>{let C=new AbortController;return g(!0),H(""),l("vcs/file-history",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,offset:E,limit:50,follow:n,...S},C.signal).then(v=>{C.signal.aborted||h(J=>({...v,commits:E?[...J.commits,...v.commits]:v.commits}))}).catch(v=>{C.signal.aborted||(H(v.message),v.code==="vcs/rediscover-required"&&p())}).finally(()=>{C.signal.aborted||g(!1)}),()=>C.abort()},[e,t,r,o,i,E,x,n,d,f]),O.default.createElement("section",{"aria-label":s("fileHistory"),"aria-busy":y},O.default.createElement("p",null,s("fileHistoryScope")),O.default.createElement("p",{style:{overflowWrap:"anywhere"}},N.path," \xB7 ",O.default.createElement("code",null,r)),O.default.createElement("ol",null,N.commits.map(C=>O.default.createElement("li",{key:C.id},O.default.createElement("code",{title:C.id},C.id.slice(0,10))," \xB7 ",m?O.default.createElement("button",{onClick:()=>m(C.id,C.path||N.path)},C.subject):C.subject,O.default.createElement("div",null,C.boundary&&O.default.createElement("span",null,s(C.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":C.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":C.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),C.path&&O.default.createElement("code",null,C.oldPath?C.oldPath+" \u2192 ":"",C.path)," ",C.similarity!==void 0&&O.default.createElement("span",null,s("fileHistorySimilarity"),": ",C.similarity,"% \xB7 "),C.author," \xB7 ",O.default.createElement("time",{dateTime:C.date},C.date))))),y&&O.default.createElement("p",{role:"status"},s("loading")),w&&O.default.createElement("p",{role:"alert"},w," ",O.default.createElement("button",{onClick:()=>b(C=>C+1)},s("retry"))),!y&&!w&&!N.commits.length&&O.default.createElement("p",null,s("historyEmpty")),N.truncated&&O.default.createElement("p",{role:"status"},s("historyLimit")),!w&&N.nextOffset!==null&&O.default.createElement("button",{disabled:y,onClick:()=>u(N.nextOffset)},s("historyMore")))}function Ft(e){return O.default.createElement(Br,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Br(e){let[t,r]=(0,O.useState)(!1),[o,i]=(0,O.useState)(!1),[n,d]=(0,O.useState)(""),[f,l]=(0,O.useState)("");return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("fileHistory")),t&&O.default.createElement(O.default.Fragment,null,O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),O.default.createElement("p",null,e.t("fileHistoryFollowScope")),O.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((s,p)=>O.default.createElement("label",{key:s},e.t(s)," ",O.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(s),value:p?f:n,onChange:m=>p?l(m.target.value):d(m.target.value)}))),O.default.createElement(Dr,{key:String(o),follow:o,since:n.trim()||null,until:f.trim()||null,...e})))}var F=ee(require("react"),1);function Mr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,rpc:n,t:d,onRediscover:f,onSelectCommit:l}){let[s,p]=(0,F.useState)(null),[m,N]=(0,F.useState)(""),[h,E]=(0,F.useState)(0),[u,x]=(0,F.useState)(1),[b,y]=(0,F.useState)(null);return(0,F.useEffect)(()=>{let g=new AbortController;return p(null),N(""),y(null),n("vcs/blame",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,startLine:u,lineLimit:500},g.signal).then(w=>{g.signal.aborted||p(w)}).catch(w=>{g.signal.aborted||(N(w.message),w.code==="vcs/rediscover-required"&&f())}),()=>g.abort()},[e,t,r,o,i,h,u]),m?F.default.createElement("p",{role:"alert"},m," ",F.default.createElement("button",{onClick:()=>E(g=>g+1)},d("retry"))):s?F.default.createElement("section",{"aria-label":d("blame")},F.default.createElement("p",null,d("blameScope")),l&&F.default.createElement("p",null,d("blameNavigation")),s.notice&&F.default.createElement("p",{role:"status"},s.notice),s.truncated&&F.default.createElement("p",{role:"status"},d("blameLimit")),!s.notice&&!s.lines.length&&F.default.createElement("p",null,d("blameEmpty")),!!s.lines.length&&F.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},F.default.createElement("table",null,F.default.createElement("thead",null,F.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(g=>F.default.createElement("th",{key:g,scope:"col"},d(g))))),F.default.createElement("tbody",null,s.lines.map(g=>F.default.createElement("tr",{key:g.line},F.default.createElement("th",{scope:"row"},g.line),F.default.createElement("td",null,l?F.default.createElement("button",{title:g.commit,onClick:()=>l(g.commit,g.path||null)},F.default.createElement("code",null,g.commit.slice(0,10))):F.default.createElement("code",{title:g.commit},g.commit.slice(0,10))),F.default.createElement("td",null,g.author),F.default.createElement("td",null,g.summary),F.default.createElement("td",null,F.default.createElement("pre",{style:{margin:0}},g.text),g.path&&g.originalLine?F.default.createElement("button",{onClick:()=>y(g)},d("blameOriginLine"),": ",g.path,":",g.originalLine):F.default.createElement("span",null,d("blameUnmapped")))))))),F.default.createElement("p",null,s.startLine||u,"\u2013",s.lines.at(-1)?.line||u," / ",s.totalLines??"\u2014"),F.default.createElement("button",{disabled:u===1,onClick:()=>x(Math.max(1,u-500))},d("blamePrevious")),F.default.createElement("button",{disabled:s.nextLine==null,onClick:()=>x(s.nextLine)},d("blameNext")),b&&F.default.createElement(Ue,{key:JSON.stringify([b.commit,b.path,b.originalLine]),sessionId:e,repositoryId:t,rpc:n,t:d,onRediscover:f,onSelectCommit:l,commit:b.commit,path:b.path,line:b.originalLine,onClose:()=>y(null)})):F.default.createElement("p",{role:"status"},d("loading"))}function Tt(e){let[t,r]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("blame")),t&&F.default.createElement(Mr,{...e}))}function Je(e){return K.default.createElement(Or,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function Or({sessionId:e,repositoryId:t,commit:r,parentIndex:o,base:i,target:n,id:d,rpc:f,t:l,onRediscover:s,onSelectCommit:p}){let[m,N]=(0,K.useState)(null),[h,E]=(0,K.useState)(""),[u,x]=(0,K.useState)(0),[b,y]=(0,K.useState)(!1);return(0,K.useEffect)(()=>{let g=new AbortController;return N(null),E(""),f(i?"vcs/revision-compare":"vcs/commit-compare",i?{sessionId:e,repositoryId:t,base:i,target:n,id:d,...b?{large:!0}:{}}:{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:d,...b?{large:!0}:{}},g.signal).then(w=>{g.signal.aborted||N(w)}).catch(w=>{g.signal.aborted||(E(w.message),w.code==="vcs/rediscover-required"&&s())}),()=>g.abort()},[e,t,r,o,i,n,d,u,b]),h?K.default.createElement("p",{role:"alert"},h," ",K.default.createElement("button",{onClick:()=>x(g=>g+1)},l("retry")),b&&K.default.createElement("button",{onClick:()=>y(!1)},l("largeClose"))):m?K.default.createElement("section",null,K.default.createElement("h4",null,m.path),K.default.createElement("p",null,m.left.label," \u2194 ",m.right.label),m.notice&&K.default.createElement("p",{role:"status"},m.notice),b?K.default.createElement("p",null,l("largeScope")," ",K.default.createElement("button",{onClick:()=>y(!1)},l("largeClose"))):m.notice?.includes("2 MiB")&&K.default.createElement("p",null,l("largeScope")," ",K.default.createElement("button",{onClick:()=>y(!0)},l("largeLoad"))),m.binary?K.default.createElement("p",null,l("binary")):K.default.createElement(he,{comparison:m,identity:JSON.stringify(i?[e,t,i,n,d]:[e,t,r,o,d]),t:l}),r&&!i&&K.default.createElement(Ft,{onSelectCommit:p,key:"file-history:"+JSON.stringify([e,t,r,o,d]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:d,rpc:f,t:l,onRediscover:s}),r&&!i&&K.default.createElement(Tt,{onSelectCommit:p,key:"blame:"+JSON.stringify([e,t,r,o,d]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:d,rpc:f,t:l,onRediscover:s}),(r||i)&&K.default.createElement(qe,{key:"image:"+JSON.stringify([e,t,r,o,i,n,d]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,base:i,target:n,id:d,rpc:f,t:l,onRediscover:s})):K.default.createElement("p",{role:"status"},l("loading"),b&&K.default.createElement("button",{onClick:()=>y(!1)},l("largeClose")))}function So(e,t){if(typeof t!="string"||!t)return null;let r=e.filter(o=>o.path===t);return r.length===1&&typeof r[0].id=="string"&&r[0].id?r[0].id:null}function ko(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.id,o.author,o.subject].some(i=>i?.toLowerCase().includes(r))):e}function rt(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.path,o.oldPath].some(i=>i?.toLowerCase().includes(r))):e}function Ie(e){return j.default.createElement(Fr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Fr({sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:d,initialPath:f}){let l=(0,j.useRef)(!0),[s,p]=(0,j.useState)(null),[m,N]=(0,j.useState)(""),[h,E]=(0,j.useState)(0),[u,x]=(0,j.useState)(null),[b,y]=(0,j.useState)(""),[g,w]=(0,j.useState)(0);if((0,j.useEffect)(()=>{let S=new AbortController;return x(null),y(""),o("vcs/commit",{sessionId:e,repositoryId:t,commit:r,parentIndex:h},S.signal).then(C=>{S.signal.aborted||(x(C),l.current&&(l.current=!1,p(So(C.changes,f))))}).catch(C=>{S.signal.aborted||(y(C.message),C.code==="vcs/rediscover-required"&&n())}),()=>S.abort()},[e,t,r,h,g]),b)return j.default.createElement("p",{role:"alert"},b," ",j.default.createElement("button",{onClick:()=>w(S=>S+1)},i("retry")));if(!u)return j.default.createElement("p",{role:"status"},i("loading"));let H=rt(u.changes,m);return j.default.createElement("section",{"aria-label":i("commitDetails")},j.default.createElement("h3",null,u.subject),j.default.createElement("code",null,u.id),j.default.createElement("p",null,u.author," \xB7 ",u.date),u.committer&&u.committer!==u.author&&j.default.createElement("p",null,i("commitCommitter")," ",u.committer,u.committerDate?` \xB7 ${u.committerDate}`:""),u.signature?.signed===!0&&j.default.createElement("p",null,j.default.createElement("span",{title:i("commitSignatureUnverified")},i("commitSigned",{format:u.signature.format}))),u.messageTruncated&&j.default.createElement("p",{role:"status"},i("commitMessageLimit")),u.message&&j.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},u.message),u.parents.length>1&&j.default.createElement("label",null,i("commitParent")," ",j.default.createElement("select",{"aria-label":i("commitParent"),value:h,onChange:S=>{p(null),x(null),E(Number(S.target.value))}},u.parents.map((S,C)=>j.default.createElement("option",{key:S,value:C},C+1,": ",S.slice(0,10))))),j.default.createElement("p",null,u.parent||i("commitRoot")," \u2192 ",u.id.slice(0,10)),j.default.createElement("label",null,i("commitFileSearch")," ",j.default.createElement("input",{"aria-label":i("commitFileSearch"),value:m,onChange:S=>{N(S.target.value),p(null)}})),j.default.createElement("span",null," ",H.length," / ",u.changes.length),j.default.createElement("ul",null,H.map(S=>j.default.createElement("li",{key:S.id},j.default.createElement("button",{"aria-pressed":s===S.id,onClick:()=>p(S.id)},S.status," \xB7 ",S.oldPath?S.oldPath+" \u2192 ":"",S.path)))),!!u.changes.length&&!H.length&&j.default.createElement("p",{role:"status"},i("emptySearch")),!u.changes.length&&j.default.createElement("p",null,i("commitNoChanges")),s&&j.default.createElement(Je,{key:s,sessionId:e,repositoryId:t,commit:r,parentIndex:h,id:s,onSelectCommit:d,rpc:o,t:i,onRediscover:n}),j.default.createElement(Ot,{key:JSON.stringify([e,t,r]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:n,onSelectCommit:d}))}var Q=ee(require("react"),1);function Co(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let t=e.slice(0,200),r=new Map,o=[],i=[],n=f=>typeof f=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(f);for(let[f,l]of t.entries()){if(!l||!n(l.id)||!Array.isArray(l.parents)||r.has(l.id))throw new Error("Invalid graph node");r.set(l.id,f),o.push({id:l.id,row:f})}let d=!1;for(let f of t){let l=new Set;for(let s of f.parents){if(i.length===1e3){d=!0;break}if(!n(s)||s.length!==f.id.length||s===f.id||l.has(s))throw new Error("Invalid graph parent");l.add(s);let p=r.get(s);if(p!==void 0&&p<=r.get(f.id))throw new Error("Graph requires child-before-parent order");i.push({from:f.id,to:s,missing:p===void 0})}if(d)break}return{nodes:o,edges:i,nodesTruncated:e.length>200,edgesTruncated:d}}function No(e){let t=Array(32).fill(null),r=new Map,o=[],i=new Set,n=!1,d=s=>{if(i.has(s))return null;let p=t.indexOf(s);return p>=0?p:(p=t.indexOf(null),p<0?(n=!0,i.add(s),null):(t[p]=s,p))},f=new Map;for(let s of e.edges){if(s.missing)continue;let p=f.get(s.from)||[];p.push(s.to),f.set(s.from,p)}for(let s of e.nodes){let p=d(s.id);if(r.set(s.id,{...s,lane:p}),o.push({...s,lane:p}),p===null)continue;t[p]=null;let m=f.get(s.id)||[];for(let[N,h]of m.entries())t.includes(h)||(N===0&&t[p]===null?t[p]=h:d(h))}let l=e.edges.filter(s=>!s.missing).flatMap(s=>{let p=r.get(s.from),m=r.get(s.to);return p.lane===null||m.lane===null?[]:[{...s,start:p.row,end:m.row,fromLane:p.lane,toLane:m.lane}]});return{nodes:o,edges:l,lanesTruncated:n,laneCount:Math.max(1,...o.map(s=>(s.lane??0)+1))}}function Tr({commits:e,selected:t,onSelect:r,t:o}){let i;try{i=Co(e)}catch{return Q.default.createElement("p",{role:"alert"},o("graphInvalid"))}let n=No(i),d=n.edges,f=Math.max(100,24+18*n.laneCount),l=Math.max(40,i.nodes.length*36);return Q.default.createElement("section",{"aria-label":o("historyGraph")},Q.default.createElement("p",null,o("graphScope")),n.lanesTruncated&&Q.default.createElement("p",{role:"status"},o("graphLaneLimit")),(i.nodesTruncated||i.edgesTruncated)&&Q.default.createElement("p",{role:"status"},o("graphLimit")),Q.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},Q.default.createElement("svg",{width:f,height:l,"aria-hidden":"true",style:{flexShrink:0}},d.map(s=>{let p=s.start*36+18,m=s.end*36+18,N=12+s.fromLane*18,h=12+s.toLane*18;return Q.default.createElement("path",{key:s.from+s.to,d:"M "+N+" "+p+" C "+N+" "+(p+18)+", "+h+" "+(m-18)+", "+h+" "+m,fill:"none",stroke:"currentColor",opacity:"0.45"})}),n.nodes.filter(s=>s.lane!==null).map(s=>Q.default.createElement("circle",{key:s.id,cx:12+s.lane*18,cy:s.row*36+18,r:"4",fill:"currentColor"}))),Q.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},i.nodes.map(s=>Q.default.createElement("li",{key:s.id,style:{height:36,whiteSpace:"nowrap"}},Q.default.createElement("button",{title:s.id,"aria-current":t===s.id?!0:void 0,style:t===s.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:p=>{if(p.altKey||p.ctrlKey||p.metaKey||p.shiftKey)return;let m=p.key==="ArrowDown"?Math.min(s.row+1,i.nodes.length-1):p.key==="ArrowUp"?Math.max(0,s.row-1):p.key==="Home"?0:p.key==="End"?i.nodes.length-1:null;m!==null&&(p.preventDefault(),p.stopPropagation(),p.currentTarget.closest("ol").querySelectorAll("button")[m]?.focus())},onClick:()=>r(s.id)},Q.default.createElement("code",null,s.id.slice(0,10))," ",e[s.row].subject))))),Q.default.createElement("details",null,Q.default.createElement("summary",null,o("graphRelations")),Q.default.createElement("ul",null,i.edges.map(s=>Q.default.createElement("li",{key:s.from+s.to},Q.default.createElement("code",null,s.from)," \u2192 ",Q.default.createElement("code",null,s.to),s.missing?" \xB7 "+o("graphMissing"):"")))))}function jt(e){let[t,r]=(0,Q.useState)(!1);return Q.default.createElement("div",null,Q.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historyGraph")),t&&Q.default.createElement(Tr,{...e}))}var B=ee(require("react"),1);function jr({sessionId:e,repositoryId:t,base:r,target:o,rpc:i,t:n,onRediscover:d}){let[f,l]=(0,B.useState)(null),[s,p]=(0,B.useState)(""),[m,N]=(0,B.useState)(0),[h,E]=(0,B.useState)(null),[u,x]=(0,B.useState)("");if((0,B.useEffect)(()=>{let y=new AbortController;return l(null),p(""),E(null),i("vcs/revision-changes",{sessionId:e,repositoryId:t,base:r,target:o},y.signal).then(g=>{y.signal.aborted||l(g)}).catch(g=>{y.signal.aborted||(p(g.message),g.code==="vcs/rediscover-required"&&d())}),()=>y.abort()},[e,t,r,o,m]),s)return B.default.createElement("p",{role:"alert"},s," ",B.default.createElement("button",{onClick:()=>N(y=>y+1)},n("retry")));if(!f)return B.default.createElement("p",{role:"status"},n("loading"));let b=rt(f.changes,u);return B.default.createElement("div",null,B.default.createElement("label",null,n("commitFileSearch")," ",B.default.createElement("input",{"aria-label":n("commitFileSearch"),value:u,onChange:y=>{x(y.target.value),E(null)}})),B.default.createElement("span",null," ",b.length," / ",f.changes.length),!!f.changes.length&&!b.length&&B.default.createElement("p",{role:"status"},n("emptySearch")),!f.changes.length&&B.default.createElement("p",null,n("revisionEmpty")),B.default.createElement("ul",null,b.map(y=>B.default.createElement("li",{key:y.id},B.default.createElement("button",{"aria-pressed":h===y.id,onClick:()=>E(y.id)},y.status," \xB7 ",y.oldPath?y.oldPath+" \u2192 ":"",y.path)))),h&&B.default.createElement(Je,{key:h,sessionId:e,repositoryId:t,base:r,target:o,id:h,rpc:i,t:n,onRediscover:d}))}function Gt(e){return B.default.createElement(Gr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Gr({commits:e,sessionId:t,repositoryId:r,rpc:o,t:i,onRediscover:n,onReferencesLoaded:d}){let[f,l]=(0,B.useState)(""),[s,p]=(0,B.useState)(""),[m,N]=(0,B.useState)([]),[h,E]=(0,B.useState)(!1),[u,x]=(0,B.useState)(0),[b,y]=(0,B.useState)(!1),[g,w]=(0,B.useState)("");return(0,B.useEffect)(()=>{if(!u)return;let H=new AbortController;return y(!0),w(""),o("vcs/references",{sessionId:t,repositoryId:r},H.signal).then(S=>{H.signal.aborted||(N(S.references),E(!0),d?.(S.references))}).catch(S=>{H.signal.aborted||(w(S.message),S.code==="vcs/rediscover-required"&&n())}).finally(()=>{H.signal.aborted||y(!1)}),()=>H.abort()},[t,r,u]),B.default.createElement("section",{"aria-label":i("revisionTitle")},B.default.createElement("h3",null,i("revisionTitle")),B.default.createElement("p",null,i("revisionScope")),B.default.createElement("button",{disabled:b,onClick:()=>x(H=>H+1)},i("revisionLoadRefs")),B.default.createElement("p",null,i("revisionRefsScope")),h&&!b&&!g&&B.default.createElement("p",{role:"status"},m.length?`${i("revisionRefsCount")}: ${m.length}`:i("revisionRefsEmpty")),b&&B.default.createElement("p",{role:"status"},i("loading")),g&&B.default.createElement("p",{role:"alert"},g),[[f,l,"revisionBase"],[s,p,"revisionTarget"]].map(([H,S,C])=>B.default.createElement("label",{key:C},i(C)," ",B.default.createElement("select",{"aria-label":i(C),value:H,onChange:v=>S(v.target.value)},B.default.createElement("option",{value:""},"\u2014"),!!e.length&&B.default.createElement("optgroup",{label:i("revisionLoadedCommits")},e.map(v=>B.default.createElement("option",{key:v.id,value:v.id},v.id.slice(0,10)," \xB7 ",v.subject))),!!m.length&&B.default.createElement("optgroup",{label:i("revisionLocalRefs")},m.map(v=>B.default.createElement("option",{key:v.name,value:v.commit},v.name," \xB7 ",v.commit.slice(0,10)))),H&&!e.some(v=>v.id===H)&&!m.some(v=>v.commit===H)&&B.default.createElement("option",{value:H},H)))),B.default.createElement("button",{disabled:!f||!s,onClick:()=>{l(s),p(f)}},i("revisionSwap")),B.default.createElement("p",{style:{overflowWrap:"anywhere"}},B.default.createElement("code",null,f||"\u2014")," \u2192 ",B.default.createElement("code",null,s||"\u2014")),f&&s&&B.default.createElement(jr,{key:JSON.stringify([t,r,f,s]),sessionId:t,repositoryId:r,base:f,target:s,rpc:o,t:i,onRediscover:n}))}function Eo(e,t,r){let o=r?[...e.commits.filter(i=>!t.commits.some(n=>n.id===i.id)),...t.commits]:t.commits;return{...t,windowEnd:r+t.commits.length,commits:o.slice(-200)}}function Vt(e){return A.default.createElement(Vr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Vr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,d]=(0,A.useState)({id:null,path:null,revision:0}),[f,l]=(0,A.useState)(""),[s,p]=(0,A.useState)([]),[m,N]=(0,A.useState)(null),[h,E]=(0,A.useState)(""),[u,x]=(0,A.useState)(""),b=P=>{let ie=(m||[]).find(ce=>JSON.stringify([ce.name,ce.commit])===P)?.commit||"";x(P),E(ie),H(ce=>ce?{...ce,snapshot:ie||null}:null),ke(0),l(""),re(null),X({commits:[],snapshot:null,nextOffset:null})},[y,g]=(0,A.useState)({message:"",author:"",path:"",since:"",until:""}),[w,H]=(0,A.useState)(null),S=P=>{H({values:P,snapshot:k.snapshot}),ke(0),l(""),re(null),X(_=>({..._,commits:[],nextOffset:null}))},C=()=>{pe&&(X(P=>({commits:[],snapshot:P.snapshot,nextOffset:null})),re(null),l(""),ke(Math.max(0,pe-50)))},v=(0,A.useMemo)(()=>bo(m||[]),[m]),J=n.id,be=(P,_=null)=>{n.id&&p(ie=>[...ie,n]),d(ie=>({id:P,path:_,revision:ie.revision+1}))},G=()=>{if(!s.length)return;let P=s[s.length-1];p(_=>_.slice(0,-1)),d(_=>({id:P.id,path:P.path,revision:_.revision+1}))},re=(P,_=null)=>d(ie=>({id:P,path:_,revision:ie.revision+(_||ie.path?1:0)})),[k,X]=(0,A.useState)({commits:[],snapshot:null,nextOffset:null}),[pe,ke]=(0,A.useState)(0),[st,ze]=(0,A.useState)(0),[se,Me]=(0,A.useState)(!0),[ve,ge]=(0,A.useState)("");(0,A.useEffect)(()=>{let P=new AbortController;return Me(!0),ge(""),r("vcs/history",{sessionId:e,repositoryId:t,offset:pe,limit:50,...w?{search:w.values}:{},...w?.snapshot||h||k.snapshot?{snapshot:w?.snapshot||h||k.snapshot}:{}},P.signal).then(_=>{P.signal.aborted||(X(ie=>Eo(ie,_,pe)),pe>=200&&(re(null),l("")))}).catch(_=>{P.signal.aborted||(ge(_.message),_.code==="vcs/rediscover-required"&&i())}).finally(()=>{P.signal.aborted||Me(!1)}),()=>P.abort()},[e,t,pe,st,w,h]);let ne=ko(k.commits,f);return A.default.createElement("section",{className:"vcs-history","aria-label":o("history"),"aria-busy":se},A.default.createElement("div",{className:"vcs-history-list"},A.default.createElement("p",null,o("historyListOnly")),m!==null&&A.default.createElement("p",null,o("historyRefsScope")),A.default.createElement("label",null,o("historyBranch")," ",A.default.createElement("select",{"aria-label":o("historyBranch"),value:u,disabled:se,onChange:P=>b(P.target.value)},A.default.createElement("option",{value:""},"HEAD"),u&&!(m||[]).some(P=>JSON.stringify([P.name,P.commit])===u)&&A.default.createElement("option",{value:u},JSON.parse(u)[0]," \xB7 ",h.slice(0,10)," \xB7 ",o("historyPinned")),(m||[]).map(P=>{let _=JSON.stringify([P.name,P.commit]);return A.default.createElement("option",{key:_,value:_},P.name," \xB7 ",P.commit.slice(0,10))}))),A.default.createElement("p",null,o("historyBranchScope"),h&&A.default.createElement(A.default.Fragment,null," \xB7 ",A.default.createElement("code",null,h))),A.default.createElement("form",{"aria-label":o("historyServerSearch"),onSubmit:P=>{P.preventDefault(),S({...y})}},A.default.createElement("fieldset",{disabled:se},A.default.createElement("legend",null,o("historyServerSearch")),A.default.createElement("p",null,o("historyServerScope")),["message","author","path","since","until"].map(P=>A.default.createElement("label",{key:P},o("historyServer_"+P)," ",A.default.createElement("input",{maxLength:P==="since"||P==="until"?40:1024,placeholder:P==="since"||P==="until"?"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]":void 0,"aria-label":o("historyServer_"+P),value:y[P],onChange:_=>g(ie=>({...ie,[P]:_.target.value}))}))),A.default.createElement("button",{type:"submit"},o("historyServerApply")),A.default.createElement("button",{type:"button",onClick:()=>{g({message:"",author:"",path:"",since:"",until:""}),S({})}},o("historyServerClear")))),w&&A.default.createElement("p",{role:"status"},o("historyServerActive"),": ",JSON.stringify(w.values)," \xB7 ",A.default.createElement("code",null,w.snapshot||k.snapshot)),A.default.createElement("label",null,o("historySearch")," ",A.default.createElement("input",{"aria-label":o("historySearch"),value:f,onChange:P=>{l(P.target.value),re(null)}})),A.default.createElement("span",null," ",ne.length," / ",k.commits.length),!!k.commits.length&&A.default.createElement("p",{role:"status"},o("historyWindow"),": ",Math.max(0,(k.windowEnd??k.commits.length)-k.commits.length),"\u2013",k.windowEnd??k.commits.length," \xB7 ",o("historyWindowScope")),!!k.commits.length&&!ne.length&&A.default.createElement("p",{role:"status"},o("historyNoMatch")),A.default.createElement("ol",null,ne.map(P=>A.default.createElement("li",{key:P.id},A.default.createElement("button",{"aria-pressed":J===P.id,onClick:()=>re(P.id)},P.subject),A.default.createElement("div",null,A.default.createElement("code",{title:P.id},P.id.slice(0,10))," \xB7 ",P.author," \xB7 ",A.default.createElement("time",{dateTime:P.date},P.date)),v.has(P.id)&&A.default.createElement("div",{"aria-label":o("historyRefsLabel"),style:{overflowWrap:"anywhere"}},v.get(P.id).names.map(_=>A.default.createElement("span",{key:_},A.default.createElement("code",null,_)," ")),v.get(P.id).hidden>0&&A.default.createElement("span",null,o("historyRefsMore"),": ",v.get(P.id).hidden))))),se&&A.default.createElement("p",{role:"status"},o("loading")),ve&&A.default.createElement("p",{role:"alert"},ve," ",A.default.createElement("button",{onClick:()=>ze(P=>P+1)},o("retry"))),!se&&!ve&&!k.commits.length&&A.default.createElement("p",null,o("historyEmpty")),k.truncated&&A.default.createElement("p",{role:"status"},o("historyLimit")),!!pe&&A.default.createElement("button",{disabled:se,onClick:C},o("historyBack")),!ve&&k.nextOffset!==null&&A.default.createElement("button",{disabled:se,onClick:()=>ke(k.nextOffset)},o("historyMore")),!!k.commits.length&&A.default.createElement(jt,{commits:k.commits,selected:J,onSelect:re,t:o}),A.default.createElement(Gt,{onReferencesLoaded:N,commits:k.commits,sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i})),A.default.createElement("div",{className:"vcs-history-details"},s.length>0&&A.default.createElement("p",null,A.default.createElement("button",{onClick:G,"aria-label":o("historyNavigationBack")},o("historyNavigationBack")," \xB7 ",s[s.length-1].id.slice(0,10))),J&&A.default.createElement(Ie,{key:JSON.stringify([J,n.revision]),initialPath:n.path,sessionId:e,repositoryId:t,commit:J,onSelectCommit:be,rpc:r,t:o,onRediscover:i})))}var Z=ee(require("react"),1);function qt({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[n,d]=(0,Z.useState)(null),[f,l]=(0,Z.useState)(null),[s,p]=(0,Z.useState)(""),[m,N]=(0,Z.useState)(0);return(0,Z.useEffect)(()=>{let h=new AbortController;return p(""),d(null),l(null),r("vcs/stash-list",{sessionId:e,repositoryId:t},h.signal).then(E=>{h.signal.aborted||d(E.stashes)}).catch(E=>{h.signal.aborted||(p(E.message),E.code==="vcs/rediscover-required"&&i())}),()=>h.abort()},[e,t,m]),s?Z.default.createElement("section",{"aria-label":o("stashTitle")},Z.default.createElement("h3",null,o("stashTitle")),Z.default.createElement("p",{role:"alert"},s," ",Z.default.createElement("button",{onClick:()=>N(h=>h+1)},o("retry")))):n?Z.default.createElement("section",{"aria-label":o("stashTitle")},Z.default.createElement("h3",null,o("stashTitle")),Z.default.createElement("p",null,o("stashScope")),n.length?Z.default.createElement("ol",null,n.map(h=>Z.default.createElement("li",{key:h.id},Z.default.createElement("button",{"aria-pressed":f===h.id,onClick:()=>l(h.id)},Z.default.createElement("code",null,h.ref)," \xB7 ",h.message)))):Z.default.createElement("p",{role:"status"},o("stashEmpty")),f&&Z.default.createElement(Ie,{sessionId:e,repositoryId:t,commit:f,onSelectCommit:()=>{},rpc:r,t:o,onRediscover:i})):Z.default.createElement("section",{"aria-label":o("stashTitle")},Z.default.createElement("h3",null,o("stashTitle")),Z.default.createElement("p",{role:"status"},o("loading")))}var Ho={zh:{svnOfferExpired:"\u7F51\u7EDC\u8BBF\u95EE\u63D0\u6848\u5DF2\u8FC7\u671F\uFF1B\u8BF7\u624B\u52A8\u91CD\u8BD5\uFF0C\u5E76\u91CD\u65B0\u52FE\u9009\u540C\u610F\u3002",svnExpired:"SVN \u7F51\u7EDC\u6388\u6743\u5DF2\u8FC7\u671F\uFF0C\u5386\u53F2\u8BF7\u6C42\u5DF2\u505C\u6B62\uFF1B\u8BF7\u91CD\u65B0\u5BA1\u9605\u5E76\u540C\u610F\u3002",svnConsentReview:"\u5BA1\u9605 SVN \u7F51\u7EDC\u8BBF\u95EE\u8303\u56F4",svnConsentScope:"\u540C\u610F\u524D\u4EC5\u8BFB\u53D6\u672C\u5730\u8EAB\u4EFD\u3002\u6388\u6743\u53EA\u9002\u7528\u4E8E\u6240\u5217\u4ED3\u5E93\u3001Session \u4E0E\u76EE\u5F55\uFF0C\u4E94\u5206\u949F\u6709\u6548\uFF1B\u4E0D\u6388\u6743\u91CD\u5B9A\u5411\u6216\u5199\u64CD\u4F5C\u3002",svnConsentExplicit:"\u6211\u540C\u610F\u8BBF\u95EE\u4EE5\u4E0A HTTPS SVN \u4ED3\u5E93",svnConsentApprove:"\u540C\u610F\u5E76\u8BFB\u53D6\u5386\u53F2",svnHistoryScope:"\u56FA\u5B9A\u672C\u5730 revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u5206\u9875\u66FF\u6362\u663E\u793A",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",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",commitSigned:"\u5DF2\u7B7E\u540D \xB7 {format}",commitSignatureUnverified:"\u4EC5\u68C0\u6D4B\u7B7E\u540D\u5934\uFF0C\u672A\u505A\u4FE1\u4EFB\u9A8C\u8BC1\u3002",commitCommitter:"\u63D0\u4EA4\u8005",stashTitle:"\u53EA\u8BFB Stash \u89C6\u56FE",stashScope:"\u4EC5\u8BFB\u53D6\u672C\u5730 refs/stash\uFF0C\u5217\u51FA\u5DF2\u6682\u5B58\u7684\u5DE5\u4F5C\u533A\u5FEB\u7167\uFF1B\u9009\u62E9\u540E\u590D\u7528\u63D0\u4EA4\u8BE6\u60C5\u53EA\u8BFB\u67E5\u770B\u5176\u5DEE\u5F02\u3002\u4E0D\u521B\u5EFA\u3001\u5E94\u7528\u3001\u5220\u9664\u6216\u5F39\u51FA stash\u3002",stashEmpty:"\u5F53\u524D\u4ED3\u5E93\u6CA1\u6709 stash\u3002",stash:"Stash",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",workspaceLargeScope:"Git\u5DE5\u4F5C\u533A\u5B8C\u6574UTF-8\u6BD4\u8F83\uFF0C\u6BCF\u4FA78MiB\uFF0F10\u4E07\u884C\uFF1B\u8BFB\u53D6\u671F\u95F4\u53D8\u5316\u4F1A\u62D2\u7EDD\u7ED3\u679C\uFF0C\u6210\u529F\u540E\u6587\u4EF6\u4ECD\u53EF\u88AB\u5916\u90E8\u4FEE\u6539\u3002",largeLoad:"\u52A0\u8F7D\u5B8C\u6574\u5927\u6587\u4EF6\u6BD4\u8F83",largeClose:"\u53D6\u6D88\u5927\u6587\u4EF6\u6A21\u5F0F",largeScope:"\u4EC5Git\u5386\u53F2UTF-8\u666E\u901A\u6587\u4EF6\uFF0C\u6BCF\u4FA7\u6700\u591A8MiB\u300110\u4E07\u884C\uFF1B\u4E0D\u662F\u5DE5\u4F5C\u533A\u6216SVN\u5927\u6587\u4EF6\u3002",diffPending:"\u6B63\u5728\u8BA1\u7B97\u5DEE\u5F02\uFF0C\u5C1A\u4E0D\u80FD\u5224\u65AD\u662F\u5426\u76F8\u540C\u3002",diffIncomplete:"\u5DEE\u5F02\u8BA1\u7B97\u672A\u5B8C\u6210\u6216\u8D85\u65F6\uFF0C\u5F53\u524D\u7ED3\u679C\u53EF\u80FD\u4E0D\u5B8C\u6574\u3002",diffComplete:"\u5DEE\u5F02\u8BA1\u7B97\u5B8C\u6210\u3002",largeFallback:"\u57FA\u7840\u89C6\u56FE\u53EA\u5C55\u793A\u6709\u754C\u7247\u6BB5\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5927\u6587\u4EF6\u5DEE\u5F02\u3002",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyBack:"\u5386\u53F2\u4E0A\u4E00\u9875",historyNavigationBack:"\u8FD4\u56DE\u4E0A\u4E00\u5904",historyNavigationScope:"\u4ECE\u67D0\u4E2A\u63D0\u4EA4\u7684\u6587\u4EF6\u5386\u53F2\u6216 Blame \u8DF3\u8F6C\u5230\u53E6\u4E00\u4E2A\u63D0\u4EA4\u540E\uFF0C\u201C\u8FD4\u56DE\u4E0A\u4E00\u5904\u201D\u4F1A\u56DE\u5230\u8DF3\u8F6C\u524D\u7684\u63D0\u4EA4\uFF0C\u5E76\u5C1D\u8BD5\u9884\u9009\u552F\u4E00\u5B8C\u5168\u5339\u914D\u7684\u8DEF\u5F84\uFF1B\u8FD9\u662F\u672C\u4F1A\u8BDD\u5185\u7684\u9875\u9762\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u8BFB\u53D6\u6216\u5199\u5165\u4ED3\u5E93\u3002",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryDateScope:"\u53EF\u9009\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u542B\u8FB9\u754C\u8FC7\u6EE4\uFF1B\u4E0E\u201C\u8DDF\u968F\u91CD\u547D\u540D\u201D\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\uFF0C\u62A5\u9519\u540E\u53D6\u6D88\u5176\u4E00\u5373\u53EF\u3002",pathHistory:"\u6B64\u8DEF\u5F84\u5386\u53F2",submoduleBadge:"\u5B50\u6A21\u5757",submoduleCheckout_initialized:"\u5B58\u5728\u672C\u5730Git\u6807\u8BB0\uFF08\u672A\u9A8C\u8BC1\u68C0\u51FA\u6709\u6548\u6027\uFF09",submoduleCheckout_uninitialized:"\u672C\u5730\u672A\u521D\u59CB\u5316",submoduleCheckout_absent:"\u672C\u5730\u76EE\u5F55\u7F3A\u5931",submoduleCheckout_unreadable:"\u672C\u5730\u72B6\u6001\u4E0D\u53EF\u8BFB",submodulePointerMoved:"\u6307\u9488\u5DF2\u79FB\u52A8\uFF08\u68C0\u51FAHEAD\u4E0E\u8BB0\u5F55\u4E0D\u540C\uFF09",submoduleDirty:"\u5DE5\u4F5C\u6811\u6709\u672A\u63D0\u4EA4\u6539\u52A8",submoduleScope:"\u9884\u89C8\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF1B\u5DF2\u521D\u59CB\u5316\u68C0\u51FA\u65F6\uFF0C\u6765\u81EA\u7236\u4ED3\u5E93\u81EA\u8EAB git status \u7684\u6307\u9488\u79FB\u52A8\uFF0F\u672A\u63D0\u4EA4\u6539\u52A8\uFF0F\u672A\u8DDF\u8E2A\u5185\u5BB9\u4F1A\u4E00\u5E76\u6807\u6CE8\uFF0C\u4E0D\u8FDB\u5165\u5B50\u6A21\u5757\u3001\u4E0D\u989D\u5916\u89E3\u6790\u5176HEAD\u3001\u4E0D\u52A0\u8F7D\u5185\u5BB9\u3001\u4E0D\u66F4\u65B0\u6216\u540C\u6B65\u3002",pathHistoryScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u5386\u53F2\u8DEF\u5F84\u5728\u8BE5\u63D0\u4EA4\u4E0B\u7684\u6587\u4EF6\u5386\u53F2\uFF1B\u8DEF\u5F84\u5FC5\u987B\u5B58\u5728\u4E8E\u8BE5\u63D0\u4EA4\u3002\u5173\u95ED\u8DDF\u968F\u65F6\u4E0D\u8DE8\u91CD\u547D\u540D\u3002",pathHistoryNoFollow:"\u672A\u8DDF\u968F\u91CD\u547D\u540D",pathHistoryFollowScope:"\u8DDF\u968F\u6CBF\u7528\u540C\u4E00\u4FDD\u5B88\u89C4\u5219\uFF1A\u7B2C\u4E00\u7236\u94FE\u3001Git\u76F8\u4F3C\u5EA6\u81F3\u5C1150%\u3001\u6BCF\u6B21\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u621632\u6B21\u786E\u8BA4\u4E0A\u9650\u5904\u505C\u6B62\uFF1B\u53EA\u9002\u7528\u4E8E\u63D0\u4EA4\u4E2D\u7684\u666E\u901A\u6587\u4EF6\u6216\u94FE\u63A5\u3002",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF0C\u5E76\u5C1D\u8BD5\u9009\u4E2D\u8BE5\u63D0\u4EA4\u53D8\u66F4\u4E2D\u8DEF\u5F84\u5B8C\u5168\u4E00\u81F4\u7684\u552F\u4E00\u6587\u4EF6\uFF08\u4E0D\u4F1A\u731C\u6D4B\u91CD\u547D\u540D\u6216\u65E7\u8DEF\u5F84\uFF09\uFF1B\u65E0\u552F\u4E00\u5339\u914D\u65F6\u4E0D\u9884\u9009\u6587\u4EF6\u3002\u9ED8\u8BA4\u4F7F\u7528\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG\u30018\u4F4D\u57FA\u7EBF/\u6E10\u8FDB JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757\u9759\u6001VP8\uFF0F\u65E0\u635FVP8L WebP\uFF08\u4E0D\u652F\u6301\u7B97\u672F\u7F16\u7801/CMYK JPEG\u3001\u6269\u5C55/\u52A8\u753B WebP\uFF09\uFF1B\u6BCF\u4FA7\u6700\u591A 2 MiB\u30011600 \u4E07\u50CF\u7D20\u3002\u5143\u6570\u636E\u88AB\u79FB\u9664\uFF0C\u4E0D\u9002\u7528\u4E8E\u8272\u5F69\u7CBE\u786E\u6027\u5BA1\u9605\u3002\u652F\u6301\u5386\u53F2\u63D0\u4EA4\u3001\u56FA\u5B9A A/B \u53CA Git \u5DE5\u4F5C\u533A\uFF1B\u6309\u6240\u9009\u6A21\u5F0F\u8BFB\u53D6 HEAD\u3001\u6682\u5B58\u533A\u6216\u5DE5\u4F5C\u6587\u4EF6\u3002\u51B2\u7A81\u56FE\u7247\u4E0D\u652F\u6301\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u672C\u5730\u5206\u652F\u3001\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\u53CA\u672C\u5730\u7F13\u5B58\u7684\u8FDC\u7A0B\u8DDF\u8E2A\u5F15\u7528\uFF0C\u5171\u6700\u591A1000\u6761\uFF1B\u4E0D\u8FDE\u63A5\u8FDC\u7AEF\u6216fetch\uFF0C\u8FDC\u7A0B\u7F13\u5B58\u53EF\u80FD\u8FC7\u671F\u3002\u91CD\u65B0\u52A0\u8F7D\u65F6\uFF0Corigin/HEAD \u663E\u793A\u5B83\u5F53\u524D\u6307\u5411\u7684\u672C\u5730\u63D0\u4EA4\uFF1B\u5DF2\u9009\u5386\u53F2\u548C\u7248\u672C\u4ECD\u56FA\u5B9A\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5F15\u7528\uFF08\u542B\u8FDC\u7A0B\u7F13\u5B58\uFF09",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{svnOfferExpired:"Network access offer expired. Retry manually and check consent again.",svnExpired:"SVN network consent expired; history requests stopped. Review and consent again.",svnConsentReview:"Review SVN network access",svnConsentScope:"Before consent, read local identity only. Access binds this repository, Session and cwd for five minutes; redirects and writes are not authorized.",svnConsentExplicit:"I consent to access the HTTPS SVN repository above",svnConsentApprove:"Consent and read history",svnHistoryScope:"SVN history at a fixed local revision snapshot; pages replace displayed rows",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",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",commitSigned:"Signed \xB7 {format}",commitSignatureUnverified:"Signature presence detected; not trust-verified.",commitCommitter:"Committer",stashTitle:"Read-only stashes",stashScope:"Reads only the local refs/stash to list stashed working-copy snapshots; selecting one reuses commit details to review its diff read-only. Never creates, applies, drops, or pops a stash.",stashEmpty:"This repository has no stashes.",stash:"Stash",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",workspaceLargeScope:"Complete Git working-copy UTF-8 comparison: 8 MiB / 100000 lines per side. Changes during loading reject the result; external edits remain possible afterward.",largeLoad:"Load complete large-file comparison",largeClose:"Cancel large-file mode",largeScope:"Git historical UTF-8 regular files only: 8 MiB and 100000 lines per side, not working-copy or SVN large files.",diffPending:"Computing differences; equality is not yet known.",diffIncomplete:"Difference computation is incomplete or timed out; displayed results may be partial.",diffComplete:"Difference computation completed.",largeFallback:"The basic view shows bounded excerpts, not the complete large-file diff.",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyBack:"Previous history page",historyNavigationBack:"Back",historyNavigationScope:"After jumping from one commit's file history or Blame into another commit, \u201CBack\u201D returns to the commit you came from and tries to preselect the single exactly matching path; this is in-page context and reads or writes no repository state.",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryDateScope:"Optional date bounds filter on committer date inclusively; they cannot combine with rename following, so disable one if an error appears.",pathHistory:"History of this path",submoduleBadge:"submodule",submoduleCheckout_initialized:"local Git marker present (checkout validity not verified)",submoduleCheckout_uninitialized:"not initialized locally",submoduleCheckout_absent:"local directory missing",submoduleCheckout_unreadable:"local state unreadable",submodulePointerMoved:"pointer moved (checkout HEAD differs from recorded)",submoduleDirty:"uncommitted working-tree changes",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence; for an initialized checkout, pointer movement, uncommitted changes and untracked content reported by the parent repository's own git status are annotated, without entering the submodule, separately resolving its HEAD, loading contents, or updating anything.",pathHistoryScope:"Manually reads the file history of the selected historical path at that commit; the path must exist in that commit. Without following, renames are not crossed.",pathHistoryNoFollow:"renames not followed",pathHistoryFollowScope:"Following uses the same conservative rules: first parent, Git similarity of at least 50%, a unique deletion/addition confirmed each time, stopping at ambiguity, copies or the 32-confirmation cap; only committed regular files or links are supported.",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details and preselect the single exactly matching path in that commit; rename or old paths are never guessed, and a missing or ambiguous match preselects nothing. The first parent is used and no line is auto-located.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeBreadcrumbs:"Historical directory path",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG, 8-bit baseline or progressive JPEG regular files, or single-chunk static VP8 / lossless VP8L WebP (no arithmetic-coded/CMYK JPEG or extended/animated WebP); at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Supports commits, fixed A/B and Git working changes; HEAD, index or working bytes follow the selected mode. Conflicted images are unsupported.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches, commit tags and locally cached remote-tracking refs, at most 1000 total; no network or fetch. Remote caches may be stale. Reloading origin/HEAD shows its current local target; selected history and versions stay pinned. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local refs (including remote caches)",revisionRefsCount:"Selectable references loaded"}};function Ao(e,t,r,o){let i=e.target;if(!t?.contains(i)||e.defaultPrevented||e.isComposing||i?.closest?.(".monaco-editor")||i?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&i===r&&o)return"clear";let n=i?.isContentEditable||i?.closest?.('input,textarea,select,[role="textbox"]');if(n&&i!==r)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!n&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function Lo(e,t){let r=t?[...t.querySelectorAll("button[data-vcs-item]")]:[],o=r.indexOf(e.target);if(o<0)return;let i;if(e.key==="ArrowDown")i=r[o+1];else if(e.key==="ArrowUp")i=r[o-1];else if(e.key==="Home")i=r[0];else if(e.key==="End")i=r.at(-1);else if(e.key==="ArrowRight"&&e.target.dataset.vcsDirectory==="closed"||e.key==="ArrowLeft"&&e.target.dataset.vcsDirectory==="open"){e.preventDefault(),e.target.click();return}else return;e.preventDefault(),i?.focus()}var Po=e=>"dsh-vcs:project:v1:"+e;function Do(e,t){if(!e)return"";try{let r=(t??globalThis.localStorage)?.getItem(Po(e));return typeof r=="string"&&r.length<=1024?r:""}catch{return""}}function Bo(e,t,r){if(!(!e||!t))try{(r??globalThis.localStorage)?.setItem(Po(e),t)}catch{}}function Oo(e,t=""){return e.find(r=>r.id===t)?.id||e.find(r=>r.relativePath===".")?.id||e[0]?.id||""}var We=(e,t)=>JSON.stringify([e,t]),_e=(e,t=".")=>[e.type.toUpperCase(),e.relativePath==="."?t:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),it=(e,t="all")=>e.type==="git"&&["staged","unstaged"].includes(t)?t:"all",Mo=(e="",t="")=>e===t?0:e<t?-1:1;function Ut(e=[]){let t={id:"",name:"",directories:new Map,files:[],count:0};for(let o of e){let i=String(o.path||"").split("/").filter(Boolean);if(!i.length)continue;let n=t;for(let d of i.slice(0,-1)){let f=n.id?n.id+"/"+d:d;n.directories.has(d)||n.directories.set(d,{id:f,name:d,directories:new Map,files:[],count:0}),n=n.directories.get(d),n.count++}n.files.push(o)}let r=o=>({...o,directories:[...o.directories.values()].sort((i,n)=>Mo(i.name,n.name)).map(r),files:[...o.files].sort((i,n)=>Mo(i.path,n.path))});return r(t)}function Fo(e=[],t){let r=e.findIndex(o=>o.id===t);return{index:r<0?0:r+1,total:e.length}}function To(e=[],t,r){if(!e.length||!["previous","next"].includes(r))return null;let o=e.findIndex(d=>d.id===t),i=r==="next"?1:-1,n=o<0?r==="next"?-1:0:o;return e[(n+i+e.length)%e.length]||null}function jo(e=""){let t=String(e).split("/").filter(Boolean);return t.slice(0,-1).map((r,o)=>t.slice(0,o+1).join("/"))}function Jt(e,t=[]){for(let r of e?.directories||[])t.push(r.id),Jt(r,t);return t}function Go(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function Vo(e=[]){return e.reduce((t,r)=>{let o=Go(r.status);return t.all++,t[o]=(t[o]||0)+1,t},{all:0})}function Ur(e=[],t="",r="all"){let o=t.toLowerCase();return e.filter(i=>(r==="all"||Go(i.status)===r)&&i.path.toLowerCase().includes(o)).sort((i,n)=>i.path.localeCompare(n.path))}function qo(e,t,r="",o="all"){return e.map(i=>({...t[i.id],repository:i,changes:Ur(t[i.id]?.changes,r,o)}))}function Uo(e,t,r=""){if(!r||!e||e.cwd!==t.cwd)return t;let o=new Map(e.repositories.map(i=>[i.id,i]));for(let i of t.repositories)o.set(i.id,i);return{...t,repositories:[...o.values()],truncated:e.truncated||t.truncated,warnings:[...e.warnings||[],...t.warnings||[]]}}var Jo={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Io=e=>new URL("vcs-assets/"+e,document.baseURI).href;function Wo(){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 Jr=["slots","layout","locale","connection","uiSession"];function Ir(e){e.effect(()=>e.locale.register("local.vcs",Ho));let t=e.locale.bind("local.vcs"),r=Ct(2),o=co(e.connection,()=>t("error"));function i(f){let l=f.useSessions(s=>Object.values(s.byId).find(p=>(p.retainedBy.mainView??0)>0));return a.default.createElement(n,{key:JSON.stringify([l?.id,l?.cwd])},a.default.createElement(d,{session:l}))}class n extends a.default.Component{state={error:null};static getDerivedStateFromError(l){return{error:l}}render(){return this.state.error?a.default.createElement("section",{className:"vcs-root"},a.default.createElement("style",null,kt),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 d({session:f}){(0,a.useSyncExternalStore)(c=>e.locale.subscribe(c),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let l=f?.id,[s,p]=(0,a.useState)("all"),[m,N]=(0,a.useState)(0),[h,E]=(0,a.useState)(0),[u,x]=(0,a.useState)(null),[b,y]=(0,a.useState)({}),[g,w]=(0,a.useState)(()=>Do(f?.cwd)),[H,S]=(0,a.useState)(0),[C,v]=(0,a.useState)(""),[J,be]=(0,a.useState)(""),[G,re]=(0,a.useState)(null),[k,X]=(0,a.useState)(null),[pe,ke]=(0,a.useState)(!1),[st,ze]=(0,a.useState)(!1),[se,Me]=(0,a.useState)(""),[ve,ge]=(0,a.useState)(""),[ne,P]=(0,a.useState)(""),[_,ie]=(0,a.useState)(!1),[ce,nt]=(0,a.useState)(""),[Ke,It]=(0,a.useState)("all"),[Le,Wt]=(0,a.useState)(!0),[_t,at]=(0,a.useState)({}),[Oe,_o]=(0,a.useState)(!0),[lt,zo]=(0,a.useState)(!1),[ct,Ko]=(0,a.useState)(!1),[Ye,Fe]=(0,a.useState)("content"),[zt,Kt]=(0,a.useState)(0),[Yo,dt]=(0,a.useState)(!1),[$o,pt]=(0,a.useState)(!1),[Yt,$t]=(0,a.useState)(null),[Qo,Xo]=(0,a.useState)(0),[Qt,Zo]=(0,a.useState)("pending"),[ut,ft]=(0,a.useState)({added:0,deleted:0,count:0}),[ue,Xt]=(0,a.useState)(!1),Zt=(0,a.useRef)(null),Rt=(0,a.useRef)(null),Ce=(0,a.useRef)(null),mt=(0,a.useRef)(null),$e=(0,a.useRef)(null),ht=(0,a.useRef)(null),eo=(0,a.useRef)(null),Ne=(0,a.useRef)(null),gt=(0,a.useRef)(null),vt=(0,a.useRef)(null),yt=(0,a.useRef)(!1),Qe=(0,a.useRef)(!1),Ee=u?.repositories||[],xe=Ee.filter(c=>c.id===g),ae=Yo&&xe.some(c=>c.type==="git"),de=$o&&xe.some(c=>c.type==="git"),Ro=()=>{Ne.current?.abort(),X(null),re(null),ge(""),pt(!1),dt(!0)},er=()=>{Ne.current?.abort(),X(null),re(null),ge(""),dt(!1),pt(!0)};(0,a.useEffect)(()=>{Ee.some(c=>c.id===g)&&Bo(f?.cwd,g)},[f?.cwd,g,u]);let Te=()=>{eo.current?.abort(),Ne.current?.abort(),X(null),re(null),ge(""),Fe("content"),ft({added:0,deleted:0,count:0})},Xe=()=>{Qe.current=!1,Te(),gt.current?.abort(),vt.current=u,x(null),y({}),be(C.trim()),S(c=>c+1)},we=()=>{Qe.current||(Qe.current=!0,Te(),gt.current?.abort(),vt.current=null,x(null),y({}),be(""),S(c=>c+1))},to=(c=!1)=>{c||E(D=>D+1),yt.current=c,c||Te(),c||y({}),N(D=>D+1)};(0,a.useEffect)(()=>{let c=new AbortController;return gt.current=c,Me(""),ke(!!l),l&&o("vcs/repositories",{sessionId:l,...J?{subdirectory:J}:{}},c.signal).then(D=>{if(!c.signal.aborted){let U=Uo(vt.current,D,J);Qe.current=!1,w($=>Oo(U.repositories,$)),x(U)}}).catch(D=>{c.signal.aborted||Me(D.message)}).finally(()=>{c.signal.aborted||ke(!1)}),()=>c.abort()},[l,H,J]),(0,a.useEffect)(()=>{let c=new AbortController,D=yt.current;eo.current=c,yt.current=!1,D||(y({}),ge(""));for(let U of xe){let $=it(U,s);r(()=>o("vcs/status",{sessionId:l,repositoryId:U.id,mode:$},c.signal),c.signal).then(le=>{c.signal.aborted||y(fe=>({...fe,[U.id]:{...le,mode:$}}))}).catch(le=>{if(!c.signal.aborted){if(le.code==="vcs/rediscover-required"){we();return}y(fe=>({...fe,[U.id]:{error:le.message,changes:[],mode:$}}))}})}return()=>c.abort()},[l,u,g,s,m]),(0,a.useEffect)(()=>{let c=D=>{D.target===window&&l&&g&&document.visibilityState==="visible"&&to(!0)};return window.addEventListener("focus",c),()=>window.removeEventListener("focus",c)},[l,g,s]);let He=Ee.find(c=>c.id===G?.repositoryId),ye=G?b[G.repositoryId]:null,bt=JSON.stringify([l,u?.cwd,G?.repositoryId,s,G?.id]),Pe=Yt?.key===bt&&Yt?.status===ye;(0,a.useEffect)(()=>$t(null),[bt,ye,ae,de]),(0,a.useEffect)(()=>{let c=new AbortController;return Ne.current=c,X(null),ge(""),ft({added:0,deleted:0,count:0}),Fe("content"),ze(!!G&&!!ye),!ae&&!de&&G&&ye&&He&&o("vcs/compare",{sessionId:l,repositoryId:G.repositoryId,mode:it(He,s),id:G.id,...Pe?{large:!0}:{}},c.signal).then(D=>{c.signal.aborted||X(D)}).catch(D=>{if(!c.signal.aborted){if(D.code==="vcs/rediscover-required"){we();return}ge(D.message)}}).finally(()=>{c.signal.aborted||ze(!1)}),()=>c.abort()},[G,ye,l,s,ae,Pe,Qo]),(0,a.useEffect)(()=>{let c=!1,D,U=new AbortController;Xt(!1),P("");let $=document.createElement("link");return $.rel="stylesheet",$.href=Io("editor.css"),document.head.appendChild($),et(Io("editor.js")+"?v="+encodeURIComponent(tt)+"&retry="+zt,{signal:U.signal}).then(le=>{c||(D=le.createDiff(Rt.current,{onStats:ft,onComputation:fe=>{c||Zo(fe)}}),Ce.current=D,Xt(!0))}).catch(le=>{c||P(le.message)}),()=>{c=!0,U.abort(),D?.dispose(),Ce.current=null,$.remove()}},[zt]),(0,a.useEffect)(()=>{ue&&(!k||k.binary||ae||de)&&Ce.current?.setContent({left:{text:""},right:{text:""}},"empty"),ue&&k&&!k.binary&&!ae&&!de&&Ce.current?.setContent(k,JSON.stringify([l,u?.cwd,G?.repositoryId,s,G?.id,k.path]))},[ue,k,l,u,G,s,ae,de]),(0,a.useEffect)(()=>{Ce.current?.options({sideBySide:Oe,ignoreWhitespace:lt,wrap:ct})},[ue,Oe,lt,ct]);let je=qo(xe,b,ce,Ke),De=je.flatMap(c=>c.changes),tr=Vo(ye?.changes),xt=Fo(De,G?.id),oo=()=>{nt(""),It("all")},or=async()=>{let c=k?.path||Se?.path;if(c)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(c);else{let D=document.createElement("textarea");try{if(D.value=c,D.style.cssText="position:fixed;opacity:0",document.body.appendChild(D),D.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{D.remove()}}ie(!0),window.setTimeout(()=>ie(!1),1500)}catch{ge(t("copyFailed"))}};(0,a.useEffect)(()=>{let c=D=>{if(ae||de)return;let U=Ao(D,Zt.current,$e.current,!!ce);U&&(D.preventDefault(),U==="search"?($e.current?.focus(),$e.current?.select()):U==="clear"?nt(""):wt(U))};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[ce,De,G,ae,de]);let ro=c=>at(D=>{let U={...D};for(let $ of je)for(let le of Jt(Ut($.changes)))U[$.repository.id+"\0"+le]=!c;return U}),rr=()=>{let c=Se;!c||!G||(Wt(!0),oo(),at(D=>{let U={...D};for(let $ of jo(c.path))U[G.repositoryId+"\0"+$]=!1;return U}),ht.current=We(G.repositoryId,c.id))};(0,a.useEffect)(()=>{let c=ht.current;if(!c)return;let D=[...mt.current?.querySelectorAll("button[data-vcs-change]")||[]].find(U=>U.dataset.vcsChange===c);D&&(D.scrollIntoView({block:"nearest"}),D.focus(),ht.current=null)},[Le,ce,Ke,_t,je]);let wt=c=>{let D=To(De,G?.id,c);D&&(Ne.current?.abort(),X(null),Fe("content"),re({repositoryId:g,id:D.id}))},io=pe||xe.some(c=>!b[c.id]),Se=ye?.changes?.find(c=>c.id===G?.id),Ae=k?.properties,St=Ae?[...new Set([...Object.keys(Ae.left||{}),...Object.keys(Ae.right||{})])].filter(c=>Ae.left?.[c]!==Ae.right?.[c]):[],Ge=c=>Jo[c?.status]||c?.status?.slice(0,1).toUpperCase()||"M",so=k?.binary?[k.left.label,k.right.label].filter(Boolean).join(" \u2194 "):"",Be=ve||(st?t("loading"):l?io&&!Se?t("loading"):se||(Ee.length?Se?k?.binary?t("binary")+(so?" "+t("binaryComparison",{files:so}):""):k?!ue&&!ne?t("loading"):"":t("pick"):t("pick"):t("noRepo")):t("noSession")),ir=c=>Lo(c,mt.current),no=({entry:c,compact:D=!1,depth:U=0})=>{let $=c.path.lastIndexOf("/");return a.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":We(g,c.id),"aria-current":G?.repositoryId===g&&G?.id===c.id?"true":void 0,style:{paddingInlineStart:8+U*14},title:(c.oldPath?c.oldPath+" \u2192 ":"")+c.path+" \xB7 "+t(Ge(c)),onClick:()=>{Ne.current?.abort(),X(null),Fe("content"),re({repositoryId:g,id:c.id})}},a.default.createElement("span",{className:"vcs-status","data-status":Ge(c)},Ge(c)),a.default.createElement(Ht,{submodule:c.submodule,t}),a.default.createElement("span",{className:"vcs-filename"},D?c.path.slice($+1):c.path,c.oldPath&&a.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",c.oldPath)))},ao=({node:c,repository:D,depth:U=0})=>a.default.createElement(a.default.Fragment,null,c.directories.map($=>{let le=D.id+"\0"+$.id,fe=!!_t[le];return a.default.createElement(a.default.Fragment,{key:le},a.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":fe?"closed":"open","aria-expanded":!fe,style:{paddingInlineStart:8+U*14},onClick:()=>at(sr=>({...sr,[le]:!fe}))},a.default.createElement("span",{"aria-hidden":"true"},fe?"\u203A":"\u2304"),$.name,a.default.createElement("small",null,$.count)),!fe&&a.default.createElement(ao,{node:$,repository:D,depth:U+1}))}),c.files.map($=>a.default.createElement(no,{key:We(D.id,$.id),entry:$,compact:c.id!=="",depth:U})));return a.default.createElement("section",{ref:Zt,className:"vcs-root","aria-label":t("title")},a.default.createElement("style",null,kt),a.default.createElement("header",{className:"vcs-top"},a.default.createElement(Wo,null),a.default.createElement("h1",{className:"vcs-title"},t("title")),a.default.createElement("span",{className:"vcs-badge"},t("readonly")),a.default.createElement("span",{className:"vcs-spacer"}),a.default.createElement("select",{"aria-label":t("repositories"),value:g,disabled:pe||!Ee.length,onChange:c=>{Te(),y({}),w(c.target.value)}},!Ee.length&&a.default.createElement("option",{value:""},t("repositories")),Ee.map(c=>a.default.createElement("option",{key:c.id,value:c.id},_e(c,t("workspaceRoot"))))),a.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",a.default.createElement("select",{"aria-label":t("gitMode"),value:s,disabled:ae||de||!xe.some(c=>c.type==="git"),onChange:c=>{Te(),y({}),p(c.target.value)}},["all","unstaged","staged"].map(c=>a.default.createElement("option",{key:c,value:c},t(c))))),a.default.createElement("button",{onClick:()=>to(!1),disabled:io||!l},t("refresh")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")),a.default.createElement("div",{className:"vcs-path",title:u?.cwd||f?.cwd},t("session"),": ",u?.cwd||f?.cwd||"\u2014"),a.default.createElement("form",{className:"vcs-discovery",onSubmit:c=>{c.preventDefault(),Xe()}},a.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:C,onChange:c=>v(c.target.value)}),a.default.createElement("button",{disabled:!l||pe},t("rescan")),a.default.createElement("span",null,t("scanHint"))),u?.truncated&&a.default.createElement("div",{className:"vcs-notice"},t("truncated")),(u?.warnings||[]).map((c,D)=>a.default.createElement("div",{className:"vcs-notice",key:D},typeof c=="string"?c:c.message||JSON.stringify(c)))),xe.filter(c=>c.type==="svn").map(c=>a.default.createElement(a.default.Fragment,{key:JSON.stringify([l,c.id,H,m])},a.default.createElement(At,{repositoryId:c.id,sessionId:l,rpc:o,t,onRediscover:we}),a.default.createElement(Dt,{repositoryId:c.id,sessionId:l,rpc:o,t,onRediscover:we}))),xe.some(c=>c.type==="git")&&a.default.createElement(a.default.Fragment,null,a.default.createElement("nav",{className:"vcs-review-views","aria-label":t("reviewView")},a.default.createElement("button",{"aria-pressed":!ae&&!de,onClick:()=>{dt(!1),pt(!1)}},t("workspaceView")),a.default.createElement("button",{"aria-pressed":ae,"aria-expanded":ae,onClick:Ro},t("history")),a.default.createElement("button",{"aria-pressed":de,"aria-expanded":de,onClick:er},t("stash"))),ae&&a.default.createElement(Vt,{key:JSON.stringify([l,g,h,H]),sessionId:l,repositoryId:g,rpc:o,t,onRediscover:we}),de&&a.default.createElement(qt,{sessionId:l,repositoryId:g,rpc:o,t,onRediscover:we})),a.default.createElement("div",{className:"vcs-body",hidden:ae||de,"aria-label":t("workspaceView")},a.default.createElement("aside",{className:"vcs-files"},a.default.createElement("div",{className:"vcs-filter"},a.default.createElement("input",{ref:$e,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:ce,onChange:c=>nt(c.target.value)}),(ce||Ke!=="all")&&a.default.createElement("button",{className:"vcs-clear-filter",onClick:oo},t("clearFilters"))),a.default.createElement("div",{className:"vcs-status-filter","aria-label":t("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(c=>a.default.createElement("button",{key:c,"aria-pressed":Ke===c,onClick:()=>It(c)},t(c==="all"?"allFiles":Jo[c]||"M")," ",a.default.createElement("small",null,tr[c]||0)))),a.default.createElement("div",{className:"vcs-count"},a.default.createElement("span",null,De.length," ",t("files")),a.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),a.default.createElement("button",{"aria-pressed":Le,onClick:()=>Wt(!Le)},t(Le?"tree":"list"))),Le&&a.default.createElement("div",{className:"vcs-tree-actions"},a.default.createElement("button",{onClick:()=>ro(!0)},t("expandAll")),a.default.createElement("button",{onClick:()=>ro(!1)},t("collapseAll")),a.default.createElement("button",{onClick:rr,disabled:!Se},t("revealSelected"))),a.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:mt,onKeyDown:ir},je.map(c=>{let D=c.repository;return a.default.createElement("section",{className:"vcs-repository",key:D.id,"aria-label":_e(D,t("workspaceRoot"))},a.default.createElement("div",{className:"vcs-repository-heading",title:D.root},a.default.createElement("strong",null,_e(D,t("workspaceRoot"))),a.default.createElement("small",null,D.type==="svn"?t("svnBase"):t(it(D,s)))),c.error?a.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},c.error,a.default.createElement("button",{onClick:Xe},t("rescan"))):b[D.id]?Le?a.default.createElement(ao,{node:Ut(c.changes),repository:D}):c.changes.map(U=>a.default.createElement(no,{key:We(D.id,U.id),entry:U})):a.default.createElement("div",{className:"vcs-message"},t("loading")),!c.error&&b[D.id]&&!c.changes.length&&a.default.createElement("div",{className:"vcs-message"},t(ce?"emptySearch":"clean")))}),!je.length&&a.default.createElement("div",{className:"vcs-message"},pe?t("loading"):se||t(l?"noRepo":"noSession"),se&&a.default.createElement("button",{onClick:Xe},t("rescan"))))),a.default.createElement("main",{className:"vcs-detail"},a.default.createElement("div",{className:"vcs-filehead"},a.default.createElement("strong",{title:k?.path||Se?.path},He?_e(He,t("workspaceRoot"))+" / ":"",k?.path||Se?.path||t("pick")),a.default.createElement("button",{className:"vcs-copy-path",disabled:!(k?.path||Se?.path),onClick:or},t(_?"copied":"copyPath")),_&&a.default.createElement("span",{className:"vcs-sr-only",role:"status"},t("pathCopied")),a.default.createElement("span",{className:"vcs-spacer"}),k&&!k.binary&&ue&&a.default.createElement(a.default.Fragment,null,a.default.createElement("span",{className:"vcs-add"},"+",ut.added),a.default.createElement("span",{className:"vcs-del"},"\u2212",ut.deleted))),ne&&a.default.createElement("div",{className:"vcs-notice",role:"status"},t("fallback")," ",a.default.createElement("button",{onClick:()=>Kt(c=>c+1)},t("retry")),a.default.createElement("details",null,a.default.createElement("summary",null,t("diagnostics")),ne)),k&&a.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},a.default.createElement("span",{className:"vcs-context-status","data-status":Ge(k)},t(Ge(k))),k.oldPath&&a.default.createElement("span",{className:"vcs-context-rename",title:k.oldPath+" \u2192 "+k.path},k.oldPath," ",a.default.createElement("b",null,"\u2192")," ",k.path),a.default.createElement("span",null,k.left.label||"\u2014"," ",a.default.createElement("b",null,"\u2194")," ",k.right.label||"\u2014"),(k.left.encoding||k.right.encoding)&&a.default.createElement("span",null,t("encoding"),": ",k.left.encoding||"\u2014"," / ",k.right.encoding||"\u2014")),k&&He?.type==="git"&&a.default.createElement(qe,{key:JSON.stringify([l,u?.cwd,G.repositoryId,s,G.id,m,ye]),workspace:!0,sessionId:l,repositoryId:G.repositoryId,mode:s,id:G.id,rpc:o,t,onRediscover:we}),He?.type==="git"&&(Pe||k?.notice?.includes("2 MiB"))&&a.default.createElement("div",{className:"vcs-notice"},a.default.createElement("span",null,t("workspaceLargeScope")),a.default.createElement("button",{onClick:()=>{Ne.current?.abort(),X(null),$t(Pe?null:{key:bt,status:ye})}},t(Pe?"largeClose":"largeLoad")),Pe&&ve&&a.default.createElement("button",{onClick:()=>Xo(c=>c+1)},t("retry"))),k?.large&&a.default.createElement("p",{role:"status"},t(ne?"largeFallback":Qt==="complete"?"diffComplete":Qt==="incomplete"?"diffIncomplete":"diffPending")),k?.notice&&a.default.createElement("div",{className:"vcs-notice"},k.notice),k?.submodule&&a.default.createElement("p",{role:"status"},t("submoduleScope")),k?.status==="conflicted"&&He?.type==="git"&&a.default.createElement(Et,{key:JSON.stringify([l,G.repositoryId,s,G.id,m]),sessionId:l,repositoryId:G.repositoryId,mode:s,id:G.id,rpc:o,t,onRediscover:we}),St.length>0&&a.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(c=>a.default.createElement("button",{key:c,"aria-pressed":Ye===c,onClick:()=>Fe(c)},t(c),c==="properties"?" ("+St.length+")":""))),a.default.createElement("div",{className:"vcs-labels"},a.default.createElement("span",null,k?.left.label||"\u2014",k?.left.encoding?" \xB7 "+k.left.encoding:""),a.default.createElement("span",null,k?.right.label||"\u2014",k?.right.encoding?" \xB7 "+k.right.encoding:"")),a.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!Be||Ye!=="content",style:Ye==="properties"?{display:"none"}:void 0},a.default.createElement("div",{className:"vcs-editor",ref:Rt,style:ne?{display:"none"}:void 0}),ne&&k&&!k.binary&&!Be&&a.default.createElement(Ve,{comparison:k,labels:Re(t)}),Be&&a.default.createElement("div",{className:"vcs-message "+(se||ve||ne?"vcs-error":""),role:"status"},Be,(se||ve||ne)&&a.default.createElement("button",{onClick:()=>ne?Kt(c=>c+1):Xe()},t(ne?"retry":"rescan")))),Ye==="properties"&&a.default.createElement("div",{className:"vcs-properties"},a.default.createElement("table",null,a.default.createElement("thead",null,a.default.createElement("tr",null,a.default.createElement("th",null,t("properties")),a.default.createElement("th",null,k?.left.label||t("before")),a.default.createElement("th",null,k?.right.label||t("after")))),a.default.createElement("tbody",null,St.map(c=>a.default.createElement("tr",{key:c},a.default.createElement("th",null,c),a.default.createElement("td",null,Ae.left?.[c]??"\u2014"),a.default.createElement("td",null,Ae.right?.[c]??"\u2014")))))),a.default.createElement("footer",{className:"vcs-toolbar"},a.default.createElement("button",{disabled:!ue,"aria-pressed":Oe,onClick:()=>_o(!Oe)},t(Oe?"side":"inline")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ue,checked:lt,onChange:c=>zo(c.target.checked)}),t("whitespace")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ue,checked:ct,onChange:c=>Ko(c.target.checked)}),t("wrap")),a.default.createElement("span",{className:"vcs-spacer"}),ue&&a.default.createElement("span",null,ut.count," ",t("changes")),a.default.createElement("button",{disabled:!ue||!k||!!Be,onClick:()=>Ce.current?.navigate("previous")},t("previous")),a.default.createElement("button",{disabled:!ue||!k||!!Be,onClick:()=>Ce.current?.navigate("next")},t("next")),xt.index>0&&a.default.createElement("span",{className:"vcs-review-position"},t("reviewPosition",{index:xt.index,total:xt.total})),a.default.createElement("span",{className:"vcs-toolbar-separator"}),a.default.createElement("button",{title:t("fileShortcut"),disabled:!De.length,onClick:()=>wt("previous")},t("previousFile")),a.default.createElement("button",{title:t("fileShortcut"),disabled:!De.length,onClick:()=>wt("next")},t("nextFile"))))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},i)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>t("title"),order:65},Wo))}
97
97
  return module.exports; }});
package/index.mjs CHANGED
@@ -30,6 +30,7 @@ const REQUEST_FIELDS = {
30
30
  'vcs/repositories': ['sessionId', 'subdirectory'],
31
31
  'vcs/svn-identity': ['sessionId', 'repositoryId'],
32
32
  'vcs/references': ['sessionId', 'repositoryId'],
33
+ 'vcs/stash-list': ['sessionId', 'repositoryId'],
33
34
  'vcs/status': ['sessionId', 'repositoryId', 'mode'],
34
35
  'vcs/compare': ['sessionId', 'repositoryId', 'mode', 'id', 'large'],
35
36
  'vcs/conflict-stages': ['sessionId', 'repositoryId', 'mode', 'id'],
@@ -100,6 +101,8 @@ async function readRepository(api, endpoint, repository, payload, {cwd, mode, si
100
101
  return api.getRevisionImage({...repository}, {base: payload.base, target: payload.target, id: payload.id, side: payload.side ?? 'right', signal});
101
102
  case 'vcs/references':
102
103
  return api.listReferences({...repository}, {signal});
104
+ case 'vcs/stash-list':
105
+ return api.listStashes({...repository}, {signal});
103
106
  case 'vcs/commit-image':
104
107
  return api.getCommitImage({...repository}, {commit: payload.commit, parentIndex: payload.parentIndex ?? 0, id: payload.id, side: payload.side ?? 'right', signal});
105
108
  case 'vcs/tree-file':
@@ -150,7 +153,7 @@ export function createHandler(ctx, api = adapter, maxActive = 4, { now = Date.no
150
153
  }
151
154
  if(bindSvnIdentityResolver!==undefined){if(typeof bindSvnIdentityResolver!=='function')throw new Error('Invalid internal SVN resolver binding');bindSvnIdentityResolver(async(address,signal)=>{validatePayload('vcs/svn-identity',address);signal?.throwIfAborted();const cwd=await resolveSessionCwd(ctx,address.sessionId,signal),entry=current(address.sessionId,cwd),repository=entry?.repositories.get(address.repositoryId);if(!repository)throw rediscover();if(repository.type!=='svn')throw invalid('SVN working copy required.');const identity=await api.getSvnIdentity({...repository},{signal});await assertCurrent(address.sessionId,cwd,entry,signal);if(entry.repositories.get(address.repositoryId)!==repository)throw rediscover();return {...identity,cwd};});}
152
155
  return async (endpoint, payload, signal) => {
153
- if (!['vcs/svn-identity', 'vcs/repositories', 'vcs/status', 'vcs/compare', 'vcs/conflict-stages', 'vcs/history', 'vcs/commit', 'vcs/commit-compare', 'vcs/revision-changes', 'vcs/revision-compare', 'vcs/file-history', 'vcs/blame', 'vcs/tree', 'vcs/tree-file', 'vcs/tree-segment', 'vcs/tree-history', 'vcs/commit-image', 'vcs/revision-image', 'vcs/workspace-image', 'vcs/references'].includes(endpoint)) return failure('vcs/not-found', 'Unknown VCS endpoint.');
156
+ if (!['vcs/svn-identity', 'vcs/repositories', 'vcs/status', 'vcs/compare', 'vcs/conflict-stages', 'vcs/history', 'vcs/commit', 'vcs/commit-compare', 'vcs/revision-changes', 'vcs/revision-compare', 'vcs/file-history', 'vcs/blame', 'vcs/tree', 'vcs/tree-file', 'vcs/tree-segment', 'vcs/tree-history', 'vcs/commit-image', 'vcs/revision-image', 'vcs/workspace-image', 'vcs/references', 'vcs/stash-list'].includes(endpoint)) return failure('vcs/not-found', 'Unknown VCS endpoint.');
154
157
  if (active >= maxActive) return failure('vcs/busy', 'Too many VCS requests. Please retry.');
155
158
  active++;
156
159
  let imageSlot=false,segmentSlot=false;
@@ -201,7 +204,7 @@ export function createHandler(ctx, api = adapter, maxActive = 4, { now = Date.no
201
204
  if (repository.type === 'svn' && mode !== 'all') throw invalid('SVN supports only all mode.');
202
205
  // Both adapter operations revalidate the canonical root; comparison also validates
203
206
  // the change ID against fresh status, so do not duplicate a full status scan here.
204
- if(['vcs/history','vcs/commit','vcs/commit-compare','vcs/revision-changes','vcs/revision-compare','vcs/file-history','vcs/blame','vcs/tree','vcs/tree-file','vcs/tree-segment','vcs/tree-history','vcs/conflict-stages','vcs/commit-image','vcs/revision-image','vcs/workspace-image','vcs/references'].includes(endpoint)&&repository.type!=='git')throw invalid('History currently supports Git only.');
207
+ if(['vcs/history','vcs/commit','vcs/commit-compare','vcs/revision-changes','vcs/revision-compare','vcs/file-history','vcs/blame','vcs/tree','vcs/tree-file','vcs/tree-segment','vcs/tree-history','vcs/conflict-stages','vcs/commit-image','vcs/revision-image','vcs/workspace-image','vcs/references','vcs/stash-list'].includes(endpoint)&&repository.type!=='git')throw invalid('History currently supports Git only.');
205
208
  if(endpoint==='vcs/tree-segment'||(['vcs/compare','vcs/commit-compare','vcs/revision-compare'].includes(endpoint)&&payload.large===true)){if(activeSegments>=1)return failure('vcs/busy','A text segment is already loading. Please retry.');activeSegments++;segmentSlot=true;}
206
209
  if(['vcs/commit-image','vcs/revision-image','vcs/workspace-image'].includes(endpoint)){
207
210
  if(activeImages>=2)return failure('vcs/busy','Too many image requests. Please retry.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feng0531/dsh-vcs",
3
- "version": "0.3.92",
3
+ "version": "0.3.94",
4
4
  "private": false,
5
5
  "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
6
6
  "type": "module",
package/vcs.mjs CHANGED
@@ -222,6 +222,25 @@ export async function listReferences(repo,{signal}={}){
222
222
  return {references:parseReferences(raw.toString('utf8'))};
223
223
  }
224
224
 
225
+ const STASH_FORMAT='%H%x00%gs%x00%gd';
226
+ export async function listStashes(repo,{signal}={}){
227
+ signal?.throwIfAborted();repo=await checkedRepo(repo,signal);
228
+ if(repo.type!=='git')throw new Error('Stash supports Git only');
229
+ const text=(await git(repo.root,['stash','list','--format='+STASH_FORMAT],MAX_TEXT,{signal})).toString('utf8');
230
+ if(!text.trim())return {stashes:[]};
231
+ const stashes=[];
232
+ for(const line of text.split('\n')){
233
+ if(!line)continue;
234
+ const fields=line.split('\0');
235
+ if(fields.length!==3)throw new Error('Invalid stash entry');
236
+ const [id,message,ref]=fields;
237
+ if(!/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(id))throw new Error('Invalid stash entry');
238
+ stashes.push({id,message:message||ref,ref});
239
+ if(stashes.length>1000)throw new Error('Stash exceeds entry limit');
240
+ }
241
+ return {stashes};
242
+ }
243
+
225
244
  export async function getCommitDetails(repo,options={}) {
226
245
  return commitDetails(repo,options,true);
227
246
  }
@@ -243,10 +262,16 @@ async function commitDetails(repo,{commit,parentIndex=0,signal}={},includeMessag
243
262
  try{message=(await git(repo.root,['log','--no-show-signature','--encoding=UTF-8','--max-count=1','--format=%B',commit,'--'],MAX_TEXT,{signal})).toString('utf8');}
244
263
  catch(error){if(error.code!=='TOO_LARGE')throw error;messageTruncated=true;}
245
264
  signal?.throwIfAborted();
265
+ let committer=null,committerDate=null;
266
+ try{
267
+ const identity=(await git(repo.root,['log','--no-show-signature','--encoding=UTF-8','--max-count=1','--format=%cn%x00%cI',commit,'--'],MAX_TEXT,{signal})).toString('utf8');
268
+ const cut=identity.indexOf('\0');
269
+ committer=cut===-1?identity.trim()||null:identity.slice(0,cut)||null;committerDate=cut===-1?null:identity.slice(cut+1);
270
+ }catch(error){if(error.code!=='TOO_LARGE')throw error;}
246
271
  let signature=null;
247
272
  try{signature=parseCommitSignature((await git(repo.root,['cat-file','commit',commit],MAX_TEXT,{signal})).toString('utf8'));}
248
273
  catch(error){if(error.code!=='TOO_LARGE')throw error;}
249
- return {...metadata,message,messageTruncated,signature,parent,parentIndex,changes};
274
+ return {...metadata,message,messageTruncated,committer,committerDate,signature,parent,parentIndex,changes};
250
275
  }
251
276
  function parseCommitChanges(text,scope){
252
277
  const fields=text.split(String.fromCharCode(0));