@feng0531/dsh-vcs 0.4.4 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -176,6 +176,6 @@ var Eo=Object.create;var ut=Object.defineProperty;var Ho=Object.getOwnPropertyDe
176
176
  .vcs-root .vcs-svn-remote>p,.vcs-root .vcs-svn-remote>button{flex-shrink:0;margin:4px 16px;align-self:flex-start}
177
177
  .vcs-root .vcs-history-browser>.vcs-history-details>p{grid-column:2;grid-row:1;overflow:auto;padding:12px}
178
178
  @container(max-width:650px){.vcs-root .vcs-history-browser{grid-template-columns:minmax(130px,42%) minmax(0,1fr);grid-template-rows:minmax(120px,38%) minmax(0,1fr)}.vcs-root .vcs-history-browser .vcs-commit-sidebar,.vcs-root .vcs-history-browser .vcs-commit-review{padding:8px}}
179
- `;function mt(e,r){return async(o,t,i)=>{let s=await e.rpc.call("/vcs-rpc",o,t,i);if(!s.ok){let c=new Error(s.error?.message||String(s.error||r()));throw c.code=s.error?.code,c}return s.value}}function It(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let r=0,o=[];function t(){for(;r<e&&o.length;){let i=o.shift();if(i.signal?.removeEventListener("abort",i.abort),i.signal?.aborted){i.reject(new Error("Aborted"));continue}r++,Promise.resolve().then(()=>{if(i.signal?.aborted)throw new Error("Aborted");return i.run()}).then(i.resolve,i.reject).finally(()=>{r--,t()})}}return(i,s)=>new Promise((c,m)=>{let p={run:i,signal:s,resolve:c,reject:m,abort:null};if(p.abort=()=>{let n=o.indexOf(p);n>=0&&(o.splice(n,1),m(new Error("Aborted")))},s?.aborted){m(new Error("Aborted"));return}s?.addEventListener("abort",p.abort,{once:!0}),o.push(p),t()})}var ae=R(require("react"),1);function Pr(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Lr(e="",r=""){let o=Pr(e),t=Pr(r),i=0;for(;i<o.length&&i<t.length&&o[i]===t[i];)i++;let s=0;for(;s<o.length-i&&s<t.length-i&&o[o.length-s-1]===t[t.length-s-1];)s++;let c=o.length-s,m=t.length-s,p=c-i,n=m-i,l=p&&n?(p+1)*(n+1):0,u=l>2e5,k=[],f=0;function C(b,N){f++,!(k.length>=2e3)&&k.push({left:b===null?null:{number:b+1,text:o[b]},right:N===null?null:{number:N+1,text:t[N]},kind:b===null?"insert":N===null?"delete":o[b]===t[N]?"equal":"replace"})}for(let b=0;b<i;b++)C(b,b);if(u||!p||!n)for(let b=0;b<Math.max(p,n);b++)C(b<p?i+b:null,b<n?i+b:null);else{let b=n+1,N=new Uint32Array(l);for(let h=p-1;h>=0;h--)for(let x=n-1;x>=0;x--)N[h*b+x]=o[i+h]===t[i+x]?N[(h+1)*b+x+1]+1:Math.max(N[(h+1)*b+x],N[h*b+x+1]);let y=0,w=0;for(;y<p||w<n;)y<p&&w<n&&o[i+y]===t[i+w]?C(i+y++,i+w++):y<p&&(w===n||N[(y+1)*b+w]>=N[y*b+w+1])?C(i+y++,null):C(null,i+w++)}for(let b=0;b<s;b++)C(c+b,m+b);return{rows:k,approximate:u,truncated:f>k.length,totalRows:f,omittedRows:f-k.length,leftLineCount:o.length,rightLineCount:t.length,lcsCells:u?0:l}}var Fo={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."},Ut={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},To={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Vo={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},jo={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Xe({comparison:e,labels:r={}}){let o=e?.left?.text??"",t=e?.right?.text??"",i=(0,ae.useMemo)(()=>Lr(o,t),[o,t]),s=m=>r[m]??Fo[m],c=(m,p,n)=>{let l=m&&n!=="equal";return ae.default.createElement("td",{style:{...Ut,background:l?p==="left"?"#d6454520":"#259b4920":void 0}},ae.default.createElement("div",{style:To},ae.default.createElement("span",{style:Vo},m?.number??""),ae.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},l?p==="left"?"\u2212":"+":""),ae.default.createElement("pre",{style:jo},m?.text??"")))};return ae.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&&ae.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),i.truncated&&ae.default.createElement("div",{role:"status",style:{padding:8}},s("truncated")," (",2e3," / ",i.totalRows,")"),ae.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},ae.default.createElement("thead",null,ae.default.createElement("tr",null,ae.default.createElement("th",{scope:"col",style:{...Ut,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),ae.default.createElement("th",{scope:"col",style:{...Ut,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),ae.default.createElement("tbody",null,i.rows.map((m,p)=>ae.default.createElement("tr",{key:p,"data-kind":m.kind},c(m.left,"left",m.kind),c(m.right,"right",m.kind))))),!i.rows.length&&ae.default.createElement("p",{style:{padding:8}},s("empty")))}var K=R(require("react"),1);function Dr(e,{width:r,height:o,signal:t,timeoutMs:i=1e4,createURL:s=p=>URL.createObjectURL(p),revokeURL:c=p=>URL.revokeObjectURL(p),createImage:m=()=>new Image}={}){return new Promise((p,n)=>{if(t?.aborted){n(t.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(r)||!Number.isInteger(o)||r<1||o<1||r>8192||o>8192||r*o>16e6||!Number.isFinite(i)||i<=0){n(new Error("Invalid image preview"));return}let l,u,k,f=!1,C=!1,b=()=>{C||(C=!0,u&&(u.src=""),l&&c(l))},N=()=>{clearTimeout(k),t?.removeEventListener("abort",w)},y=h=>{f||(f=!0,N(),b(),n(h))},w=()=>y(t.reason||new Error("Image cancelled"));try{l=s(e),u=m(),t?.addEventListener("abort",w,{once:!0}),k=setTimeout(()=>y(new Error("Image decode timed out")),i),u.src=l,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){w();return}if(u.naturalWidth!==r||u.naturalHeight!==o){y(new Error("Image dimensions mismatch"));return}f=!0,N(),p({url:l,dispose:b})}},y)}catch(h){y(h)}})}function Io({side:e,sessionId:r,repositoryId:o,commit:t,parentIndex:i,base:s,target:c,workspace:m=!1,mode:p,id:n,rpc:l,t:u,onRediscover:k}){let[f,C]=(0,K.useState)(null),[b,N]=(0,K.useState)(""),[y,w]=(0,K.useState)(0);return(0,K.useEffect)(()=>{let h=new AbortController,x;return C(null),N(""),(async()=>{let v=await l(m?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",m?{sessionId:r,repositoryId:o,mode:p,id:n,side:e}:s?{sessionId:r,repositoryId:o,base:s,target:c,id:n,side:e}:{sessionId:r,repositoryId:o,commit:t,parentIndex:i,id:n,side:e},h.signal);if(h.signal.aborted)return;if(v.absent){C(v);return}if(!["image/png","image/jpeg","image/webp"].includes(v.mime)||typeof v.base64!="string"||v.base64.length>2796204||!Number.isInteger(v.bytes)||v.bytes<1||v.bytes>2097152)throw Error(u("imageInvalid"));let H=atob(v.base64);if(H.length!==v.bytes)throw Error(u("imageInvalid"));let L=new Blob([Uint8Array.from(H,g=>g.charCodeAt(0))],{type:v.mime});if(x=await Dr(L,{width:v.width,height:v.height,signal:h.signal}),h.signal.aborted){x.dispose();return}C({...v,url:x.url})})().catch(v=>{h.signal.aborted||(N(v.message),v.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),x?.dispose()}},[e,r,o,t,i,s,c,m,p,n,y]),K.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},K.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),b?K.default.createElement("p",{role:"alert"},b," ",K.default.createElement("button",{onClick:()=>w(h=>h+1)},u("retry"))):f?K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,K.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?K.default.createElement("p",null,u("imageAbsent")):K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),K.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&K.default.createElement("p",null,u("imageMetadata")))):K.default.createElement("p",{role:"status"},u("loading")))}function Ze(e){let[r,o]=(0,K.useState)(!1);return K.default.createElement("div",null,K.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("imageCompare")),r&&K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,e.t("imageScope")),K.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(t=>K.default.createElement(Io,{key:t,...e,side:t})))))}var z=R(require("react"),1);var oe=R(require("react"),1);function ft(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var ge=require("react");function Mr({load:e,node:r,comparison:o,key:t,single:i=!1,onReady:s=()=>{},onError:c=()=>{},onComputation:m=()=>{}}){let p=new AbortController,n,l=!1,u=()=>{let f=n;n=void 0,f?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),e(p.signal))).then(f=>{l||(n=f.createDiff(r,{single:i,onComputation:C=>{l||m(C)}}),n.setContent(o,t),l||s(n))}).catch(f=>{try{u()}finally{l||c(f)}}),dispose(){l||(l=!0,p.abort(),u())}}}async function ht(e,{signal:r,fetcher:o=fetch,importer:t=i=>import(i)}={}){let i=await o(e,{credentials:"same-origin",cache:"no-cache",signal:r});if(!i.ok)throw new Error("Editor resource HTTP "+i.status+" ("+e+"). "+(i.status===401?"Refresh the authenticated DSH page.":i.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let s=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(s))throw new Error("Editor resource returned "+(s||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),r?.throwIfAborted(),t(e)}var Ge="0.4.4";function Br({comparison:e,identity:r,enabled:o,single:t,line:i,sideBySide:s,ignoreWhitespace:c,wrap:m}){let p=(0,ge.useRef)(null),n=(0,ge.useRef)(null),[l,u]=(0,ge.useState)(!1),[k,f]=(0,ge.useState)(""),[C,b]=(0,ge.useState)("pending");return(0,ge.useEffect)(()=>{if(u(!1),b("pending"),f(""),!o)return;let N=h=>new URL("vcs-assets/"+h,document.baseURI).href,y=document.createElement("link");y.rel="stylesheet",y.href=N("editor.css"),document.head.appendChild(y);let w=Mr({node:p.current,comparison:e,key:r,single:t,load:h=>ht(N("editor.js")+"?v="+encodeURIComponent(Ge)+"&retry=0",{signal:h}),onReady:h=>{n.current=h,u(!0)},onError:h=>f(h.message),onComputation:b});return()=>{n.current=null;try{w.dispose()}finally{y.remove()}}},[o,e,r,t]),(0,ge.useEffect)(()=>{l&&t&&i&&n.current?.revealLine(i)},[l,t,i]),(0,ge.useEffect)(()=>{l&&n.current?.options({sideBySide:s,ignoreWhitespace:c,wrap:m})},[l,s,c,m]),{node:p,viewer:n,ready:l,error:k,computation:C}}function ye({comparison:e,identity:r,t:o,single:t=!1,line:i=null}){let[s,c]=(0,oe.useState)(!0),[m,p]=(0,oe.useState)(!1),[n,l]=(0,oe.useState)(!1),[u,k]=(0,oe.useState)(!0),{node:f,viewer:C,ready:b,error:N,computation:y}=Br({comparison:e,identity:r,enabled:u,single:t,line:i,sideBySide:s,ignoreWhitespace:m,wrap:n});return oe.default.createElement("div",{className:"vcs-history-viewer"},oe.default.createElement("div",{className:"vcs-history-viewer-toolbar"},oe.default.createElement("button",{"aria-pressed":u,onClick:()=>k(w=>!w)},o(u?"historyBasic":"historyAdvanced")),b&&!t&&oe.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},oe.default.createElement("button",{"aria-pressed":s,onClick:()=>c(w=>!w)},o(s?"side":"inline")),oe.default.createElement("label",null,oe.default.createElement("input",{type:"checkbox",checked:m,onChange:w=>p(w.target.checked)}),o("whitespace")),oe.default.createElement("label",null,oe.default.createElement("input",{type:"checkbox",checked:n,onChange:w=>l(w.target.checked)}),o("wrap")),oe.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},o("previous")),oe.default.createElement("button",{onClick:()=>C.current?.navigate("next")},o("next")))),u&&!b&&!N&&oe.default.createElement("p",{role:"status"},o("loading")),e.large&&!t&&b&&oe.default.createElement("p",{role:"status"},o(y==="complete"?"diffComplete":y==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!b&&oe.default.createElement("p",{role:"status"},o("largeFallback")),N&&oe.default.createElement("p",{role:"status"},o("fallback")," ",N),oe.default.createElement("div",{key:"editor-host",className:"vcs-history-editor-host",style:{position:"relative",height:"var(--vcs-history-editor-height, 360px)"}},oe.default.createElement("div",{ref:f,style:{position:"absolute",inset:0,visibility:b?"visible":"hidden"},"aria-hidden":!b}),!b&&oe.default.createElement(Xe,{comparison:e,labels:ft(o)})))}function qt({sessionId:e,repositoryId:r,mode:o,id:t,rpc:i,t:s,onRediscover:c}){let[m,p]=(0,z.useState)(null),[n,l]=(0,z.useState)(""),[u,k]=(0,z.useState)(0),[f,C]=(0,z.useState)(1),[b,N]=(0,z.useState)(3);(0,z.useEffect)(()=>{let g=new AbortController;return p(null),l(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:r,mode:o,id:t},g.signal).then(B=>{g.signal.aborted||p(B)}).catch(B=>{g.signal.aborted||(l(B.message),B.code==="vcs/rediscover-required"&&c())}),()=>g.abort()},[e,r,o,t,u]);let y={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},w=s("conflictStageMissing"),h=y[f],x=y[b],v=(0,z.useMemo)(()=>{if(!m)return null;let g=A=>m.stages.find(O=>O.stage===A),B=A=>{let O=g(A);return!O||!O.present?{text:"",label:y[A]}:{text:O.text,label:y[A],...O.binary?{binary:!0}:{},...O.encoding?{encoding:O.encoding}:{},...O.notice?{notice:O.notice}:{}}},q=B(f),se=B(b),ue=[q.notice,se.notice].filter(Boolean);return g(f)?.present&&g(b)?.present||ue.push(w),{path:m.path,left:q,right:se,binary:!!(q.binary||se.binary),...ue.length?{notice:[...new Set(ue)].join(" \xB7 ")}:{}}},[m,f,b,h,x,w]);if(n)return z.default.createElement("section",{"aria-label":s("conflictStages")},z.default.createElement("h4",null,s("conflictStages")),z.default.createElement("p",{role:"alert"},n," ",z.default.createElement("button",{onClick:()=>k(g=>g+1)},s("retry"))));if(!m||!v)return z.default.createElement("section",{"aria-label":s("conflictStages")},z.default.createElement("h4",null,s("conflictStages")),z.default.createElement("p",{role:"status"},s("loading")));let H=g=>m.stages.find(B=>B.stage===g),L=v.binary&&!v.left.text&&!v.right.text;return z.default.createElement("section",{"aria-label":s("conflictStages")},z.default.createElement("h4",null,s("conflictStages")),z.default.createElement("p",null,s("conflictStagesScope")),z.default.createElement("ul",null,[1,2,3].map(g=>z.default.createElement("li",{key:g},z.default.createElement("code",null,y[g])," \xB7 ",H(g)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),H(g)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),H(g)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),H(g)?.present&&H(g)?.notice&&" \xB7 "+H(g).notice))),z.default.createElement("label",null,s("conflictStageLeft")," ",z.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:g=>C(Number(g.target.value))},[1,2,3].map(g=>z.default.createElement("option",{key:g,value:g},y[g])))),z.default.createElement("label",null,s("conflictStageRight")," ",z.default.createElement("select",{"aria-label":s("conflictStageRight"),value:b,onChange:g=>N(Number(g.target.value))},[1,2,3].map(g=>z.default.createElement("option",{key:g,value:g},y[g])))),v.notice&&z.default.createElement("p",{role:"status"},v.notice),L?z.default.createElement("p",{role:"status"},s("binary")):z.default.createElement(ye,{key:JSON.stringify([t,f,b,m.snapshot]),comparison:v,identity:JSON.stringify([e,r,o,t,f,b,m.snapshot]),t:s}))}var Or=R(require("react"),1);function Gt({submodule:e,t:r}){if(!e||typeof e.recorded!="string")return null;let o=e.checkout,t=[];e.pointerMoved&&t.push(r("submodulePointerMoved")),(e.dirty||e.untracked)&&t.push(r("submoduleDirty"));let i=[e.recorded+" \xB7 "+r("submoduleCheckout_"+o),...t].join(" \xB7 ");return Or.default.createElement("span",{className:"vcs-submodule","data-checkout":o,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:i},r("submoduleBadge")," ",e.recorded.slice(0,10),t.length?` \xB7 ${t.join(", ")}`:"")}var ee=R(require("react"),1);function Jt(e){return ee.default.createElement(qo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function qo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,c]=(0,ee.useState)(!1),[m,p]=(0,ee.useState)(null),[n,l]=(0,ee.useState)(""),[u,k]=(0,ee.useState)(0);return(0,ee.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),l(""),o("vcs/svn-identity",{sessionId:e,repositoryId:r},f.signal).then(C=>{f.signal.aborted||p(C)}).catch(C=>{f.signal.aborted||(l(C.message),C.code==="vcs/rediscover-required"&&i())}),()=>f.abort()},[s,e,r,u]),ee.default.createElement("section",null,ee.default.createElement("button",{"aria-expanded":s,onClick:()=>c(f=>!f)},t("svnIdentity")),s&&ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("p",null,t("svnOfflineIdentity")),n?ee.default.createElement("p",{role:"alert"},n," ",ee.default.createElement("button",{onClick:()=>k(f=>f+1)},t("retry"))):m?ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>ee.default.createElement(ee.default.Fragment,{key:f},ee.default.createElement("dt",null,f),ee.default.createElement("dd",null,ee.default.createElement("code",null,m[f]))))),ee.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))):ee.default.createElement("p",{role:"status"},t("loading"))))}function vt(e,r,{now:o=Date.now,schedule:t=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=o()||e-o()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,c=t(()=>{s&&(s=!1,r())},e-o());return()=>{s&&(s=!1,i(c))}}function Fr(e,r=Date.now()){if(!e||typeof e.token!="string"||!/^[a-f0-9]{64}$/.test(e.token)||typeof e.snapshot!="string"||!/^(0|[1-9][0-9]*)$/.test(e.snapshot)||BigInt(e.snapshot)>9223372036854775807n||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=r||e.expiresAt-r>3e5)throw Error("Invalid SVN consent response");return e}var ne=R(require("react"),1);var G=R(require("react"),1);function zt(e){return G.default.createElement(Go,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Go({sessionId:e,repositoryId:r,rpc:o,t,onApproved:i,onRediscover:s}){let[c,m]=(0,G.useState)(!1),[p,n]=(0,G.useState)(null),[l,u]=(0,G.useState)(!1),[k,f]=(0,G.useState)(""),[C,b]=(0,G.useState)(!1),[N,y]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!c)return;let x=new AbortController;return n(null),u(!1),f(""),b(!0),o("vcs/svn-describe",{sessionId:e,repositoryId:r},x.signal).then(v=>{x.signal.aborted||n(v)}).catch(v=>{x.signal.aborted||(f(v.message),v.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[c,e,r,N]);let[w,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!c||!p||p.expiresAt===void 0)return;let x=()=>{n(null),u(!1),h(0),b(!1),f(t("svnOfferExpired"))};try{return vt(p.expiresAt,x)}catch{x()}},[c,p]),(0,G.useEffect)(()=>{if(!w||!c||!p)return;let x=new AbortController;return b(!0),f(""),o("vcs/svn-approve",{sessionId:e,repositoryId:r,offer:p.offer,explicit:!0},x.signal).then(v=>{x.signal.aborted||i(v)}).catch(v=>{x.signal.aborted||(f(v.message),u(!1),v.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[w,c,p]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":c,onClick:()=>{h(0),m(x=>!x)}},t("svnConsentReview")),c&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,t("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{h(0),y(x=>x+1)}},t("retry"))),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(x=>G.default.createElement(G.default.Fragment,{key:x},G.default.createElement("dt",null,x),G.default.createElement("dd",null,G.default.createElement("code",null,p[x]))))),p.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:l,disabled:C,onChange:x=>u(x.target.checked)}),t("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!l,onClick:()=>h(x=>x+1)},t("svnConsentApprove"))):G.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},t("loading"))))}var S=R(require("react"),1);function Tr(e,{since:r,until:o}={}){let t=c=>{if(c==null||c==="")return null;if(typeof c!="string")throw new Error("Invalid SVN history date bound.");let m=c.trim();if(!m)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(m))throw new Error("Invalid SVN history date bound.");return m.slice(0,10)},i=t(r),s=t(o);return!i&&!s?e:Array.isArray(e)?e.filter(c=>{let m=c&&typeof c.date=="string"?c.date.trim():"",p=/^\d{4}-\d{2}-\d{2}/.test(m)?m.slice(0,10):"";return!(!p||i&&p<i||s&&p>s)}):[]}function gt(e,r,o){let t=o?[...e.commits.filter(i=>!r.commits.some(s=>s.id===i.id)),...r.commits]:r.commits;return{...r,windowEnd:o+r.commits.length,commits:t.slice(-200)}}function Vr(e,r,o){let t=gt({commits:(e?.entries||[]).map(i=>({...i,id:i.revision}))},{...r,commits:r.entries.map(i=>({...i,id:i.revision}))},o);return{...r,windowEnd:t.windowEnd,entries:t.commits.map(({id:i,...s})=>s)}}var Jo=9223372036854775807n;function zo(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let r=BigInt(e);if(r>Jo)throw new Error("SVN revision exceeds supported range");return r}function Wt(e){let r=zo(e);return r===0n?null:String(r-1n)}function _t(e){return S.default.createElement(Wo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function Wo({sessionId:e,repositoryId:r,token:o,snapshot:t,rpc:i,t:s,onRediscover:c}){let[m,p]=(0,S.useState)({cursor:t,offset:0,trail:[]}),[n,l]=(0,S.useState)(null),[u,k]=(0,S.useState)(null),[f,C]=(0,S.useState)(!0),[b,N]=(0,S.useState)(""),[y,w]=(0,S.useState)(0),[h,x]=(0,S.useState)(""),[v,H]=(0,S.useState)(""),{cursor:L,offset:g}=m;(0,S.useEffect)(()=>{let A=new AbortController;return C(!0),N(""),i("vcs/svn-log",{sessionId:e,repositoryId:r,token:o,snapshot:t,cursor:L,limit:50},A.signal).then(O=>{if(!A.signal.aborted){let D=Vr(n,O,g);l(D);let ce=new Set((n?.entries||[]).filter(de=>!D.entries.some(Fe=>Fe.revision===de.revision)).map(de=>de.revision));k(de=>ce.has(de)?null:de)}}).catch(O=>{A.signal.aborted||(N(O.message),O.code==="vcs/rediscover-required"&&c())}).finally(()=>{A.signal.aborted||C(!1)}),()=>A.abort()},[L,g,y]);let B=()=>p(A=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...A.trail,{cursor:L,offset:g}].slice(-200)})),q=()=>{let A=m.trail.at(-1);A&&(k(null),l(null),p({...A,trail:m.trail.slice(0,-1)}))},se=n?.entries||[],ue="";try{se=Tr(se,{since:h,until:v})}catch(A){ue=A.message}return S.default.createElement("section",{className:"vcs-history vcs-history-browser vcs-svn-history","aria-label":s("history"),"aria-busy":f},S.default.createElement("div",{className:"vcs-history-list"},S.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",t),S.default.createElement("details",{className:"vcs-help"},S.default.createElement("summary",null,s("historySearchHelp")),S.default.createElement("p",null,s("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((A,O)=>S.default.createElement("label",{key:A},s(A)," ",S.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(A),value:O?v:h,onChange:D=>{k(null),O?H(D.target.value):x(D.target.value)}})))),ue&&S.default.createElement("p",{role:"alert"},ue),!!n?.entries.length&&S.default.createElement("p",{role:"status"},s("historyWindow"),": ",n.windowEnd-n.entries.length,"\u2013",n.windowEnd),S.default.createElement("ol",{className:"vcs-commit-list"},se.map(A=>S.default.createElement("li",{key:A.revision},S.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===A.revision,onClick:()=>k(A.revision)},S.default.createElement("span",{className:"vcs-commit-subject"},"r",A.revision," \xB7 ",A.message.split(/\r?\n/)[0])),S.default.createElement("div",{className:"vcs-commit-meta"},S.default.createElement("code",null,"r",A.revision)," \xB7 ",A.author," \xB7 ",S.default.createElement("time",{dateTime:A.date},A.date))))),f&&S.default.createElement("p",{role:"status"},s("loading")),b&&S.default.createElement("p",{role:"alert"},b," ",S.default.createElement("button",{onClick:()=>w(A=>A+1)},s("retry"))),!f&&!b&&!n?.entries.length&&S.default.createElement("p",null,s("historyEmpty")),!!n?.entries.length&&!se.length&&S.default.createElement("p",{role:"status"},s("historyNoMatch")),!!m.trail.length&&S.default.createElement("button",{disabled:f,onClick:q},s("historyBack")),!b&&n?.nextRevision!=null&&S.default.createElement("button",{disabled:f,onClick:B},s("historyMore"))),S.default.createElement("div",{className:"vcs-history-details"},u&&S.default.createElement(_o,{key:u,sessionId:e,repositoryId:r,token:o,snapshot:t,rpc:i,t:s,onRediscover:c,revision:u})))}function _o({sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:c,onRediscover:m}){let[p,n]=(0,S.useState)(null),[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)(""),[C,b]=(0,S.useState)(0),[N,y]=(0,S.useState)(""),[w,h]=(0,S.useState)(!1);(0,S.useEffect)(()=>{let v=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i},v.signal).then(H=>{v.signal.aborted||n(H)}).catch(H=>{v.signal.aborted||(f(H.message),H.code==="vcs/rediscover-required"&&m())}),()=>v.abort()},[C]);let x=(p?.changes||[]).filter(v=>v.path.toLocaleLowerCase().includes(N.toLocaleLowerCase()));return S.default.createElement("section",{className:"vcs-commit-details"+(w?" vcs-commit-focused":""),"aria-label":c("commitDetails")},k?S.default.createElement("p",{role:"alert"},k," ",S.default.createElement("button",{onClick:()=>b(v=>v+1)},c("retry"))):p?S.default.createElement("div",{className:"vcs-commit-sidebar"},S.default.createElement("header",{className:"vcs-commit-summary"},S.default.createElement("h3",null,p.message?.split(/\r?\n/)[0]||"r"+i),S.default.createElement("code",{className:"vcs-commit-oid"},"r",i),S.default.createElement("p",null,p.author," \xB7 ",p.date),S.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},p.message),S.default.createElement("p",null,Wt(i)===null?c("commitRoot"):"r"+Wt(i)," \u2192 r",i)),S.default.createElement("aside",{className:"vcs-commit-picker"},S.default.createElement("label",null,c("commitFileSearch")," ",S.default.createElement("input",{"aria-label":c("commitFileSearch"),value:N,onChange:v=>{y(v.target.value),u(null)}})),S.default.createElement("span",null,x.length," / ",p.changes.length),S.default.createElement("ul",{className:"vcs-commit-files"},x.map(v=>S.default.createElement("li",{key:v.id},S.default.createElement("button",{disabled:v.kind!=="file","aria-pressed":l?.id===v.id&&l.mode==="compare",onClick:()=>u({id:v.id,mode:"compare"})},S.default.createElement("span",{className:"vcs-file-status"},v.action," \xB7 "),S.default.createElement("span",{className:"vcs-file-path",title:v.path},v.path,v.copyFromPath&&S.default.createElement("small",null,"\u2190 ",v.copyFromPath," @r",v.copyFromRevision))),v.kind==="file"&&S.default.createElement("div",{className:"vcs-svn-file-actions"},S.default.createElement("button",{onClick:()=>u({id:v.id,mode:"trace"})},c("fileHistory")),v.copyFromPath&&v.copyFromRevision&&!v.copySourceOutsideScope&&S.default.createElement("button",{onClick:()=>u({id:v.id,mode:"copytrace"})},c("svnCopyHistory")," \xB7 ",v.copyFromPath," @r",v.copyFromRevision),v.copySourceOutsideScope&&S.default.createElement("span",null,c("svnCopyOutside")))))),!!p.changes.length&&!x.length&&S.default.createElement("p",{role:"status"},c("emptySearch")),!p.changes.length&&S.default.createElement("p",null,c("commitNoChanges")))):S.default.createElement("p",{role:"status"},c("loading")),S.default.createElement("div",{className:"vcs-commit-review"},S.default.createElement("div",{className:"vcs-commit-comparison","aria-label":c("comparisonContext")},l&&S.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":w,onClick:()=>h(v=>!v)},c(w?"comparisonRestore":"comparisonFocus")),l?S.default.createElement(Ko,{key:JSON.stringify(l),sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:c,onRediscover:m,...l}):S.default.createElement("p",{role:"status"},c("pick")))))}function Ko({sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:c,onRediscover:m,id:p,mode:n}){let[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)({cursor:null,trail:[]}),[C,b]=(0,S.useState)(""),[N,y]=(0,S.useState)(0),{cursor:w,trail:h}=k;return(0,S.useEffect)(()=>{let x=new AbortController;return u(null),b(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,id:p,...w===null?{}:{cursor:w}},x.signal).then(v=>{x.signal.aborted||u(v)}).catch(v=>{x.signal.aborted||(b(v.message),v.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[w,N]),C?S.default.createElement("p",{role:"alert"},C," ",S.default.createElement("button",{onClick:()=>y(x=>x+1)},c("retry"))):l?n==="compare"?S.default.createElement("section",{className:"vcs-history-comparison"},S.default.createElement("header",{className:"vcs-comparison-heading"},S.default.createElement("h4",null,l.path),S.default.createElement("p",null,l.left?.label," \u2194 ",l.right?.label),l.notice&&S.default.createElement("p",{role:"status"},l.notice)),l.binary?S.default.createElement("p",null,c("binary")):S.default.createElement(ye,{comparison:l,identity:JSON.stringify([e,r,t,i,p]),t:c})):S.default.createElement("section",null,S.default.createElement("p",null,c(n==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",l.path," \xB7 peg r",l.pegRevision),S.default.createElement("ol",null,l.entries.map(x=>S.default.createElement("li",{key:x.revision},"r",x.revision," \xB7 ",x.message))),!!h.length&&S.default.createElement("button",{onClick:()=>f({cursor:h.at(-1),trail:h.slice(0,-1)})},c("historyBack")),l.nextRevision!==null&&S.default.createElement("button",{onClick:()=>f({cursor:l.nextRevision,trail:[...h,w].slice(-200)})},c("historyMore"))):S.default.createElement("p",{role:"status"},c("loading"))}function Kt(e){return ne.default.createElement(Yo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Yo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,c]=(0,ne.useState)(null),[m,p]=(0,ne.useState)(!1),[n,l]=(0,ne.useState)(""),[u,k]=(0,ne.useState)(0);(0,ne.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>o("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token})).catch(()=>{})}},[s,e,r]),(0,ne.useEffect)(()=>{if(s)try{return vt(s.expiresAt,()=>{c(null),k(0),p(!1),l(t("svnExpired"))})}catch{c(null),l(t("svnExpired"))}},[s]),(0,ne.useEffect)(()=>{if(!u||!s)return;let b=new AbortController;return p(!0),l(""),o("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token},b.signal).then(()=>{b.signal.aborted||c(null)}).catch(N=>{b.signal.aborted||(l(N.message),N.code==="vcs/rediscover-required"&&i())}).finally(()=>{b.signal.aborted||p(!1)}),()=>b.abort()},[u,s]);let f=b=>{try{Fr(b),l(""),k(0),c(b)}catch(N){l(N.message)}},C=async(...b)=>{try{return await o(...b)}catch(N){throw N.code==="vcs/svn-consent-required"&&!b[2]?.aborted&&(c(null),k(0),l(t("svnExpired"))),N}};return ne.default.createElement("section",{className:"vcs-svn-remote"},!s&&n&&ne.default.createElement("p",{role:"status"},n),s?ne.default.createElement(ne.default.Fragment,null,ne.default.createElement("p",null,t("svnGrantScope")),ne.default.createElement("button",{disabled:m,onClick:()=>k(b=>b+1)},t("svnRevoke")),n&&ne.default.createElement("p",{role:"alert"},n),!m&&ne.default.createElement(_t,{sessionId:e,repositoryId:r,t,onRediscover:i,rpc:C,token:s.token,snapshot:s.snapshot})):ne.default.createElement(zt,{sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i,onApproved:f}))}var E=R(require("react"),1);function jr(e){let r=new Map;for(let o of e){let t=r.get(o.commit);t||(t={names:[],hidden:0},r.set(o.commit,t)),t.names.length<3?t.names.push(o.name):t.hidden++}return r}var T=R(require("react"),1);var U=R(require("react"),1);var Q=R(require("react"),1);var Z=R(require("react"),1);function Yt(e){return Z.default.createElement($o,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function $o({sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:c}){let[m,p]=(0,Z.useState)(!1),[n,l]=(0,Z.useState)([0]),[u,k]=(0,Z.useState)(null),[f,C]=(0,Z.useState)(""),[b,N]=(0,Z.useState)(0),y=n.at(-1);(0,Z.useEffect)(()=>{if(!m)return;let h=new AbortController;return k(null),C(""),i("vcs/tree-segment",{sessionId:e,repositoryId:r,commit:o,path:t,offset:y},h.signal).then(x=>{h.signal.aborted||k(x)}).catch(x=>{h.signal.aborted||(C(x.message),x.code==="vcs/rediscover-required"&&c())}),()=>h.abort()},[m,y,e,r,o,t,b]);let w=(0,Z.useMemo)(()=>u?{path:t,left:{label:o,text:u.text},right:{label:o,text:u.text}}:null,[u,t,o]);return Z.default.createElement("section",null,Z.default.createElement("button",{"aria-expanded":m,onClick:()=>p(h=>!h)},s("segments")),m&&Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,s("segmentScope")),f?Z.default.createElement("p",{role:"alert"},f," ",Z.default.createElement("button",{onClick:()=>N(h=>h+1)},s("retry"))):u?Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,s("segmentBytes"),": ",u.offset,"\u2013",u.endOffset," / ",u.totalBytes," \xB7 ",Z.default.createElement("code",null,u.oid)),Z.default.createElement("button",{disabled:n.length===1,onClick:()=>l(h=>h.slice(0,-1))},s("previous")),Z.default.createElement("button",{disabled:u.nextOffset===null,onClick:()=>l(h=>[...h,u.nextOffset])},s("next")),Z.default.createElement(ye,{single:!0,comparison:w,identity:JSON.stringify([e,r,o,t,y]),t:s})):Z.default.createElement("p",{role:"status"},s("loading"))))}var V=R(require("react"),1);function Qo({sessionId:e,repositoryId:r,commit:o,path:t,follow:i,since:s,until:c,rpc:m,t:p,onRediscover:n,onSelectCommit:l}){let[u,k]=(0,V.useState)({commits:[],nextOffset:null}),[f,C]=(0,V.useState)(0),[b,N]=(0,V.useState)(0),[y,w]=(0,V.useState)(!0),[h,x]=(0,V.useState)("");(0,V.useEffect)(()=>{let H=new AbortController;return w(!0),x(""),m("vcs/tree-history",{sessionId:e,repositoryId:r,commit:o,path:t,offset:f,limit:50,follow:i,...s?{since:s}:{},...c?{until:c}:{}},H.signal).then(L=>{H.signal.aborted||k(g=>({...L,commits:f?[...g.commits,...L.commits]:L.commits}))}).catch(L=>{H.signal.aborted||(x(L.message),L.code==="vcs/rediscover-required"&&n())}).finally(()=>{H.signal.aborted||w(!1)}),()=>H.abort()},[e,r,o,t,f,b,i,s,c]);let v=H=>p(H.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":H.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":H.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return V.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":y},V.default.createElement("p",null,p("pathHistoryScope")),V.default.createElement("p",{style:{overflowWrap:"anywhere"}},V.default.createElement("code",null,u.path||t)," \xB7 ",V.default.createElement("code",null,o),u.followsRenames!==void 0&&V.default.createElement(V.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),V.default.createElement("ol",null,u.commits.map(H=>V.default.createElement("li",{key:H.id},V.default.createElement("code",{title:H.id},H.id.slice(0,10))," \xB7 ",l?V.default.createElement("button",{onClick:()=>l(H.id,H.path||t)},H.subject):H.subject,V.default.createElement("div",null,H.boundary&&V.default.createElement("span",null,v(H)," "),H.path&&V.default.createElement("code",null,H.oldPath?H.oldPath+" \u2192 ":"",H.path)," ",H.similarity!==void 0&&V.default.createElement("span",null,p("fileHistorySimilarity"),": ",H.similarity,"% \xB7 "),H.author," \xB7 ",V.default.createElement("time",{dateTime:H.date},H.date))))),y&&V.default.createElement("p",{role:"status"},p("loading")),h&&V.default.createElement("p",{role:"alert"},h," ",V.default.createElement("button",{onClick:()=>N(H=>H+1)},p("retry"))),!y&&!h&&!u.commits.length&&V.default.createElement("p",null,p("historyEmpty")),u.truncated&&V.default.createElement("p",{role:"status"},p("historyLimit")),!h&&u.nextOffset!==null&&V.default.createElement("button",{disabled:y,onClick:()=>C(u.nextOffset)},p("historyMore")))}function $t(e){let[r,o]=(0,V.useState)(!1),[t,i]=(0,V.useState)(!1),[s,c]=(0,V.useState)(""),[m,p]=(0,V.useState)("");return V.default.createElement("div",null,V.default.createElement("button",{"aria-expanded":r,onClick:()=>o(n=>!n)},e.t("pathHistory")),r&&V.default.createElement(V.default.Fragment,null,V.default.createElement("label",null,V.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>i(n.target.checked)}),e.t("fileHistoryFollow")),V.default.createElement("p",null,e.t("pathHistoryFollowScope")),V.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>V.default.createElement("label",{key:n},e.t(n)," ",V.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),V.default.createElement(Qo,{key:JSON.stringify([t,s.trim(),m.trim()]),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}function Re({sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:c,onClose:m,onSelectCommit:p,line:n=null}){let[l,u]=(0,Q.useState)(null),[k,f]=(0,Q.useState)(""),[C,b]=(0,Q.useState)(0);(0,Q.useEffect)(()=>{let y=new AbortController;return u(null),f(""),i("vcs/tree-file",{sessionId:e,repositoryId:r,commit:o,path:t},y.signal).then(w=>{y.signal.aborted||u(w)}).catch(w=>{y.signal.aborted||(f(w.message),w.code==="vcs/rediscover-required"&&c())}),()=>y.abort()},[e,r,o,t,C]);let N=(0,Q.useMemo)(()=>l?{path:t,left:{label:o,text:l.text||""},right:{label:o,text:l.text||""}}:null,[l,t,o]);return Q.default.createElement("section",{"aria-label":s("treePreview")},Q.default.createElement("h4",null,t),Q.default.createElement("button",{onClick:m},s("treeClose")),Q.default.createElement("p",null,Q.default.createElement("code",null,o)),k?Q.default.createElement("p",{role:"alert"},k," ",Q.default.createElement("button",{onClick:()=>b(y=>y+1)},s("retry"))):l?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,Q.default.createElement("code",null,l.oid)," \xB7 ",s("encoding"),": ",l.encoding||"\u2014"),n&&Q.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,!l.text||n>l.text.split(`
179
+ `;function mt(e,r){return async(o,t,i)=>{let s=await e.rpc.call("/vcs-rpc",o,t,i);if(!s.ok){let c=new Error(s.error?.message||String(s.error||r()));throw c.code=s.error?.code,c}return s.value}}function It(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let r=0,o=[];function t(){for(;r<e&&o.length;){let i=o.shift();if(i.signal?.removeEventListener("abort",i.abort),i.signal?.aborted){i.reject(new Error("Aborted"));continue}r++,Promise.resolve().then(()=>{if(i.signal?.aborted)throw new Error("Aborted");return i.run()}).then(i.resolve,i.reject).finally(()=>{r--,t()})}}return(i,s)=>new Promise((c,m)=>{let p={run:i,signal:s,resolve:c,reject:m,abort:null};if(p.abort=()=>{let n=o.indexOf(p);n>=0&&(o.splice(n,1),m(new Error("Aborted")))},s?.aborted){m(new Error("Aborted"));return}s?.addEventListener("abort",p.abort,{once:!0}),o.push(p),t()})}var ae=R(require("react"),1);function Pr(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Lr(e="",r=""){let o=Pr(e),t=Pr(r),i=0;for(;i<o.length&&i<t.length&&o[i]===t[i];)i++;let s=0;for(;s<o.length-i&&s<t.length-i&&o[o.length-s-1]===t[t.length-s-1];)s++;let c=o.length-s,m=t.length-s,p=c-i,n=m-i,l=p&&n?(p+1)*(n+1):0,u=l>2e5,k=[],f=0;function C(b,N){f++,!(k.length>=2e3)&&k.push({left:b===null?null:{number:b+1,text:o[b]},right:N===null?null:{number:N+1,text:t[N]},kind:b===null?"insert":N===null?"delete":o[b]===t[N]?"equal":"replace"})}for(let b=0;b<i;b++)C(b,b);if(u||!p||!n)for(let b=0;b<Math.max(p,n);b++)C(b<p?i+b:null,b<n?i+b:null);else{let b=n+1,N=new Uint32Array(l);for(let h=p-1;h>=0;h--)for(let x=n-1;x>=0;x--)N[h*b+x]=o[i+h]===t[i+x]?N[(h+1)*b+x+1]+1:Math.max(N[(h+1)*b+x],N[h*b+x+1]);let y=0,w=0;for(;y<p||w<n;)y<p&&w<n&&o[i+y]===t[i+w]?C(i+y++,i+w++):y<p&&(w===n||N[(y+1)*b+w]>=N[y*b+w+1])?C(i+y++,null):C(null,i+w++)}for(let b=0;b<s;b++)C(c+b,m+b);return{rows:k,approximate:u,truncated:f>k.length,totalRows:f,omittedRows:f-k.length,leftLineCount:o.length,rightLineCount:t.length,lcsCells:u?0:l}}var Fo={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."},Ut={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},To={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Vo={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},jo={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Xe({comparison:e,labels:r={}}){let o=e?.left?.text??"",t=e?.right?.text??"",i=(0,ae.useMemo)(()=>Lr(o,t),[o,t]),s=m=>r[m]??Fo[m],c=(m,p,n)=>{let l=m&&n!=="equal";return ae.default.createElement("td",{style:{...Ut,background:l?p==="left"?"#d6454520":"#259b4920":void 0}},ae.default.createElement("div",{style:To},ae.default.createElement("span",{style:Vo},m?.number??""),ae.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},l?p==="left"?"\u2212":"+":""),ae.default.createElement("pre",{style:jo},m?.text??"")))};return ae.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&&ae.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),i.truncated&&ae.default.createElement("div",{role:"status",style:{padding:8}},s("truncated")," (",2e3," / ",i.totalRows,")"),ae.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},ae.default.createElement("thead",null,ae.default.createElement("tr",null,ae.default.createElement("th",{scope:"col",style:{...Ut,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),ae.default.createElement("th",{scope:"col",style:{...Ut,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),ae.default.createElement("tbody",null,i.rows.map((m,p)=>ae.default.createElement("tr",{key:p,"data-kind":m.kind},c(m.left,"left",m.kind),c(m.right,"right",m.kind))))),!i.rows.length&&ae.default.createElement("p",{style:{padding:8}},s("empty")))}var K=R(require("react"),1);function Dr(e,{width:r,height:o,signal:t,timeoutMs:i=1e4,createURL:s=p=>URL.createObjectURL(p),revokeURL:c=p=>URL.revokeObjectURL(p),createImage:m=()=>new Image}={}){return new Promise((p,n)=>{if(t?.aborted){n(t.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(r)||!Number.isInteger(o)||r<1||o<1||r>8192||o>8192||r*o>16e6||!Number.isFinite(i)||i<=0){n(new Error("Invalid image preview"));return}let l,u,k,f=!1,C=!1,b=()=>{C||(C=!0,u&&(u.src=""),l&&c(l))},N=()=>{clearTimeout(k),t?.removeEventListener("abort",w)},y=h=>{f||(f=!0,N(),b(),n(h))},w=()=>y(t.reason||new Error("Image cancelled"));try{l=s(e),u=m(),t?.addEventListener("abort",w,{once:!0}),k=setTimeout(()=>y(new Error("Image decode timed out")),i),u.src=l,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){w();return}if(u.naturalWidth!==r||u.naturalHeight!==o){y(new Error("Image dimensions mismatch"));return}f=!0,N(),p({url:l,dispose:b})}},y)}catch(h){y(h)}})}function Io({side:e,sessionId:r,repositoryId:o,commit:t,parentIndex:i,base:s,target:c,workspace:m=!1,mode:p,id:n,rpc:l,t:u,onRediscover:k}){let[f,C]=(0,K.useState)(null),[b,N]=(0,K.useState)(""),[y,w]=(0,K.useState)(0);return(0,K.useEffect)(()=>{let h=new AbortController,x;return C(null),N(""),(async()=>{let v=await l(m?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",m?{sessionId:r,repositoryId:o,mode:p,id:n,side:e}:s?{sessionId:r,repositoryId:o,base:s,target:c,id:n,side:e}:{sessionId:r,repositoryId:o,commit:t,parentIndex:i,id:n,side:e},h.signal);if(h.signal.aborted)return;if(v.absent){C(v);return}if(!["image/png","image/jpeg","image/webp"].includes(v.mime)||typeof v.base64!="string"||v.base64.length>2796204||!Number.isInteger(v.bytes)||v.bytes<1||v.bytes>2097152)throw Error(u("imageInvalid"));let H=atob(v.base64);if(H.length!==v.bytes)throw Error(u("imageInvalid"));let L=new Blob([Uint8Array.from(H,g=>g.charCodeAt(0))],{type:v.mime});if(x=await Dr(L,{width:v.width,height:v.height,signal:h.signal}),h.signal.aborted){x.dispose();return}C({...v,url:x.url})})().catch(v=>{h.signal.aborted||(N(v.message),v.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),x?.dispose()}},[e,r,o,t,i,s,c,m,p,n,y]),K.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},K.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),b?K.default.createElement("p",{role:"alert"},b," ",K.default.createElement("button",{onClick:()=>w(h=>h+1)},u("retry"))):f?K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,K.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?K.default.createElement("p",null,u("imageAbsent")):K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),K.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&K.default.createElement("p",null,u("imageMetadata")))):K.default.createElement("p",{role:"status"},u("loading")))}function Ze(e){let[r,o]=(0,K.useState)(!1);return K.default.createElement("div",null,K.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("imageCompare")),r&&K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,e.t("imageScope")),K.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(t=>K.default.createElement(Io,{key:t,...e,side:t})))))}var z=R(require("react"),1);var oe=R(require("react"),1);function ft(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var ge=require("react");function Mr({load:e,node:r,comparison:o,key:t,single:i=!1,onReady:s=()=>{},onError:c=()=>{},onComputation:m=()=>{}}){let p=new AbortController,n,l=!1,u=()=>{let f=n;n=void 0,f?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),e(p.signal))).then(f=>{l||(n=f.createDiff(r,{single:i,onComputation:C=>{l||m(C)}}),n.setContent(o,t),l||s(n))}).catch(f=>{try{u()}finally{l||c(f)}}),dispose(){l||(l=!0,p.abort(),u())}}}async function ht(e,{signal:r,fetcher:o=fetch,importer:t=i=>import(i)}={}){let i=await o(e,{credentials:"same-origin",cache:"no-cache",signal:r});if(!i.ok)throw new Error("Editor resource HTTP "+i.status+" ("+e+"). "+(i.status===401?"Refresh the authenticated DSH page.":i.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let s=i.headers.get("content-type")||"";if(!/(?:java|ecma)script/i.test(s))throw new Error("Editor resource returned "+(s||"no Content-Type")+" instead of JavaScript.");return await i.arrayBuffer(),r?.throwIfAborted(),t(e)}var Ge="0.4.7";function Br({comparison:e,identity:r,enabled:o,single:t,line:i,sideBySide:s,ignoreWhitespace:c,wrap:m}){let p=(0,ge.useRef)(null),n=(0,ge.useRef)(null),[l,u]=(0,ge.useState)(!1),[k,f]=(0,ge.useState)(""),[C,b]=(0,ge.useState)("pending");return(0,ge.useEffect)(()=>{if(u(!1),b("pending"),f(""),!o)return;let N=h=>new URL("vcs-assets/"+h,document.baseURI).href,y=document.createElement("link");y.rel="stylesheet",y.href=N("editor.css"),document.head.appendChild(y);let w=Mr({node:p.current,comparison:e,key:r,single:t,load:h=>ht(N("editor.js")+"?v="+encodeURIComponent(Ge)+"&retry=0",{signal:h}),onReady:h=>{n.current=h,u(!0)},onError:h=>f(h.message),onComputation:b});return()=>{n.current=null;try{w.dispose()}finally{y.remove()}}},[o,e,r,t]),(0,ge.useEffect)(()=>{l&&t&&i&&n.current?.revealLine(i)},[l,t,i]),(0,ge.useEffect)(()=>{l&&n.current?.options({sideBySide:s,ignoreWhitespace:c,wrap:m})},[l,s,c,m]),{node:p,viewer:n,ready:l,error:k,computation:C}}function ye({comparison:e,identity:r,t:o,single:t=!1,line:i=null}){let[s,c]=(0,oe.useState)(!0),[m,p]=(0,oe.useState)(!1),[n,l]=(0,oe.useState)(!1),[u,k]=(0,oe.useState)(!0),{node:f,viewer:C,ready:b,error:N,computation:y}=Br({comparison:e,identity:r,enabled:u,single:t,line:i,sideBySide:s,ignoreWhitespace:m,wrap:n});return oe.default.createElement("div",{className:"vcs-history-viewer"},oe.default.createElement("div",{className:"vcs-history-viewer-toolbar"},oe.default.createElement("button",{"aria-pressed":u,onClick:()=>k(w=>!w)},o(u?"historyBasic":"historyAdvanced")),b&&!t&&oe.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},oe.default.createElement("button",{"aria-pressed":s,onClick:()=>c(w=>!w)},o(s?"side":"inline")),oe.default.createElement("label",null,oe.default.createElement("input",{type:"checkbox",checked:m,onChange:w=>p(w.target.checked)}),o("whitespace")),oe.default.createElement("label",null,oe.default.createElement("input",{type:"checkbox",checked:n,onChange:w=>l(w.target.checked)}),o("wrap")),oe.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},o("previous")),oe.default.createElement("button",{onClick:()=>C.current?.navigate("next")},o("next")))),u&&!b&&!N&&oe.default.createElement("p",{role:"status"},o("loading")),e.large&&!t&&b&&oe.default.createElement("p",{role:"status"},o(y==="complete"?"diffComplete":y==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!b&&oe.default.createElement("p",{role:"status"},o("largeFallback")),N&&oe.default.createElement("p",{role:"status"},o("fallback")," ",N),oe.default.createElement("div",{key:"editor-host",className:"vcs-history-editor-host",style:{position:"relative",height:"var(--vcs-history-editor-height, 360px)"}},oe.default.createElement("div",{ref:f,style:{position:"absolute",inset:0,visibility:b?"visible":"hidden"},"aria-hidden":!b}),!b&&oe.default.createElement(Xe,{comparison:e,labels:ft(o)})))}function qt({sessionId:e,repositoryId:r,mode:o,id:t,rpc:i,t:s,onRediscover:c}){let[m,p]=(0,z.useState)(null),[n,l]=(0,z.useState)(""),[u,k]=(0,z.useState)(0),[f,C]=(0,z.useState)(1),[b,N]=(0,z.useState)(3);(0,z.useEffect)(()=>{let g=new AbortController;return p(null),l(""),i("vcs/conflict-stages",{sessionId:e,repositoryId:r,mode:o,id:t},g.signal).then(B=>{g.signal.aborted||p(B)}).catch(B=>{g.signal.aborted||(l(B.message),B.code==="vcs/rediscover-required"&&c())}),()=>g.abort()},[e,r,o,t,u]);let y={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},w=s("conflictStageMissing"),h=y[f],x=y[b],v=(0,z.useMemo)(()=>{if(!m)return null;let g=A=>m.stages.find(O=>O.stage===A),B=A=>{let O=g(A);return!O||!O.present?{text:"",label:y[A]}:{text:O.text,label:y[A],...O.binary?{binary:!0}:{},...O.encoding?{encoding:O.encoding}:{},...O.notice?{notice:O.notice}:{}}},q=B(f),se=B(b),ue=[q.notice,se.notice].filter(Boolean);return g(f)?.present&&g(b)?.present||ue.push(w),{path:m.path,left:q,right:se,binary:!!(q.binary||se.binary),...ue.length?{notice:[...new Set(ue)].join(" \xB7 ")}:{}}},[m,f,b,h,x,w]);if(n)return z.default.createElement("section",{"aria-label":s("conflictStages")},z.default.createElement("h4",null,s("conflictStages")),z.default.createElement("p",{role:"alert"},n," ",z.default.createElement("button",{onClick:()=>k(g=>g+1)},s("retry"))));if(!m||!v)return z.default.createElement("section",{"aria-label":s("conflictStages")},z.default.createElement("h4",null,s("conflictStages")),z.default.createElement("p",{role:"status"},s("loading")));let H=g=>m.stages.find(B=>B.stage===g),L=v.binary&&!v.left.text&&!v.right.text;return z.default.createElement("section",{"aria-label":s("conflictStages")},z.default.createElement("h4",null,s("conflictStages")),z.default.createElement("p",null,s("conflictStagesScope")),z.default.createElement("ul",null,[1,2,3].map(g=>z.default.createElement("li",{key:g},z.default.createElement("code",null,y[g])," \xB7 ",H(g)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),H(g)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),H(g)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),H(g)?.present&&H(g)?.notice&&" \xB7 "+H(g).notice))),z.default.createElement("label",null,s("conflictStageLeft")," ",z.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:g=>C(Number(g.target.value))},[1,2,3].map(g=>z.default.createElement("option",{key:g,value:g},y[g])))),z.default.createElement("label",null,s("conflictStageRight")," ",z.default.createElement("select",{"aria-label":s("conflictStageRight"),value:b,onChange:g=>N(Number(g.target.value))},[1,2,3].map(g=>z.default.createElement("option",{key:g,value:g},y[g])))),v.notice&&z.default.createElement("p",{role:"status"},v.notice),L?z.default.createElement("p",{role:"status"},s("binary")):z.default.createElement(ye,{key:JSON.stringify([t,f,b,m.snapshot]),comparison:v,identity:JSON.stringify([e,r,o,t,f,b,m.snapshot]),t:s}))}var Or=R(require("react"),1);function Gt({submodule:e,t:r}){if(!e||typeof e.recorded!="string")return null;let o=e.checkout,t=[];e.pointerMoved&&t.push(r("submodulePointerMoved")),(e.dirty||e.untracked)&&t.push(r("submoduleDirty"));let i=[e.recorded+" \xB7 "+r("submoduleCheckout_"+o),...t].join(" \xB7 ");return Or.default.createElement("span",{className:"vcs-submodule","data-checkout":o,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:i},r("submoduleBadge")," ",e.recorded.slice(0,10),t.length?` \xB7 ${t.join(", ")}`:"")}var ee=R(require("react"),1);function Jt(e){return ee.default.createElement(qo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function qo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,c]=(0,ee.useState)(!1),[m,p]=(0,ee.useState)(null),[n,l]=(0,ee.useState)(""),[u,k]=(0,ee.useState)(0);return(0,ee.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),l(""),o("vcs/svn-identity",{sessionId:e,repositoryId:r},f.signal).then(C=>{f.signal.aborted||p(C)}).catch(C=>{f.signal.aborted||(l(C.message),C.code==="vcs/rediscover-required"&&i())}),()=>f.abort()},[s,e,r,u]),ee.default.createElement("section",null,ee.default.createElement("button",{"aria-expanded":s,onClick:()=>c(f=>!f)},t("svnIdentity")),s&&ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("p",null,t("svnOfflineIdentity")),n?ee.default.createElement("p",{role:"alert"},n," ",ee.default.createElement("button",{onClick:()=>k(f=>f+1)},t("retry"))):m?ee.default.createElement(ee.default.Fragment,null,ee.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>ee.default.createElement(ee.default.Fragment,{key:f},ee.default.createElement("dt",null,f),ee.default.createElement("dd",null,ee.default.createElement("code",null,m[f]))))),ee.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))):ee.default.createElement("p",{role:"status"},t("loading"))))}function vt(e,r,{now:o=Date.now,schedule:t=setTimeout,cancel:i=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=o()||e-o()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,c=t(()=>{s&&(s=!1,r())},e-o());return()=>{s&&(s=!1,i(c))}}function Fr(e,r=Date.now()){if(!e||typeof e.token!="string"||!/^[a-f0-9]{64}$/.test(e.token)||typeof e.snapshot!="string"||!/^(0|[1-9][0-9]*)$/.test(e.snapshot)||BigInt(e.snapshot)>9223372036854775807n||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=r||e.expiresAt-r>3e5)throw Error("Invalid SVN consent response");return e}var ne=R(require("react"),1);var G=R(require("react"),1);function zt(e){return G.default.createElement(Go,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Go({sessionId:e,repositoryId:r,rpc:o,t,onApproved:i,onRediscover:s}){let[c,m]=(0,G.useState)(!1),[p,n]=(0,G.useState)(null),[l,u]=(0,G.useState)(!1),[k,f]=(0,G.useState)(""),[C,b]=(0,G.useState)(!1),[N,y]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!c)return;let x=new AbortController;return n(null),u(!1),f(""),b(!0),o("vcs/svn-describe",{sessionId:e,repositoryId:r},x.signal).then(v=>{x.signal.aborted||n(v)}).catch(v=>{x.signal.aborted||(f(v.message),v.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[c,e,r,N]);let[w,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!c||!p||p.expiresAt===void 0)return;let x=()=>{n(null),u(!1),h(0),b(!1),f(t("svnOfferExpired"))};try{return vt(p.expiresAt,x)}catch{x()}},[c,p]),(0,G.useEffect)(()=>{if(!w||!c||!p)return;let x=new AbortController;return b(!0),f(""),o("vcs/svn-approve",{sessionId:e,repositoryId:r,offer:p.offer,explicit:!0},x.signal).then(v=>{x.signal.aborted||i(v)}).catch(v=>{x.signal.aborted||(f(v.message),u(!1),v.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[w,c,p]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":c,onClick:()=>{h(0),m(x=>!x)}},t("svnConsentReview")),c&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,t("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{h(0),y(x=>x+1)}},t("retry"))),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(x=>G.default.createElement(G.default.Fragment,{key:x},G.default.createElement("dt",null,x),G.default.createElement("dd",null,G.default.createElement("code",null,p[x]))))),p.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:l,disabled:C,onChange:x=>u(x.target.checked)}),t("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!l,onClick:()=>h(x=>x+1)},t("svnConsentApprove"))):G.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},t("loading"))))}var S=R(require("react"),1);function Tr(e,{since:r,until:o}={}){let t=c=>{if(c==null||c==="")return null;if(typeof c!="string")throw new Error("Invalid SVN history date bound.");let m=c.trim();if(!m)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(m))throw new Error("Invalid SVN history date bound.");return m.slice(0,10)},i=t(r),s=t(o);return!i&&!s?e:Array.isArray(e)?e.filter(c=>{let m=c&&typeof c.date=="string"?c.date.trim():"",p=/^\d{4}-\d{2}-\d{2}/.test(m)?m.slice(0,10):"";return!(!p||i&&p<i||s&&p>s)}):[]}function gt(e,r,o){let t=o?[...e.commits.filter(i=>!r.commits.some(s=>s.id===i.id)),...r.commits]:r.commits;return{...r,windowEnd:o+r.commits.length,commits:t.slice(-200)}}function Vr(e,r,o){let t=gt({commits:(e?.entries||[]).map(i=>({...i,id:i.revision}))},{...r,commits:r.entries.map(i=>({...i,id:i.revision}))},o);return{...r,windowEnd:t.windowEnd,entries:t.commits.map(({id:i,...s})=>s)}}var Jo=9223372036854775807n;function zo(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let r=BigInt(e);if(r>Jo)throw new Error("SVN revision exceeds supported range");return r}function Wt(e){let r=zo(e);return r===0n?null:String(r-1n)}function _t(e){return S.default.createElement(Wo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function Wo({sessionId:e,repositoryId:r,token:o,snapshot:t,rpc:i,t:s,onRediscover:c}){let[m,p]=(0,S.useState)({cursor:t,offset:0,trail:[]}),[n,l]=(0,S.useState)(null),[u,k]=(0,S.useState)(null),[f,C]=(0,S.useState)(!0),[b,N]=(0,S.useState)(""),[y,w]=(0,S.useState)(0),[h,x]=(0,S.useState)(""),[v,H]=(0,S.useState)(""),{cursor:L,offset:g}=m;(0,S.useEffect)(()=>{let A=new AbortController;return C(!0),N(""),i("vcs/svn-log",{sessionId:e,repositoryId:r,token:o,snapshot:t,cursor:L,limit:50},A.signal).then(O=>{if(!A.signal.aborted){let D=Vr(n,O,g);l(D);let ce=new Set((n?.entries||[]).filter(de=>!D.entries.some(Fe=>Fe.revision===de.revision)).map(de=>de.revision));k(de=>ce.has(de)?null:de)}}).catch(O=>{A.signal.aborted||(N(O.message),O.code==="vcs/rediscover-required"&&c())}).finally(()=>{A.signal.aborted||C(!1)}),()=>A.abort()},[L,g,y]);let B=()=>p(A=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...A.trail,{cursor:L,offset:g}].slice(-200)})),q=()=>{let A=m.trail.at(-1);A&&(k(null),l(null),p({...A,trail:m.trail.slice(0,-1)}))},se=n?.entries||[],ue="";try{se=Tr(se,{since:h,until:v})}catch(A){ue=A.message}return S.default.createElement("section",{className:"vcs-history vcs-history-browser vcs-svn-history","aria-label":s("history"),"aria-busy":f},S.default.createElement("div",{className:"vcs-history-list"},S.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",t),S.default.createElement("details",{className:"vcs-help"},S.default.createElement("summary",null,s("historySearchHelp")),S.default.createElement("p",null,s("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((A,O)=>S.default.createElement("label",{key:A},s(A)," ",S.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(A),value:O?v:h,onChange:D=>{k(null),O?H(D.target.value):x(D.target.value)}})))),ue&&S.default.createElement("p",{role:"alert"},ue),!!n?.entries.length&&S.default.createElement("p",{role:"status"},s("historyWindow"),": ",n.windowEnd-n.entries.length,"\u2013",n.windowEnd),S.default.createElement("ol",{className:"vcs-commit-list"},se.map(A=>S.default.createElement("li",{key:A.revision},S.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===A.revision,onClick:()=>k(A.revision)},S.default.createElement("span",{className:"vcs-commit-subject"},"r",A.revision," \xB7 ",A.message.split(/\r?\n/)[0])),S.default.createElement("div",{className:"vcs-commit-meta"},S.default.createElement("code",null,"r",A.revision)," \xB7 ",A.author," \xB7 ",S.default.createElement("time",{dateTime:A.date},A.date))))),f&&S.default.createElement("p",{role:"status"},s("loading")),b&&S.default.createElement("p",{role:"alert"},b," ",S.default.createElement("button",{onClick:()=>w(A=>A+1)},s("retry"))),!f&&!b&&!n?.entries.length&&S.default.createElement("p",null,s("historyEmpty")),!!n?.entries.length&&!se.length&&S.default.createElement("p",{role:"status"},s("historyNoMatch")),!!m.trail.length&&S.default.createElement("button",{disabled:f,onClick:q},s("historyBack")),!b&&n?.nextRevision!=null&&S.default.createElement("button",{disabled:f,onClick:B},s("historyMore"))),S.default.createElement("div",{className:"vcs-history-details"},u&&S.default.createElement(_o,{key:u,sessionId:e,repositoryId:r,token:o,snapshot:t,rpc:i,t:s,onRediscover:c,revision:u})))}function _o({sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:c,onRediscover:m}){let[p,n]=(0,S.useState)(null),[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)(""),[C,b]=(0,S.useState)(0),[N,y]=(0,S.useState)(""),[w,h]=(0,S.useState)(!1);(0,S.useEffect)(()=>{let v=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i},v.signal).then(H=>{v.signal.aborted||n(H)}).catch(H=>{v.signal.aborted||(f(H.message),H.code==="vcs/rediscover-required"&&m())}),()=>v.abort()},[C]);let x=(p?.changes||[]).filter(v=>v.path.toLocaleLowerCase().includes(N.toLocaleLowerCase()));return S.default.createElement("section",{className:"vcs-commit-details"+(w?" vcs-commit-focused":""),"aria-label":c("commitDetails")},k?S.default.createElement("p",{role:"alert"},k," ",S.default.createElement("button",{onClick:()=>b(v=>v+1)},c("retry"))):p?S.default.createElement("div",{className:"vcs-commit-sidebar"},S.default.createElement("header",{className:"vcs-commit-summary"},S.default.createElement("h3",null,p.message?.split(/\r?\n/)[0]||"r"+i),S.default.createElement("code",{className:"vcs-commit-oid"},"r",i),S.default.createElement("p",null,p.author," \xB7 ",p.date),S.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},p.message),S.default.createElement("p",null,Wt(i)===null?c("commitRoot"):"r"+Wt(i)," \u2192 r",i)),S.default.createElement("aside",{className:"vcs-commit-picker"},S.default.createElement("label",null,c("commitFileSearch")," ",S.default.createElement("input",{"aria-label":c("commitFileSearch"),value:N,onChange:v=>{y(v.target.value),u(null)}})),S.default.createElement("span",null,x.length," / ",p.changes.length),S.default.createElement("ul",{className:"vcs-commit-files"},x.map(v=>S.default.createElement("li",{key:v.id},S.default.createElement("button",{disabled:v.kind!=="file","aria-pressed":l?.id===v.id&&l.mode==="compare",onClick:()=>u({id:v.id,mode:"compare"})},S.default.createElement("span",{className:"vcs-file-status"},v.action," \xB7 "),S.default.createElement("span",{className:"vcs-file-path",title:v.path},v.path,v.copyFromPath&&S.default.createElement("small",null,"\u2190 ",v.copyFromPath," @r",v.copyFromRevision))),v.kind==="file"&&S.default.createElement("div",{className:"vcs-svn-file-actions"},S.default.createElement("button",{onClick:()=>u({id:v.id,mode:"trace"})},c("fileHistory")),v.copyFromPath&&v.copyFromRevision&&!v.copySourceOutsideScope&&S.default.createElement("button",{onClick:()=>u({id:v.id,mode:"copytrace"})},c("svnCopyHistory")," \xB7 ",v.copyFromPath," @r",v.copyFromRevision),v.copySourceOutsideScope&&S.default.createElement("span",null,c("svnCopyOutside")))))),!!p.changes.length&&!x.length&&S.default.createElement("p",{role:"status"},c("emptySearch")),!p.changes.length&&S.default.createElement("p",null,c("commitNoChanges")))):S.default.createElement("p",{role:"status"},c("loading")),S.default.createElement("div",{className:"vcs-commit-review"},S.default.createElement("div",{className:"vcs-commit-comparison","aria-label":c("comparisonContext")},l&&S.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":w,onClick:()=>h(v=>!v)},c(w?"comparisonRestore":"comparisonFocus")),l?S.default.createElement(Ko,{key:JSON.stringify(l),sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:c,onRediscover:m,...l}):S.default.createElement("p",{role:"status"},c("pick")))))}function Ko({sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,rpc:s,t:c,onRediscover:m,id:p,mode:n}){let[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)({cursor:null,trail:[]}),[C,b]=(0,S.useState)(""),[N,y]=(0,S.useState)(0),{cursor:w,trail:h}=k;return(0,S.useEffect)(()=>{let x=new AbortController;return u(null),b(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:r,token:o,snapshot:t,revision:i,id:p,...w===null?{}:{cursor:w}},x.signal).then(v=>{x.signal.aborted||u(v)}).catch(v=>{x.signal.aborted||(b(v.message),v.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[w,N]),C?S.default.createElement("p",{role:"alert"},C," ",S.default.createElement("button",{onClick:()=>y(x=>x+1)},c("retry"))):l?n==="compare"?S.default.createElement("section",{className:"vcs-history-comparison"},S.default.createElement("header",{className:"vcs-comparison-heading"},S.default.createElement("h4",null,l.path),S.default.createElement("p",null,l.left?.label," \u2194 ",l.right?.label),l.notice&&S.default.createElement("p",{role:"status"},l.notice)),l.binary?S.default.createElement("p",null,c("binary")):S.default.createElement(ye,{comparison:l,identity:JSON.stringify([e,r,t,i,p]),t:c})):S.default.createElement("section",null,S.default.createElement("p",null,c(n==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",l.path," \xB7 peg r",l.pegRevision),S.default.createElement("ol",null,l.entries.map(x=>S.default.createElement("li",{key:x.revision},"r",x.revision," \xB7 ",x.message))),!!h.length&&S.default.createElement("button",{onClick:()=>f({cursor:h.at(-1),trail:h.slice(0,-1)})},c("historyBack")),l.nextRevision!==null&&S.default.createElement("button",{onClick:()=>f({cursor:l.nextRevision,trail:[...h,w].slice(-200)})},c("historyMore"))):S.default.createElement("p",{role:"status"},c("loading"))}function Kt(e){return ne.default.createElement(Yo,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Yo({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,c]=(0,ne.useState)(null),[m,p]=(0,ne.useState)(!1),[n,l]=(0,ne.useState)(""),[u,k]=(0,ne.useState)(0);(0,ne.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>o("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token})).catch(()=>{})}},[s,e,r]),(0,ne.useEffect)(()=>{if(s)try{return vt(s.expiresAt,()=>{c(null),k(0),p(!1),l(t("svnExpired"))})}catch{c(null),l(t("svnExpired"))}},[s]),(0,ne.useEffect)(()=>{if(!u||!s)return;let b=new AbortController;return p(!0),l(""),o("vcs/svn-revoke",{sessionId:e,repositoryId:r,token:s.token},b.signal).then(()=>{b.signal.aborted||c(null)}).catch(N=>{b.signal.aborted||(l(N.message),N.code==="vcs/rediscover-required"&&i())}).finally(()=>{b.signal.aborted||p(!1)}),()=>b.abort()},[u,s]);let f=b=>{try{Fr(b),l(""),k(0),c(b)}catch(N){l(N.message)}},C=async(...b)=>{try{return await o(...b)}catch(N){throw N.code==="vcs/svn-consent-required"&&!b[2]?.aborted&&(c(null),k(0),l(t("svnExpired"))),N}};return ne.default.createElement("section",{className:"vcs-svn-remote"},!s&&n&&ne.default.createElement("p",{role:"status"},n),s?ne.default.createElement(ne.default.Fragment,null,ne.default.createElement("p",null,t("svnGrantScope")),ne.default.createElement("button",{disabled:m,onClick:()=>k(b=>b+1)},t("svnRevoke")),n&&ne.default.createElement("p",{role:"alert"},n),!m&&ne.default.createElement(_t,{sessionId:e,repositoryId:r,t,onRediscover:i,rpc:C,token:s.token,snapshot:s.snapshot})):ne.default.createElement(zt,{sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i,onApproved:f}))}var E=R(require("react"),1);function jr(e){let r=new Map;for(let o of e){let t=r.get(o.commit);t||(t={names:[],hidden:0},r.set(o.commit,t)),t.names.length<3?t.names.push(o.name):t.hidden++}return r}var T=R(require("react"),1);var U=R(require("react"),1);var Q=R(require("react"),1);var Z=R(require("react"),1);function Yt(e){return Z.default.createElement($o,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function $o({sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:c}){let[m,p]=(0,Z.useState)(!1),[n,l]=(0,Z.useState)([0]),[u,k]=(0,Z.useState)(null),[f,C]=(0,Z.useState)(""),[b,N]=(0,Z.useState)(0),y=n.at(-1);(0,Z.useEffect)(()=>{if(!m)return;let h=new AbortController;return k(null),C(""),i("vcs/tree-segment",{sessionId:e,repositoryId:r,commit:o,path:t,offset:y},h.signal).then(x=>{h.signal.aborted||k(x)}).catch(x=>{h.signal.aborted||(C(x.message),x.code==="vcs/rediscover-required"&&c())}),()=>h.abort()},[m,y,e,r,o,t,b]);let w=(0,Z.useMemo)(()=>u?{path:t,left:{label:o,text:u.text},right:{label:o,text:u.text}}:null,[u,t,o]);return Z.default.createElement("section",null,Z.default.createElement("button",{"aria-expanded":m,onClick:()=>p(h=>!h)},s("segments")),m&&Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,s("segmentScope")),f?Z.default.createElement("p",{role:"alert"},f," ",Z.default.createElement("button",{onClick:()=>N(h=>h+1)},s("retry"))):u?Z.default.createElement(Z.default.Fragment,null,Z.default.createElement("p",null,s("segmentBytes"),": ",u.offset,"\u2013",u.endOffset," / ",u.totalBytes," \xB7 ",Z.default.createElement("code",null,u.oid)),Z.default.createElement("button",{disabled:n.length===1,onClick:()=>l(h=>h.slice(0,-1))},s("previous")),Z.default.createElement("button",{disabled:u.nextOffset===null,onClick:()=>l(h=>[...h,u.nextOffset])},s("next")),Z.default.createElement(ye,{single:!0,comparison:w,identity:JSON.stringify([e,r,o,t,y]),t:s})):Z.default.createElement("p",{role:"status"},s("loading"))))}var V=R(require("react"),1);function Qo({sessionId:e,repositoryId:r,commit:o,path:t,follow:i,since:s,until:c,rpc:m,t:p,onRediscover:n,onSelectCommit:l}){let[u,k]=(0,V.useState)({commits:[],nextOffset:null}),[f,C]=(0,V.useState)(0),[b,N]=(0,V.useState)(0),[y,w]=(0,V.useState)(!0),[h,x]=(0,V.useState)("");(0,V.useEffect)(()=>{let H=new AbortController;return w(!0),x(""),m("vcs/tree-history",{sessionId:e,repositoryId:r,commit:o,path:t,offset:f,limit:50,follow:i,...s?{since:s}:{},...c?{until:c}:{}},H.signal).then(L=>{H.signal.aborted||k(g=>({...L,commits:f?[...g.commits,...L.commits]:L.commits}))}).catch(L=>{H.signal.aborted||(x(L.message),L.code==="vcs/rediscover-required"&&n())}).finally(()=>{H.signal.aborted||w(!1)}),()=>H.abort()},[e,r,o,t,f,b,i,s,c]);let v=H=>p(H.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":H.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":H.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return V.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":y},V.default.createElement("p",null,p("pathHistoryScope")),V.default.createElement("p",{style:{overflowWrap:"anywhere"}},V.default.createElement("code",null,u.path||t)," \xB7 ",V.default.createElement("code",null,o),u.followsRenames!==void 0&&V.default.createElement(V.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),V.default.createElement("ol",null,u.commits.map(H=>V.default.createElement("li",{key:H.id},V.default.createElement("code",{title:H.id},H.id.slice(0,10))," \xB7 ",l?V.default.createElement("button",{onClick:()=>l(H.id,H.path||t)},H.subject):H.subject,V.default.createElement("div",null,H.boundary&&V.default.createElement("span",null,v(H)," "),H.path&&V.default.createElement("code",null,H.oldPath?H.oldPath+" \u2192 ":"",H.path)," ",H.similarity!==void 0&&V.default.createElement("span",null,p("fileHistorySimilarity"),": ",H.similarity,"% \xB7 "),H.author," \xB7 ",V.default.createElement("time",{dateTime:H.date},H.date))))),y&&V.default.createElement("p",{role:"status"},p("loading")),h&&V.default.createElement("p",{role:"alert"},h," ",V.default.createElement("button",{onClick:()=>N(H=>H+1)},p("retry"))),!y&&!h&&!u.commits.length&&V.default.createElement("p",null,p("historyEmpty")),u.truncated&&V.default.createElement("p",{role:"status"},p("historyLimit")),!h&&u.nextOffset!==null&&V.default.createElement("button",{disabled:y,onClick:()=>C(u.nextOffset)},p("historyMore")))}function $t(e){let[r,o]=(0,V.useState)(!1),[t,i]=(0,V.useState)(!1),[s,c]=(0,V.useState)(""),[m,p]=(0,V.useState)("");return V.default.createElement("div",null,V.default.createElement("button",{"aria-expanded":r,onClick:()=>o(n=>!n)},e.t("pathHistory")),r&&V.default.createElement(V.default.Fragment,null,V.default.createElement("label",null,V.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>i(n.target.checked)}),e.t("fileHistoryFollow")),V.default.createElement("p",null,e.t("pathHistoryFollowScope")),V.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>V.default.createElement("label",{key:n},e.t(n)," ",V.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),V.default.createElement(Qo,{key:JSON.stringify([t,s.trim(),m.trim()]),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}function Re({sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:c,onClose:m,onSelectCommit:p,line:n=null}){let[l,u]=(0,Q.useState)(null),[k,f]=(0,Q.useState)(""),[C,b]=(0,Q.useState)(0);(0,Q.useEffect)(()=>{let y=new AbortController;return u(null),f(""),i("vcs/tree-file",{sessionId:e,repositoryId:r,commit:o,path:t},y.signal).then(w=>{y.signal.aborted||u(w)}).catch(w=>{y.signal.aborted||(f(w.message),w.code==="vcs/rediscover-required"&&c())}),()=>y.abort()},[e,r,o,t,C]);let N=(0,Q.useMemo)(()=>l?{path:t,left:{label:o,text:l.text||""},right:{label:o,text:l.text||""}}:null,[l,t,o]);return Q.default.createElement("section",{"aria-label":s("treePreview")},Q.default.createElement("h4",null,t),Q.default.createElement("button",{onClick:m},s("treeClose")),Q.default.createElement("p",null,Q.default.createElement("code",null,o)),k?Q.default.createElement("p",{role:"alert"},k," ",Q.default.createElement("button",{onClick:()=>b(y=>y+1)},s("retry"))):l?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,Q.default.createElement("code",null,l.oid)," \xB7 ",s("encoding"),": ",l.encoding||"\u2014"),n&&Q.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,!l.text||n>l.text.split(`
180
180
  `).length?" \xB7 "+s("blameUnmapped"):""),l.notice&&Q.default.createElement("p",{role:"status"},l.notice),l.binary?Q.default.createElement("p",null,s("binary")):l.text===""?Q.default.createElement("p",null,s("treeEmpty")):Q.default.createElement(ye,{single:!0,line:n,comparison:N,identity:JSON.stringify([e,r,o,t]),t:s})):Q.default.createElement("p",{role:"status"},s("loading")),Q.default.createElement(Yt,{sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:c}),Q.default.createElement($t,{key:JSON.stringify([e,r,o,t]),sessionId:e,repositoryId:r,commit:o,path:t,rpc:i,t:s,onRediscover:c,onSelectCommit:p}))}function Ir(e=""){let r=[{path:"",name:"/"}];if(e){let o="";for(let t of e.split("/"))o=o?o+"/"+t:t,r.push({path:o,name:t})}return r}function Ur(e,r="",o=""){let t=r?r+"/":"",i=o.toLowerCase();return e.filter(s=>{let c=s.path.slice(t.length);return s.path.startsWith(t)&&c.length>0&&!c.includes("/")&&c.toLowerCase().includes(i)}).sort((s,c)=>+(c.type==="tree")-+(s.type==="tree")||(s.path<c.path?-1:s.path>c.path?1:0))}function Xo({sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:c}){let[m,p]=(0,U.useState)(null),[n,l]=(0,U.useState)(""),[u,k]=(0,U.useState)(0),[f,C]=(0,U.useState)(""),[b,N]=(0,U.useState)(0),[y,w]=(0,U.useState)(""),[h,x]=(0,U.useState)(null);if((0,U.useEffect)(()=>{let g=new AbortController;return p(null),l(""),t("vcs/tree",{sessionId:e,repositoryId:r,commit:o},g.signal).then(B=>{g.signal.aborted||p(B)}).catch(B=>{g.signal.aborted||(l(B.message),B.code==="vcs/rediscover-required"&&s())}),()=>g.abort()},[e,r,o,u]),n)return U.default.createElement("p",{role:"alert"},n," ",U.default.createElement("button",{onClick:()=>k(g=>g+1)},i("retry")));if(!m)return U.default.createElement("p",{role:"status"},i("loading"));let v=f?f+"/":"",H=Ur(m.entries,f,y),L=g=>{C(g),N(0),w(""),x(null)};return U.default.createElement("section",{"aria-label":i("historicalTree")},U.default.createElement("p",null,i("historicalTreeScope")),U.default.createElement("code",null,o),U.default.createElement("p",null,f||"/"," ",f&&U.default.createElement("button",{onClick:()=>L(f.includes("/")?f.slice(0,f.lastIndexOf("/")):"")},i("treeUp"))),U.default.createElement("nav",{"aria-label":i("treeBreadcrumbs")},Ir(f).map(g=>U.default.createElement(U.default.Fragment,{key:g.path},g.path&&" / ",g.path===f?U.default.createElement("span",{"aria-current":"location"},g.name):U.default.createElement("button",{onClick:()=>L(g.path)},g.name)))),U.default.createElement("label",null,i("treeSearch")," ",U.default.createElement("input",{"aria-label":i("treeSearch"),value:y,onChange:g=>{w(g.target.value),N(0),x(null)}})),U.default.createElement("p",null,H.length," ",i("treeEntries")),!H.length&&y&&U.default.createElement("p",{role:"status"},i("emptySearch")),U.default.createElement("ul",null,H.slice(b*100,b*100+100).map(g=>U.default.createElement("li",{key:g.path},g.type==="tree"?U.default.createElement("button",{onClick:()=>L(g.path)},g.path.slice(v.length),"/"):g.type==="blob"&&["100644","100755"].includes(g.mode)?U.default.createElement("button",{"aria-pressed":h===g.path,onClick:()=>x(g.path)},g.path.slice(v.length)):U.default.createElement("span",null,g.path.slice(v.length))," \xB7 ",U.default.createElement("code",null,g.mode," ",g.type," ",U.default.createElement("span",{title:g.oid},g.oid.slice(0,10)))))),b>0&&U.default.createElement("button",{onClick:()=>{N(g=>g-1),x(null)}},i("treePrevious")),(b+1)*100<H.length&&U.default.createElement("button",{onClick:()=>{N(g=>g+1),x(null)}},i("treeNext")),h&&U.default.createElement(Re,{key:JSON.stringify([e,r,o,h]),sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:c,path:h,onClose:()=>x(null)}))}function Qt(e){return U.default.createElement(Zo,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Zo(e){let[r,o]=(0,U.useState)(!1);return U.default.createElement("div",null,U.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("historicalTree")),r&&U.default.createElement(Xo,{...e}))}var Y=R(require("react"),1);var j=R(require("react"),1);function Ro({sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,follow:s,since:c,until:m,rpc:p,t:n,onRediscover:l,onSelectCommit:u}){let[k,f]=(0,j.useState)({commits:[],nextOffset:null}),[C,b]=(0,j.useState)(0),[N,y]=(0,j.useState)(0),[w,h]=(0,j.useState)(!0),[x,v]=(0,j.useState)(""),H={...c?{since:c}:{},...m?{until:m}:{}};return(0,j.useEffect)(()=>{let L=new AbortController;return h(!0),v(""),p("vcs/file-history",{sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,offset:C,limit:50,follow:s,...H},L.signal).then(g=>{L.signal.aborted||f(B=>({...g,commits:C?[...B.commits,...g.commits]:g.commits}))}).catch(g=>{L.signal.aborted||(v(g.message),g.code==="vcs/rediscover-required"&&l())}).finally(()=>{L.signal.aborted||h(!1)}),()=>L.abort()},[e,r,o,t,i,C,N,s,c,m]),j.default.createElement("section",{"aria-label":n("fileHistory"),"aria-busy":w},j.default.createElement("p",null,n("fileHistoryScope")),j.default.createElement("p",{style:{overflowWrap:"anywhere"}},k.path," \xB7 ",j.default.createElement("code",null,o)),j.default.createElement("ol",null,k.commits.map(L=>j.default.createElement("li",{key:L.id},j.default.createElement("code",{title:L.id},L.id.slice(0,10))," \xB7 ",u?j.default.createElement("button",{onClick:()=>u(L.id,L.path||k.path)},L.subject):L.subject,j.default.createElement("div",null,L.boundary&&j.default.createElement("span",null,n(L.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":L.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":L.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),L.path&&j.default.createElement("code",null,L.oldPath?L.oldPath+" \u2192 ":"",L.path)," ",L.similarity!==void 0&&j.default.createElement("span",null,n("fileHistorySimilarity"),": ",L.similarity,"% \xB7 "),L.author," \xB7 ",j.default.createElement("time",{dateTime:L.date},L.date))))),w&&j.default.createElement("p",{role:"status"},n("loading")),x&&j.default.createElement("p",{role:"alert"},x," ",j.default.createElement("button",{onClick:()=>y(L=>L+1)},n("retry"))),!w&&!x&&!k.commits.length&&j.default.createElement("p",null,n("historyEmpty")),k.truncated&&j.default.createElement("p",{role:"status"},n("historyLimit")),!x&&k.nextOffset!==null&&j.default.createElement("button",{disabled:w,onClick:()=>b(k.nextOffset)},n("historyMore")))}function Xt(e){return j.default.createElement(ei,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function ei(e){let[r,o]=(0,j.useState)(!1),[t,i]=(0,j.useState)(!1),[s,c]=(0,j.useState)(""),[m,p]=(0,j.useState)("");return j.default.createElement("div",null,j.default.createElement("button",{"aria-expanded":r,onClick:()=>o(n=>!n)},e.t("fileHistory")),r&&j.default.createElement(j.default.Fragment,null,j.default.createElement("label",null,j.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>i(n.target.checked)}),e.t("fileHistoryFollow")),j.default.createElement("p",null,e.t("fileHistoryFollowScope")),j.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>j.default.createElement("label",{key:n},e.t(n)," ",j.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),j.default.createElement(Ro,{key:JSON.stringify([t,s.trim(),m.trim()]),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}var I=R(require("react"),1);function ti({sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,rpc:s,t:c,onRediscover:m,onSelectCommit:p}){let[n,l]=(0,I.useState)(null),[u,k]=(0,I.useState)(""),[f,C]=(0,I.useState)(0),[b,N]=(0,I.useState)(1),[y,w]=(0,I.useState)(null);return(0,I.useEffect)(()=>{let h=new AbortController;return l(null),k(""),w(null),s("vcs/blame",{sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:i,startLine:b,lineLimit:500},h.signal).then(x=>{h.signal.aborted||l(x)}).catch(x=>{h.signal.aborted||(k(x.message),x.code==="vcs/rediscover-required"&&m())}),()=>h.abort()},[e,r,o,t,i,f,b]),u?I.default.createElement("p",{role:"alert"},u," ",I.default.createElement("button",{onClick:()=>C(h=>h+1)},c("retry"))):n?I.default.createElement("section",{"aria-label":c("blame")},I.default.createElement("p",null,c("blameScope")),p&&I.default.createElement("p",null,c("blameNavigation")),n.notice&&I.default.createElement("p",{role:"status"},n.notice),n.truncated&&I.default.createElement("p",{role:"status"},c("blameLimit")),!n.notice&&!n.lines.length&&I.default.createElement("p",null,c("blameEmpty")),!!n.lines.length&&I.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},I.default.createElement("table",null,I.default.createElement("thead",null,I.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(h=>I.default.createElement("th",{key:h,scope:"col"},c(h))))),I.default.createElement("tbody",null,n.lines.map(h=>I.default.createElement("tr",{key:h.line},I.default.createElement("th",{scope:"row"},h.line),I.default.createElement("td",null,p?I.default.createElement("button",{title:h.commit,onClick:()=>p(h.commit,h.path||null)},I.default.createElement("code",null,h.commit.slice(0,10))):I.default.createElement("code",{title:h.commit},h.commit.slice(0,10))),I.default.createElement("td",null,h.author),I.default.createElement("td",null,h.summary),I.default.createElement("td",null,I.default.createElement("pre",{style:{margin:0}},h.text),h.path&&h.originalLine?I.default.createElement("button",{onClick:()=>w(h)},c("blameOriginLine"),": ",h.path,":",h.originalLine):I.default.createElement("span",null,c("blameUnmapped")))))))),I.default.createElement("p",null,n.startLine||b,"\u2013",n.lines.at(-1)?.line||b," / ",n.totalLines??"\u2014"),I.default.createElement("button",{disabled:b===1,onClick:()=>N(Math.max(1,b-500))},c("blamePrevious")),I.default.createElement("button",{disabled:n.nextLine==null,onClick:()=>N(n.nextLine)},c("blameNext")),y&&I.default.createElement(Re,{key:JSON.stringify([y.commit,y.path,y.originalLine]),sessionId:e,repositoryId:r,rpc:s,t:c,onRediscover:m,onSelectCommit:p,commit:y.commit,path:y.path,line:y.originalLine,onClose:()=>w(null)})):I.default.createElement("p",{role:"status"},c("loading"))}function Zt(e){let[r,o]=(0,I.useState)(!1);return I.default.createElement("div",null,I.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("blame")),r&&I.default.createElement(ti,{...e}))}function et(e){return Y.default.createElement(ri,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function ri({sessionId:e,repositoryId:r,commit:o,parentIndex:t,base:i,target:s,id:c,rpc:m,t:p,onRediscover:n,onSelectCommit:l}){let[u,k]=(0,Y.useState)(null),[f,C]=(0,Y.useState)(""),[b,N]=(0,Y.useState)(0),[y,w]=(0,Y.useState)(!1);return(0,Y.useEffect)(()=>{let h=new AbortController;return k(null),C(""),m(i?"vcs/revision-compare":"vcs/commit-compare",i?{sessionId:e,repositoryId:r,base:i,target:s,id:c,...y?{large:!0}:{}}:{sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:c,...y?{large:!0}:{}},h.signal).then(x=>{h.signal.aborted||k(x)}).catch(x=>{h.signal.aborted||(C(x.message),x.code==="vcs/rediscover-required"&&n())}),()=>h.abort()},[e,r,o,t,i,s,c,b,y]),f?Y.default.createElement("p",{role:"alert"},f," ",Y.default.createElement("button",{onClick:()=>N(h=>h+1)},p("retry")),y&&Y.default.createElement("button",{onClick:()=>w(!1)},p("largeClose"))):u?Y.default.createElement("section",{className:"vcs-history-comparison"},Y.default.createElement("header",{className:"vcs-comparison-heading"},Y.default.createElement("h4",null,u.path),Y.default.createElement("p",null,u.left.label," \u2194 ",u.right.label),u.notice&&Y.default.createElement("p",{role:"status"},u.notice),y?Y.default.createElement("p",null,p("largeScope")," ",Y.default.createElement("button",{onClick:()=>w(!1)},p("largeClose"))):u.notice?.includes("2 MiB")&&Y.default.createElement("p",null,p("largeScope")," ",Y.default.createElement("button",{onClick:()=>w(!0)},p("largeLoad")))),u.binary?Y.default.createElement("p",null,p("binary")):Y.default.createElement(ye,{comparison:u,identity:JSON.stringify(i?[e,r,i,s,c]:[e,r,o,t,c]),t:p}),Y.default.createElement("div",{className:"vcs-comparison-extras"},o&&!i&&Y.default.createElement(Xt,{onSelectCommit:l,key:"file-history:"+JSON.stringify([e,r,o,t,c]),sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:c,rpc:m,t:p,onRediscover:n}),o&&!i&&Y.default.createElement(Zt,{onSelectCommit:l,key:"blame:"+JSON.stringify([e,r,o,t,c]),sessionId:e,repositoryId:r,commit:o,parentIndex:t,id:c,rpc:m,t:p,onRediscover:n}),(o||i)&&Y.default.createElement(Ze,{key:"image:"+JSON.stringify([e,r,o,t,i,s,c]),sessionId:e,repositoryId:r,commit:o,parentIndex:t,base:i,target:s,id:c,rpc:m,t:p,onRediscover:n}))):Y.default.createElement("p",{role:"status"},p("loading"),y&&Y.default.createElement("button",{onClick:()=>w(!1)},p("largeClose")))}function qr(e,r){if(typeof r!="string"||!r)return null;let o=e.filter(t=>t.path===r);return o.length===1&&typeof o[0].id=="string"&&o[0].id?o[0].id:null}function Gr(e,r=""){let o=r.trim().toLowerCase();return o?e.filter(t=>[t.id,t.author,t.subject].some(i=>i?.toLowerCase().includes(o))):e}function yt(e,r=""){let o=r.trim().toLowerCase();return o?e.filter(t=>[t.path,t.oldPath].some(i=>i?.toLowerCase().includes(o))):e}function tt(e){return T.default.createElement(oi,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function oi({sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:c,initialPath:m}){let p=(0,T.useRef)(!0),[n,l]=(0,T.useState)(null),[u,k]=(0,T.useState)(""),[f,C]=(0,T.useState)(!1),[b,N]=(0,T.useState)(0),[y,w]=(0,T.useState)(null),[h,x]=(0,T.useState)(""),[v,H]=(0,T.useState)(0);if((0,T.useEffect)(()=>{let g=new AbortController;return w(null),x(""),t("vcs/commit",{sessionId:e,repositoryId:r,commit:o,parentIndex:b},g.signal).then(B=>{g.signal.aborted||(w(B),p.current&&(p.current=!1,l(qr(B.changes,m))))}).catch(B=>{g.signal.aborted||(x(B.message),B.code==="vcs/rediscover-required"&&s())}),()=>g.abort()},[e,r,o,b,v]),h)return T.default.createElement("p",{role:"alert"},h," ",T.default.createElement("button",{onClick:()=>H(g=>g+1)},i("retry")));if(!y)return T.default.createElement("p",{role:"status"},i("loading"));let L=yt(y.changes,u);return T.default.createElement("section",{className:"vcs-commit-details"+(f?" vcs-commit-focused":""),"aria-label":i("commitDetails")},T.default.createElement("div",{className:"vcs-commit-sidebar"},T.default.createElement("header",{className:"vcs-commit-summary"},T.default.createElement("h3",null,y.subject),T.default.createElement("code",{className:"vcs-commit-oid"},y.id),T.default.createElement("p",null,y.author," \xB7 ",y.date),y.committer&&y.committer!==y.author&&T.default.createElement("p",null,i("commitCommitter")," ",y.committer,y.committerDate?` \xB7 ${y.committerDate}`:""),y.signature?.signed===!0&&T.default.createElement("p",null,T.default.createElement("span",{title:i("commitSignatureUnverified")},i("commitSigned",{format:y.signature.format}))),y.messageTruncated&&T.default.createElement("p",{role:"status"},i("commitMessageLimit")),y.message&&T.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},y.message),y.parents.length>1&&T.default.createElement("label",null,i("commitParent")," ",T.default.createElement("select",{"aria-label":i("commitParent"),value:b,onChange:g=>{l(null),w(null),N(Number(g.target.value))}},y.parents.map((g,B)=>T.default.createElement("option",{key:g,value:B},B+1,": ",g.slice(0,10))))),T.default.createElement("p",null,y.parent||i("commitRoot")," \u2192 ",y.id.slice(0,10))),T.default.createElement("aside",{className:"vcs-commit-picker"},T.default.createElement("label",null,i("commitFileSearch")," ",T.default.createElement("input",{"aria-label":i("commitFileSearch"),value:u,onChange:g=>{k(g.target.value),l(null)}})),T.default.createElement("span",null," ",L.length," / ",y.changes.length),T.default.createElement("ul",{className:"vcs-commit-files"},L.map(g=>T.default.createElement("li",{key:g.id},T.default.createElement("button",{"aria-pressed":n===g.id,onClick:()=>l(g.id)},T.default.createElement("span",{className:"vcs-file-status"},g.status," \xB7 "),T.default.createElement("span",{className:"vcs-file-path",title:g.oldPath?g.oldPath+" \u2192 "+g.path:g.path},g.path,g.oldPath&&T.default.createElement("small",null,"\u2190 ",g.oldPath)))))),!!y.changes.length&&!L.length&&T.default.createElement("p",{role:"status"},i("emptySearch")),!y.changes.length&&T.default.createElement("p",null,i("commitNoChanges")),T.default.createElement(Qt,{key:JSON.stringify([e,r,o]),sessionId:e,repositoryId:r,commit:o,rpc:t,t:i,onRediscover:s,onSelectCommit:c}))),T.default.createElement("div",{className:"vcs-commit-review"},T.default.createElement("div",{className:"vcs-commit-comparison","aria-label":i("comparisonContext")},n&&T.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":f,onClick:()=>C(g=>!g)},i(f?"comparisonRestore":"comparisonFocus")),n?T.default.createElement(et,{key:n,sessionId:e,repositoryId:r,commit:o,parentIndex:b,id:n,onSelectCommit:c,rpc:t,t:i,onRediscover:s}):T.default.createElement("p",{role:"status"},i("pick")))))}var re=R(require("react"),1);function Jr(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let r=e.slice(0,200),o=new Map,t=[],i=[],s=m=>typeof m=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(m);for(let[m,p]of r.entries()){if(!p||!s(p.id)||!Array.isArray(p.parents)||o.has(p.id))throw new Error("Invalid graph node");o.set(p.id,m),t.push({id:p.id,row:m})}let c=!1;for(let m of r){let p=new Set;for(let n of m.parents){if(i.length===1e3){c=!0;break}if(!s(n)||n.length!==m.id.length||n===m.id||p.has(n))throw new Error("Invalid graph parent");p.add(n);let l=o.get(n);if(l!==void 0&&l<=o.get(m.id))throw new Error("Graph requires child-before-parent order");i.push({from:m.id,to:n,missing:l===void 0})}if(c)break}return{nodes:t,edges:i,nodesTruncated:e.length>200,edgesTruncated:c}}function zr(e){let r=Array(32).fill(null),o=new Map,t=[],i=new Set,s=!1,c=n=>{if(i.has(n))return null;let l=r.indexOf(n);return l>=0?l:(l=r.indexOf(null),l<0?(s=!0,i.add(n),null):(r[l]=n,l))},m=new Map;for(let n of e.edges){if(n.missing)continue;let l=m.get(n.from)||[];l.push(n.to),m.set(n.from,l)}for(let n of e.nodes){let l=c(n.id);if(o.set(n.id,{...n,lane:l}),t.push({...n,lane:l}),l===null)continue;r[l]=null;let u=m.get(n.id)||[];for(let[k,f]of u.entries())r.includes(f)||(k===0&&r[l]===null?r[l]=f:c(f))}let p=e.edges.filter(n=>!n.missing).flatMap(n=>{let l=o.get(n.from),u=o.get(n.to);return l.lane===null||u.lane===null?[]:[{...n,start:l.row,end:u.row,fromLane:l.lane,toLane:u.lane}]});return{nodes:t,edges:p,lanesTruncated:s,laneCount:Math.max(1,...t.map(n=>(n.lane??0)+1))}}function ii({commits:e,selected:r,onSelect:o,t}){let i;try{i=Jr(e)}catch{return re.default.createElement("p",{role:"alert"},t("graphInvalid"))}let s=zr(i),c=s.edges,m=Math.max(100,24+18*s.laneCount),p=Math.max(40,i.nodes.length*36);return re.default.createElement("section",{"aria-label":t("historyGraph")},re.default.createElement("p",null,t("graphScope")),s.lanesTruncated&&re.default.createElement("p",{role:"status"},t("graphLaneLimit")),(i.nodesTruncated||i.edgesTruncated)&&re.default.createElement("p",{role:"status"},t("graphLimit")),re.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},re.default.createElement("svg",{width:m,height:p,"aria-hidden":"true",style:{flexShrink:0}},c.map(n=>{let l=n.start*36+18,u=n.end*36+18,k=12+n.fromLane*18,f=12+n.toLane*18;return re.default.createElement("path",{key:n.from+n.to,d:"M "+k+" "+l+" C "+k+" "+(l+18)+", "+f+" "+(u-18)+", "+f+" "+u,fill:"none",stroke:"currentColor",opacity:"0.45"})}),s.nodes.filter(n=>n.lane!==null).map(n=>re.default.createElement("circle",{key:n.id,cx:12+n.lane*18,cy:n.row*36+18,r:"4",fill:"currentColor"}))),re.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},i.nodes.map(n=>re.default.createElement("li",{key:n.id,style:{height:36,whiteSpace:"nowrap"}},re.default.createElement("button",{title:n.id,"aria-current":r===n.id?!0:void 0,style:r===n.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:l=>{if(l.altKey||l.ctrlKey||l.metaKey||l.shiftKey)return;let u=l.key==="ArrowDown"?Math.min(n.row+1,i.nodes.length-1):l.key==="ArrowUp"?Math.max(0,n.row-1):l.key==="Home"?0:l.key==="End"?i.nodes.length-1:null;u!==null&&(l.preventDefault(),l.stopPropagation(),l.currentTarget.closest("ol").querySelectorAll("button")[u]?.focus())},onClick:()=>o(n.id)},re.default.createElement("code",null,n.id.slice(0,10))," ",e[n.row].subject))))),re.default.createElement("details",null,re.default.createElement("summary",null,t("graphRelations")),re.default.createElement("ul",null,i.edges.map(n=>re.default.createElement("li",{key:n.from+n.to},re.default.createElement("code",null,n.from)," \u2192 ",re.default.createElement("code",null,n.to),n.missing?" \xB7 "+t("graphMissing"):"")))))}function Rt(e){let[r,o]=(0,re.useState)(!1);return re.default.createElement("div",null,re.default.createElement("button",{"aria-expanded":r,onClick:()=>o(t=>!t)},e.t("historyGraph")),r&&re.default.createElement(ii,{...e}))}var F=R(require("react"),1);function si({sessionId:e,repositoryId:r,base:o,target:t,rpc:i,t:s,onRediscover:c}){let[m,p]=(0,F.useState)(null),[n,l]=(0,F.useState)(""),[u,k]=(0,F.useState)(0),[f,C]=(0,F.useState)(null),[b,N]=(0,F.useState)("");if((0,F.useEffect)(()=>{let w=new AbortController;return p(null),l(""),C(null),i("vcs/revision-changes",{sessionId:e,repositoryId:r,base:o,target:t},w.signal).then(h=>{w.signal.aborted||p(h)}).catch(h=>{w.signal.aborted||(l(h.message),h.code==="vcs/rediscover-required"&&c())}),()=>w.abort()},[e,r,o,t,u]),n)return F.default.createElement("p",{role:"alert"},n," ",F.default.createElement("button",{onClick:()=>k(w=>w+1)},s("retry")));if(!m)return F.default.createElement("p",{role:"status"},s("loading"));let y=yt(m.changes,b);return F.default.createElement("div",null,F.default.createElement("label",null,s("commitFileSearch")," ",F.default.createElement("input",{"aria-label":s("commitFileSearch"),value:b,onChange:w=>{N(w.target.value),C(null)}})),F.default.createElement("span",null," ",y.length," / ",m.changes.length),!!m.changes.length&&!y.length&&F.default.createElement("p",{role:"status"},s("emptySearch")),!m.changes.length&&F.default.createElement("p",null,s("revisionEmpty")),F.default.createElement("ul",null,y.map(w=>F.default.createElement("li",{key:w.id},F.default.createElement("button",{"aria-pressed":f===w.id,onClick:()=>C(w.id)},w.status," \xB7 ",w.oldPath?w.oldPath+" \u2192 ":"",w.path)))),f&&F.default.createElement(et,{key:f,sessionId:e,repositoryId:r,base:o,target:t,id:f,rpc:i,t:s,onRediscover:c}))}function er(e){return F.default.createElement(ni,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function ni({commits:e,sessionId:r,repositoryId:o,rpc:t,t:i,onRediscover:s,onReferencesLoaded:c}){let[m,p]=(0,F.useState)(""),[n,l]=(0,F.useState)(""),[u,k]=(0,F.useState)([]),[f,C]=(0,F.useState)(!1),[b,N]=(0,F.useState)(0),[y,w]=(0,F.useState)(!1),[h,x]=(0,F.useState)("");return(0,F.useEffect)(()=>{if(!b)return;let v=new AbortController;return w(!0),x(""),t("vcs/references",{sessionId:r,repositoryId:o},v.signal).then(H=>{v.signal.aborted||(k(H.references),C(!0),c?.(H.references))}).catch(H=>{v.signal.aborted||(x(H.message),H.code==="vcs/rediscover-required"&&s())}).finally(()=>{v.signal.aborted||w(!1)}),()=>v.abort()},[r,o,b]),F.default.createElement("section",{"aria-label":i("revisionTitle")},F.default.createElement("h3",null,i("revisionTitle")),F.default.createElement("p",null,i("revisionScope")),F.default.createElement("button",{disabled:y,onClick:()=>N(v=>v+1)},i("revisionLoadRefs")),F.default.createElement("p",null,i("revisionRefsScope")),f&&!y&&!h&&F.default.createElement("p",{role:"status"},u.length?`${i("revisionRefsCount")}: ${u.length}`:i("revisionRefsEmpty")),y&&F.default.createElement("p",{role:"status"},i("loading")),h&&F.default.createElement("p",{role:"alert"},h),[[m,p,"revisionBase"],[n,l,"revisionTarget"]].map(([v,H,L])=>F.default.createElement("label",{key:L},i(L)," ",F.default.createElement("select",{"aria-label":i(L),value:v,onChange:g=>H(g.target.value)},F.default.createElement("option",{value:""},"\u2014"),!!e.length&&F.default.createElement("optgroup",{label:i("revisionLoadedCommits")},e.map(g=>F.default.createElement("option",{key:g.id,value:g.id},g.id.slice(0,10)," \xB7 ",g.subject))),!!u.length&&F.default.createElement("optgroup",{label:i("revisionLocalRefs")},u.map(g=>F.default.createElement("option",{key:g.name,value:g.commit},g.name," \xB7 ",g.commit.slice(0,10)))),v&&!e.some(g=>g.id===v)&&!u.some(g=>g.commit===v)&&F.default.createElement("option",{value:v},v)))),F.default.createElement("button",{disabled:!m||!n,onClick:()=>{p(n),l(m)}},i("revisionSwap")),F.default.createElement("p",{style:{overflowWrap:"anywhere"}},F.default.createElement("code",null,m||"\u2014")," \u2192 ",F.default.createElement("code",null,n||"\u2014")),m&&n&&F.default.createElement(si,{key:JSON.stringify([r,o,m,n]),sessionId:r,repositoryId:o,base:m,target:n,rpc:t,t:i,onRediscover:s}))}function rt(e){return E.default.createElement(ai,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function ai({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i,showSearch:s=!1}){let[c,m]=(0,E.useState)({id:null,path:null,revision:0}),[p,n]=(0,E.useState)(""),[l,u]=(0,E.useState)([]),[k,f]=(0,E.useState)(null),[C,b]=(0,E.useState)(""),[N,y]=(0,E.useState)(""),w=P=>{let le=(k||[]).find(we=>JSON.stringify([we.name,we.commit])===P)?.commit||"";y(P),b(le),H(we=>we?{...we,snapshot:le||null}:null),de(0),n(""),A(null),D({commits:[],snapshot:null,nextOffset:null})},[h,x]=(0,E.useState)({message:"",author:"",path:"",since:"",until:""}),[v,H]=(0,E.useState)(null),L=P=>{H({values:P,snapshot:O.snapshot}),de(0),n(""),A(null),D(X=>({...X,commits:[],nextOffset:null}))},g=()=>{ce&&(D(P=>({commits:[],snapshot:P.snapshot,nextOffset:null})),A(null),n(""),de(Math.max(0,ce-50)))},B=(0,E.useMemo)(()=>jr(k||[]),[k]),q=c.id,se=(P,X=null)=>{c.id&&u(le=>[...le,c]),m(le=>({id:P,path:X,revision:le.revision+1}))},ue=()=>{if(!l.length)return;let P=l[l.length-1];u(X=>X.slice(0,-1)),m(X=>({id:P.id,path:P.path,revision:X.revision+1}))},A=(P,X=null)=>m(le=>({id:P,path:X,revision:le.revision+(X||le.path?1:0)})),[O,D]=(0,E.useState)({commits:[],snapshot:null,nextOffset:null}),[ce,de]=(0,E.useState)(0),[Fe,wt]=(0,E.useState)(0),[be,ke]=(0,E.useState)(!0),[He,Ae]=(0,E.useState)("");(0,E.useEffect)(()=>{let P=new AbortController;return ke(!0),Ae(""),o("vcs/history",{sessionId:e,repositoryId:r,offset:ce,limit:50,...v?{search:v.values}:{},...v?.snapshot||C||O.snapshot?{snapshot:v?.snapshot||C||O.snapshot}:{}},P.signal).then(X=>{if(!P.signal.aborted){let le=gt(O,X,ce);D(le);let we=new Set(O.commits.filter(pe=>!le.commits.some(Je=>Je.id===pe.id)).map(pe=>pe.id));m(pe=>we.has(pe.id)?{id:null,path:null,revision:pe.revision+1}:pe)}}).catch(X=>{P.signal.aborted||(Ae(X.message),X.code==="vcs/rediscover-required"&&i())}).finally(()=>{P.signal.aborted||ke(!1)}),()=>P.abort()},[e,r,ce,Fe,v,C]);let xe=Gr(O.commits,p);return E.default.createElement("section",{className:"vcs-history vcs-history-browser","aria-label":t("history"),"aria-busy":be},E.default.createElement("div",{className:"vcs-history-list"},E.default.createElement("p",null,t("historyListOnly")),k!==null&&E.default.createElement("p",null,t("historyRefsScope")),E.default.createElement("label",null,t("historyBranch")," ",E.default.createElement("select",{"aria-label":t("historyBranch"),value:N,disabled:be,onChange:P=>w(P.target.value)},E.default.createElement("option",{value:""},"HEAD"),N&&!(k||[]).some(P=>JSON.stringify([P.name,P.commit])===N)&&E.default.createElement("option",{value:N},JSON.parse(N)[0]," \xB7 ",C.slice(0,10)," \xB7 ",t("historyPinned")),(k||[]).map(P=>{let X=JSON.stringify([P.name,P.commit]);return E.default.createElement("option",{key:X,value:X},P.name," \xB7 ",P.commit.slice(0,10))}))),s&&E.default.createElement("details",{className:"vcs-help"},E.default.createElement("summary",null,t("historySearchHelp")),E.default.createElement("p",null,t("historyBranchScope"),C&&E.default.createElement(E.default.Fragment,null," \xB7 ",E.default.createElement("code",null,C)))),s&&E.default.createElement("form",{className:"vcs-history-search","aria-label":t("historyServerSearch"),onSubmit:P=>{P.preventDefault(),L({...h})}},E.default.createElement("fieldset",{disabled:be},E.default.createElement("legend",null,t("historyServerSearch")),E.default.createElement("details",{className:"vcs-help"},E.default.createElement("summary",null,t("historySearchHelp")),E.default.createElement("p",null,t("historyServerScope"))),["message","author","path","since","until"].map(P=>E.default.createElement("label",{key:P},t("historyServer_"+P)," ",E.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":t("historyServer_"+P),value:h[P],onChange:X=>x(le=>({...le,[P]:X.target.value}))}))),E.default.createElement("button",{type:"submit"},t("historyServerApply")),E.default.createElement("button",{type:"button",onClick:()=>{x({message:"",author:"",path:"",since:"",until:""}),L({})}},t("historyServerClear")))),v&&E.default.createElement("p",{role:"status"},t("historyServerActive"),": ",JSON.stringify(v.values)," \xB7 ",E.default.createElement("code",null,v.snapshot||O.snapshot)),s&&E.default.createElement(E.default.Fragment,null,E.default.createElement("label",null,t("historySearch")," ",E.default.createElement("input",{"aria-label":t("historySearch"),value:p,onChange:P=>{n(P.target.value),A(null)}})),E.default.createElement("span",null," ",xe.length," / ",O.commits.length)),!!O.commits.length&&E.default.createElement(E.default.Fragment,null,E.default.createElement("p",{role:"status"},t("historyWindow"),": ",Math.max(0,(O.windowEnd??O.commits.length)-O.commits.length),"\u2013",O.windowEnd??O.commits.length),s&&E.default.createElement("details",{className:"vcs-help"},E.default.createElement("summary",null,t("historySearchHelp")),E.default.createElement("p",null,t("historyWindowScope")))),!!O.commits.length&&!xe.length&&E.default.createElement("p",{role:"status"},t("historyNoMatch")),E.default.createElement("ol",{className:"vcs-commit-list"},xe.map(P=>E.default.createElement("li",{key:P.id},E.default.createElement("button",{className:"vcs-commit-row","aria-pressed":q===P.id,onClick:()=>A(P.id)},E.default.createElement("span",{className:"vcs-commit-subject"},P.subject)),E.default.createElement("div",{className:"vcs-commit-meta"},E.default.createElement("code",{title:P.id},P.id.slice(0,10))," \xB7 ",P.author," \xB7 ",E.default.createElement("time",{dateTime:P.date},P.date)),B.has(P.id)&&E.default.createElement("div",{"aria-label":t("historyRefsLabel"),style:{overflowWrap:"anywhere"}},B.get(P.id).names.map(X=>E.default.createElement("span",{key:X},E.default.createElement("code",null,X)," ")),B.get(P.id).hidden>0&&E.default.createElement("span",null,t("historyRefsMore"),": ",B.get(P.id).hidden))))),be&&E.default.createElement("p",{role:"status"},t("loading")),He&&E.default.createElement("p",{role:"alert"},He," ",E.default.createElement("button",{onClick:()=>wt(P=>P+1)},t("retry"))),!be&&!He&&!O.commits.length&&E.default.createElement("p",null,t("historyEmpty")),O.truncated&&E.default.createElement("p",{role:"status"},t("historyLimit")),!!ce&&E.default.createElement("button",{disabled:be,onClick:g},t("historyBack")),!He&&O.nextOffset!==null&&E.default.createElement("button",{disabled:be,onClick:()=>de(O.nextOffset)},t("historyMore")),!!O.commits.length&&E.default.createElement(Rt,{commits:O.commits,selected:q,onSelect:A,t}),E.default.createElement(er,{onReferencesLoaded:f,commits:O.commits,sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i})),E.default.createElement("div",{className:"vcs-history-details"},l.length>0&&E.default.createElement("p",null,E.default.createElement("button",{onClick:ue,"aria-label":t("historyNavigationBack")},t("historyNavigationBack")," \xB7 ",l[l.length-1].id.slice(0,10))),q&&E.default.createElement(tt,{key:JSON.stringify([q,c.revision]),initialPath:c.path,sessionId:e,repositoryId:r,commit:q,onSelectCommit:se,rpc:o,t,onRediscover:i})))}var ie=R(require("react"),1);function tr({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,c]=(0,ie.useState)(null),[m,p]=(0,ie.useState)(null),[n,l]=(0,ie.useState)(""),[u,k]=(0,ie.useState)(0);return(0,ie.useEffect)(()=>{let f=new AbortController;return l(""),c(null),p(null),o("vcs/stash-list",{sessionId:e,repositoryId:r},f.signal).then(C=>{f.signal.aborted||c(C.stashes)}).catch(C=>{f.signal.aborted||(l(C.message),C.code==="vcs/rediscover-required"&&i())}),()=>f.abort()},[e,r,u]),n?ie.default.createElement("section",{"aria-label":t("stashTitle")},ie.default.createElement("h3",null,t("stashTitle")),ie.default.createElement("p",{role:"alert"},n," ",ie.default.createElement("button",{onClick:()=>k(f=>f+1)},t("retry")))):s?ie.default.createElement("section",{"aria-label":t("stashTitle")},ie.default.createElement("h3",null,t("stashTitle")),ie.default.createElement("p",null,t("stashScope")),s.length?ie.default.createElement("ol",null,s.map(f=>ie.default.createElement("li",{key:f.id},ie.default.createElement("button",{"aria-pressed":m===f.id,onClick:()=>p(f.id)},ie.default.createElement("code",null,f.ref)," \xB7 ",f.message)))):ie.default.createElement("p",{role:"status"},t("stashEmpty")),m&&ie.default.createElement(tt,{sessionId:e,repositoryId:r,commit:m,onSelectCommit:()=>{},rpc:o,t,onRediscover:i})):ie.default.createElement("section",{"aria-label":t("stashTitle")},ie.default.createElement("h3",null,t("stashTitle")),ie.default.createElement("p",{role:"status"},t("loading")))}var Se=R(require("react"),1);var $=R(require("react"),1);function rr(e){return $.default.createElement(li,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function li({sessionId:e,repositoryId:r,rpc:o,t,onRediscover:i}){let[s,c]=(0,$.useState)(""),[m,p]=(0,$.useState)(null),[n,l]=(0,$.useState)(null),[u,k]=(0,$.useState)(""),[f,C]=(0,$.useState)(!1),b=(0,$.useRef)(null),N=w=>{b.current?.abort();let h=new AbortController;b.current=h,C(!0),k(""),l(null),p(w),o("vcs/grep",{sessionId:e,repositoryId:r,query:w},h.signal).then(x=>{h.signal.aborted||l(x.matches)}).catch(x=>{h.signal.aborted||(k(x.message),x.code==="vcs/rediscover-required"&&i())}).finally(()=>{h.signal.aborted||C(!1)})};(0,$.useEffect)(()=>()=>b.current?.abort(),[]);let y=w=>{w.preventDefault();let h=s.trim();h&&N(h)};return $.default.createElement("section",{"aria-label":t("grepTitle")},$.default.createElement("h3",null,t("grepTitle")),$.default.createElement("p",null,t("grepScope")),$.default.createElement("form",{onSubmit:y},$.default.createElement("input",{"aria-label":t("grepQuery"),maxLength:1024,placeholder:t("grepPlaceholder"),value:s,onChange:w=>c(w.target.value)}),$.default.createElement("button",{type:"submit",disabled:f||!s.trim()},t("grepRun"))),u?$.default.createElement("p",{role:"alert"},u," ",$.default.createElement("button",{onClick:()=>m&&N(m)},t("retry"))):f?$.default.createElement("p",{role:"status"},t("loading")):n&&$.default.createElement($.default.Fragment,null,$.default.createElement("p",{role:"status"},t("grepCount",{count:n.length})),n.length?$.default.createElement("ol",null,n.map((w,h)=>$.default.createElement("li",{key:h},$.default.createElement("code",null,w.path,":",w.line)," ",$.default.createElement("pre",{style:{margin:0}},w.text)))):$.default.createElement("p",{role:"status"},t("grepEmpty"))))}function or(e){return Se.default.createElement(ci,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function ci({t:e,...r}){let[o,t]=(0,Se.useState)("content");return Se.default.createElement("section",{className:"vcs-search-panel","aria-label":e("searchCenter")},Se.default.createElement("nav",{className:"vcs-search-modes","aria-label":e("searchMode")},Se.default.createElement("button",{"aria-pressed":o==="content",onClick:()=>t("content")},e("searchContentMode")),Se.default.createElement("button",{"aria-pressed":o==="history",onClick:()=>t("history")},e("searchHistoryMode"))),o==="content"?Se.default.createElement(rr,{...r,t:e}):Se.default.createElement(rt,{...r,t:e,showSearch:!0}))}var ir={zh:{svnOfferExpired:"\u7F51\u7EDC\u8BBF\u95EE\u63D0\u6848\u5DF2\u8FC7\u671F\uFF1B\u8BF7\u624B\u52A8\u91CD\u8BD5\uFF0C\u5E76\u91CD\u65B0\u52FE\u9009\u540C\u610F\u3002",svnExpired:"SVN \u7F51\u7EDC\u6388\u6743\u5DF2\u8FC7\u671F\uFF0C\u5386\u53F2\u8BF7\u6C42\u5DF2\u505C\u6B62\uFF1B\u8BF7\u91CD\u65B0\u5BA1\u9605\u5E76\u540C\u610F\u3002",svnConsentReview:"\u5BA1\u9605 SVN \u7F51\u7EDC\u8BBF\u95EE\u8303\u56F4",svnConsentScope:"\u540C\u610F\u524D\u4EC5\u8BFB\u53D6\u672C\u5730\u8EAB\u4EFD\u3002\u6388\u6743\u53EA\u9002\u7528\u4E8E\u6240\u5217\u4ED3\u5E93\u3001Session \u4E0E\u76EE\u5F55\uFF0C\u4E94\u5206\u949F\u6709\u6548\uFF1B\u4E0D\u6388\u6743\u91CD\u5B9A\u5411\u6216\u5199\u64CD\u4F5C\u3002",svnConsentExplicit:"\u6211\u540C\u610F\u8BBF\u95EE\u4EE5\u4E0A HTTPS SVN \u4ED3\u5E93",svnConsentApprove:"\u540C\u610F\u5E76\u8BFB\u53D6\u5386\u53F2",svnHistoryScope:"\u56FA\u5B9A revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u4FDD\u7559\u6700\u8FD1 200 \u6761\uFF0C\u53EF\u52A0\u8F7D\u66F4\u591A\u6216\u8FD4\u56DE",svnHistoryDateScope:"\u6309\u65E5\u671F\uFF08svn:date \u7684\u65E5\u671F\u90E8\u5206\uFF09\u5728\u5DF2\u52A0\u8F7D\u7A97\u53E3\u5185\u6709\u754C\u8FC7\u6EE4\uFF1BSVN REPORT \u4EC5\u652F\u6301 revision \u533A\u95F4\uFF0C\u6545\u4E0D\u5BA3\u79F0\u8DE8\u7A97\u53E3\u5B8C\u6574\u626B\u63CF\u3002",svnHistoricalDiff:"\u5386\u53F2\u53EA\u8BFB Diff",svnCopyHistory:"\u67E5\u770B\u590D\u5236\u6765\u6E90\u5386\u53F2",svnCopyOutside:"\u590D\u5236\u6765\u6E90\u5728\u6388\u6743\u8303\u56F4\u5916\uFF0C\u4E0D\u80FD\u6253\u5F00",svnCopyTraceScope:"\u5355\u72EC\u67E5\u770B\u8303\u56F4\u5185\u56FA\u5B9A\u6765\u6E90\uFF0C\u4ECD\u6B62\u4E8E\u5176\u590D\u5236\u8FB9\u754C\uFF1B\u4E0D\u662F\u81EA\u52A8\u8FFD\u6EAF",svnTraceScope:"\u6587\u4EF6\u8FFD\u6EAF\u5728\u590D\u5236\u8FB9\u754C\u505C\u6B62\uFF0C\u4E0D\u8DDF\u968F\u8303\u56F4\u5916\u6765\u6E90",svnGrantScope:"\u7F51\u7EDC\u6388\u6743\u4E94\u5206\u949F\u6709\u6548\uFF1B\u53EF\u968F\u65F6\u64A4\u9500\uFF0C\u5386\u53F2\u64CD\u4F5C\u4E0D\u4FEE\u6539\u5DE5\u4F5C\u526F\u672C\u3002",svnRevoke:"\u64A4\u9500 SVN \u7F51\u7EDC\u6388\u6743",svnIdentity:"\u67E5\u770B SVN \u672C\u5730\u5386\u53F2\u8BBF\u95EE\u8EAB\u4EFD",svnOfflineIdentity:"\u4EC5\u4ECE\u6388\u6743\u5DE5\u4F5C\u526F\u672C\u8BFB\u53D6\u672C\u5730\u5143\u6570\u636E\uFF0C\u4E0D\u53D1\u8D77\u8FDC\u7A0B\u8BF7\u6C42\u3002",svnRemoteDisabled:"\u8FDC\u7A0B SVN \u5386\u53F2\u4F20\u8F93\u5C1A\u672A\u542F\u7528\uFF1B\u6CA1\u6709\u7F51\u7EDC\u6388\u6743\u6216\u53EF\u7528\u8BBF\u95EE\u51ED\u636E\u3002\u672C\u9875\u4E0D\u662F\u5DF2\u6388\u6743\u5386\u53F2\u5165\u53E3\u3002",historyWindow:"\u5DF2\u52A0\u8F7D\u5386\u53F2\u7A97\u53E3\uFF08\u5E8F\u53F7\u5DE6\u95ED\u53F3\u5F00\uFF09",historyWindowScope:"\u5217\u8868\u53CA\u56FE\u6700\u591A\u4FDD\u7559200\u6761\uFF1B\u7EE7\u7EED\u52A0\u8F7D\u66FF\u6362\u8F83\u65B0\u884C\uFF0C\u8DE8\u7A97\u53E3\u8FB9\u4E0D\u8868\u793A\u5B8C\u6574\u56FE\u3002\u5C40\u90E8\u7B5B\u9009\u4EC5\u5F53\u524D\u7A97\u53E3\u3002",segments:"\u5206\u6BB5\u6D4F\u89C8\u5386\u53F2\u6B63\u6587",segmentBytes:"\u5B57\u8282\u8303\u56F4\uFF08\u5DE6\u95ED\u53F3\u5F00\uFF09",segmentScope:"\u4EC5\u56FA\u5B9A\u5386\u53F2 UTF-8 \u666E\u901A\u6587\u4EF6\uFF0C\u6700\u5927 16 MiB\uFF1B\u6BCF\u7247\u6700\u591A 64 KiB\uFF0C\u66FF\u6362\u663E\u793A\u4E0D\u7D2F\u79EF\u3002\u7247\u6BB5\u884C\u53F7\u4E0D\u662F\u539F\u6587\u4EF6\u884C\u53F7\uFF0C\u4E0D\u662F\u5168\u6587\u4EF6 Diff\u3002",blameOriginLine:"\u67E5\u770B\u6765\u6E90\u5386\u53F2\u884C",blameUnmapped:"\u65E0\u6CD5\u7CBE\u786E\u5B9A\u4F4D\u6765\u6E90\u884C",blamePrevious:"\u4E0A\u4E00\u884C\u9875",blameNext:"\u4E0B\u4E00\u884C\u9875",fileHistoryMergeBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u5408\u5E76\u63D0\u4EA4\uFF0C\u6B64\u5904\u505C\u6B62\uFF0C\u4E0D\u63A8\u65AD\u591A\u7236\u6765\u6E90",fileHistorySimilarity:"Git\u76F8\u4F3C\u5EA6",fileHistoryAmbiguous:"\u591A\u4E2A\u5019\u9009\u6765\u6E90\uFF0C\u6B64\u5904\u505C\u6B62\u8FFD\u6EAF",fileHistoryRenameLimit:"\u5DF2\u8FBE32\u6B21\u91CD\u547D\u540D\u786E\u8BA4\u4E0A\u9650\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u590D\u5236\u6216\u975E\u7CBE\u786E\u91CD\u547D\u540D\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryFollow:"\u8DDF\u968F\u91CD\u547D\u540D\uFF08\u7B2C\u4E00\u7236\u94FE\uFF09",fileHistoryFollowScope:"\u8DDF\u968FGit\u68C0\u51FA\u7684\u91CD\u547D\u540D\uFF1B50%\u4EE5\u4E0A\u76F8\u4F3C\u91CD\u547D\u540D\u989D\u5916\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u548C\u5408\u5E76\u5904\u505C\u6B62\u3002\u76F8\u4F3C\u5EA6\u4E0D\u662F\u8EAB\u4EFD\u4FDD\u8BC1\uFF1B\u6BCF\u6761\u8BB0\u5F55\u4F7F\u7528\u5F53\u65F6\u8DEF\u5F84\u3002",graphLaneLimit:"\u6CF3\u9053\u6700\u591A32\u6761\uFF1B\u8D85\u51FA\u90E8\u5206\u7701\u7565\u56FE\u5F62\uFF0C\u5B8C\u6574\u5DF2\u52A0\u8F7D\u8282\u70B9\u4E0E\u5173\u7CFB\u4ECD\u53EF\u5728\u6587\u5B57\u4E2D\u67E5\u770B\u3002",historyBranch:"\u5386\u53F2\u8D77\u70B9\uFF08\u672C\u5730\u5F15\u7528\uFF09",historyPinned:"\u56FA\u5B9A\u5FEB\u7167",historyBranchScope:"\u5F15\u7528\u7531\u4E0B\u65B9\u624B\u52A8\u52A0\u8F7D\uFF1B\u9009\u62E9\u540E\u56FA\u5B9A\u8BE5\u6B21OID\uFF0C\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5386\u53F2\u8D77\u70B9\u3002\u9009\u62E9HEAD\u91CD\u65B0\u8BFB\u53D6\u5F53\u524DHEAD\uFF0C\u4E0D\u5207\u6362\u5DE5\u4F5C\u533A\u3002",historyServerSearch:"\u5168\u5386\u53F2\u67E5\u8BE2",historySearchHelp:"\u67E5\u8BE2\u8303\u56F4\u4E0E\u9650\u5236",historyServerScope:"\u67E5\u8BE2\u56FA\u5B9A\u5FEB\u7167\u53EF\u8FBE\u7684\u5B8C\u6574\u5386\u53F2\uFF1B\u8BF4\u660E/\u4F5C\u8005\u4E3A\u5FFD\u7565\u5927\u5C0F\u5199\u7684\u5B57\u9762\u5339\u914D\uFF0C\u8DEF\u5F84\u4E3A\u7CBE\u786E\u8DEF\u5F84\u6216\u76EE\u5F55\uFF0C\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u3002\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u8FC7\u6EE4\u4E14\u542B\u8FB9\u754C\uFF0C\u4F7F\u7528 --since-as-filter \u907F\u514D\u975E\u5355\u8C03\u5386\u53F2\u88AB\u63D0\u524D\u622A\u65AD\uFF1B\u65E0\u65F6\u533A\u6309\u8FD0\u884C\u673A\u5668\u672C\u5730\u65F6\u533A\u89E3\u91CA\u3002\u5206\u9875\u4E0E\u8FD0\u884C\u65F6\u95F4\u6709\u754C\u3002",historyServer_message:"\u63D0\u4EA4\u8BF4\u660E",historyServer_author:"\u4F5C\u8005",historyServer_path:"\u8DEF\u5F84",historyServer_since:"\u5F00\u59CB\u65F6\u95F4\uFF08\u542B\uFF09",historyServer_until:"\u7ED3\u675F\u65F6\u95F4\uFF08\u542B\uFF09",historyServerApply:"\u6267\u884C\u67E5\u8BE2",historyServerClear:"\u6E05\u9664\u67E5\u8BE2",historyServerActive:"\u5F53\u524D\u5DF2\u63D0\u4EA4\u67E5\u8BE2",reviewView:"\u5BA1\u9605\u89C6\u56FE",workspaceView:"\u5DE5\u4F5C\u533A\u6539\u52A8",workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",conflictStages:"Index \u51B2\u7A81\u9636\u6BB5",conflictStagesScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u51B2\u7A81\u7684 Index \u9636\u6BB51\uFF0F2\uFF0F3\uFF1B\u9636\u6BB5\u7F16\u53F7\u53EA\u8868\u793A Index \u8EAB\u4EFD\uFF0C\u4E0D\u58F0\u79F0\u5408\u5E76\uFF0F\u53D8\u57FA\u5F52\u5C5E\u3002\u7F3A\u5931\u9636\u6BB5\u663E\u793A\u4E3A\u7A7A\uFF0C\u4E0D\u63A8\u65AD\u5185\u5BB9\uFF1B\u4E0D\u8BFB\u53D6\u5DE5\u4F5C\u6587\u4EF6\uFF0C\u4E0D\u89E3\u51B3\u51B2\u7A81\u3002",conflictStage1:"\u9636\u6BB51\uFF08BASE\uFF09",conflictStage2:"\u9636\u6BB52\uFF08ours\uFF09",conflictStage3:"\u9636\u6BB53\uFF08theirs\uFF09",conflictStagePresent:"\u5B58\u5728",conflictStageAbsent:"\u7F3A\u5931\uFF08\u663E\u793A\u4E3A\u7A7A\uFF09",conflictStageGitlink:"\u5B50\u6A21\u5757\u63D0\u4EA4\u5F15\u7528\uFF0C\u4E0D\u52A0\u8F7D\u5185\u5BB9",conflictStageSymlink:"\u94FE\u63A5\u76EE\u6807\u6587\u672C\uFF0C\u4E0D\u8DDF\u968F",conflictStageLeft:"\u5DE6\u4FA7\u9636\u6BB5",conflictStageRight:"\u53F3\u4FA7\u9636\u6BB5",conflictStageMissing:"\u6240\u9009\u9636\u6BB5\u7F3A\u5931\uFF0C\u6309\u7A7A\u5185\u5BB9\u6BD4\u8F83\uFF1B\u4E0D\u63A8\u65AD\u539F\u59CB\u5185\u5BB9\u3002",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",comparisonFocus:"\u4E13\u6CE8\u5BF9\u6BD4",comparisonRestore:"\u6062\u590D\u6587\u4EF6\u5217\u8868",commitSigned:"\u5DF2\u7B7E\u540D \xB7 {format}",commitSignatureUnverified:"\u4EC5\u68C0\u6D4B\u7B7E\u540D\u5934\uFF0C\u672A\u505A\u4FE1\u4EFB\u9A8C\u8BC1\u3002",commitCommitter:"\u63D0\u4EA4\u8005",stashTitle:"\u53EA\u8BFB Stash \u89C6\u56FE",stashScope:"\u4EC5\u8BFB\u53D6\u672C\u5730 refs/stash\uFF0C\u5217\u51FA\u5DF2\u6682\u5B58\u7684\u5DE5\u4F5C\u533A\u5FEB\u7167\uFF1B\u9009\u62E9\u540E\u590D\u7528\u63D0\u4EA4\u8BE6\u60C5\u53EA\u8BFB\u67E5\u770B\u5176\u5DEE\u5F02\u3002\u4E0D\u521B\u5EFA\u3001\u5E94\u7528\u3001\u5220\u9664\u6216\u5F39\u51FA stash\u3002",stashEmpty:"\u5F53\u524D\u4ED3\u5E93\u6CA1\u6709 stash\u3002",stash:"Stash",grep:"\u5185\u5BB9\u641C\u7D22",searchCenter:"\u7EDF\u4E00\u641C\u7D22",searchMode:"\u641C\u7D22\u7C7B\u578B",searchContentMode:"\u6587\u4EF6\u6B63\u6587",searchHistoryMode:"\u63D0\u4EA4\u5386\u53F2",grepTitle:"\u4ED3\u5E93\u5185\u5BB9\u641C\u7D22",grepScope:"\u5728\u5F53\u524D HEAD \u63D0\u4EA4\u6811\u5185\u505A\u6709\u754C\u5B57\u9762\u6587\u672C\u641C\u7D22\uFF08\u6700\u591A500\u6761\u5339\u914D\u3001\u6BCF\u6587\u4EF6100\u6761\u3001\u8F93\u51FA2MiB\uFF09\u3002\u53EA\u8BFB\uFF0C\u4E0D\u641C\u7D22\u672A\u63D0\u4EA4\u6539\u52A8\uFF0C\u4E0D\u65B0\u589E\u7F51\u7EDC\u6216\u5199\u64CD\u4F5C\u3002",grepQuery:"\u641C\u7D22\u5185\u5BB9",grepPlaceholder:"\u8F93\u5165\u8981\u641C\u7D22\u7684\u6587\u672C",grepRun:"\u641C\u7D22",grepCount:"\u5339\u914D {count} \u6761",grepEmpty:"\u6CA1\u6709\u5339\u914D\u3002",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",workspaceLargeScope:"Git\u5DE5\u4F5C\u533A\u5B8C\u6574UTF-8\u6BD4\u8F83\uFF0C\u6BCF\u4FA78MiB\uFF0F10\u4E07\u884C\uFF1B\u8BFB\u53D6\u671F\u95F4\u53D8\u5316\u4F1A\u62D2\u7EDD\u7ED3\u679C\uFF0C\u6210\u529F\u540E\u6587\u4EF6\u4ECD\u53EF\u88AB\u5916\u90E8\u4FEE\u6539\u3002",largeLoad:"\u52A0\u8F7D\u5B8C\u6574\u5927\u6587\u4EF6\u6BD4\u8F83",largeClose:"\u53D6\u6D88\u5927\u6587\u4EF6\u6A21\u5F0F",largeScope:"\u4EC5Git\u5386\u53F2UTF-8\u666E\u901A\u6587\u4EF6\uFF0C\u6BCF\u4FA7\u6700\u591A8MiB\u300110\u4E07\u884C\uFF1B\u4E0D\u662F\u5DE5\u4F5C\u533A\u6216SVN\u5927\u6587\u4EF6\u3002",diffPending:"\u6B63\u5728\u8BA1\u7B97\u5DEE\u5F02\uFF0C\u5C1A\u4E0D\u80FD\u5224\u65AD\u662F\u5426\u76F8\u540C\u3002",diffIncomplete:"\u5DEE\u5F02\u8BA1\u7B97\u672A\u5B8C\u6210\u6216\u8D85\u65F6\uFF0C\u5F53\u524D\u7ED3\u679C\u53EF\u80FD\u4E0D\u5B8C\u6574\u3002",diffComplete:"\u5DEE\u5F02\u8BA1\u7B97\u5B8C\u6210\u3002",largeFallback:"\u57FA\u7840\u89C6\u56FE\u53EA\u5C55\u793A\u6709\u754C\u7247\u6BB5\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5927\u6587\u4EF6\u5DEE\u5F02\u3002",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyBack:"\u5386\u53F2\u4E0A\u4E00\u9875",historyNavigationBack:"\u8FD4\u56DE\u4E0A\u4E00\u5904",historyNavigationScope:"\u4ECE\u67D0\u4E2A\u63D0\u4EA4\u7684\u6587\u4EF6\u5386\u53F2\u6216 Blame \u8DF3\u8F6C\u5230\u53E6\u4E00\u4E2A\u63D0\u4EA4\u540E\uFF0C\u201C\u8FD4\u56DE\u4E0A\u4E00\u5904\u201D\u4F1A\u56DE\u5230\u8DF3\u8F6C\u524D\u7684\u63D0\u4EA4\uFF0C\u5E76\u5C1D\u8BD5\u9884\u9009\u552F\u4E00\u5B8C\u5168\u5339\u914D\u7684\u8DEF\u5F84\uFF1B\u8FD9\u662F\u672C\u4F1A\u8BDD\u5185\u7684\u9875\u9762\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u8BFB\u53D6\u6216\u5199\u5165\u4ED3\u5E93\u3002",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryDateScope:"\u53EF\u9009\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u542B\u8FB9\u754C\u8FC7\u6EE4\uFF1B\u4E0E\u201C\u8DDF\u968F\u91CD\u547D\u540D\u201D\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\uFF0C\u62A5\u9519\u540E\u53D6\u6D88\u5176\u4E00\u5373\u53EF\u3002",pathHistory:"\u6B64\u8DEF\u5F84\u5386\u53F2",submoduleBadge:"\u5B50\u6A21\u5757",submoduleCheckout_initialized:"\u5B58\u5728\u672C\u5730Git\u6807\u8BB0\uFF08\u672A\u9A8C\u8BC1\u68C0\u51FA\u6709\u6548\u6027\uFF09",submoduleCheckout_uninitialized:"\u672C\u5730\u672A\u521D\u59CB\u5316",submoduleCheckout_absent:"\u672C\u5730\u76EE\u5F55\u7F3A\u5931",submoduleCheckout_unreadable:"\u672C\u5730\u72B6\u6001\u4E0D\u53EF\u8BFB",submodulePointerMoved:"\u6307\u9488\u5DF2\u79FB\u52A8\uFF08\u68C0\u51FAHEAD\u4E0E\u8BB0\u5F55\u4E0D\u540C\uFF09",submoduleDirty:"\u5DE5\u4F5C\u6811\u6709\u672A\u63D0\u4EA4\u6539\u52A8",submoduleScope:"\u9884\u89C8\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF1B\u5DF2\u521D\u59CB\u5316\u68C0\u51FA\u65F6\uFF0C\u6765\u81EA\u7236\u4ED3\u5E93\u81EA\u8EAB git status \u7684\u6307\u9488\u79FB\u52A8\uFF0F\u672A\u63D0\u4EA4\u6539\u52A8\uFF0F\u672A\u8DDF\u8E2A\u5185\u5BB9\u4F1A\u4E00\u5E76\u6807\u6CE8\uFF0C\u4E0D\u8FDB\u5165\u5B50\u6A21\u5757\u3001\u4E0D\u989D\u5916\u89E3\u6790\u5176HEAD\u3001\u4E0D\u52A0\u8F7D\u5185\u5BB9\u3001\u4E0D\u66F4\u65B0\u6216\u540C\u6B65\u3002",pathHistoryScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u5386\u53F2\u8DEF\u5F84\u5728\u8BE5\u63D0\u4EA4\u4E0B\u7684\u6587\u4EF6\u5386\u53F2\uFF1B\u8DEF\u5F84\u5FC5\u987B\u5B58\u5728\u4E8E\u8BE5\u63D0\u4EA4\u3002\u5173\u95ED\u8DDF\u968F\u65F6\u4E0D\u8DE8\u91CD\u547D\u540D\u3002",pathHistoryNoFollow:"\u672A\u8DDF\u968F\u91CD\u547D\u540D",pathHistoryFollowScope:"\u8DDF\u968F\u6CBF\u7528\u540C\u4E00\u4FDD\u5B88\u89C4\u5219\uFF1A\u7B2C\u4E00\u7236\u94FE\u3001Git\u76F8\u4F3C\u5EA6\u81F3\u5C1150%\u3001\u6BCF\u6B21\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u621632\u6B21\u786E\u8BA4\u4E0A\u9650\u5904\u505C\u6B62\uFF1B\u53EA\u9002\u7528\u4E8E\u63D0\u4EA4\u4E2D\u7684\u666E\u901A\u6587\u4EF6\u6216\u94FE\u63A5\u3002",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF0C\u5E76\u5C1D\u8BD5\u9009\u4E2D\u8BE5\u63D0\u4EA4\u53D8\u66F4\u4E2D\u8DEF\u5F84\u5B8C\u5168\u4E00\u81F4\u7684\u552F\u4E00\u6587\u4EF6\uFF08\u4E0D\u4F1A\u731C\u6D4B\u91CD\u547D\u540D\u6216\u65E7\u8DEF\u5F84\uFF09\uFF1B\u65E0\u552F\u4E00\u5339\u914D\u65F6\u4E0D\u9884\u9009\u6587\u4EF6\u3002\u9ED8\u8BA4\u4F7F\u7528\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG\u30018\u4F4D\u57FA\u7EBF/\u6E10\u8FDB JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757\u9759\u6001VP8\uFF0F\u65E0\u635FVP8L WebP\uFF08\u4E0D\u652F\u6301\u7B97\u672F\u7F16\u7801/CMYK JPEG\u3001\u6269\u5C55/\u52A8\u753B WebP\uFF09\uFF1B\u6BCF\u4FA7\u6700\u591A 2 MiB\u30011600 \u4E07\u50CF\u7D20\u3002\u5143\u6570\u636E\u88AB\u79FB\u9664\uFF0C\u4E0D\u9002\u7528\u4E8E\u8272\u5F69\u7CBE\u786E\u6027\u5BA1\u9605\u3002\u652F\u6301\u5386\u53F2\u63D0\u4EA4\u3001\u56FA\u5B9A A/B \u53CA Git \u5DE5\u4F5C\u533A\uFF1B\u6309\u6240\u9009\u6A21\u5F0F\u8BFB\u53D6 HEAD\u3001\u6682\u5B58\u533A\u6216\u5DE5\u4F5C\u6587\u4EF6\u3002\u51B2\u7A81\u56FE\u7247\u4E0D\u652F\u6301\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u672C\u5730\u5206\u652F\u3001\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\u53CA\u672C\u5730\u7F13\u5B58\u7684\u8FDC\u7A0B\u8DDF\u8E2A\u5F15\u7528\uFF0C\u5171\u6700\u591A1000\u6761\uFF1B\u4E0D\u8FDE\u63A5\u8FDC\u7AEF\u6216fetch\uFF0C\u8FDC\u7A0B\u7F13\u5B58\u53EF\u80FD\u8FC7\u671F\u3002\u91CD\u65B0\u52A0\u8F7D\u65F6\uFF0Corigin/HEAD \u663E\u793A\u5B83\u5F53\u524D\u6307\u5411\u7684\u672C\u5730\u63D0\u4EA4\uFF1B\u5DF2\u9009\u5386\u53F2\u548C\u7248\u672C\u4ECD\u56FA\u5B9A\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5F15\u7528\uFF08\u542B\u8FDC\u7A0B\u7F13\u5B58\uFF09",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528",updatePlugin:"\u66F4\u65B0\u63D2\u4EF6",reloadInterface:"\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0",reloadDone:"\u5DF2\u91CD\u65B0\u52A0\u8F7D VCS \u754C\u9762\uFF1B\u65E7\u8BF7\u6C42\u3001\u7F16\u8F91\u5668\u53CA SVN \u6388\u6743\u5DF2\u6E05\u7406\u3002",reloadRestart:"\u5DF2\u5B89\u88C5\u66F4\u65B0\u6D89\u53CA\u540E\u7AEF\uFF0C\u8BF7\u81EA\u884C\u91CD\u542F DSH \u540E\u5237\u65B0\u9875\u9762\u3002",reloadFailed:"\u52A0\u8F7D\u5931\u8D25\uFF0C\u5DF2\u4FDD\u7559\u539F\u754C\u9762\uFF1B\u8BF7\u91CD\u8BD5\u6216\u91CD\u542F DSH\u3002",updateScope:"\u6B64\u6309\u94AE\u4E0D\u81EA\u52A8\u5B89\u88C5\u3002\u8BF7\u5728\u63D2\u4EF6\u7BA1\u7406\u5668\u4E2D\u68C0\u67E5\u5B89\u88C5\u65B9\u5F0F\uFF1B\u5F53\u524D\u5BBF\u4E3B\u53EF\u80FD\u8981\u6C42\u5148\u5378\u8F7D\u518D\u5B89\u88C5\u3002\u4E5F\u53EF\u5728\u7EC8\u7AEF\u6309\u5B9E\u9645 profile \u548C\u5DF2\u6838\u9A8C\u7248\u672C\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u3002",updateRestart:"\u5B89\u88C5\u540E\u70B9\u51FB\u201C\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0\u201D\u3002\u4EC5\u5728\u540E\u7AEF\u6307\u7EB9\u4E00\u81F4\u65F6\u52A0\u8F7D\u65B0\u754C\u9762\uFF1B\u5426\u5219\u63D0\u793A\u91CD\u542F\u3002\u4E0D\u81EA\u52A8\u91CD\u542F DSH\u3002",updateManager:"\u6253\u5F00\u63D2\u4EF6\u7BA1\u7406",updateRelease:"\u67E5\u770B\u6700\u65B0\u53D1\u5E03"},en:{svnOfferExpired:"Network access offer expired. Retry manually and check consent again.",svnExpired:"SVN network consent expired; history requests stopped. Review and consent again.",svnConsentReview:"Review SVN network access",svnConsentScope:"Before consent, read local identity only. Access binds this repository, Session and cwd for five minutes; redirects and writes are not authorized.",svnConsentExplicit:"I consent to access the HTTPS SVN repository above",svnConsentApprove:"Consent and read history",svnHistoryScope:"SVN history at a fixed revision snapshot; retain up to 200 rows, load more or go back",svnHistoryDateScope:"Bounded in-window date filter on the svn:date day portion; SVN REPORT supports revision ranges only, so cross-window completeness is never claimed.",svnHistoricalDiff:"Historical read-only Diff",svnCopyHistory:"View copy source history",svnCopyOutside:"Copy source is outside the authorized scope",svnCopyTraceScope:"Separate fixed in-scope source history, stopping at its copy boundary; not automatic tracing",svnTraceScope:"File trace stops at copy boundaries and does not follow out-of-scope sources",svnGrantScope:"Network consent lasts five minutes; revoke at any time. History operations do not modify the working copy.",svnRevoke:"Revoke SVN network consent",svnIdentity:"Inspect local SVN history identity",svnOfflineIdentity:"Read local metadata from the authorized working copy only; no remote request.",svnRemoteDisabled:"Remote SVN history transport is not enabled; no network grant or usable access token. This is not an authorized history entry point.",historyWindow:"Loaded history window (start inclusive, end exclusive)",historyWindowScope:"List and graph retain at most 200 rows; more loads replace newer rows. Boundary edges are not a complete graph. Local filtering covers this window only.",segments:"Browse historical text segments",segmentBytes:"Byte range (start inclusive, end exclusive)",segmentScope:"Committed UTF-8 regular files up to 16 MiB; replaceable 64 KiB segments. Segment line numbers are not original file lines; this is not a full-file Diff.",blameOriginLine:"View origin historical line",blameUnmapped:"Origin line cannot be located precisely",blamePrevious:"Previous line page",blameNext:"Next line page",fileHistoryMergeBoundary:"Identity boundary: merge commit; stopped without inferring parent origin",fileHistorySimilarity:"Git similarity",fileHistoryAmbiguous:"Multiple candidate origins; tracing stopped here",fileHistoryRenameLimit:"32 rename confirmations reached; tracing stopped here",fileHistoryBoundary:"Identity boundary: copy or inexact rename; stopped here",fileHistoryFollow:"Follow renames (first-parent)",fileHistoryFollowScope:"Git-detected renames; similarities of 50% or more require a unique deletion/addition transition. Stops at ambiguity, copies and merges. Similarity is not an identity guarantee; rows use historical paths.",graphLaneLimit:"At most 32 lanes. Overflow geometry is omitted; loaded nodes and relations remain available as text.",historyBranch:"History tip (local reference)",historyPinned:"Pinned snapshot",historyBranchScope:"Load references manually below. Selection pins that OID; refreshing references does not move the history tip. Selecting HEAD reads current HEAD without checking out.",historyServerSearch:"Full history query",historySearchHelp:"Search scope and limits",historyServerScope:"Search all history reachable from the pinned snapshot. Message/author use case-insensitive literal matching; path is an exact path or directory, without rename following. Date bounds filter on committer date inclusively and use --since-as-filter to avoid early termination on non-monotonic history; boundary dates without a timezone use the runner local zone. Pagination and runtime are bounded.",historyServer_message:"Commit message",historyServer_author:"Author",historyServer_path:"Path",historyServer_since:"Since (inclusive)",historyServer_until:"Until (inclusive)",historyServerApply:"Run query",historyServerClear:"Clear query",historyServerActive:"Submitted query",reviewView:"Review view",workspaceView:"Working changes",workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",conflictStages:"Index conflict stages",conflictStagesScope:"Manually reads Index stages 1/2/3 of the selected conflict. Stage numbers are Index identities, not merge/rebase ownership claims. Missing stages show as empty and are never inferred; the working file is not read and the conflict is not resolved.",conflictStage1:"Stage 1 (BASE)",conflictStage2:"Stage 2 (ours)",conflictStage3:"Stage 3 (theirs)",conflictStagePresent:"present",conflictStageAbsent:"absent (shown empty)",conflictStageGitlink:"submodule commit reference, contents not loaded",conflictStageSymlink:"link target text, not followed",conflictStageLeft:"Left stage",conflictStageRight:"Right stage",conflictStageMissing:"A selected stage is absent, so it is compared as empty; original content is not inferred.",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",comparisonFocus:"Focus comparison",comparisonRestore:"Restore file list",commitSigned:"Signed \xB7 {format}",commitSignatureUnverified:"Signature presence detected; not trust-verified.",commitCommitter:"Committer",stashTitle:"Read-only stashes",stashScope:"Reads only the local refs/stash to list stashed working-copy snapshots; selecting one reuses commit details to review its diff read-only. Never creates, applies, drops, or pops a stash.",stashEmpty:"This repository has no stashes.",stash:"Stash",grep:"Search",searchCenter:"Search center",searchMode:"Search type",searchContentMode:"File contents",searchHistoryMode:"Commit history",grepTitle:"Repository content search",grepScope:"Bounded literal-text search in the current HEAD commit tree (max 500 matches, 100 per file, 2 MiB output). Read-only; never searches uncommitted changes, adds no network or write.",grepQuery:"Search text",grepPlaceholder:"Text to search",grepRun:"Search",grepCount:"{count} matches",grepEmpty:"No matches.",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",workspaceLargeScope:"Complete Git working-copy UTF-8 comparison: 8 MiB / 100000 lines per side. Changes during loading reject the result; external edits remain possible afterward.",largeLoad:"Load complete large-file comparison",largeClose:"Cancel large-file mode",largeScope:"Git historical UTF-8 regular files only: 8 MiB and 100000 lines per side, not working-copy or SVN large files.",diffPending:"Computing differences; equality is not yet known.",diffIncomplete:"Difference computation is incomplete or timed out; displayed results may be partial.",diffComplete:"Difference computation completed.",largeFallback:"The basic view shows bounded excerpts, not the complete large-file diff.",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyBack:"Previous history page",historyNavigationBack:"Back",historyNavigationScope:"After jumping from one commit's file history or Blame into another commit, \u201CBack\u201D returns to the commit you came from and tries to preselect the single exactly matching path; this is in-page context and reads or writes no repository state.",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryDateScope:"Optional date bounds filter on committer date inclusively; they cannot combine with rename following, so disable one if an error appears.",pathHistory:"History of this path",submoduleBadge:"submodule",submoduleCheckout_initialized:"local Git marker present (checkout validity not verified)",submoduleCheckout_uninitialized:"not initialized locally",submoduleCheckout_absent:"local directory missing",submoduleCheckout_unreadable:"local state unreadable",submodulePointerMoved:"pointer moved (checkout HEAD differs from recorded)",submoduleDirty:"uncommitted working-tree changes",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence; for an initialized checkout, pointer movement, uncommitted changes and untracked content reported by the parent repository's own git status are annotated, without entering the submodule, separately resolving its HEAD, loading contents, or updating anything.",pathHistoryScope:"Manually reads the file history of the selected historical path at that commit; the path must exist in that commit. Without following, renames are not crossed.",pathHistoryNoFollow:"renames not followed",pathHistoryFollowScope:"Following uses the same conservative rules: first parent, Git similarity of at least 50%, a unique deletion/addition confirmed each time, stopping at ambiguity, copies or the 32-confirmation cap; only committed regular files or links are supported.",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details and preselect the single exactly matching path in that commit; rename or old paths are never guessed, and a missing or ambiguous match preselects nothing. The first parent is used and no line is auto-located.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeBreadcrumbs:"Historical directory path",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG, 8-bit baseline or progressive JPEG regular files, or single-chunk static VP8 / lossless VP8L WebP (no arithmetic-coded/CMYK JPEG or extended/animated WebP); at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Supports commits, fixed A/B and Git working changes; HEAD, index or working bytes follow the selected mode. Conflicted images are unsupported.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches, commit tags and locally cached remote-tracking refs, at most 1000 total; no network or fetch. Remote caches may be stale. Reloading origin/HEAD shows its current local target; selected history and versions stay pinned. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local refs (including remote caches)",revisionRefsCount:"Selectable references loaded",updatePlugin:"Update plugin",reloadInterface:"Check and load installed update",reloadDone:"VCS interface reloaded; old requests, editors and SVN grants were cleaned up.",reloadRestart:"Installed update changes the backend. Restart DSH and refresh the page.",reloadFailed:"Reload failed. Previous interface retained; retry or restart DSH.",updateScope:"This button does not install packages. Check installation options in the plugin manager; this host may require uninstalling before reinstalling. Alternatively run this command with your actual profile and verified version.",updateRestart:"After installation, check and load the installed update. Reload is allowed only when backend fingerprints match; otherwise restart DSH manually. DSH is never restarted automatically.",updateManager:"Open plugin manager",updateRelease:"Latest release"}};function Wr(e,r,o,t){let i=e.target;if(!r?.contains(i)||e.defaultPrevented||e.isComposing||i?.closest?.(".monaco-editor")||i?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&i===o&&t)return"clear";let s=i?.isContentEditable||i?.closest?.('input,textarea,select,[role="textbox"]');if(s&&i!==o)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!s&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function _r(e,r){let o=r?[...r.querySelectorAll("button[data-vcs-item]")]:[],t=o.indexOf(e.target);if(t<0)return;let i;if(e.key==="ArrowDown")i=o[t+1];else if(e.key==="ArrowUp")i=o[t-1];else if(e.key==="Home")i=o[0];else if(e.key==="End")i=o.at(-1);else if(e.key==="ArrowRight"&&e.target.dataset.vcsDirectory==="closed"||e.key==="ArrowLeft"&&e.target.dataset.vcsDirectory==="open"){e.preventDefault(),e.target.click();return}else return;e.preventDefault(),i?.focus()}var Kr=e=>"dsh-vcs:project:v1:"+e;function Yr(e,r){if(!e)return"";try{let o=(r??globalThis.localStorage)?.getItem(Kr(e));return typeof o=="string"&&o.length<=1024?o:""}catch{return""}}function $r(e,r,o){if(!(!e||!r))try{(o??globalThis.localStorage)?.setItem(Kr(e),r)}catch{}}function Xr(e,r=""){return e.find(o=>o.id===r)?.id||e.find(o=>o.relativePath===".")?.id||e[0]?.id||""}var ot=(e,r)=>JSON.stringify([e,r]),it=(e,r=".")=>[e.type.toUpperCase(),e.relativePath==="."?r:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),bt=(e,r="all")=>e.type==="git"&&["staged","unstaged"].includes(r)?r:"all",Qr=(e="",r="")=>e===r?0:e<r?-1:1;function sr(e=[]){let r={id:"",name:"",directories:new Map,files:[],count:0};for(let t of e){let i=String(t.path||"").split("/").filter(Boolean);if(!i.length)continue;let s=r;for(let c of i.slice(0,-1)){let m=s.id?s.id+"/"+c:c;s.directories.has(c)||s.directories.set(c,{id:m,name:c,directories:new Map,files:[],count:0}),s=s.directories.get(c),s.count++}s.files.push(t)}let o=t=>({...t,directories:[...t.directories.values()].sort((i,s)=>Qr(i.name,s.name)).map(o),files:[...t.files].sort((i,s)=>Qr(i.path,s.path))});return o(r)}function Zr(e=[],r){let o=e.findIndex(t=>t.id===r);return{index:o<0?0:o+1,total:e.length}}function Rr(e=[],r,o){if(!e.length||!["previous","next"].includes(o))return null;let t=e.findIndex(c=>c.id===r),i=o==="next"?1:-1,s=t<0?o==="next"?-1:0:t;return e[(s+i+e.length)%e.length]||null}function eo(e=""){let r=String(e).split("/").filter(Boolean);return r.slice(0,-1).map((o,t)=>r.slice(0,t+1).join("/"))}function nr(e,r=[]){for(let o of e?.directories||[])r.push(o.id),nr(o,r);return r}function to(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function ro(e=[]){return e.reduce((r,o)=>{let t=to(o.status);return r.all++,r[t]=(r[t]||0)+1,r},{all:0})}function pi(e=[],r="",o="all"){let t=r.toLowerCase();return e.filter(i=>(o==="all"||to(i.status)===o)&&i.path.toLowerCase().includes(t)).sort((i,s)=>i.path.localeCompare(s.path))}function oo(e,r,o="",t="all"){return e.map(i=>({...r[i.id],repository:i,changes:pi(r[i.id]?.changes,o,t)}))}function io(e,r,o=""){if(!o||!e||e.cwd!==r.cwd)return r;let t=new Map(e.repositories.map(i=>[i.id,i]));for(let i of r.repositories)t.set(i.id,i);return{...r,repositories:[...t.values()],truncated:e.truncated||r.truncated,warnings:[...e.warnings||[],...r.warnings||[]]}}var so={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},no=e=>new URL("vcs-assets/"+e,document.baseURI).href;function ui(){return a.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},a.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),a.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var ao=["slots","layout","locale","connection","uiSession"];function lo(e,{initialView:r="workspace",onViewChange:o}={}){let t=e.locale.bind("local.vcs"),i=It(2),s=mt(e.connection,()=>t("error"));function c(n){let l=n.useSessions(u=>Object.values(u.byId).find(k=>(k.retainedBy.mainView??0)>0));return a.default.createElement(m,{key:JSON.stringify([l?.id,l?.cwd])},a.default.createElement(p,{session:l}))}class m extends a.default.Component{state={error:null};static getDerivedStateFromError(l){return{error:l}}render(){return this.state.error?a.default.createElement("section",{className:"vcs-root"},a.default.createElement("style",null,jt),a.default.createElement("div",{className:"vcs-message vcs-error"},t("error"),a.default.createElement("button",{onClick:()=>this.setState({error:null})},t("retry")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")))):this.props.children}}function p({session:n}){(0,a.useSyncExternalStore)(d=>e.locale.subscribe(d),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let l=n?.id,[u,k]=(0,a.useState)("all"),[f,C]=(0,a.useState)(0),[b,N]=(0,a.useState)(0),[y,w]=(0,a.useState)(null),[h,x]=(0,a.useState)({}),[v,H]=(0,a.useState)(()=>Yr(n?.cwd)),[L,g]=(0,a.useState)(0),[B,q]=(0,a.useState)(""),[se,ue]=(0,a.useState)(""),[A,O]=(0,a.useState)(null),[D,ce]=(0,a.useState)(null),[de,Fe]=(0,a.useState)(!1),[wt,be]=(0,a.useState)(!1),[ke,He]=(0,a.useState)(""),[Ae,xe]=(0,a.useState)(""),[P,X]=(0,a.useState)(""),[le,we]=(0,a.useState)(!1),[pe,Je]=(0,a.useState)(""),[st,lr]=(0,a.useState)("all"),[Te,cr]=(0,a.useState)(!0),[dr,St]=(0,a.useState)({}),[ze,ho]=(0,a.useState)(!0),[kt,vo]=(0,a.useState)(!1),[Ct,go]=(0,a.useState)(!1),[nt,We]=(0,a.useState)("content"),[pr,ur]=(0,a.useState)(0),[_e,mr]=(0,a.useState)(r),[fr,hr]=(0,a.useState)(null),[yo,bo]=(0,a.useState)(0),[vr,xo]=(0,a.useState)("pending"),[Nt,Et]=(0,a.useState)({added:0,deleted:0,count:0}),[fe,gr]=(0,a.useState)(!1),yr=(0,a.useRef)(null),br=(0,a.useRef)(null),Pe=(0,a.useRef)(null),Ht=(0,a.useRef)(null),at=(0,a.useRef)(null),At=(0,a.useRef)(null),xr=(0,a.useRef)(null),Ve=(0,a.useRef)(null),Pt=(0,a.useRef)(null),Lt=(0,a.useRef)(null),Dt=(0,a.useRef)(!1),lt=(0,a.useRef)(!1),Le=y?.repositories||[],De=Le.filter(d=>d.id===v),je=De.some(d=>d.type==="git"),Mt=De.some(d=>d.type==="svn"),Ke=(je||Mt)&&_e==="history",ct=je&&_e==="stash",dt=je&&_e==="grep",he=Ke||ct||dt;(0,a.useEffect)(()=>{o?.(_e)},[_e]);let Bt=d=>{Ve.current?.abort(),ce(null),O(null),xe(""),mr(d)};(0,a.useEffect)(()=>{Le.some(d=>d.id===v)&&$r(n?.cwd,v)},[n?.cwd,v,y]);let Ye=()=>{xr.current?.abort(),Ve.current?.abort(),ce(null),O(null),xe(""),We("content"),Et({added:0,deleted:0,count:0})},pt=()=>{lt.current=!1,Ye(),Pt.current?.abort(),Lt.current=y,w(null),x({}),ue(B.trim()),g(d=>d+1)},Ce=()=>{lt.current||(lt.current=!0,Ye(),Pt.current?.abort(),Lt.current=null,w(null),x({}),ue(""),g(d=>d+1))},wr=(d=!1)=>{d||N(M=>M+1),Dt.current=d,d||Ye(),d||x({}),C(M=>M+1)};(0,a.useEffect)(()=>{let d=new AbortController;return Pt.current=d,He(""),Fe(!!l),l&&s("vcs/repositories",{sessionId:l,...se?{subdirectory:se}:{}},d.signal).then(M=>{if(!d.signal.aborted){let W=io(Lt.current,M,se);lt.current=!1,H(te=>Xr(W.repositories,te)),w(W)}}).catch(M=>{d.signal.aborted||He(M.message)}).finally(()=>{d.signal.aborted||Fe(!1)}),()=>d.abort()},[l,L,se]),(0,a.useEffect)(()=>{let d=new AbortController,M=Dt.current;xr.current=d,Dt.current=!1,M||(x({}),xe(""));for(let W of De){let te=bt(W,u);i(()=>s("vcs/status",{sessionId:l,repositoryId:W.id,mode:te},d.signal),d.signal).then(me=>{d.signal.aborted||x(ve=>({...ve,[W.id]:{...me,mode:te}}))}).catch(me=>{if(!d.signal.aborted){if(me.code==="vcs/rediscover-required"){Ce();return}x(ve=>({...ve,[W.id]:{error:me.message,changes:[],mode:te}}))}})}return()=>d.abort()},[l,y,v,u,f]),(0,a.useEffect)(()=>{let d=M=>{M.target===window&&l&&v&&document.visibilityState==="visible"&&wr(!0)};return window.addEventListener("focus",d),()=>window.removeEventListener("focus",d)},[l,v,u]);let Me=Le.find(d=>d.id===A?.repositoryId),Ne=A?h[A.repositoryId]:null,Ot=JSON.stringify([l,y?.cwd,A?.repositoryId,u,A?.id]),Ie=fr?.key===Ot&&fr?.status===Ne;(0,a.useEffect)(()=>hr(null),[Ot,Ne,he]),(0,a.useEffect)(()=>{let d=new AbortController;return Ve.current=d,ce(null),xe(""),Et({added:0,deleted:0,count:0}),We("content"),be(!!A&&!!Ne),!he&&A&&Ne&&Me&&s("vcs/compare",{sessionId:l,repositoryId:A.repositoryId,mode:bt(Me,u),id:A.id,...Ie?{large:!0}:{}},d.signal).then(M=>{d.signal.aborted||ce(M)}).catch(M=>{if(!d.signal.aborted){if(M.code==="vcs/rediscover-required"){Ce();return}xe(M.message)}}).finally(()=>{d.signal.aborted||be(!1)}),()=>d.abort()},[A,Ne,l,u,he,Ie,yo]),(0,a.useEffect)(()=>{let d=!1,M,W=new AbortController;gr(!1),X("");let te=document.createElement("link");return te.rel="stylesheet",te.href=no("editor.css"),document.head.appendChild(te),ht(no("editor.js")+"?v="+encodeURIComponent(Ge)+"&retry="+pr,{signal:W.signal}).then(me=>{d||(M=me.createDiff(br.current,{onStats:Et,onComputation:ve=>{d||xo(ve)}}),Pe.current=M,gr(!0))}).catch(me=>{d||X(me.message)}),()=>{d=!0,W.abort(),M?.dispose(),Pe.current=null,te.remove()}},[pr]),(0,a.useEffect)(()=>{fe&&(!D||D.binary||he)&&Pe.current?.setContent({left:{text:""},right:{text:""}},"empty"),fe&&D&&!D.binary&&!he&&Pe.current?.setContent(D,JSON.stringify([l,y?.cwd,A?.repositoryId,u,A?.id,D.path]))},[fe,D,l,y,A,u,he]),(0,a.useEffect)(()=>{Pe.current?.options({sideBySide:ze,ignoreWhitespace:kt,wrap:Ct})},[fe,ze,kt,Ct]);let $e=oo(De,h,pe,st),Ue=$e.flatMap(d=>d.changes),wo=ro(Ne?.changes),Ft=Zr(Ue,A?.id),Sr=()=>{Je(""),lr("all")},So=async()=>{let d=D?.path||Ee?.path;if(d)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(d);else{let M=document.createElement("textarea");try{if(M.value=d,M.style.cssText="position:fixed;opacity:0",document.body.appendChild(M),M.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{M.remove()}}we(!0),window.setTimeout(()=>we(!1),1500)}catch{xe(t("copyFailed"))}};(0,a.useEffect)(()=>{let d=M=>{if(he)return;let W=Wr(M,yr.current,at.current,!!pe);W&&(M.preventDefault(),W==="search"?(at.current?.focus(),at.current?.select()):W==="clear"?Je(""):Tt(W))};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[pe,Ue,A,he]);let kr=d=>St(M=>{let W={...M};for(let te of $e)for(let me of nr(sr(te.changes)))W[te.repository.id+"\0"+me]=!d;return W}),ko=()=>{let d=Ee;!d||!A||(cr(!0),Sr(),St(M=>{let W={...M};for(let te of eo(d.path))W[A.repositoryId+"\0"+te]=!1;return W}),At.current=ot(A.repositoryId,d.id))};(0,a.useEffect)(()=>{let d=At.current;if(!d)return;let M=[...Ht.current?.querySelectorAll("button[data-vcs-change]")||[]].find(W=>W.dataset.vcsChange===d);M&&(M.scrollIntoView({block:"nearest"}),M.focus(),At.current=null)},[Te,pe,st,dr,$e]);let Tt=d=>{let M=Rr(Ue,A?.id,d);M&&(Ve.current?.abort(),ce(null),We("content"),O({repositoryId:v,id:M.id}))},Cr=de||De.some(d=>!h[d.id]),Ee=Ne?.changes?.find(d=>d.id===A?.id),Be=D?.properties,Vt=Be?[...new Set([...Object.keys(Be.left||{}),...Object.keys(Be.right||{})])].filter(d=>Be.left?.[d]!==Be.right?.[d]):[],Qe=d=>so[d?.status]||d?.status?.slice(0,1).toUpperCase()||"M",Nr=D?.binary?[D.left.label,D.right.label].filter(Boolean).join(" \u2194 "):"",qe=Ae||(wt?t("loading"):l?Cr&&!Ee?t("loading"):ke||(Le.length?Ee?D?.binary?t("binary")+(Nr?" "+t("binaryComparison",{files:Nr}):""):D?!fe&&!P?t("loading"):"":t("pick"):t("pick"):t("noRepo")):t("noSession")),Co=d=>_r(d,Ht.current),Er=({entry:d,compact:M=!1,depth:W=0})=>{let te=d.path.lastIndexOf("/");return a.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":ot(v,d.id),"aria-current":A?.repositoryId===v&&A?.id===d.id?"true":void 0,style:{paddingInlineStart:8+W*14},title:(d.oldPath?d.oldPath+" \u2192 ":"")+d.path+" \xB7 "+t(Qe(d)),onClick:()=>{Ve.current?.abort(),ce(null),We("content"),O({repositoryId:v,id:d.id})}},a.default.createElement("span",{className:"vcs-status","data-status":Qe(d)},Qe(d)),a.default.createElement(Gt,{submodule:d.submodule,t}),a.default.createElement("span",{className:"vcs-filename"},M?d.path.slice(te+1):d.path,d.oldPath&&a.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",d.oldPath)))},Hr=({node:d,repository:M,depth:W=0})=>a.default.createElement(a.default.Fragment,null,d.directories.map(te=>{let me=M.id+"\0"+te.id,ve=!!dr[me];return a.default.createElement(a.default.Fragment,{key:me},a.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":ve?"closed":"open","aria-expanded":!ve,style:{paddingInlineStart:8+W*14},onClick:()=>St(No=>({...No,[me]:!ve}))},a.default.createElement("span",{"aria-hidden":"true"},ve?"\u203A":"\u2304"),te.name,a.default.createElement("small",null,te.count)),!ve&&a.default.createElement(Hr,{node:te,repository:M,depth:W+1}))}),d.files.map(te=>a.default.createElement(Er,{key:ot(M.id,te.id),entry:te,compact:d.id!=="",depth:W})));return a.default.createElement("section",{ref:yr,className:"vcs-root","aria-label":t("title")},a.default.createElement("style",null,jt),a.default.createElement("header",{className:"vcs-top"},a.default.createElement(ui,null),a.default.createElement("h1",{className:"vcs-title"},t("title")),a.default.createElement("span",{className:"vcs-badge"},t("readonly")),a.default.createElement("span",{className:"vcs-spacer"}),a.default.createElement("select",{"aria-label":t("repositories"),value:v,disabled:de||!Le.length,onChange:d=>{Ye(),x({}),H(d.target.value)}},!Le.length&&a.default.createElement("option",{value:""},t("repositories")),Le.map(d=>a.default.createElement("option",{key:d.id,value:d.id},it(d,t("workspaceRoot"))))),a.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",a.default.createElement("select",{"aria-label":t("gitMode"),value:u,disabled:he||!De.some(d=>d.type==="git"),onChange:d=>{Ye(),x({}),k(d.target.value)}},["all","unstaged","staged"].map(d=>a.default.createElement("option",{key:d,value:d},t(d))))),a.default.createElement("button",{onClick:()=>wr(!1),disabled:Cr||!l},t("refresh")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")),a.default.createElement("div",{className:"vcs-path",title:y?.cwd||n?.cwd},t("session"),": ",y?.cwd||n?.cwd||"\u2014"),a.default.createElement("form",{className:"vcs-discovery",onSubmit:d=>{d.preventDefault(),pt()}},a.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:B,onChange:d=>q(d.target.value)}),a.default.createElement("button",{disabled:!l||de},t("rescan")),a.default.createElement("span",null,t("scanHint"))),y?.truncated&&a.default.createElement("div",{className:"vcs-notice"},t("truncated")),(y?.warnings||[]).map((d,M)=>a.default.createElement("div",{className:"vcs-notice",key:M},typeof d=="string"?d:d.message||JSON.stringify(d)))),De.filter(d=>d.type==="svn"&&!he).map(d=>a.default.createElement(a.default.Fragment,{key:JSON.stringify([l,d.id,L,f])},a.default.createElement(Jt,{repositoryId:d.id,sessionId:l,rpc:s,t,onRediscover:Ce}))),(je||Mt)&&a.default.createElement(a.default.Fragment,null,a.default.createElement("nav",{className:"vcs-review-views","aria-label":t("reviewView")},a.default.createElement("button",{"aria-pressed":!he,onClick:()=>mr("workspace")},t("workspaceView")),a.default.createElement("button",{"aria-pressed":Ke,"aria-expanded":Ke,onClick:()=>Bt("history")},t("history")),je&&a.default.createElement(a.default.Fragment,null,a.default.createElement("button",{"aria-pressed":ct,"aria-expanded":ct,onClick:()=>Bt("stash")},t("stash")),a.default.createElement("button",{"aria-pressed":dt,"aria-expanded":dt,onClick:()=>Bt("grep")},t("grep")))),Ke&&Mt&&a.default.createElement(Kt,{key:JSON.stringify([l,v,b,L]),sessionId:l,repositoryId:v,rpc:s,t,onRediscover:Ce}),Ke&&je&&a.default.createElement(rt,{key:JSON.stringify([l,v,b,L]),sessionId:l,repositoryId:v,rpc:s,t,onRediscover:Ce}),ct&&a.default.createElement(tr,{sessionId:l,repositoryId:v,rpc:s,t,onRediscover:Ce}),dt&&a.default.createElement(or,{sessionId:l,repositoryId:v,rpc:s,t,onRediscover:Ce})),a.default.createElement("div",{className:"vcs-body",hidden:he,"aria-label":t("workspaceView")},a.default.createElement("aside",{className:"vcs-files"},a.default.createElement("div",{className:"vcs-filter"},a.default.createElement("input",{ref:at,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:pe,onChange:d=>Je(d.target.value)}),(pe||st!=="all")&&a.default.createElement("button",{className:"vcs-clear-filter",onClick:Sr},t("clearFilters"))),a.default.createElement("div",{className:"vcs-status-filter","aria-label":t("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(d=>a.default.createElement("button",{key:d,"aria-pressed":st===d,onClick:()=>lr(d)},t(d==="all"?"allFiles":so[d]||"M")," ",a.default.createElement("small",null,wo[d]||0)))),a.default.createElement("div",{className:"vcs-count"},a.default.createElement("span",null,Ue.length," ",t("files")),a.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),a.default.createElement("button",{"aria-pressed":Te,onClick:()=>cr(!Te)},t(Te?"tree":"list"))),Te&&a.default.createElement("div",{className:"vcs-tree-actions"},a.default.createElement("button",{onClick:()=>kr(!0)},t("expandAll")),a.default.createElement("button",{onClick:()=>kr(!1)},t("collapseAll")),a.default.createElement("button",{onClick:ko,disabled:!Ee},t("revealSelected"))),a.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:Ht,onKeyDown:Co},$e.map(d=>{let M=d.repository;return a.default.createElement("section",{className:"vcs-repository",key:M.id,"aria-label":it(M,t("workspaceRoot"))},a.default.createElement("div",{className:"vcs-repository-heading",title:M.root},a.default.createElement("strong",null,it(M,t("workspaceRoot"))),a.default.createElement("small",null,M.type==="svn"?t("svnBase"):t(bt(M,u)))),d.error?a.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},d.error,a.default.createElement("button",{onClick:pt},t("rescan"))):h[M.id]?Te?a.default.createElement(Hr,{node:sr(d.changes),repository:M}):d.changes.map(W=>a.default.createElement(Er,{key:ot(M.id,W.id),entry:W})):a.default.createElement("div",{className:"vcs-message"},t("loading")),!d.error&&h[M.id]&&!d.changes.length&&a.default.createElement("div",{className:"vcs-message"},t(pe?"emptySearch":"clean")))}),!$e.length&&a.default.createElement("div",{className:"vcs-message"},de?t("loading"):ke||t(l?"noRepo":"noSession"),ke&&a.default.createElement("button",{onClick:pt},t("rescan"))))),a.default.createElement("main",{className:"vcs-detail"},a.default.createElement("div",{className:"vcs-filehead"},a.default.createElement("strong",{title:D?.path||Ee?.path},Me?it(Me,t("workspaceRoot"))+" / ":"",D?.path||Ee?.path||t("pick")),a.default.createElement("button",{className:"vcs-copy-path",disabled:!(D?.path||Ee?.path),onClick:So},t(le?"copied":"copyPath")),le&&a.default.createElement("span",{className:"vcs-sr-only",role:"status"},t("pathCopied")),a.default.createElement("span",{className:"vcs-spacer"}),D&&!D.binary&&fe&&a.default.createElement(a.default.Fragment,null,a.default.createElement("span",{className:"vcs-add"},"+",Nt.added),a.default.createElement("span",{className:"vcs-del"},"\u2212",Nt.deleted))),P&&a.default.createElement("div",{className:"vcs-notice",role:"status"},t("fallback")," ",a.default.createElement("button",{onClick:()=>ur(d=>d+1)},t("retry")),a.default.createElement("details",null,a.default.createElement("summary",null,t("diagnostics")),P)),D&&a.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},a.default.createElement("span",{className:"vcs-context-status","data-status":Qe(D)},t(Qe(D))),D.oldPath&&a.default.createElement("span",{className:"vcs-context-rename",title:D.oldPath+" \u2192 "+D.path},D.oldPath," ",a.default.createElement("b",null,"\u2192")," ",D.path),a.default.createElement("span",null,D.left.label||"\u2014"," ",a.default.createElement("b",null,"\u2194")," ",D.right.label||"\u2014"),(D.left.encoding||D.right.encoding)&&a.default.createElement("span",null,t("encoding"),": ",D.left.encoding||"\u2014"," / ",D.right.encoding||"\u2014")),D&&Me?.type==="git"&&a.default.createElement(Ze,{key:JSON.stringify([l,y?.cwd,A.repositoryId,u,A.id,f,Ne]),workspace:!0,sessionId:l,repositoryId:A.repositoryId,mode:u,id:A.id,rpc:s,t,onRediscover:Ce}),Me?.type==="git"&&(Ie||D?.notice?.includes("2 MiB"))&&a.default.createElement("div",{className:"vcs-notice"},a.default.createElement("span",null,t("workspaceLargeScope")),a.default.createElement("button",{onClick:()=>{Ve.current?.abort(),ce(null),hr(Ie?null:{key:Ot,status:Ne})}},t(Ie?"largeClose":"largeLoad")),Ie&&Ae&&a.default.createElement("button",{onClick:()=>bo(d=>d+1)},t("retry"))),D?.large&&a.default.createElement("p",{role:"status"},t(P?"largeFallback":vr==="complete"?"diffComplete":vr==="incomplete"?"diffIncomplete":"diffPending")),D?.notice&&a.default.createElement("div",{className:"vcs-notice"},D.notice),D?.submodule&&a.default.createElement("p",{role:"status"},t("submoduleScope")),D?.status==="conflicted"&&Me?.type==="git"&&a.default.createElement(qt,{key:JSON.stringify([l,A.repositoryId,u,A.id,f]),sessionId:l,repositoryId:A.repositoryId,mode:u,id:A.id,rpc:s,t,onRediscover:Ce}),Vt.length>0&&a.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(d=>a.default.createElement("button",{key:d,"aria-pressed":nt===d,onClick:()=>We(d)},t(d),d==="properties"?" ("+Vt.length+")":""))),a.default.createElement("div",{className:"vcs-labels"},a.default.createElement("span",null,D?.left.label||"\u2014",D?.left.encoding?" \xB7 "+D.left.encoding:""),a.default.createElement("span",null,D?.right.label||"\u2014",D?.right.encoding?" \xB7 "+D.right.encoding:"")),a.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!qe||nt!=="content",style:nt==="properties"?{display:"none"}:void 0},a.default.createElement("div",{className:"vcs-editor",ref:br,style:P?{display:"none"}:void 0}),P&&D&&!D.binary&&!qe&&a.default.createElement(Xe,{comparison:D,labels:ft(t)}),qe&&a.default.createElement("div",{className:"vcs-message "+(ke||Ae||P?"vcs-error":""),role:"status"},qe,(ke||Ae||P)&&a.default.createElement("button",{onClick:()=>P?ur(d=>d+1):pt()},t(P?"retry":"rescan")))),nt==="properties"&&a.default.createElement("div",{className:"vcs-properties"},a.default.createElement("table",null,a.default.createElement("thead",null,a.default.createElement("tr",null,a.default.createElement("th",null,t("properties")),a.default.createElement("th",null,D?.left.label||t("before")),a.default.createElement("th",null,D?.right.label||t("after")))),a.default.createElement("tbody",null,Vt.map(d=>a.default.createElement("tr",{key:d},a.default.createElement("th",null,d),a.default.createElement("td",null,Be.left?.[d]??"\u2014"),a.default.createElement("td",null,Be.right?.[d]??"\u2014")))))),a.default.createElement("footer",{className:"vcs-toolbar"},a.default.createElement("button",{disabled:!fe,"aria-pressed":ze,onClick:()=>ho(!ze)},t(ze?"side":"inline")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!fe,checked:kt,onChange:d=>vo(d.target.checked)}),t("whitespace")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!fe,checked:Ct,onChange:d=>go(d.target.checked)}),t("wrap")),a.default.createElement("span",{className:"vcs-spacer"}),fe&&a.default.createElement("span",null,Nt.count," ",t("changes")),a.default.createElement("button",{disabled:!fe||!D||!!qe,onClick:()=>Pe.current?.navigate("previous")},t("previous")),a.default.createElement("button",{disabled:!fe||!D||!!qe,onClick:()=>Pe.current?.navigate("next")},t("next")),Ft.index>0&&a.default.createElement("span",{className:"vcs-review-position"},t("reviewPosition",{index:Ft.index,total:Ft.total})),a.default.createElement("span",{className:"vcs-toolbar-separator"}),a.default.createElement("button",{title:t("fileShortcut"),disabled:!Ue.length,onClick:()=>Tt("previous")},t("previousFile")),a.default.createElement("button",{title:t("fileShortcut"),disabled:!Ue.length,onClick:()=>Tt("next")},t("nextFile"))))))}return c}function fi(e){if(e?.protocol!==1||!/^\d+\.\d+\.\d+$/.test(e.version)||!["backend","runningBackend","interface"].every(r=>/^[a-f0-9]{64}$/.test(e[r])))throw Error("Invalid frontend manifest");if(e.backend!==e.runningBackend)throw Object.assign(Error("Backend changed; restart DSH."),{code:"restart-required"});return e}async function co({base:e,fetcher:r=fetch,importer:o=s=>import(s),signal:t,requireModule:i}){let s=new URL("vcs-assets/frontend.json",e),c=await r(s,{credentials:"same-origin",cache:"no-store",redirect:"error",signal:t});if(!c.ok)throw Error("Frontend manifest HTTP "+c.status);if(!c.headers.get("content-type")?.includes("application/json"))throw Error("Invalid frontend manifest Content-Type");let m=fi(await c.json());t?.throwIfAborted();let p=new URL("interface.js",s);p.searchParams.set("hash",m.interface);let n=await o(p.href);t?.throwIfAborted();let l=n.default(i);if(typeof l.createPage!="function"||!l.dictionaries)throw Error("Invalid frontend module");return{ui:l,manifest:m}}var _=R(require("react"),1);var xt="@feng0531/dsh-vcs";function Oe(e){return typeof e=="string"&&/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(e)&&e.length<50}function po(e,r){if(!Oe(e)||!Oe(r))return!1;let o=e.split(".").map(BigInt),t=r.split(".").map(BigInt);for(let i=0;i<3;i++)if(o[i]!==t[i])return o[i]>t[i];return!1}function uo(e){if(!e?.ok)return{state:"unknown",message:"\u672A\u6536\u5230\u53EF\u9760\u7684\u66F4\u65B0\u7ED3\u679C\u3002\u5B89\u88C5\u53EF\u80FD\u4ECD\u5728\u8FDB\u884C\uFF0C\u8BF7\u5230 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u68C0\u67E5\uFF0C\u4E0D\u8981\u91CD\u590D\u70B9\u51FB\u66F4\u65B0\u3002"};let r=e.value;return r?.application==="failed"?{state:"failed",message:"\u66F4\u65B0\u5931\u8D25\uFF0C\u672A\u786E\u8BA4\u65B0\u7248\u751F\u6548\u3002\u8BF7\u5728 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u67E5\u770B\u8BE6\u60C5\uFF1A"+(r.error?.code||"\u5B89\u88C5\u9519\u8BEF")}:r?.application==="cancelled"?{state:"cancelled",message:"\u66F4\u65B0\u5DF2\u53D6\u6D88\uFF0C\u65B0\u7248\u672A\u786E\u8BA4\u751F\u6548\u3002"}:r?.application==="restart-required"?{state:"restart-required",message:"\u65B0\u7248\u5DF2\u5B89\u88C5\uFF0C\u4F46\u5F53\u524D DSH \u540E\u53F0\u4ECD\u5728\u8FD0\u884C\u65E7\u7248\u3002\u8BF7\u5148\u7ED3\u675F\u5F53\u524D\u6D4F\u89C8\uFF0C\u518D\u81EA\u884C\u91CD\u542F DSH \u5E76\u5237\u65B0\u9875\u9762\u3002\u63D2\u4EF6\u4E0D\u4F1A\u81EA\u52A8\u91CD\u542F\u3002"}:r?.application==="applied"?{state:"applied",message:"\u5BBF\u4E3B\u62A5\u544A\u66F4\u65B0\u5DF2\u5E94\u7528\u3002\u8BF7\u5237\u65B0\u9875\u9762\u52A0\u8F7D\u65B0\u7248\u754C\u9762\uFF1B\u82E5\u524D\u540E\u7AEF\u7248\u672C\u4ECD\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u624B\u52A8\u91CD\u542F DSH\u3002"}:{state:"unknown",message:"\u5BBF\u4E3B\u672A\u786E\u8BA4\u65B0\u7248\u5DF2\u751F\u6548\uFF0C\u8BF7\u5230 DSH\u300C\u63D2\u4EF6\u300D\u9875\u9762\u68C0\u67E5\u5B89\u88C5\u4E0E\u542F\u7528\u72B6\u6001\u3002"}}async function mo(e,r,{confirmed:o=!1,requestId:t}={}){if(!o)throw new Error("\u9700\u8981\u5148\u786E\u8BA4\u66F4\u65B0");if(!Oe(r?.latestVersion)||!po(r.latestVersion,r.runningVersion))throw new Error("\u6CA1\u6709\u53EF\u5B89\u88C5\u7684\u65B0\u7248\u672C");if(!e||typeof e.installBundle!="function")throw new Error("\u5F53\u524D DSH \u4E0D\u652F\u6301\u6B64\u66F4\u65B0\u63A5\u53E3\uFF0C\u8BF7\u5230\u300C\u63D2\u4EF6\u300D\u9875\u9762\u624B\u52A8\u66F4\u65B0");try{return uo(await e.installBundle(xt+"@"+r.latestVersion,{enabled:!1,registry:"https://registry.npmjs.org/",requestId:t}))}catch{return uo(null)}}function ar({rpc:e,manager:r,clientVersion:o,reloadBusy:t,onLock:i,onManager:s,t:c}){let[m,p]=(0,_.useState)(null),[n,l]=(0,_.useState)(null),[u,k]=(0,_.useState)(""),[f,C]=(0,_.useState)(""),[b,N]=(0,_.useState)(null),[y,w]=(0,_.useState)(!1),h=(0,_.useRef)(!1),x=(0,_.useRef)(!1),v=(0,_.useRef)(null),H=!!b&&["restart-required","applied","unknown"].includes(b.state);(0,_.useEffect)(()=>{h.current=!0;let B=new AbortController;return v.current=B,e("vcs/runtime-info",{},B.signal).then(q=>{B.signal.aborted||p(q)}).catch(q=>{B.signal.aborted||C(q.message)}),()=>{h.current=!1,v.current?.abort()}},[]);let L=async()=>{if(x.current||t||H)return;x.current=!0,v.current?.abort();let B=new AbortController;v.current=B,k("\u6B63\u5728\u68C0\u67E5\u66F4\u65B0"),C(""),l(null),w(!1);try{let q=await e("vcs/check-update",{},B.signal);if(h.current&&!B.signal.aborted){if(q.packageName!==xt||!Oe(q.latestVersion)||!Oe(q.runningVersion)||q.protocol!==1)throw Error("\u540E\u53F0\u8FD4\u56DE\u7684\u7248\u672C\u4FE1\u606F\u65E0\u6548");l(q),p(q),N(null)}}catch(q){h.current&&!B.signal.aborted&&C(q.message)}finally{x.current=!1,h.current&&k("")}},g=async()=>{if(!(x.current||t||!y||!n||H)){x.current=!0,k("\u6B63\u5728\u66F4\u65B0\u63D2\u4EF6\uFF0C\u8BF7\u52FF\u5173\u95ED\u9875\u9762"),C(""),i(!0);try{let B=await mo(r,n,{confirmed:y,requestId:crypto.randomUUID()});h.current&&(N(B),w(!1))}catch(B){h.current&&C(B.message)}finally{x.current=!1,i(!1),h.current&&k("")}}};return _.default.createElement("section",{style:{padding:12,flexShrink:0,maxHeight:"45%",overflow:"auto"},"aria-label":c("updatePlugin")},_.default.createElement("p",null,"\u754C\u9762\u7248\u672C\uFF1A",o," \xB7 \u540E\u53F0\u7248\u672C\uFF1A",m?.runningVersion||"\u5C1A\u672A\u8BFB\u53D6"),m&&(m.runningVersion!==o||m.protocol!==1)&&_.default.createElement("p",{role:"alert"},"\u754C\u9762\u4E0E\u540E\u53F0\u7248\u672C\u4E0D\u4E00\u81F4\u3002\u8BF7\u5237\u65B0\u9875\u9762\uFF1B\u82E5\u4ECD\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u624B\u52A8\u91CD\u542F DSH\u3002"),_.default.createElement("button",{disabled:!!u||t||H,onClick:L},"\u68C0\u67E5\u66F4\u65B0")," ",_.default.createElement("button",{disabled:!!u,onClick:s},c("updateManager")),_.default.createElement("a",{href:n?"https://github.com/f-e-n-g-0531/dsh-vcs/releases/tag/v"+n.latestVersion:"https://github.com/f-e-n-g-0531/dsh-vcs/releases/latest",target:"_blank",rel:"noopener noreferrer"},c("updateRelease")),n&&!H&&_.default.createElement("p",null,n.available?"\u53D1\u73B0\u65B0\u7248\u672C "+n.latestVersion:"\u5F53\u524D\u8FD0\u884C\u7248\u672C\u6CA1\u6709\u66F4\u65B0\u7684\u6B63\u5F0F\u7248\u672C\u3002"),n?.available&&!H&&_.default.createElement(_.default.Fragment,null,_.default.createElement("p",null,"\u66F4\u65B0\u4F1A\u4FEE\u6539\u5F53\u524D DSH \u7684\u63D2\u4EF6\u5B89\u88C5\u73AF\u5883\u3002\u8BF7\u5148\u5907\u4EFD\u914D\u7F6E\u3002\u66F4\u65B0\u5DF2\u6709\u63D2\u4EF6\u53EF\u80FD\u9700\u8981\u624B\u52A8\u91CD\u542F\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u542F\uFF1B\u4E0D\u652F\u6301\u6B64\u63A5\u53E3\u65F6\u8BF7\u5230\u63D2\u4EF6\u7BA1\u7406\u9875\u9762\u5904\u7406\u3002"),_.default.createElement("label",null,_.default.createElement("input",{type:"checkbox",checked:y,disabled:!!u||t,onChange:B=>w(B.target.checked)})," \u6211\u786E\u8BA4\u5C06\u6B64\u63D2\u4EF6\u66F4\u65B0\u5230 ",n.latestVersion),_.default.createElement("button",{disabled:!y||!!u||t,onClick:g},"\u66F4\u65B0\u5230 ",n.latestVersion)),u&&_.default.createElement("p",{role:"status"},u,_.default.createElement("progress",{"aria-label":"\u66F4\u65B0\u8FDB\u5EA6"})),f&&_.default.createElement("p",{role:"alert"},f),b&&_.default.createElement("p",{role:"status","data-update-state":b.state},b.message))}var hi=[...ao,"remote","remote.pluginManager"];function vi(e,{loader:r=co}={}){e.effect(()=>e.locale.register("local.vcs",ir));let o=e.locale.bind("local.vcs"),t=mt(e.connection,()=>o("error"));class i extends J.default.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?J.default.createElement(J.default.Fragment,null,J.default.createElement("p",{role:"alert"},o("reloadFailed")),J.default.createElement("button",{onClick:this.props.restore},o("retry"))):this.props.children}}function s(c){(0,J.useSyncExternalStore)(q=>e.locale.subscribe(q),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let[m,p]=(0,J.useState)(0),[n,l]=(0,J.useState)(!1),[u,k]=(0,J.useState)(""),[f,C]=(0,J.useState)(!1),[b,N]=(0,J.useState)(!1),y=(0,J.useRef)(null),w=(0,J.useRef)("workspace"),h=(0,J.useRef)(null),x=(0,J.useRef)(!0),v=(0,J.useRef)(!1),[H,L]=(0,J.useState)(()=>({Component:lo(e,{initialView:w.current,onViewChange:q=>{w.current=q}}),version:Ge}));(0,J.useEffect)(()=>(x.current=!0,()=>{x.current=!1,h.current?.abort()}),[]);let g=async()=>{if(v.current||b)return;v.current=!0,h.current?.abort();let q=new AbortController;h.current=q,l(!0),k("");try{let{ui:se,manifest:ue}=await r({base:document.baseURI,signal:q.signal,requireModule:O=>{if(O==="react")return J.default;throw Error("Unsupported interface dependency")}});if(!x.current||q.signal.aborted)return;let A=se.createPage(e,{initialView:w.current,onViewChange:O=>{w.current=O}});y.current=H,L({Component:A,version:ue.version}),p(O=>O+1),k(o("reloadDone"))}catch(se){x.current&&!q.signal.aborted&&k(o(se.code==="restart-required"?"reloadRestart":"reloadFailed")+" "+se.message)}finally{v.current=!1,x.current&&!q.signal.aborted&&l(!1)}},B=H.Component;return J.default.createElement("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0}},J.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:8,padding:8,flexShrink:0}},J.default.createElement("span",null,"VCS ",H.version),J.default.createElement("button",{disabled:n||b,onClick:()=>C(q=>!q),"aria-expanded":f},o("updatePlugin")),J.default.createElement("button",{disabled:n||b,onClick:g},o(n?"loading":"reloadInterface"))),J.default.createElement("div",{hidden:!f},J.default.createElement(ar,{rpc:t,manager:e.remote?.pluginManager,clientVersion:H.version,reloadBusy:n,onLock:N,onManager:()=>e.layout.selectPanel("plugins"),t:o})),u&&J.default.createElement("p",{role:"status",style:{padding:"0 12px",flexShrink:0}},u),J.default.createElement("div",{style:{flex:1,minHeight:0}},J.default.createElement(i,{key:m,restore:()=>{y.current&&(L(y.current),y.current=null),p(q=>q+1)}},J.default.createElement(B,{...c}))))}e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},s)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>o("title"),order:65},()=>J.default.createElement("span",{"aria-hidden":"true"},"\u25A3")))}
181
181
  return module.exports; }});
@@ -1 +1 @@
1
- {"protocol":1,"version":"0.4.4","backend":"9596307bc274407384ca5f7ebd4722bab5445c43b05b65cb4b9667960b6c86c6","interface":"dd6f0df09400c7d9f26956ba9c9f1fffd119fb15c6f6062d150111b5aaddec74"}
1
+ {"protocol":1,"version":"0.4.7","backend":"e60bcd9e6ad447e40a922fdc2343f261656653a242e1eeb23008daf61d23df1d","interface":"fb956ed6e5dab990874ca8a50119621adf439a919b8d007639ea2ba811484252"}
package/dist/interface.js CHANGED
@@ -176,6 +176,6 @@ var vr=Object.create;var lt=Object.defineProperty;var gr=Object.getOwnPropertyDe
176
176
  .vcs-root .vcs-svn-remote>p,.vcs-root .vcs-svn-remote>button{flex-shrink:0;margin:4px 16px;align-self:flex-start}
177
177
  .vcs-root .vcs-history-browser>.vcs-history-details>p{grid-column:2;grid-row:1;overflow:auto;padding:12px}
178
178
  @container(max-width:650px){.vcs-root .vcs-history-browser{grid-template-columns:minmax(130px,42%) minmax(0,1fr);grid-template-rows:minmax(120px,38%) minmax(0,1fr)}.vcs-root .vcs-history-browser .vcs-commit-sidebar,.vcs-root .vcs-history-browser .vcs-commit-review{padding:8px}}
179
- `;function Co(e,o){return async(i,t,r)=>{let s=await e.rpc.call("/vcs-rpc",i,t,r);if(!s.ok){let c=new Error(s.error?.message||String(s.error||o()));throw c.code=s.error?.code,c}return s.value}}function Ot(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let o=0,i=[];function t(){for(;o<e&&i.length;){let r=i.shift();if(r.signal?.removeEventListener("abort",r.abort),r.signal?.aborted){r.reject(new Error("Aborted"));continue}o++,Promise.resolve().then(()=>{if(r.signal?.aborted)throw new Error("Aborted");return r.run()}).then(r.resolve,r.reject).finally(()=>{o--,t()})}}return(r,s)=>new Promise((c,m)=>{let p={run:r,signal:s,resolve:c,reject:m,abort:null};if(p.abort=()=>{let n=i.indexOf(p);n>=0&&(i.splice(n,1),m(new Error("Aborted")))},s?.aborted){m(new Error("Aborted"));return}s?.addEventListener("abort",p.abort,{once:!0}),i.push(p),t()})}var re=R(require("react"),1);function No(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Eo(e="",o=""){let i=No(e),t=No(o),r=0;for(;r<i.length&&r<t.length&&i[r]===t[r];)r++;let s=0;for(;s<i.length-r&&s<t.length-r&&i[i.length-s-1]===t[t.length-s-1];)s++;let c=i.length-s,m=t.length-s,p=c-r,n=m-r,l=p&&n?(p+1)*(n+1):0,u=l>2e5,k=[],f=0;function C(b,E){f++,!(k.length>=2e3)&&k.push({left:b===null?null:{number:b+1,text:i[b]},right:E===null?null:{number:E+1,text:t[E]},kind:b===null?"insert":E===null?"delete":i[b]===t[E]?"equal":"replace"})}for(let b=0;b<r;b++)C(b,b);if(u||!p||!n)for(let b=0;b<Math.max(p,n);b++)C(b<p?r+b:null,b<n?r+b:null);else{let b=n+1,E=new Uint32Array(l);for(let h=p-1;h>=0;h--)for(let x=n-1;x>=0;x--)E[h*b+x]=i[r+h]===t[r+x]?E[(h+1)*b+x+1]+1:Math.max(E[(h+1)*b+x],E[h*b+x+1]);let y=0,w=0;for(;y<p||w<n;)y<p&&w<n&&i[r+y]===t[r+w]?C(r+y++,r+w++):y<p&&(w===n||E[(y+1)*b+w]>=E[y*b+w+1])?C(r+y++,null):C(null,r+w++)}for(let b=0;b<s;b++)C(c+b,m+b);return{rows:k,approximate:u,truncated:f>k.length,totalRows:f,omittedRows:f-k.length,leftLineCount:i.length,rightLineCount:t.length,lcsCells:u?0:l}}var Nr={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."},Ft={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Er={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Hr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Ar={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Ke({comparison:e,labels:o={}}){let i=e?.left?.text??"",t=e?.right?.text??"",r=(0,re.useMemo)(()=>Eo(i,t),[i,t]),s=m=>o[m]??Nr[m],c=(m,p,n)=>{let l=m&&n!=="equal";return re.default.createElement("td",{style:{...Ft,background:l?p==="left"?"#d6454520":"#259b4920":void 0}},re.default.createElement("div",{style:Er},re.default.createElement("span",{style:Hr},m?.number??""),re.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},l?p==="left"?"\u2212":"+":""),re.default.createElement("pre",{style:Ar},m?.text??"")))};return re.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},r.approximate&&re.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),r.truncated&&re.default.createElement("div",{role:"status",style:{padding:8}},s("truncated")," (",2e3," / ",r.totalRows,")"),re.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},re.default.createElement("thead",null,re.default.createElement("tr",null,re.default.createElement("th",{scope:"col",style:{...Ft,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),re.default.createElement("th",{scope:"col",style:{...Ft,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),re.default.createElement("tbody",null,r.rows.map((m,p)=>re.default.createElement("tr",{key:p,"data-kind":m.kind},c(m.left,"left",m.kind),c(m.right,"right",m.kind))))),!r.rows.length&&re.default.createElement("p",{style:{padding:8}},s("empty")))}var z=R(require("react"),1);function Ho(e,{width:o,height:i,signal:t,timeoutMs:r=1e4,createURL:s=p=>URL.createObjectURL(p),revokeURL:c=p=>URL.revokeObjectURL(p),createImage:m=()=>new Image}={}){return new Promise((p,n)=>{if(t?.aborted){n(t.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(o)||!Number.isInteger(i)||o<1||i<1||o>8192||i>8192||o*i>16e6||!Number.isFinite(r)||r<=0){n(new Error("Invalid image preview"));return}let l,u,k,f=!1,C=!1,b=()=>{C||(C=!0,u&&(u.src=""),l&&c(l))},E=()=>{clearTimeout(k),t?.removeEventListener("abort",w)},y=h=>{f||(f=!0,E(),b(),n(h))},w=()=>y(t.reason||new Error("Image cancelled"));try{l=s(e),u=m(),t?.addEventListener("abort",w,{once:!0}),k=setTimeout(()=>y(new Error("Image decode timed out")),r),u.src=l,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){w();return}if(u.naturalWidth!==o||u.naturalHeight!==i){y(new Error("Image dimensions mismatch"));return}f=!0,E(),p({url:l,dispose:b})}},y)}catch(h){y(h)}})}function Lr({side:e,sessionId:o,repositoryId:i,commit:t,parentIndex:r,base:s,target:c,workspace:m=!1,mode:p,id:n,rpc:l,t:u,onRediscover:k}){let[f,C]=(0,z.useState)(null),[b,E]=(0,z.useState)(""),[y,w]=(0,z.useState)(0);return(0,z.useEffect)(()=>{let h=new AbortController,x;return C(null),E(""),(async()=>{let g=await l(m?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",m?{sessionId:o,repositoryId:i,mode:p,id:n,side:e}:s?{sessionId:o,repositoryId:i,base:s,target:c,id:n,side:e}:{sessionId:o,repositoryId:i,commit:t,parentIndex:r,id:n,side:e},h.signal);if(h.signal.aborted)return;if(g.absent){C(g);return}if(!["image/png","image/jpeg","image/webp"].includes(g.mime)||typeof g.base64!="string"||g.base64.length>2796204||!Number.isInteger(g.bytes)||g.bytes<1||g.bytes>2097152)throw Error(u("imageInvalid"));let A=atob(g.base64);if(A.length!==g.bytes)throw Error(u("imageInvalid"));let D=new Blob([Uint8Array.from(A,v=>v.charCodeAt(0))],{type:g.mime});if(x=await Ho(D,{width:g.width,height:g.height,signal:h.signal}),h.signal.aborted){x.dispose();return}C({...g,url:x.url})})().catch(g=>{h.signal.aborted||(E(g.message),g.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),x?.dispose()}},[e,o,i,t,r,s,c,m,p,n,y]),z.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},z.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),b?z.default.createElement("p",{role:"alert"},b," ",z.default.createElement("button",{onClick:()=>w(h=>h+1)},u("retry"))):f?z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,z.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?z.default.createElement("p",null,u("imageAbsent")):z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),z.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&z.default.createElement("p",null,u("imageMetadata")))):z.default.createElement("p",{role:"status"},u("loading")))}function Ye(e){let[o,i]=(0,z.useState)(!1);return z.default.createElement("div",null,z.default.createElement("button",{"aria-expanded":o,onClick:()=>i(t=>!t)},e.t("imageCompare")),o&&z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,e.t("imageScope")),z.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(t=>z.default.createElement(Lr,{key:t,...e,side:t})))))}var J=R(require("react"),1);var ee=R(require("react"),1);function ct(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var he=require("react");function Ao({load:e,node:o,comparison:i,key:t,single:r=!1,onReady:s=()=>{},onError:c=()=>{},onComputation:m=()=>{}}){let p=new AbortController,n,l=!1,u=()=>{let f=n;n=void 0,f?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),e(p.signal))).then(f=>{l||(n=f.createDiff(o,{single:r,onComputation:C=>{l||m(C)}}),n.setContent(i,t),l||s(n))}).catch(f=>{try{u()}finally{l||c(f)}}),dispose(){l||(l=!0,p.abort(),u())}}}async function dt(e,{signal:o,fetcher:i=fetch,importer:t=r=>import(r)}={}){let r=await i(e,{credentials:"same-origin",cache:"no-cache",signal:o});if(!r.ok)throw new Error("Editor resource HTTP "+r.status+" ("+e+"). "+(r.status===401?"Refresh the authenticated DSH page.":r.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let s=r.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 r.arrayBuffer(),o?.throwIfAborted(),t(e)}var pt="0.4.4";function Lo({comparison:e,identity:o,enabled:i,single:t,line:r,sideBySide:s,ignoreWhitespace:c,wrap:m}){let p=(0,he.useRef)(null),n=(0,he.useRef)(null),[l,u]=(0,he.useState)(!1),[k,f]=(0,he.useState)(""),[C,b]=(0,he.useState)("pending");return(0,he.useEffect)(()=>{if(u(!1),b("pending"),f(""),!i)return;let E=h=>new URL("vcs-assets/"+h,document.baseURI).href,y=document.createElement("link");y.rel="stylesheet",y.href=E("editor.css"),document.head.appendChild(y);let w=Ao({node:p.current,comparison:e,key:o,single:t,load:h=>dt(E("editor.js")+"?v="+encodeURIComponent(pt)+"&retry=0",{signal:h}),onReady:h=>{n.current=h,u(!0)},onError:h=>f(h.message),onComputation:b});return()=>{n.current=null;try{w.dispose()}finally{y.remove()}}},[i,e,o,t]),(0,he.useEffect)(()=>{l&&t&&r&&n.current?.revealLine(r)},[l,t,r]),(0,he.useEffect)(()=>{l&&n.current?.options({sideBySide:s,ignoreWhitespace:c,wrap:m})},[l,s,c,m]),{node:p,viewer:n,ready:l,error:k,computation:C}}function ve({comparison:e,identity:o,t:i,single:t=!1,line:r=null}){let[s,c]=(0,ee.useState)(!0),[m,p]=(0,ee.useState)(!1),[n,l]=(0,ee.useState)(!1),[u,k]=(0,ee.useState)(!0),{node:f,viewer:C,ready:b,error:E,computation:y}=Lo({comparison:e,identity:o,enabled:u,single:t,line:r,sideBySide:s,ignoreWhitespace:m,wrap:n});return ee.default.createElement("div",{className:"vcs-history-viewer"},ee.default.createElement("div",{className:"vcs-history-viewer-toolbar"},ee.default.createElement("button",{"aria-pressed":u,onClick:()=>k(w=>!w)},i(u?"historyBasic":"historyAdvanced")),b&&!t&&ee.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},ee.default.createElement("button",{"aria-pressed":s,onClick:()=>c(w=>!w)},i(s?"side":"inline")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:m,onChange:w=>p(w.target.checked)}),i("whitespace")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:n,onChange:w=>l(w.target.checked)}),i("wrap")),ee.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},i("previous")),ee.default.createElement("button",{onClick:()=>C.current?.navigate("next")},i("next")))),u&&!b&&!E&&ee.default.createElement("p",{role:"status"},i("loading")),e.large&&!t&&b&&ee.default.createElement("p",{role:"status"},i(y==="complete"?"diffComplete":y==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!b&&ee.default.createElement("p",{role:"status"},i("largeFallback")),E&&ee.default.createElement("p",{role:"status"},i("fallback")," ",E),ee.default.createElement("div",{key:"editor-host",className:"vcs-history-editor-host",style:{position:"relative",height:"var(--vcs-history-editor-height, 360px)"}},ee.default.createElement("div",{ref:f,style:{position:"absolute",inset:0,visibility:b?"visible":"hidden"},"aria-hidden":!b}),!b&&ee.default.createElement(Ke,{comparison:e,labels:ct(i)})))}function Tt({sessionId:e,repositoryId:o,mode:i,id:t,rpc:r,t:s,onRediscover:c}){let[m,p]=(0,J.useState)(null),[n,l]=(0,J.useState)(""),[u,k]=(0,J.useState)(0),[f,C]=(0,J.useState)(1),[b,E]=(0,J.useState)(3);(0,J.useEffect)(()=>{let v=new AbortController;return p(null),l(""),r("vcs/conflict-stages",{sessionId:e,repositoryId:o,mode:i,id:t},v.signal).then(q=>{v.signal.aborted||p(q)}).catch(q=>{v.signal.aborted||(l(q.message),q.code==="vcs/rediscover-required"&&c())}),()=>v.abort()},[e,o,i,t,u]);let y={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},w=s("conflictStageMissing"),h=y[f],x=y[b],g=(0,J.useMemo)(()=>{if(!m)return null;let v=H=>m.stages.find(F=>F.stage===H),q=H=>{let F=v(H);return!F||!F.present?{text:"",label:y[H]}:{text:F.text,label:y[H],...F.binary?{binary:!0}:{},...F.encoding?{encoding:F.encoding}:{},...F.notice?{notice:F.notice}:{}}},de=q(f),ae=q(b),pe=[de.notice,ae.notice].filter(Boolean);return v(f)?.present&&v(b)?.present||pe.push(w),{path:m.path,left:de,right:ae,binary:!!(de.binary||ae.binary),...pe.length?{notice:[...new Set(pe)].join(" \xB7 ")}:{}}},[m,f,b,h,x,w]);if(n)return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",{role:"alert"},n," ",J.default.createElement("button",{onClick:()=>k(v=>v+1)},s("retry"))));if(!m||!g)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 A=v=>m.stages.find(q=>q.stage===v),D=g.binary&&!g.left.text&&!g.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(v=>J.default.createElement("li",{key:v},J.default.createElement("code",null,y[v])," \xB7 ",A(v)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),A(v)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),A(v)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),A(v)?.present&&A(v)?.notice&&" \xB7 "+A(v).notice))),J.default.createElement("label",null,s("conflictStageLeft")," ",J.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:v=>C(Number(v.target.value))},[1,2,3].map(v=>J.default.createElement("option",{key:v,value:v},y[v])))),J.default.createElement("label",null,s("conflictStageRight")," ",J.default.createElement("select",{"aria-label":s("conflictStageRight"),value:b,onChange:v=>E(Number(v.target.value))},[1,2,3].map(v=>J.default.createElement("option",{key:v,value:v},y[v])))),g.notice&&J.default.createElement("p",{role:"status"},g.notice),D?J.default.createElement("p",{role:"status"},s("binary")):J.default.createElement(ve,{key:JSON.stringify([t,f,b,m.snapshot]),comparison:g,identity:JSON.stringify([e,o,i,t,f,b,m.snapshot]),t:s}))}var Po=R(require("react"),1);function jt({submodule:e,t:o}){if(!e||typeof e.recorded!="string")return null;let i=e.checkout,t=[];e.pointerMoved&&t.push(o("submodulePointerMoved")),(e.dirty||e.untracked)&&t.push(o("submoduleDirty"));let r=[e.recorded+" \xB7 "+o("submoduleCheckout_"+i),...t].join(" \xB7 ");return Po.default.createElement("span",{className:"vcs-submodule","data-checkout":i,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:r},o("submoduleBadge")," ",e.recorded.slice(0,10),t.length?` \xB7 ${t.join(", ")}`:"")}var $=R(require("react"),1);function Vt(e){return $.default.createElement(Dr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Dr({sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r}){let[s,c]=(0,$.useState)(!1),[m,p]=(0,$.useState)(null),[n,l]=(0,$.useState)(""),[u,k]=(0,$.useState)(0);return(0,$.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),l(""),i("vcs/svn-identity",{sessionId:e,repositoryId:o},f.signal).then(C=>{f.signal.aborted||p(C)}).catch(C=>{f.signal.aborted||(l(C.message),C.code==="vcs/rediscover-required"&&r())}),()=>f.abort()},[s,e,o,u]),$.default.createElement("section",null,$.default.createElement("button",{"aria-expanded":s,onClick:()=>c(f=>!f)},t("svnIdentity")),s&&$.default.createElement($.default.Fragment,null,$.default.createElement("p",null,t("svnOfflineIdentity")),n?$.default.createElement("p",{role:"alert"},n," ",$.default.createElement("button",{onClick:()=>k(f=>f+1)},t("retry"))):m?$.default.createElement($.default.Fragment,null,$.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>$.default.createElement($.default.Fragment,{key:f},$.default.createElement("dt",null,f),$.default.createElement("dd",null,$.default.createElement("code",null,m[f]))))),$.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))):$.default.createElement("p",{role:"status"},t("loading"))))}function ut(e,o,{now:i=Date.now,schedule:t=setTimeout,cancel:r=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=i()||e-i()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,c=t(()=>{s&&(s=!1,o())},e-i());return()=>{s&&(s=!1,r(c))}}function Do(e,o=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<=o||e.expiresAt-o>3e5)throw Error("Invalid SVN consent response");return e}var oe=R(require("react"),1);var G=R(require("react"),1);function It(e){return G.default.createElement(Mr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Mr({sessionId:e,repositoryId:o,rpc:i,t,onApproved:r,onRediscover:s}){let[c,m]=(0,G.useState)(!1),[p,n]=(0,G.useState)(null),[l,u]=(0,G.useState)(!1),[k,f]=(0,G.useState)(""),[C,b]=(0,G.useState)(!1),[E,y]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!c)return;let x=new AbortController;return n(null),u(!1),f(""),b(!0),i("vcs/svn-describe",{sessionId:e,repositoryId:o},x.signal).then(g=>{x.signal.aborted||n(g)}).catch(g=>{x.signal.aborted||(f(g.message),g.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[c,e,o,E]);let[w,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!c||!p||p.expiresAt===void 0)return;let x=()=>{n(null),u(!1),h(0),b(!1),f(t("svnOfferExpired"))};try{return ut(p.expiresAt,x)}catch{x()}},[c,p]),(0,G.useEffect)(()=>{if(!w||!c||!p)return;let x=new AbortController;return b(!0),f(""),i("vcs/svn-approve",{sessionId:e,repositoryId:o,offer:p.offer,explicit:!0},x.signal).then(g=>{x.signal.aborted||r(g)}).catch(g=>{x.signal.aborted||(f(g.message),u(!1),g.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[w,c,p]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":c,onClick:()=>{h(0),m(x=>!x)}},t("svnConsentReview")),c&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,t("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{h(0),y(x=>x+1)}},t("retry"))),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(x=>G.default.createElement(G.default.Fragment,{key:x},G.default.createElement("dt",null,x),G.default.createElement("dd",null,G.default.createElement("code",null,p[x]))))),p.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:l,disabled:C,onChange:x=>u(x.target.checked)}),t("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!l,onClick:()=>h(x=>x+1)},t("svnConsentApprove"))):G.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},t("loading"))))}var S=R(require("react"),1);function Mo(e,{since:o,until:i}={}){let t=c=>{if(c==null||c==="")return null;if(typeof c!="string")throw new Error("Invalid SVN history date bound.");let m=c.trim();if(!m)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(m))throw new Error("Invalid SVN history date bound.");return m.slice(0,10)},r=t(o),s=t(i);return!r&&!s?e:Array.isArray(e)?e.filter(c=>{let m=c&&typeof c.date=="string"?c.date.trim():"",p=/^\d{4}-\d{2}-\d{2}/.test(m)?m.slice(0,10):"";return!(!p||r&&p<r||s&&p>s)}):[]}function mt(e,o,i){let t=i?[...e.commits.filter(r=>!o.commits.some(s=>s.id===r.id)),...o.commits]:o.commits;return{...o,windowEnd:i+o.commits.length,commits:t.slice(-200)}}function Bo(e,o,i){let t=mt({commits:(e?.entries||[]).map(r=>({...r,id:r.revision}))},{...o,commits:o.entries.map(r=>({...r,id:r.revision}))},i);return{...o,windowEnd:t.windowEnd,entries:t.commits.map(({id:r,...s})=>s)}}var Br=9223372036854775807n;function Or(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let o=BigInt(e);if(o>Br)throw new Error("SVN revision exceeds supported range");return o}function Gt(e){let o=Or(e);return o===0n?null:String(o-1n)}function qt(e){return S.default.createElement(Fr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function Fr({sessionId:e,repositoryId:o,token:i,snapshot:t,rpc:r,t:s,onRediscover:c}){let[m,p]=(0,S.useState)({cursor:t,offset:0,trail:[]}),[n,l]=(0,S.useState)(null),[u,k]=(0,S.useState)(null),[f,C]=(0,S.useState)(!0),[b,E]=(0,S.useState)(""),[y,w]=(0,S.useState)(0),[h,x]=(0,S.useState)(""),[g,A]=(0,S.useState)(""),{cursor:D,offset:v}=m;(0,S.useEffect)(()=>{let H=new AbortController;return C(!0),E(""),r("vcs/svn-log",{sessionId:e,repositoryId:o,token:i,snapshot:t,cursor:D,limit:50},H.signal).then(F=>{if(!H.signal.aborted){let P=Bo(n,F,v);l(P);let se=new Set((n?.entries||[]).filter(ne=>!P.entries.some(Me=>Me.revision===ne.revision)).map(ne=>ne.revision));k(ne=>se.has(ne)?null:ne)}}).catch(F=>{H.signal.aborted||(E(F.message),F.code==="vcs/rediscover-required"&&c())}).finally(()=>{H.signal.aborted||C(!1)}),()=>H.abort()},[D,v,y]);let q=()=>p(H=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...H.trail,{cursor:D,offset:v}].slice(-200)})),de=()=>{let H=m.trail.at(-1);H&&(k(null),l(null),p({...H,trail:m.trail.slice(0,-1)}))},ae=n?.entries||[],pe="";try{ae=Mo(ae,{since:h,until:g})}catch(H){pe=H.message}return S.default.createElement("section",{className:"vcs-history vcs-history-browser vcs-svn-history","aria-label":s("history"),"aria-busy":f},S.default.createElement("div",{className:"vcs-history-list"},S.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",t),S.default.createElement("details",{className:"vcs-help"},S.default.createElement("summary",null,s("historySearchHelp")),S.default.createElement("p",null,s("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((H,F)=>S.default.createElement("label",{key:H},s(H)," ",S.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(H),value:F?g:h,onChange:P=>{k(null),F?A(P.target.value):x(P.target.value)}})))),pe&&S.default.createElement("p",{role:"alert"},pe),!!n?.entries.length&&S.default.createElement("p",{role:"status"},s("historyWindow"),": ",n.windowEnd-n.entries.length,"\u2013",n.windowEnd),S.default.createElement("ol",{className:"vcs-commit-list"},ae.map(H=>S.default.createElement("li",{key:H.revision},S.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===H.revision,onClick:()=>k(H.revision)},S.default.createElement("span",{className:"vcs-commit-subject"},"r",H.revision," \xB7 ",H.message.split(/\r?\n/)[0])),S.default.createElement("div",{className:"vcs-commit-meta"},S.default.createElement("code",null,"r",H.revision)," \xB7 ",H.author," \xB7 ",S.default.createElement("time",{dateTime:H.date},H.date))))),f&&S.default.createElement("p",{role:"status"},s("loading")),b&&S.default.createElement("p",{role:"alert"},b," ",S.default.createElement("button",{onClick:()=>w(H=>H+1)},s("retry"))),!f&&!b&&!n?.entries.length&&S.default.createElement("p",null,s("historyEmpty")),!!n?.entries.length&&!ae.length&&S.default.createElement("p",{role:"status"},s("historyNoMatch")),!!m.trail.length&&S.default.createElement("button",{disabled:f,onClick:de},s("historyBack")),!b&&n?.nextRevision!=null&&S.default.createElement("button",{disabled:f,onClick:q},s("historyMore"))),S.default.createElement("div",{className:"vcs-history-details"},u&&S.default.createElement(Tr,{key:u,sessionId:e,repositoryId:o,token:i,snapshot:t,rpc:r,t:s,onRediscover:c,revision:u})))}function Tr({sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,rpc:s,t:c,onRediscover:m}){let[p,n]=(0,S.useState)(null),[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)(""),[C,b]=(0,S.useState)(0),[E,y]=(0,S.useState)(""),[w,h]=(0,S.useState)(!1);(0,S.useEffect)(()=>{let g=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r},g.signal).then(A=>{g.signal.aborted||n(A)}).catch(A=>{g.signal.aborted||(f(A.message),A.code==="vcs/rediscover-required"&&m())}),()=>g.abort()},[C]);let x=(p?.changes||[]).filter(g=>g.path.toLocaleLowerCase().includes(E.toLocaleLowerCase()));return S.default.createElement("section",{className:"vcs-commit-details"+(w?" vcs-commit-focused":""),"aria-label":c("commitDetails")},k?S.default.createElement("p",{role:"alert"},k," ",S.default.createElement("button",{onClick:()=>b(g=>g+1)},c("retry"))):p?S.default.createElement("div",{className:"vcs-commit-sidebar"},S.default.createElement("header",{className:"vcs-commit-summary"},S.default.createElement("h3",null,p.message?.split(/\r?\n/)[0]||"r"+r),S.default.createElement("code",{className:"vcs-commit-oid"},"r",r),S.default.createElement("p",null,p.author," \xB7 ",p.date),S.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},p.message),S.default.createElement("p",null,Gt(r)===null?c("commitRoot"):"r"+Gt(r)," \u2192 r",r)),S.default.createElement("aside",{className:"vcs-commit-picker"},S.default.createElement("label",null,c("commitFileSearch")," ",S.default.createElement("input",{"aria-label":c("commitFileSearch"),value:E,onChange:g=>{y(g.target.value),u(null)}})),S.default.createElement("span",null,x.length," / ",p.changes.length),S.default.createElement("ul",{className:"vcs-commit-files"},x.map(g=>S.default.createElement("li",{key:g.id},S.default.createElement("button",{disabled:g.kind!=="file","aria-pressed":l?.id===g.id&&l.mode==="compare",onClick:()=>u({id:g.id,mode:"compare"})},S.default.createElement("span",{className:"vcs-file-status"},g.action," \xB7 "),S.default.createElement("span",{className:"vcs-file-path",title:g.path},g.path,g.copyFromPath&&S.default.createElement("small",null,"\u2190 ",g.copyFromPath," @r",g.copyFromRevision))),g.kind==="file"&&S.default.createElement("div",{className:"vcs-svn-file-actions"},S.default.createElement("button",{onClick:()=>u({id:g.id,mode:"trace"})},c("fileHistory")),g.copyFromPath&&g.copyFromRevision&&!g.copySourceOutsideScope&&S.default.createElement("button",{onClick:()=>u({id:g.id,mode:"copytrace"})},c("svnCopyHistory")," \xB7 ",g.copyFromPath," @r",g.copyFromRevision),g.copySourceOutsideScope&&S.default.createElement("span",null,c("svnCopyOutside")))))),!!p.changes.length&&!x.length&&S.default.createElement("p",{role:"status"},c("emptySearch")),!p.changes.length&&S.default.createElement("p",null,c("commitNoChanges")))):S.default.createElement("p",{role:"status"},c("loading")),S.default.createElement("div",{className:"vcs-commit-review"},S.default.createElement("div",{className:"vcs-commit-comparison","aria-label":c("comparisonContext")},l&&S.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":w,onClick:()=>h(g=>!g)},c(w?"comparisonRestore":"comparisonFocus")),l?S.default.createElement(jr,{key:JSON.stringify(l),sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,rpc:s,t:c,onRediscover:m,...l}):S.default.createElement("p",{role:"status"},c("pick")))))}function jr({sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,rpc:s,t:c,onRediscover:m,id:p,mode:n}){let[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)({cursor:null,trail:[]}),[C,b]=(0,S.useState)(""),[E,y]=(0,S.useState)(0),{cursor:w,trail:h}=k;return(0,S.useEffect)(()=>{let x=new AbortController;return u(null),b(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,id:p,...w===null?{}:{cursor:w}},x.signal).then(g=>{x.signal.aborted||u(g)}).catch(g=>{x.signal.aborted||(b(g.message),g.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[w,E]),C?S.default.createElement("p",{role:"alert"},C," ",S.default.createElement("button",{onClick:()=>y(x=>x+1)},c("retry"))):l?n==="compare"?S.default.createElement("section",{className:"vcs-history-comparison"},S.default.createElement("header",{className:"vcs-comparison-heading"},S.default.createElement("h4",null,l.path),S.default.createElement("p",null,l.left?.label," \u2194 ",l.right?.label),l.notice&&S.default.createElement("p",{role:"status"},l.notice)),l.binary?S.default.createElement("p",null,c("binary")):S.default.createElement(ve,{comparison:l,identity:JSON.stringify([e,o,t,r,p]),t:c})):S.default.createElement("section",null,S.default.createElement("p",null,c(n==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",l.path," \xB7 peg r",l.pegRevision),S.default.createElement("ol",null,l.entries.map(x=>S.default.createElement("li",{key:x.revision},"r",x.revision," \xB7 ",x.message))),!!h.length&&S.default.createElement("button",{onClick:()=>f({cursor:h.at(-1),trail:h.slice(0,-1)})},c("historyBack")),l.nextRevision!==null&&S.default.createElement("button",{onClick:()=>f({cursor:l.nextRevision,trail:[...h,w].slice(-200)})},c("historyMore"))):S.default.createElement("p",{role:"status"},c("loading"))}function Jt(e){return oe.default.createElement(Vr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Vr({sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r}){let[s,c]=(0,oe.useState)(null),[m,p]=(0,oe.useState)(!1),[n,l]=(0,oe.useState)(""),[u,k]=(0,oe.useState)(0);(0,oe.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>i("vcs/svn-revoke",{sessionId:e,repositoryId:o,token:s.token})).catch(()=>{})}},[s,e,o]),(0,oe.useEffect)(()=>{if(s)try{return ut(s.expiresAt,()=>{c(null),k(0),p(!1),l(t("svnExpired"))})}catch{c(null),l(t("svnExpired"))}},[s]),(0,oe.useEffect)(()=>{if(!u||!s)return;let b=new AbortController;return p(!0),l(""),i("vcs/svn-revoke",{sessionId:e,repositoryId:o,token:s.token},b.signal).then(()=>{b.signal.aborted||c(null)}).catch(E=>{b.signal.aborted||(l(E.message),E.code==="vcs/rediscover-required"&&r())}).finally(()=>{b.signal.aborted||p(!1)}),()=>b.abort()},[u,s]);let f=b=>{try{Do(b),l(""),k(0),c(b)}catch(E){l(E.message)}},C=async(...b)=>{try{return await i(...b)}catch(E){throw E.code==="vcs/svn-consent-required"&&!b[2]?.aborted&&(c(null),k(0),l(t("svnExpired"))),E}};return oe.default.createElement("section",{className:"vcs-svn-remote"},!s&&n&&oe.default.createElement("p",{role:"status"},n),s?oe.default.createElement(oe.default.Fragment,null,oe.default.createElement("p",null,t("svnGrantScope")),oe.default.createElement("button",{disabled:m,onClick:()=>k(b=>b+1)},t("svnRevoke")),n&&oe.default.createElement("p",{role:"alert"},n),!m&&oe.default.createElement(qt,{sessionId:e,repositoryId:o,t,onRediscover:r,rpc:C,token:s.token,snapshot:s.snapshot})):oe.default.createElement(It,{sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r,onApproved:f}))}var N=R(require("react"),1);function Oo(e){let o=new Map;for(let i of e){let t=o.get(i.commit);t||(t={names:[],hidden:0},o.set(i.commit,t)),t.names.length<3?t.names.push(i.name):t.hidden++}return o}var O=R(require("react"),1);var I=R(require("react"),1);var K=R(require("react"),1);var Q=R(require("react"),1);function Ut(e){return Q.default.createElement(Ir,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function Ir({sessionId:e,repositoryId:o,commit:i,path:t,rpc:r,t:s,onRediscover:c}){let[m,p]=(0,Q.useState)(!1),[n,l]=(0,Q.useState)([0]),[u,k]=(0,Q.useState)(null),[f,C]=(0,Q.useState)(""),[b,E]=(0,Q.useState)(0),y=n.at(-1);(0,Q.useEffect)(()=>{if(!m)return;let h=new AbortController;return k(null),C(""),r("vcs/tree-segment",{sessionId:e,repositoryId:o,commit:i,path:t,offset:y},h.signal).then(x=>{h.signal.aborted||k(x)}).catch(x=>{h.signal.aborted||(C(x.message),x.code==="vcs/rediscover-required"&&c())}),()=>h.abort()},[m,y,e,o,i,t,b]);let w=(0,Q.useMemo)(()=>u?{path:t,left:{label:i,text:u.text},right:{label:i,text:u.text}}:null,[u,t,i]);return Q.default.createElement("section",null,Q.default.createElement("button",{"aria-expanded":m,onClick:()=>p(h=>!h)},s("segments")),m&&Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,s("segmentScope")),f?Q.default.createElement("p",{role:"alert"},f," ",Q.default.createElement("button",{onClick:()=>E(h=>h+1)},s("retry"))):u?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,s("segmentBytes"),": ",u.offset,"\u2013",u.endOffset," / ",u.totalBytes," \xB7 ",Q.default.createElement("code",null,u.oid)),Q.default.createElement("button",{disabled:n.length===1,onClick:()=>l(h=>h.slice(0,-1))},s("previous")),Q.default.createElement("button",{disabled:u.nextOffset===null,onClick:()=>l(h=>[...h,u.nextOffset])},s("next")),Q.default.createElement(ve,{single:!0,comparison:w,identity:JSON.stringify([e,o,i,t,y]),t:s})):Q.default.createElement("p",{role:"status"},s("loading"))))}var T=R(require("react"),1);function Gr({sessionId:e,repositoryId:o,commit:i,path:t,follow:r,since:s,until:c,rpc:m,t:p,onRediscover:n,onSelectCommit:l}){let[u,k]=(0,T.useState)({commits:[],nextOffset:null}),[f,C]=(0,T.useState)(0),[b,E]=(0,T.useState)(0),[y,w]=(0,T.useState)(!0),[h,x]=(0,T.useState)("");(0,T.useEffect)(()=>{let A=new AbortController;return w(!0),x(""),m("vcs/tree-history",{sessionId:e,repositoryId:o,commit:i,path:t,offset:f,limit:50,follow:r,...s?{since:s}:{},...c?{until:c}:{}},A.signal).then(D=>{A.signal.aborted||k(v=>({...D,commits:f?[...v.commits,...D.commits]:D.commits}))}).catch(D=>{A.signal.aborted||(x(D.message),D.code==="vcs/rediscover-required"&&n())}).finally(()=>{A.signal.aborted||w(!1)}),()=>A.abort()},[e,o,i,t,f,b,r,s,c]);let g=A=>p(A.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":A.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":A.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return T.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":y},T.default.createElement("p",null,p("pathHistoryScope")),T.default.createElement("p",{style:{overflowWrap:"anywhere"}},T.default.createElement("code",null,u.path||t)," \xB7 ",T.default.createElement("code",null,i),u.followsRenames!==void 0&&T.default.createElement(T.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),T.default.createElement("ol",null,u.commits.map(A=>T.default.createElement("li",{key:A.id},T.default.createElement("code",{title:A.id},A.id.slice(0,10))," \xB7 ",l?T.default.createElement("button",{onClick:()=>l(A.id,A.path||t)},A.subject):A.subject,T.default.createElement("div",null,A.boundary&&T.default.createElement("span",null,g(A)," "),A.path&&T.default.createElement("code",null,A.oldPath?A.oldPath+" \u2192 ":"",A.path)," ",A.similarity!==void 0&&T.default.createElement("span",null,p("fileHistorySimilarity"),": ",A.similarity,"% \xB7 "),A.author," \xB7 ",T.default.createElement("time",{dateTime:A.date},A.date))))),y&&T.default.createElement("p",{role:"status"},p("loading")),h&&T.default.createElement("p",{role:"alert"},h," ",T.default.createElement("button",{onClick:()=>E(A=>A+1)},p("retry"))),!y&&!h&&!u.commits.length&&T.default.createElement("p",null,p("historyEmpty")),u.truncated&&T.default.createElement("p",{role:"status"},p("historyLimit")),!h&&u.nextOffset!==null&&T.default.createElement("button",{disabled:y,onClick:()=>C(u.nextOffset)},p("historyMore")))}function zt(e){let[o,i]=(0,T.useState)(!1),[t,r]=(0,T.useState)(!1),[s,c]=(0,T.useState)(""),[m,p]=(0,T.useState)("");return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":o,onClick:()=>i(n=>!n)},e.t("pathHistory")),o&&T.default.createElement(T.default.Fragment,null,T.default.createElement("label",null,T.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>r(n.target.checked)}),e.t("fileHistoryFollow")),T.default.createElement("p",null,e.t("pathHistoryFollowScope")),T.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>T.default.createElement("label",{key:n},e.t(n)," ",T.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),T.default.createElement(Gr,{key:JSON.stringify([t,s.trim(),m.trim()]),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}function Qe({sessionId:e,repositoryId:o,commit:i,path:t,rpc:r,t:s,onRediscover:c,onClose:m,onSelectCommit:p,line:n=null}){let[l,u]=(0,K.useState)(null),[k,f]=(0,K.useState)(""),[C,b]=(0,K.useState)(0);(0,K.useEffect)(()=>{let y=new AbortController;return u(null),f(""),r("vcs/tree-file",{sessionId:e,repositoryId:o,commit:i,path:t},y.signal).then(w=>{y.signal.aborted||u(w)}).catch(w=>{y.signal.aborted||(f(w.message),w.code==="vcs/rediscover-required"&&c())}),()=>y.abort()},[e,o,i,t,C]);let E=(0,K.useMemo)(()=>l?{path:t,left:{label:i,text:l.text||""},right:{label:i,text:l.text||""}}:null,[l,t,i]);return K.default.createElement("section",{"aria-label":s("treePreview")},K.default.createElement("h4",null,t),K.default.createElement("button",{onClick:m},s("treeClose")),K.default.createElement("p",null,K.default.createElement("code",null,i)),k?K.default.createElement("p",{role:"alert"},k," ",K.default.createElement("button",{onClick:()=>b(y=>y+1)},s("retry"))):l?K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,K.default.createElement("code",null,l.oid)," \xB7 ",s("encoding"),": ",l.encoding||"\u2014"),n&&K.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,!l.text||n>l.text.split(`
179
+ `;function Co(e,o){return async(i,t,r)=>{let s=await e.rpc.call("/vcs-rpc",i,t,r);if(!s.ok){let c=new Error(s.error?.message||String(s.error||o()));throw c.code=s.error?.code,c}return s.value}}function Ot(e=2){if(!Number.isInteger(e)||e<1||e>2)throw new RangeError("Status concurrency must be 1 or 2");let o=0,i=[];function t(){for(;o<e&&i.length;){let r=i.shift();if(r.signal?.removeEventListener("abort",r.abort),r.signal?.aborted){r.reject(new Error("Aborted"));continue}o++,Promise.resolve().then(()=>{if(r.signal?.aborted)throw new Error("Aborted");return r.run()}).then(r.resolve,r.reject).finally(()=>{o--,t()})}}return(r,s)=>new Promise((c,m)=>{let p={run:r,signal:s,resolve:c,reject:m,abort:null};if(p.abort=()=>{let n=i.indexOf(p);n>=0&&(i.splice(n,1),m(new Error("Aborted")))},s?.aborted){m(new Error("Aborted"));return}s?.addEventListener("abort",p.abort,{once:!0}),i.push(p),t()})}var re=R(require("react"),1);function No(e){return e===""?[]:e.split(/\r\n|\n|\r/)}function Eo(e="",o=""){let i=No(e),t=No(o),r=0;for(;r<i.length&&r<t.length&&i[r]===t[r];)r++;let s=0;for(;s<i.length-r&&s<t.length-r&&i[i.length-s-1]===t[t.length-s-1];)s++;let c=i.length-s,m=t.length-s,p=c-r,n=m-r,l=p&&n?(p+1)*(n+1):0,u=l>2e5,k=[],f=0;function C(b,E){f++,!(k.length>=2e3)&&k.push({left:b===null?null:{number:b+1,text:i[b]},right:E===null?null:{number:E+1,text:t[E]},kind:b===null?"insert":E===null?"delete":i[b]===t[E]?"equal":"replace"})}for(let b=0;b<r;b++)C(b,b);if(u||!p||!n)for(let b=0;b<Math.max(p,n);b++)C(b<p?r+b:null,b<n?r+b:null);else{let b=n+1,E=new Uint32Array(l);for(let h=p-1;h>=0;h--)for(let x=n-1;x>=0;x--)E[h*b+x]=i[r+h]===t[r+x]?E[(h+1)*b+x+1]+1:Math.max(E[(h+1)*b+x],E[h*b+x+1]);let y=0,w=0;for(;y<p||w<n;)y<p&&w<n&&i[r+y]===t[r+w]?C(r+y++,r+w++):y<p&&(w===n||E[(y+1)*b+w]>=E[y*b+w+1])?C(r+y++,null):C(null,r+w++)}for(let b=0;b<s;b++)C(c+b,m+b);return{rows:k,approximate:u,truncated:f>k.length,totalRows:f,omittedRows:f-k.length,leftLineCount:i.length,rightLineCount:t.length,lcsCells:u?0:l}}var Nr={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."},Ft={verticalAlign:"top",padding:0,width:"50%",borderRight:"1px solid var(--border, #8884)"},Er={display:"flex",minHeight:"1.5em",fontFamily:"monospace",fontSize:12,lineHeight:1.5},Hr={flex:"0 0 6ch",textAlign:"right",paddingRight:8,opacity:.65,userSelect:"none"},Ar={margin:0,flex:1,minWidth:0,whiteSpace:"pre-wrap",overflowWrap:"anywhere",tabSize:4,font:"inherit"};function Ke({comparison:e,labels:o={}}){let i=e?.left?.text??"",t=e?.right?.text??"",r=(0,re.useMemo)(()=>Eo(i,t),[i,t]),s=m=>o[m]??Nr[m],c=(m,p,n)=>{let l=m&&n!=="equal";return re.default.createElement("td",{style:{...Ft,background:l?p==="left"?"#d6454520":"#259b4920":void 0}},re.default.createElement("div",{style:Er},re.default.createElement("span",{style:Hr},m?.number??""),re.default.createElement("span",{"aria-hidden":"true",style:{flex:"0 0 2ch",userSelect:"none"}},l?p==="left"?"\u2212":"+":""),re.default.createElement("pre",{style:Ar},m?.text??"")))};return re.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},r.approximate&&re.default.createElement("div",{role:"status",style:{padding:8}},s("approximate")),r.truncated&&re.default.createElement("div",{role:"status",style:{padding:8}},s("truncated")," (",2e3," / ",r.totalRows,")"),re.default.createElement("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",textAlign:"left"}},re.default.createElement("thead",null,re.default.createElement("tr",null,re.default.createElement("th",{scope:"col",style:{...Ft,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),re.default.createElement("th",{scope:"col",style:{...Ft,padding:8,overflowWrap:"anywhere"}},e?.right?.label||s("after")))),re.default.createElement("tbody",null,r.rows.map((m,p)=>re.default.createElement("tr",{key:p,"data-kind":m.kind},c(m.left,"left",m.kind),c(m.right,"right",m.kind))))),!r.rows.length&&re.default.createElement("p",{style:{padding:8}},s("empty")))}var z=R(require("react"),1);function Ho(e,{width:o,height:i,signal:t,timeoutMs:r=1e4,createURL:s=p=>URL.createObjectURL(p),revokeURL:c=p=>URL.revokeObjectURL(p),createImage:m=()=>new Image}={}){return new Promise((p,n)=>{if(t?.aborted){n(t.reason);return}if(!["image/png","image/jpeg","image/webp"].includes(e?.type)||e.size>2*1024*1024||!Number.isInteger(o)||!Number.isInteger(i)||o<1||i<1||o>8192||i>8192||o*i>16e6||!Number.isFinite(r)||r<=0){n(new Error("Invalid image preview"));return}let l,u,k,f=!1,C=!1,b=()=>{C||(C=!0,u&&(u.src=""),l&&c(l))},E=()=>{clearTimeout(k),t?.removeEventListener("abort",w)},y=h=>{f||(f=!0,E(),b(),n(h))},w=()=>y(t.reason||new Error("Image cancelled"));try{l=s(e),u=m(),t?.addEventListener("abort",w,{once:!0}),k=setTimeout(()=>y(new Error("Image decode timed out")),r),u.src=l,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){w();return}if(u.naturalWidth!==o||u.naturalHeight!==i){y(new Error("Image dimensions mismatch"));return}f=!0,E(),p({url:l,dispose:b})}},y)}catch(h){y(h)}})}function Lr({side:e,sessionId:o,repositoryId:i,commit:t,parentIndex:r,base:s,target:c,workspace:m=!1,mode:p,id:n,rpc:l,t:u,onRediscover:k}){let[f,C]=(0,z.useState)(null),[b,E]=(0,z.useState)(""),[y,w]=(0,z.useState)(0);return(0,z.useEffect)(()=>{let h=new AbortController,x;return C(null),E(""),(async()=>{let g=await l(m?"vcs/workspace-image":s?"vcs/revision-image":"vcs/commit-image",m?{sessionId:o,repositoryId:i,mode:p,id:n,side:e}:s?{sessionId:o,repositoryId:i,base:s,target:c,id:n,side:e}:{sessionId:o,repositoryId:i,commit:t,parentIndex:r,id:n,side:e},h.signal);if(h.signal.aborted)return;if(g.absent){C(g);return}if(!["image/png","image/jpeg","image/webp"].includes(g.mime)||typeof g.base64!="string"||g.base64.length>2796204||!Number.isInteger(g.bytes)||g.bytes<1||g.bytes>2097152)throw Error(u("imageInvalid"));let A=atob(g.base64);if(A.length!==g.bytes)throw Error(u("imageInvalid"));let D=new Blob([Uint8Array.from(A,v=>v.charCodeAt(0))],{type:g.mime});if(x=await Ho(D,{width:g.width,height:g.height,signal:h.signal}),h.signal.aborted){x.dispose();return}C({...g,url:x.url})})().catch(g=>{h.signal.aborted||(E(g.message),g.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),x?.dispose()}},[e,o,i,t,r,s,c,m,p,n,y]),z.default.createElement("section",{style:{flex:"1 1 280px",minWidth:0},"aria-label":u(e==="left"?"imageBefore":"imageAfter")},z.default.createElement("h5",null,u(e==="left"?"imageBefore":"imageAfter")),b?z.default.createElement("p",{role:"alert"},b," ",z.default.createElement("button",{onClick:()=>w(h=>h+1)},u("retry"))):f?z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,z.default.createElement("code",null,f.commit)," \xB7 ",f.path),f.absent?z.default.createElement("p",null,u("imageAbsent")):z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,f.mime,f.encoding?" \xB7 "+f.encoding:""," \xB7 ",f.width," \xD7 ",f.height," \xB7 ",f.bytes," B"),z.default.createElement("img",{src:f.url,alt:f.path,style:{maxWidth:"100%",maxHeight:480,objectFit:"contain"}}),f.metadataStripped&&z.default.createElement("p",null,u("imageMetadata")))):z.default.createElement("p",{role:"status"},u("loading")))}function Ye(e){let[o,i]=(0,z.useState)(!1);return z.default.createElement("div",null,z.default.createElement("button",{"aria-expanded":o,onClick:()=>i(t=>!t)},e.t("imageCompare")),o&&z.default.createElement(z.default.Fragment,null,z.default.createElement("p",null,e.t("imageScope")),z.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:16}},["left","right"].map(t=>z.default.createElement(Lr,{key:t,...e,side:t})))))}var J=R(require("react"),1);var ee=R(require("react"),1);function ct(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var he=require("react");function Ao({load:e,node:o,comparison:i,key:t,single:r=!1,onReady:s=()=>{},onError:c=()=>{},onComputation:m=()=>{}}){let p=new AbortController,n,l=!1,u=()=>{let f=n;n=void 0,f?.dispose()};return{done:Promise.resolve().then(()=>(p.signal.throwIfAborted(),e(p.signal))).then(f=>{l||(n=f.createDiff(o,{single:r,onComputation:C=>{l||m(C)}}),n.setContent(i,t),l||s(n))}).catch(f=>{try{u()}finally{l||c(f)}}),dispose(){l||(l=!0,p.abort(),u())}}}async function dt(e,{signal:o,fetcher:i=fetch,importer:t=r=>import(r)}={}){let r=await i(e,{credentials:"same-origin",cache:"no-cache",signal:o});if(!r.ok)throw new Error("Editor resource HTTP "+r.status+" ("+e+"). "+(r.status===401?"Refresh the authenticated DSH page.":r.status===404?"The editor route is not active in this DSH process.":"Check plugin asset registration."));let s=r.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 r.arrayBuffer(),o?.throwIfAborted(),t(e)}var pt="0.4.7";function Lo({comparison:e,identity:o,enabled:i,single:t,line:r,sideBySide:s,ignoreWhitespace:c,wrap:m}){let p=(0,he.useRef)(null),n=(0,he.useRef)(null),[l,u]=(0,he.useState)(!1),[k,f]=(0,he.useState)(""),[C,b]=(0,he.useState)("pending");return(0,he.useEffect)(()=>{if(u(!1),b("pending"),f(""),!i)return;let E=h=>new URL("vcs-assets/"+h,document.baseURI).href,y=document.createElement("link");y.rel="stylesheet",y.href=E("editor.css"),document.head.appendChild(y);let w=Ao({node:p.current,comparison:e,key:o,single:t,load:h=>dt(E("editor.js")+"?v="+encodeURIComponent(pt)+"&retry=0",{signal:h}),onReady:h=>{n.current=h,u(!0)},onError:h=>f(h.message),onComputation:b});return()=>{n.current=null;try{w.dispose()}finally{y.remove()}}},[i,e,o,t]),(0,he.useEffect)(()=>{l&&t&&r&&n.current?.revealLine(r)},[l,t,r]),(0,he.useEffect)(()=>{l&&n.current?.options({sideBySide:s,ignoreWhitespace:c,wrap:m})},[l,s,c,m]),{node:p,viewer:n,ready:l,error:k,computation:C}}function ve({comparison:e,identity:o,t:i,single:t=!1,line:r=null}){let[s,c]=(0,ee.useState)(!0),[m,p]=(0,ee.useState)(!1),[n,l]=(0,ee.useState)(!1),[u,k]=(0,ee.useState)(!0),{node:f,viewer:C,ready:b,error:E,computation:y}=Lo({comparison:e,identity:o,enabled:u,single:t,line:r,sideBySide:s,ignoreWhitespace:m,wrap:n});return ee.default.createElement("div",{className:"vcs-history-viewer"},ee.default.createElement("div",{className:"vcs-history-viewer-toolbar"},ee.default.createElement("button",{"aria-pressed":u,onClick:()=>k(w=>!w)},i(u?"historyBasic":"historyAdvanced")),b&&!t&&ee.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},ee.default.createElement("button",{"aria-pressed":s,onClick:()=>c(w=>!w)},i(s?"side":"inline")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:m,onChange:w=>p(w.target.checked)}),i("whitespace")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:n,onChange:w=>l(w.target.checked)}),i("wrap")),ee.default.createElement("button",{onClick:()=>C.current?.navigate("previous")},i("previous")),ee.default.createElement("button",{onClick:()=>C.current?.navigate("next")},i("next")))),u&&!b&&!E&&ee.default.createElement("p",{role:"status"},i("loading")),e.large&&!t&&b&&ee.default.createElement("p",{role:"status"},i(y==="complete"?"diffComplete":y==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!b&&ee.default.createElement("p",{role:"status"},i("largeFallback")),E&&ee.default.createElement("p",{role:"status"},i("fallback")," ",E),ee.default.createElement("div",{key:"editor-host",className:"vcs-history-editor-host",style:{position:"relative",height:"var(--vcs-history-editor-height, 360px)"}},ee.default.createElement("div",{ref:f,style:{position:"absolute",inset:0,visibility:b?"visible":"hidden"},"aria-hidden":!b}),!b&&ee.default.createElement(Ke,{comparison:e,labels:ct(i)})))}function Tt({sessionId:e,repositoryId:o,mode:i,id:t,rpc:r,t:s,onRediscover:c}){let[m,p]=(0,J.useState)(null),[n,l]=(0,J.useState)(""),[u,k]=(0,J.useState)(0),[f,C]=(0,J.useState)(1),[b,E]=(0,J.useState)(3);(0,J.useEffect)(()=>{let v=new AbortController;return p(null),l(""),r("vcs/conflict-stages",{sessionId:e,repositoryId:o,mode:i,id:t},v.signal).then(q=>{v.signal.aborted||p(q)}).catch(q=>{v.signal.aborted||(l(q.message),q.code==="vcs/rediscover-required"&&c())}),()=>v.abort()},[e,o,i,t,u]);let y={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},w=s("conflictStageMissing"),h=y[f],x=y[b],g=(0,J.useMemo)(()=>{if(!m)return null;let v=H=>m.stages.find(F=>F.stage===H),q=H=>{let F=v(H);return!F||!F.present?{text:"",label:y[H]}:{text:F.text,label:y[H],...F.binary?{binary:!0}:{},...F.encoding?{encoding:F.encoding}:{},...F.notice?{notice:F.notice}:{}}},de=q(f),ae=q(b),pe=[de.notice,ae.notice].filter(Boolean);return v(f)?.present&&v(b)?.present||pe.push(w),{path:m.path,left:de,right:ae,binary:!!(de.binary||ae.binary),...pe.length?{notice:[...new Set(pe)].join(" \xB7 ")}:{}}},[m,f,b,h,x,w]);if(n)return J.default.createElement("section",{"aria-label":s("conflictStages")},J.default.createElement("h4",null,s("conflictStages")),J.default.createElement("p",{role:"alert"},n," ",J.default.createElement("button",{onClick:()=>k(v=>v+1)},s("retry"))));if(!m||!g)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 A=v=>m.stages.find(q=>q.stage===v),D=g.binary&&!g.left.text&&!g.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(v=>J.default.createElement("li",{key:v},J.default.createElement("code",null,y[v])," \xB7 ",A(v)?.present?s("conflictStagePresent"):s("conflictStageAbsent"),A(v)?.kind==="gitlink"&&" \xB7 "+s("conflictStageGitlink"),A(v)?.kind==="symlink"&&" \xB7 "+s("conflictStageSymlink"),A(v)?.present&&A(v)?.notice&&" \xB7 "+A(v).notice))),J.default.createElement("label",null,s("conflictStageLeft")," ",J.default.createElement("select",{"aria-label":s("conflictStageLeft"),value:f,onChange:v=>C(Number(v.target.value))},[1,2,3].map(v=>J.default.createElement("option",{key:v,value:v},y[v])))),J.default.createElement("label",null,s("conflictStageRight")," ",J.default.createElement("select",{"aria-label":s("conflictStageRight"),value:b,onChange:v=>E(Number(v.target.value))},[1,2,3].map(v=>J.default.createElement("option",{key:v,value:v},y[v])))),g.notice&&J.default.createElement("p",{role:"status"},g.notice),D?J.default.createElement("p",{role:"status"},s("binary")):J.default.createElement(ve,{key:JSON.stringify([t,f,b,m.snapshot]),comparison:g,identity:JSON.stringify([e,o,i,t,f,b,m.snapshot]),t:s}))}var Po=R(require("react"),1);function jt({submodule:e,t:o}){if(!e||typeof e.recorded!="string")return null;let i=e.checkout,t=[];e.pointerMoved&&t.push(o("submodulePointerMoved")),(e.dirty||e.untracked)&&t.push(o("submoduleDirty"));let r=[e.recorded+" \xB7 "+o("submoduleCheckout_"+i),...t].join(" \xB7 ");return Po.default.createElement("span",{className:"vcs-submodule","data-checkout":i,"data-pointer-moved":e.pointerMoved?"true":void 0,"data-untracked":e.untracked?"true":void 0,title:r},o("submoduleBadge")," ",e.recorded.slice(0,10),t.length?` \xB7 ${t.join(", ")}`:"")}var $=R(require("react"),1);function Vt(e){return $.default.createElement(Dr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Dr({sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r}){let[s,c]=(0,$.useState)(!1),[m,p]=(0,$.useState)(null),[n,l]=(0,$.useState)(""),[u,k]=(0,$.useState)(0);return(0,$.useEffect)(()=>{if(!s)return;let f=new AbortController;return p(null),l(""),i("vcs/svn-identity",{sessionId:e,repositoryId:o},f.signal).then(C=>{f.signal.aborted||p(C)}).catch(C=>{f.signal.aborted||(l(C.message),C.code==="vcs/rediscover-required"&&r())}),()=>f.abort()},[s,e,o,u]),$.default.createElement("section",null,$.default.createElement("button",{"aria-expanded":s,onClick:()=>c(f=>!f)},t("svnIdentity")),s&&$.default.createElement($.default.Fragment,null,$.default.createElement("p",null,t("svnOfflineIdentity")),n?$.default.createElement("p",{role:"alert"},n," ",$.default.createElement("button",{onClick:()=>k(f=>f+1)},t("retry"))):m?$.default.createElement($.default.Fragment,null,$.default.createElement("dl",null,["origin","root","uuid","scope","revision"].map(f=>$.default.createElement($.default.Fragment,{key:f},$.default.createElement("dt",null,f),$.default.createElement("dd",null,$.default.createElement("code",null,m[f]))))),$.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))):$.default.createElement("p",{role:"status"},t("loading"))))}function ut(e,o,{now:i=Date.now,schedule:t=setTimeout,cancel:r=clearTimeout}={}){if(!Number.isSafeInteger(e)||e<=i()||e-i()>3e5)throw Error("Invalid SVN consent expiry");let s=!0,c=t(()=>{s&&(s=!1,o())},e-i());return()=>{s&&(s=!1,r(c))}}function Do(e,o=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<=o||e.expiresAt-o>3e5)throw Error("Invalid SVN consent response");return e}var oe=R(require("react"),1);var G=R(require("react"),1);function It(e){return G.default.createElement(Mr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Mr({sessionId:e,repositoryId:o,rpc:i,t,onApproved:r,onRediscover:s}){let[c,m]=(0,G.useState)(!1),[p,n]=(0,G.useState)(null),[l,u]=(0,G.useState)(!1),[k,f]=(0,G.useState)(""),[C,b]=(0,G.useState)(!1),[E,y]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!c)return;let x=new AbortController;return n(null),u(!1),f(""),b(!0),i("vcs/svn-describe",{sessionId:e,repositoryId:o},x.signal).then(g=>{x.signal.aborted||n(g)}).catch(g=>{x.signal.aborted||(f(g.message),g.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[c,e,o,E]);let[w,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!c||!p||p.expiresAt===void 0)return;let x=()=>{n(null),u(!1),h(0),b(!1),f(t("svnOfferExpired"))};try{return ut(p.expiresAt,x)}catch{x()}},[c,p]),(0,G.useEffect)(()=>{if(!w||!c||!p)return;let x=new AbortController;return b(!0),f(""),i("vcs/svn-approve",{sessionId:e,repositoryId:o,offer:p.offer,explicit:!0},x.signal).then(g=>{x.signal.aborted||r(g)}).catch(g=>{x.signal.aborted||(f(g.message),u(!1),g.code==="vcs/rediscover-required"&&s())}).finally(()=>{x.signal.aborted||b(!1)}),()=>x.abort()},[w,c,p]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":c,onClick:()=>{h(0),m(x=>!x)}},t("svnConsentReview")),c&&G.default.createElement(G.default.Fragment,null,G.default.createElement("p",null,t("svnConsentScope")),k&&G.default.createElement("p",{role:"alert"},k," ",G.default.createElement("button",{disabled:C,onClick:()=>{h(0),y(x=>x+1)}},t("retry"))),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(x=>G.default.createElement(G.default.Fragment,{key:x},G.default.createElement("dt",null,x),G.default.createElement("dd",null,G.default.createElement("code",null,p[x]))))),p.remoteEnabled?G.default.createElement(G.default.Fragment,null,G.default.createElement("label",null,G.default.createElement("input",{type:"checkbox",checked:l,disabled:C,onChange:x=>u(x.target.checked)}),t("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!l,onClick:()=>h(x=>x+1)},t("svnConsentApprove"))):G.default.createElement("p",{role:"status"},t("svnRemoteDisabled"))),C&&G.default.createElement("p",{role:"status"},t("loading"))))}var S=R(require("react"),1);function Mo(e,{since:o,until:i}={}){let t=c=>{if(c==null||c==="")return null;if(typeof c!="string")throw new Error("Invalid SVN history date bound.");let m=c.trim();if(!m)return null;if(!/^\d{4}-\d{2}-\d{2}(?:T\S{0,40})?$/.test(m))throw new Error("Invalid SVN history date bound.");return m.slice(0,10)},r=t(o),s=t(i);return!r&&!s?e:Array.isArray(e)?e.filter(c=>{let m=c&&typeof c.date=="string"?c.date.trim():"",p=/^\d{4}-\d{2}-\d{2}/.test(m)?m.slice(0,10):"";return!(!p||r&&p<r||s&&p>s)}):[]}function mt(e,o,i){let t=i?[...e.commits.filter(r=>!o.commits.some(s=>s.id===r.id)),...o.commits]:o.commits;return{...o,windowEnd:i+o.commits.length,commits:t.slice(-200)}}function Bo(e,o,i){let t=mt({commits:(e?.entries||[]).map(r=>({...r,id:r.revision}))},{...o,commits:o.entries.map(r=>({...r,id:r.revision}))},i);return{...o,windowEnd:t.windowEnd,entries:t.commits.map(({id:r,...s})=>s)}}var Br=9223372036854775807n;function Or(e){if(typeof e!="string"||e.length>19||!/^(0|[1-9][0-9]*)$/.test(e))throw new Error("Invalid SVN revision");let o=BigInt(e);if(o>Br)throw new Error("SVN revision exceeds supported range");return o}function Gt(e){let o=Or(e);return o===0n?null:String(o-1n)}function qt(e){return S.default.createElement(Fr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function Fr({sessionId:e,repositoryId:o,token:i,snapshot:t,rpc:r,t:s,onRediscover:c}){let[m,p]=(0,S.useState)({cursor:t,offset:0,trail:[]}),[n,l]=(0,S.useState)(null),[u,k]=(0,S.useState)(null),[f,C]=(0,S.useState)(!0),[b,E]=(0,S.useState)(""),[y,w]=(0,S.useState)(0),[h,x]=(0,S.useState)(""),[g,A]=(0,S.useState)(""),{cursor:D,offset:v}=m;(0,S.useEffect)(()=>{let H=new AbortController;return C(!0),E(""),r("vcs/svn-log",{sessionId:e,repositoryId:o,token:i,snapshot:t,cursor:D,limit:50},H.signal).then(F=>{if(!H.signal.aborted){let P=Bo(n,F,v);l(P);let se=new Set((n?.entries||[]).filter(ne=>!P.entries.some(Me=>Me.revision===ne.revision)).map(ne=>ne.revision));k(ne=>se.has(ne)?null:ne)}}).catch(F=>{H.signal.aborted||(E(F.message),F.code==="vcs/rediscover-required"&&c())}).finally(()=>{H.signal.aborted||C(!1)}),()=>H.abort()},[D,v,y]);let q=()=>p(H=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...H.trail,{cursor:D,offset:v}].slice(-200)})),de=()=>{let H=m.trail.at(-1);H&&(k(null),l(null),p({...H,trail:m.trail.slice(0,-1)}))},ae=n?.entries||[],pe="";try{ae=Mo(ae,{since:h,until:g})}catch(H){pe=H.message}return S.default.createElement("section",{className:"vcs-history vcs-history-browser vcs-svn-history","aria-label":s("history"),"aria-busy":f},S.default.createElement("div",{className:"vcs-history-list"},S.default.createElement("p",null,s("svnHistoryScope")," \xB7 r",t),S.default.createElement("details",{className:"vcs-help"},S.default.createElement("summary",null,s("historySearchHelp")),S.default.createElement("p",null,s("svnHistoryDateScope")),["historyServer_since","historyServer_until"].map((H,F)=>S.default.createElement("label",{key:H},s(H)," ",S.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(H),value:F?g:h,onChange:P=>{k(null),F?A(P.target.value):x(P.target.value)}})))),pe&&S.default.createElement("p",{role:"alert"},pe),!!n?.entries.length&&S.default.createElement("p",{role:"status"},s("historyWindow"),": ",n.windowEnd-n.entries.length,"\u2013",n.windowEnd),S.default.createElement("ol",{className:"vcs-commit-list"},ae.map(H=>S.default.createElement("li",{key:H.revision},S.default.createElement("button",{className:"vcs-commit-row","aria-pressed":u===H.revision,onClick:()=>k(H.revision)},S.default.createElement("span",{className:"vcs-commit-subject"},"r",H.revision," \xB7 ",H.message.split(/\r?\n/)[0])),S.default.createElement("div",{className:"vcs-commit-meta"},S.default.createElement("code",null,"r",H.revision)," \xB7 ",H.author," \xB7 ",S.default.createElement("time",{dateTime:H.date},H.date))))),f&&S.default.createElement("p",{role:"status"},s("loading")),b&&S.default.createElement("p",{role:"alert"},b," ",S.default.createElement("button",{onClick:()=>w(H=>H+1)},s("retry"))),!f&&!b&&!n?.entries.length&&S.default.createElement("p",null,s("historyEmpty")),!!n?.entries.length&&!ae.length&&S.default.createElement("p",{role:"status"},s("historyNoMatch")),!!m.trail.length&&S.default.createElement("button",{disabled:f,onClick:de},s("historyBack")),!b&&n?.nextRevision!=null&&S.default.createElement("button",{disabled:f,onClick:q},s("historyMore"))),S.default.createElement("div",{className:"vcs-history-details"},u&&S.default.createElement(Tr,{key:u,sessionId:e,repositoryId:o,token:i,snapshot:t,rpc:r,t:s,onRediscover:c,revision:u})))}function Tr({sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,rpc:s,t:c,onRediscover:m}){let[p,n]=(0,S.useState)(null),[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)(""),[C,b]=(0,S.useState)(0),[E,y]=(0,S.useState)(""),[w,h]=(0,S.useState)(!1);(0,S.useEffect)(()=>{let g=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r},g.signal).then(A=>{g.signal.aborted||n(A)}).catch(A=>{g.signal.aborted||(f(A.message),A.code==="vcs/rediscover-required"&&m())}),()=>g.abort()},[C]);let x=(p?.changes||[]).filter(g=>g.path.toLocaleLowerCase().includes(E.toLocaleLowerCase()));return S.default.createElement("section",{className:"vcs-commit-details"+(w?" vcs-commit-focused":""),"aria-label":c("commitDetails")},k?S.default.createElement("p",{role:"alert"},k," ",S.default.createElement("button",{onClick:()=>b(g=>g+1)},c("retry"))):p?S.default.createElement("div",{className:"vcs-commit-sidebar"},S.default.createElement("header",{className:"vcs-commit-summary"},S.default.createElement("h3",null,p.message?.split(/\r?\n/)[0]||"r"+r),S.default.createElement("code",{className:"vcs-commit-oid"},"r",r),S.default.createElement("p",null,p.author," \xB7 ",p.date),S.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},p.message),S.default.createElement("p",null,Gt(r)===null?c("commitRoot"):"r"+Gt(r)," \u2192 r",r)),S.default.createElement("aside",{className:"vcs-commit-picker"},S.default.createElement("label",null,c("commitFileSearch")," ",S.default.createElement("input",{"aria-label":c("commitFileSearch"),value:E,onChange:g=>{y(g.target.value),u(null)}})),S.default.createElement("span",null,x.length," / ",p.changes.length),S.default.createElement("ul",{className:"vcs-commit-files"},x.map(g=>S.default.createElement("li",{key:g.id},S.default.createElement("button",{disabled:g.kind!=="file","aria-pressed":l?.id===g.id&&l.mode==="compare",onClick:()=>u({id:g.id,mode:"compare"})},S.default.createElement("span",{className:"vcs-file-status"},g.action," \xB7 "),S.default.createElement("span",{className:"vcs-file-path",title:g.path},g.path,g.copyFromPath&&S.default.createElement("small",null,"\u2190 ",g.copyFromPath," @r",g.copyFromRevision))),g.kind==="file"&&S.default.createElement("div",{className:"vcs-svn-file-actions"},S.default.createElement("button",{onClick:()=>u({id:g.id,mode:"trace"})},c("fileHistory")),g.copyFromPath&&g.copyFromRevision&&!g.copySourceOutsideScope&&S.default.createElement("button",{onClick:()=>u({id:g.id,mode:"copytrace"})},c("svnCopyHistory")," \xB7 ",g.copyFromPath," @r",g.copyFromRevision),g.copySourceOutsideScope&&S.default.createElement("span",null,c("svnCopyOutside")))))),!!p.changes.length&&!x.length&&S.default.createElement("p",{role:"status"},c("emptySearch")),!p.changes.length&&S.default.createElement("p",null,c("commitNoChanges")))):S.default.createElement("p",{role:"status"},c("loading")),S.default.createElement("div",{className:"vcs-commit-review"},S.default.createElement("div",{className:"vcs-commit-comparison","aria-label":c("comparisonContext")},l&&S.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":w,onClick:()=>h(g=>!g)},c(w?"comparisonRestore":"comparisonFocus")),l?S.default.createElement(jr,{key:JSON.stringify(l),sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,rpc:s,t:c,onRediscover:m,...l}):S.default.createElement("p",{role:"status"},c("pick")))))}function jr({sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,rpc:s,t:c,onRediscover:m,id:p,mode:n}){let[l,u]=(0,S.useState)(null),[k,f]=(0,S.useState)({cursor:null,trail:[]}),[C,b]=(0,S.useState)(""),[E,y]=(0,S.useState)(0),{cursor:w,trail:h}=k;return(0,S.useEffect)(()=>{let x=new AbortController;return u(null),b(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,id:p,...w===null?{}:{cursor:w}},x.signal).then(g=>{x.signal.aborted||u(g)}).catch(g=>{x.signal.aborted||(b(g.message),g.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[w,E]),C?S.default.createElement("p",{role:"alert"},C," ",S.default.createElement("button",{onClick:()=>y(x=>x+1)},c("retry"))):l?n==="compare"?S.default.createElement("section",{className:"vcs-history-comparison"},S.default.createElement("header",{className:"vcs-comparison-heading"},S.default.createElement("h4",null,l.path),S.default.createElement("p",null,l.left?.label," \u2194 ",l.right?.label),l.notice&&S.default.createElement("p",{role:"status"},l.notice)),l.binary?S.default.createElement("p",null,c("binary")):S.default.createElement(ve,{comparison:l,identity:JSON.stringify([e,o,t,r,p]),t:c})):S.default.createElement("section",null,S.default.createElement("p",null,c(n==="copytrace"?"svnCopyTraceScope":"svnTraceScope")," \xB7 ",l.path," \xB7 peg r",l.pegRevision),S.default.createElement("ol",null,l.entries.map(x=>S.default.createElement("li",{key:x.revision},"r",x.revision," \xB7 ",x.message))),!!h.length&&S.default.createElement("button",{onClick:()=>f({cursor:h.at(-1),trail:h.slice(0,-1)})},c("historyBack")),l.nextRevision!==null&&S.default.createElement("button",{onClick:()=>f({cursor:l.nextRevision,trail:[...h,w].slice(-200)})},c("historyMore"))):S.default.createElement("p",{role:"status"},c("loading"))}function Jt(e){return oe.default.createElement(Vr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Vr({sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r}){let[s,c]=(0,oe.useState)(null),[m,p]=(0,oe.useState)(!1),[n,l]=(0,oe.useState)(""),[u,k]=(0,oe.useState)(0);(0,oe.useEffect)(()=>{if(s)return()=>{Promise.resolve().then(()=>i("vcs/svn-revoke",{sessionId:e,repositoryId:o,token:s.token})).catch(()=>{})}},[s,e,o]),(0,oe.useEffect)(()=>{if(s)try{return ut(s.expiresAt,()=>{c(null),k(0),p(!1),l(t("svnExpired"))})}catch{c(null),l(t("svnExpired"))}},[s]),(0,oe.useEffect)(()=>{if(!u||!s)return;let b=new AbortController;return p(!0),l(""),i("vcs/svn-revoke",{sessionId:e,repositoryId:o,token:s.token},b.signal).then(()=>{b.signal.aborted||c(null)}).catch(E=>{b.signal.aborted||(l(E.message),E.code==="vcs/rediscover-required"&&r())}).finally(()=>{b.signal.aborted||p(!1)}),()=>b.abort()},[u,s]);let f=b=>{try{Do(b),l(""),k(0),c(b)}catch(E){l(E.message)}},C=async(...b)=>{try{return await i(...b)}catch(E){throw E.code==="vcs/svn-consent-required"&&!b[2]?.aborted&&(c(null),k(0),l(t("svnExpired"))),E}};return oe.default.createElement("section",{className:"vcs-svn-remote"},!s&&n&&oe.default.createElement("p",{role:"status"},n),s?oe.default.createElement(oe.default.Fragment,null,oe.default.createElement("p",null,t("svnGrantScope")),oe.default.createElement("button",{disabled:m,onClick:()=>k(b=>b+1)},t("svnRevoke")),n&&oe.default.createElement("p",{role:"alert"},n),!m&&oe.default.createElement(qt,{sessionId:e,repositoryId:o,t,onRediscover:r,rpc:C,token:s.token,snapshot:s.snapshot})):oe.default.createElement(It,{sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r,onApproved:f}))}var N=R(require("react"),1);function Oo(e){let o=new Map;for(let i of e){let t=o.get(i.commit);t||(t={names:[],hidden:0},o.set(i.commit,t)),t.names.length<3?t.names.push(i.name):t.hidden++}return o}var O=R(require("react"),1);var I=R(require("react"),1);var K=R(require("react"),1);var Q=R(require("react"),1);function Ut(e){return Q.default.createElement(Ir,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.path]),...e})}function Ir({sessionId:e,repositoryId:o,commit:i,path:t,rpc:r,t:s,onRediscover:c}){let[m,p]=(0,Q.useState)(!1),[n,l]=(0,Q.useState)([0]),[u,k]=(0,Q.useState)(null),[f,C]=(0,Q.useState)(""),[b,E]=(0,Q.useState)(0),y=n.at(-1);(0,Q.useEffect)(()=>{if(!m)return;let h=new AbortController;return k(null),C(""),r("vcs/tree-segment",{sessionId:e,repositoryId:o,commit:i,path:t,offset:y},h.signal).then(x=>{h.signal.aborted||k(x)}).catch(x=>{h.signal.aborted||(C(x.message),x.code==="vcs/rediscover-required"&&c())}),()=>h.abort()},[m,y,e,o,i,t,b]);let w=(0,Q.useMemo)(()=>u?{path:t,left:{label:i,text:u.text},right:{label:i,text:u.text}}:null,[u,t,i]);return Q.default.createElement("section",null,Q.default.createElement("button",{"aria-expanded":m,onClick:()=>p(h=>!h)},s("segments")),m&&Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,s("segmentScope")),f?Q.default.createElement("p",{role:"alert"},f," ",Q.default.createElement("button",{onClick:()=>E(h=>h+1)},s("retry"))):u?Q.default.createElement(Q.default.Fragment,null,Q.default.createElement("p",null,s("segmentBytes"),": ",u.offset,"\u2013",u.endOffset," / ",u.totalBytes," \xB7 ",Q.default.createElement("code",null,u.oid)),Q.default.createElement("button",{disabled:n.length===1,onClick:()=>l(h=>h.slice(0,-1))},s("previous")),Q.default.createElement("button",{disabled:u.nextOffset===null,onClick:()=>l(h=>[...h,u.nextOffset])},s("next")),Q.default.createElement(ve,{single:!0,comparison:w,identity:JSON.stringify([e,o,i,t,y]),t:s})):Q.default.createElement("p",{role:"status"},s("loading"))))}var T=R(require("react"),1);function Gr({sessionId:e,repositoryId:o,commit:i,path:t,follow:r,since:s,until:c,rpc:m,t:p,onRediscover:n,onSelectCommit:l}){let[u,k]=(0,T.useState)({commits:[],nextOffset:null}),[f,C]=(0,T.useState)(0),[b,E]=(0,T.useState)(0),[y,w]=(0,T.useState)(!0),[h,x]=(0,T.useState)("");(0,T.useEffect)(()=>{let A=new AbortController;return w(!0),x(""),m("vcs/tree-history",{sessionId:e,repositoryId:o,commit:i,path:t,offset:f,limit:50,follow:r,...s?{since:s}:{},...c?{until:c}:{}},A.signal).then(D=>{A.signal.aborted||k(v=>({...D,commits:f?[...v.commits,...D.commits]:D.commits}))}).catch(D=>{A.signal.aborted||(x(D.message),D.code==="vcs/rediscover-required"&&n())}).finally(()=>{A.signal.aborted||w(!1)}),()=>A.abort()},[e,o,i,t,f,b,r,s,c]);let g=A=>p(A.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":A.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":A.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return T.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":y},T.default.createElement("p",null,p("pathHistoryScope")),T.default.createElement("p",{style:{overflowWrap:"anywhere"}},T.default.createElement("code",null,u.path||t)," \xB7 ",T.default.createElement("code",null,i),u.followsRenames!==void 0&&T.default.createElement(T.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),T.default.createElement("ol",null,u.commits.map(A=>T.default.createElement("li",{key:A.id},T.default.createElement("code",{title:A.id},A.id.slice(0,10))," \xB7 ",l?T.default.createElement("button",{onClick:()=>l(A.id,A.path||t)},A.subject):A.subject,T.default.createElement("div",null,A.boundary&&T.default.createElement("span",null,g(A)," "),A.path&&T.default.createElement("code",null,A.oldPath?A.oldPath+" \u2192 ":"",A.path)," ",A.similarity!==void 0&&T.default.createElement("span",null,p("fileHistorySimilarity"),": ",A.similarity,"% \xB7 "),A.author," \xB7 ",T.default.createElement("time",{dateTime:A.date},A.date))))),y&&T.default.createElement("p",{role:"status"},p("loading")),h&&T.default.createElement("p",{role:"alert"},h," ",T.default.createElement("button",{onClick:()=>E(A=>A+1)},p("retry"))),!y&&!h&&!u.commits.length&&T.default.createElement("p",null,p("historyEmpty")),u.truncated&&T.default.createElement("p",{role:"status"},p("historyLimit")),!h&&u.nextOffset!==null&&T.default.createElement("button",{disabled:y,onClick:()=>C(u.nextOffset)},p("historyMore")))}function zt(e){let[o,i]=(0,T.useState)(!1),[t,r]=(0,T.useState)(!1),[s,c]=(0,T.useState)(""),[m,p]=(0,T.useState)("");return T.default.createElement("div",null,T.default.createElement("button",{"aria-expanded":o,onClick:()=>i(n=>!n)},e.t("pathHistory")),o&&T.default.createElement(T.default.Fragment,null,T.default.createElement("label",null,T.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>r(n.target.checked)}),e.t("fileHistoryFollow")),T.default.createElement("p",null,e.t("pathHistoryFollowScope")),T.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>T.default.createElement("label",{key:n},e.t(n)," ",T.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),T.default.createElement(Gr,{key:JSON.stringify([t,s.trim(),m.trim()]),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}function Qe({sessionId:e,repositoryId:o,commit:i,path:t,rpc:r,t:s,onRediscover:c,onClose:m,onSelectCommit:p,line:n=null}){let[l,u]=(0,K.useState)(null),[k,f]=(0,K.useState)(""),[C,b]=(0,K.useState)(0);(0,K.useEffect)(()=>{let y=new AbortController;return u(null),f(""),r("vcs/tree-file",{sessionId:e,repositoryId:o,commit:i,path:t},y.signal).then(w=>{y.signal.aborted||u(w)}).catch(w=>{y.signal.aborted||(f(w.message),w.code==="vcs/rediscover-required"&&c())}),()=>y.abort()},[e,o,i,t,C]);let E=(0,K.useMemo)(()=>l?{path:t,left:{label:i,text:l.text||""},right:{label:i,text:l.text||""}}:null,[l,t,i]);return K.default.createElement("section",{"aria-label":s("treePreview")},K.default.createElement("h4",null,t),K.default.createElement("button",{onClick:m},s("treeClose")),K.default.createElement("p",null,K.default.createElement("code",null,i)),k?K.default.createElement("p",{role:"alert"},k," ",K.default.createElement("button",{onClick:()=>b(y=>y+1)},s("retry"))):l?K.default.createElement(K.default.Fragment,null,K.default.createElement("p",null,K.default.createElement("code",null,l.oid)," \xB7 ",s("encoding"),": ",l.encoding||"\u2014"),n&&K.default.createElement("p",{role:"status"},s("blameOriginLine"),": ",n,!l.text||n>l.text.split(`
180
180
  `).length?" \xB7 "+s("blameUnmapped"):""),l.notice&&K.default.createElement("p",{role:"status"},l.notice),l.binary?K.default.createElement("p",null,s("binary")):l.text===""?K.default.createElement("p",null,s("treeEmpty")):K.default.createElement(ve,{single:!0,line:n,comparison:E,identity:JSON.stringify([e,o,i,t]),t:s})):K.default.createElement("p",{role:"status"},s("loading")),K.default.createElement(Ut,{sessionId:e,repositoryId:o,commit:i,path:t,rpc:r,t:s,onRediscover:c}),K.default.createElement(zt,{key:JSON.stringify([e,o,i,t]),sessionId:e,repositoryId:o,commit:i,path:t,rpc:r,t:s,onRediscover:c,onSelectCommit:p}))}function Fo(e=""){let o=[{path:"",name:"/"}];if(e){let i="";for(let t of e.split("/"))i=i?i+"/"+t:t,o.push({path:i,name:t})}return o}function To(e,o="",i=""){let t=o?o+"/":"",r=i.toLowerCase();return e.filter(s=>{let c=s.path.slice(t.length);return s.path.startsWith(t)&&c.length>0&&!c.includes("/")&&c.toLowerCase().includes(r)}).sort((s,c)=>+(c.type==="tree")-+(s.type==="tree")||(s.path<c.path?-1:s.path>c.path?1:0))}function qr({sessionId:e,repositoryId:o,commit:i,rpc:t,t:r,onRediscover:s,onSelectCommit:c}){let[m,p]=(0,I.useState)(null),[n,l]=(0,I.useState)(""),[u,k]=(0,I.useState)(0),[f,C]=(0,I.useState)(""),[b,E]=(0,I.useState)(0),[y,w]=(0,I.useState)(""),[h,x]=(0,I.useState)(null);if((0,I.useEffect)(()=>{let v=new AbortController;return p(null),l(""),t("vcs/tree",{sessionId:e,repositoryId:o,commit:i},v.signal).then(q=>{v.signal.aborted||p(q)}).catch(q=>{v.signal.aborted||(l(q.message),q.code==="vcs/rediscover-required"&&s())}),()=>v.abort()},[e,o,i,u]),n)return I.default.createElement("p",{role:"alert"},n," ",I.default.createElement("button",{onClick:()=>k(v=>v+1)},r("retry")));if(!m)return I.default.createElement("p",{role:"status"},r("loading"));let g=f?f+"/":"",A=To(m.entries,f,y),D=v=>{C(v),E(0),w(""),x(null)};return I.default.createElement("section",{"aria-label":r("historicalTree")},I.default.createElement("p",null,r("historicalTreeScope")),I.default.createElement("code",null,i),I.default.createElement("p",null,f||"/"," ",f&&I.default.createElement("button",{onClick:()=>D(f.includes("/")?f.slice(0,f.lastIndexOf("/")):"")},r("treeUp"))),I.default.createElement("nav",{"aria-label":r("treeBreadcrumbs")},Fo(f).map(v=>I.default.createElement(I.default.Fragment,{key:v.path},v.path&&" / ",v.path===f?I.default.createElement("span",{"aria-current":"location"},v.name):I.default.createElement("button",{onClick:()=>D(v.path)},v.name)))),I.default.createElement("label",null,r("treeSearch")," ",I.default.createElement("input",{"aria-label":r("treeSearch"),value:y,onChange:v=>{w(v.target.value),E(0),x(null)}})),I.default.createElement("p",null,A.length," ",r("treeEntries")),!A.length&&y&&I.default.createElement("p",{role:"status"},r("emptySearch")),I.default.createElement("ul",null,A.slice(b*100,b*100+100).map(v=>I.default.createElement("li",{key:v.path},v.type==="tree"?I.default.createElement("button",{onClick:()=>D(v.path)},v.path.slice(g.length),"/"):v.type==="blob"&&["100644","100755"].includes(v.mode)?I.default.createElement("button",{"aria-pressed":h===v.path,onClick:()=>x(v.path)},v.path.slice(g.length)):I.default.createElement("span",null,v.path.slice(g.length))," \xB7 ",I.default.createElement("code",null,v.mode," ",v.type," ",I.default.createElement("span",{title:v.oid},v.oid.slice(0,10)))))),b>0&&I.default.createElement("button",{onClick:()=>{E(v=>v-1),x(null)}},r("treePrevious")),(b+1)*100<A.length&&I.default.createElement("button",{onClick:()=>{E(v=>v+1),x(null)}},r("treeNext")),h&&I.default.createElement(Qe,{key:JSON.stringify([e,o,i,h]),sessionId:e,repositoryId:o,commit:i,rpc:t,t:r,onRediscover:s,onSelectCommit:c,path:h,onClose:()=>x(null)}))}function Wt(e){return I.default.createElement(Jr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Jr(e){let[o,i]=(0,I.useState)(!1);return I.default.createElement("div",null,I.default.createElement("button",{"aria-expanded":o,onClick:()=>i(t=>!t)},e.t("historicalTree")),o&&I.default.createElement(qr,{...e}))}var W=R(require("react"),1);var j=R(require("react"),1);function Ur({sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:r,follow:s,since:c,until:m,rpc:p,t:n,onRediscover:l,onSelectCommit:u}){let[k,f]=(0,j.useState)({commits:[],nextOffset:null}),[C,b]=(0,j.useState)(0),[E,y]=(0,j.useState)(0),[w,h]=(0,j.useState)(!0),[x,g]=(0,j.useState)(""),A={...c?{since:c}:{},...m?{until:m}:{}};return(0,j.useEffect)(()=>{let D=new AbortController;return h(!0),g(""),p("vcs/file-history",{sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:r,offset:C,limit:50,follow:s,...A},D.signal).then(v=>{D.signal.aborted||f(q=>({...v,commits:C?[...q.commits,...v.commits]:v.commits}))}).catch(v=>{D.signal.aborted||(g(v.message),v.code==="vcs/rediscover-required"&&l())}).finally(()=>{D.signal.aborted||h(!1)}),()=>D.abort()},[e,o,i,t,r,C,E,s,c,m]),j.default.createElement("section",{"aria-label":n("fileHistory"),"aria-busy":w},j.default.createElement("p",null,n("fileHistoryScope")),j.default.createElement("p",{style:{overflowWrap:"anywhere"}},k.path," \xB7 ",j.default.createElement("code",null,i)),j.default.createElement("ol",null,k.commits.map(D=>j.default.createElement("li",{key:D.id},j.default.createElement("code",{title:D.id},D.id.slice(0,10))," \xB7 ",u?j.default.createElement("button",{onClick:()=>u(D.id,D.path||k.path)},D.subject):D.subject,j.default.createElement("div",null,D.boundary&&j.default.createElement("span",null,n(D.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":D.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":D.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),D.path&&j.default.createElement("code",null,D.oldPath?D.oldPath+" \u2192 ":"",D.path)," ",D.similarity!==void 0&&j.default.createElement("span",null,n("fileHistorySimilarity"),": ",D.similarity,"% \xB7 "),D.author," \xB7 ",j.default.createElement("time",{dateTime:D.date},D.date))))),w&&j.default.createElement("p",{role:"status"},n("loading")),x&&j.default.createElement("p",{role:"alert"},x," ",j.default.createElement("button",{onClick:()=>y(D=>D+1)},n("retry"))),!w&&!x&&!k.commits.length&&j.default.createElement("p",null,n("historyEmpty")),k.truncated&&j.default.createElement("p",{role:"status"},n("historyLimit")),!x&&k.nextOffset!==null&&j.default.createElement("button",{disabled:w,onClick:()=>b(k.nextOffset)},n("historyMore")))}function _t(e){return j.default.createElement(zr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.id]),...e})}function zr(e){let[o,i]=(0,j.useState)(!1),[t,r]=(0,j.useState)(!1),[s,c]=(0,j.useState)(""),[m,p]=(0,j.useState)("");return j.default.createElement("div",null,j.default.createElement("button",{"aria-expanded":o,onClick:()=>i(n=>!n)},e.t("fileHistory")),o&&j.default.createElement(j.default.Fragment,null,j.default.createElement("label",null,j.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>r(n.target.checked)}),e.t("fileHistoryFollow")),j.default.createElement("p",null,e.t("fileHistoryFollowScope")),j.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>j.default.createElement("label",{key:n},e.t(n)," ",j.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),j.default.createElement(Ur,{key:JSON.stringify([t,s.trim(),m.trim()]),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}var V=R(require("react"),1);function Wr({sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:r,rpc:s,t:c,onRediscover:m,onSelectCommit:p}){let[n,l]=(0,V.useState)(null),[u,k]=(0,V.useState)(""),[f,C]=(0,V.useState)(0),[b,E]=(0,V.useState)(1),[y,w]=(0,V.useState)(null);return(0,V.useEffect)(()=>{let h=new AbortController;return l(null),k(""),w(null),s("vcs/blame",{sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:r,startLine:b,lineLimit:500},h.signal).then(x=>{h.signal.aborted||l(x)}).catch(x=>{h.signal.aborted||(k(x.message),x.code==="vcs/rediscover-required"&&m())}),()=>h.abort()},[e,o,i,t,r,f,b]),u?V.default.createElement("p",{role:"alert"},u," ",V.default.createElement("button",{onClick:()=>C(h=>h+1)},c("retry"))):n?V.default.createElement("section",{"aria-label":c("blame")},V.default.createElement("p",null,c("blameScope")),p&&V.default.createElement("p",null,c("blameNavigation")),n.notice&&V.default.createElement("p",{role:"status"},n.notice),n.truncated&&V.default.createElement("p",{role:"status"},c("blameLimit")),!n.notice&&!n.lines.length&&V.default.createElement("p",null,c("blameEmpty")),!!n.lines.length&&V.default.createElement("div",{style:{overflow:"auto",maxHeight:480}},V.default.createElement("table",null,V.default.createElement("thead",null,V.default.createElement("tr",null,["blameLine","blameCommit","blameAuthor","blameSummary","blameSource"].map(h=>V.default.createElement("th",{key:h,scope:"col"},c(h))))),V.default.createElement("tbody",null,n.lines.map(h=>V.default.createElement("tr",{key:h.line},V.default.createElement("th",{scope:"row"},h.line),V.default.createElement("td",null,p?V.default.createElement("button",{title:h.commit,onClick:()=>p(h.commit,h.path||null)},V.default.createElement("code",null,h.commit.slice(0,10))):V.default.createElement("code",{title:h.commit},h.commit.slice(0,10))),V.default.createElement("td",null,h.author),V.default.createElement("td",null,h.summary),V.default.createElement("td",null,V.default.createElement("pre",{style:{margin:0}},h.text),h.path&&h.originalLine?V.default.createElement("button",{onClick:()=>w(h)},c("blameOriginLine"),": ",h.path,":",h.originalLine):V.default.createElement("span",null,c("blameUnmapped")))))))),V.default.createElement("p",null,n.startLine||b,"\u2013",n.lines.at(-1)?.line||b," / ",n.totalLines??"\u2014"),V.default.createElement("button",{disabled:b===1,onClick:()=>E(Math.max(1,b-500))},c("blamePrevious")),V.default.createElement("button",{disabled:n.nextLine==null,onClick:()=>E(n.nextLine)},c("blameNext")),y&&V.default.createElement(Qe,{key:JSON.stringify([y.commit,y.path,y.originalLine]),sessionId:e,repositoryId:o,rpc:s,t:c,onRediscover:m,onSelectCommit:p,commit:y.commit,path:y.path,line:y.originalLine,onClose:()=>w(null)})):V.default.createElement("p",{role:"status"},c("loading"))}function Kt(e){let[o,i]=(0,V.useState)(!1);return V.default.createElement("div",null,V.default.createElement("button",{"aria-expanded":o,onClick:()=>i(t=>!t)},e.t("blame")),o&&V.default.createElement(Wr,{...e}))}function $e(e){return W.default.createElement(_r,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit,e.parentIndex,e.base,e.target,e.id]),...e})}function _r({sessionId:e,repositoryId:o,commit:i,parentIndex:t,base:r,target:s,id:c,rpc:m,t:p,onRediscover:n,onSelectCommit:l}){let[u,k]=(0,W.useState)(null),[f,C]=(0,W.useState)(""),[b,E]=(0,W.useState)(0),[y,w]=(0,W.useState)(!1);return(0,W.useEffect)(()=>{let h=new AbortController;return k(null),C(""),m(r?"vcs/revision-compare":"vcs/commit-compare",r?{sessionId:e,repositoryId:o,base:r,target:s,id:c,...y?{large:!0}:{}}:{sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:c,...y?{large:!0}:{}},h.signal).then(x=>{h.signal.aborted||k(x)}).catch(x=>{h.signal.aborted||(C(x.message),x.code==="vcs/rediscover-required"&&n())}),()=>h.abort()},[e,o,i,t,r,s,c,b,y]),f?W.default.createElement("p",{role:"alert"},f," ",W.default.createElement("button",{onClick:()=>E(h=>h+1)},p("retry")),y&&W.default.createElement("button",{onClick:()=>w(!1)},p("largeClose"))):u?W.default.createElement("section",{className:"vcs-history-comparison"},W.default.createElement("header",{className:"vcs-comparison-heading"},W.default.createElement("h4",null,u.path),W.default.createElement("p",null,u.left.label," \u2194 ",u.right.label),u.notice&&W.default.createElement("p",{role:"status"},u.notice),y?W.default.createElement("p",null,p("largeScope")," ",W.default.createElement("button",{onClick:()=>w(!1)},p("largeClose"))):u.notice?.includes("2 MiB")&&W.default.createElement("p",null,p("largeScope")," ",W.default.createElement("button",{onClick:()=>w(!0)},p("largeLoad")))),u.binary?W.default.createElement("p",null,p("binary")):W.default.createElement(ve,{comparison:u,identity:JSON.stringify(r?[e,o,r,s,c]:[e,o,i,t,c]),t:p}),W.default.createElement("div",{className:"vcs-comparison-extras"},i&&!r&&W.default.createElement(_t,{onSelectCommit:l,key:"file-history:"+JSON.stringify([e,o,i,t,c]),sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:c,rpc:m,t:p,onRediscover:n}),i&&!r&&W.default.createElement(Kt,{onSelectCommit:l,key:"blame:"+JSON.stringify([e,o,i,t,c]),sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:c,rpc:m,t:p,onRediscover:n}),(i||r)&&W.default.createElement(Ye,{key:"image:"+JSON.stringify([e,o,i,t,r,s,c]),sessionId:e,repositoryId:o,commit:i,parentIndex:t,base:r,target:s,id:c,rpc:m,t:p,onRediscover:n}))):W.default.createElement("p",{role:"status"},p("loading"),y&&W.default.createElement("button",{onClick:()=>w(!1)},p("largeClose")))}function jo(e,o){if(typeof o!="string"||!o)return null;let i=e.filter(t=>t.path===o);return i.length===1&&typeof i[0].id=="string"&&i[0].id?i[0].id:null}function Vo(e,o=""){let i=o.trim().toLowerCase();return i?e.filter(t=>[t.id,t.author,t.subject].some(r=>r?.toLowerCase().includes(i))):e}function ft(e,o=""){let i=o.trim().toLowerCase();return i?e.filter(t=>[t.path,t.oldPath].some(r=>r?.toLowerCase().includes(i))):e}function Xe(e){return O.default.createElement(Kr,{key:JSON.stringify([e.sessionId,e.repositoryId,e.commit]),...e})}function Kr({sessionId:e,repositoryId:o,commit:i,rpc:t,t:r,onRediscover:s,onSelectCommit:c,initialPath:m}){let p=(0,O.useRef)(!0),[n,l]=(0,O.useState)(null),[u,k]=(0,O.useState)(""),[f,C]=(0,O.useState)(!1),[b,E]=(0,O.useState)(0),[y,w]=(0,O.useState)(null),[h,x]=(0,O.useState)(""),[g,A]=(0,O.useState)(0);if((0,O.useEffect)(()=>{let v=new AbortController;return w(null),x(""),t("vcs/commit",{sessionId:e,repositoryId:o,commit:i,parentIndex:b},v.signal).then(q=>{v.signal.aborted||(w(q),p.current&&(p.current=!1,l(jo(q.changes,m))))}).catch(q=>{v.signal.aborted||(x(q.message),q.code==="vcs/rediscover-required"&&s())}),()=>v.abort()},[e,o,i,b,g]),h)return O.default.createElement("p",{role:"alert"},h," ",O.default.createElement("button",{onClick:()=>A(v=>v+1)},r("retry")));if(!y)return O.default.createElement("p",{role:"status"},r("loading"));let D=ft(y.changes,u);return O.default.createElement("section",{className:"vcs-commit-details"+(f?" vcs-commit-focused":""),"aria-label":r("commitDetails")},O.default.createElement("div",{className:"vcs-commit-sidebar"},O.default.createElement("header",{className:"vcs-commit-summary"},O.default.createElement("h3",null,y.subject),O.default.createElement("code",{className:"vcs-commit-oid"},y.id),O.default.createElement("p",null,y.author," \xB7 ",y.date),y.committer&&y.committer!==y.author&&O.default.createElement("p",null,r("commitCommitter")," ",y.committer,y.committerDate?` \xB7 ${y.committerDate}`:""),y.signature?.signed===!0&&O.default.createElement("p",null,O.default.createElement("span",{title:r("commitSignatureUnverified")},r("commitSigned",{format:y.signature.format}))),y.messageTruncated&&O.default.createElement("p",{role:"status"},r("commitMessageLimit")),y.message&&O.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},y.message),y.parents.length>1&&O.default.createElement("label",null,r("commitParent")," ",O.default.createElement("select",{"aria-label":r("commitParent"),value:b,onChange:v=>{l(null),w(null),E(Number(v.target.value))}},y.parents.map((v,q)=>O.default.createElement("option",{key:v,value:q},q+1,": ",v.slice(0,10))))),O.default.createElement("p",null,y.parent||r("commitRoot")," \u2192 ",y.id.slice(0,10))),O.default.createElement("aside",{className:"vcs-commit-picker"},O.default.createElement("label",null,r("commitFileSearch")," ",O.default.createElement("input",{"aria-label":r("commitFileSearch"),value:u,onChange:v=>{k(v.target.value),l(null)}})),O.default.createElement("span",null," ",D.length," / ",y.changes.length),O.default.createElement("ul",{className:"vcs-commit-files"},D.map(v=>O.default.createElement("li",{key:v.id},O.default.createElement("button",{"aria-pressed":n===v.id,onClick:()=>l(v.id)},O.default.createElement("span",{className:"vcs-file-status"},v.status," \xB7 "),O.default.createElement("span",{className:"vcs-file-path",title:v.oldPath?v.oldPath+" \u2192 "+v.path:v.path},v.path,v.oldPath&&O.default.createElement("small",null,"\u2190 ",v.oldPath)))))),!!y.changes.length&&!D.length&&O.default.createElement("p",{role:"status"},r("emptySearch")),!y.changes.length&&O.default.createElement("p",null,r("commitNoChanges")),O.default.createElement(Wt,{key:JSON.stringify([e,o,i]),sessionId:e,repositoryId:o,commit:i,rpc:t,t:r,onRediscover:s,onSelectCommit:c}))),O.default.createElement("div",{className:"vcs-commit-review"},O.default.createElement("div",{className:"vcs-commit-comparison","aria-label":r("comparisonContext")},n&&O.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":f,onClick:()=>C(v=>!v)},r(f?"comparisonRestore":"comparisonFocus")),n?O.default.createElement($e,{key:n,sessionId:e,repositoryId:o,commit:i,parentIndex:b,id:n,onSelectCommit:c,rpc:t,t:r,onRediscover:s}):O.default.createElement("p",{role:"status"},r("pick")))))}var Z=R(require("react"),1);function Io(e){if(!Array.isArray(e))throw new Error("Invalid graph commits");let o=e.slice(0,200),i=new Map,t=[],r=[],s=m=>typeof m=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(m);for(let[m,p]of o.entries()){if(!p||!s(p.id)||!Array.isArray(p.parents)||i.has(p.id))throw new Error("Invalid graph node");i.set(p.id,m),t.push({id:p.id,row:m})}let c=!1;for(let m of o){let p=new Set;for(let n of m.parents){if(r.length===1e3){c=!0;break}if(!s(n)||n.length!==m.id.length||n===m.id||p.has(n))throw new Error("Invalid graph parent");p.add(n);let l=i.get(n);if(l!==void 0&&l<=i.get(m.id))throw new Error("Graph requires child-before-parent order");r.push({from:m.id,to:n,missing:l===void 0})}if(c)break}return{nodes:t,edges:r,nodesTruncated:e.length>200,edgesTruncated:c}}function Go(e){let o=Array(32).fill(null),i=new Map,t=[],r=new Set,s=!1,c=n=>{if(r.has(n))return null;let l=o.indexOf(n);return l>=0?l:(l=o.indexOf(null),l<0?(s=!0,r.add(n),null):(o[l]=n,l))},m=new Map;for(let n of e.edges){if(n.missing)continue;let l=m.get(n.from)||[];l.push(n.to),m.set(n.from,l)}for(let n of e.nodes){let l=c(n.id);if(i.set(n.id,{...n,lane:l}),t.push({...n,lane:l}),l===null)continue;o[l]=null;let u=m.get(n.id)||[];for(let[k,f]of u.entries())o.includes(f)||(k===0&&o[l]===null?o[l]=f:c(f))}let p=e.edges.filter(n=>!n.missing).flatMap(n=>{let l=i.get(n.from),u=i.get(n.to);return l.lane===null||u.lane===null?[]:[{...n,start:l.row,end:u.row,fromLane:l.lane,toLane:u.lane}]});return{nodes:t,edges:p,lanesTruncated:s,laneCount:Math.max(1,...t.map(n=>(n.lane??0)+1))}}function Yr({commits:e,selected:o,onSelect:i,t}){let r;try{r=Io(e)}catch{return Z.default.createElement("p",{role:"alert"},t("graphInvalid"))}let s=Go(r),c=s.edges,m=Math.max(100,24+18*s.laneCount),p=Math.max(40,r.nodes.length*36);return Z.default.createElement("section",{"aria-label":t("historyGraph")},Z.default.createElement("p",null,t("graphScope")),s.lanesTruncated&&Z.default.createElement("p",{role:"status"},t("graphLaneLimit")),(r.nodesTruncated||r.edgesTruncated)&&Z.default.createElement("p",{role:"status"},t("graphLimit")),Z.default.createElement("div",{style:{maxHeight:480,overflow:"auto",display:"flex"}},Z.default.createElement("svg",{width:m,height:p,"aria-hidden":"true",style:{flexShrink:0}},c.map(n=>{let l=n.start*36+18,u=n.end*36+18,k=12+n.fromLane*18,f=12+n.toLane*18;return Z.default.createElement("path",{key:n.from+n.to,d:"M "+k+" "+l+" C "+k+" "+(l+18)+", "+f+" "+(u-18)+", "+f+" "+u,fill:"none",stroke:"currentColor",opacity:"0.45"})}),s.nodes.filter(n=>n.lane!==null).map(n=>Z.default.createElement("circle",{key:n.id,cx:12+n.lane*18,cy:n.row*36+18,r:"4",fill:"currentColor"}))),Z.default.createElement("ol",{style:{listStyle:"none",margin:0,padding:0}},r.nodes.map(n=>Z.default.createElement("li",{key:n.id,style:{height:36,whiteSpace:"nowrap"}},Z.default.createElement("button",{title:n.id,"aria-current":o===n.id?!0:void 0,style:o===n.id?{fontWeight:700,textDecoration:"underline"}:void 0,onKeyDown:l=>{if(l.altKey||l.ctrlKey||l.metaKey||l.shiftKey)return;let u=l.key==="ArrowDown"?Math.min(n.row+1,r.nodes.length-1):l.key==="ArrowUp"?Math.max(0,n.row-1):l.key==="Home"?0:l.key==="End"?r.nodes.length-1:null;u!==null&&(l.preventDefault(),l.stopPropagation(),l.currentTarget.closest("ol").querySelectorAll("button")[u]?.focus())},onClick:()=>i(n.id)},Z.default.createElement("code",null,n.id.slice(0,10))," ",e[n.row].subject))))),Z.default.createElement("details",null,Z.default.createElement("summary",null,t("graphRelations")),Z.default.createElement("ul",null,r.edges.map(n=>Z.default.createElement("li",{key:n.from+n.to},Z.default.createElement("code",null,n.from)," \u2192 ",Z.default.createElement("code",null,n.to),n.missing?" \xB7 "+t("graphMissing"):"")))))}function Yt(e){let[o,i]=(0,Z.useState)(!1);return Z.default.createElement("div",null,Z.default.createElement("button",{"aria-expanded":o,onClick:()=>i(t=>!t)},e.t("historyGraph")),o&&Z.default.createElement(Yr,{...e}))}var B=R(require("react"),1);function Qr({sessionId:e,repositoryId:o,base:i,target:t,rpc:r,t:s,onRediscover:c}){let[m,p]=(0,B.useState)(null),[n,l]=(0,B.useState)(""),[u,k]=(0,B.useState)(0),[f,C]=(0,B.useState)(null),[b,E]=(0,B.useState)("");if((0,B.useEffect)(()=>{let w=new AbortController;return p(null),l(""),C(null),r("vcs/revision-changes",{sessionId:e,repositoryId:o,base:i,target:t},w.signal).then(h=>{w.signal.aborted||p(h)}).catch(h=>{w.signal.aborted||(l(h.message),h.code==="vcs/rediscover-required"&&c())}),()=>w.abort()},[e,o,i,t,u]),n)return B.default.createElement("p",{role:"alert"},n," ",B.default.createElement("button",{onClick:()=>k(w=>w+1)},s("retry")));if(!m)return B.default.createElement("p",{role:"status"},s("loading"));let y=ft(m.changes,b);return B.default.createElement("div",null,B.default.createElement("label",null,s("commitFileSearch")," ",B.default.createElement("input",{"aria-label":s("commitFileSearch"),value:b,onChange:w=>{E(w.target.value),C(null)}})),B.default.createElement("span",null," ",y.length," / ",m.changes.length),!!m.changes.length&&!y.length&&B.default.createElement("p",{role:"status"},s("emptySearch")),!m.changes.length&&B.default.createElement("p",null,s("revisionEmpty")),B.default.createElement("ul",null,y.map(w=>B.default.createElement("li",{key:w.id},B.default.createElement("button",{"aria-pressed":f===w.id,onClick:()=>C(w.id)},w.status," \xB7 ",w.oldPath?w.oldPath+" \u2192 ":"",w.path)))),f&&B.default.createElement($e,{key:f,sessionId:e,repositoryId:o,base:i,target:t,id:f,rpc:r,t:s,onRediscover:c}))}function Qt(e){return B.default.createElement($r,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function $r({commits:e,sessionId:o,repositoryId:i,rpc:t,t:r,onRediscover:s,onReferencesLoaded:c}){let[m,p]=(0,B.useState)(""),[n,l]=(0,B.useState)(""),[u,k]=(0,B.useState)([]),[f,C]=(0,B.useState)(!1),[b,E]=(0,B.useState)(0),[y,w]=(0,B.useState)(!1),[h,x]=(0,B.useState)("");return(0,B.useEffect)(()=>{if(!b)return;let g=new AbortController;return w(!0),x(""),t("vcs/references",{sessionId:o,repositoryId:i},g.signal).then(A=>{g.signal.aborted||(k(A.references),C(!0),c?.(A.references))}).catch(A=>{g.signal.aborted||(x(A.message),A.code==="vcs/rediscover-required"&&s())}).finally(()=>{g.signal.aborted||w(!1)}),()=>g.abort()},[o,i,b]),B.default.createElement("section",{"aria-label":r("revisionTitle")},B.default.createElement("h3",null,r("revisionTitle")),B.default.createElement("p",null,r("revisionScope")),B.default.createElement("button",{disabled:y,onClick:()=>E(g=>g+1)},r("revisionLoadRefs")),B.default.createElement("p",null,r("revisionRefsScope")),f&&!y&&!h&&B.default.createElement("p",{role:"status"},u.length?`${r("revisionRefsCount")}: ${u.length}`:r("revisionRefsEmpty")),y&&B.default.createElement("p",{role:"status"},r("loading")),h&&B.default.createElement("p",{role:"alert"},h),[[m,p,"revisionBase"],[n,l,"revisionTarget"]].map(([g,A,D])=>B.default.createElement("label",{key:D},r(D)," ",B.default.createElement("select",{"aria-label":r(D),value:g,onChange:v=>A(v.target.value)},B.default.createElement("option",{value:""},"\u2014"),!!e.length&&B.default.createElement("optgroup",{label:r("revisionLoadedCommits")},e.map(v=>B.default.createElement("option",{key:v.id,value:v.id},v.id.slice(0,10)," \xB7 ",v.subject))),!!u.length&&B.default.createElement("optgroup",{label:r("revisionLocalRefs")},u.map(v=>B.default.createElement("option",{key:v.name,value:v.commit},v.name," \xB7 ",v.commit.slice(0,10)))),g&&!e.some(v=>v.id===g)&&!u.some(v=>v.commit===g)&&B.default.createElement("option",{value:g},g)))),B.default.createElement("button",{disabled:!m||!n,onClick:()=>{p(n),l(m)}},r("revisionSwap")),B.default.createElement("p",{style:{overflowWrap:"anywhere"}},B.default.createElement("code",null,m||"\u2014")," \u2192 ",B.default.createElement("code",null,n||"\u2014")),m&&n&&B.default.createElement(Qr,{key:JSON.stringify([o,i,m,n]),sessionId:o,repositoryId:i,base:m,target:n,rpc:t,t:r,onRediscover:s}))}function Ze(e){return N.default.createElement(Xr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Xr({sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r,showSearch:s=!1}){let[c,m]=(0,N.useState)({id:null,path:null,revision:0}),[p,n]=(0,N.useState)(""),[l,u]=(0,N.useState)([]),[k,f]=(0,N.useState)(null),[C,b]=(0,N.useState)(""),[E,y]=(0,N.useState)(""),w=L=>{let ie=(k||[]).find(be=>JSON.stringify([be.name,be.commit])===L)?.commit||"";y(L),b(ie),A(be=>be?{...be,snapshot:ie||null}:null),ne(0),n(""),H(null),P({commits:[],snapshot:null,nextOffset:null})},[h,x]=(0,N.useState)({message:"",author:"",path:"",since:"",until:""}),[g,A]=(0,N.useState)(null),D=L=>{A({values:L,snapshot:F.snapshot}),ne(0),n(""),H(null),P(Y=>({...Y,commits:[],nextOffset:null}))},v=()=>{se&&(P(L=>({commits:[],snapshot:L.snapshot,nextOffset:null})),H(null),n(""),ne(Math.max(0,se-50)))},q=(0,N.useMemo)(()=>Oo(k||[]),[k]),de=c.id,ae=(L,Y=null)=>{c.id&&u(ie=>[...ie,c]),m(ie=>({id:L,path:Y,revision:ie.revision+1}))},pe=()=>{if(!l.length)return;let L=l[l.length-1];u(Y=>Y.slice(0,-1)),m(Y=>({id:L.id,path:L.path,revision:Y.revision+1}))},H=(L,Y=null)=>m(ie=>({id:L,path:Y,revision:ie.revision+(Y||ie.path?1:0)})),[F,P]=(0,N.useState)({commits:[],snapshot:null,nextOffset:null}),[se,ne]=(0,N.useState)(0),[Me,vt]=(0,N.useState)(0),[ge,we]=(0,N.useState)(!0),[Ne,Ee]=(0,N.useState)("");(0,N.useEffect)(()=>{let L=new AbortController;return we(!0),Ee(""),i("vcs/history",{sessionId:e,repositoryId:o,offset:se,limit:50,...g?{search:g.values}:{},...g?.snapshot||C||F.snapshot?{snapshot:g?.snapshot||C||F.snapshot}:{}},L.signal).then(Y=>{if(!L.signal.aborted){let ie=mt(F,Y,se);P(ie);let be=new Set(F.commits.filter(le=>!ie.commits.some(Ie=>Ie.id===le.id)).map(le=>le.id));m(le=>be.has(le.id)?{id:null,path:null,revision:le.revision+1}:le)}}).catch(Y=>{L.signal.aborted||(Ee(Y.message),Y.code==="vcs/rediscover-required"&&r())}).finally(()=>{L.signal.aborted||we(!1)}),()=>L.abort()},[e,o,se,Me,g,C]);let ye=Vo(F.commits,p);return N.default.createElement("section",{className:"vcs-history vcs-history-browser","aria-label":t("history"),"aria-busy":ge},N.default.createElement("div",{className:"vcs-history-list"},N.default.createElement("p",null,t("historyListOnly")),k!==null&&N.default.createElement("p",null,t("historyRefsScope")),N.default.createElement("label",null,t("historyBranch")," ",N.default.createElement("select",{"aria-label":t("historyBranch"),value:E,disabled:ge,onChange:L=>w(L.target.value)},N.default.createElement("option",{value:""},"HEAD"),E&&!(k||[]).some(L=>JSON.stringify([L.name,L.commit])===E)&&N.default.createElement("option",{value:E},JSON.parse(E)[0]," \xB7 ",C.slice(0,10)," \xB7 ",t("historyPinned")),(k||[]).map(L=>{let Y=JSON.stringify([L.name,L.commit]);return N.default.createElement("option",{key:Y,value:Y},L.name," \xB7 ",L.commit.slice(0,10))}))),s&&N.default.createElement("details",{className:"vcs-help"},N.default.createElement("summary",null,t("historySearchHelp")),N.default.createElement("p",null,t("historyBranchScope"),C&&N.default.createElement(N.default.Fragment,null," \xB7 ",N.default.createElement("code",null,C)))),s&&N.default.createElement("form",{className:"vcs-history-search","aria-label":t("historyServerSearch"),onSubmit:L=>{L.preventDefault(),D({...h})}},N.default.createElement("fieldset",{disabled:ge},N.default.createElement("legend",null,t("historyServerSearch")),N.default.createElement("details",{className:"vcs-help"},N.default.createElement("summary",null,t("historySearchHelp")),N.default.createElement("p",null,t("historyServerScope"))),["message","author","path","since","until"].map(L=>N.default.createElement("label",{key:L},t("historyServer_"+L)," ",N.default.createElement("input",{maxLength:L==="since"||L==="until"?40:1024,placeholder:L==="since"||L==="until"?"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]":void 0,"aria-label":t("historyServer_"+L),value:h[L],onChange:Y=>x(ie=>({...ie,[L]:Y.target.value}))}))),N.default.createElement("button",{type:"submit"},t("historyServerApply")),N.default.createElement("button",{type:"button",onClick:()=>{x({message:"",author:"",path:"",since:"",until:""}),D({})}},t("historyServerClear")))),g&&N.default.createElement("p",{role:"status"},t("historyServerActive"),": ",JSON.stringify(g.values)," \xB7 ",N.default.createElement("code",null,g.snapshot||F.snapshot)),s&&N.default.createElement(N.default.Fragment,null,N.default.createElement("label",null,t("historySearch")," ",N.default.createElement("input",{"aria-label":t("historySearch"),value:p,onChange:L=>{n(L.target.value),H(null)}})),N.default.createElement("span",null," ",ye.length," / ",F.commits.length)),!!F.commits.length&&N.default.createElement(N.default.Fragment,null,N.default.createElement("p",{role:"status"},t("historyWindow"),": ",Math.max(0,(F.windowEnd??F.commits.length)-F.commits.length),"\u2013",F.windowEnd??F.commits.length),s&&N.default.createElement("details",{className:"vcs-help"},N.default.createElement("summary",null,t("historySearchHelp")),N.default.createElement("p",null,t("historyWindowScope")))),!!F.commits.length&&!ye.length&&N.default.createElement("p",{role:"status"},t("historyNoMatch")),N.default.createElement("ol",{className:"vcs-commit-list"},ye.map(L=>N.default.createElement("li",{key:L.id},N.default.createElement("button",{className:"vcs-commit-row","aria-pressed":de===L.id,onClick:()=>H(L.id)},N.default.createElement("span",{className:"vcs-commit-subject"},L.subject)),N.default.createElement("div",{className:"vcs-commit-meta"},N.default.createElement("code",{title:L.id},L.id.slice(0,10))," \xB7 ",L.author," \xB7 ",N.default.createElement("time",{dateTime:L.date},L.date)),q.has(L.id)&&N.default.createElement("div",{"aria-label":t("historyRefsLabel"),style:{overflowWrap:"anywhere"}},q.get(L.id).names.map(Y=>N.default.createElement("span",{key:Y},N.default.createElement("code",null,Y)," ")),q.get(L.id).hidden>0&&N.default.createElement("span",null,t("historyRefsMore"),": ",q.get(L.id).hidden))))),ge&&N.default.createElement("p",{role:"status"},t("loading")),Ne&&N.default.createElement("p",{role:"alert"},Ne," ",N.default.createElement("button",{onClick:()=>vt(L=>L+1)},t("retry"))),!ge&&!Ne&&!F.commits.length&&N.default.createElement("p",null,t("historyEmpty")),F.truncated&&N.default.createElement("p",{role:"status"},t("historyLimit")),!!se&&N.default.createElement("button",{disabled:ge,onClick:v},t("historyBack")),!Ne&&F.nextOffset!==null&&N.default.createElement("button",{disabled:ge,onClick:()=>ne(F.nextOffset)},t("historyMore")),!!F.commits.length&&N.default.createElement(Yt,{commits:F.commits,selected:de,onSelect:H,t}),N.default.createElement(Qt,{onReferencesLoaded:f,commits:F.commits,sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r})),N.default.createElement("div",{className:"vcs-history-details"},l.length>0&&N.default.createElement("p",null,N.default.createElement("button",{onClick:pe,"aria-label":t("historyNavigationBack")},t("historyNavigationBack")," \xB7 ",l[l.length-1].id.slice(0,10))),de&&N.default.createElement(Xe,{key:JSON.stringify([de,c.revision]),initialPath:c.path,sessionId:e,repositoryId:o,commit:de,onSelectCommit:ae,rpc:i,t,onRediscover:r})))}var te=R(require("react"),1);function $t({sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r}){let[s,c]=(0,te.useState)(null),[m,p]=(0,te.useState)(null),[n,l]=(0,te.useState)(""),[u,k]=(0,te.useState)(0);return(0,te.useEffect)(()=>{let f=new AbortController;return l(""),c(null),p(null),i("vcs/stash-list",{sessionId:e,repositoryId:o},f.signal).then(C=>{f.signal.aborted||c(C.stashes)}).catch(C=>{f.signal.aborted||(l(C.message),C.code==="vcs/rediscover-required"&&r())}),()=>f.abort()},[e,o,u]),n?te.default.createElement("section",{"aria-label":t("stashTitle")},te.default.createElement("h3",null,t("stashTitle")),te.default.createElement("p",{role:"alert"},n," ",te.default.createElement("button",{onClick:()=>k(f=>f+1)},t("retry")))):s?te.default.createElement("section",{"aria-label":t("stashTitle")},te.default.createElement("h3",null,t("stashTitle")),te.default.createElement("p",null,t("stashScope")),s.length?te.default.createElement("ol",null,s.map(f=>te.default.createElement("li",{key:f.id},te.default.createElement("button",{"aria-pressed":m===f.id,onClick:()=>p(f.id)},te.default.createElement("code",null,f.ref)," \xB7 ",f.message)))):te.default.createElement("p",{role:"status"},t("stashEmpty")),m&&te.default.createElement(Xe,{sessionId:e,repositoryId:o,commit:m,onSelectCommit:()=>{},rpc:i,t,onRediscover:r})):te.default.createElement("section",{"aria-label":t("stashTitle")},te.default.createElement("h3",null,t("stashTitle")),te.default.createElement("p",{role:"status"},t("loading")))}var xe=R(require("react"),1);var _=R(require("react"),1);function Xt(e){return _.default.createElement(Zr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Zr({sessionId:e,repositoryId:o,rpc:i,t,onRediscover:r}){let[s,c]=(0,_.useState)(""),[m,p]=(0,_.useState)(null),[n,l]=(0,_.useState)(null),[u,k]=(0,_.useState)(""),[f,C]=(0,_.useState)(!1),b=(0,_.useRef)(null),E=w=>{b.current?.abort();let h=new AbortController;b.current=h,C(!0),k(""),l(null),p(w),i("vcs/grep",{sessionId:e,repositoryId:o,query:w},h.signal).then(x=>{h.signal.aborted||l(x.matches)}).catch(x=>{h.signal.aborted||(k(x.message),x.code==="vcs/rediscover-required"&&r())}).finally(()=>{h.signal.aborted||C(!1)})};(0,_.useEffect)(()=>()=>b.current?.abort(),[]);let y=w=>{w.preventDefault();let h=s.trim();h&&E(h)};return _.default.createElement("section",{"aria-label":t("grepTitle")},_.default.createElement("h3",null,t("grepTitle")),_.default.createElement("p",null,t("grepScope")),_.default.createElement("form",{onSubmit:y},_.default.createElement("input",{"aria-label":t("grepQuery"),maxLength:1024,placeholder:t("grepPlaceholder"),value:s,onChange:w=>c(w.target.value)}),_.default.createElement("button",{type:"submit",disabled:f||!s.trim()},t("grepRun"))),u?_.default.createElement("p",{role:"alert"},u," ",_.default.createElement("button",{onClick:()=>m&&E(m)},t("retry"))):f?_.default.createElement("p",{role:"status"},t("loading")):n&&_.default.createElement(_.default.Fragment,null,_.default.createElement("p",{role:"status"},t("grepCount",{count:n.length})),n.length?_.default.createElement("ol",null,n.map((w,h)=>_.default.createElement("li",{key:h},_.default.createElement("code",null,w.path,":",w.line)," ",_.default.createElement("pre",{style:{margin:0}},w.text)))):_.default.createElement("p",{role:"status"},t("grepEmpty"))))}function Zt(e){return xe.default.createElement(Rr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Rr({t:e,...o}){let[i,t]=(0,xe.useState)("content");return xe.default.createElement("section",{className:"vcs-search-panel","aria-label":e("searchCenter")},xe.default.createElement("nav",{className:"vcs-search-modes","aria-label":e("searchMode")},xe.default.createElement("button",{"aria-pressed":i==="content",onClick:()=>t("content")},e("searchContentMode")),xe.default.createElement("button",{"aria-pressed":i==="history",onClick:()=>t("history")},e("searchHistoryMode"))),i==="content"?xe.default.createElement(Xt,{...o,t:e}):xe.default.createElement(Ze,{...o,t:e,showSearch:!0}))}var Rt={zh:{svnOfferExpired:"\u7F51\u7EDC\u8BBF\u95EE\u63D0\u6848\u5DF2\u8FC7\u671F\uFF1B\u8BF7\u624B\u52A8\u91CD\u8BD5\uFF0C\u5E76\u91CD\u65B0\u52FE\u9009\u540C\u610F\u3002",svnExpired:"SVN \u7F51\u7EDC\u6388\u6743\u5DF2\u8FC7\u671F\uFF0C\u5386\u53F2\u8BF7\u6C42\u5DF2\u505C\u6B62\uFF1B\u8BF7\u91CD\u65B0\u5BA1\u9605\u5E76\u540C\u610F\u3002",svnConsentReview:"\u5BA1\u9605 SVN \u7F51\u7EDC\u8BBF\u95EE\u8303\u56F4",svnConsentScope:"\u540C\u610F\u524D\u4EC5\u8BFB\u53D6\u672C\u5730\u8EAB\u4EFD\u3002\u6388\u6743\u53EA\u9002\u7528\u4E8E\u6240\u5217\u4ED3\u5E93\u3001Session \u4E0E\u76EE\u5F55\uFF0C\u4E94\u5206\u949F\u6709\u6548\uFF1B\u4E0D\u6388\u6743\u91CD\u5B9A\u5411\u6216\u5199\u64CD\u4F5C\u3002",svnConsentExplicit:"\u6211\u540C\u610F\u8BBF\u95EE\u4EE5\u4E0A HTTPS SVN \u4ED3\u5E93",svnConsentApprove:"\u540C\u610F\u5E76\u8BFB\u53D6\u5386\u53F2",svnHistoryScope:"\u56FA\u5B9A revision \u5FEB\u7167\u7684 SVN \u5386\u53F2\uFF1B\u4FDD\u7559\u6700\u8FD1 200 \u6761\uFF0C\u53EF\u52A0\u8F7D\u66F4\u591A\u6216\u8FD4\u56DE",svnHistoryDateScope:"\u6309\u65E5\u671F\uFF08svn:date \u7684\u65E5\u671F\u90E8\u5206\uFF09\u5728\u5DF2\u52A0\u8F7D\u7A97\u53E3\u5185\u6709\u754C\u8FC7\u6EE4\uFF1BSVN REPORT \u4EC5\u652F\u6301 revision \u533A\u95F4\uFF0C\u6545\u4E0D\u5BA3\u79F0\u8DE8\u7A97\u53E3\u5B8C\u6574\u626B\u63CF\u3002",svnHistoricalDiff:"\u5386\u53F2\u53EA\u8BFB Diff",svnCopyHistory:"\u67E5\u770B\u590D\u5236\u6765\u6E90\u5386\u53F2",svnCopyOutside:"\u590D\u5236\u6765\u6E90\u5728\u6388\u6743\u8303\u56F4\u5916\uFF0C\u4E0D\u80FD\u6253\u5F00",svnCopyTraceScope:"\u5355\u72EC\u67E5\u770B\u8303\u56F4\u5185\u56FA\u5B9A\u6765\u6E90\uFF0C\u4ECD\u6B62\u4E8E\u5176\u590D\u5236\u8FB9\u754C\uFF1B\u4E0D\u662F\u81EA\u52A8\u8FFD\u6EAF",svnTraceScope:"\u6587\u4EF6\u8FFD\u6EAF\u5728\u590D\u5236\u8FB9\u754C\u505C\u6B62\uFF0C\u4E0D\u8DDF\u968F\u8303\u56F4\u5916\u6765\u6E90",svnGrantScope:"\u7F51\u7EDC\u6388\u6743\u4E94\u5206\u949F\u6709\u6548\uFF1B\u53EF\u968F\u65F6\u64A4\u9500\uFF0C\u5386\u53F2\u64CD\u4F5C\u4E0D\u4FEE\u6539\u5DE5\u4F5C\u526F\u672C\u3002",svnRevoke:"\u64A4\u9500 SVN \u7F51\u7EDC\u6388\u6743",svnIdentity:"\u67E5\u770B SVN \u672C\u5730\u5386\u53F2\u8BBF\u95EE\u8EAB\u4EFD",svnOfflineIdentity:"\u4EC5\u4ECE\u6388\u6743\u5DE5\u4F5C\u526F\u672C\u8BFB\u53D6\u672C\u5730\u5143\u6570\u636E\uFF0C\u4E0D\u53D1\u8D77\u8FDC\u7A0B\u8BF7\u6C42\u3002",svnRemoteDisabled:"\u8FDC\u7A0B SVN \u5386\u53F2\u4F20\u8F93\u5C1A\u672A\u542F\u7528\uFF1B\u6CA1\u6709\u7F51\u7EDC\u6388\u6743\u6216\u53EF\u7528\u8BBF\u95EE\u51ED\u636E\u3002\u672C\u9875\u4E0D\u662F\u5DF2\u6388\u6743\u5386\u53F2\u5165\u53E3\u3002",historyWindow:"\u5DF2\u52A0\u8F7D\u5386\u53F2\u7A97\u53E3\uFF08\u5E8F\u53F7\u5DE6\u95ED\u53F3\u5F00\uFF09",historyWindowScope:"\u5217\u8868\u53CA\u56FE\u6700\u591A\u4FDD\u7559200\u6761\uFF1B\u7EE7\u7EED\u52A0\u8F7D\u66FF\u6362\u8F83\u65B0\u884C\uFF0C\u8DE8\u7A97\u53E3\u8FB9\u4E0D\u8868\u793A\u5B8C\u6574\u56FE\u3002\u5C40\u90E8\u7B5B\u9009\u4EC5\u5F53\u524D\u7A97\u53E3\u3002",segments:"\u5206\u6BB5\u6D4F\u89C8\u5386\u53F2\u6B63\u6587",segmentBytes:"\u5B57\u8282\u8303\u56F4\uFF08\u5DE6\u95ED\u53F3\u5F00\uFF09",segmentScope:"\u4EC5\u56FA\u5B9A\u5386\u53F2 UTF-8 \u666E\u901A\u6587\u4EF6\uFF0C\u6700\u5927 16 MiB\uFF1B\u6BCF\u7247\u6700\u591A 64 KiB\uFF0C\u66FF\u6362\u663E\u793A\u4E0D\u7D2F\u79EF\u3002\u7247\u6BB5\u884C\u53F7\u4E0D\u662F\u539F\u6587\u4EF6\u884C\u53F7\uFF0C\u4E0D\u662F\u5168\u6587\u4EF6 Diff\u3002",blameOriginLine:"\u67E5\u770B\u6765\u6E90\u5386\u53F2\u884C",blameUnmapped:"\u65E0\u6CD5\u7CBE\u786E\u5B9A\u4F4D\u6765\u6E90\u884C",blamePrevious:"\u4E0A\u4E00\u884C\u9875",blameNext:"\u4E0B\u4E00\u884C\u9875",fileHistoryMergeBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u5408\u5E76\u63D0\u4EA4\uFF0C\u6B64\u5904\u505C\u6B62\uFF0C\u4E0D\u63A8\u65AD\u591A\u7236\u6765\u6E90",fileHistorySimilarity:"Git\u76F8\u4F3C\u5EA6",fileHistoryAmbiguous:"\u591A\u4E2A\u5019\u9009\u6765\u6E90\uFF0C\u6B64\u5904\u505C\u6B62\u8FFD\u6EAF",fileHistoryRenameLimit:"\u5DF2\u8FBE32\u6B21\u91CD\u547D\u540D\u786E\u8BA4\u4E0A\u9650\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryBoundary:"\u8EAB\u4EFD\u8FB9\u754C\uFF1A\u590D\u5236\u6216\u975E\u7CBE\u786E\u91CD\u547D\u540D\uFF0C\u6B64\u5904\u505C\u6B62",fileHistoryFollow:"\u8DDF\u968F\u91CD\u547D\u540D\uFF08\u7B2C\u4E00\u7236\u94FE\uFF09",fileHistoryFollowScope:"\u8DDF\u968FGit\u68C0\u51FA\u7684\u91CD\u547D\u540D\uFF1B50%\u4EE5\u4E0A\u76F8\u4F3C\u91CD\u547D\u540D\u989D\u5916\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u548C\u5408\u5E76\u5904\u505C\u6B62\u3002\u76F8\u4F3C\u5EA6\u4E0D\u662F\u8EAB\u4EFD\u4FDD\u8BC1\uFF1B\u6BCF\u6761\u8BB0\u5F55\u4F7F\u7528\u5F53\u65F6\u8DEF\u5F84\u3002",graphLaneLimit:"\u6CF3\u9053\u6700\u591A32\u6761\uFF1B\u8D85\u51FA\u90E8\u5206\u7701\u7565\u56FE\u5F62\uFF0C\u5B8C\u6574\u5DF2\u52A0\u8F7D\u8282\u70B9\u4E0E\u5173\u7CFB\u4ECD\u53EF\u5728\u6587\u5B57\u4E2D\u67E5\u770B\u3002",historyBranch:"\u5386\u53F2\u8D77\u70B9\uFF08\u672C\u5730\u5F15\u7528\uFF09",historyPinned:"\u56FA\u5B9A\u5FEB\u7167",historyBranchScope:"\u5F15\u7528\u7531\u4E0B\u65B9\u624B\u52A8\u52A0\u8F7D\uFF1B\u9009\u62E9\u540E\u56FA\u5B9A\u8BE5\u6B21OID\uFF0C\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5386\u53F2\u8D77\u70B9\u3002\u9009\u62E9HEAD\u91CD\u65B0\u8BFB\u53D6\u5F53\u524DHEAD\uFF0C\u4E0D\u5207\u6362\u5DE5\u4F5C\u533A\u3002",historyServerSearch:"\u5168\u5386\u53F2\u67E5\u8BE2",historySearchHelp:"\u67E5\u8BE2\u8303\u56F4\u4E0E\u9650\u5236",historyServerScope:"\u67E5\u8BE2\u56FA\u5B9A\u5FEB\u7167\u53EF\u8FBE\u7684\u5B8C\u6574\u5386\u53F2\uFF1B\u8BF4\u660E/\u4F5C\u8005\u4E3A\u5FFD\u7565\u5927\u5C0F\u5199\u7684\u5B57\u9762\u5339\u914D\uFF0C\u8DEF\u5F84\u4E3A\u7CBE\u786E\u8DEF\u5F84\u6216\u76EE\u5F55\uFF0C\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u3002\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u8FC7\u6EE4\u4E14\u542B\u8FB9\u754C\uFF0C\u4F7F\u7528 --since-as-filter \u907F\u514D\u975E\u5355\u8C03\u5386\u53F2\u88AB\u63D0\u524D\u622A\u65AD\uFF1B\u65E0\u65F6\u533A\u6309\u8FD0\u884C\u673A\u5668\u672C\u5730\u65F6\u533A\u89E3\u91CA\u3002\u5206\u9875\u4E0E\u8FD0\u884C\u65F6\u95F4\u6709\u754C\u3002",historyServer_message:"\u63D0\u4EA4\u8BF4\u660E",historyServer_author:"\u4F5C\u8005",historyServer_path:"\u8DEF\u5F84",historyServer_since:"\u5F00\u59CB\u65F6\u95F4\uFF08\u542B\uFF09",historyServer_until:"\u7ED3\u675F\u65F6\u95F4\uFF08\u542B\uFF09",historyServerApply:"\u6267\u884C\u67E5\u8BE2",historyServerClear:"\u6E05\u9664\u67E5\u8BE2",historyServerActive:"\u5F53\u524D\u5DF2\u63D0\u4EA4\u67E5\u8BE2",reviewView:"\u5BA1\u9605\u89C6\u56FE",workspaceView:"\u5DE5\u4F5C\u533A\u6539\u52A8",workspaceRoot:"\u5DE5\u4F5C\u533A\u672C\u8EAB",title:"VCS \u53D8\u66F4",readonly:"\u53EA\u8BFB\u9884\u89C8",refresh:"\u5237\u65B0",back:"\u8FD4\u56DE\u5BF9\u8BDD",all:"\u5168\u90E8\u53D8\u66F4",staged:"\u5DF2\u6682\u5B58",unstaged:"\u672A\u6682\u5B58",search:"\u641C\u7D22\u6587\u4EF6\u2026",noSession:"\u5148\u6253\u5F00\u4E00\u4E2A\u9879\u76EE\u4F1A\u8BDD\uFF0C\u518D\u67E5\u770B\u53D8\u66F4\u3002",noRepo:"\u672A\u53D1\u73B0 Git / SVN \u4ED3\u5E93\u3002\u53EF\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u540E\u91CD\u65B0\u626B\u63CF\u3002",clean:"\u6CA1\u6709\u53D8\u66F4",pick:"\u9009\u62E9\u6587\u4EF6\u67E5\u770B\u5DEE\u5F02",loading:"\u6B63\u5728\u8BFB\u53D6\u2026",side:"\u5DE6\u53F3\u5BF9\u6BD4",inline:"\u884C\u5185\u5BF9\u6BD4",whitespace:"\u5FFD\u7565\u884C\u9996\u5C3E\u7A7A\u767D",conflictStages:"Index \u51B2\u7A81\u9636\u6BB5",conflictStagesScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u51B2\u7A81\u7684 Index \u9636\u6BB51\uFF0F2\uFF0F3\uFF1B\u9636\u6BB5\u7F16\u53F7\u53EA\u8868\u793A Index \u8EAB\u4EFD\uFF0C\u4E0D\u58F0\u79F0\u5408\u5E76\uFF0F\u53D8\u57FA\u5F52\u5C5E\u3002\u7F3A\u5931\u9636\u6BB5\u663E\u793A\u4E3A\u7A7A\uFF0C\u4E0D\u63A8\u65AD\u5185\u5BB9\uFF1B\u4E0D\u8BFB\u53D6\u5DE5\u4F5C\u6587\u4EF6\uFF0C\u4E0D\u89E3\u51B3\u51B2\u7A81\u3002",conflictStage1:"\u9636\u6BB51\uFF08BASE\uFF09",conflictStage2:"\u9636\u6BB52\uFF08ours\uFF09",conflictStage3:"\u9636\u6BB53\uFF08theirs\uFF09",conflictStagePresent:"\u5B58\u5728",conflictStageAbsent:"\u7F3A\u5931\uFF08\u663E\u793A\u4E3A\u7A7A\uFF09",conflictStageGitlink:"\u5B50\u6A21\u5757\u63D0\u4EA4\u5F15\u7528\uFF0C\u4E0D\u52A0\u8F7D\u5185\u5BB9",conflictStageSymlink:"\u94FE\u63A5\u76EE\u6807\u6587\u672C\uFF0C\u4E0D\u8DDF\u968F",conflictStageLeft:"\u5DE6\u4FA7\u9636\u6BB5",conflictStageRight:"\u53F3\u4FA7\u9636\u6BB5",conflictStageMissing:"\u6240\u9009\u9636\u6BB5\u7F3A\u5931\uFF0C\u6309\u7A7A\u5185\u5BB9\u6BD4\u8F83\uFF1B\u4E0D\u63A8\u65AD\u539F\u59CB\u5185\u5BB9\u3002",wrap:"\u81EA\u52A8\u6362\u884C",previous:"\u4E0A\u4E00\u5904",next:"\u4E0B\u4E00\u5904",content:"\u5185\u5BB9",properties:"\u5C5E\u6027",binary:"\u4E8C\u8FDB\u5236\u6216\u53D7\u9650\u5185\u5BB9\u65E0\u6CD5\u6309\u6587\u672C\u6BD4\u8F83",changes:"\u5904\u53D8\u66F4",files:"\u4E2A\u6587\u4EF6",list:"\u5E73\u94FA",tree:"\u76EE\u5F55",emptySearch:"\u6CA1\u6709\u5339\u914D\u6587\u4EF6",session:"\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55",M:"\u4FEE\u6539",A:"\u65B0\u589E",D:"\u5220\u9664",R:"\u91CD\u547D\u540D",C:"\u590D\u5236",U:"\u51B2\u7A81","?":"\u672A\u8DDF\u8E2A",P:"\u5C5E\u6027",error:"\u8BFB\u53D6\u5931\u8D25",retry:"\u91CD\u8BD5",stale:"\u5185\u5BB9\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",repositories:"\u4ED3\u5E93",allRepositories:"\u5168\u90E8\u4ED3\u5E93",gitMode:"Git \u53D8\u66F4",svnBase:"SVN \xB7 BASE \u2194 \u5DE5\u4F5C\u526F\u672C",subdirectory:"\u76F8\u5BF9\u5B50\u76EE\u5F55\uFF08\u53EF\u9009\uFF09",rescan:"\u91CD\u65B0\u626B\u63CF\u4ED3\u5E93",scanHint:"\u4EC5\u626B\u63CF\u5F53\u524D\u76EE\u5F55\u53CA\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF0C\u4E0D\u9012\u5F52\u6DF1\u5165 \xB7 \u7F13\u5B58 5 \u5206\u949F\u540E\u8FC7\u671F",truncated:"\u5DF2\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\u3002\u8F93\u5165\u76F8\u5BF9\u5B50\u76EE\u5F55\u5E76\u91CD\u65B0\u626B\u63CF\u4EE5\u8865\u5145\u5176\u4ED6\u4F4D\u7F6E\u3002",fallback:"\u9AD8\u7EA7\u7F16\u8F91\u5668\u4E0D\u53EF\u7528\uFF0C\u5DF2\u5207\u6362\u4E3A\u57FA\u7840\u5DE6\u53F3\u6587\u672C\u5BF9\u6BD4\u3002",diagnostics:"\u52A0\u8F7D\u8BCA\u65AD",approximate:"\u5185\u5BB9\u8F83\u5927\uFF0C\u4F7F\u7528\u8FD1\u4F3C\u884C\u5BF9\u9F50\u3002",textTruncated:"\u4EC5\u663E\u793A\u524D 2000 \u884C\u3002",textBefore:"\u4FEE\u6539\u524D",textAfter:"\u4FEE\u6539\u540E",textReadonly:"\u53EA\u8BFB\u6587\u672C\u6BD4\u8F83",textEmpty:"\u4E24\u4E2A\u7248\u672C\u5747\u4E3A\u7A7A\u3002",commitDetails:"\u63D0\u4EA4\u8BE6\u60C5",comparisonFocus:"\u4E13\u6CE8\u5BF9\u6BD4",comparisonRestore:"\u6062\u590D\u6587\u4EF6\u5217\u8868",commitSigned:"\u5DF2\u7B7E\u540D \xB7 {format}",commitSignatureUnverified:"\u4EC5\u68C0\u6D4B\u7B7E\u540D\u5934\uFF0C\u672A\u505A\u4FE1\u4EFB\u9A8C\u8BC1\u3002",commitCommitter:"\u63D0\u4EA4\u8005",stashTitle:"\u53EA\u8BFB Stash \u89C6\u56FE",stashScope:"\u4EC5\u8BFB\u53D6\u672C\u5730 refs/stash\uFF0C\u5217\u51FA\u5DF2\u6682\u5B58\u7684\u5DE5\u4F5C\u533A\u5FEB\u7167\uFF1B\u9009\u62E9\u540E\u590D\u7528\u63D0\u4EA4\u8BE6\u60C5\u53EA\u8BFB\u67E5\u770B\u5176\u5DEE\u5F02\u3002\u4E0D\u521B\u5EFA\u3001\u5E94\u7528\u3001\u5220\u9664\u6216\u5F39\u51FA stash\u3002",stashEmpty:"\u5F53\u524D\u4ED3\u5E93\u6CA1\u6709 stash\u3002",stash:"Stash",grep:"\u5185\u5BB9\u641C\u7D22",searchCenter:"\u7EDF\u4E00\u641C\u7D22",searchMode:"\u641C\u7D22\u7C7B\u578B",searchContentMode:"\u6587\u4EF6\u6B63\u6587",searchHistoryMode:"\u63D0\u4EA4\u5386\u53F2",grepTitle:"\u4ED3\u5E93\u5185\u5BB9\u641C\u7D22",grepScope:"\u5728\u5F53\u524D HEAD \u63D0\u4EA4\u6811\u5185\u505A\u6709\u754C\u5B57\u9762\u6587\u672C\u641C\u7D22\uFF08\u6700\u591A500\u6761\u5339\u914D\u3001\u6BCF\u6587\u4EF6100\u6761\u3001\u8F93\u51FA2MiB\uFF09\u3002\u53EA\u8BFB\uFF0C\u4E0D\u641C\u7D22\u672A\u63D0\u4EA4\u6539\u52A8\uFF0C\u4E0D\u65B0\u589E\u7F51\u7EDC\u6216\u5199\u64CD\u4F5C\u3002",grepQuery:"\u641C\u7D22\u5185\u5BB9",grepPlaceholder:"\u8F93\u5165\u8981\u641C\u7D22\u7684\u6587\u672C",grepRun:"\u641C\u7D22",grepCount:"\u5339\u914D {count} \u6761",grepEmpty:"\u6CA1\u6709\u5339\u914D\u3002",commitFileSearch:"\u7B5B\u9009\u672C\u6B21\u63D0\u4EA4\u6587\u4EF6",commitParent:"\u6BD4\u8F83\u7236\u63D0\u4EA4",commitRoot:"\u7A7A\u57FA\u7EBF\uFF08\u6839\u63D0\u4EA4\uFF09",commitNoChanges:"\u76F8\u5BF9\u6B64\u57FA\u7EBF\u65E0\u6587\u4EF6\u53D8\u66F4",history:"\u63D0\u4EA4\u5386\u53F2",workspaceLargeScope:"Git\u5DE5\u4F5C\u533A\u5B8C\u6574UTF-8\u6BD4\u8F83\uFF0C\u6BCF\u4FA78MiB\uFF0F10\u4E07\u884C\uFF1B\u8BFB\u53D6\u671F\u95F4\u53D8\u5316\u4F1A\u62D2\u7EDD\u7ED3\u679C\uFF0C\u6210\u529F\u540E\u6587\u4EF6\u4ECD\u53EF\u88AB\u5916\u90E8\u4FEE\u6539\u3002",largeLoad:"\u52A0\u8F7D\u5B8C\u6574\u5927\u6587\u4EF6\u6BD4\u8F83",largeClose:"\u53D6\u6D88\u5927\u6587\u4EF6\u6A21\u5F0F",largeScope:"\u4EC5Git\u5386\u53F2UTF-8\u666E\u901A\u6587\u4EF6\uFF0C\u6BCF\u4FA7\u6700\u591A8MiB\u300110\u4E07\u884C\uFF1B\u4E0D\u662F\u5DE5\u4F5C\u533A\u6216SVN\u5927\u6587\u4EF6\u3002",diffPending:"\u6B63\u5728\u8BA1\u7B97\u5DEE\u5F02\uFF0C\u5C1A\u4E0D\u80FD\u5224\u65AD\u662F\u5426\u76F8\u540C\u3002",diffIncomplete:"\u5DEE\u5F02\u8BA1\u7B97\u672A\u5B8C\u6210\u6216\u8D85\u65F6\uFF0C\u5F53\u524D\u7ED3\u679C\u53EF\u80FD\u4E0D\u5B8C\u6574\u3002",diffComplete:"\u5DEE\u5F02\u8BA1\u7B97\u5B8C\u6210\u3002",largeFallback:"\u57FA\u7840\u89C6\u56FE\u53EA\u5C55\u793A\u6709\u754C\u7247\u6BB5\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5927\u6587\u4EF6\u5DEE\u5F02\u3002",historyAdvanced:"\u52A0\u8F7D\u9AD8\u7EA7\u53EA\u8BFB Diff",historyBasic:"\u8FD4\u56DE\u57FA\u7840\u6587\u672C Diff",historyListOnly:"\u672C\u5730 HEAD \u5386\u53F2\uFF1B\u9009\u62E9\u63D0\u4EA4\u53CA\u6587\u4EF6\u67E5\u770B\u53EA\u8BFB\u6587\u672C\u5DEE\u5F02\u3002",historyEmpty:"\u5C1A\u65E0\u63D0\u4EA4",historyRefsScope:"\u6807\u8BB0\u6765\u81EA\u6700\u8FD1\u4E00\u6B21\u624B\u52A8\u52A0\u8F7D\u7684\u672C\u5730\u5F15\u7528\uFF0C\u4E0D\u4EE3\u8868\u63D0\u4EA4\u521B\u5EFA\u65F6\u7684\u5206\u652F\u72B6\u6001\uFF1B\u5237\u65B0\u5931\u8D25\u65F6\u4FDD\u7559\u4E0A\u6B21\u6210\u529F\u7ED3\u679C\u3002",historyRefsLabel:"\u5DF2\u52A0\u8F7D\u672C\u5730\u5F15\u7528",historyRefsMore:"\u5176\u4ED6\u5F15\u7528",historySearch:"\u7B5B\u9009\u5DF2\u52A0\u8F7D\u63D0\u4EA4\uFF08\u4F5C\u8005 / \u6458\u8981 / SHA\uFF09",historyNoMatch:"\u5DF2\u52A0\u8F7D\u63D0\u4EA4\u4E2D\u65E0\u5339\u914D\u9879\uFF1B\u53EF\u7EE7\u7EED\u52A0\u8F7D\u66F4\u591A\u3002",historyMore:"\u52A0\u8F7D\u66F4\u591A\u63D0\u4EA4",historyBack:"\u5386\u53F2\u4E0A\u4E00\u9875",historyNavigationBack:"\u8FD4\u56DE\u4E0A\u4E00\u5904",historyNavigationScope:"\u4ECE\u67D0\u4E2A\u63D0\u4EA4\u7684\u6587\u4EF6\u5386\u53F2\u6216 Blame \u8DF3\u8F6C\u5230\u53E6\u4E00\u4E2A\u63D0\u4EA4\u540E\uFF0C\u201C\u8FD4\u56DE\u4E0A\u4E00\u5904\u201D\u4F1A\u56DE\u5230\u8DF3\u8F6C\u524D\u7684\u63D0\u4EA4\uFF0C\u5E76\u5C1D\u8BD5\u9884\u9009\u552F\u4E00\u5B8C\u5168\u5339\u914D\u7684\u8DEF\u5F84\uFF1B\u8FD9\u662F\u672C\u4F1A\u8BDD\u5185\u7684\u9875\u9762\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u8BFB\u53D6\u6216\u5199\u5165\u4ED3\u5E93\u3002",historyLimit:"\u5DF2\u8FBE\u5230\u5386\u53F2\u6D4F\u89C8\u8303\u56F4\u4E0A\u9650\uFF0C\u4ECD\u6709\u66F4\u65E9\u63D0\u4EA4\u672A\u663E\u793A\u3002",autoRefresh:"\u624B\u52A8\u6216\u7A97\u53E3\u805A\u7126\u65F6\u5237\u65B0",comparisonContext:"\u6BD4\u8F83\u4E0A\u4E0B\u6587",encoding:"\u7F16\u7801",before:"\u524D\u7248\u672C",after:"\u540E\u7248\u672C",filterStatus:"\u6309\u72B6\u6001\u7B5B\u9009",allFiles:"\u5168\u90E8\u6587\u4EF6",previousFile:"\u4E0A\u4E00\u4E2A\u6587\u4EF6",nextFile:"\u4E0B\u4E00\u4E2A\u6587\u4EF6",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",revealSelected:"\u5B9A\u4F4D\u5F53\u524D\u6587\u4EF6",reviewPosition:"\u7B2C {index} / {total} \u4E2A\u6587\u4EF6",clearFilters:"\u6E05\u9664\u7B5B\u9009",searchShortcut:"Ctrl / \u2318 + F \u641C\u7D22\uFF1BEsc \u6E05\u7A7A\u641C\u7D22",fileShortcut:"Alt + \u2190 / \u2192 \u5207\u6362\u4E0A\u4E00\u4E2A\u6216\u4E0B\u4E00\u4E2A\u6587\u4EF6",copyPath:"\u590D\u5236\u8DEF\u5F84",copied:"\u5DF2\u590D\u5236",pathCopied:"\u6587\u4EF6\u8DEF\u5F84\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F\u3002",copyFailed:"\u65E0\u6CD5\u590D\u5236\u6587\u4EF6\u8DEF\u5F84\u3002",binaryComparison:"\uFF08{files}\uFF09",revisionTitle:"\u672C\u5730\u7248\u672C A/B \u6BD4\u8F83",revisionScope:"\u53EF\u9009\u62E9\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4\uFF0C\u6216\u624B\u52A8\u52A0\u8F7D\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E\uFF1B\u76F4\u63A5\u6BD4\u8F83 A \u2192 B\uFF0C\u4E0D\u4F7F\u7528\u5408\u5E76\u57FA\u70B9\u3002",revisionBase:"A\uFF08\u5DE6\u4FA7\uFF09",revisionTarget:"B\uFF08\u53F3\u4FA7\uFF09",revisionSwap:"\u4EA4\u6362 A/B",revisionEmpty:"\u4E24\u4E2A\u7248\u672C\u6CA1\u6709\u6587\u4EF6\u53D8\u66F4\u3002",fileHistory:"\u8DEF\u5F84\u5386\u53F2",fileHistoryDateScope:"\u53EF\u9009\u65F6\u95F4\u8FB9\u754C\u6309\u63D0\u4EA4\u65F6\u95F4(committer date)\u542B\u8FB9\u754C\u8FC7\u6EE4\uFF1B\u4E0E\u201C\u8DDF\u968F\u91CD\u547D\u540D\u201D\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\uFF0C\u62A5\u9519\u540E\u53D6\u6D88\u5176\u4E00\u5373\u53EF\u3002",pathHistory:"\u6B64\u8DEF\u5F84\u5386\u53F2",submoduleBadge:"\u5B50\u6A21\u5757",submoduleCheckout_initialized:"\u5B58\u5728\u672C\u5730Git\u6807\u8BB0\uFF08\u672A\u9A8C\u8BC1\u68C0\u51FA\u6709\u6548\u6027\uFF09",submoduleCheckout_uninitialized:"\u672C\u5730\u672A\u521D\u59CB\u5316",submoduleCheckout_absent:"\u672C\u5730\u76EE\u5F55\u7F3A\u5931",submoduleCheckout_unreadable:"\u672C\u5730\u72B6\u6001\u4E0D\u53EF\u8BFB",submodulePointerMoved:"\u6307\u9488\u5DF2\u79FB\u52A8\uFF08\u68C0\u51FAHEAD\u4E0E\u8BB0\u5F55\u4E0D\u540C\uFF09",submoduleDirty:"\u5DE5\u4F5C\u6811\u6709\u672A\u63D0\u4EA4\u6539\u52A8",submoduleScope:"\u9884\u89C8\u663E\u793AIndex\u8BB0\u5F55\u7684\u63D0\u4EA4\u6307\u9488\u4E0E\u672C\u5730Git\u6807\u8BB0\u5B58\u5728\u72B6\u6001\uFF1B\u5DF2\u521D\u59CB\u5316\u68C0\u51FA\u65F6\uFF0C\u6765\u81EA\u7236\u4ED3\u5E93\u81EA\u8EAB git status \u7684\u6307\u9488\u79FB\u52A8\uFF0F\u672A\u63D0\u4EA4\u6539\u52A8\uFF0F\u672A\u8DDF\u8E2A\u5185\u5BB9\u4F1A\u4E00\u5E76\u6807\u6CE8\uFF0C\u4E0D\u8FDB\u5165\u5B50\u6A21\u5757\u3001\u4E0D\u989D\u5916\u89E3\u6790\u5176HEAD\u3001\u4E0D\u52A0\u8F7D\u5185\u5BB9\u3001\u4E0D\u66F4\u65B0\u6216\u540C\u6B65\u3002",pathHistoryScope:"\u624B\u52A8\u8BFB\u53D6\u6240\u9009\u5386\u53F2\u8DEF\u5F84\u5728\u8BE5\u63D0\u4EA4\u4E0B\u7684\u6587\u4EF6\u5386\u53F2\uFF1B\u8DEF\u5F84\u5FC5\u987B\u5B58\u5728\u4E8E\u8BE5\u63D0\u4EA4\u3002\u5173\u95ED\u8DDF\u968F\u65F6\u4E0D\u8DE8\u91CD\u547D\u540D\u3002",pathHistoryNoFollow:"\u672A\u8DDF\u968F\u91CD\u547D\u540D",pathHistoryFollowScope:"\u8DDF\u968F\u6CBF\u7528\u540C\u4E00\u4FDD\u5B88\u89C4\u5219\uFF1A\u7B2C\u4E00\u7236\u94FE\u3001Git\u76F8\u4F3C\u5EA6\u81F3\u5C1150%\u3001\u6BCF\u6B21\u786E\u8BA4\u552F\u4E00\u5220\u9664\uFF0F\u65B0\u589E\u6765\u6E90\uFF0C\u6B67\u4E49\u3001\u590D\u5236\u621632\u6B21\u786E\u8BA4\u4E0A\u9650\u5904\u505C\u6B62\uFF1B\u53EA\u9002\u7528\u4E8E\u63D0\u4EA4\u4E2D\u7684\u666E\u901A\u6587\u4EF6\u6216\u94FE\u63A5\u3002",fileHistoryScope:"\u56FA\u5B9A\u63D0\u4EA4\u5FEB\u7167\u4E0B\u7684\u7CBE\u786E\u8DEF\u5F84\u5386\u53F2\uFF1B\u4E0D\u8FFD\u8E2A\u91CD\u547D\u540D\u524D\u8DEF\u5F84\uFF0C\u5305\u542B\u540C\u8DEF\u5F84\u5220\u9664\u540E\u91CD\u5EFA\u3002\u70B9\u51FB\u63D0\u4EA4\u540E\uFF0C\u4EC5\u5728\u76F8\u5BF9\u9996\u4E2A\u7236\u63D0\u4EA4\uFF08\u6839\u63D0\u4EA4\u4E3A\u7A7A\u6811\uFF09\u7684\u53D8\u66F4\u4E2D\u552F\u4E00\u5339\u914D\u540C\u8DEF\u5F84\u65F6\u6253\u5F00 Diff\uFF1B\u5426\u5219\u53EA\u663E\u793A\u8BE6\u60C5\u3002",blame:"\u884C\u5F52\u5C5E\uFF08Blame\uFF09",blameNavigation:"\u70B9\u51FB\u5F52\u5C5E\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5\uFF0C\u5E76\u5C1D\u8BD5\u9009\u4E2D\u8BE5\u63D0\u4EA4\u53D8\u66F4\u4E2D\u8DEF\u5F84\u5B8C\u5168\u4E00\u81F4\u7684\u552F\u4E00\u6587\u4EF6\uFF08\u4E0D\u4F1A\u731C\u6D4B\u91CD\u547D\u540D\u6216\u65E7\u8DEF\u5F84\uFF09\uFF1B\u65E0\u552F\u4E00\u5339\u914D\u65F6\u4E0D\u9884\u9009\u6587\u4EF6\u3002\u9ED8\u8BA4\u4F7F\u7528\u9996\u4E2A\u7236\u63D0\u4EA4\uFF0C\u4E0D\u81EA\u52A8\u5B9A\u4F4D\u884C\u53F7\u3002",blameScope:"\u6240\u9009\u63D0\u4EA4\u7684 UTF-8 \u666E\u901A\u6587\u672C\uFF0C\u6700\u591A\u663E\u793A\u524D 500 \u884C\uFF1B\u4E0D\u5305\u542B\u5DE5\u4F5C\u533A\u4FEE\u6539\u3002",blameLimit:"\u4EC5\u663E\u793A\u524D 500 \u884C\uFF0C\u7ED3\u679C\u5DF2\u622A\u65AD\u3002",blameEmpty:"\u6587\u4EF6\u6CA1\u6709\u53EF\u663E\u793A\u7684\u884C\u3002",blameLine:"\u884C\u53F7",blameCommit:"\u5F52\u5C5E\u63D0\u4EA4",blameAuthor:"\u4F5C\u8005",blameSummary:"\u63D0\u4EA4\u6458\u8981",blameSource:"\u6E90\u7801",historicalTree:"\u5386\u53F2\u76EE\u5F55",historicalTreeScope:"\u6240\u9009\u63D0\u4EA4\u7684\u76EE\u5F55\u6761\u76EE\uFF1B\u6BCF\u9875 100 \u9879\u3002\u70B9\u51FB\u666E\u901A\u6587\u4EF6\u53EA\u8BFB\u9884\u89C8\uFF1B\u4E0D\u8DDF\u968F\u7B26\u53F7\u94FE\u63A5\u6216\u5B50\u6A21\u5757\u3002",treePreview:"\u5386\u53F2\u6587\u4EF6\u9884\u89C8",treeClose:"\u5173\u95ED\u6587\u4EF6\u9884\u89C8",treeEmpty:"\u7A7A\u6587\u4EF6\u6216\u65E0\u53EF\u663E\u793A\u7684\u6587\u672C\u3002",treeSearch:"\u7B5B\u9009\u5F53\u524D\u76EE\u5F55\u540D\u79F0",treeBreadcrumbs:"\u5386\u53F2\u76EE\u5F55\u8DEF\u5F84",treeUp:"\u4E0A\u7EA7\u76EE\u5F55",treeEntries:"\u4E2A\u6761\u76EE",treePrevious:"\u4E0A\u4E00\u9875",treeNext:"\u4E0B\u4E00\u9875",historyGraph:"\u5C40\u90E8\u63D0\u4EA4\u56FE",graphScope:"\u4EC5\u5C55\u793A\u5DF2\u52A0\u8F7D\u5386\u53F2\u7684\u524D 200 \u4E2A\u63D0\u4EA4\uFF0C\u6700\u591A 1000 \u6761\u7236\u5B50\u8FB9\uFF1B\u4E0D\u53D7\u6587\u672C\u7B5B\u9009\u5F71\u54CD\uFF0C\u4E0D\u4EE3\u8868\u5B8C\u6574\u5206\u652F\u56FE\u3002\u8282\u70B9\u70B9\u51FB\u53EF\u67E5\u770B\u8BE6\u60C5\u3002",graphLimit:"\u56FE\u5DF2\u8FBE\u5230\u8282\u70B9\u6216\u8FB9\u4E0A\u9650\uFF0C\u90E8\u5206\u5173\u7CFB\u672A\u5C55\u793A\u3002",graphMissing:"\u7236\u63D0\u4EA4\u672A\u5728\u5F53\u524D\u56FE\u4E2D",graphRelations:"\u7236\u5B50\u5173\u7CFB\uFF08\u6587\u672C\uFF09",graphInvalid:"\u5F53\u524D\u63D0\u4EA4\u987A\u5E8F\u65E0\u6CD5\u7ED8\u56FE\uFF1B\u8BF7\u4F7F\u7528\u5386\u53F2\u5217\u8868\u3002",imageCompare:"PNG \u56FE\u7247\u6BD4\u8F83",imageBefore:"\u6240\u9009\u7236\u63D0\u4EA4",imageAfter:"\u6240\u9009\u63D0\u4EA4",imageAbsent:"\u6B64\u4FA7\u6CA1\u6709\u6587\u4EF6\u3002",imageInvalid:"\u56FE\u7247\u54CD\u5E94\u65E0\u6548\u3002",imageMetadata:"\u9884\u89C8\u5DF2\u79FB\u9664\u9644\u52A0\u5143\u6570\u636E\u3002",imageScope:"\u652F\u6301\u975E\u4EA4\u9519\u9759\u6001 PNG\u30018\u4F4D\u57FA\u7EBF/\u6E10\u8FDB JPEG \u666E\u901A\u6587\u4EF6\uFF0C\u4EE5\u53CA\u5355\u5757\u9759\u6001VP8\uFF0F\u65E0\u635FVP8L WebP\uFF08\u4E0D\u652F\u6301\u7B97\u672F\u7F16\u7801/CMYK JPEG\u3001\u6269\u5C55/\u52A8\u753B WebP\uFF09\uFF1B\u6BCF\u4FA7\u6700\u591A 2 MiB\u30011600 \u4E07\u50CF\u7D20\u3002\u5143\u6570\u636E\u88AB\u79FB\u9664\uFF0C\u4E0D\u9002\u7528\u4E8E\u8272\u5F69\u7CBE\u786E\u6027\u5BA1\u9605\u3002\u652F\u6301\u5386\u53F2\u63D0\u4EA4\u3001\u56FA\u5B9A A/B \u53CA Git \u5DE5\u4F5C\u533A\uFF1B\u6309\u6240\u9009\u6A21\u5F0F\u8BFB\u53D6 HEAD\u3001\u6682\u5B58\u533A\u6216\u5DE5\u4F5C\u6587\u4EF6\u3002\u51B2\u7A81\u56FE\u7247\u4E0D\u652F\u6301\u3002",commitMessageLimit:"\u5B8C\u6574\u63D0\u4EA4\u8BF4\u660E\u8D85\u8FC7 2 MiB \u9884\u89C8\u4E0A\u9650\uFF0C\u5DF2\u7701\u7565\u3002",revisionLoadRefs:"\u52A0\u8F7D / \u5237\u65B0\u672C\u5730\u5206\u652F\u4E0E\u6807\u7B7E",revisionRefsScope:"\u672C\u5730\u5206\u652F\u3001\u6307\u5411\u63D0\u4EA4\u7684\u6807\u7B7E\u53CA\u672C\u5730\u7F13\u5B58\u7684\u8FDC\u7A0B\u8DDF\u8E2A\u5F15\u7528\uFF0C\u5171\u6700\u591A1000\u6761\uFF1B\u4E0D\u8FDE\u63A5\u8FDC\u7AEF\u6216fetch\uFF0C\u8FDC\u7A0B\u7F13\u5B58\u53EF\u80FD\u8FC7\u671F\u3002\u91CD\u65B0\u52A0\u8F7D\u65F6\uFF0Corigin/HEAD \u663E\u793A\u5B83\u5F53\u524D\u6307\u5411\u7684\u672C\u5730\u63D0\u4EA4\uFF1B\u5DF2\u9009\u5386\u53F2\u548C\u7248\u672C\u4ECD\u56FA\u5B9A\u3002\u9009\u62E9\u56FA\u5B9A\u4E3A\u52A0\u8F7D\u65F6\u7684\u63D0\u4EA4 OID\uFF1B\u5237\u65B0\u5F15\u7528\u4E0D\u4F1A\u79FB\u52A8\u5DF2\u9009\u7248\u672C\u3002",revisionRefsEmpty:"\u6CA1\u6709\u53EF\u7528\u7684\u672C\u5730\u5206\u652F\u6216\u63D0\u4EA4\u6807\u7B7E\u3002",revisionLoadedCommits:"\u5DF2\u52A0\u8F7D\u7684\u63D0\u4EA4",revisionLocalRefs:"\u672C\u5730\u5F15\u7528\uFF08\u542B\u8FDC\u7A0B\u7F13\u5B58\uFF09",revisionRefsCount:"\u5DF2\u52A0\u8F7D\u53EF\u9009\u5F15\u7528",updatePlugin:"\u66F4\u65B0\u63D2\u4EF6",reloadInterface:"\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0",reloadDone:"\u5DF2\u91CD\u65B0\u52A0\u8F7D VCS \u754C\u9762\uFF1B\u65E7\u8BF7\u6C42\u3001\u7F16\u8F91\u5668\u53CA SVN \u6388\u6743\u5DF2\u6E05\u7406\u3002",reloadRestart:"\u5DF2\u5B89\u88C5\u66F4\u65B0\u6D89\u53CA\u540E\u7AEF\uFF0C\u8BF7\u81EA\u884C\u91CD\u542F DSH \u540E\u5237\u65B0\u9875\u9762\u3002",reloadFailed:"\u52A0\u8F7D\u5931\u8D25\uFF0C\u5DF2\u4FDD\u7559\u539F\u754C\u9762\uFF1B\u8BF7\u91CD\u8BD5\u6216\u91CD\u542F DSH\u3002",updateScope:"\u6B64\u6309\u94AE\u4E0D\u81EA\u52A8\u5B89\u88C5\u3002\u8BF7\u5728\u63D2\u4EF6\u7BA1\u7406\u5668\u4E2D\u68C0\u67E5\u5B89\u88C5\u65B9\u5F0F\uFF1B\u5F53\u524D\u5BBF\u4E3B\u53EF\u80FD\u8981\u6C42\u5148\u5378\u8F7D\u518D\u5B89\u88C5\u3002\u4E5F\u53EF\u5728\u7EC8\u7AEF\u6309\u5B9E\u9645 profile \u548C\u5DF2\u6838\u9A8C\u7248\u672C\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u3002",updateRestart:"\u5B89\u88C5\u540E\u70B9\u51FB\u201C\u68C0\u67E5\u5E76\u52A0\u8F7D\u5DF2\u5B89\u88C5\u66F4\u65B0\u201D\u3002\u4EC5\u5728\u540E\u7AEF\u6307\u7EB9\u4E00\u81F4\u65F6\u52A0\u8F7D\u65B0\u754C\u9762\uFF1B\u5426\u5219\u63D0\u793A\u91CD\u542F\u3002\u4E0D\u81EA\u52A8\u91CD\u542F DSH\u3002",updateManager:"\u6253\u5F00\u63D2\u4EF6\u7BA1\u7406",updateRelease:"\u67E5\u770B\u6700\u65B0\u53D1\u5E03"},en:{svnOfferExpired:"Network access offer expired. Retry manually and check consent again.",svnExpired:"SVN network consent expired; history requests stopped. Review and consent again.",svnConsentReview:"Review SVN network access",svnConsentScope:"Before consent, read local identity only. Access binds this repository, Session and cwd for five minutes; redirects and writes are not authorized.",svnConsentExplicit:"I consent to access the HTTPS SVN repository above",svnConsentApprove:"Consent and read history",svnHistoryScope:"SVN history at a fixed revision snapshot; retain up to 200 rows, load more or go back",svnHistoryDateScope:"Bounded in-window date filter on the svn:date day portion; SVN REPORT supports revision ranges only, so cross-window completeness is never claimed.",svnHistoricalDiff:"Historical read-only Diff",svnCopyHistory:"View copy source history",svnCopyOutside:"Copy source is outside the authorized scope",svnCopyTraceScope:"Separate fixed in-scope source history, stopping at its copy boundary; not automatic tracing",svnTraceScope:"File trace stops at copy boundaries and does not follow out-of-scope sources",svnGrantScope:"Network consent lasts five minutes; revoke at any time. History operations do not modify the working copy.",svnRevoke:"Revoke SVN network consent",svnIdentity:"Inspect local SVN history identity",svnOfflineIdentity:"Read local metadata from the authorized working copy only; no remote request.",svnRemoteDisabled:"Remote SVN history transport is not enabled; no network grant or usable access token. This is not an authorized history entry point.",historyWindow:"Loaded history window (start inclusive, end exclusive)",historyWindowScope:"List and graph retain at most 200 rows; more loads replace newer rows. Boundary edges are not a complete graph. Local filtering covers this window only.",segments:"Browse historical text segments",segmentBytes:"Byte range (start inclusive, end exclusive)",segmentScope:"Committed UTF-8 regular files up to 16 MiB; replaceable 64 KiB segments. Segment line numbers are not original file lines; this is not a full-file Diff.",blameOriginLine:"View origin historical line",blameUnmapped:"Origin line cannot be located precisely",blamePrevious:"Previous line page",blameNext:"Next line page",fileHistoryMergeBoundary:"Identity boundary: merge commit; stopped without inferring parent origin",fileHistorySimilarity:"Git similarity",fileHistoryAmbiguous:"Multiple candidate origins; tracing stopped here",fileHistoryRenameLimit:"32 rename confirmations reached; tracing stopped here",fileHistoryBoundary:"Identity boundary: copy or inexact rename; stopped here",fileHistoryFollow:"Follow renames (first-parent)",fileHistoryFollowScope:"Git-detected renames; similarities of 50% or more require a unique deletion/addition transition. Stops at ambiguity, copies and merges. Similarity is not an identity guarantee; rows use historical paths.",graphLaneLimit:"At most 32 lanes. Overflow geometry is omitted; loaded nodes and relations remain available as text.",historyBranch:"History tip (local reference)",historyPinned:"Pinned snapshot",historyBranchScope:"Load references manually below. Selection pins that OID; refreshing references does not move the history tip. Selecting HEAD reads current HEAD without checking out.",historyServerSearch:"Full history query",historySearchHelp:"Search scope and limits",historyServerScope:"Search all history reachable from the pinned snapshot. Message/author use case-insensitive literal matching; path is an exact path or directory, without rename following. Date bounds filter on committer date inclusively and use --since-as-filter to avoid early termination on non-monotonic history; boundary dates without a timezone use the runner local zone. Pagination and runtime are bounded.",historyServer_message:"Commit message",historyServer_author:"Author",historyServer_path:"Path",historyServer_since:"Since (inclusive)",historyServer_until:"Until (inclusive)",historyServerApply:"Run query",historyServerClear:"Clear query",historyServerActive:"Submitted query",reviewView:"Review view",workspaceView:"Working changes",workspaceRoot:"Workspace root",title:"VCS changes",readonly:"Read-only preview",refresh:"Refresh",back:"Back to chat",all:"All changes",staged:"Staged",unstaged:"Unstaged",search:"Filter files\u2026",noSession:"Open a project session to inspect its changes.",noRepo:"No Git / SVN repositories discovered. Try a relative subdirectory and rescan.",clean:"No changes",pick:"Select a file to review",loading:"Loading\u2026",side:"Side by side",inline:"Inline",whitespace:"Ignore trim whitespace",conflictStages:"Index conflict stages",conflictStagesScope:"Manually reads Index stages 1/2/3 of the selected conflict. Stage numbers are Index identities, not merge/rebase ownership claims. Missing stages show as empty and are never inferred; the working file is not read and the conflict is not resolved.",conflictStage1:"Stage 1 (BASE)",conflictStage2:"Stage 2 (ours)",conflictStage3:"Stage 3 (theirs)",conflictStagePresent:"present",conflictStageAbsent:"absent (shown empty)",conflictStageGitlink:"submodule commit reference, contents not loaded",conflictStageSymlink:"link target text, not followed",conflictStageLeft:"Left stage",conflictStageRight:"Right stage",conflictStageMissing:"A selected stage is absent, so it is compared as empty; original content is not inferred.",wrap:"Word wrap",previous:"Previous change",next:"Next change",content:"Content",properties:"Properties",binary:"Binary or restricted content cannot be compared as text",changes:"changes",files:"files",list:"Flat",tree:"Tree",emptySearch:"No matching files",session:"Session directory",M:"Modified",A:"Added",D:"Deleted",R:"Renamed",C:"Copied",U:"Conflict","?":"Untracked",P:"Property",error:"Failed to read",retry:"Retry",stale:"Content changed. Refresh and try again.",repositories:"Repositories",allRepositories:"All repositories",gitMode:"Git changes",svnBase:"SVN \xB7 BASE \u2194 Working Copy",subdirectory:"Relative subdirectory (optional)",rescan:"Rescan repositories",scanHint:"Scan current directory and immediate children only \xB7 cache expires after 5 minutes",truncated:"Discovery limit reached. Enter a relative subdirectory and rescan to include another location.",fallback:"Advanced editor unavailable. Showing basic side-by-side text comparison.",diagnostics:"Loading diagnostics",approximate:"Large content: approximate line alignment.",textTruncated:"Only the first 2000 lines are displayed.",textBefore:"Before",textAfter:"After",textReadonly:"Read-only text comparison",textEmpty:"Both versions are empty.",commitDetails:"Commit details",comparisonFocus:"Focus comparison",comparisonRestore:"Restore file list",commitSigned:"Signed \xB7 {format}",commitSignatureUnverified:"Signature presence detected; not trust-verified.",commitCommitter:"Committer",stashTitle:"Read-only stashes",stashScope:"Reads only the local refs/stash to list stashed working-copy snapshots; selecting one reuses commit details to review its diff read-only. Never creates, applies, drops, or pops a stash.",stashEmpty:"This repository has no stashes.",stash:"Stash",grep:"Search",searchCenter:"Search center",searchMode:"Search type",searchContentMode:"File contents",searchHistoryMode:"Commit history",grepTitle:"Repository content search",grepScope:"Bounded literal-text search in the current HEAD commit tree (max 500 matches, 100 per file, 2 MiB output). Read-only; never searches uncommitted changes, adds no network or write.",grepQuery:"Search text",grepPlaceholder:"Text to search",grepRun:"Search",grepCount:"{count} matches",grepEmpty:"No matches.",commitFileSearch:"Filter files in this commit",commitParent:"Compare parent",commitRoot:"Empty baseline (root commit)",commitNoChanges:"No file changes against this baseline",history:"Commit history",workspaceLargeScope:"Complete Git working-copy UTF-8 comparison: 8 MiB / 100000 lines per side. Changes during loading reject the result; external edits remain possible afterward.",largeLoad:"Load complete large-file comparison",largeClose:"Cancel large-file mode",largeScope:"Git historical UTF-8 regular files only: 8 MiB and 100000 lines per side, not working-copy or SVN large files.",diffPending:"Computing differences; equality is not yet known.",diffIncomplete:"Difference computation is incomplete or timed out; displayed results may be partial.",diffComplete:"Difference computation completed.",largeFallback:"The basic view shows bounded excerpts, not the complete large-file diff.",historyAdvanced:"Load advanced read-only diff",historyBasic:"Return to basic text diff",historyListOnly:"Local HEAD history. Select a commit and file to view a read-only text diff.",historyEmpty:"No commits yet",historyRefsScope:"Labels reflect the last manually loaded local refs, not branches at commit creation. Failed refreshes retain the last successful result.",historyRefsLabel:"Loaded local references",historyRefsMore:"Additional references",historySearch:"Filter loaded commits (author / subject / SHA)",historyNoMatch:"No matches in loaded commits; you can load more if available.",historyMore:"Load more commits",historyBack:"Previous history page",historyNavigationBack:"Back",historyNavigationScope:"After jumping from one commit's file history or Blame into another commit, \u201CBack\u201D returns to the commit you came from and tries to preselect the single exactly matching path; this is in-page context and reads or writes no repository state.",historyLimit:"History browsing limit reached; older commits are not shown.",autoRefresh:"Refresh manually or on window focus",comparisonContext:"Comparison context",encoding:"Encoding",before:"Before",after:"After",filterStatus:"Filter by status",allFiles:"All files",previousFile:"Previous file",nextFile:"Next file",expandAll:"Expand all",collapseAll:"Collapse all",revealSelected:"Reveal current file",reviewPosition:"File {index} of {total}",clearFilters:"Clear filters",searchShortcut:"Ctrl / \u2318 + F to search; Esc clears search",fileShortcut:"Alt + \u2190 / \u2192 switches the previous or next file",copyPath:"Copy path",copied:"Copied",pathCopied:"File path copied to the clipboard.",copyFailed:"Unable to copy the file path.",binaryComparison:"({files})",revisionTitle:"Local A/B revision comparison",revisionScope:"Choose loaded commits or manually load local branches and tags. Compare A \u2192 B directly, not via merge-base.",revisionBase:"A (left)",revisionTarget:"B (right)",revisionSwap:"Swap A/B",revisionEmpty:"No file changes between these revisions.",fileHistory:"Path history",fileHistoryDateScope:"Optional date bounds filter on committer date inclusively; they cannot combine with rename following, so disable one if an error appears.",pathHistory:"History of this path",submoduleBadge:"submodule",submoduleCheckout_initialized:"local Git marker present (checkout validity not verified)",submoduleCheckout_uninitialized:"not initialized locally",submoduleCheckout_absent:"local directory missing",submoduleCheckout_unreadable:"local state unreadable",submodulePointerMoved:"pointer moved (checkout HEAD differs from recorded)",submoduleDirty:"uncommitted working-tree changes",submoduleScope:"The preview shows the Index-recorded pointer and local Git-marker presence; for an initialized checkout, pointer movement, uncommitted changes and untracked content reported by the parent repository's own git status are annotated, without entering the submodule, separately resolving its HEAD, loading contents, or updating anything.",pathHistoryScope:"Manually reads the file history of the selected historical path at that commit; the path must exist in that commit. Without following, renames are not crossed.",pathHistoryNoFollow:"renames not followed",pathHistoryFollowScope:"Following uses the same conservative rules: first parent, Git similarity of at least 50%, a unique deletion/addition confirmed each time, stopping at ambiguity, copies or the 32-confirmation cap; only committed regular files or links are supported.",fileHistoryScope:"Exact-path history at the pinned commit; no rename following, including deletion and recreation. Selecting a commit opens its Diff only for a unique same-path change against the first parent (empty tree for a root); otherwise only details are shown.",blame:"Blame",blameNavigation:"Select an attributed commit to view details and preselect the single exactly matching path in that commit; rename or old paths are never guessed, and a missing or ambiguous match preselects nothing. The first parent is used and no line is auto-located.",blameScope:"UTF-8 regular text at the selected commit, first 500 lines at most. Working changes are excluded.",blameLimit:"Only the first 500 lines are shown; result truncated.",blameEmpty:"No source lines to display.",blameLine:"Line",blameCommit:"Commit",blameAuthor:"Author",blameSummary:"Summary",blameSource:"Source",historicalTree:"Historical tree",historicalTreeScope:"Entries at the selected commit; 100 per page. Select regular files for read-only preview; symlinks and submodules are not followed.",treePreview:"Historical file preview",treeClose:"Close file preview",treeEmpty:"Empty file or no displayable text.",treeSearch:"Filter names in this directory",treeBreadcrumbs:"Historical directory path",treeUp:"Parent directory",treeEntries:"entries",treePrevious:"Previous page",treeNext:"Next page",historyGraph:"Local commit graph",graphScope:"First 200 loaded commits, at most 1000 parent edges. Independent of text filtering; not a complete branch graph. Select a node for details.",graphLimit:"Node or edge limit reached; some relationships are omitted.",graphMissing:"Parent outside this graph",graphRelations:"Parent relationships (text)",graphInvalid:"Cannot graph this commit order; use the history list.",imageCompare:"PNG image comparison",imageBefore:"Selected parent",imageAfter:"Selected commit",imageAbsent:"No file on this side.",imageInvalid:"Invalid image response.",imageMetadata:"Ancillary metadata was removed from this preview.",imageScope:"Non-interlaced static PNG, 8-bit baseline or progressive JPEG regular files, or single-chunk static VP8 / lossless VP8L WebP (no arithmetic-coded/CMYK JPEG or extended/animated WebP); at most 2 MiB and 16 million pixels per side. Metadata is removed; not suitable for color-critical review. Supports commits, fixed A/B and Git working changes; HEAD, index or working bytes follow the selected mode. Conflicted images are unsupported.",commitMessageLimit:"Full commit message exceeds the 2 MiB preview limit and was omitted.",revisionLoadRefs:"Load / refresh local branches and tags",revisionRefsScope:"Local branches, commit tags and locally cached remote-tracking refs, at most 1000 total; no network or fetch. Remote caches may be stale. Reloading origin/HEAD shows its current local target; selected history and versions stay pinned. Selections pin the loaded commit OID; refreshing refs does not move selected versions.",revisionRefsEmpty:"No local branches or commit tags are available.",revisionLoadedCommits:"Loaded commits",revisionLocalRefs:"Local refs (including remote caches)",revisionRefsCount:"Selectable references loaded",updatePlugin:"Update plugin",reloadInterface:"Check and load installed update",reloadDone:"VCS interface reloaded; old requests, editors and SVN grants were cleaned up.",reloadRestart:"Installed update changes the backend. Restart DSH and refresh the page.",reloadFailed:"Reload failed. Previous interface retained; retry or restart DSH.",updateScope:"This button does not install packages. Check installation options in the plugin manager; this host may require uninstalling before reinstalling. Alternatively run this command with your actual profile and verified version.",updateRestart:"After installation, check and load the installed update. Reload is allowed only when backend fingerprints match; otherwise restart DSH manually. DSH is never restarted automatically.",updateManager:"Open plugin manager",updateRelease:"Latest release"}};function qo(e,o,i,t){let r=e.target;if(!o?.contains(r)||e.defaultPrevented||e.isComposing||r?.closest?.(".monaco-editor")||r?.closest?.(".vcs-history"))return null;if(e.key==="Escape"&&r===i&&t)return"clear";let s=r?.isContentEditable||r?.closest?.('input,textarea,select,[role="textbox"]');if(s&&r!==i)return null;if((e.ctrlKey||e.metaKey)&&!e.altKey&&!e.shiftKey&&e.key?.toLowerCase()==="f")return"search";if(!s&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey){if(e.key==="ArrowLeft")return"previous";if(e.key==="ArrowRight")return"next"}return null}function Jo(e,o){let i=o?[...o.querySelectorAll("button[data-vcs-item]")]:[],t=i.indexOf(e.target);if(t<0)return;let r;if(e.key==="ArrowDown")r=i[t+1];else if(e.key==="ArrowUp")r=i[t-1];else if(e.key==="Home")r=i[0];else if(e.key==="End")r=i.at(-1);else if(e.key==="ArrowRight"&&e.target.dataset.vcsDirectory==="closed"||e.key==="ArrowLeft"&&e.target.dataset.vcsDirectory==="open"){e.preventDefault(),e.target.click();return}else return;e.preventDefault(),r?.focus()}var Uo=e=>"dsh-vcs:project:v1:"+e;function zo(e,o){if(!e)return"";try{let i=(o??globalThis.localStorage)?.getItem(Uo(e));return typeof i=="string"&&i.length<=1024?i:""}catch{return""}}function Wo(e,o,i){if(!(!e||!o))try{(i??globalThis.localStorage)?.setItem(Uo(e),o)}catch{}}function Ko(e,o=""){return e.find(i=>i.id===o)?.id||e.find(i=>i.relativePath===".")?.id||e[0]?.id||""}var Re=(e,o)=>JSON.stringify([e,o]),et=(e,o=".")=>[e.type.toUpperCase(),e.relativePath==="."?o:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),ht=(e,o="all")=>e.type==="git"&&["staged","unstaged"].includes(o)?o:"all",_o=(e="",o="")=>e===o?0:e<o?-1:1;function eo(e=[]){let o={id:"",name:"",directories:new Map,files:[],count:0};for(let t of e){let r=String(t.path||"").split("/").filter(Boolean);if(!r.length)continue;let s=o;for(let c of r.slice(0,-1)){let m=s.id?s.id+"/"+c:c;s.directories.has(c)||s.directories.set(c,{id:m,name:c,directories:new Map,files:[],count:0}),s=s.directories.get(c),s.count++}s.files.push(t)}let i=t=>({...t,directories:[...t.directories.values()].sort((r,s)=>_o(r.name,s.name)).map(i),files:[...t.files].sort((r,s)=>_o(r.path,s.path))});return i(o)}function Yo(e=[],o){let i=e.findIndex(t=>t.id===o);return{index:i<0?0:i+1,total:e.length}}function Qo(e=[],o,i){if(!e.length||!["previous","next"].includes(i))return null;let t=e.findIndex(c=>c.id===o),r=i==="next"?1:-1,s=t<0?i==="next"?-1:0:t;return e[(s+r+e.length)%e.length]||null}function $o(e=""){let o=String(e).split("/").filter(Boolean);return o.slice(0,-1).map((i,t)=>o.slice(0,t+1).join("/"))}function to(e,o=[]){for(let i of e?.directories||[])o.push(i.id),to(i,o);return o}function Xo(e=""){return{missing:"deleted",unversioned:"untracked",replaced:"modified",obstructed:"conflicted",copied:"renamed"}[e]||e}function Zo(e=[]){return e.reduce((o,i)=>{let t=Xo(i.status);return o.all++,o[t]=(o[t]||0)+1,o},{all:0})}function ti(e=[],o="",i="all"){let t=o.toLowerCase();return e.filter(r=>(i==="all"||Xo(r.status)===i)&&r.path.toLowerCase().includes(t)).sort((r,s)=>r.path.localeCompare(s.path))}function Ro(e,o,i="",t="all"){return e.map(r=>({...o[r.id],repository:r,changes:ti(o[r.id]?.changes,i,t)}))}function er(e,o,i=""){if(!i||!e||e.cwd!==o.cwd)return o;let t=new Map(e.repositories.map(r=>[r.id,r]));for(let r of o.repositories)t.set(r.id,r);return{...o,repositories:[...t.values()],truncated:e.truncated||o.truncated,warnings:[...e.warnings||[],...o.warnings||[]]}}var tr={modified:"M",added:"A",deleted:"D",missing:"D",renamed:"R",copied:"C",conflicted:"U",untracked:"?",unversioned:"?",replaced:"M",obstructed:"U",normal:"P"},or=e=>new URL("vcs-assets/"+e,document.baseURI).href;function rr(){return a.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true"},a.default.createElement("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),a.default.createElement("path",{d:"M12 4v16M6 10h3M7.5 8.5v3M15 14h3"}))}var oi=["slots","layout","locale","connection","uiSession"];function ir(e,{initialView:o="workspace",onViewChange:i}={}){let t=e.locale.bind("local.vcs"),r=Ot(2),s=Co(e.connection,()=>t("error"));function c(n){let l=n.useSessions(u=>Object.values(u.byId).find(k=>(k.retainedBy.mainView??0)>0));return a.default.createElement(m,{key:JSON.stringify([l?.id,l?.cwd])},a.default.createElement(p,{session:l}))}class m extends a.default.Component{state={error:null};static getDerivedStateFromError(l){return{error:l}}render(){return this.state.error?a.default.createElement("section",{className:"vcs-root"},a.default.createElement("style",null,Bt),a.default.createElement("div",{className:"vcs-message vcs-error"},t("error"),a.default.createElement("button",{onClick:()=>this.setState({error:null})},t("retry")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")))):this.props.children}}function p({session:n}){(0,a.useSyncExternalStore)(d=>e.locale.subscribe(d),()=>e.locale.getSnapshot(),()=>e.locale.getSnapshot());let l=n?.id,[u,k]=(0,a.useState)("all"),[f,C]=(0,a.useState)(0),[b,E]=(0,a.useState)(0),[y,w]=(0,a.useState)(null),[h,x]=(0,a.useState)({}),[g,A]=(0,a.useState)(()=>zo(n?.cwd)),[D,v]=(0,a.useState)(0),[q,de]=(0,a.useState)(""),[ae,pe]=(0,a.useState)(""),[H,F]=(0,a.useState)(null),[P,se]=(0,a.useState)(null),[ne,Me]=(0,a.useState)(!1),[vt,ge]=(0,a.useState)(!1),[we,Ne]=(0,a.useState)(""),[Ee,ye]=(0,a.useState)(""),[L,Y]=(0,a.useState)(""),[ie,be]=(0,a.useState)(!1),[le,Ie]=(0,a.useState)(""),[tt,oo]=(0,a.useState)("all"),[Be,ro]=(0,a.useState)(!0),[io,gt]=(0,a.useState)({}),[Ge,sr]=(0,a.useState)(!0),[yt,nr]=(0,a.useState)(!1),[bt,ar]=(0,a.useState)(!1),[ot,qe]=(0,a.useState)("content"),[so,no]=(0,a.useState)(0),[Je,ao]=(0,a.useState)(o),[lo,co]=(0,a.useState)(null),[lr,cr]=(0,a.useState)(0),[po,dr]=(0,a.useState)("pending"),[xt,wt]=(0,a.useState)({added:0,deleted:0,count:0}),[ue,uo]=(0,a.useState)(!1),mo=(0,a.useRef)(null),fo=(0,a.useRef)(null),He=(0,a.useRef)(null),St=(0,a.useRef)(null),rt=(0,a.useRef)(null),kt=(0,a.useRef)(null),ho=(0,a.useRef)(null),Oe=(0,a.useRef)(null),Ct=(0,a.useRef)(null),Nt=(0,a.useRef)(null),Et=(0,a.useRef)(!1),it=(0,a.useRef)(!1),Ae=y?.repositories||[],Le=Ae.filter(d=>d.id===g),Fe=Le.some(d=>d.type==="git"),Ht=Le.some(d=>d.type==="svn"),Ue=(Fe||Ht)&&Je==="history",st=Fe&&Je==="stash",nt=Fe&&Je==="grep",me=Ue||st||nt;(0,a.useEffect)(()=>{i?.(Je)},[Je]);let At=d=>{Oe.current?.abort(),se(null),F(null),ye(""),ao(d)};(0,a.useEffect)(()=>{Ae.some(d=>d.id===g)&&Wo(n?.cwd,g)},[n?.cwd,g,y]);let ze=()=>{ho.current?.abort(),Oe.current?.abort(),se(null),F(null),ye(""),qe("content"),wt({added:0,deleted:0,count:0})},at=()=>{it.current=!1,ze(),Ct.current?.abort(),Nt.current=y,w(null),x({}),pe(q.trim()),v(d=>d+1)},Se=()=>{it.current||(it.current=!0,ze(),Ct.current?.abort(),Nt.current=null,w(null),x({}),pe(""),v(d=>d+1))},vo=(d=!1)=>{d||E(M=>M+1),Et.current=d,d||ze(),d||x({}),C(M=>M+1)};(0,a.useEffect)(()=>{let d=new AbortController;return Ct.current=d,Ne(""),Me(!!l),l&&s("vcs/repositories",{sessionId:l,...ae?{subdirectory:ae}:{}},d.signal).then(M=>{if(!d.signal.aborted){let U=er(Nt.current,M,ae);it.current=!1,A(X=>Ko(U.repositories,X)),w(U)}}).catch(M=>{d.signal.aborted||Ne(M.message)}).finally(()=>{d.signal.aborted||Me(!1)}),()=>d.abort()},[l,D,ae]),(0,a.useEffect)(()=>{let d=new AbortController,M=Et.current;ho.current=d,Et.current=!1,M||(x({}),ye(""));for(let U of Le){let X=ht(U,u);r(()=>s("vcs/status",{sessionId:l,repositoryId:U.id,mode:X},d.signal),d.signal).then(ce=>{d.signal.aborted||x(fe=>({...fe,[U.id]:{...ce,mode:X}}))}).catch(ce=>{if(!d.signal.aborted){if(ce.code==="vcs/rediscover-required"){Se();return}x(fe=>({...fe,[U.id]:{error:ce.message,changes:[],mode:X}}))}})}return()=>d.abort()},[l,y,g,u,f]),(0,a.useEffect)(()=>{let d=M=>{M.target===window&&l&&g&&document.visibilityState==="visible"&&vo(!0)};return window.addEventListener("focus",d),()=>window.removeEventListener("focus",d)},[l,g,u]);let Pe=Ae.find(d=>d.id===H?.repositoryId),ke=H?h[H.repositoryId]:null,Lt=JSON.stringify([l,y?.cwd,H?.repositoryId,u,H?.id]),Te=lo?.key===Lt&&lo?.status===ke;(0,a.useEffect)(()=>co(null),[Lt,ke,me]),(0,a.useEffect)(()=>{let d=new AbortController;return Oe.current=d,se(null),ye(""),wt({added:0,deleted:0,count:0}),qe("content"),ge(!!H&&!!ke),!me&&H&&ke&&Pe&&s("vcs/compare",{sessionId:l,repositoryId:H.repositoryId,mode:ht(Pe,u),id:H.id,...Te?{large:!0}:{}},d.signal).then(M=>{d.signal.aborted||se(M)}).catch(M=>{if(!d.signal.aborted){if(M.code==="vcs/rediscover-required"){Se();return}ye(M.message)}}).finally(()=>{d.signal.aborted||ge(!1)}),()=>d.abort()},[H,ke,l,u,me,Te,lr]),(0,a.useEffect)(()=>{let d=!1,M,U=new AbortController;uo(!1),Y("");let X=document.createElement("link");return X.rel="stylesheet",X.href=or("editor.css"),document.head.appendChild(X),dt(or("editor.js")+"?v="+encodeURIComponent(pt)+"&retry="+so,{signal:U.signal}).then(ce=>{d||(M=ce.createDiff(fo.current,{onStats:wt,onComputation:fe=>{d||dr(fe)}}),He.current=M,uo(!0))}).catch(ce=>{d||Y(ce.message)}),()=>{d=!0,U.abort(),M?.dispose(),He.current=null,X.remove()}},[so]),(0,a.useEffect)(()=>{ue&&(!P||P.binary||me)&&He.current?.setContent({left:{text:""},right:{text:""}},"empty"),ue&&P&&!P.binary&&!me&&He.current?.setContent(P,JSON.stringify([l,y?.cwd,H?.repositoryId,u,H?.id,P.path]))},[ue,P,l,y,H,u,me]),(0,a.useEffect)(()=>{He.current?.options({sideBySide:Ge,ignoreWhitespace:yt,wrap:bt})},[ue,Ge,yt,bt]);let We=Ro(Le,h,le,tt),je=We.flatMap(d=>d.changes),pr=Zo(ke?.changes),Pt=Yo(je,H?.id),go=()=>{Ie(""),oo("all")},ur=async()=>{let d=P?.path||Ce?.path;if(d)try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(d);else{let M=document.createElement("textarea");try{if(M.value=d,M.style.cssText="position:fixed;opacity:0",document.body.appendChild(M),M.select(),!document.execCommand("copy"))throw Error("copy failed")}finally{M.remove()}}be(!0),window.setTimeout(()=>be(!1),1500)}catch{ye(t("copyFailed"))}};(0,a.useEffect)(()=>{let d=M=>{if(me)return;let U=qo(M,mo.current,rt.current,!!le);U&&(M.preventDefault(),U==="search"?(rt.current?.focus(),rt.current?.select()):U==="clear"?Ie(""):Dt(U))};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[le,je,H,me]);let yo=d=>gt(M=>{let U={...M};for(let X of We)for(let ce of to(eo(X.changes)))U[X.repository.id+"\0"+ce]=!d;return U}),mr=()=>{let d=Ce;!d||!H||(ro(!0),go(),gt(M=>{let U={...M};for(let X of $o(d.path))U[H.repositoryId+"\0"+X]=!1;return U}),kt.current=Re(H.repositoryId,d.id))};(0,a.useEffect)(()=>{let d=kt.current;if(!d)return;let M=[...St.current?.querySelectorAll("button[data-vcs-change]")||[]].find(U=>U.dataset.vcsChange===d);M&&(M.scrollIntoView({block:"nearest"}),M.focus(),kt.current=null)},[Be,le,tt,io,We]);let Dt=d=>{let M=Qo(je,H?.id,d);M&&(Oe.current?.abort(),se(null),qe("content"),F({repositoryId:g,id:M.id}))},bo=ne||Le.some(d=>!h[d.id]),Ce=ke?.changes?.find(d=>d.id===H?.id),De=P?.properties,Mt=De?[...new Set([...Object.keys(De.left||{}),...Object.keys(De.right||{})])].filter(d=>De.left?.[d]!==De.right?.[d]):[],_e=d=>tr[d?.status]||d?.status?.slice(0,1).toUpperCase()||"M",xo=P?.binary?[P.left.label,P.right.label].filter(Boolean).join(" \u2194 "):"",Ve=Ee||(vt?t("loading"):l?bo&&!Ce?t("loading"):we||(Ae.length?Ce?P?.binary?t("binary")+(xo?" "+t("binaryComparison",{files:xo}):""):P?!ue&&!L?t("loading"):"":t("pick"):t("pick"):t("noRepo")):t("noSession")),fr=d=>Jo(d,St.current),wo=({entry:d,compact:M=!1,depth:U=0})=>{let X=d.path.lastIndexOf("/");return a.default.createElement("button",{className:"vcs-file","data-vcs-item":!0,"data-vcs-change":Re(g,d.id),"aria-current":H?.repositoryId===g&&H?.id===d.id?"true":void 0,style:{paddingInlineStart:8+U*14},title:(d.oldPath?d.oldPath+" \u2192 ":"")+d.path+" \xB7 "+t(_e(d)),onClick:()=>{Oe.current?.abort(),se(null),qe("content"),F({repositoryId:g,id:d.id})}},a.default.createElement("span",{className:"vcs-status","data-status":_e(d)},_e(d)),a.default.createElement(jt,{submodule:d.submodule,t}),a.default.createElement("span",{className:"vcs-filename"},M?d.path.slice(X+1):d.path,d.oldPath&&a.default.createElement("small",{className:"vcs-filepath"},"\u2190 ",d.oldPath)))},So=({node:d,repository:M,depth:U=0})=>a.default.createElement(a.default.Fragment,null,d.directories.map(X=>{let ce=M.id+"\0"+X.id,fe=!!io[ce];return a.default.createElement(a.default.Fragment,{key:ce},a.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":fe?"closed":"open","aria-expanded":!fe,style:{paddingInlineStart:8+U*14},onClick:()=>gt(hr=>({...hr,[ce]:!fe}))},a.default.createElement("span",{"aria-hidden":"true"},fe?"\u203A":"\u2304"),X.name,a.default.createElement("small",null,X.count)),!fe&&a.default.createElement(So,{node:X,repository:M,depth:U+1}))}),d.files.map(X=>a.default.createElement(wo,{key:Re(M.id,X.id),entry:X,compact:d.id!=="",depth:U})));return a.default.createElement("section",{ref:mo,className:"vcs-root","aria-label":t("title")},a.default.createElement("style",null,Bt),a.default.createElement("header",{className:"vcs-top"},a.default.createElement(rr,null),a.default.createElement("h1",{className:"vcs-title"},t("title")),a.default.createElement("span",{className:"vcs-badge"},t("readonly")),a.default.createElement("span",{className:"vcs-spacer"}),a.default.createElement("select",{"aria-label":t("repositories"),value:g,disabled:ne||!Ae.length,onChange:d=>{ze(),x({}),A(d.target.value)}},!Ae.length&&a.default.createElement("option",{value:""},t("repositories")),Ae.map(d=>a.default.createElement("option",{key:d.id,value:d.id},et(d,t("workspaceRoot"))))),a.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",a.default.createElement("select",{"aria-label":t("gitMode"),value:u,disabled:me||!Le.some(d=>d.type==="git"),onChange:d=>{ze(),x({}),k(d.target.value)}},["all","unstaged","staged"].map(d=>a.default.createElement("option",{key:d,value:d},t(d))))),a.default.createElement("button",{onClick:()=>vo(!1),disabled:bo||!l},t("refresh")),a.default.createElement("button",{onClick:()=>e.layout.selectPanel(null)},t("back")),a.default.createElement("div",{className:"vcs-path",title:y?.cwd||n?.cwd},t("session"),": ",y?.cwd||n?.cwd||"\u2014"),a.default.createElement("form",{className:"vcs-discovery",onSubmit:d=>{d.preventDefault(),at()}},a.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:q,onChange:d=>de(d.target.value)}),a.default.createElement("button",{disabled:!l||ne},t("rescan")),a.default.createElement("span",null,t("scanHint"))),y?.truncated&&a.default.createElement("div",{className:"vcs-notice"},t("truncated")),(y?.warnings||[]).map((d,M)=>a.default.createElement("div",{className:"vcs-notice",key:M},typeof d=="string"?d:d.message||JSON.stringify(d)))),Le.filter(d=>d.type==="svn"&&!me).map(d=>a.default.createElement(a.default.Fragment,{key:JSON.stringify([l,d.id,D,f])},a.default.createElement(Vt,{repositoryId:d.id,sessionId:l,rpc:s,t,onRediscover:Se}))),(Fe||Ht)&&a.default.createElement(a.default.Fragment,null,a.default.createElement("nav",{className:"vcs-review-views","aria-label":t("reviewView")},a.default.createElement("button",{"aria-pressed":!me,onClick:()=>ao("workspace")},t("workspaceView")),a.default.createElement("button",{"aria-pressed":Ue,"aria-expanded":Ue,onClick:()=>At("history")},t("history")),Fe&&a.default.createElement(a.default.Fragment,null,a.default.createElement("button",{"aria-pressed":st,"aria-expanded":st,onClick:()=>At("stash")},t("stash")),a.default.createElement("button",{"aria-pressed":nt,"aria-expanded":nt,onClick:()=>At("grep")},t("grep")))),Ue&&Ht&&a.default.createElement(Jt,{key:JSON.stringify([l,g,b,D]),sessionId:l,repositoryId:g,rpc:s,t,onRediscover:Se}),Ue&&Fe&&a.default.createElement(Ze,{key:JSON.stringify([l,g,b,D]),sessionId:l,repositoryId:g,rpc:s,t,onRediscover:Se}),st&&a.default.createElement($t,{sessionId:l,repositoryId:g,rpc:s,t,onRediscover:Se}),nt&&a.default.createElement(Zt,{sessionId:l,repositoryId:g,rpc:s,t,onRediscover:Se})),a.default.createElement("div",{className:"vcs-body",hidden:me,"aria-label":t("workspaceView")},a.default.createElement("aside",{className:"vcs-files"},a.default.createElement("div",{className:"vcs-filter"},a.default.createElement("input",{ref:rt,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:le,onChange:d=>Ie(d.target.value)}),(le||tt!=="all")&&a.default.createElement("button",{className:"vcs-clear-filter",onClick:go},t("clearFilters"))),a.default.createElement("div",{className:"vcs-status-filter","aria-label":t("filterStatus")},["all","modified","added","deleted","renamed","conflicted","untracked"].map(d=>a.default.createElement("button",{key:d,"aria-pressed":tt===d,onClick:()=>oo(d)},t(d==="all"?"allFiles":tr[d]||"M")," ",a.default.createElement("small",null,pr[d]||0)))),a.default.createElement("div",{className:"vcs-count"},a.default.createElement("span",null,je.length," ",t("files")),a.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),a.default.createElement("button",{"aria-pressed":Be,onClick:()=>ro(!Be)},t(Be?"tree":"list"))),Be&&a.default.createElement("div",{className:"vcs-tree-actions"},a.default.createElement("button",{onClick:()=>yo(!0)},t("expandAll")),a.default.createElement("button",{onClick:()=>yo(!1)},t("collapseAll")),a.default.createElement("button",{onClick:mr,disabled:!Ce},t("revealSelected"))),a.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:St,onKeyDown:fr},We.map(d=>{let M=d.repository;return a.default.createElement("section",{className:"vcs-repository",key:M.id,"aria-label":et(M,t("workspaceRoot"))},a.default.createElement("div",{className:"vcs-repository-heading",title:M.root},a.default.createElement("strong",null,et(M,t("workspaceRoot"))),a.default.createElement("small",null,M.type==="svn"?t("svnBase"):t(ht(M,u)))),d.error?a.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},d.error,a.default.createElement("button",{onClick:at},t("rescan"))):h[M.id]?Be?a.default.createElement(So,{node:eo(d.changes),repository:M}):d.changes.map(U=>a.default.createElement(wo,{key:Re(M.id,U.id),entry:U})):a.default.createElement("div",{className:"vcs-message"},t("loading")),!d.error&&h[M.id]&&!d.changes.length&&a.default.createElement("div",{className:"vcs-message"},t(le?"emptySearch":"clean")))}),!We.length&&a.default.createElement("div",{className:"vcs-message"},ne?t("loading"):we||t(l?"noRepo":"noSession"),we&&a.default.createElement("button",{onClick:at},t("rescan"))))),a.default.createElement("main",{className:"vcs-detail"},a.default.createElement("div",{className:"vcs-filehead"},a.default.createElement("strong",{title:P?.path||Ce?.path},Pe?et(Pe,t("workspaceRoot"))+" / ":"",P?.path||Ce?.path||t("pick")),a.default.createElement("button",{className:"vcs-copy-path",disabled:!(P?.path||Ce?.path),onClick:ur},t(ie?"copied":"copyPath")),ie&&a.default.createElement("span",{className:"vcs-sr-only",role:"status"},t("pathCopied")),a.default.createElement("span",{className:"vcs-spacer"}),P&&!P.binary&&ue&&a.default.createElement(a.default.Fragment,null,a.default.createElement("span",{className:"vcs-add"},"+",xt.added),a.default.createElement("span",{className:"vcs-del"},"\u2212",xt.deleted))),L&&a.default.createElement("div",{className:"vcs-notice",role:"status"},t("fallback")," ",a.default.createElement("button",{onClick:()=>no(d=>d+1)},t("retry")),a.default.createElement("details",null,a.default.createElement("summary",null,t("diagnostics")),L)),P&&a.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},a.default.createElement("span",{className:"vcs-context-status","data-status":_e(P)},t(_e(P))),P.oldPath&&a.default.createElement("span",{className:"vcs-context-rename",title:P.oldPath+" \u2192 "+P.path},P.oldPath," ",a.default.createElement("b",null,"\u2192")," ",P.path),a.default.createElement("span",null,P.left.label||"\u2014"," ",a.default.createElement("b",null,"\u2194")," ",P.right.label||"\u2014"),(P.left.encoding||P.right.encoding)&&a.default.createElement("span",null,t("encoding"),": ",P.left.encoding||"\u2014"," / ",P.right.encoding||"\u2014")),P&&Pe?.type==="git"&&a.default.createElement(Ye,{key:JSON.stringify([l,y?.cwd,H.repositoryId,u,H.id,f,ke]),workspace:!0,sessionId:l,repositoryId:H.repositoryId,mode:u,id:H.id,rpc:s,t,onRediscover:Se}),Pe?.type==="git"&&(Te||P?.notice?.includes("2 MiB"))&&a.default.createElement("div",{className:"vcs-notice"},a.default.createElement("span",null,t("workspaceLargeScope")),a.default.createElement("button",{onClick:()=>{Oe.current?.abort(),se(null),co(Te?null:{key:Lt,status:ke})}},t(Te?"largeClose":"largeLoad")),Te&&Ee&&a.default.createElement("button",{onClick:()=>cr(d=>d+1)},t("retry"))),P?.large&&a.default.createElement("p",{role:"status"},t(L?"largeFallback":po==="complete"?"diffComplete":po==="incomplete"?"diffIncomplete":"diffPending")),P?.notice&&a.default.createElement("div",{className:"vcs-notice"},P.notice),P?.submodule&&a.default.createElement("p",{role:"status"},t("submoduleScope")),P?.status==="conflicted"&&Pe?.type==="git"&&a.default.createElement(Tt,{key:JSON.stringify([l,H.repositoryId,u,H.id,f]),sessionId:l,repositoryId:H.repositoryId,mode:u,id:H.id,rpc:s,t,onRediscover:Se}),Mt.length>0&&a.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(d=>a.default.createElement("button",{key:d,"aria-pressed":ot===d,onClick:()=>qe(d)},t(d),d==="properties"?" ("+Mt.length+")":""))),a.default.createElement("div",{className:"vcs-labels"},a.default.createElement("span",null,P?.left.label||"\u2014",P?.left.encoding?" \xB7 "+P.left.encoding:""),a.default.createElement("span",null,P?.right.label||"\u2014",P?.right.encoding?" \xB7 "+P.right.encoding:"")),a.default.createElement("div",{className:"vcs-editorbox","data-hidden":!!Ve||ot!=="content",style:ot==="properties"?{display:"none"}:void 0},a.default.createElement("div",{className:"vcs-editor",ref:fo,style:L?{display:"none"}:void 0}),L&&P&&!P.binary&&!Ve&&a.default.createElement(Ke,{comparison:P,labels:ct(t)}),Ve&&a.default.createElement("div",{className:"vcs-message "+(we||Ee||L?"vcs-error":""),role:"status"},Ve,(we||Ee||L)&&a.default.createElement("button",{onClick:()=>L?no(d=>d+1):at()},t(L?"retry":"rescan")))),ot==="properties"&&a.default.createElement("div",{className:"vcs-properties"},a.default.createElement("table",null,a.default.createElement("thead",null,a.default.createElement("tr",null,a.default.createElement("th",null,t("properties")),a.default.createElement("th",null,P?.left.label||t("before")),a.default.createElement("th",null,P?.right.label||t("after")))),a.default.createElement("tbody",null,Mt.map(d=>a.default.createElement("tr",{key:d},a.default.createElement("th",null,d),a.default.createElement("td",null,De.left?.[d]??"\u2014"),a.default.createElement("td",null,De.right?.[d]??"\u2014")))))),a.default.createElement("footer",{className:"vcs-toolbar"},a.default.createElement("button",{disabled:!ue,"aria-pressed":Ge,onClick:()=>sr(!Ge)},t(Ge?"side":"inline")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ue,checked:yt,onChange:d=>nr(d.target.checked)}),t("whitespace")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!ue,checked:bt,onChange:d=>ar(d.target.checked)}),t("wrap")),a.default.createElement("span",{className:"vcs-spacer"}),ue&&a.default.createElement("span",null,xt.count," ",t("changes")),a.default.createElement("button",{disabled:!ue||!P||!!Ve,onClick:()=>He.current?.navigate("previous")},t("previous")),a.default.createElement("button",{disabled:!ue||!P||!!Ve,onClick:()=>He.current?.navigate("next")},t("next")),Pt.index>0&&a.default.createElement("span",{className:"vcs-review-position"},t("reviewPosition",{index:Pt.index,total:Pt.total})),a.default.createElement("span",{className:"vcs-toolbar-separator"}),a.default.createElement("button",{title:t("fileShortcut"),disabled:!je.length,onClick:()=>Dt("previous")},t("previousFile")),a.default.createElement("button",{title:t("fileShortcut"),disabled:!je.length,onClick:()=>Dt("next")},t("nextFile"))))))}return c}function ri(e){e.effect(()=>e.locale.register("local.vcs",Rt));let o=e.locale.bind("local.vcs"),i=ir(e);e.slots.inject("main",()=>e.slots.register({name:"main",key:"local-vcs"},i)),e.slots.inject("sidebar.panellist",()=>e.slots.register({name:"sidebar.panellist",id:"local-vcs",label:()=>o("title"),order:65},rr))}
181
181
  return module.exports; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feng0531/dsh-vcs",
3
- "version": "0.4.4",
3
+ "version": "0.4.7",
4
4
  "private": false,
5
5
  "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
6
6
  "type": "module",
package/vcs.mjs CHANGED
@@ -629,14 +629,26 @@ export async function listChanges(repo, mode = 'all', {signal} = {}) { repo = aw
629
629
  // Keep the public adapter decoding export compatible with existing consumers.
630
630
  export {decode} from './text-content.mjs';
631
631
  async function content(fn) { try { return decode(await fn()); } catch (e) { if (e.code === 'TOO_LARGE') return { text: '', notice: 'File exceeds the 2 MiB preview limit.' }; throw e; } }
632
- async function working(root, relative, svnLink = false) {
632
+ async function working(root, relative, svnLink = false, signal) {
633
+ signal?.throwIfAborted();
633
634
  const target = await confined(root, relative);
634
635
  let stat; try { stat = await fs.lstat(target); } catch (e) { if (e.code === 'ENOENT') return { text: '' }; throw e; }
635
636
  if (stat.isSymbolicLink()) return { text: (svnLink ? 'link ' : '') + await fs.readlink(target) };
636
637
  if (!stat.isFile()) return { text: '', notice: 'Directory or special file; no file-content preview.' };
637
638
  if (stat.size > MAX_TEXT) return { text: '', notice: 'File exceeds the 2 MiB preview limit.' };
638
- const handle = await fs.open(target, 'r');
639
- try { const info = await handle.stat(); if (!info.isFile()) throw new Error('Not a regular file'); const buffer = Buffer.alloc(MAX_TEXT + 1); const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0); await confined(root, relative); return decode(buffer.subarray(0, bytesRead)); } finally { await handle.close(); }
639
+ const fingerprint=s=>[s.dev,s.ino,s.size,s.mtimeNs,s.ctimeNs].map(String).join(':');
640
+ const before=await fs.lstat(target,{bigint:true});
641
+ if(!before.isFile()||before.size>BigInt(MAX_TEXT))throw Error('Working file changed before read; refresh status');
642
+ const handle = await fs.open(target,fileFlags.O_RDONLY|(fileFlags.O_NOFOLLOW||0));
643
+ try {
644
+ const opened=await handle.stat({bigint:true});if(!opened.isFile()||fingerprint(opened)!==fingerprint(before))throw Error('Working file changed during open');
645
+ const buffer=Buffer.alloc(Number(before.size)+1);let offset=0;
646
+ while(offset<buffer.length){signal?.throwIfAborted();const {bytesRead}=await handle.read(buffer,offset,buffer.length-offset,offset);if(!bytesRead)break;offset+=bytesRead;}
647
+ signal?.throwIfAborted();await confined(root,relative);
648
+ const after=await handle.stat({bigint:true}),named=await fs.lstat(target,{bigint:true});
649
+ if(offset!==Number(before.size)||!named.isFile()||named.isSymbolicLink()||fingerprint(after)!==fingerprint(before)||fingerprint(named)!==fingerprint(before))throw Error('Working file changed during read; refresh status');
650
+ return decode(buffer.subarray(0,offset));
651
+ } finally { await handle.close(); }
640
652
  }
641
653
  async function gitBlob(root, revision, file, options) {
642
654
  let record;
@@ -772,14 +784,14 @@ export async function getComparison(repo, { mode = 'all', id, large=false, signa
772
784
  if (entry.status === 'conflicted') {
773
785
  notice = 'Unmerged conflict: showing HEAD versus working tree (index has conflict stages).'; leftLabel = 'HEAD'; rightLabel = 'Working tree';
774
786
  try { left = await gitBlob(repo.root, 'HEAD', entry.oldPath || entry.path,{signal}); } catch (e) { if (e.code !== 'VCS_COMMAND') throw e; }
775
- right = await working(repo.root, entry.path);
787
+ right = await working(repo.root, entry.path, false, signal);
776
788
  } else {
777
789
  let hasHead = true; try { await git(repo.root, ['rev-parse', '--verify', 'HEAD']); } catch (e) { if (e.code !== 'VCS_COMMAND') throw e; hasHead = false; }
778
790
  const untracked = entry.indexStatus === '?';
779
791
  const addedToHead = entry.indexStatus === 'A' || entry.indexStatus === 'C';
780
792
  if (!untracked && (mode === 'unstaged' ? entry.indexStatus !== 'D' : (hasHead && !addedToHead))) left = await gitBlob(repo.root, mode === 'unstaged' ? '' : 'HEAD', mode === 'unstaged' ? entry.path : entry.oldPath || entry.path,{signal});
781
793
  if (mode === 'staged') { if (entry.indexStatus !== 'D') right = await gitBlob(repo.root, '', entry.path,{signal}); }
782
- else right = await working(repo.root, entry.path);
794
+ else right = await working(repo.root, entry.path, false, signal);
783
795
  }
784
796
  } else {
785
797
  leftLabel = 'BASE'; rightLabel = 'Working copy';
@@ -792,7 +804,7 @@ export async function getComparison(repo, { mode = 'all', id, large=false, signa
792
804
  if (!directory) left = await content(() => svn(repo.root, ['cat', '--revision', 'BASE', '--', entry.path + '@'], MAX_TEXT));
793
805
  }
794
806
  if (directory) notice = 'Directory change; property differences are shown separately.';
795
- else right = await working(repo.root, entry.path, true);
807
+ else right = await working(repo.root, entry.path, true, signal);
796
808
  if (entry.status !== 'unversioned') props = { left: added ? {} : await properties(repo.root, entry.path, true), right: ['deleted', 'missing'].includes(entry.status) ? {} : await properties(repo.root, entry.path, false) };
797
809
  if (entry.status === 'conflicted') notice = 'Conflicted working copy: showing BASE versus working content.';
798
810
  }