@feng0531/dsh-vcs 0.3.79 → 0.3.82
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 +1 -1
- package/git-history.mjs +7 -1
- package/package.json +1 -1
- package/vcs.mjs +1 -1
package/dist/client.js
CHANGED
|
@@ -92,6 +92,6 @@ var Ro=Object.create;var Ke=Object.defineProperty;var er=Object.getOwnPropertyDe
|
|
|
92
92
|
.vcs-root .vcs-toolbar{gap:6px}
|
|
93
93
|
.vcs-root .vcs-title{font-size:16px}
|
|
94
94
|
}
|
|
95
|
-
`;function so(e,t){return async(r,o,i)=>{let s=await e.rpc.call("/vcs-rpc",r,o,i);if(!s.ok){let p=new Error(s.error?.message||String(s.error||t()));throw p.code=s.error?.code,p}return s.value}}function gt(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,s)=>new Promise((p,f)=>{let d={run:i,signal:s,resolve:p,reject:f,abort:null};if(d.abort=()=>{let a=r.indexOf(d);a>=0&&(r.splice(a,1),f(new Error("Aborted")))},s?.aborted){f(new Error("Aborted"));return}s?.addEventListener("abort",d.abort,{once:!0}),r.push(d),o()})}var te=Z(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 s=0;for(;s<r.length-i&&s<o.length-i&&r[r.length-s-1]===o[o.length-s-1];)s++;let p=r.length-s,f=o.length-s,d=p-i,a=f-i,c=d&&a?(d+1)*(a+1):0,h=c>2e5,k=[],y=0;function C(u,x){y++,!(k.length>=2e3)&&k.push({left:u===null?null:{number:u+1,text:r[u]},right:x===null?null:{number:x+1,text:o[x]},kind:u===null?"insert":x===null?"delete":r[u]===o[x]?"equal":"replace"})}for(let u=0;u<i;u++)C(u,u);if(h||!d||!a)for(let u=0;u<Math.max(d,a);u++)C(u<d?i+u:null,u<a?i+u:null);else{let u=a+1,x=new Uint32Array(c);for(let g=d-1;g>=0;g--)for(let m=a-1;m>=0;m--)x[g*u+m]=r[i+g]===o[i+m]?x[(g+1)*u+m+1]+1:Math.max(x[(g+1)*u+m],x[g*u+m+1]);let b=0,v=0;for(;b<d||v<a;)b<d&&v<a&&r[i+b]===o[i+v]?C(i+b++,i+v++):b<d&&(v===a||x[(b+1)*u+v]>=x[b*u+v+1])?C(i+b++,null):C(null,i+v++)}for(let u=0;u<s;u++)C(p+u,f+u);return{rows:k,approximate:h,truncated:y>k.length,totalRows:y,omittedRows:y-k.length,leftLineCount:r.length,rightLineCount:o.length,lcsCells:h?0:c}}var lr={before:"Before",after:"After",readonly:"Read-only text comparison",approximate:"Approximate alignment: the changed region is too large for exact matching; lines are paired by position.",truncated:"Preview truncated to the first 2,000 aligned lines; additional lines are not shown.",empty:"Both versions are empty."},yt={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},dr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},cr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},pr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Te({comparison:e,labels:t={}}){let r=e?.left?.text??"",o=e?.right?.text??"",i=(0,te.useMemo)(()=>ao(r,o),[r,o]),s=f=>t[f]??lr[f],p=(f,d,a)=>{let c=f&&a!=="equal";return te.default.createElement("td",{style:{...yt,background:c?d==="left"?"#d6454520":"#259b4920":void 0}},te.default.createElement("div",{style:dr},te.default.createElement("span",{style:cr},f?.number??""),te.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},c?d==="left"?"\u2212":"+":""),te.default.createElement("pre",{style:pr},f?.text??"")))};return te.default.createElement("section",{className:"vcs-text-comparison","aria-label":s("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},i.approximate&&te.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),i.truncated&&te.default.createElement("div",{role:"status",style:{padding:8}},s("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:{...yt,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),te.default.createElement("th",{scope:"col",style:{...yt,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),te.default.createElement("tbody",null,i.rows.map((f,d)=>te.default.createElement("tr",{key:d,"data-kind":f.kind},p(f.left,"left",f.kind),p(f.right,"right",f.kind))))),!i.rows.length&&te.default.createElement("p",{style:{padding:8}},s("empty")))}var U=Z(require("react"),1);function lo(e,{width:t,height:r,signal:o,timeoutMs:i=1e4,createURL:s=d=>URL.createObjectURL(d),revokeURL:p=d=>URL.revokeObjectURL(d),createImage:f=()=>new Image}={}){return new Promise((d,a)=>{if(o?.aborted){a(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){a(new Error("Invalid image preview"));return}let c,h,k,y=!1,C=!1,u=()=>{C||(C=!0,h&&(h.src=""),c&&p(c))},x=()=>{clearTimeout(k),o?.removeEventListener("abort",v)},b=g=>{y||(y=!0,x(),u(),a(g))},v=()=>b(o.reason||new Error("Image cancelled"));try{c=s(e),h=f(),o?.addEventListener("abort",v,{once:!0}),k=setTimeout(()=>b(new Error("Image decode timed out")),i),h.src=c,Promise.resolve(h.decode()).then(()=>{if(!y){if(o?.aborted){v();return}if(h.naturalWidth!==t||h.naturalHeight!==r){b(new Error("Image dimensions mismatch"));return}y=!0,x(),d({url:c,dispose:u})}},b)}catch(g){b(g)}})}function ur({side:e,sessionId:t,repositoryId:r,commit:o,parentIndex:i,base:s,target:p,workspace:f=!1,mode:d,id:a,rpc:c,t:h,onRediscover:k}){let[y,C]=(0,U.useState)(null),[u,x]=(0,U.useState)(""),[b,v]=(0,U.useState)(0);return(0,U.useEffect)(()=>{let g=new AbortController,m;return C(null),x(""),(async()=>{let S=await c(f?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",f?{sessionId:t,repositoryId:r,mode:d,id:a,side:e}:s?{sessionId:t,repositoryId:r,base:s,target:p,id:a,side:e}:{sessionId:t,repositoryId:r,commit:o,parentIndex:i,id:a,side:e},g.signal);if(g.signal.aborted)return;if(S.absent){C(S);return}if(!["image/png","image/jpeg","image/webp"].includes(S.mime)||typeof S.base64!="string"||S.base64.length>2796204||!Number.isInteger(S.bytes)||S.bytes<1||S.bytes>2097152)throw Error(h("imageInvalid"));let H=atob(S.base64);if(H.length!==S.bytes)throw Error(h("imageInvalid"));let K=new Blob([Uint8Array.from(H,w=>w.charCodeAt(0))],{type:S.mime});if(m=await lo(K,{width:S.width,height:S.height,signal:g.signal}),g.signal.aborted){m.dispose();return}C({...S,url:m.url})})().catch(S=>{g.signal.aborted||(x(S.message),S.code==="vcs/rediscover-required"&&k())}),()=>{g.abort(),m?.dispose()}},[e,t,r,o,i,s,p,f,d,a,b]),U.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":h(e==="left"?"imageBefore":"imageAfter")},U.default.createElement("h5",null,h(e==="left"?"imageBefore":"imageAfter")),u?U.default.createElement("p",{role:"alert"},u," ",U.default.createElement("button",{onClick:()=>v(g=>g+1)},h("retry"))):y?U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,U.default.createElement("code",null,y.commit)," \xB7 ",y.path),y.absent?U.default.createElement("p",null,h("imageAbsent")):U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,y.mime,y.encoding?" \xB7 "+y.encoding:""," \xB7 ",y.width," \xD7 ",y.height," \xB7 ",y.bytes," B"),U.default.createElement("img",{src:y.url,alt:y.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),y.metadataStripped&&U.default.createElement("p",null,h("imageMetadata")))):U.default.createElement("p",{role:"status"},h("loading")))}function je(e){let[t,r]=(0,U.useState)(!1);return U.default.createElement("div",null,U.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("imageCompare")),t&&U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,e.t("imageScope")),U.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(o=>U.default.createElement(ur,{key:o,...e,side:o})))))}var J=Z(require("react"),1);var $=Z(require("react"),1);function Ye(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var ce=require("react");function co({load:e,node:t,comparison:r,key:o,single:i=!1,onReady:s=()=>{},onError:p=()=>{},onComputation:f=()=>{}}){let d=new AbortController,a,c=!1,h=()=>{let y=a;a=void 0,y?.dispose()};return{done:Promise.resolve().then(()=>(d.signal.throwIfAborted(),e(d.signal))).then(y=>{c||(a=y.createDiff(t,{single:i,onComputation:C=>{c||f(C)}}),a.setContent(r,o),c||s(a))}).catch(y=>{try{h()}finally{c||p(y)}}),dispose(){c||(c=!0,d.abort(),h())}}}async function Qe(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 s=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(s))throw new Error("Editor resource returned "+(s||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),t?.throwIfAborted(),o(e)}var Xe="0.3.79";function po({comparison:e,identity:t,enabled:r,single:o,line:i,sideBySide:s,ignoreWhitespace:p,wrap:f}){let d=(0,ce.useRef)(null),a=(0,ce.useRef)(null),[c,h]=(0,ce.useState)(!1),[k,y]=(0,ce.useState)(""),[C,u]=(0,ce.useState)("pending");return(0,ce.useEffect)(()=>{if(h(!1),u("pending"),y(""),!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 v=co({node:d.current,comparison:e,key:t,single:o,load:g=>Qe(x("editor.js")+"?v="+encodeURIComponent(Xe)+"&retry=0",{signal:g}),onReady:g=>{a.current=g,h(!0)},onError:g=>y(g.message),onComputation:u});return()=>{a.current=null;try{v.dispose()}finally{b.remove()}}},[r,e,t,o]),(0,ce.useEffect)(()=>{c&&o&&i&&a.current?.revealLine(i)},[c,o,i]),(0,ce.useEffect)(()=>{c&&a.current?.options({sideBySide:s,ignoreWhitespace:p,wrap:f})},[c,s,p,f]),{node:d,viewer:a,ready:c,error:k,computation:C}}function pe({comparison:e,identity:t,t:r,single:o=!1,line:i=null}){let[s,p]=(0,$.useState)(!0),[f,d]=(0,$.useState)(!1),[a,c]=(0,$.useState)(!1),[h,k]=(0,$.useState)(!0),{node:y,viewer:C,ready:u,error:x,computation:b}=po({comparison:e,identity:t,enabled:h,single:o,line:i,sideBySide:s,ignoreWhitespace:f,wrap:a});return $.default.createElement("div",null,$.default.createElement("button",{"aria-pressed":h,onClick:()=>k(v=>!v)},r(h?"historyBasic":"historyAdvanced")),u&&!o&&$.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},$.default.createElement("button",{"aria-pressed":s,onClick:()=>p(v=>!v)},r(s?"side":"inline")),$.default.createElement("label",null,$.default.createElement("input",{type:"checkbox",checked:f,onChange:v=>d(v.target.checked)}),r("whitespace")),$.default.createElement("label",null,$.default.createElement("input",{type:"checkbox",checked:a,onChange:v=>c(v.target.checked)}),r("wrap")),$.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},r("previous")),$.default.createElement("button",{onClick:()=>C.current?.navigate("next")},r("next"))),h&&!u&&!x&&$.default.createElement("p",{role:"status"},r("loading")),e.large&&!o&&u&&$.default.createElement("p",{role:"status"},r(b==="complete"?"diffComplete":b==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!u&&$.default.createElement("p",{role:"status"},r("largeFallback")),x&&$.default.createElement("p",{role:"status"},r("fallback")," ",x),$.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},$.default.createElement("div",{ref:y,style:{position:"absolute",inset:0,visibility:u?"visible":"hidden"},"aria-hidden":!u}),!u&&$.default.createElement(Te,{comparison:e,labels:Ye(r)})))}function vt({sessionId:e,repositoryId:t,mode:r,id:o,rpc:i,t:s,onRediscover:p}){let[f,d]=(0,J.useState)(null),[a,c]=(0,J.useState)(""),[h,k]=(0,J.useState)(0),[y,C]=(0,J.useState)(1),[u,x]=(0,J.useState)(3);(0,J.useEffect)(()=>{let w=new AbortController;return d(null),c(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:r,id:o},w.signal).then(T=>{w.signal.aborted||d(T)}).catch(T=>{w.signal.aborted||(c(T.message),T.code==="vcs/rediscover-required"&&p())}),()=>w.abort()},[e,t,r,o,h]);let b={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},v=s("conflictStageMissing"),g=b[y],m=b[u],S=(0,J.useMemo)(()=>{if(!f)return null;let w=E=>f.stages.find(R=>R.stage===E),T=E=>{let R=w(E);return!R||!R.present?{text:"",label:b[E]}:{text:R.text,label:b[E],...R.binary?{binary:!0}:{},...R.encoding?{encoding:R.encoding}:{},...R.notice?{notice:R.notice}:{}}},ue=T(y),M=T(u),ne=[ue.notice,M.notice].filter(Boolean);return w(y)?.present&&w(u)?.present||ne.push(v),{path:f.path,left:ue,right:M,binary:!!(ue.binary||M.binary),...ne.length?{notice:[...new Set(ne)].join(" \xB7 ")}:{}}},[f,y,u,g,m,v]);if(a)return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",{role:"alert"},a," ",J.default.createElement("button",{onClick:()=>k(w=>w+1)},s("retry"))));if(!f||!S)return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",{role:"status"},s("loading")));let H=w=>f.stages.find(T=>T.stage===w),K=S.binary&&!S.left.text&&!S.right.text;return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",null,s("conflictStagesScope")),J.default.createElement("ul",null,[1,2,3].map(w=>J.default.createElement("li",{key:w},J.default.createElement("code",null,b[w])," \xB7 ",H(w)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),H(w)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),H(w)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),H(w)?.present&&H(w)?.notice&&" \xB7 "+H(w).notice))),J.default.createElement("label",null,s("conflictStageLeft")," ",J.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:y,onChange:w=>C(Number(w.target.value))},[1,2,3].map(w=>J.default.createElement("option",{key:w,value:w},b[w])))),J.default.createElement("label",null,s("conflictStageRight")," ",J.default.createElement("select",{"aria-label":s("conflictStageRight"),value:u,onChange:w=>x(Number(w.target.value))},[1,2,3].map(w=>J.default.createElement("option",{key:w,value:w},b[w])))),S.notice&&J.default.createElement("p",{role:"status"},S.notice),K?J.default.createElement("p",{role:"status"},s("binary")):J.default.createElement(pe,{key:JSON.stringify([o,y,u,f.snapshot]),comparison:S,identity:JSON.stringify([e,t,r,o,y,u,f.snapshot]),t:s}))}var uo=Z(require("react"),1);function bt({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let r=e.checkout;return uo.default.createElement("span",{className:"vcs-submodule","data-checkout":r,title:e.recorded+" \xB7 "+t("submoduleCheckout_"+r)},t("submoduleBadge")," ",e.recorded.slice(0,10))}var _=Z(require("react"),1);function xt(e){return _.default.createElement(mr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function mr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[s,p]=(0,_.useState)(!1),[f,d]=(0,_.useState)(null),[a,c]=(0,_.useState)(""),[h,k]=(0,_.useState)(0);return(0,_.useEffect)(()=>{if(!s)return;let y=new AbortController;return d(null),c(""),r("vcs/svn-identity",{sessionId:e,repositoryId:t},y.signal).then(C=>{y.signal.aborted||d(C)}).catch(C=>{y.signal.aborted||(c(C.message),C.code==="vcs/rediscover-required"&&i())}),()=>y.abort()},[s,e,t,h]),_.default.createElement("section",null,_.default.createElement("button",{"aria-expanded":s,onClick:()=>p(y=>!y)},o("svnIdentity")),s&&_.default.createElement(_.default.Fragment,null,_.default.createElement("p",null,o("svnOfflineIdentity")),a?_.default.createElement("p",{role:"alert"},a," ",_.default.createElement("button",{onClick:()=>k(y=>y+1)},o("retry"))):f?_.default.createElement(_.default.Fragment,null,_.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(y=>_.default.createElement(_.default.Fragment,{key:y},_.default.createElement("dt",null,y),_.default.createElement("dd",null,_.default.createElement("code",null,f[y]))))),_.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))):_.default.createElement("p",{role:"status"},o("loading"))))}function $e(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 s=!0,p=o(()=>{s&&(s=!1,t())},e-r());return()=>{s&&(s=!1,i(p))}}function fo(e,t=Date.now()){if(!e||typeof e.token!="string"||!/^[a-f0-9]{64}$/.test(e.token)||typeof e.snapshot!="string"||!/^(0|[1-9][0-9]*)$/.test(e.snapshot)||BigInt(e.snapshot)>9223372036854775807n||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=t||e.expiresAt-t>3e5)throw Error("Invalid SVN consent response");return e}var ee=Z(require("react"),1);var G=Z(require("react"),1);function wt(e){return G.default.createElement(hr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function hr({sessionId:e,repositoryId:t,rpc:r,t:o,onApproved:i,onRediscover:s}){let[p,f]=(0,G.useState)(!1),[d,a]=(0,G.useState)(null),[c,h]=(0,G.useState)(!1),[k,y]=(0,G.useState)(""),[C,u]=(0,G.useState)(!1),[x,b]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!p)return;let m=new AbortController;return a(null),h(!1),y(""),u(!0),r("vcs/svn-describe",{sessionId:e,repositoryId:t},m.signal).then(S=>{m.signal.aborted||a(S)}).catch(S=>{m.signal.aborted||(y(S.message),S.code==="vcs/rediscover-required"&&s())}).finally(()=>{m.signal.aborted||u(!1)}),()=>m.abort()},[p,e,t,x]);let[v,g]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!p||!d||d.expiresAt===void 0)return;let m=()=>{a(null),h(!1),g(0),u(!1),y(o("svnOfferExpired"))};try{return $e(d.expiresAt,m)}catch{m()}},[p,d]),(0,G.useEffect)(()=>{if(!v||!p||!d)return;let m=new AbortController;return u(!0),y(""),r("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:d.offer,explicit:!0},m.signal).then(S=>{m.signal.aborted||i(S)}).catch(S=>{m.signal.aborted||(y(S.message),h(!1),S.code==="vcs/rediscover-required"&&s())}).finally(()=>{m.signal.aborted||u(!1)}),()=>m.abort()},[v,p,d]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":p,onClick:()=>{g(0),f(m=>!m)}},o("svnConsentReview")),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,o("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{g(0),b(m=>m+1)}},o("retry"))),d&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(m=>G.default.createElement(G.default.Fragment,{key:m},G.default.createElement("dt",null,m),G.default.createElement("dd",null,G.default.createElement("code",null,d[m]))))),d.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:c,disabled:C,onChange:m=>h(m.target.checked)}),o("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!c,onClick:()=>g(m=>m+1)},o("svnConsentApprove"))):G.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},o("loading"))))}var A=Z(require("react"),1);function St(e){return A.default.createElement(gr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function gr({sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:s,onRediscover:p}){let[f,d]=(0,A.useState)(o),[a,c]=(0,A.useState)(null),[h,k]=(0,A.useState)(null),[y,C]=(0,A.useState)(""),[u,x]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let b=new AbortController;return c(null),k(null),C(""),i("vcs/svn-log",{sessionId:e,repositoryId:t,token:r,snapshot:o,cursor:f,limit:50},b.signal).then(v=>{b.signal.aborted||c(v)}).catch(v=>{b.signal.aborted||(C(v.message),v.code==="vcs/rediscover-required"&&p())}),()=>b.abort()},[f,u]),A.default.createElement("section",null,A.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",o),y?A.default.createElement("p",{role:"alert"},y," ",A.default.createElement("button",{onClick:()=>x(b=>b+1)},s("retry"))):a?A.default.createElement(A.default.Fragment,null,A.default.createElement("ol",null,a.entries.map(b=>A.default.createElement("li",{key:b.revision},A.default.createElement("button",{onClick:()=>k(b.revision)},"r",b.revision," \xB7 ",b.message)))),a.nextRevision!==null&&A.default.createElement("button",{onClick:()=>d(a.nextRevision)},s("historyMore"))):A.default.createElement("p",{role:"status"},s("loading")),h&&A.default.createElement(yr,{key:h,sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:s,onRediscover:p,revision:h}))}function yr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:s,t:p,onRediscover:f}){let[d,a]=(0,A.useState)(null),[c,h]=(0,A.useState)(null),[k,y]=(0,A.useState)(""),[C,u]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let x=new AbortController;return a(null),h(null),y(""),s("vcs/svn-detail",{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i},x.signal).then(b=>{x.signal.aborted||a(b)}).catch(b=>{x.signal.aborted||(y(b.message),b.code==="vcs/rediscover-required"&&f())}),()=>x.abort()},[C]),A.default.createElement("section",null,k?A.default.createElement("p",{role:"alert"},k," ",A.default.createElement("button",{onClick:()=>u(x=>x+1)},p("retry"))):d?A.default.createElement(A.default.Fragment,null,A.default.createElement("p",null,d.message),d.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:()=>h({id:x.id,mode:"compare"})},p("svnHistoricalDiff")),A.default.createElement("button",{onClick:()=>h({id:x.id,mode:"trace"})},p("fileHistory")),x.copyFromPath&&x.copyFromRevision&&A.default.createElement("button",{onClick:()=>h({id:x.id,mode:"copytrace"})},p("svnCopyHistory")," \xB7 ",x.copyFromPath," @r",x.copyFromRevision),x.copySourceOutsideScope&&A.default.createElement("span",null,p("svnCopyOutside")))))):A.default.createElement("p",{role:"status"},p("loading")),c&&A.default.createElement(vr,{key:JSON.stringify(c),sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:s,t:p,onRediscover:f,...c}))}function vr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:s,t:p,onRediscover:f,id:d,mode:a}){let[c,h]=(0,A.useState)(null),[k,y]=(0,A.useState)(null),[C,u]=(0,A.useState)(""),[x,b]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let v=new AbortController;return h(null),u(""),s("vcs/svn-"+a,{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,id:d,...k===null?{}:{cursor:k}},v.signal).then(g=>{v.signal.aborted||h(g)}).catch(g=>{v.signal.aborted||(u(g.message),g.code==="vcs/rediscover-required"&&f())}),()=>v.abort()},[k,x]),C?A.default.createElement("p",{role:"alert"},C," ",A.default.createElement("button",{onClick:()=>b(v=>v+1)},p("retry"))):c?a==="compare"?c.binary?A.default.createElement("p",null,p("binary")):A.default.createElement(pe,{comparison:c,identity:JSON.stringify([e,t,o,i,d]),t:p}):A.default.createElement("section",null,A.default.createElement("p",null,p(a==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",c.path," \xB7 peg r",c.pegRevision),A.default.createElement("ol",null,c.entries.map(v=>A.default.createElement("li",{key:v.revision},"r",v.revision," \xB7 ",v.message))),c.nextRevision!==null&&A.default.createElement("button",{onClick:()=>y(c.nextRevision)},p("historyMore"))):A.default.createElement("p",{role:"status"},p("loading"))}function kt(e){return ee.default.createElement(br,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function br({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[s,p]=(0,ee.useState)(null),[f,d]=(0,ee.useState)(!1),[a,c]=(0,ee.useState)(""),[h,k]=(0,ee.useState)(0);(0,ee.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token})).catch(()=>{})}},[s,e,t]),(0,ee.useEffect)(()=>{if(s)try{return $e(s.expiresAt,()=>{p(null),k(0),d(!1),c(o("svnExpired"))})}catch{p(null),c(o("svnExpired"))}},[s]),(0,ee.useEffect)(()=>{if(!h||!s)return;let u=new AbortController;return d(!0),c(""),r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token},u.signal).then(()=>{u.signal.aborted||p(null)}).catch(x=>{u.signal.aborted||(c(x.message),x.code==="vcs/rediscover-required"&&i())}).finally(()=>{u.signal.aborted||d(!1)}),()=>u.abort()},[h,s]);let y=u=>{try{fo(u),c(""),k(0),p(u)}catch(x){c(x.message)}},C=async(...u)=>{try{return await r(...u)}catch(x){throw x.code==="vcs/svn-consent-required"&&!u[2]?.aborted&&(p(null),k(0),c(o("svnExpired"))),x}};return ee.default.createElement("section",null,!s&&a&&ee.default.createElement("p",{role:"status"},a),s?ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("p",null,o("svnGrantScope")),ee.default.createElement("button",{disabled:f,onClick:()=>k(u=>u+1)},o("svnRevoke")),a&&ee.default.createElement("p",{role:"alert"},a),!f&&ee.default.createElement(St,{sessionId:e,repositoryId:t,t:o,onRediscover:i,rpc:C,token:s.token,snapshot:s.snapshot})):ee.default.createElement(wt,{sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i,onApproved:y}))}var N=Z(require("react"),1);function mo(e){let t=new Map;for(let r of e){let o=t.get(r.commit);o||(o={names:[],hidden:0},t.set(r.commit,o)),o.names.length<3?o.names.push(r.name):o.hidden++}return t}var q=Z(require("react"),1);var D=Z(require("react"),1);var W=Z(require("react"),1);var I=Z(require("react"),1);function Ct(e){return I.default.createElement(xr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function xr({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:s,onRediscover:p}){let[f,d]=(0,I.useState)(!1),[a,c]=(0,I.useState)([0]),[h,k]=(0,I.useState)(null),[y,C]=(0,I.useState)(""),[u,x]=(0,I.useState)(0),b=a.at(-1);(0,I.useEffect)(()=>{if(!f)return;let g=new AbortController;return k(null),C(""),i("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:r,path:o,offset:b},g.signal).then(m=>{g.signal.aborted||k(m)}).catch(m=>{g.signal.aborted||(C(m.message),m.code==="vcs/rediscover-required"&&p())}),()=>g.abort()},[f,b,e,t,r,o,u]);let v=(0,I.useMemo)(()=>h?{path:o,left:{label:r,text:h.text},right:{label:r,text:h.text}}:null,[h,o,r]);return I.default.createElement("section",null,I.default.createElement("button",{"aria-expanded":f,onClick:()=>d(g=>!g)},s("segments")),f&&I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,s("segmentScope")),y?I.default.createElement("p",{role:"alert"},y," ",I.default.createElement("button",{onClick:()=>x(g=>g+1)},s("retry"))):h?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,s("segmentBytes"),": ",h.offset,"\u2013",h.endOffset," / ",h.totalBytes," \xB7 ",I.default.createElement("code",null,h.oid)),I.default.createElement("button",{disabled:a.length===1,onClick:()=>c(g=>g.slice(0,-1))},s("previous")),I.default.createElement("button",{disabled:h.nextOffset===null,onClick:()=>c(g=>[...g,h.nextOffset])},s("next")),I.default.createElement(pe,{single:!0,comparison:v,identity:JSON.stringify([e,t,r,o,b]),t:s})):I.default.createElement("p",{role:"status"},s("loading"))))}var F=Z(require("react"),1);function wr({sessionId:e,repositoryId:t,commit:r,path:o,follow:i,rpc:s,t:p,onRediscover:f,onSelectCommit:d}){let[a,c]=(0,F.useState)({commits:[],nextOffset:null}),[h,k]=(0,F.useState)(0),[y,C]=(0,F.useState)(0),[u,x]=(0,F.useState)(!0),[b,v]=(0,F.useState)("");(0,F.useEffect)(()=>{let m=new AbortController;return x(!0),v(""),s("vcs/tree-history",{sessionId:e,repositoryId:t,commit:r,path:o,offset:h,limit:50,follow:i},m.signal).then(S=>{m.signal.aborted||c(H=>({...S,commits:h?[...H.commits,...S.commits]:S.commits}))}).catch(S=>{m.signal.aborted||(v(S.message),S.code==="vcs/rediscover-required"&&f())}).finally(()=>{m.signal.aborted||x(!1)}),()=>m.abort()},[e,t,r,o,h,y,i]);let g=m=>p(m.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":m.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":m.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return F.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":u},F.default.createElement("p",null,p("pathHistoryScope")),F.default.createElement("p",{style:{overflowWrap:"anywhere"}},F.default.createElement("code",null,a.path||o)," \xB7 ",F.default.createElement("code",null,r),a.followsRenames!==void 0&&F.default.createElement(F.default.Fragment,null," \xB7 ",p(a.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),F.default.createElement("ol",null,a.commits.map(m=>F.default.createElement("li",{key:m.id},F.default.createElement("code",{title:m.id},m.id.slice(0,10))," \xB7 ",d?F.default.createElement("button",{onClick:()=>d(m.id,m.path||o)},m.subject):m.subject,F.default.createElement("div",null,m.boundary&&F.default.createElement("span",null,g(m)," "),m.path&&F.default.createElement("code",null,m.oldPath?m.oldPath+" \u2192 ":"",m.path)," ",m.similarity!==void 0&&F.default.createElement("span",null,p("fileHistorySimilarity"),": ",m.similarity,"% \xB7 "),m.author," \xB7 ",F.default.createElement("time",{dateTime:m.date},m.date))))),u&&F.default.createElement("p",{role:"status"},p("loading")),b&&F.default.createElement("p",{role:"alert"},b," ",F.default.createElement("button",{onClick:()=>C(m=>m+1)},p("retry"))),!u&&!b&&!a.commits.length&&F.default.createElement("p",null,p("historyEmpty")),a.truncated&&F.default.createElement("p",{role:"status"},p("historyLimit")),!b&&a.nextOffset!==null&&F.default.createElement("button",{disabled:u,onClick:()=>k(a.nextOffset)},p("historyMore")))}function Nt(e){let[t,r]=(0,F.useState)(!1),[o,i]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("pathHistory")),t&&F.default.createElement(F.default.Fragment,null,F.default.createElement("label",null,F.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),F.default.createElement("p",null,e.t("pathHistoryFollowScope")),F.default.createElement(wr,{key:String(o),follow:o,...e})))}function Ge({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:s,onRediscover:p,onClose:f,onSelectCommit:d,line:a=null}){let[c,h]=(0,W.useState)(null),[k,y]=(0,W.useState)(""),[C,u]=(0,W.useState)(0);(0,W.useEffect)(()=>{let b=new AbortController;return h(null),y(""),i("vcs/tree-file",{sessionId:e,repositoryId:t,commit:r,path:o},b.signal).then(v=>{b.signal.aborted||h(v)}).catch(v=>{b.signal.aborted||(y(v.message),v.code==="vcs/rediscover-required"&&p())}),()=>b.abort()},[e,t,r,o,C]);let x=(0,W.useMemo)(()=>c?{path:o,left:{label:r,text:c.text||""},right:{label:r,text:c.text||""}}:null,[c,o,r]);return W.default.createElement("section",{"aria-label":s("treePreview")},W.default.createElement("h4",null,o),W.default.createElement("button",{onClick:f},s("treeClose")),W.default.createElement("p",null,W.default.createElement("code",null,r)),k?W.default.createElement("p",{role:"alert"},k," ",W.default.createElement("button",{onClick:()=>u(b=>b+1)},s("retry"))):c?W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,W.default.createElement("code",null,c.oid)," \xB7 ",s("encoding"),": ",c.encoding||"\u2014"),a&&W.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",a,!c.text||a>c.text.split(`
|
|
95
|
+
`;function so(e,t){return async(r,o,i)=>{let s=await e.rpc.call("/vcs-rpc",r,o,i);if(!s.ok){let p=new Error(s.error?.message||String(s.error||t()));throw p.code=s.error?.code,p}return s.value}}function gt(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,s)=>new Promise((p,f)=>{let d={run:i,signal:s,resolve:p,reject:f,abort:null};if(d.abort=()=>{let a=r.indexOf(d);a>=0&&(r.splice(a,1),f(new Error("Aborted")))},s?.aborted){f(new Error("Aborted"));return}s?.addEventListener("abort",d.abort,{once:!0}),r.push(d),o()})}var te=Z(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 s=0;for(;s<r.length-i&&s<o.length-i&&r[r.length-s-1]===o[o.length-s-1];)s++;let p=r.length-s,f=o.length-s,d=p-i,a=f-i,c=d&&a?(d+1)*(a+1):0,h=c>2e5,k=[],y=0;function C(u,x){y++,!(k.length>=2e3)&&k.push({left:u===null?null:{number:u+1,text:r[u]},right:x===null?null:{number:x+1,text:o[x]},kind:u===null?"insert":x===null?"delete":r[u]===o[x]?"equal":"replace"})}for(let u=0;u<i;u++)C(u,u);if(h||!d||!a)for(let u=0;u<Math.max(d,a);u++)C(u<d?i+u:null,u<a?i+u:null);else{let u=a+1,x=new Uint32Array(c);for(let g=d-1;g>=0;g--)for(let m=a-1;m>=0;m--)x[g*u+m]=r[i+g]===o[i+m]?x[(g+1)*u+m+1]+1:Math.max(x[(g+1)*u+m],x[g*u+m+1]);let b=0,v=0;for(;b<d||v<a;)b<d&&v<a&&r[i+b]===o[i+v]?C(i+b++,i+v++):b<d&&(v===a||x[(b+1)*u+v]>=x[b*u+v+1])?C(i+b++,null):C(null,i+v++)}for(let u=0;u<s;u++)C(p+u,f+u);return{rows:k,approximate:h,truncated:y>k.length,totalRows:y,omittedRows:y-k.length,leftLineCount:r.length,rightLineCount:o.length,lcsCells:h?0:c}}var lr={before:"Before",after:"After",readonly:"Read-only text comparison",approximate:"Approximate alignment: the changed region is too large for exact matching; lines are paired by position.",truncated:"Preview truncated to the first 2,000 aligned lines; additional lines are not shown.",empty:"Both versions are empty."},yt={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},dr={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},cr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},pr={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Te({comparison:e,labels:t={}}){let r=e?.left?.text??"",o=e?.right?.text??"",i=(0,te.useMemo)(()=>ao(r,o),[r,o]),s=f=>t[f]??lr[f],p=(f,d,a)=>{let c=f&&a!=="equal";return te.default.createElement("td",{style:{...yt,background:c?d==="left"?"#d6454520":"#259b4920":void 0}},te.default.createElement("div",{style:dr},te.default.createElement("span",{style:cr},f?.number??""),te.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},c?d==="left"?"\u2212":"+":""),te.default.createElement("pre",{style:pr},f?.text??"")))};return te.default.createElement("section",{className:"vcs-text-comparison","aria-label":s("readonly"),style:{flex:"1 1 0",minHeight:0,minWidth:0,overflow:"auto",position:"absolute",inset:0},tabIndex:0},i.approximate&&te.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),i.truncated&&te.default.createElement("div",{role:"status",style:{padding:8}},s("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:{...yt,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),te.default.createElement("th",{scope:"col",style:{...yt,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),te.default.createElement("tbody",null,i.rows.map((f,d)=>te.default.createElement("tr",{key:d,"data-kind":f.kind},p(f.left,"left",f.kind),p(f.right,"right",f.kind))))),!i.rows.length&&te.default.createElement("p",{style:{padding:8}},s("empty")))}var U=Z(require("react"),1);function lo(e,{width:t,height:r,signal:o,timeoutMs:i=1e4,createURL:s=d=>URL.createObjectURL(d),revokeURL:p=d=>URL.revokeObjectURL(d),createImage:f=()=>new Image}={}){return new Promise((d,a)=>{if(o?.aborted){a(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){a(new Error("Invalid image preview"));return}let c,h,k,y=!1,C=!1,u=()=>{C||(C=!0,h&&(h.src=""),c&&p(c))},x=()=>{clearTimeout(k),o?.removeEventListener("abort",v)},b=g=>{y||(y=!0,x(),u(),a(g))},v=()=>b(o.reason||new Error("Image cancelled"));try{c=s(e),h=f(),o?.addEventListener("abort",v,{once:!0}),k=setTimeout(()=>b(new Error("Image decode timed out")),i),h.src=c,Promise.resolve(h.decode()).then(()=>{if(!y){if(o?.aborted){v();return}if(h.naturalWidth!==t||h.naturalHeight!==r){b(new Error("Image dimensions mismatch"));return}y=!0,x(),d({url:c,dispose:u})}},b)}catch(g){b(g)}})}function ur({side:e,sessionId:t,repositoryId:r,commit:o,parentIndex:i,base:s,target:p,workspace:f=!1,mode:d,id:a,rpc:c,t:h,onRediscover:k}){let[y,C]=(0,U.useState)(null),[u,x]=(0,U.useState)(""),[b,v]=(0,U.useState)(0);return(0,U.useEffect)(()=>{let g=new AbortController,m;return C(null),x(""),(async()=>{let S=await c(f?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",f?{sessionId:t,repositoryId:r,mode:d,id:a,side:e}:s?{sessionId:t,repositoryId:r,base:s,target:p,id:a,side:e}:{sessionId:t,repositoryId:r,commit:o,parentIndex:i,id:a,side:e},g.signal);if(g.signal.aborted)return;if(S.absent){C(S);return}if(!["image/png","image/jpeg","image/webp"].includes(S.mime)||typeof S.base64!="string"||S.base64.length>2796204||!Number.isInteger(S.bytes)||S.bytes<1||S.bytes>2097152)throw Error(h("imageInvalid"));let H=atob(S.base64);if(H.length!==S.bytes)throw Error(h("imageInvalid"));let K=new Blob([Uint8Array.from(H,w=>w.charCodeAt(0))],{type:S.mime});if(m=await lo(K,{width:S.width,height:S.height,signal:g.signal}),g.signal.aborted){m.dispose();return}C({...S,url:m.url})})().catch(S=>{g.signal.aborted||(x(S.message),S.code==="vcs/rediscover-required"&&k())}),()=>{g.abort(),m?.dispose()}},[e,t,r,o,i,s,p,f,d,a,b]),U.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":h(e==="left"?"imageBefore":"imageAfter")},U.default.createElement("h5",null,h(e==="left"?"imageBefore":"imageAfter")),u?U.default.createElement("p",{role:"alert"},u," ",U.default.createElement("button",{onClick:()=>v(g=>g+1)},h("retry"))):y?U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,U.default.createElement("code",null,y.commit)," \xB7 ",y.path),y.absent?U.default.createElement("p",null,h("imageAbsent")):U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,y.mime,y.encoding?" \xB7 "+y.encoding:""," \xB7 ",y.width," \xD7 ",y.height," \xB7 ",y.bytes," B"),U.default.createElement("img",{src:y.url,alt:y.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),y.metadataStripped&&U.default.createElement("p",null,h("imageMetadata")))):U.default.createElement("p",{role:"status"},h("loading")))}function je(e){let[t,r]=(0,U.useState)(!1);return U.default.createElement("div",null,U.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("imageCompare")),t&&U.default.createElement(U.default.Fragment,null,U.default.createElement("p",null,e.t("imageScope")),U.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(o=>U.default.createElement(ur,{key:o,...e,side:o})))))}var J=Z(require("react"),1);var $=Z(require("react"),1);function Ye(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var ce=require("react");function co({load:e,node:t,comparison:r,key:o,single:i=!1,onReady:s=()=>{},onError:p=()=>{},onComputation:f=()=>{}}){let d=new AbortController,a,c=!1,h=()=>{let y=a;a=void 0,y?.dispose()};return{done:Promise.resolve().then(()=>(d.signal.throwIfAborted(),e(d.signal))).then(y=>{c||(a=y.createDiff(t,{single:i,onComputation:C=>{c||f(C)}}),a.setContent(r,o),c||s(a))}).catch(y=>{try{h()}finally{c||p(y)}}),dispose(){c||(c=!0,d.abort(),h())}}}async function Qe(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 s=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(s))throw new Error("Editor resource returned "+(s||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),t?.throwIfAborted(),o(e)}var Xe="0.3.82";function po({comparison:e,identity:t,enabled:r,single:o,line:i,sideBySide:s,ignoreWhitespace:p,wrap:f}){let d=(0,ce.useRef)(null),a=(0,ce.useRef)(null),[c,h]=(0,ce.useState)(!1),[k,y]=(0,ce.useState)(""),[C,u]=(0,ce.useState)("pending");return(0,ce.useEffect)(()=>{if(h(!1),u("pending"),y(""),!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 v=co({node:d.current,comparison:e,key:t,single:o,load:g=>Qe(x("editor.js")+"?v="+encodeURIComponent(Xe)+"&retry=0",{signal:g}),onReady:g=>{a.current=g,h(!0)},onError:g=>y(g.message),onComputation:u});return()=>{a.current=null;try{v.dispose()}finally{b.remove()}}},[r,e,t,o]),(0,ce.useEffect)(()=>{c&&o&&i&&a.current?.revealLine(i)},[c,o,i]),(0,ce.useEffect)(()=>{c&&a.current?.options({sideBySide:s,ignoreWhitespace:p,wrap:f})},[c,s,p,f]),{node:d,viewer:a,ready:c,error:k,computation:C}}function pe({comparison:e,identity:t,t:r,single:o=!1,line:i=null}){let[s,p]=(0,$.useState)(!0),[f,d]=(0,$.useState)(!1),[a,c]=(0,$.useState)(!1),[h,k]=(0,$.useState)(!0),{node:y,viewer:C,ready:u,error:x,computation:b}=po({comparison:e,identity:t,enabled:h,single:o,line:i,sideBySide:s,ignoreWhitespace:f,wrap:a});return $.default.createElement("div",null,$.default.createElement("button",{"aria-pressed":h,onClick:()=>k(v=>!v)},r(h?"historyBasic":"historyAdvanced")),u&&!o&&$.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},$.default.createElement("button",{"aria-pressed":s,onClick:()=>p(v=>!v)},r(s?"side":"inline")),$.default.createElement("label",null,$.default.createElement("input",{type:"checkbox",checked:f,onChange:v=>d(v.target.checked)}),r("whitespace")),$.default.createElement("label",null,$.default.createElement("input",{type:"checkbox",checked:a,onChange:v=>c(v.target.checked)}),r("wrap")),$.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},r("previous")),$.default.createElement("button",{onClick:()=>C.current?.navigate("next")},r("next"))),h&&!u&&!x&&$.default.createElement("p",{role:"status"},r("loading")),e.large&&!o&&u&&$.default.createElement("p",{role:"status"},r(b==="complete"?"diffComplete":b==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!u&&$.default.createElement("p",{role:"status"},r("largeFallback")),x&&$.default.createElement("p",{role:"status"},r("fallback")," ",x),$.default.createElement("div",{key:"editor-host",style:{position:"relative",height:360}},$.default.createElement("div",{ref:y,style:{position:"absolute",inset:0,visibility:u?"visible":"hidden"},"aria-hidden":!u}),!u&&$.default.createElement(Te,{comparison:e,labels:Ye(r)})))}function vt({sessionId:e,repositoryId:t,mode:r,id:o,rpc:i,t:s,onRediscover:p}){let[f,d]=(0,J.useState)(null),[a,c]=(0,J.useState)(""),[h,k]=(0,J.useState)(0),[y,C]=(0,J.useState)(1),[u,x]=(0,J.useState)(3);(0,J.useEffect)(()=>{let w=new AbortController;return d(null),c(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:t,mode:r,id:o},w.signal).then(T=>{w.signal.aborted||d(T)}).catch(T=>{w.signal.aborted||(c(T.message),T.code==="vcs/rediscover-required"&&p())}),()=>w.abort()},[e,t,r,o,h]);let b={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},v=s("conflictStageMissing"),g=b[y],m=b[u],S=(0,J.useMemo)(()=>{if(!f)return null;let w=E=>f.stages.find(R=>R.stage===E),T=E=>{let R=w(E);return!R||!R.present?{text:"",label:b[E]}:{text:R.text,label:b[E],...R.binary?{binary:!0}:{},...R.encoding?{encoding:R.encoding}:{},...R.notice?{notice:R.notice}:{}}},ue=T(y),M=T(u),ne=[ue.notice,M.notice].filter(Boolean);return w(y)?.present&&w(u)?.present||ne.push(v),{path:f.path,left:ue,right:M,binary:!!(ue.binary||M.binary),...ne.length?{notice:[...new Set(ne)].join(" \xB7 ")}:{}}},[f,y,u,g,m,v]);if(a)return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",{role:"alert"},a," ",J.default.createElement("button",{onClick:()=>k(w=>w+1)},s("retry"))));if(!f||!S)return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",{role:"status"},s("loading")));let H=w=>f.stages.find(T=>T.stage===w),K=S.binary&&!S.left.text&&!S.right.text;return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",null,s("conflictStagesScope")),J.default.createElement("ul",null,[1,2,3].map(w=>J.default.createElement("li",{key:w},J.default.createElement("code",null,b[w])," \xB7 ",H(w)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),H(w)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),H(w)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),H(w)?.present&&H(w)?.notice&&" \xB7 "+H(w).notice))),J.default.createElement("label",null,s("conflictStageLeft")," ",J.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:y,onChange:w=>C(Number(w.target.value))},[1,2,3].map(w=>J.default.createElement("option",{key:w,value:w},b[w])))),J.default.createElement("label",null,s("conflictStageRight")," ",J.default.createElement("select",{"aria-label":s("conflictStageRight"),value:u,onChange:w=>x(Number(w.target.value))},[1,2,3].map(w=>J.default.createElement("option",{key:w,value:w},b[w])))),S.notice&&J.default.createElement("p",{role:"status"},S.notice),K?J.default.createElement("p",{role:"status"},s("binary")):J.default.createElement(pe,{key:JSON.stringify([o,y,u,f.snapshot]),comparison:S,identity:JSON.stringify([e,t,r,o,y,u,f.snapshot]),t:s}))}var uo=Z(require("react"),1);function bt({submodule:e,t}){if(!e||typeof e.recorded!="string")return null;let r=e.checkout;return uo.default.createElement("span",{className:"vcs-submodule","data-checkout":r,title:e.recorded+" \xB7 "+t("submoduleCheckout_"+r)},t("submoduleBadge")," ",e.recorded.slice(0,10))}var _=Z(require("react"),1);function xt(e){return _.default.createElement(mr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function mr({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[s,p]=(0,_.useState)(!1),[f,d]=(0,_.useState)(null),[a,c]=(0,_.useState)(""),[h,k]=(0,_.useState)(0);return(0,_.useEffect)(()=>{if(!s)return;let y=new AbortController;return d(null),c(""),r("vcs/svn-identity",{sessionId:e,repositoryId:t},y.signal).then(C=>{y.signal.aborted||d(C)}).catch(C=>{y.signal.aborted||(c(C.message),C.code==="vcs/rediscover-required"&&i())}),()=>y.abort()},[s,e,t,h]),_.default.createElement("section",null,_.default.createElement("button",{"aria-expanded":s,onClick:()=>p(y=>!y)},o("svnIdentity")),s&&_.default.createElement(_.default.Fragment,null,_.default.createElement("p",null,o("svnOfflineIdentity")),a?_.default.createElement("p",{role:"alert"},a," ",_.default.createElement("button",{onClick:()=>k(y=>y+1)},o("retry"))):f?_.default.createElement(_.default.Fragment,null,_.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(y=>_.default.createElement(_.default.Fragment,{key:y},_.default.createElement("dt",null,y),_.default.createElement("dd",null,_.default.createElement("code",null,f[y]))))),_.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))):_.default.createElement("p",{role:"status"},o("loading"))))}function $e(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 s=!0,p=o(()=>{s&&(s=!1,t())},e-r());return()=>{s&&(s=!1,i(p))}}function fo(e,t=Date.now()){if(!e||typeof e.token!="string"||!/^[a-f0-9]{64}$/.test(e.token)||typeof e.snapshot!="string"||!/^(0|[1-9][0-9]*)$/.test(e.snapshot)||BigInt(e.snapshot)>9223372036854775807n||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=t||e.expiresAt-t>3e5)throw Error("Invalid SVN consent response");return e}var ee=Z(require("react"),1);var G=Z(require("react"),1);function wt(e){return G.default.createElement(hr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function hr({sessionId:e,repositoryId:t,rpc:r,t:o,onApproved:i,onRediscover:s}){let[p,f]=(0,G.useState)(!1),[d,a]=(0,G.useState)(null),[c,h]=(0,G.useState)(!1),[k,y]=(0,G.useState)(""),[C,u]=(0,G.useState)(!1),[x,b]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!p)return;let m=new AbortController;return a(null),h(!1),y(""),u(!0),r("vcs/svn-describe",{sessionId:e,repositoryId:t},m.signal).then(S=>{m.signal.aborted||a(S)}).catch(S=>{m.signal.aborted||(y(S.message),S.code==="vcs/rediscover-required"&&s())}).finally(()=>{m.signal.aborted||u(!1)}),()=>m.abort()},[p,e,t,x]);let[v,g]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!p||!d||d.expiresAt===void 0)return;let m=()=>{a(null),h(!1),g(0),u(!1),y(o("svnOfferExpired"))};try{return $e(d.expiresAt,m)}catch{m()}},[p,d]),(0,G.useEffect)(()=>{if(!v||!p||!d)return;let m=new AbortController;return u(!0),y(""),r("vcs/svn-approve",{sessionId:e,repositoryId:t,offer:d.offer,explicit:!0},m.signal).then(S=>{m.signal.aborted||i(S)}).catch(S=>{m.signal.aborted||(y(S.message),h(!1),S.code==="vcs/rediscover-required"&&s())}).finally(()=>{m.signal.aborted||u(!1)}),()=>m.abort()},[v,p,d]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":p,onClick:()=>{g(0),f(m=>!m)}},o("svnConsentReview")),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,o("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{g(0),b(m=>m+1)}},o("retry"))),d&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(m=>G.default.createElement(G.default.Fragment,{key:m},G.default.createElement("dt",null,m),G.default.createElement("dd",null,G.default.createElement("code",null,d[m]))))),d.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:c,disabled:C,onChange:m=>h(m.target.checked)}),o("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!c,onClick:()=>g(m=>m+1)},o("svnConsentApprove"))):G.default.createElement("p",{role:"status"},o("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},o("loading"))))}var A=Z(require("react"),1);function St(e){return A.default.createElement(gr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function gr({sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:s,onRediscover:p}){let[f,d]=(0,A.useState)(o),[a,c]=(0,A.useState)(null),[h,k]=(0,A.useState)(null),[y,C]=(0,A.useState)(""),[u,x]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let b=new AbortController;return c(null),k(null),C(""),i("vcs/svn-log",{sessionId:e,repositoryId:t,token:r,snapshot:o,cursor:f,limit:50},b.signal).then(v=>{b.signal.aborted||c(v)}).catch(v=>{b.signal.aborted||(C(v.message),v.code==="vcs/rediscover-required"&&p())}),()=>b.abort()},[f,u]),A.default.createElement("section",null,A.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",o),y?A.default.createElement("p",{role:"alert"},y," ",A.default.createElement("button",{onClick:()=>x(b=>b+1)},s("retry"))):a?A.default.createElement(A.default.Fragment,null,A.default.createElement("ol",null,a.entries.map(b=>A.default.createElement("li",{key:b.revision},A.default.createElement("button",{onClick:()=>k(b.revision)},"r",b.revision," \xB7 ",b.message)))),a.nextRevision!==null&&A.default.createElement("button",{onClick:()=>d(a.nextRevision)},s("historyMore"))):A.default.createElement("p",{role:"status"},s("loading")),h&&A.default.createElement(yr,{key:h,sessionId:e,repositoryId:t,token:r,snapshot:o,rpc:i,t:s,onRediscover:p,revision:h}))}function yr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:s,t:p,onRediscover:f}){let[d,a]=(0,A.useState)(null),[c,h]=(0,A.useState)(null),[k,y]=(0,A.useState)(""),[C,u]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let x=new AbortController;return a(null),h(null),y(""),s("vcs/svn-detail",{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i},x.signal).then(b=>{x.signal.aborted||a(b)}).catch(b=>{x.signal.aborted||(y(b.message),b.code==="vcs/rediscover-required"&&f())}),()=>x.abort()},[C]),A.default.createElement("section",null,k?A.default.createElement("p",{role:"alert"},k," ",A.default.createElement("button",{onClick:()=>u(x=>x+1)},p("retry"))):d?A.default.createElement(A.default.Fragment,null,A.default.createElement("p",null,d.message),d.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:()=>h({id:x.id,mode:"compare"})},p("svnHistoricalDiff")),A.default.createElement("button",{onClick:()=>h({id:x.id,mode:"trace"})},p("fileHistory")),x.copyFromPath&&x.copyFromRevision&&A.default.createElement("button",{onClick:()=>h({id:x.id,mode:"copytrace"})},p("svnCopyHistory")," \xB7 ",x.copyFromPath," @r",x.copyFromRevision),x.copySourceOutsideScope&&A.default.createElement("span",null,p("svnCopyOutside")))))):A.default.createElement("p",{role:"status"},p("loading")),c&&A.default.createElement(vr,{key:JSON.stringify(c),sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:s,t:p,onRediscover:f,...c}))}function vr({sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,rpc:s,t:p,onRediscover:f,id:d,mode:a}){let[c,h]=(0,A.useState)(null),[k,y]=(0,A.useState)(null),[C,u]=(0,A.useState)(""),[x,b]=(0,A.useState)(0);return(0,A.useEffect)(()=>{let v=new AbortController;return h(null),u(""),s("vcs/svn-"+a,{sessionId:e,repositoryId:t,token:r,snapshot:o,revision:i,id:d,...k===null?{}:{cursor:k}},v.signal).then(g=>{v.signal.aborted||h(g)}).catch(g=>{v.signal.aborted||(u(g.message),g.code==="vcs/rediscover-required"&&f())}),()=>v.abort()},[k,x]),C?A.default.createElement("p",{role:"alert"},C," ",A.default.createElement("button",{onClick:()=>b(v=>v+1)},p("retry"))):c?a==="compare"?c.binary?A.default.createElement("p",null,p("binary")):A.default.createElement(pe,{comparison:c,identity:JSON.stringify([e,t,o,i,d]),t:p}):A.default.createElement("section",null,A.default.createElement("p",null,p(a==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",c.path," \xB7 peg r",c.pegRevision),A.default.createElement("ol",null,c.entries.map(v=>A.default.createElement("li",{key:v.revision},"r",v.revision," \xB7 ",v.message))),c.nextRevision!==null&&A.default.createElement("button",{onClick:()=>y(c.nextRevision)},p("historyMore"))):A.default.createElement("p",{role:"status"},p("loading"))}function kt(e){return ee.default.createElement(br,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function br({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[s,p]=(0,ee.useState)(null),[f,d]=(0,ee.useState)(!1),[a,c]=(0,ee.useState)(""),[h,k]=(0,ee.useState)(0);(0,ee.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token})).catch(()=>{})}},[s,e,t]),(0,ee.useEffect)(()=>{if(s)try{return $e(s.expiresAt,()=>{p(null),k(0),d(!1),c(o("svnExpired"))})}catch{p(null),c(o("svnExpired"))}},[s]),(0,ee.useEffect)(()=>{if(!h||!s)return;let u=new AbortController;return d(!0),c(""),r("vcs/svn-revoke",{sessionId:e,repositoryId:t,token:s.token},u.signal).then(()=>{u.signal.aborted||p(null)}).catch(x=>{u.signal.aborted||(c(x.message),x.code==="vcs/rediscover-required"&&i())}).finally(()=>{u.signal.aborted||d(!1)}),()=>u.abort()},[h,s]);let y=u=>{try{fo(u),c(""),k(0),p(u)}catch(x){c(x.message)}},C=async(...u)=>{try{return await r(...u)}catch(x){throw x.code==="vcs/svn-consent-required"&&!u[2]?.aborted&&(p(null),k(0),c(o("svnExpired"))),x}};return ee.default.createElement("section",null,!s&&a&&ee.default.createElement("p",{role:"status"},a),s?ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("p",null,o("svnGrantScope")),ee.default.createElement("button",{disabled:f,onClick:()=>k(u=>u+1)},o("svnRevoke")),a&&ee.default.createElement("p",{role:"alert"},a),!f&&ee.default.createElement(St,{sessionId:e,repositoryId:t,t:o,onRediscover:i,rpc:C,token:s.token,snapshot:s.snapshot})):ee.default.createElement(wt,{sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i,onApproved:y}))}var N=Z(require("react"),1);function mo(e){let t=new Map;for(let r of e){let o=t.get(r.commit);o||(o={names:[],hidden:0},t.set(r.commit,o)),o.names.length<3?o.names.push(r.name):o.hidden++}return t}var q=Z(require("react"),1);var D=Z(require("react"),1);var W=Z(require("react"),1);var I=Z(require("react"),1);function Ct(e){return I.default.createElement(xr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function xr({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:s,onRediscover:p}){let[f,d]=(0,I.useState)(!1),[a,c]=(0,I.useState)([0]),[h,k]=(0,I.useState)(null),[y,C]=(0,I.useState)(""),[u,x]=(0,I.useState)(0),b=a.at(-1);(0,I.useEffect)(()=>{if(!f)return;let g=new AbortController;return k(null),C(""),i("vcs/tree-segment",{sessionId:e,repositoryId:t,commit:r,path:o,offset:b},g.signal).then(m=>{g.signal.aborted||k(m)}).catch(m=>{g.signal.aborted||(C(m.message),m.code==="vcs/rediscover-required"&&p())}),()=>g.abort()},[f,b,e,t,r,o,u]);let v=(0,I.useMemo)(()=>h?{path:o,left:{label:r,text:h.text},right:{label:r,text:h.text}}:null,[h,o,r]);return I.default.createElement("section",null,I.default.createElement("button",{"aria-expanded":f,onClick:()=>d(g=>!g)},s("segments")),f&&I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,s("segmentScope")),y?I.default.createElement("p",{role:"alert"},y," ",I.default.createElement("button",{onClick:()=>x(g=>g+1)},s("retry"))):h?I.default.createElement(I.default.Fragment,null,I.default.createElement("p",null,s("segmentBytes"),": ",h.offset,"\u2013",h.endOffset," / ",h.totalBytes," \xB7 ",I.default.createElement("code",null,h.oid)),I.default.createElement("button",{disabled:a.length===1,onClick:()=>c(g=>g.slice(0,-1))},s("previous")),I.default.createElement("button",{disabled:h.nextOffset===null,onClick:()=>c(g=>[...g,h.nextOffset])},s("next")),I.default.createElement(pe,{single:!0,comparison:v,identity:JSON.stringify([e,t,r,o,b]),t:s})):I.default.createElement("p",{role:"status"},s("loading"))))}var F=Z(require("react"),1);function wr({sessionId:e,repositoryId:t,commit:r,path:o,follow:i,rpc:s,t:p,onRediscover:f,onSelectCommit:d}){let[a,c]=(0,F.useState)({commits:[],nextOffset:null}),[h,k]=(0,F.useState)(0),[y,C]=(0,F.useState)(0),[u,x]=(0,F.useState)(!0),[b,v]=(0,F.useState)("");(0,F.useEffect)(()=>{let m=new AbortController;return x(!0),v(""),s("vcs/tree-history",{sessionId:e,repositoryId:t,commit:r,path:o,offset:h,limit:50,follow:i},m.signal).then(S=>{m.signal.aborted||c(H=>({...S,commits:h?[...H.commits,...S.commits]:S.commits}))}).catch(S=>{m.signal.aborted||(v(S.message),S.code==="vcs/rediscover-required"&&f())}).finally(()=>{m.signal.aborted||x(!1)}),()=>m.abort()},[e,t,r,o,h,y,i]);let g=m=>p(m.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":m.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":m.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return F.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":u},F.default.createElement("p",null,p("pathHistoryScope")),F.default.createElement("p",{style:{overflowWrap:"anywhere"}},F.default.createElement("code",null,a.path||o)," \xB7 ",F.default.createElement("code",null,r),a.followsRenames!==void 0&&F.default.createElement(F.default.Fragment,null," \xB7 ",p(a.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),F.default.createElement("ol",null,a.commits.map(m=>F.default.createElement("li",{key:m.id},F.default.createElement("code",{title:m.id},m.id.slice(0,10))," \xB7 ",d?F.default.createElement("button",{onClick:()=>d(m.id,m.path||o)},m.subject):m.subject,F.default.createElement("div",null,m.boundary&&F.default.createElement("span",null,g(m)," "),m.path&&F.default.createElement("code",null,m.oldPath?m.oldPath+" \u2192 ":"",m.path)," ",m.similarity!==void 0&&F.default.createElement("span",null,p("fileHistorySimilarity"),": ",m.similarity,"% \xB7 "),m.author," \xB7 ",F.default.createElement("time",{dateTime:m.date},m.date))))),u&&F.default.createElement("p",{role:"status"},p("loading")),b&&F.default.createElement("p",{role:"alert"},b," ",F.default.createElement("button",{onClick:()=>C(m=>m+1)},p("retry"))),!u&&!b&&!a.commits.length&&F.default.createElement("p",null,p("historyEmpty")),a.truncated&&F.default.createElement("p",{role:"status"},p("historyLimit")),!b&&a.nextOffset!==null&&F.default.createElement("button",{disabled:u,onClick:()=>k(a.nextOffset)},p("historyMore")))}function Nt(e){let[t,r]=(0,F.useState)(!1),[o,i]=(0,F.useState)(!1);return F.default.createElement("div",null,F.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("pathHistory")),t&&F.default.createElement(F.default.Fragment,null,F.default.createElement("label",null,F.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),F.default.createElement("p",null,e.t("pathHistoryFollowScope")),F.default.createElement(wr,{key:String(o),follow:o,...e})))}function Ge({sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:s,onRediscover:p,onClose:f,onSelectCommit:d,line:a=null}){let[c,h]=(0,W.useState)(null),[k,y]=(0,W.useState)(""),[C,u]=(0,W.useState)(0);(0,W.useEffect)(()=>{let b=new AbortController;return h(null),y(""),i("vcs/tree-file",{sessionId:e,repositoryId:t,commit:r,path:o},b.signal).then(v=>{b.signal.aborted||h(v)}).catch(v=>{b.signal.aborted||(y(v.message),v.code==="vcs/rediscover-required"&&p())}),()=>b.abort()},[e,t,r,o,C]);let x=(0,W.useMemo)(()=>c?{path:o,left:{label:r,text:c.text||""},right:{label:r,text:c.text||""}}:null,[c,o,r]);return W.default.createElement("section",{"aria-label":s("treePreview")},W.default.createElement("h4",null,o),W.default.createElement("button",{onClick:f},s("treeClose")),W.default.createElement("p",null,W.default.createElement("code",null,r)),k?W.default.createElement("p",{role:"alert"},k," ",W.default.createElement("button",{onClick:()=>u(b=>b+1)},s("retry"))):c?W.default.createElement(W.default.Fragment,null,W.default.createElement("p",null,W.default.createElement("code",null,c.oid)," \xB7 ",s("encoding"),": ",c.encoding||"\u2014"),a&&W.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",a,!c.text||a>c.text.split(`
|
|
96
96
|
`).length?" \xB7 "+s("blameUnmapped"):""),c.notice&&W.default.createElement("p",{role:"status"},c.notice),c.binary?W.default.createElement("p",null,s("binary")):c.text===""?W.default.createElement("p",null,s("treeEmpty")):W.default.createElement(pe,{single:!0,line:a,comparison:x,identity:JSON.stringify([e,t,r,o]),t:s})):W.default.createElement("p",{role:"status"},s("loading")),W.default.createElement(Ct,{sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:s,onRediscover:p}),W.default.createElement(Nt,{key:JSON.stringify([e,t,r,o]),sessionId:e,repositoryId:t,commit:r,path:o,rpc:i,t:s,onRediscover:p,onSelectCommit:d}))}function ho(e=""){let t=[{path:"",name:"/"}];if(e){let r="";for(let o of e.split("/"))r=r?r+"/"+o:o,t.push({path:r,name:o})}return t}function go(e,t="",r=""){let o=t?t+"/":"",i=r.toLowerCase();return e.filter(s=>{let p=s.path.slice(o.length);return s.path.startsWith(o)&&p.length>0&&!p.includes("/")&&p.toLowerCase().includes(i)}).sort((s,p)=>+(p.type==="tree")-+(s.type==="tree")||(s.path<p.path?-1:s.path>p.path?1:0))}function Sr({sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:s,onSelectCommit:p}){let[f,d]=(0,D.useState)(null),[a,c]=(0,D.useState)(""),[h,k]=(0,D.useState)(0),[y,C]=(0,D.useState)(""),[u,x]=(0,D.useState)(0),[b,v]=(0,D.useState)(""),[g,m]=(0,D.useState)(null);if((0,D.useEffect)(()=>{let w=new AbortController;return d(null),c(""),o("vcs/tree",{sessionId:e,repositoryId:t,commit:r},w.signal).then(T=>{w.signal.aborted||d(T)}).catch(T=>{w.signal.aborted||(c(T.message),T.code==="vcs/rediscover-required"&&s())}),()=>w.abort()},[e,t,r,h]),a)return D.default.createElement("p",{role:"alert"},a," ",D.default.createElement("button",{onClick:()=>k(w=>w+1)},i("retry")));if(!f)return D.default.createElement("p",{role:"status"},i("loading"));let S=y?y+"/":"",H=go(f.entries,y,b),K=w=>{C(w),x(0),v(""),m(null)};return D.default.createElement("section",{"aria-label":i("historicalTree")},D.default.createElement("p",null,i("historicalTreeScope")),D.default.createElement("code",null,r),D.default.createElement("p",null,y||"/"," ",y&&D.default.createElement("button",{onClick:()=>K(y.includes("/")?y.slice(0,y.lastIndexOf("/")):"")},i("treeUp"))),D.default.createElement("nav",{"aria-label":i("treeBreadcrumbs")},ho(y).map(w=>D.default.createElement(D.default.Fragment,{key:w.path},w.path&&" / ",w.path===y?D.default.createElement("span",{"aria-current":"location"},w.name):D.default.createElement("button",{onClick:()=>K(w.path)},w.name)))),D.default.createElement("label",null,i("treeSearch")," ",D.default.createElement("input",{"aria-label":i("treeSearch"),value:b,onChange:w=>{v(w.target.value),x(0),m(null)}})),D.default.createElement("p",null,H.length," ",i("treeEntries")),!H.length&&b&&D.default.createElement("p",{role:"status"},i("emptySearch")),D.default.createElement("ul",null,H.slice(u*100,u*100+100).map(w=>D.default.createElement("li",{key:w.path},w.type==="tree"?D.default.createElement("button",{onClick:()=>K(w.path)},w.path.slice(S.length),"/"):w.type==="blob"&&["100644","100755"].includes(w.mode)?D.default.createElement("button",{"aria-pressed":g===w.path,onClick:()=>m(w.path)},w.path.slice(S.length)):D.default.createElement("span",null,w.path.slice(S.length))," \xB7 ",D.default.createElement("code",null,w.mode," ",w.type," ",D.default.createElement("span",{title:w.oid},w.oid.slice(0,10)))))),u>0&&D.default.createElement("button",{onClick:()=>{x(w=>w-1),m(null)}},i("treePrevious")),(u+1)*100<H.length&&D.default.createElement("button",{onClick:()=>{x(w=>w+1),m(null)}},i("treeNext")),g&&D.default.createElement(Ge,{key:JSON.stringify([e,t,r,g]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:s,onSelectCommit:p,path:g,onClose:()=>m(null)}))}function Et(e){return D.default.createElement(kr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function kr(e){let[t,r]=(0,D.useState)(!1);return D.default.createElement("div",null,D.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historicalTree")),t&&D.default.createElement(Sr,{...e}))}var z=Z(require("react"),1);var j=Z(require("react"),1);function Cr({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,follow:s,rpc:p,t:f,onRediscover:d,onSelectCommit:a}){let[c,h]=(0,j.useState)({commits:[],nextOffset:null}),[k,y]=(0,j.useState)(0),[C,u]=(0,j.useState)(0),[x,b]=(0,j.useState)(!0),[v,g]=(0,j.useState)("");return(0,j.useEffect)(()=>{let m=new AbortController;return b(!0),g(""),p("vcs/file-history",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,offset:k,limit:50,follow:s},m.signal).then(S=>{m.signal.aborted||h(H=>({...S,commits:k?[...H.commits,...S.commits]:S.commits}))}).catch(S=>{m.signal.aborted||(g(S.message),S.code==="vcs/rediscover-required"&&d())}).finally(()=>{m.signal.aborted||b(!1)}),()=>m.abort()},[e,t,r,o,i,k,C]),j.default.createElement("section",{"aria-label":f("fileHistory"),"aria-busy":x},j.default.createElement("p",null,f("fileHistoryScope")),j.default.createElement("p",{style:{overflowWrap:"anywhere"}},c.path," \xB7 ",j.default.createElement("code",null,r)),j.default.createElement("ol",null,c.commits.map(m=>j.default.createElement("li",{key:m.id},j.default.createElement("code",{title:m.id},m.id.slice(0,10))," \xB7 ",a?j.default.createElement("button",{onClick:()=>a(m.id,m.path||c.path)},m.subject):m.subject,j.default.createElement("div",null,m.boundary&&j.default.createElement("span",null,f(m.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":m.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":m.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),m.path&&j.default.createElement("code",null,m.oldPath?m.oldPath+" \u2192 ":"",m.path)," ",m.similarity!==void 0&&j.default.createElement("span",null,f("fileHistorySimilarity"),": ",m.similarity,"% \xB7 "),m.author," \xB7 ",j.default.createElement("time",{dateTime:m.date},m.date))))),x&&j.default.createElement("p",{role:"status"},f("loading")),v&&j.default.createElement("p",{role:"alert"},v," ",j.default.createElement("button",{onClick:()=>u(m=>m+1)},f("retry"))),!x&&!v&&!c.commits.length&&j.default.createElement("p",null,f("historyEmpty")),c.truncated&&j.default.createElement("p",{role:"status"},f("historyLimit")),!v&&c.nextOffset!==null&&j.default.createElement("button",{disabled:x,onClick:()=>y(c.nextOffset)},f("historyMore")))}function Lt(e){return j.default.createElement(Nr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function Nr(e){let[t,r]=(0,j.useState)(!1),[o,i]=(0,j.useState)(!1);return j.default.createElement("div",null,j.default.createElement("button",{"aria-expanded":t,onClick:()=>r(s=>!s)},e.t("fileHistory")),t&&j.default.createElement(j.default.Fragment,null,j.default.createElement("label",null,j.default.createElement("input",{type:"checkbox",checked:o,onChange:s=>i(s.target.checked)}),e.t("fileHistoryFollow")),j.default.createElement("p",null,e.t("fileHistoryFollowScope")),j.default.createElement(Cr,{key:String(o),follow:o,...e})))}var B=Z(require("react"),1);function Er({sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,rpc:s,t:p,onRediscover:f,onSelectCommit:d}){let[a,c]=(0,B.useState)(null),[h,k]=(0,B.useState)(""),[y,C]=(0,B.useState)(0),[u,x]=(0,B.useState)(1),[b,v]=(0,B.useState)(null);return(0,B.useEffect)(()=>{let g=new AbortController;return c(null),k(""),v(null),s("vcs/blame",{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:i,startLine:u,lineLimit:500},g.signal).then(m=>{g.signal.aborted||c(m)}).catch(m=>{g.signal.aborted||(k(m.message),m.code==="vcs/rediscover-required"&&f())}),()=>g.abort()},[e,t,r,o,i,y,u]),h?B.default.createElement("p",{role:"alert"},h," ",B.default.createElement("button",{onClick:()=>C(g=>g+1)},p("retry"))):a?B.default.createElement("section",{"aria-label":p("blame")},B.default.createElement("p",null,p("blameScope")),d&&B.default.createElement("p",null,p("blameNavigation")),a.notice&&B.default.createElement("p",{role:"status"},a.notice),a.truncated&&B.default.createElement("p",{role:"status"},p("blameLimit")),!a.notice&&!a.lines.length&&B.default.createElement("p",null,p("blameEmpty")),!!a.lines.length&&B.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},B.default.createElement("table",null,B.default.createElement("thead",null,B.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(g=>B.default.createElement("th",{key:g,scope:"col"},p(g))))),B.default.createElement("tbody",null,a.lines.map(g=>B.default.createElement("tr",{key:g.line},B.default.createElement("th",{scope:"row"},g.line),B.default.createElement("td",null,d?B.default.createElement("button",{title:g.commit,onClick:()=>d(g.commit,g.path||null)},B.default.createElement("code",null,g.commit.slice(0,10))):B.default.createElement("code",{title:g.commit},g.commit.slice(0,10))),B.default.createElement("td",null,g.author),B.default.createElement("td",null,g.summary),B.default.createElement("td",null,B.default.createElement("pre",{style:{margin:0}},g.text),g.path&&g.originalLine?B.default.createElement("button",{onClick:()=>v(g)},p("blameOriginLine"),": ",g.path,":",g.originalLine):B.default.createElement("span",null,p("blameUnmapped")))))))),B.default.createElement("p",null,a.startLine||u,"\u2013",a.lines.at(-1)?.line||u," / ",a.totalLines??"\u2014"),B.default.createElement("button",{disabled:u===1,onClick:()=>x(Math.max(1,u-500))},p("blamePrevious")),B.default.createElement("button",{disabled:a.nextLine==null,onClick:()=>x(a.nextLine)},p("blameNext")),b&&B.default.createElement(Ge,{key:JSON.stringify([b.commit,b.path,b.originalLine]),sessionId:e,repositoryId:t,rpc:s,t:p,onRediscover:f,onSelectCommit:d,commit:b.commit,path:b.path,line:b.originalLine,onClose:()=>v(null)})):B.default.createElement("p",{role:"status"},p("loading"))}function At(e){let[t,r]=(0,B.useState)(!1);return B.default.createElement("div",null,B.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("blame")),t&&B.default.createElement(Er,{...e}))}function qe(e){return z.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:s,id:p,rpc:f,t:d,onRediscover:a,onSelectCommit:c}){let[h,k]=(0,z.useState)(null),[y,C]=(0,z.useState)(""),[u,x]=(0,z.useState)(0),[b,v]=(0,z.useState)(!1);return(0,z.useEffect)(()=>{let g=new AbortController;return k(null),C(""),f(i?"vcs/revision-compare":"vcs/commit-compare",i?{sessionId:e,repositoryId:t,base:i,target:s,id:p,...b?{large:!0}:{}}:{sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:p,...b?{large:!0}:{}},g.signal).then(m=>{g.signal.aborted||k(m)}).catch(m=>{g.signal.aborted||(C(m.message),m.code==="vcs/rediscover-required"&&a())}),()=>g.abort()},[e,t,r,o,i,s,p,u,b]),y?z.default.createElement("p",{role:"alert"},y," ",z.default.createElement("button",{onClick:()=>x(g=>g+1)},d("retry")),b&&z.default.createElement("button",{onClick:()=>v(!1)},d("largeClose"))):h?z.default.createElement("section",null,z.default.createElement("h4",null,h.path),z.default.createElement("p",null,h.left.label," \u2194 ",h.right.label),h.notice&&z.default.createElement("p",{role:"status"},h.notice),b?z.default.createElement("p",null,d("largeScope")," ",z.default.createElement("button",{onClick:()=>v(!1)},d("largeClose"))):h.notice?.includes("2 MiB")&&z.default.createElement("p",null,d("largeScope")," ",z.default.createElement("button",{onClick:()=>v(!0)},d("largeLoad"))),h.binary?z.default.createElement("p",null,d("binary")):z.default.createElement(pe,{comparison:h,identity:JSON.stringify(i?[e,t,i,s,p]:[e,t,r,o,p]),t:d}),r&&!i&&z.default.createElement(Lt,{onSelectCommit:c,key:"file-history:"+JSON.stringify([e,t,r,o,p]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:p,rpc:f,t:d,onRediscover:a}),r&&!i&&z.default.createElement(At,{onSelectCommit:c,key:"blame:"+JSON.stringify([e,t,r,o,p]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,id:p,rpc:f,t:d,onRediscover:a}),(r||i)&&z.default.createElement(je,{key:"image:"+JSON.stringify([e,t,r,o,i,s,p]),sessionId:e,repositoryId:t,commit:r,parentIndex:o,base:i,target:s,id:p,rpc:f,t:d,onRediscover:a})):z.default.createElement("p",{role:"status"},d("loading"),b&&z.default.createElement("button",{onClick:()=>v(!1)},d("largeClose")))}function yo(e,t){if(typeof t!="string"||!t)return null;let r=e.filter(o=>o.path===t);return r.length===1&&typeof r[0].id=="string"&&r[0].id?r[0].id:null}function vo(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.id,o.author,o.subject].some(i=>i?.toLowerCase().includes(r))):e}function Ze(e,t=""){let r=t.trim().toLowerCase();return r?e.filter(o=>[o.path,o.oldPath].some(i=>i?.toLowerCase().includes(r))):e}function Ht(e){return q.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:s,onSelectCommit:p,initialPath:f}){let d=(0,q.useRef)(!0),[a,c]=(0,q.useState)(null),[h,k]=(0,q.useState)(""),[y,C]=(0,q.useState)(0),[u,x]=(0,q.useState)(null),[b,v]=(0,q.useState)(""),[g,m]=(0,q.useState)(0);if((0,q.useEffect)(()=>{let H=new AbortController;return x(null),v(""),o("vcs/commit",{sessionId:e,repositoryId:t,commit:r,parentIndex:y},H.signal).then(K=>{H.signal.aborted||(x(K),d.current&&(d.current=!1,c(yo(K.changes,f))))}).catch(K=>{H.signal.aborted||(v(K.message),K.code==="vcs/rediscover-required"&&s())}),()=>H.abort()},[e,t,r,y,g]),b)return q.default.createElement("p",{role:"alert"},b," ",q.default.createElement("button",{onClick:()=>m(H=>H+1)},i("retry")));if(!u)return q.default.createElement("p",{role:"status"},i("loading"));let S=Ze(u.changes,h);return q.default.createElement("section",{"aria-label":i("commitDetails")},q.default.createElement("h3",null,u.subject),q.default.createElement("code",null,u.id),q.default.createElement("p",null,u.author," \xB7 ",u.date),u.messageTruncated&&q.default.createElement("p",{role:"status"},i("commitMessageLimit")),u.message&&q.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},u.message),u.parents.length>1&&q.default.createElement("label",null,i("commitParent")," ",q.default.createElement("select",{"aria-label":i("commitParent"),value:y,onChange:H=>{c(null),x(null),C(Number(H.target.value))}},u.parents.map((H,K)=>q.default.createElement("option",{key:H,value:K},K+1,": ",H.slice(0,10))))),q.default.createElement("p",null,u.parent||i("commitRoot")," \u2192 ",u.id.slice(0,10)),q.default.createElement("label",null,i("commitFileSearch")," ",q.default.createElement("input",{"aria-label":i("commitFileSearch"),value:h,onChange:H=>{k(H.target.value),c(null)}})),q.default.createElement("span",null," ",S.length," / ",u.changes.length),q.default.createElement("ul",null,S.map(H=>q.default.createElement("li",{key:H.id},q.default.createElement("button",{"aria-pressed":a===H.id,onClick:()=>c(H.id)},H.status," \xB7 ",H.oldPath?H.oldPath+" \u2192 ":"",H.path)))),!!u.changes.length&&!S.length&&q.default.createElement("p",{role:"status"},i("emptySearch")),!u.changes.length&&q.default.createElement("p",null,i("commitNoChanges")),a&&q.default.createElement(qe,{key:a,sessionId:e,repositoryId:t,commit:r,parentIndex:y,id:a,onSelectCommit:p,rpc:o,t:i,onRediscover:s}),q.default.createElement(Et,{key:JSON.stringify([e,t,r]),sessionId:e,repositoryId:t,commit:r,rpc:o,t:i,onRediscover:s,onSelectCommit:p}))}var X=Z(require("react"),1);function bo(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let t=e.slice(0,200),r=new Map,o=[],i=[],s=f=>typeof f=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(f);for(let[f,d]of t.entries()){if(!d||!s(d.id)||!Array.isArray(d.parents)||r.has(d.id))throw new Error("Invalid graph node");r.set(d.id,f),o.push({id:d.id,row:f})}let p=!1;for(let f of t){let d=new Set;for(let a of f.parents){if(i.length===1e3){p=!0;break}if(!s(a)||a.length!==f.id.length||a===f.id||d.has(a))throw new Error("Invalid graph parent");d.add(a);let c=r.get(a);if(c!==void 0&&c<=r.get(f.id))throw new Error("Graph requires child-before-parent order");i.push({from:f.id,to:a,missing:c===void 0})}if(p)break}return{nodes:o,edges:i,nodesTruncated:e.length>200,edgesTruncated:p}}function xo(e){let t=Array(32).fill(null),r=new Map,o=[],i=new Set,s=!1,p=a=>{if(i.has(a))return null;let c=t.indexOf(a);return c>=0?c:(c=t.indexOf(null),c<0?(s=!0,i.add(a),null):(t[c]=a,c))},f=new Map;for(let a of e.edges){if(a.missing)continue;let c=f.get(a.from)||[];c.push(a.to),f.set(a.from,c)}for(let a of e.nodes){let c=p(a.id);if(r.set(a.id,{...a,lane:c}),o.push({...a,lane:c}),c===null)continue;t[c]=null;let h=f.get(a.id)||[];for(let[k,y]of h.entries())t.includes(y)||(k===0&&t[c]===null?t[c]=y:p(y))}let d=e.edges.filter(a=>!a.missing).flatMap(a=>{let c=r.get(a.from),h=r.get(a.to);return c.lane===null||h.lane===null?[]:[{...a,start:c.row,end:h.row,fromLane:c.lane,toLane:h.lane}]});return{nodes:o,edges:d,lanesTruncated:s,laneCount:Math.max(1,...o.map(a=>(a.lane??0)+1))}}function Hr({commits:e,selected:t,onSelect:r,t:o}){let i;try{i=bo(e)}catch{return X.default.createElement("p",{role:"alert"},o("graphInvalid"))}let s=xo(i),p=s.edges,f=Math.max(100,24+18*s.laneCount),d=Math.max(40,i.nodes.length*36);return X.default.createElement("section",{"aria-label":o("historyGraph")},X.default.createElement("p",null,o("graphScope")),s.lanesTruncated&&X.default.createElement("p",{role:"status"},o("graphLaneLimit")),(i.nodesTruncated||i.edgesTruncated)&&X.default.createElement("p",{role:"status"},o("graphLimit")),X.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},X.default.createElement("svg",{width:f,height:d,"aria-hidden":"true",style:{flexShrink:0}},p.map(a=>{let c=a.start*36+18,h=a.end*36+18,k=12+a.fromLane*18,y=12+a.toLane*18;return X.default.createElement("path",{key:a.from+a.to,d:"M "+k+" "+c+" C "+k+" "+(c+18)+", "+y+" "+(h-18)+", "+y+" "+h,fill:"none",stroke:"currentColor",opacity:"0.45"})}),s.nodes.filter(a=>a.lane!==null).map(a=>X.default.createElement("circle",{key:a.id,cx:12+a.lane*18,cy:a.row*36+18,r:"4",fill:"currentColor"}))),X.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},i.nodes.map(a=>X.default.createElement("li",{key:a.id,style:{height:36,whiteSpace:"nowrap"}},X.default.createElement("button",{title:a.id,"aria-current":t===a.id?!0:void 0,style:t===a.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:c=>{if(c.altKey||c.ctrlKey||c.metaKey||c.shiftKey)return;let h=c.key==="ArrowDown"?Math.min(a.row+1,i.nodes.length-1):c.key==="ArrowUp"?Math.max(0,a.row-1):c.key==="Home"?0:c.key==="End"?i.nodes.length-1:null;h!==null&&(c.preventDefault(),c.stopPropagation(),c.currentTarget.closest("ol").querySelectorAll("button")[h]?.focus())},onClick:()=>r(a.id)},X.default.createElement("code",null,a.id.slice(0,10))," ",e[a.row].subject))))),X.default.createElement("details",null,X.default.createElement("summary",null,o("graphRelations")),X.default.createElement("ul",null,i.edges.map(a=>X.default.createElement("li",{key:a.from+a.to},X.default.createElement("code",null,a.from)," \u2192 ",X.default.createElement("code",null,a.to),a.missing?" \xB7 "+o("graphMissing"):"")))))}function Pt(e){let[t,r]=(0,X.useState)(!1);return X.default.createElement("div",null,X.default.createElement("button",{"aria-expanded":t,onClick:()=>r(o=>!o)},e.t("historyGraph")),t&&X.default.createElement(Hr,{...e}))}var O=Z(require("react"),1);function Pr({sessionId:e,repositoryId:t,base:r,target:o,rpc:i,t:s,onRediscover:p}){let[f,d]=(0,O.useState)(null),[a,c]=(0,O.useState)(""),[h,k]=(0,O.useState)(0),[y,C]=(0,O.useState)(null),[u,x]=(0,O.useState)("");if((0,O.useEffect)(()=>{let v=new AbortController;return d(null),c(""),C(null),i("vcs/revision-changes",{sessionId:e,repositoryId:t,base:r,target:o},v.signal).then(g=>{v.signal.aborted||d(g)}).catch(g=>{v.signal.aborted||(c(g.message),g.code==="vcs/rediscover-required"&&p())}),()=>v.abort()},[e,t,r,o,h]),a)return O.default.createElement("p",{role:"alert"},a," ",O.default.createElement("button",{onClick:()=>k(v=>v+1)},s("retry")));if(!f)return O.default.createElement("p",{role:"status"},s("loading"));let b=Ze(f.changes,u);return O.default.createElement("div",null,O.default.createElement("label",null,s("commitFileSearch")," ",O.default.createElement("input",{"aria-label":s("commitFileSearch"),value:u,onChange:v=>{x(v.target.value),C(null)}})),O.default.createElement("span",null," ",b.length," / ",f.changes.length),!!f.changes.length&&!b.length&&O.default.createElement("p",{role:"status"},s("emptySearch")),!f.changes.length&&O.default.createElement("p",null,s("revisionEmpty")),O.default.createElement("ul",null,b.map(v=>O.default.createElement("li",{key:v.id},O.default.createElement("button",{"aria-pressed":y===v.id,onClick:()=>C(v.id)},v.status," \xB7 ",v.oldPath?v.oldPath+" \u2192 ":"",v.path)))),y&&O.default.createElement(qe,{key:y,sessionId:e,repositoryId:t,base:r,target:o,id:y,rpc:i,t:s,onRediscover:p}))}function Ot(e){return O.default.createElement(Or,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Or({commits:e,sessionId:t,repositoryId:r,rpc:o,t:i,onRediscover:s,onReferencesLoaded:p}){let[f,d]=(0,O.useState)(""),[a,c]=(0,O.useState)(""),[h,k]=(0,O.useState)([]),[y,C]=(0,O.useState)(!1),[u,x]=(0,O.useState)(0),[b,v]=(0,O.useState)(!1),[g,m]=(0,O.useState)("");return(0,O.useEffect)(()=>{if(!u)return;let S=new AbortController;return v(!0),m(""),o("vcs/references",{sessionId:t,repositoryId:r},S.signal).then(H=>{S.signal.aborted||(k(H.references),C(!0),p?.(H.references))}).catch(H=>{S.signal.aborted||(m(H.message),H.code==="vcs/rediscover-required"&&s())}).finally(()=>{S.signal.aborted||v(!1)}),()=>S.abort()},[t,r,u]),O.default.createElement("section",{"aria-label":i("revisionTitle")},O.default.createElement("h3",null,i("revisionTitle")),O.default.createElement("p",null,i("revisionScope")),O.default.createElement("button",{disabled:b,onClick:()=>x(S=>S+1)},i("revisionLoadRefs")),O.default.createElement("p",null,i("revisionRefsScope")),y&&!b&&!g&&O.default.createElement("p",{role:"status"},h.length?`${i("revisionRefsCount")}: ${h.length}`:i("revisionRefsEmpty")),b&&O.default.createElement("p",{role:"status"},i("loading")),g&&O.default.createElement("p",{role:"alert"},g),[[f,d,"revisionBase"],[a,c,"revisionTarget"]].map(([S,H,K])=>O.default.createElement("label",{key:K},i(K)," ",O.default.createElement("select",{"aria-label":i(K),value:S,onChange:w=>H(w.target.value)},O.default.createElement("option",{value:""},"\u2014"),!!e.length&&O.default.createElement("optgroup",{label:i("revisionLoadedCommits")},e.map(w=>O.default.createElement("option",{key:w.id,value:w.id},w.id.slice(0,10)," \xB7 ",w.subject))),!!h.length&&O.default.createElement("optgroup",{label:i("revisionLocalRefs")},h.map(w=>O.default.createElement("option",{key:w.name,value:w.commit},w.name," \xB7 ",w.commit.slice(0,10)))),S&&!e.some(w=>w.id===S)&&!h.some(w=>w.commit===S)&&O.default.createElement("option",{value:S},S)))),O.default.createElement("button",{disabled:!f||!a,onClick:()=>{d(a),c(f)}},i("revisionSwap")),O.default.createElement("p",{style:{overflowWrap:"anywhere"}},O.default.createElement("code",null,f||"\u2014")," \u2192 ",O.default.createElement("code",null,a||"\u2014")),f&&a&&O.default.createElement(Pr,{key:JSON.stringify([t,r,f,a]),sessionId:t,repositoryId:r,base:f,target:a,rpc:o,t:i,onRediscover:s}))}function wo(e,t,r){let o=r?[...e.commits.filter(i=>!t.commits.some(s=>s.id===i.id)),...t.commits]:t.commits;return{...t,windowEnd:r+t.commits.length,commits:o.slice(-200)}}function Bt(e){return N.default.createElement(Br,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Br({sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i}){let[s,p]=(0,N.useState)({id:null,path:null,revision:0}),[f,d]=(0,N.useState)(""),[a,c]=(0,N.useState)(null),[h,k]=(0,N.useState)(""),[y,C]=(0,N.useState)(""),u=P=>{let oe=(a||[]).find(re=>JSON.stringify([re.name,re.commit])===P)?.commit||"";C(P),k(oe),g(re=>re?{...re,snapshot:oe||null}:null),ne(0),d(""),w(null),ue({commits:[],snapshot:null,nextOffset:null})},[x,b]=(0,N.useState)({message:"",author:"",path:"",since:"",until:""}),[v,g]=(0,N.useState)(null),m=P=>{g({values:P,snapshot:T.snapshot}),ne(0),d(""),w(null),ue(Y=>({...Y,commits:[],nextOffset:null}))},S=(0,N.useMemo)(()=>mo(a||[]),[a]),H=s.id,K=(P,Y=null)=>p(oe=>({id:P,path:Y,revision:oe.revision+1})),w=(P,Y=null)=>p(oe=>({id:P,path:Y,revision:oe.revision+(Y||oe.path?1:0)})),[T,ue]=(0,N.useState)({commits:[],snapshot:null,nextOffset:null}),[M,ne]=(0,N.useState)(0),[E,R]=(0,N.useState)(0),[le,He]=(0,N.useState)(!0),[ke,Pe]=(0,N.useState)("");(0,N.useEffect)(()=>{let P=new AbortController;return He(!0),Pe(""),r("vcs/history",{sessionId:e,repositoryId:t,offset:M,limit:50,...v?{search:v.values}:{},...v?.snapshot||h||M?{snapshot:v?.snapshot||h||T.snapshot}:{}},P.signal).then(Y=>{P.signal.aborted||(ue(oe=>wo(oe,Y,M)),M>=200&&(w(null),d("")))}).catch(Y=>{P.signal.aborted||(Pe(Y.message),Y.code==="vcs/rediscover-required"&&i())}).finally(()=>{P.signal.aborted||He(!1)}),()=>P.abort()},[e,t,M,E,v,h]);let fe=vo(T.commits,f);return N.default.createElement("section",{className:"vcs-history","aria-label":o("history"),"aria-busy":le},N.default.createElement("div",{className:"vcs-history-list"},N.default.createElement("p",null,o("historyListOnly")),a!==null&&N.default.createElement("p",null,o("historyRefsScope")),N.default.createElement("label",null,o("historyBranch")," ",N.default.createElement("select",{"aria-label":o("historyBranch"),value:y,disabled:le,onChange:P=>u(P.target.value)},N.default.createElement("option",{value:""},"HEAD"),y&&!(a||[]).some(P=>JSON.stringify([P.name,P.commit])===y)&&N.default.createElement("option",{value:y},JSON.parse(y)[0]," \xB7 ",h.slice(0,10)," \xB7 ",o("historyPinned")),(a||[]).map(P=>{let Y=JSON.stringify([P.name,P.commit]);return N.default.createElement("option",{key:Y,value:Y},P.name," \xB7 ",P.commit.slice(0,10))}))),N.default.createElement("p",null,o("historyBranchScope"),h&&N.default.createElement(N.default.Fragment,null," \xB7 ",N.default.createElement("code",null,h))),N.default.createElement("form",{"aria-label":o("historyServerSearch"),onSubmit:P=>{P.preventDefault(),m({...x})}},N.default.createElement("fieldset",{disabled:le},N.default.createElement("legend",null,o("historyServerSearch")),N.default.createElement("p",null,o("historyServerScope")),["message","author","path","since","until"].map(P=>N.default.createElement("label",{key:P},o("historyServer_"+P)," ",N.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:x[P],onChange:Y=>b(oe=>({...oe,[P]:Y.target.value}))}))),N.default.createElement("button",{type:"submit"},o("historyServerApply")),N.default.createElement("button",{type:"button",onClick:()=>{b({message:"",author:"",path:"",since:"",until:""}),m({})}},o("historyServerClear")))),v&&N.default.createElement("p",{role:"status"},o("historyServerActive"),": ",JSON.stringify(v.values)," \xB7 ",N.default.createElement("code",null,v.snapshot||T.snapshot)),N.default.createElement("label",null,o("historySearch")," ",N.default.createElement("input",{"aria-label":o("historySearch"),value:f,onChange:P=>{d(P.target.value),w(null)}})),N.default.createElement("span",null," ",fe.length," / ",T.commits.length),!!T.commits.length&&N.default.createElement("p",{role:"status"},o("historyWindow"),": ",Math.max(0,(T.windowEnd??T.commits.length)-T.commits.length),"\u2013",T.windowEnd??T.commits.length," \xB7 ",o("historyWindowScope")),!!T.commits.length&&!fe.length&&N.default.createElement("p",{role:"status"},o("historyNoMatch")),N.default.createElement("ol",null,fe.map(P=>N.default.createElement("li",{key:P.id},N.default.createElement("button",{"aria-pressed":H===P.id,onClick:()=>w(P.id)},P.subject),N.default.createElement("div",null,N.default.createElement("code",{title:P.id},P.id.slice(0,10))," \xB7 ",P.author," \xB7 ",N.default.createElement("time",{dateTime:P.date},P.date)),S.has(P.id)&&N.default.createElement("div",{"aria-label":o("historyRefsLabel"),style:{overflowWrap:"anywhere"}},S.get(P.id).names.map(Y=>N.default.createElement("span",{key:Y},N.default.createElement("code",null,Y)," ")),S.get(P.id).hidden>0&&N.default.createElement("span",null,o("historyRefsMore"),": ",S.get(P.id).hidden))))),le&&N.default.createElement("p",{role:"status"},o("loading")),ke&&N.default.createElement("p",{role:"alert"},ke," ",N.default.createElement("button",{onClick:()=>R(P=>P+1)},o("retry"))),!le&&!ke&&!T.commits.length&&N.default.createElement("p",null,o("historyEmpty")),T.truncated&&N.default.createElement("p",{role:"status"},o("historyLimit")),!ke&&T.nextOffset!==null&&N.default.createElement("button",{disabled:le,onClick:()=>ne(T.nextOffset)},o("historyMore")),!!T.commits.length&&N.default.createElement(Pt,{commits:T.commits,selected:H,onSelect:w,t:o}),N.default.createElement(Ot,{onReferencesLoaded:c,commits:T.commits,sessionId:e,repositoryId:t,rpc:r,t:o,onRediscover:i})),N.default.createElement("div",{className:"vcs-history-details"},H&&N.default.createElement(Ht,{key:JSON.stringify([H,s.revision]),initialPath:s.path,sessionId:e,repositoryId:t,commit:H,onSelectCommit:K,rpc:r,t:o,onRediscover:i})))}var So={zh:{svnOfferExpired:"\u7F51\u7EDC\u8BBF\u95EE\u63D0\u6848\u5DF2\u8FC7\u671F\uFF1B\u8BF7\u624B\u52A8\u91CD\u8BD5\uFF0C\u5E76\u91CD\u65B0\u52FE\u9009\u540C\u610F\u3002",svnExpired:"SVN \u7F51\u7EDC\u6388\u6743\u5DF2\u8FC7\u671F\uFF0C\u5386\u53F2\u8BF7\u6C42\u5DF2\u505C\u6B62\uFF1B\u8BF7\u91CD\u65B0\u5BA1\u9605\u5E76\u540C\u610F\u3002",svnConsentReview:"\u5BA1\u9605 SVN \u7F51\u7EDC\u8BBF\u95EE\u8303\u56F4",svnConsentScope:"\u540C\u610F\u524D\u4EC5\u8BFB\u53D6\u672C\u5730\u8EAB\u4EFD\u3002\u6388\u6743\u53EA\u9002\u7528\u4E8E\u6240\u5217\u4ED3\u5E93\u3001Session \u4E0E\u76EE\u5F55\uFF0C\u4E94\u5206\u949F\u6709\u6548\uFF1B\u4E0D\u6388\u6743\u91CD\u5B9A\u5411\u6216\u5199\u64CD\u4F5C\u3002",svnConsentExplicit:"\u6211\u540C\u610F\u8BBF\u95EE\u4EE5\u4E0A HTTPS SVN \u4ED3\u5E93",svnConsentApprove:"\u540C\u610F\u5E76\u8BFB\u53D6\u5386\u53F2",svnHistoryScope:"\u56FA\u5B9A\u672C\u5730 revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u5206\u9875\u66FF\u6362\u663E\u793A",svnHistoricalDiff:"\u5386\u53F2\u53EA\u8BFB Diff",svnCopyHistory:"\u67E5\u770B\u590D\u5236\u6765\u6E90\u5386\u53F2",svnCopyOutside:"\u590D\u5236\u6765\u6E90\u5728\u6388\u6743\u8303\u56F4\u5916\uFF0C\u4E0D\u80FD\u6253\u5F00",svnCopyTraceScope:"\u5355\u72EC\u67E5\u770B\u8303\u56F4\u5185\u56FA\u5B9A\u6765\u6E90\uFF0C\u4ECD\u6B62\u4E8E\u5176\u590D\u5236\u8FB9\u754C\uFF1B\u4E0D\u662F\u81EA\u52A8\u8FFD\u6EAF",svnTraceScope:"\u6587\u4EF6\u8FFD\u6EAF\u5728\u590D\u5236\u8FB9\u754C\u505C\u6B62\uFF0C\u4E0D\u8DDF\u968F\u8303\u56F4\u5916\u6765\u6E90",svnGrantScope:"\u7F51\u7EDC\u6388\u6743\u4E94\u5206\u949F\u6709\u6548\uFF1B\u53EF\u968F\u65F6\u64A4\u9500\uFF0C\u5386\u53F2\u64CD\u4F5C\u4E0D\u4FEE\u6539\u5DE5\u4F5C\u526F\u672C\u3002",svnRevoke:"\u64A4\u9500 SVN \u7F51\u7EDC\u6388\u6743",svnIdentity:"\u67E5\u770B SVN \u672C\u5730\u5386\u53F2\u8BBF\u95EE\u8EAB\u4EFD",svnOfflineIdentity:"\u4EC5\u4ECE\u6388\u6743\u5DE5\u4F5C\u526F\u672C\u8BFB\u53D6\u672C\u5730\u5143\u6570\u636E\uFF0C\u4E0D\u53D1\u8D77\u8FDC\u7A0B\u8BF7\u6C42\u3002",svnRemoteDisabled:"\u8FDC\u7A0B SVN \u5386\u53F2\u4F20\u8F93\u5C1A\u672A\u542F\u7528\uFF1B\u6CA1\u6709\u7F51\u7EDC\u6388\u6743\u6216\u53EF\u7528\u8BBF\u95EE\u51ED\u636E\u3002\u672C\u9875\u4E0D\u662F\u5DF2\u6388\u6743\u5386\u53F2\u5165\u53E3\u3002",historyWindow:"\u5DF2\u52A0\u8F7D\u5386\u53F2\u7A97\u53E3\uFF08\u5E8F\u53F7\u5DE6\u95ED\u53F3\u5F00\uFF09",historyWindowScope:"\u5217\u8868\u53CA\u56FE\u6700\u591A\u4FDD\u7559200\u6761\uFF1B\u7EE7\u7EED\u52A0\u8F7D\u66FF\u6362\u8F83\u65B0\u884C\uFF0C\u8DE8\u7A97\u53E3\u8FB9\u4E0D\u8868\u793A\u5B8C\u6574\u56FE\u3002\u5C40\u90E8\u7B5B\u9009\u4EC5\u5F53\u524D\u7A97\u53E3\u3002",segments:"\u5206\u6BB5\u6D4F\u89C8\u5386\u53F2\u6B63\u6587",segmentBytes:"\u5B57\u8282\u8303\u56F4\uFF08\u5DE6\u95ED\u53F3\u5F00\uFF09",segmentScope:"\u4EC5\u56FA\u5B9A\u5386\u53F2 UTF-8 \u666E\u901A\u6587\u4EF6\uFF0C\u6700\u5927 16 MiB\uFF1B\u6BCF\u7247\u6700\u591A 64 KiB\uFF0C\u66FF\u6362\u663E\u793A\u4E0D\u7D2F\u79EF\u3002\u7247\u6BB5\u884C\u53F7\u4E0D\u662F\u539F\u6587\u4EF6\u884C\u53F7\uFF0C\u4E0D\u662F\u5168\u6587\u4EF6 Diff\u3002",blameOriginLine:"\u67E5\u770B\u6765\u6E90\u5386\u53F2\u884C",blameUnmapped:"\u65E0\u6CD5\u7CBE\u786E\u5B9A\u4F4D\u6765\u6E90\u884C",blamePrevious:"\u4E0A\u4E00\u884C\u9875",blameNext:"\u4E0B\u4E00\u884C\u9875",fileHistoryMergeBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u5408\u5E76\u63D0\u4EA4\uFF0C\u6B64\u5904\u505C\u6B62\uFF0C\u4E0D\u63A8\u65AD\u591A\u7236\u6765\u6E90",fileHistorySimilarity:"Git\u76F8\u4F3C\u5EA6",fileHistoryAmbiguous:"\u591A\u4E2A\u5019\u9009\u6765\u6E90\uFF0C\u6B64\u5904\u505C\u6B62\u8FFD\u6EAF",fileHistoryRenameLimit:"\u5DF2\u8FBE32\u6B21\u91CD\u547D\u540D\u786E\u8BA4\u4E0A\u9650\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u590D\u5236\u6216\u975E\u7CBE\u786E\u91CD\u547D\u540D\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryFollow:"\u8DDF\u968F\u91CD\u547D\u540D\uFF08\u7B2C\u4E00\u7236\u94FE\uFF09",fileHistoryFollowScope:"\u8DDF\u968FGit\u68C0\u51FA\u7684\u91CD\u547D\u540D\uFF1B50%\u4EE5\u4E0A\u76F8\u4F3C\u91CD\u547D\u540D\u989D\u5916\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u548C\u5408\u5E76\u5904\u505C\u6B62\u3002\u76F8\u4F3C\u5EA6\u4E0D\u662F\u8EAB\u4EFD\u4FDD\u8BC1\uFF1B\u6BCF\u6761\u8BB0\u5F55\u4F7F\u7528\u5F53\u65F6\u8DEF\u5F84\u3002",graphLaneLimit:"\u6CF3\u9053\u6700\u591A32\u6761\uFF1B\u8D85\u51FA\u90E8\u5206\u7701\u7565\u56FE\u5F62\uFF0C\u5B8C\u6574\u5DF2\u52A0\u8F7D\u8282\u70B9\u4E0E\u5173\u7CFB\u4ECD\u53EF\u5728\u6587\u5B57\u4E2D\u67E5\u770B\u3002",historyBranch:"\u5386\u53F2\u8D77\u70B9\uFF08\u672C\u5730\u5F15\u7528\uFF09",historyPinned:"\u56FA\u5B9A\u5FEB\u7167",historyBranchScope:"\u5F15\u7528\u7531\u4E0B\u65B9\u624B\u52A8\u52A0\u8F7D\uFF1B\u9009\u62E9\u540E\u56FA\u5B9A\u8BE5\u6B21OID\uFF0C\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5386\u53F2\u8D77\u70B9\u3002\u9009\u62E9HEAD\u91CD\u65B0\u8BFB\u53D6\u5F53\u524DHEAD\uFF0C\u4E0D\u5207\u6362\u5DE5\u4F5C\u533A\u3002",historyServerSearch:"\u5168\u5386\u53F2\u67E5\u8BE2",historyServerScope:"\u67E5\u8BE2\u56FA\u5B9A\u5FEB\u7167\u53EF\u8FBE\u7684\u5B8C\u6574\u5386\u53F2\uFF1B\u8BF4\u660E/\u4F5C\u8005\u4E3A\u5FFD\u7565\u5927\u5C0F\u5199\u7684\u5B57\u9762\u5339\u914D\uFF0C\u8DEF\u5F84\u4E3A\u7CBE\u786E\u8DEF\u5F84\u6216\u76EE\u5F55\uFF0C\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u3002\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u8FC7\u6EE4\u4E14\u542B\u8FB9\u754C\uFF0C\u4F7F\u7528 --since-as-filter \u907F\u514D\u975E\u5355\u8C03\u5386\u53F2\u88AB\u63D0\u524D\u622A\u65AD\uFF1B\u65E0\u65F6\u533A\u6309\u8FD0\u884C\u673A\u5668\u672C\u5730\u65F6\u533A\u89E3\u91CA\u3002\u5206\u9875\u4E0E\u8FD0\u884C\u65F6\u95F4\u6709\u754C\u3002",historyServer_message:"\u63D0\u4EA4\u8BF4\u660E",historyServer_author:"\u4F5C\u8005",historyServer_path:"\u8DEF\u5F84",historyServer_since:"\u5F00\u59CB\u65F6\u95F4\uFF08\u542B\uFF09",historyServer_until:"\u7ED3\u675F\u65F6\u95F4\uFF08\u542B\uFF09",historyServerApply:"\u6267\u884C\u67E5\u8BE2",historyServerClear:"\u6E05\u9664\u67E5\u8BE2",historyServerActive:"\u5F53\u524D\u5DF2\u63D0\u4EA4\u67E5\u8BE2",reviewView:"\u5BA1\u9605\u89C6\u56FE",workspaceView:"\u5DE5\u4F5C\u533A\u6539\u52A8",workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",conflictStages:"Index \u51B2\u7A81\u9636\u6BB5",conflictStagesScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u51B2\u7A81\u7684 Index \u9636\u6BB51\uFF0F2\uFF0F3\uFF1B\u9636\u6BB5\u7F16\u53F7\u53EA\u8868\u793A Index \u8EAB\u4EFD\uFF0C\u4E0D\u58F0\u79F0\u5408\u5E76\uFF0F\u53D8\u57FA\u5F52\u5C5E\u3002\u7F3A\u5931\u9636\u6BB5\u663E\u793A\u4E3A\u7A7A\uFF0C\u4E0D\u63A8\u65AD\u5185\u5BB9\uFF1B\u4E0D\u8BFB\u53D6\u5DE5\u4F5C\u6587\u4EF6\uFF0C\u4E0D\u89E3\u51B3\u51B2\u7A81\u3002",conflictStage1:"\u9636\u6BB51\uFF08BASE\uFF09",conflictStage2:"\u9636\u6BB52\uFF08ours\uFF09",conflictStage3:"\u9636\u6BB53\uFF08theirs\uFF09",conflictStagePresent:"\u5B58\u5728",conflictStageAbsent:"\u7F3A\u5931\uFF08\u663E\u793A\u4E3A\u7A7A\uFF09",conflictStageGitlink:"\u5B50\u6A21\u5757\u63D0\u4EA4\u5F15\u7528\uFF0C\u4E0D\u52A0\u8F7D\u5185\u5BB9",conflictStageSymlink:"\u94FE\u63A5\u76EE\u6807\u6587\u672C\uFF0C\u4E0D\u8DDF\u968F",conflictStageLeft:"\u5DE6\u4FA7\u9636\u6BB5",conflictStageRight:"\u53F3\u4FA7\u9636\u6BB5",conflictStageMissing:"\u6240\u9009\u9636\u6BB5\u7F3A\u5931\uFF0C\u6309\u7A7A\u5185\u5BB9\u6BD4\u8F83\uFF1B\u4E0D\u63A8\u65AD\u539F\u59CB\u5185\u5BB9\u3002",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",workspaceLargeScope:"Git\u5DE5\u4F5C\u533A\u5B8C\u6574UTF-8\u6BD4\u8F83\uFF0C\u6BCF\u4FA78MiB\uFF0F10\u4E07\u884C\uFF1B\u8BFB\u53D6\u671F\u95F4\u53D8\u5316\u4F1A\u62D2\u7EDD\u7ED3\u679C\uFF0C\u6210\u529F\u540E\u6587\u4EF6\u4ECD\u53EF\u88AB\u5916\u90E8\u4FEE\u6539\u3002",largeLoad:"\u52A0\u8F7D\u5B8C\u6574\u5927\u6587\u4EF6\u6BD4\u8F83",largeClose:"\u53D6\u6D88\u5927\u6587\u4EF6\u6A21\u5F0F",largeScope:"\u4EC5Git\u5386\u53F2UTF-8\u666E\u901A\u6587\u4EF6\uFF0C\u6BCF\u4FA7\u6700\u591A8MiB\u300110\u4E07\u884C\uFF1B\u4E0D\u662F\u5DE5\u4F5C\u533A\u6216SVN\u5927\u6587\u4EF6\u3002",diffPending:"\u6B63\u5728\u8BA1\u7B97\u5DEE\u5F02\uFF0C\u5C1A\u4E0D\u80FD\u5224\u65AD\u662F\u5426\u76F8\u540C\u3002",diffIncomplete:"\u5DEE\u5F02\u8BA1\u7B97\u672A\u5B8C\u6210\u6216\u8D85\u65F6\uFF0C\u5F53\u524D\u7ED3\u679C\u53EF\u80FD\u4E0D\u5B8C\u6574\u3002",diffComplete:"\u5DEE\u5F02\u8BA1\u7B97\u5B8C\u6210\u3002",largeFallback:"\u57FA\u7840\u89C6\u56FE\u53EA\u5C55\u793A\u6709\u754C\u7247\u6BB5\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5927\u6587\u4EF6\u5DEE\u5F02\u3002",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",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",pathHistory:"\u6B64\u8DEF\u5F84\u5386\u53F2",submoduleBadge:"\u5B50\u6A21\u5757",submoduleCheckout_initialized:"\u5B58\u5728\u672C\u5730Git\u6807\u8BB0\uFF08\u672A\u9A8C\u8BC1\u68C0\u51FA\u6709\u6548\u6027\uFF09",submoduleCheckout_uninitialized:"\u672C\u5730\u672A\u521D\u59CB\u5316",submoduleCheckout_absent:"\u672C\u5730\u76EE\u5F55\u7F3A\u5931",submoduleCheckout_unreadable:"\u672C\u5730\u72B6\u6001\u4E0D\u53EF\u8BFB",submoduleScope:"\u9884\u89C8\u53EA\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF0C\u4E0D\u989D\u5916\u89E3\u6790\u5B50\u6A21\u5757HEAD\u6216\u52A0\u8F7D\u5185\u5BB9\u3002Git\u72B6\u6001\u626B\u63CF\u672C\u8EAB\u53EF\u80FD\u68C0\u67E5\u5B50\u6A21\u5757HEAD\u548C\u810F\u72B6\u6001\uFF1B\u4E0D\u66F4\u65B0\u6216\u540C\u6B65\u3002",pathHistoryScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u5386\u53F2\u8DEF\u5F84\u5728\u8BE5\u63D0\u4EA4\u4E0B\u7684\u6587\u4EF6\u5386\u53F2\uFF1B\u8DEF\u5F84\u5FC5\u987B\u5B58\u5728\u4E8E\u8BE5\u63D0\u4EA4\u3002\u5173\u95ED\u8DDF\u968F\u65F6\u4E0D\u8DE8\u91CD\u547D\u540D\u3002",pathHistoryNoFollow:"\u672A\u8DDF\u968F\u91CD\u547D\u540D",pathHistoryFollowScope:"\u8DDF\u968F\u6CBF\u7528\u540C\u4E00\u4FDD\u5B88\u89C4\u5219\uFF1A\u7B2C\u4E00\u7236\u94FE\u3001Git\u76F8\u4F3C\u5EA6\u81F3\u5C1150%\u3001\u6BCF\u6B21\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u621632\u6B21\u786E\u8BA4\u4E0A\u9650\u5904\u505C\u6B62\uFF1B\u53EA\u9002\u7528\u4E8E\u63D0\u4EA4\u4E2D\u7684\u666E\u901A\u6587\u4EF6\u6216\u94FE\u63A5\u3002",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF0C\u5E76\u5C1D\u8BD5\u9009\u4E2D\u8BE5\u63D0\u4EA4\u53D8\u66F4\u4E2D\u8DEF\u5F84\u5B8C\u5168\u4E00\u81F4\u7684\u552F\u4E00\u6587\u4EF6\uFF08\u4E0D\u4F1A\u731C\u6D4B\u91CD\u547D\u540D\u6216\u65E7\u8DEF\u5F84\uFF09\uFF1B\u65E0\u552F\u4E00\u5339\u914D\u65F6\u4E0D\u9884\u9009\u6587\u4EF6\u3002\u9ED8\u8BA4\u4F7F\u7528\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG \u4E0E 8 \u4F4D\u5355\u626B\u63CF baseline JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757\u9759\u6001VP8\uFF0F\u65E0\u635FVP8L WebP\uFF08\u4E0D\u652F\u6301\u6E10\u8FDB\u5F0F/CMYK JPEG\u3001\u6269\u5C55/\u52A8\u753B WebP\uFF09\uFF1B\u6BCF\u4FA7\u6700\u591A 2 MiB\u30011600 \u4E07\u50CF\u7D20\u3002\u5143\u6570\u636E\u88AB\u79FB\u9664\uFF0C\u4E0D\u9002\u7528\u4E8E\u8272\u5F69\u7CBE\u786E\u6027\u5BA1\u9605\u3002\u652F\u6301\u5386\u53F2\u63D0\u4EA4\u3001\u56FA\u5B9A A/B \u53CA Git \u5DE5\u4F5C\u533A\uFF1B\u6309\u6240\u9009\u6A21\u5F0F\u8BFB\u53D6 HEAD\u3001\u6682\u5B58\u533A\u6216\u5DE5\u4F5C\u6587\u4EF6\u3002\u51B2\u7A81\u56FE\u7247\u4E0D\u652F\u6301\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u672C\u5730\u5206\u652F\u3001\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\u53CA\u672C\u5730\u7F13\u5B58\u7684\u8FDC\u7A0B\u8DDF\u8E2A\u5F15\u7528\uFF0C\u5171\u6700\u591A1000\u6761\uFF1B\u4E0D\u8FDE\u63A5\u8FDC\u7AEF\u6216fetch\uFF0C\u8FDC\u7A0B\u7F13\u5B58\u53EF\u80FD\u8FC7\u671F\u3002\u91CD\u65B0\u52A0\u8F7D\u65F6\uFF0Corigin/HEAD \u663E\u793A\u5B83\u5F53\u524D\u6307\u5411\u7684\u672C\u5730\u63D0\u4EA4\uFF1B\u5DF2\u9009\u5386\u53F2\u548C\u7248\u672C\u4ECD\u56FA\u5B9A\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5F15\u7528\uFF08\u542B\u8FDC\u7A0B\u7F13\u5B58\uFF09",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528"},en:{svnOfferExpired:"Network access offer expired. Retry manually and check consent again.",svnExpired:"SVN network consent expired; history requests stopped. Review and consent again.",svnConsentReview:"Review SVN network access",svnConsentScope:"Before consent, read local identity only. Access binds this repository, Session and cwd for five minutes; redirects and writes are not authorized.",svnConsentExplicit:"I consent to access the HTTPS SVN repository above",svnConsentApprove:"Consent and read history",svnHistoryScope:"SVN history at a fixed local revision snapshot; pages replace displayed rows",svnHistoricalDiff:"Historical read-only Diff",svnCopyHistory:"View copy source history",svnCopyOutside:"Copy source is outside the authorized scope",svnCopyTraceScope:"Separate fixed in-scope source history, stopping at its copy boundary; not automatic tracing",svnTraceScope:"File trace stops at copy boundaries and does not follow out-of-scope sources",svnGrantScope:"Network consent lasts five minutes; revoke at any time. History operations do not modify the working copy.",svnRevoke:"Revoke SVN network consent",svnIdentity:"Inspect local SVN history identity",svnOfflineIdentity:"Read local metadata from the authorized working copy only; no remote request.",svnRemoteDisabled:"Remote SVN history transport is not enabled; no network grant or usable access token. This is not an authorized history entry point.",historyWindow:"Loaded history window (start inclusive, end exclusive)",historyWindowScope:"List and graph retain at most 200 rows; more loads replace newer rows. Boundary edges are not a complete graph. Local filtering covers this window only.",segments:"Browse historical text segments",segmentBytes:"Byte range (start inclusive, end exclusive)",segmentScope:"Committed UTF-8 regular files up to 16 MiB; replaceable 64 KiB segments. Segment line numbers are not original file lines; this is not a full-file Diff.",blameOriginLine:"View origin historical line",blameUnmapped:"Origin line cannot be located precisely",blamePrevious:"Previous line page",blameNext:"Next line page",fileHistoryMergeBoundary:"Identity boundary: merge commit; stopped without inferring parent origin",fileHistorySimilarity:"Git similarity",fileHistoryAmbiguous:"Multiple candidate origins; tracing stopped here",fileHistoryRenameLimit:"32 rename confirmations reached; tracing stopped here",fileHistoryBoundary:"Identity boundary: copy or inexact rename; stopped here",fileHistoryFollow:"Follow renames (first-parent)",fileHistoryFollowScope:"Git-detected renames; similarities of 50% or more require a unique deletion/addition transition. Stops at ambiguity, copies and merges. Similarity is not an identity guarantee; rows use historical paths.",graphLaneLimit:"At most 32 lanes. Overflow geometry is omitted; loaded nodes and relations remain available as text.",historyBranch:"History tip (local reference)",historyPinned:"Pinned snapshot",historyBranchScope:"Load references manually below. Selection pins that OID; refreshing references does not move the history tip. Selecting HEAD reads current HEAD without checking out.",historyServerSearch:"Full history query",historyServerScope:"Search all history reachable from the pinned snapshot. Message/author use case-insensitive literal matching; path is an exact path or directory, without rename following. Date bounds filter on committer date inclusively and use --since-as-filter to avoid early termination on non-monotonic history; boundary dates without a timezone use the runner local zone. Pagination and runtime are bounded.",historyServer_message:"Commit message",historyServer_author:"Author",historyServer_path:"Path",historyServer_since:"Since (inclusive)",historyServer_until:"Until (inclusive)",historyServerApply:"Run query",historyServerClear:"Clear query",historyServerActive:"Submitted query",reviewView:"Review view",workspaceView:"Working changes",workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",conflictStages:"Index conflict stages",conflictStagesScope:"Manually reads Index stages 1/2/3 of the selected conflict. Stage numbers are Index identities, not merge/rebase ownership claims. Missing stages show as empty and are never inferred; the working file is not read and the conflict is not resolved.",conflictStage1:"Stage 1 (BASE)",conflictStage2:"Stage 2 (ours)",conflictStage3:"Stage 3 (theirs)",conflictStagePresent:"present",conflictStageAbsent:"absent (shown empty)",conflictStageGitlink:"submodule commit reference, contents not loaded",conflictStageSymlink:"link target text, not followed",conflictStageLeft:"Left stage",conflictStageRight:"Right stage",conflictStageMissing:"A selected stage is absent, so it is compared as empty; original content is not inferred.",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",workspaceLargeScope:"Complete Git working-copy UTF-8 comparison: 8 MiB / 100000 lines per side. Changes during loading reject the result; external edits remain possible afterward.",largeLoad:"Load complete large-file comparison",largeClose:"Cancel large-file mode",largeScope:"Git historical UTF-8 regular files only: 8 MiB and 100000 lines per side, not working-copy or SVN large files.",diffPending:"Computing differences; equality is not yet known.",diffIncomplete:"Difference computation is incomplete or timed out; displayed results may be partial.",diffComplete:"Difference computation completed.",largeFallback:"The basic view shows bounded excerpts, not the complete large-file diff.",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",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",pathHistory:"History of this path",submoduleBadge:"submodule",submoduleCheckout_initialized:"local Git marker present (checkout validity not verified)",submoduleCheckout_uninitialized:"not initialized locally",submoduleCheckout_absent:"local directory missing",submoduleCheckout_unreadable:"local state unreadable",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence without separately resolving nested HEAD or loading contents. Git status itself may inspect nested HEAD and dirty state; nothing is updated or synchronized.",pathHistoryScope:"Manually reads the file history of the selected historical path at that commit; the path must exist in that commit. Without following, renames are not crossed.",pathHistoryNoFollow:"renames not followed",pathHistoryFollowScope:"Following uses the same conservative rules: first parent, Git similarity of at least 50%, a unique deletion/addition confirmed each time, stopping at ambiguity, copies or the 32-confirmation cap; only committed regular files or links are supported.",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details and preselect the single exactly matching path in that commit; rename or old paths are never guessed, and a missing or ambiguous match preselects nothing. The first parent is used and no line is auto-located.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeBreadcrumbs:"Historical directory path",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG or 8-bit single-scan baseline JPEG regular files , or single-chunk static VP8 / lossless VP8L WebP (no progressive/CMYK JPEG or extended/animated WebP); at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Supports commits, fixed A/B and Git working changes; HEAD, index or working bytes follow the selected mode. Conflicted images are unsupported.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches, commit tags and locally cached remote-tracking refs, at most 1000 total; no network or fetch. Remote caches may be stale. Reloading origin/HEAD shows its current local target; selected history and versions stay pinned. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local refs (including remote caches)",revisionRefsCount:"Selectable references loaded"}};function ko(e,t,r,o){let i=e.target;if(!t?.contains(i)||e.defaultPrevented||e.isComposing||i?.closest?.(".monaco-editor")||i?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&i===r&&o)return"clear";let s=i?.isContentEditable||i?.closest?.('input,textarea,select,[role="textbox"]');if(s&&i!==r)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!s&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function Co(e,t){let r=t?[...t.querySelectorAll("button[data-vcs-item]")]:[],o=r.indexOf(e.target);if(o<0)return;let i;if(e.key==="ArrowDown")i=r[o+1];else if(e.key==="ArrowUp")i=r[o-1];else if(e.key==="Home")i=r[0];else if(e.key==="End")i=r.at(-1);else if(e.key==="ArrowRight"&&e.target.dataset.vcsDirectory==="closed"||e.key==="ArrowLeft"&&e.target.dataset.vcsDirectory==="open"){e.preventDefault(),e.target.click();return}else return;e.preventDefault(),i?.focus()}var No=e=>"dsh-vcs:project:v1:"+e;function Eo(e,t){if(!e)return"";try{let r=(t??globalThis.localStorage)?.getItem(No(e));return typeof r=="string"&&r.length<=1024?r:""}catch{return""}}function Lo(e,t,r){if(!(!e||!t))try{(r??globalThis.localStorage)?.setItem(No(e),t)}catch{}}function Ho(e,t=""){return e.find(r=>r.id===t)?.id||e.find(r=>r.relativePath===".")?.id||e[0]?.id||""}var Je=(e,t)=>JSON.stringify([e,t]),Ve=(e,t=".")=>[e.type.toUpperCase(),e.relativePath==="."?t:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),Re=(e,t="all")=>e.type==="git"&&["staged","unstaged"].includes(t)?t:"all",Ao=(e="",t="")=>e===t?0:e<t?-1:1;function Dt(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 s=t;for(let p of i.slice(0,-1)){let f=s.id?s.id+"/"+p:p;s.directories.has(p)||s.directories.set(p,{id:f,name:p,directories:new Map,files:[],count:0}),s=s.directories.get(p),s.count++}s.files.push(o)}let r=o=>({...o,directories:[...o.directories.values()].sort((i,s)=>Ao(i.name,s.name)).map(r),files:[...o.files].sort((i,s)=>Ao(i.path,s.path))});return r(t)}function Po(e=[],t){let r=e.findIndex(o=>o.id===t);return{index:r<0?0:r+1,total:e.length}}function Oo(e=[],t,r){if(!e.length||!["previous","next"].includes(r))return null;let o=e.findIndex(p=>p.id===t),i=r==="next"?1:-1,s=o<0?r==="next"?-1:0:o;return e[(s+i+e.length)%e.length]||null}function Bo(e=""){let t=String(e).split("/").filter(Boolean);return t.slice(0,-1).map((r,o)=>t.slice(0,o+1).join("/"))}function Ft(e,t=[]){for(let r of e?.directories||[])t.push(r.id),Ft(r,t);return t}function Do(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function Fo(e=[]){return e.reduce((t,r)=>{let o=Do(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"||Do(i.status)===r)&&i.path.toLowerCase().includes(o)).sort((i,s)=>i.path.localeCompare(s.path))}function Mo(e,t,r="",o="all"){return e.map(i=>({...t[i.id],repository:i,changes:Fr(t[i.id]?.changes,r,o)}))}function To(e,t,r=""){if(!r||!e||e.cwd!==t.cwd)return t;let o=new Map(e.repositories.map(i=>[i.id,i]));for(let i of t.repositories)o.set(i.id,i);return{...t,repositories:[...o.values()],truncated:e.truncated||t.truncated,warnings:[...e.warnings||[],...t.warnings||[]]}}var jo={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},Go=e=>new URL("vcs-assets/"+e,document.baseURI).href;function qo(){return n.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},n.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),n.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var Mr=["slots","layout","locale","connection","uiSession"];function Tr(e){e.effect(()=>e.locale.register("local.vcs",So));let t=e.locale.bind("local.vcs"),r=gt(2),o=so(e.connection,()=>t("error"));function i(f){let d=f.useSessions(a=>Object.values(a.byId).find(c=>(c.retainedBy.mainView??0)>0));return n.default.createElement(s,{key:JSON.stringify([d?.id,d?.cwd])},n.default.createElement(p,{session:d}))}class s extends n.default.Component{state={error:null};static getDerivedStateFromError(d){return{error:d}}render(){return this.state.error?n.default.createElement("section",{className:"vcs-root"},n.default.createElement("style",null,ht),n.default.createElement("div",{className:"vcs-message vcs-error"},t("error"),n.default.createElement("button",{onClick:()=>this.setState({error:null})},t("retry")),n.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")))):this.props.children}}function p({session:f}){(0,n.useSyncExternalStore)(l=>e.locale.subscribe(l),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let d=f?.id,[a,c]=(0,n.useState)("all"),[h,k]=(0,n.useState)(0),[y,C]=(0,n.useState)(0),[u,x]=(0,n.useState)(null),[b,v]=(0,n.useState)({}),[g,m]=(0,n.useState)(()=>Eo(f?.cwd)),[S,H]=(0,n.useState)(0),[K,w]=(0,n.useState)(""),[T,ue]=(0,n.useState)(""),[M,ne]=(0,n.useState)(null),[E,R]=(0,n.useState)(null),[le,He]=(0,n.useState)(!1),[ke,Pe]=(0,n.useState)(!1),[fe,P]=(0,n.useState)(""),[Y,oe]=(0,n.useState)(""),[re,Mt]=(0,n.useState)(""),[Tt,jt]=(0,n.useState)(!1),[ge,et]=(0,n.useState)(""),[Ue,Gt]=(0,n.useState)("all"),[Ce,qt]=(0,n.useState)(!0),[Jt,tt]=(0,n.useState)({}),[Oe,Jo]=(0,n.useState)(!0),[ot,Vo]=(0,n.useState)(!1),[rt,Uo]=(0,n.useState)(!1),[We,Be]=(0,n.useState)("content"),[Vt,Ut]=(0,n.useState)(0),[Wo,Wt]=(0,n.useState)(!1),[It,zt]=(0,n.useState)(null),[Io,zo]=(0,n.useState)(0),[_t,_o]=(0,n.useState)("pending"),[it,st]=(0,n.useState)({added:0,deleted:0,count:0}),[ae,Kt]=(0,n.useState)(!1),Yt=(0,n.useRef)(null),Qt=(0,n.useRef)(null),ye=(0,n.useRef)(null),nt=(0,n.useRef)(null),Ie=(0,n.useRef)(null),at=(0,n.useRef)(null),Xt=(0,n.useRef)(null),Ne=(0,n.useRef)(null),lt=(0,n.useRef)(null),dt=(0,n.useRef)(null),ct=(0,n.useRef)(!1),ze=(0,n.useRef)(!1),ve=u?.repositories||[],be=ve.filter(l=>l.id===g),ie=Wo&&be.some(l=>l.type==="git"),Ko=()=>{Ne.current?.abort(),R(null),ne(null),oe(""),Wt(!0)};(0,n.useEffect)(()=>{ve.some(l=>l.id===g)&&Lo(f?.cwd,g)},[f?.cwd,g,u]);let De=()=>{Xt.current?.abort(),Ne.current?.abort(),R(null),ne(null),oe(""),Be("content"),st({added:0,deleted:0,count:0})},_e=()=>{ze.current=!1,De(),lt.current?.abort(),dt.current=u,x(null),v({}),ue(K.trim()),H(l=>l+1)},xe=()=>{ze.current||(ze.current=!0,De(),lt.current?.abort(),dt.current=null,x(null),v({}),ue(""),H(l=>l+1))},$t=(l=!1)=>{l||C(L=>L+1),ct.current=l,l||De(),l||v({}),k(L=>L+1)};(0,n.useEffect)(()=>{let l=new AbortController;return lt.current=l,P(""),He(!!d),d&&o("vcs/repositories",{sessionId:d,...T?{subdirectory:T}:{}},l.signal).then(L=>{if(!l.signal.aborted){let V=To(dt.current,L,T);ze.current=!1,m(Q=>Ho(V.repositories,Q)),x(V)}}).catch(L=>{l.signal.aborted||P(L.message)}).finally(()=>{l.signal.aborted||He(!1)}),()=>l.abort()},[d,S,T]),(0,n.useEffect)(()=>{let l=new AbortController,L=ct.current;Xt.current=l,ct.current=!1,L||(v({}),oe(""));for(let V of be){let Q=Re(V,a);r(()=>o("vcs/status",{sessionId:d,repositoryId:V.id,mode:Q},l.signal),l.signal).then(se=>{l.signal.aborted||v(de=>({...de,[V.id]:{...se,mode:Q}}))}).catch(se=>{if(!l.signal.aborted){if(se.code==="vcs/rediscover-required"){xe();return}v(de=>({...de,[V.id]:{error:se.message,changes:[],mode:Q}}))}})}return()=>l.abort()},[d,u,g,a,h]),(0,n.useEffect)(()=>{let l=L=>{L.target===window&&d&&g&&document.visibilityState==="visible"&&$t(!0)};return window.addEventListener("focus",l),()=>window.removeEventListener("focus",l)},[d,g,a]);let we=ve.find(l=>l.id===M?.repositoryId),me=M?b[M.repositoryId]:null,pt=JSON.stringify([d,u?.cwd,M?.repositoryId,a,M?.id]),Ee=It?.key===pt&&It?.status===me;(0,n.useEffect)(()=>zt(null),[pt,me,ie]),(0,n.useEffect)(()=>{let l=new AbortController;return Ne.current=l,R(null),oe(""),st({added:0,deleted:0,count:0}),Be("content"),Pe(!!M&&!!me),!ie&&M&&me&&we&&o("vcs/compare",{sessionId:d,repositoryId:M.repositoryId,mode:Re(we,a),id:M.id,...Ee?{large:!0}:{}},l.signal).then(L=>{l.signal.aborted||R(L)}).catch(L=>{if(!l.signal.aborted){if(L.code==="vcs/rediscover-required"){xe();return}oe(L.message)}}).finally(()=>{l.signal.aborted||Pe(!1)}),()=>l.abort()},[M,me,d,a,ie,Ee,Io]),(0,n.useEffect)(()=>{let l=!1,L,V=new AbortController;Kt(!1),Mt("");let Q=document.createElement("link");return Q.rel="stylesheet",Q.href=Go("editor.css"),document.head.appendChild(Q),Qe(Go("editor.js")+"?v="+encodeURIComponent(Xe)+"&retry="+Vt,{signal:V.signal}).then(se=>{l||(L=se.createDiff(Qt.current,{onStats:st,onComputation:de=>{l||_o(de)}}),ye.current=L,Kt(!0))}).catch(se=>{l||Mt(se.message)}),()=>{l=!0,V.abort(),L?.dispose(),ye.current=null,Q.remove()}},[Vt]),(0,n.useEffect)(()=>{ae&&(!E||E.binary||ie)&&ye.current?.setContent({left:{text:""},right:{text:""}},"empty"),ae&&E&&!E.binary&&!ie&&ye.current?.setContent(E,JSON.stringify([d,u?.cwd,M?.repositoryId,a,M?.id,E.path]))},[ae,E,d,u,M,a,ie]),(0,n.useEffect)(()=>{ye.current?.options({sideBySide:Oe,ignoreWhitespace:ot,wrap:rt})},[ae,Oe,ot,rt]);let Fe=Mo(be,b,ge,Ue),Le=Fe.flatMap(l=>l.changes),Yo=Fo(me?.changes),ut=Po(Le,M?.id),Zt=()=>{et(""),Gt("all")},Qo=async()=>{let l=E?.path||he?.path;if(l)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(l);else{let L=document.createElement("textarea");try{if(L.value=l,L.style.cssText="position:fixed;opacity:0",document.body.appendChild(L),L.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{L.remove()}}jt(!0),window.setTimeout(()=>jt(!1),1500)}catch{oe(t("copyFailed"))}};(0,n.useEffect)(()=>{let l=L=>{if(ie)return;let V=ko(L,Yt.current,Ie.current,!!ge);V&&(L.preventDefault(),V==="search"?(Ie.current?.focus(),Ie.current?.select()):V==="clear"?et(""):ft(V))};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[ge,Le,M,ie]);let Rt=l=>tt(L=>{let V={...L};for(let Q of Fe)for(let se of Ft(Dt(Q.changes)))V[Q.repository.id+"\0"+se]=!l;return V}),Xo=()=>{let l=he;!l||!M||(qt(!0),Zt(),tt(L=>{let V={...L};for(let Q of Bo(l.path))V[M.repositoryId+"\0"+Q]=!1;return V}),at.current=Je(M.repositoryId,l.id))};(0,n.useEffect)(()=>{let l=at.current;if(!l)return;let L=[...nt.current?.querySelectorAll("button[data-vcs-change]")||[]].find(V=>V.dataset.vcsChange===l);L&&(L.scrollIntoView({block:"nearest"}),L.focus(),at.current=null)},[Ce,ge,Ue,Jt,Fe]);let ft=l=>{let L=Oo(Le,M?.id,l);L&&(Ne.current?.abort(),R(null),Be("content"),ne({repositoryId:g,id:L.id}))},eo=le||be.some(l=>!b[l.id]),he=me?.changes?.find(l=>l.id===M?.id),Se=E?.properties,mt=Se?[...new Set([...Object.keys(Se.left||{}),...Object.keys(Se.right||{})])].filter(l=>Se.left?.[l]!==Se.right?.[l]):[],Me=l=>jo[l?.status]||l?.status?.slice(0,1).toUpperCase()||"M",to=E?.binary?[E.left.label,E.right.label].filter(Boolean).join(" \u2194 "):"",Ae=Y||(ke?t("loading"):d?eo&&!he?t("loading"):fe||(ve.length?he?E?.binary?t("binary")+(to?" "+t("binaryComparison",{files:to}):""):E?!ae&&!re?t("loading"):"":t("pick"):t("pick"):t("noRepo")):t("noSession")),$o=l=>Co(l,nt.current),oo=({entry:l,compact:L=!1,depth:V=0})=>{let Q=l.path.lastIndexOf("/");return n.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":Je(g,l.id),"aria-current":M?.repositoryId===g&&M?.id===l.id?"true":void 0,style:{paddingInlineStart:8+V*14},title:(l.oldPath?l.oldPath+" \u2192 ":"")+l.path+" \xB7 "+t(Me(l)),onClick:()=>{Ne.current?.abort(),R(null),Be("content"),ne({repositoryId:g,id:l.id})}},n.default.createElement("span",{className:"vcs-status","data-status":Me(l)},Me(l)),n.default.createElement(bt,{submodule:l.submodule,t}),n.default.createElement("span",{className:"vcs-filename"},L?l.path.slice(Q+1):l.path,l.oldPath&&n.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",l.oldPath)))},ro=({node:l,repository:L,depth:V=0})=>n.default.createElement(n.default.Fragment,null,l.directories.map(Q=>{let se=L.id+"\0"+Q.id,de=!!Jt[se];return n.default.createElement(n.default.Fragment,{key:se},n.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":de?"closed":"open","aria-expanded":!de,style:{paddingInlineStart:8+V*14},onClick:()=>tt(Zo=>({...Zo,[se]:!de}))},n.default.createElement("span",{"aria-hidden":"true"},de?"\u203A":"\u2304"),Q.name,n.default.createElement("small",null,Q.count)),!de&&n.default.createElement(ro,{node:Q,repository:L,depth:V+1}))}),l.files.map(Q=>n.default.createElement(oo,{key:Je(L.id,Q.id),entry:Q,compact:l.id!=="",depth:V})));return n.default.createElement("section",{ref:Yt,className:"vcs-root","aria-label":t("title")},n.default.createElement("style",null,ht),n.default.createElement("header",{className:"vcs-top"},n.default.createElement(qo,null),n.default.createElement("h1",{className:"vcs-title"},t("title")),n.default.createElement("span",{className:"vcs-badge"},t("readonly")),n.default.createElement("span",{className:"vcs-spacer"}),n.default.createElement("select",{"aria-label":t("repositories"),value:g,disabled:le||!ve.length,onChange:l=>{De(),v({}),m(l.target.value)}},!ve.length&&n.default.createElement("option",{value:""},t("repositories")),ve.map(l=>n.default.createElement("option",{key:l.id,value:l.id},Ve(l,t("workspaceRoot"))))),n.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",n.default.createElement("select",{"aria-label":t("gitMode"),value:a,disabled:ie||!be.some(l=>l.type==="git"),onChange:l=>{De(),v({}),c(l.target.value)}},["all","unstaged","staged"].map(l=>n.default.createElement("option",{key:l,value:l},t(l))))),n.default.createElement("button",{onClick:()=>$t(!1),disabled:eo||!d},t("refresh")),n.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")),n.default.createElement("div",{className:"vcs-path",title:u?.cwd||f?.cwd},t("session"),": ",u?.cwd||f?.cwd||"\u2014"),n.default.createElement("form",{className:"vcs-discovery",onSubmit:l=>{l.preventDefault(),_e()}},n.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:K,onChange:l=>w(l.target.value)}),n.default.createElement("button",{disabled:!d||le},t("rescan")),n.default.createElement("span",null,t("scanHint"))),u?.truncated&&n.default.createElement("div",{className:"vcs-notice"},t("truncated")),(u?.warnings||[]).map((l,L)=>n.default.createElement("div",{className:"vcs-notice",key:L},typeof l=="string"?l:l.message||JSON.stringify(l)))),be.filter(l=>l.type==="svn").map(l=>n.default.createElement(n.default.Fragment,{key:JSON.stringify([d,l.id,S,h])},n.default.createElement(xt,{repositoryId:l.id,sessionId:d,rpc:o,t,onRediscover:xe}),n.default.createElement(kt,{repositoryId:l.id,sessionId:d,rpc:o,t,onRediscover:xe}))),be.some(l=>l.type==="git")&&n.default.createElement(n.default.Fragment,null,n.default.createElement("nav",{className:"vcs-review-views","aria-label":t("reviewView")},n.default.createElement("button",{"aria-pressed":!ie,onClick:()=>Wt(!1)},t("workspaceView")),n.default.createElement("button",{"aria-pressed":ie,"aria-expanded":ie,onClick:Ko},t("history"))),ie&&n.default.createElement(Bt,{key:JSON.stringify([d,g,y,S]),sessionId:d,repositoryId:g,rpc:o,t,onRediscover:xe})),n.default.createElement("div",{className:"vcs-body",hidden:ie,"aria-label":t("workspaceView")},n.default.createElement("aside",{className:"vcs-files"},n.default.createElement("div",{className:"vcs-filter"},n.default.createElement("input",{ref:Ie,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:ge,onChange:l=>et(l.target.value)}),(ge||Ue!=="all")&&n.default.createElement("button",{className:"vcs-clear-filter",onClick:Zt},t("clearFilters"))),n.default.createElement("div",{className:"vcs-status-filter","aria-label":t("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(l=>n.default.createElement("button",{key:l,"aria-pressed":Ue===l,onClick:()=>Gt(l)},t(l==="all"?"allFiles":jo[l]||"M")," ",n.default.createElement("small",null,Yo[l]||0)))),n.default.createElement("div",{className:"vcs-count"},n.default.createElement("span",null,Le.length," ",t("files")),n.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),n.default.createElement("button",{"aria-pressed":Ce,onClick:()=>qt(!Ce)},t(Ce?"tree":"list"))),Ce&&n.default.createElement("div",{className:"vcs-tree-actions"},n.default.createElement("button",{onClick:()=>Rt(!0)},t("expandAll")),n.default.createElement("button",{onClick:()=>Rt(!1)},t("collapseAll")),n.default.createElement("button",{onClick:Xo,disabled:!he},t("revealSelected"))),n.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:nt,onKeyDown:$o},Fe.map(l=>{let L=l.repository;return n.default.createElement("section",{className:"vcs-repository",key:L.id,"aria-label":Ve(L,t("workspaceRoot"))},n.default.createElement("div",{className:"vcs-repository-heading",title:L.root},n.default.createElement("strong",null,Ve(L,t("workspaceRoot"))),n.default.createElement("small",null,L.type==="svn"?t("svnBase"):t(Re(L,a)))),l.error?n.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},l.error,n.default.createElement("button",{onClick:_e},t("rescan"))):b[L.id]?Ce?n.default.createElement(ro,{node:Dt(l.changes),repository:L}):l.changes.map(V=>n.default.createElement(oo,{key:Je(L.id,V.id),entry:V})):n.default.createElement("div",{className:"vcs-message"},t("loading")),!l.error&&b[L.id]&&!l.changes.length&&n.default.createElement("div",{className:"vcs-message"},t(ge?"emptySearch":"clean")))}),!Fe.length&&n.default.createElement("div",{className:"vcs-message"},le?t("loading"):fe||t(d?"noRepo":"noSession"),fe&&n.default.createElement("button",{onClick:_e},t("rescan"))))),n.default.createElement("main",{className:"vcs-detail"},n.default.createElement("div",{className:"vcs-filehead"},n.default.createElement("strong",{title:E?.path||he?.path},we?Ve(we,t("workspaceRoot"))+" / ":"",E?.path||he?.path||t("pick")),n.default.createElement("button",{className:"vcs-copy-path",disabled:!(E?.path||he?.path),onClick:Qo},t(Tt?"copied":"copyPath")),Tt&&n.default.createElement("span",{className:"vcs-sr-only",role:"status"},t("pathCopied")),n.default.createElement("span",{className:"vcs-spacer"}),E&&!E.binary&&ae&&n.default.createElement(n.default.Fragment,null,n.default.createElement("span",{className:"vcs-add"},"+",it.added),n.default.createElement("span",{className:"vcs-del"},"\u2212",it.deleted))),re&&n.default.createElement("div",{className:"vcs-notice",role:"status"},t("fallback")," ",n.default.createElement("button",{onClick:()=>Ut(l=>l+1)},t("retry")),n.default.createElement("details",null,n.default.createElement("summary",null,t("diagnostics")),re)),E&&n.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},n.default.createElement("span",{className:"vcs-context-status","data-status":Me(E)},t(Me(E))),E.oldPath&&n.default.createElement("span",{className:"vcs-context-rename",title:E.oldPath+" \u2192 "+E.path},E.oldPath," ",n.default.createElement("b",null,"\u2192")," ",E.path),n.default.createElement("span",null,E.left.label||"\u2014"," ",n.default.createElement("b",null,"\u2194")," ",E.right.label||"\u2014"),(E.left.encoding||E.right.encoding)&&n.default.createElement("span",null,t("encoding"),": ",E.left.encoding||"\u2014"," / ",E.right.encoding||"\u2014")),E&&we?.type==="git"&&n.default.createElement(je,{key:JSON.stringify([d,u?.cwd,M.repositoryId,a,M.id,h,me]),workspace:!0,sessionId:d,repositoryId:M.repositoryId,mode:a,id:M.id,rpc:o,t,onRediscover:xe}),we?.type==="git"&&(Ee||E?.notice?.includes("2 MiB"))&&n.default.createElement("div",{className:"vcs-notice"},n.default.createElement("span",null,t("workspaceLargeScope")),n.default.createElement("button",{onClick:()=>{Ne.current?.abort(),R(null),zt(Ee?null:{key:pt,status:me})}},t(Ee?"largeClose":"largeLoad")),Ee&&Y&&n.default.createElement("button",{onClick:()=>zo(l=>l+1)},t("retry"))),E?.large&&n.default.createElement("p",{role:"status"},t(re?"largeFallback":_t==="complete"?"diffComplete":_t==="incomplete"?"diffIncomplete":"diffPending")),E?.notice&&n.default.createElement("div",{className:"vcs-notice"},E.notice),E?.submodule&&n.default.createElement("p",{role:"status"},t("submoduleScope")),E?.status==="conflicted"&&we?.type==="git"&&n.default.createElement(vt,{key:JSON.stringify([d,M.repositoryId,a,M.id,h]),sessionId:d,repositoryId:M.repositoryId,mode:a,id:M.id,rpc:o,t,onRediscover:xe}),mt.length>0&&n.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(l=>n.default.createElement("button",{key:l,"aria-pressed":We===l,onClick:()=>Be(l)},t(l),l==="properties"?" ("+mt.length+")":""))),n.default.createElement("div",{className:"vcs-labels"},n.default.createElement("span",null,E?.left.label||"\u2014",E?.left.encoding?" \xB7 "+E.left.encoding:""),n.default.createElement("span",null,E?.right.label||"\u2014",E?.right.encoding?" \xB7 "+E.right.encoding:"")),n.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!Ae||We!=="content",style:We==="properties"?{display:"none"}:void 0},n.default.createElement("div",{className:"vcs-editor",ref:Qt,style:re?{display:"none"}:void 0}),re&&E&&!E.binary&&!Ae&&n.default.createElement(Te,{comparison:E,labels:Ye(t)}),Ae&&n.default.createElement("div",{className:"vcs-message "+(fe||Y||re?"vcs-error":""),role:"status"},Ae,(fe||Y||re)&&n.default.createElement("button",{onClick:()=>re?Ut(l=>l+1):_e()},t(re?"retry":"rescan")))),We==="properties"&&n.default.createElement("div",{className:"vcs-properties"},n.default.createElement("table",null,n.default.createElement("thead",null,n.default.createElement("tr",null,n.default.createElement("th",null,t("properties")),n.default.createElement("th",null,E?.left.label||t("before")),n.default.createElement("th",null,E?.right.label||t("after")))),n.default.createElement("tbody",null,mt.map(l=>n.default.createElement("tr",{key:l},n.default.createElement("th",null,l),n.default.createElement("td",null,Se.left?.[l]??"\u2014"),n.default.createElement("td",null,Se.right?.[l]??"\u2014")))))),n.default.createElement("footer",{className:"vcs-toolbar"},n.default.createElement("button",{disabled:!ae,"aria-pressed":Oe,onClick:()=>Jo(!Oe)},t(Oe?"side":"inline")),n.default.createElement("label",null,n.default.createElement("input",{type:"checkbox",disabled:!ae,checked:ot,onChange:l=>Vo(l.target.checked)}),t("whitespace")),n.default.createElement("label",null,n.default.createElement("input",{type:"checkbox",disabled:!ae,checked:rt,onChange:l=>Uo(l.target.checked)}),t("wrap")),n.default.createElement("span",{className:"vcs-spacer"}),ae&&n.default.createElement("span",null,it.count," ",t("changes")),n.default.createElement("button",{disabled:!ae||!E||!!Ae,onClick:()=>ye.current?.navigate("previous")},t("previous")),n.default.createElement("button",{disabled:!ae||!E||!!Ae,onClick:()=>ye.current?.navigate("next")},t("next")),ut.index>0&&n.default.createElement("span",{className:"vcs-review-position"},t("reviewPosition",{index:ut.index,total:ut.total})),n.default.createElement("span",{className:"vcs-toolbar-separator"}),n.default.createElement("button",{title:t("fileShortcut"),disabled:!Le.length,onClick:()=>ft("previous")},t("previousFile")),n.default.createElement("button",{title:t("fileShortcut"),disabled:!Le.length,onClick:()=>ft("next")},t("nextFile"))))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},i)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>t("title"),order:65},qo))}
|
|
97
97
|
return module.exports; }});
|
package/git-history.mjs
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
// Search values are literal, bounded and never revision/options or pathspec expressions.
|
|
2
2
|
export function validateDateBound(value){
|
|
3
3
|
if(typeof value!=='string'||!value||value.length>40)throw new Error('Invalid history date bound');
|
|
4
|
-
|
|
4
|
+
const m=/^(\d{4})-(\d{2})-(\d{2})(?:[T ]([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d))?(Z|[+-](?:[01]\d|2[0-3]):?[0-5]\d)?)?$/.exec(value);
|
|
5
|
+
if(!m)throw new Error('Invalid history date bound');
|
|
6
|
+
const year=+m[1],month=+m[2],day=+m[3];
|
|
7
|
+
if(year<1||year>9999)throw new Error('Invalid history date bound');
|
|
8
|
+
const leap=year%4===0&&(year%100!==0||year%400===0);
|
|
9
|
+
const dim=[31,leap?29:28,31,30,31,30,31,31,30,31,30,31];
|
|
10
|
+
if(month<1||month>12||day<1||day>dim[month-1])throw new Error('Invalid history date bound');
|
|
5
11
|
return value;
|
|
6
12
|
}
|
|
7
13
|
export function historySearchArgs(search) {
|
package/package.json
CHANGED
package/vcs.mjs
CHANGED
|
@@ -194,7 +194,7 @@ export async function listHistory(repo, {snapshot,offset=0,limit=50,search,signa
|
|
|
194
194
|
if(signal?.aborted) throw Object.assign(new Error('History cancelled'),{code:'ABORT_ERR'});
|
|
195
195
|
repo=await checkedRepo(repo,signal);
|
|
196
196
|
if(repo.type!=='git') throw new Error('History currently supports Git only');
|
|
197
|
-
if(
|
|
197
|
+
if(query.args.some(a=>a.startsWith('--since-as-filter='))){
|
|
198
198
|
signal?.throwIfAborted();
|
|
199
199
|
try{await git(repo.root,['log','--since-as-filter=1970-01-01','-1','--format=%H'],MAX_TEXT,{signal});}
|
|
200
200
|
catch(e){if(e.code==='VCS_COMMAND')throw new Error('Date-range history search requires Git 2.37 or newer (--since-as-filter).');throw e;}
|