@feng0531/dsh-vcs 0.3.106 → 0.4.0

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.
@@ -1 +1 @@
1
- {"protocol":1,"version":"0.3.106","backend":"c52eff67912918c9d3e939909621fb9c85a17ac398b56d964b712288ba3624e0","interface":"1983d0caae8e1f3f57944f9e11ccb2d1f02e7fbf2574220ab0dabb23c84408c8"}
1
+ {"protocol":1,"version":"0.4.0","backend":"07c4b7bc834152ee97b2cf0df3929dd6bd9a56f3b5c4435543b56c3c236a01ed","interface":"21f088ba09349c4337923f0987994d86b8eaa5c887e37c6844c86b666eb516fc"}
package/dist/interface.js CHANGED
@@ -176,6 +176,6 @@ var vr=Object.create;var at=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 Ft(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(y,E){f++,!(k.length>=2e3)&&k.push({left:y===null?null:{number:y+1,text:i[y]},right:E===null?null:{number:E+1,text:t[E]},kind:y===null?"insert":E===null?"delete":i[y]===t[E]?"equal":"replace"})}for(let y=0;y<r;y++)C(y,y);if(u||!p||!n)for(let y=0;y<Math.max(p,n);y++)C(y<p?r+y:null,y<n?r+y:null);else{let y=n+1,E=new Uint32Array(l);for(let h=p-1;h>=0;h--)for(let w=n-1;w>=0;w--)E[h*y+w]=i[r+h]===t[r+w]?E[(h+1)*y+w+1]+1:Math.max(E[(h+1)*y+w],E[h*y+w+1]);let g=0,x=0;for(;g<p||x<n;)g<p&&x<n&&i[r+g]===t[r+x]?C(r+g++,r+x++):g<p&&(x===n||E[(g+1)*y+x]>=E[g*y+x+1])?C(r+g++,null):C(null,r+x++)}for(let y=0;y<s;y++)C(c+y,m+y);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."},Ot={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 We({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:{...Ot,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:{...Ot,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),re.default.createElement("th",{scope:"col",style:{...Ot,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,y=()=>{C||(C=!0,u&&(u.src=""),l&&c(l))},E=()=>{clearTimeout(k),t?.removeEventListener("abort",x)},g=h=>{f||(f=!0,E(),y(),n(h))},x=()=>g(t.reason||new Error("Image cancelled"));try{l=s(e),u=m(),t?.addEventListener("abort",x,{once:!0}),k=setTimeout(()=>g(new Error("Image decode timed out")),r),u.src=l,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){x();return}if(u.naturalWidth!==o||u.naturalHeight!==i){g(new Error("Image dimensions mismatch"));return}f=!0,E(),p({url:l,dispose:y})}},g)}catch(h){g(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),[y,E]=(0,z.useState)(""),[g,x]=(0,z.useState)(0);return(0,z.useEffect)(()=>{let h=new AbortController,w;return C(null),E(""),(async()=>{let b=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(b.absent){C(b);return}if(!["image/png","image/jpeg","image/webp"].includes(b.mime)||typeof b.base64!="string"||b.base64.length>2796204||!Number.isInteger(b.bytes)||b.bytes<1||b.bytes>2097152)throw Error(u("imageInvalid"));let A=atob(b.base64);if(A.length!==b.bytes)throw Error(u("imageInvalid"));let P=new Blob([Uint8Array.from(A,v=>v.charCodeAt(0))],{type:b.mime});if(w=await Ho(P,{width:b.width,height:b.height,signal:h.signal}),h.signal.aborted){w.dispose();return}C({...b,url:w.url})})().catch(b=>{h.signal.aborted||(E(b.message),b.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),w?.dispose()}},[e,o,i,t,r,s,c,m,p,n,g]),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")),y?z.default.createElement("p",{role:"alert"},y," ",z.default.createElement("button",{onClick:()=>x(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 _e(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 lt(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var me=require("react");function 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 ct(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 dt="0.3.106";function Lo({comparison:e,identity:o,enabled:i,single:t,line:r,sideBySide:s,ignoreWhitespace:c,wrap:m}){let p=(0,me.useRef)(null),n=(0,me.useRef)(null),[l,u]=(0,me.useState)(!1),[k,f]=(0,me.useState)(""),[C,y]=(0,me.useState)("pending");return(0,me.useEffect)(()=>{if(u(!1),y("pending"),f(""),!i)return;let E=h=>new URL("vcs-assets/"+h,document.baseURI).href,g=document.createElement("link");g.rel="stylesheet",g.href=E("editor.css"),document.head.appendChild(g);let x=Ao({node:p.current,comparison:e,key:o,single:t,load:h=>ct(E("editor.js")+"?v="+encodeURIComponent(dt)+"&retry=0",{signal:h}),onReady:h=>{n.current=h,u(!0)},onError:h=>f(h.message),onComputation:y});return()=>{n.current=null;try{x.dispose()}finally{g.remove()}}},[i,e,o,t]),(0,me.useEffect)(()=>{l&&t&&r&&n.current?.revealLine(r)},[l,t,r]),(0,me.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 fe({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:y,error:E,computation:g}=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(x=>!x)},i(u?"historyBasic":"historyAdvanced")),y&&!t&&ee.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},ee.default.createElement("button",{"aria-pressed":s,onClick:()=>c(x=>!x)},i(s?"side":"inline")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:m,onChange:x=>p(x.target.checked)}),i("whitespace")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:n,onChange:x=>l(x.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&&!y&&!E&&ee.default.createElement("p",{role:"status"},i("loading")),e.large&&!t&&y&&ee.default.createElement("p",{role:"status"},i(g==="complete"?"diffComplete":g==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!y&&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:y?"visible":"hidden"},"aria-hidden":!y}),!y&&ee.default.createElement(We,{comparison:e,labels:lt(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),[y,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 g={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},x=s("conflictStageMissing"),h=g[f],w=g[y],b=(0,J.useMemo)(()=>{if(!m)return null;let v=H=>m.stages.find(T=>T.stage===H),q=H=>{let T=v(H);return!T||!T.present?{text:"",label:g[H]}:{text:T.text,label:g[H],...T.binary?{binary:!0}:{},...T.encoding?{encoding:T.encoding}:{},...T.notice?{notice:T.notice}:{}}},le=q(f),se=q(y),ce=[le.notice,se.notice].filter(Boolean);return v(f)?.present&&v(y)?.present||ce.push(x),{path:m.path,left:le,right:se,binary:!!(le.binary||se.binary),...ce.length?{notice:[...new Set(ce)].join(" \xB7 ")}:{}}},[m,f,y,h,w,x]);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||!b)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),P=b.binary&&!b.left.text&&!b.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,g[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},g[v])))),J.default.createElement("label",null,s("conflictStageRight")," ",J.default.createElement("select",{"aria-label":s("conflictStageRight"),value:y,onChange:v=>E(Number(v.target.value))},[1,2,3].map(v=>J.default.createElement("option",{key:v,value:v},g[v])))),b.notice&&J.default.createElement("p",{role:"status"},b.notice),P?J.default.createElement("p",{role:"status"},s("binary")):J.default.createElement(fe,{key:JSON.stringify([t,f,y,m.snapshot]),comparison:b,identity:JSON.stringify([e,o,i,t,f,y,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 pt(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,y]=(0,G.useState)(!1),[E,g]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!c)return;let w=new AbortController;return n(null),u(!1),f(""),y(!0),i("vcs/svn-describe",{sessionId:e,repositoryId:o},w.signal).then(b=>{w.signal.aborted||n(b)}).catch(b=>{w.signal.aborted||(f(b.message),b.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||y(!1)}),()=>w.abort()},[c,e,o,E]);let[x,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!c||!p||p.expiresAt===void 0)return;let w=()=>{n(null),u(!1),h(0),y(!1),f(t("svnOfferExpired"))};try{return pt(p.expiresAt,w)}catch{w()}},[c,p]),(0,G.useEffect)(()=>{if(!x||!c||!p)return;let w=new AbortController;return y(!0),f(""),i("vcs/svn-approve",{sessionId:e,repositoryId:o,offer:p.offer,explicit:!0},w.signal).then(b=>{w.signal.aborted||r(b)}).catch(b=>{w.signal.aborted||(f(b.message),u(!1),b.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||y(!1)}),()=>w.abort()},[x,c,p]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":c,onClick:()=>{h(0),m(w=>!w)}},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),g(w=>w+1)}},t("retry"))),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(w=>G.default.createElement(G.default.Fragment,{key:w},G.default.createElement("dt",null,w),G.default.createElement("dd",null,G.default.createElement("code",null,p[w]))))),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:w=>u(w.target.checked)}),t("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!l,onClick:()=>h(w=>w+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 ut(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=ut({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 Fr(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=Fr(e);return o===0n?null:String(o-1n)}function qt(e){return S.default.createElement(Or,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function Or({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),[y,E]=(0,S.useState)(""),[g,x]=(0,S.useState)(0),[h,w]=(0,S.useState)(""),[b,A]=(0,S.useState)(""),{cursor:P,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:P,limit:50},H.signal).then(T=>{H.signal.aborted||(l(D=>Bo(D,T,v)),v>=200&&k(null))}).catch(T=>{H.signal.aborted||(E(T.message),T.code==="vcs/rediscover-required"&&c())}).finally(()=>{H.signal.aborted||C(!1)}),()=>H.abort()},[P,v,g]);let q=()=>p(H=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...H.trail,{cursor:P,offset:v}].slice(-200)})),le=()=>{let H=m.trail.at(-1);H&&(k(null),l(null),p({...H,trail:m.trail.slice(0,-1)}))},se=n?.entries||[],ce="";try{se=Mo(se,{since:h,until:b})}catch(H){ce=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,T)=>S.default.createElement("label",{key:H},s(H)," ",S.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(H),value:T?b:h,onChange:D=>{k(null),T?A(D.target.value):w(D.target.value)}})))),ce&&S.default.createElement("p",{role:"alert"},ce),!!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(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")),y&&S.default.createElement("p",{role:"alert"},y," ",S.default.createElement("button",{onClick:()=>x(H=>H+1)},s("retry"))),!f&&!y&&!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:le},s("historyBack")),!y&&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,y]=(0,S.useState)(0),[E,g]=(0,S.useState)(""),[x,h]=(0,S.useState)(!1);(0,S.useEffect)(()=>{let b=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r},b.signal).then(A=>{b.signal.aborted||n(A)}).catch(A=>{b.signal.aborted||(f(A.message),A.code==="vcs/rediscover-required"&&m())}),()=>b.abort()},[C]);let w=(p?.changes||[]).filter(b=>b.path.toLocaleLowerCase().includes(E.toLocaleLowerCase()));return S.default.createElement("section",{className:"vcs-commit-details"+(x?" vcs-commit-focused":""),"aria-label":c("commitDetails")},k?S.default.createElement("p",{role:"alert"},k," ",S.default.createElement("button",{onClick:()=>y(b=>b+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:b=>{g(b.target.value),u(null)}})),S.default.createElement("span",null,w.length," / ",p.changes.length),S.default.createElement("ul",{className:"vcs-commit-files"},w.map(b=>S.default.createElement("li",{key:b.id},S.default.createElement("button",{disabled:b.kind!=="file","aria-pressed":l?.id===b.id&&l.mode==="compare",onClick:()=>u({id:b.id,mode:"compare"})},S.default.createElement("span",{className:"vcs-file-status"},b.action," \xB7 "),S.default.createElement("span",{className:"vcs-file-path",title:b.path},b.path,b.copyFromPath&&S.default.createElement("small",null,"\u2190 ",b.copyFromPath," @r",b.copyFromRevision))),b.kind==="file"&&S.default.createElement("div",{className:"vcs-svn-file-actions"},S.default.createElement("button",{onClick:()=>u({id:b.id,mode:"trace"})},c("fileHistory")),b.copyFromPath&&b.copyFromRevision&&!b.copySourceOutsideScope&&S.default.createElement("button",{onClick:()=>u({id:b.id,mode:"copytrace"})},c("svnCopyHistory")," \xB7 ",b.copyFromPath," @r",b.copyFromRevision),b.copySourceOutsideScope&&S.default.createElement("span",null,c("svnCopyOutside")))))),!!p.changes.length&&!w.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":x,onClick:()=>h(b=>!b)},c(x?"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)(null),[C,y]=(0,S.useState)(""),[E,g]=(0,S.useState)(0);return(0,S.useEffect)(()=>{let x=new AbortController;return u(null),y(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,id:p,...k===null?{}:{cursor:k}},x.signal).then(h=>{x.signal.aborted||u(h)}).catch(h=>{x.signal.aborted||(y(h.message),h.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[k,E]),C?S.default.createElement("p",{role:"alert"},C," ",S.default.createElement("button",{onClick:()=>g(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(fe,{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))),l.nextRevision!==null&&S.default.createElement("button",{onClick:()=>f(l.nextRevision)},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 pt(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 y=new AbortController;return p(!0),l(""),i("vcs/svn-revoke",{sessionId:e,repositoryId:o,token:s.token},y.signal).then(()=>{y.signal.aborted||c(null)}).catch(E=>{y.signal.aborted||(l(E.message),E.code==="vcs/rediscover-required"&&r())}).finally(()=>{y.signal.aborted||p(!1)}),()=>y.abort()},[u,s]);let f=y=>{try{Do(y),l(""),k(0),c(y)}catch(E){l(E.message)}},C=async(...y)=>{try{return await i(...y)}catch(E){throw E.code==="vcs/svn-consent-required"&&!y[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(y=>y+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 Fo(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 F=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)(""),[y,E]=(0,Q.useState)(0),g=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:g},h.signal).then(w=>{h.signal.aborted||k(w)}).catch(w=>{h.signal.aborted||(C(w.message),w.code==="vcs/rediscover-required"&&c())}),()=>h.abort()},[m,g,e,o,i,t,y]);let x=(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(fe,{single:!0,comparison:x,identity:JSON.stringify([e,o,i,t,g]),t:s})):Q.default.createElement("p",{role:"status"},s("loading"))))}var O=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,O.useState)({commits:[],nextOffset:null}),[f,C]=(0,O.useState)(0),[y,E]=(0,O.useState)(0),[g,x]=(0,O.useState)(!0),[h,w]=(0,O.useState)("");(0,O.useEffect)(()=>{let A=new AbortController;return x(!0),w(""),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(P=>{A.signal.aborted||k(v=>({...P,commits:f?[...v.commits,...P.commits]:P.commits}))}).catch(P=>{A.signal.aborted||(w(P.message),P.code==="vcs/rediscover-required"&&n())}).finally(()=>{A.signal.aborted||x(!1)}),()=>A.abort()},[e,o,i,t,f,y,r,s,c]);let b=A=>p(A.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":A.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":A.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return O.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":g},O.default.createElement("p",null,p("pathHistoryScope")),O.default.createElement("p",{style:{overflowWrap:"anywhere"}},O.default.createElement("code",null,u.path||t)," \xB7 ",O.default.createElement("code",null,i),u.followsRenames!==void 0&&O.default.createElement(O.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),O.default.createElement("ol",null,u.commits.map(A=>O.default.createElement("li",{key:A.id},O.default.createElement("code",{title:A.id},A.id.slice(0,10))," \xB7 ",l?O.default.createElement("button",{onClick:()=>l(A.id,A.path||t)},A.subject):A.subject,O.default.createElement("div",null,A.boundary&&O.default.createElement("span",null,b(A)," "),A.path&&O.default.createElement("code",null,A.oldPath?A.oldPath+" \u2192 ":"",A.path)," ",A.similarity!==void 0&&O.default.createElement("span",null,p("fileHistorySimilarity"),": ",A.similarity,"% \xB7 "),A.author," \xB7 ",O.default.createElement("time",{dateTime:A.date},A.date))))),g&&O.default.createElement("p",{role:"status"},p("loading")),h&&O.default.createElement("p",{role:"alert"},h," ",O.default.createElement("button",{onClick:()=>E(A=>A+1)},p("retry"))),!g&&!h&&!u.commits.length&&O.default.createElement("p",null,p("historyEmpty")),u.truncated&&O.default.createElement("p",{role:"status"},p("historyLimit")),!h&&u.nextOffset!==null&&O.default.createElement("button",{disabled:g,onClick:()=>C(u.nextOffset)},p("historyMore")))}function zt(e){let[o,i]=(0,O.useState)(!1),[t,r]=(0,O.useState)(!1),[s,c]=(0,O.useState)(""),[m,p]=(0,O.useState)("");return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":o,onClick:()=>i(n=>!n)},e.t("pathHistory")),o&&O.default.createElement(O.default.Fragment,null,O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>r(n.target.checked)}),e.t("fileHistoryFollow")),O.default.createElement("p",null,e.t("pathHistoryFollowScope")),O.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>O.default.createElement("label",{key:n},e.t(n)," ",O.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),O.default.createElement(Gr,{key:String(t),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}function Ke({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,y]=(0,K.useState)(0);(0,K.useEffect)(()=>{let g=new AbortController;return u(null),f(""),r("vcs/tree-file",{sessionId:e,repositoryId:o,commit:i,path:t},g.signal).then(x=>{g.signal.aborted||u(x)}).catch(x=>{g.signal.aborted||(f(x.message),x.code==="vcs/rediscover-required"&&c())}),()=>g.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:()=>y(g=>g+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 Ft(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(y,E){f++,!(k.length>=2e3)&&k.push({left:y===null?null:{number:y+1,text:i[y]},right:E===null?null:{number:E+1,text:t[E]},kind:y===null?"insert":E===null?"delete":i[y]===t[E]?"equal":"replace"})}for(let y=0;y<r;y++)C(y,y);if(u||!p||!n)for(let y=0;y<Math.max(p,n);y++)C(y<p?r+y:null,y<n?r+y:null);else{let y=n+1,E=new Uint32Array(l);for(let h=p-1;h>=0;h--)for(let w=n-1;w>=0;w--)E[h*y+w]=i[r+h]===t[r+w]?E[(h+1)*y+w+1]+1:Math.max(E[(h+1)*y+w],E[h*y+w+1]);let g=0,x=0;for(;g<p||x<n;)g<p&&x<n&&i[r+g]===t[r+x]?C(r+g++,r+x++):g<p&&(x===n||E[(g+1)*y+x]>=E[g*y+x+1])?C(r+g++,null):C(null,r+x++)}for(let y=0;y<s;y++)C(c+y,m+y);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."},Ot={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 We({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:{...Ot,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:{...Ot,padding:8,overflowWrap:"anywhere"}},e?.left?.label||s("before")),re.default.createElement("th",{scope:"col",style:{...Ot,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,y=()=>{C||(C=!0,u&&(u.src=""),l&&c(l))},E=()=>{clearTimeout(k),t?.removeEventListener("abort",x)},g=h=>{f||(f=!0,E(),y(),n(h))},x=()=>g(t.reason||new Error("Image cancelled"));try{l=s(e),u=m(),t?.addEventListener("abort",x,{once:!0}),k=setTimeout(()=>g(new Error("Image decode timed out")),r),u.src=l,Promise.resolve(u.decode()).then(()=>{if(!f){if(t?.aborted){x();return}if(u.naturalWidth!==o||u.naturalHeight!==i){g(new Error("Image dimensions mismatch"));return}f=!0,E(),p({url:l,dispose:y})}},g)}catch(h){g(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),[y,E]=(0,z.useState)(""),[g,x]=(0,z.useState)(0);return(0,z.useEffect)(()=>{let h=new AbortController,w;return C(null),E(""),(async()=>{let b=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(b.absent){C(b);return}if(!["image/png","image/jpeg","image/webp"].includes(b.mime)||typeof b.base64!="string"||b.base64.length>2796204||!Number.isInteger(b.bytes)||b.bytes<1||b.bytes>2097152)throw Error(u("imageInvalid"));let A=atob(b.base64);if(A.length!==b.bytes)throw Error(u("imageInvalid"));let P=new Blob([Uint8Array.from(A,v=>v.charCodeAt(0))],{type:b.mime});if(w=await Ho(P,{width:b.width,height:b.height,signal:h.signal}),h.signal.aborted){w.dispose();return}C({...b,url:w.url})})().catch(b=>{h.signal.aborted||(E(b.message),b.code==="vcs/rediscover-required"&&k())}),()=>{h.abort(),w?.dispose()}},[e,o,i,t,r,s,c,m,p,n,g]),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")),y?z.default.createElement("p",{role:"alert"},y," ",z.default.createElement("button",{onClick:()=>x(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 _e(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 lt(e){return{before:e("textBefore"),after:e("textAfter"),readonly:e("textReadonly"),empty:e("textEmpty"),approximate:e("approximate"),truncated:e("textTruncated")}}var me=require("react");function 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 ct(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 dt="0.4.0";function Lo({comparison:e,identity:o,enabled:i,single:t,line:r,sideBySide:s,ignoreWhitespace:c,wrap:m}){let p=(0,me.useRef)(null),n=(0,me.useRef)(null),[l,u]=(0,me.useState)(!1),[k,f]=(0,me.useState)(""),[C,y]=(0,me.useState)("pending");return(0,me.useEffect)(()=>{if(u(!1),y("pending"),f(""),!i)return;let E=h=>new URL("vcs-assets/"+h,document.baseURI).href,g=document.createElement("link");g.rel="stylesheet",g.href=E("editor.css"),document.head.appendChild(g);let x=Ao({node:p.current,comparison:e,key:o,single:t,load:h=>ct(E("editor.js")+"?v="+encodeURIComponent(dt)+"&retry=0",{signal:h}),onReady:h=>{n.current=h,u(!0)},onError:h=>f(h.message),onComputation:y});return()=>{n.current=null;try{x.dispose()}finally{g.remove()}}},[i,e,o,t]),(0,me.useEffect)(()=>{l&&t&&r&&n.current?.revealLine(r)},[l,t,r]),(0,me.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 fe({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:y,error:E,computation:g}=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(x=>!x)},i(u?"historyBasic":"historyAdvanced")),y&&!t&&ee.default.createElement("div",{key:"controls",style:{display:"flex",flexWrap:"wrap",gap:8}},ee.default.createElement("button",{"aria-pressed":s,onClick:()=>c(x=>!x)},i(s?"side":"inline")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:m,onChange:x=>p(x.target.checked)}),i("whitespace")),ee.default.createElement("label",null,ee.default.createElement("input",{type:"checkbox",checked:n,onChange:x=>l(x.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&&!y&&!E&&ee.default.createElement("p",{role:"status"},i("loading")),e.large&&!t&&y&&ee.default.createElement("p",{role:"status"},i(g==="complete"?"diffComplete":g==="incomplete"?"diffIncomplete":"diffPending")),e.large&&!y&&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:y?"visible":"hidden"},"aria-hidden":!y}),!y&&ee.default.createElement(We,{comparison:e,labels:lt(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),[y,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 g={1:s("conflictStage1"),2:s("conflictStage2"),3:s("conflictStage3")},x=s("conflictStageMissing"),h=g[f],w=g[y],b=(0,J.useMemo)(()=>{if(!m)return null;let v=H=>m.stages.find(T=>T.stage===H),q=H=>{let T=v(H);return!T||!T.present?{text:"",label:g[H]}:{text:T.text,label:g[H],...T.binary?{binary:!0}:{},...T.encoding?{encoding:T.encoding}:{},...T.notice?{notice:T.notice}:{}}},le=q(f),se=q(y),ce=[le.notice,se.notice].filter(Boolean);return v(f)?.present&&v(y)?.present||ce.push(x),{path:m.path,left:le,right:se,binary:!!(le.binary||se.binary),...ce.length?{notice:[...new Set(ce)].join(" \xB7 ")}:{}}},[m,f,y,h,w,x]);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||!b)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),P=b.binary&&!b.left.text&&!b.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,g[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},g[v])))),J.default.createElement("label",null,s("conflictStageRight")," ",J.default.createElement("select",{"aria-label":s("conflictStageRight"),value:y,onChange:v=>E(Number(v.target.value))},[1,2,3].map(v=>J.default.createElement("option",{key:v,value:v},g[v])))),b.notice&&J.default.createElement("p",{role:"status"},b.notice),P?J.default.createElement("p",{role:"status"},s("binary")):J.default.createElement(fe,{key:JSON.stringify([t,f,y,m.snapshot]),comparison:b,identity:JSON.stringify([e,o,i,t,f,y,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 pt(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,y]=(0,G.useState)(!1),[E,g]=(0,G.useState)(0);(0,G.useEffect)(()=>{if(!c)return;let w=new AbortController;return n(null),u(!1),f(""),y(!0),i("vcs/svn-describe",{sessionId:e,repositoryId:o},w.signal).then(b=>{w.signal.aborted||n(b)}).catch(b=>{w.signal.aborted||(f(b.message),b.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||y(!1)}),()=>w.abort()},[c,e,o,E]);let[x,h]=(0,G.useState)(0);return(0,G.useEffect)(()=>{if(!c||!p||p.expiresAt===void 0)return;let w=()=>{n(null),u(!1),h(0),y(!1),f(t("svnOfferExpired"))};try{return pt(p.expiresAt,w)}catch{w()}},[c,p]),(0,G.useEffect)(()=>{if(!x||!c||!p)return;let w=new AbortController;return y(!0),f(""),i("vcs/svn-approve",{sessionId:e,repositoryId:o,offer:p.offer,explicit:!0},w.signal).then(b=>{w.signal.aborted||r(b)}).catch(b=>{w.signal.aborted||(f(b.message),u(!1),b.code==="vcs/rediscover-required"&&s())}).finally(()=>{w.signal.aborted||y(!1)}),()=>w.abort()},[x,c,p]),G.default.createElement("section",null,G.default.createElement("button",{"aria-expanded":c,onClick:()=>{h(0),m(w=>!w)}},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),g(w=>w+1)}},t("retry"))),p&&G.default.createElement(G.default.Fragment,null,G.default.createElement("dl",null,["origin","root","uuid","scope"].map(w=>G.default.createElement(G.default.Fragment,{key:w},G.default.createElement("dt",null,w),G.default.createElement("dd",null,G.default.createElement("code",null,p[w]))))),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:w=>u(w.target.checked)}),t("svnConsentExplicit")),G.default.createElement("button",{disabled:C||!l,onClick:()=>h(w=>w+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 ut(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=ut({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 Fr(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=Fr(e);return o===0n?null:String(o-1n)}function qt(e){return S.default.createElement(Or,{key:JSON.stringify([e.sessionId,e.repositoryId,e.token,e.snapshot]),...e})}function Or({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),[y,E]=(0,S.useState)(""),[g,x]=(0,S.useState)(0),[h,w]=(0,S.useState)(""),[b,A]=(0,S.useState)(""),{cursor:P,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:P,limit:50},H.signal).then(T=>{H.signal.aborted||(l(D=>Bo(D,T,v)),v>=200&&k(null))}).catch(T=>{H.signal.aborted||(E(T.message),T.code==="vcs/rediscover-required"&&c())}).finally(()=>{H.signal.aborted||C(!1)}),()=>H.abort()},[P,v,g]);let q=()=>p(H=>({cursor:n.nextRevision,offset:n.windowEnd,trail:[...H.trail,{cursor:P,offset:v}].slice(-200)})),le=()=>{let H=m.trail.at(-1);H&&(k(null),l(null),p({...H,trail:m.trail.slice(0,-1)}))},se=n?.entries||[],ce="";try{se=Mo(se,{since:h,until:b})}catch(H){ce=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,T)=>S.default.createElement("label",{key:H},s(H)," ",S.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD","aria-label":s(H),value:T?b:h,onChange:D=>{k(null),T?A(D.target.value):w(D.target.value)}})))),ce&&S.default.createElement("p",{role:"alert"},ce),!!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(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")),y&&S.default.createElement("p",{role:"alert"},y," ",S.default.createElement("button",{onClick:()=>x(H=>H+1)},s("retry"))),!f&&!y&&!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:le},s("historyBack")),!y&&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,y]=(0,S.useState)(0),[E,g]=(0,S.useState)(""),[x,h]=(0,S.useState)(!1);(0,S.useEffect)(()=>{let b=new AbortController;return n(null),u(null),f(""),s("vcs/svn-detail",{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r},b.signal).then(A=>{b.signal.aborted||n(A)}).catch(A=>{b.signal.aborted||(f(A.message),A.code==="vcs/rediscover-required"&&m())}),()=>b.abort()},[C]);let w=(p?.changes||[]).filter(b=>b.path.toLocaleLowerCase().includes(E.toLocaleLowerCase()));return S.default.createElement("section",{className:"vcs-commit-details"+(x?" vcs-commit-focused":""),"aria-label":c("commitDetails")},k?S.default.createElement("p",{role:"alert"},k," ",S.default.createElement("button",{onClick:()=>y(b=>b+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:b=>{g(b.target.value),u(null)}})),S.default.createElement("span",null,w.length," / ",p.changes.length),S.default.createElement("ul",{className:"vcs-commit-files"},w.map(b=>S.default.createElement("li",{key:b.id},S.default.createElement("button",{disabled:b.kind!=="file","aria-pressed":l?.id===b.id&&l.mode==="compare",onClick:()=>u({id:b.id,mode:"compare"})},S.default.createElement("span",{className:"vcs-file-status"},b.action," \xB7 "),S.default.createElement("span",{className:"vcs-file-path",title:b.path},b.path,b.copyFromPath&&S.default.createElement("small",null,"\u2190 ",b.copyFromPath," @r",b.copyFromRevision))),b.kind==="file"&&S.default.createElement("div",{className:"vcs-svn-file-actions"},S.default.createElement("button",{onClick:()=>u({id:b.id,mode:"trace"})},c("fileHistory")),b.copyFromPath&&b.copyFromRevision&&!b.copySourceOutsideScope&&S.default.createElement("button",{onClick:()=>u({id:b.id,mode:"copytrace"})},c("svnCopyHistory")," \xB7 ",b.copyFromPath," @r",b.copyFromRevision),b.copySourceOutsideScope&&S.default.createElement("span",null,c("svnCopyOutside")))))),!!p.changes.length&&!w.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":x,onClick:()=>h(b=>!b)},c(x?"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)(null),[C,y]=(0,S.useState)(""),[E,g]=(0,S.useState)(0);return(0,S.useEffect)(()=>{let x=new AbortController;return u(null),y(""),s("vcs/svn-"+n,{sessionId:e,repositoryId:o,token:i,snapshot:t,revision:r,id:p,...k===null?{}:{cursor:k}},x.signal).then(h=>{x.signal.aborted||u(h)}).catch(h=>{x.signal.aborted||(y(h.message),h.code==="vcs/rediscover-required"&&m())}),()=>x.abort()},[k,E]),C?S.default.createElement("p",{role:"alert"},C," ",S.default.createElement("button",{onClick:()=>g(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(fe,{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))),l.nextRevision!==null&&S.default.createElement("button",{onClick:()=>f(l.nextRevision)},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 pt(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 y=new AbortController;return p(!0),l(""),i("vcs/svn-revoke",{sessionId:e,repositoryId:o,token:s.token},y.signal).then(()=>{y.signal.aborted||c(null)}).catch(E=>{y.signal.aborted||(l(E.message),E.code==="vcs/rediscover-required"&&r())}).finally(()=>{y.signal.aborted||p(!1)}),()=>y.abort()},[u,s]);let f=y=>{try{Do(y),l(""),k(0),c(y)}catch(E){l(E.message)}},C=async(...y)=>{try{return await i(...y)}catch(E){throw E.code==="vcs/svn-consent-required"&&!y[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(y=>y+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 Fo(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 F=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)(""),[y,E]=(0,Q.useState)(0),g=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:g},h.signal).then(w=>{h.signal.aborted||k(w)}).catch(w=>{h.signal.aborted||(C(w.message),w.code==="vcs/rediscover-required"&&c())}),()=>h.abort()},[m,g,e,o,i,t,y]);let x=(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(fe,{single:!0,comparison:x,identity:JSON.stringify([e,o,i,t,g]),t:s})):Q.default.createElement("p",{role:"status"},s("loading"))))}var O=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,O.useState)({commits:[],nextOffset:null}),[f,C]=(0,O.useState)(0),[y,E]=(0,O.useState)(0),[g,x]=(0,O.useState)(!0),[h,w]=(0,O.useState)("");(0,O.useEffect)(()=>{let A=new AbortController;return x(!0),w(""),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(P=>{A.signal.aborted||k(v=>({...P,commits:f?[...v.commits,...P.commits]:P.commits}))}).catch(P=>{A.signal.aborted||(w(P.message),P.code==="vcs/rediscover-required"&&n())}).finally(()=>{A.signal.aborted||x(!1)}),()=>A.abort()},[e,o,i,t,f,y,r,s,c]);let b=A=>p(A.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":A.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":A.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary");return O.default.createElement("section",{"aria-label":p("pathHistory"),"aria-busy":g},O.default.createElement("p",null,p("pathHistoryScope")),O.default.createElement("p",{style:{overflowWrap:"anywhere"}},O.default.createElement("code",null,u.path||t)," \xB7 ",O.default.createElement("code",null,i),u.followsRenames!==void 0&&O.default.createElement(O.default.Fragment,null," \xB7 ",p(u.followsRenames?"fileHistoryFollow":"pathHistoryNoFollow"))),O.default.createElement("ol",null,u.commits.map(A=>O.default.createElement("li",{key:A.id},O.default.createElement("code",{title:A.id},A.id.slice(0,10))," \xB7 ",l?O.default.createElement("button",{onClick:()=>l(A.id,A.path||t)},A.subject):A.subject,O.default.createElement("div",null,A.boundary&&O.default.createElement("span",null,b(A)," "),A.path&&O.default.createElement("code",null,A.oldPath?A.oldPath+" \u2192 ":"",A.path)," ",A.similarity!==void 0&&O.default.createElement("span",null,p("fileHistorySimilarity"),": ",A.similarity,"% \xB7 "),A.author," \xB7 ",O.default.createElement("time",{dateTime:A.date},A.date))))),g&&O.default.createElement("p",{role:"status"},p("loading")),h&&O.default.createElement("p",{role:"alert"},h," ",O.default.createElement("button",{onClick:()=>E(A=>A+1)},p("retry"))),!g&&!h&&!u.commits.length&&O.default.createElement("p",null,p("historyEmpty")),u.truncated&&O.default.createElement("p",{role:"status"},p("historyLimit")),!h&&u.nextOffset!==null&&O.default.createElement("button",{disabled:g,onClick:()=>C(u.nextOffset)},p("historyMore")))}function zt(e){let[o,i]=(0,O.useState)(!1),[t,r]=(0,O.useState)(!1),[s,c]=(0,O.useState)(""),[m,p]=(0,O.useState)("");return O.default.createElement("div",null,O.default.createElement("button",{"aria-expanded":o,onClick:()=>i(n=>!n)},e.t("pathHistory")),o&&O.default.createElement(O.default.Fragment,null,O.default.createElement("label",null,O.default.createElement("input",{type:"checkbox",checked:t,onChange:n=>r(n.target.checked)}),e.t("fileHistoryFollow")),O.default.createElement("p",null,e.t("pathHistoryFollowScope")),O.default.createElement("p",null,e.t("fileHistoryDateScope")),["historyServer_since","historyServer_until"].map((n,l)=>O.default.createElement("label",{key:n},e.t(n)," ",O.default.createElement("input",{maxLength:40,placeholder:"YYYY-MM-DD[THH:MM[:SS][\xB1HH:MM]]","aria-label":e.t(n),value:l?m:s,onChange:u=>l?p(u.target.value):c(u.target.value)}))),O.default.createElement(Gr,{key:String(t),follow:t,since:s.trim()||null,until:m.trim()||null,...e})))}function Ke({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,y]=(0,K.useState)(0);(0,K.useEffect)(()=>{let g=new AbortController;return u(null),f(""),r("vcs/tree-file",{sessionId:e,repositoryId:o,commit:i,path:t},g.signal).then(x=>{g.signal.aborted||u(x)}).catch(x=>{g.signal.aborted||(f(x.message),x.code==="vcs/rediscover-required"&&c())}),()=>g.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:()=>y(g=>g+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(fe,{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 Oo(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)(""),[y,E]=(0,I.useState)(0),[g,x]=(0,I.useState)(""),[h,w]=(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 b=f?f+"/":"",A=To(m.entries,f,g),P=v=>{C(v),E(0),x(""),w(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:()=>P(f.includes("/")?f.slice(0,f.lastIndexOf("/")):"")},r("treeUp"))),I.default.createElement("nav",{"aria-label":r("treeBreadcrumbs")},Oo(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:()=>P(v.path)},v.name)))),I.default.createElement("label",null,r("treeSearch")," ",I.default.createElement("input",{"aria-label":r("treeSearch"),value:g,onChange:v=>{x(v.target.value),E(0),w(null)}})),I.default.createElement("p",null,A.length," ",r("treeEntries")),!A.length&&g&&I.default.createElement("p",{role:"status"},r("emptySearch")),I.default.createElement("ul",null,A.slice(y*100,y*100+100).map(v=>I.default.createElement("li",{key:v.path},v.type==="tree"?I.default.createElement("button",{onClick:()=>P(v.path)},v.path.slice(b.length),"/"):v.type==="blob"&&["100644","100755"].includes(v.mode)?I.default.createElement("button",{"aria-pressed":h===v.path,onClick:()=>w(v.path)},v.path.slice(b.length)):I.default.createElement("span",null,v.path.slice(b.length))," \xB7 ",I.default.createElement("code",null,v.mode," ",v.type," ",I.default.createElement("span",{title:v.oid},v.oid.slice(0,10)))))),y>0&&I.default.createElement("button",{onClick:()=>{E(v=>v-1),w(null)}},r("treePrevious")),(y+1)*100<A.length&&I.default.createElement("button",{onClick:()=>{E(v=>v+1),w(null)}},r("treeNext")),h&&I.default.createElement(Ke,{key:JSON.stringify([e,o,i,h]),sessionId:e,repositoryId:o,commit:i,rpc:t,t:r,onRediscover:s,onSelectCommit:c,path:h,onClose:()=>w(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,y]=(0,j.useState)(0),[E,g]=(0,j.useState)(0),[x,h]=(0,j.useState)(!0),[w,b]=(0,j.useState)(""),A={...c?{since:c}:{},...m?{until:m}:{}};return(0,j.useEffect)(()=>{let P=new AbortController;return h(!0),b(""),p("vcs/file-history",{sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:r,offset:C,limit:50,follow:s,...A},P.signal).then(v=>{P.signal.aborted||f(q=>({...v,commits:C?[...q.commits,...v.commits]:v.commits}))}).catch(v=>{P.signal.aborted||(b(v.message),v.code==="vcs/rediscover-required"&&l())}).finally(()=>{P.signal.aborted||h(!1)}),()=>P.abort()},[e,o,i,t,r,C,E,s,c,m]),j.default.createElement("section",{"aria-label":n("fileHistory"),"aria-busy":x},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(P=>j.default.createElement("li",{key:P.id},j.default.createElement("code",{title:P.id},P.id.slice(0,10))," \xB7 ",u?j.default.createElement("button",{onClick:()=>u(P.id,P.path||k.path)},P.subject):P.subject,j.default.createElement("div",null,P.boundary&&j.default.createElement("span",null,n(P.boundary==="merge-first-parent"?"fileHistoryMergeBoundary":P.boundary==="ambiguous-rename"?"fileHistoryAmbiguous":P.boundary==="rename-check-limit"?"fileHistoryRenameLimit":"fileHistoryBoundary")," "),P.path&&j.default.createElement("code",null,P.oldPath?P.oldPath+" \u2192 ":"",P.path)," ",P.similarity!==void 0&&j.default.createElement("span",null,n("fileHistorySimilarity"),": ",P.similarity,"% \xB7 "),P.author," \xB7 ",j.default.createElement("time",{dateTime:P.date},P.date))))),x&&j.default.createElement("p",{role:"status"},n("loading")),w&&j.default.createElement("p",{role:"alert"},w," ",j.default.createElement("button",{onClick:()=>g(P=>P+1)},n("retry"))),!x&&!w&&!k.commits.length&&j.default.createElement("p",null,n("historyEmpty")),k.truncated&&j.default.createElement("p",{role:"status"},n("historyLimit")),!w&&k.nextOffset!==null&&j.default.createElement("button",{disabled:x,onClick:()=>y(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:String(t),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),[y,E]=(0,V.useState)(1),[g,x]=(0,V.useState)(null);return(0,V.useEffect)(()=>{let h=new AbortController;return l(null),k(""),x(null),s("vcs/blame",{sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:r,startLine:y,lineLimit:500},h.signal).then(w=>{h.signal.aborted||l(w)}).catch(w=>{h.signal.aborted||(k(w.message),w.code==="vcs/rediscover-required"&&m())}),()=>h.abort()},[e,o,i,t,r,f,y]),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:()=>x(h)},c("blameOriginLine"),": ",h.path,":",h.originalLine):V.default.createElement("span",null,c("blameUnmapped")))))))),V.default.createElement("p",null,n.startLine||y,"\u2013",n.lines.at(-1)?.line||y," / ",n.totalLines??"\u2014"),V.default.createElement("button",{disabled:y===1,onClick:()=>E(Math.max(1,y-500))},c("blamePrevious")),V.default.createElement("button",{disabled:n.nextLine==null,onClick:()=>E(n.nextLine)},c("blameNext")),g&&V.default.createElement(Ke,{key:JSON.stringify([g.commit,g.path,g.originalLine]),sessionId:e,repositoryId:o,rpc:s,t:c,onRediscover:m,onSelectCommit:p,commit:g.commit,path:g.path,line:g.originalLine,onClose:()=>x(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 Ye(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)(""),[y,E]=(0,W.useState)(0),[g,x]=(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,...g?{large:!0}:{}}:{sessionId:e,repositoryId:o,commit:i,parentIndex:t,id:c,...g?{large:!0}:{}},h.signal).then(w=>{h.signal.aborted||k(w)}).catch(w=>{h.signal.aborted||(C(w.message),w.code==="vcs/rediscover-required"&&n())}),()=>h.abort()},[e,o,i,t,r,s,c,y,g]),f?W.default.createElement("p",{role:"alert"},f," ",W.default.createElement("button",{onClick:()=>E(h=>h+1)},p("retry")),g&&W.default.createElement("button",{onClick:()=>x(!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),g?W.default.createElement("p",null,p("largeScope")," ",W.default.createElement("button",{onClick:()=>x(!1)},p("largeClose"))):u.notice?.includes("2 MiB")&&W.default.createElement("p",null,p("largeScope")," ",W.default.createElement("button",{onClick:()=>x(!0)},p("largeLoad")))),u.binary?W.default.createElement("p",null,p("binary")):W.default.createElement(fe,{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(_e,{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"),g&&W.default.createElement("button",{onClick:()=>x(!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 mt(e,o=""){let i=o.trim().toLowerCase();return i?e.filter(t=>[t.path,t.oldPath].some(r=>r?.toLowerCase().includes(i))):e}function Qe(e){return F.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,F.useRef)(!0),[n,l]=(0,F.useState)(null),[u,k]=(0,F.useState)(""),[f,C]=(0,F.useState)(!1),[y,E]=(0,F.useState)(0),[g,x]=(0,F.useState)(null),[h,w]=(0,F.useState)(""),[b,A]=(0,F.useState)(0);if((0,F.useEffect)(()=>{let v=new AbortController;return x(null),w(""),t("vcs/commit",{sessionId:e,repositoryId:o,commit:i,parentIndex:y},v.signal).then(q=>{v.signal.aborted||(x(q),p.current&&(p.current=!1,l(jo(q.changes,m))))}).catch(q=>{v.signal.aborted||(w(q.message),q.code==="vcs/rediscover-required"&&s())}),()=>v.abort()},[e,o,i,y,b]),h)return F.default.createElement("p",{role:"alert"},h," ",F.default.createElement("button",{onClick:()=>A(v=>v+1)},r("retry")));if(!g)return F.default.createElement("p",{role:"status"},r("loading"));let P=mt(g.changes,u);return F.default.createElement("section",{className:"vcs-commit-details"+(f?" vcs-commit-focused":""),"aria-label":r("commitDetails")},F.default.createElement("div",{className:"vcs-commit-sidebar"},F.default.createElement("header",{className:"vcs-commit-summary"},F.default.createElement("h3",null,g.subject),F.default.createElement("code",{className:"vcs-commit-oid"},g.id),F.default.createElement("p",null,g.author," \xB7 ",g.date),g.committer&&g.committer!==g.author&&F.default.createElement("p",null,r("commitCommitter")," ",g.committer,g.committerDate?` \xB7 ${g.committerDate}`:""),g.signature?.signed===!0&&F.default.createElement("p",null,F.default.createElement("span",{title:r("commitSignatureUnverified")},r("commitSigned",{format:g.signature.format}))),g.messageTruncated&&F.default.createElement("p",{role:"status"},r("commitMessageLimit")),g.message&&F.default.createElement("pre",{style:{whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxHeight:240,overflow:"auto"}},g.message),g.parents.length>1&&F.default.createElement("label",null,r("commitParent")," ",F.default.createElement("select",{"aria-label":r("commitParent"),value:y,onChange:v=>{l(null),x(null),E(Number(v.target.value))}},g.parents.map((v,q)=>F.default.createElement("option",{key:v,value:q},q+1,": ",v.slice(0,10))))),F.default.createElement("p",null,g.parent||r("commitRoot")," \u2192 ",g.id.slice(0,10))),F.default.createElement("aside",{className:"vcs-commit-picker"},F.default.createElement("label",null,r("commitFileSearch")," ",F.default.createElement("input",{"aria-label":r("commitFileSearch"),value:u,onChange:v=>{k(v.target.value),l(null)}})),F.default.createElement("span",null," ",P.length," / ",g.changes.length),F.default.createElement("ul",{className:"vcs-commit-files"},P.map(v=>F.default.createElement("li",{key:v.id},F.default.createElement("button",{"aria-pressed":n===v.id,onClick:()=>l(v.id)},F.default.createElement("span",{className:"vcs-file-status"},v.status," \xB7 "),F.default.createElement("span",{className:"vcs-file-path",title:v.oldPath?v.oldPath+" \u2192 "+v.path:v.path},v.path,v.oldPath&&F.default.createElement("small",null,"\u2190 ",v.oldPath)))))),!!g.changes.length&&!P.length&&F.default.createElement("p",{role:"status"},r("emptySearch")),!g.changes.length&&F.default.createElement("p",null,r("commitNoChanges")),F.default.createElement(Wt,{key:JSON.stringify([e,o,i]),sessionId:e,repositoryId:o,commit:i,rpc:t,t:r,onRediscover:s,onSelectCommit:c}))),F.default.createElement("div",{className:"vcs-commit-review"},F.default.createElement("div",{className:"vcs-commit-comparison","aria-label":r("comparisonContext")},n&&F.default.createElement("button",{className:"vcs-comparison-focus","aria-pressed":f,onClick:()=>C(v=>!v)},r(f?"comparisonRestore":"comparisonFocus")),n?F.default.createElement(Ye,{key:n,sessionId:e,repositoryId:o,commit:i,parentIndex:y,id:n,onSelectCommit:c,rpc:t,t:r,onRediscover:s}):F.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),[y,E]=(0,B.useState)("");if((0,B.useEffect)(()=>{let x=new AbortController;return p(null),l(""),C(null),r("vcs/revision-changes",{sessionId:e,repositoryId:o,base:i,target:t},x.signal).then(h=>{x.signal.aborted||p(h)}).catch(h=>{x.signal.aborted||(l(h.message),h.code==="vcs/rediscover-required"&&c())}),()=>x.abort()},[e,o,i,t,u]),n)return B.default.createElement("p",{role:"alert"},n," ",B.default.createElement("button",{onClick:()=>k(x=>x+1)},s("retry")));if(!m)return B.default.createElement("p",{role:"status"},s("loading"));let g=mt(m.changes,y);return B.default.createElement("div",null,B.default.createElement("label",null,s("commitFileSearch")," ",B.default.createElement("input",{"aria-label":s("commitFileSearch"),value:y,onChange:x=>{E(x.target.value),C(null)}})),B.default.createElement("span",null," ",g.length," / ",m.changes.length),!!m.changes.length&&!g.length&&B.default.createElement("p",{role:"status"},s("emptySearch")),!m.changes.length&&B.default.createElement("p",null,s("revisionEmpty")),B.default.createElement("ul",null,g.map(x=>B.default.createElement("li",{key:x.id},B.default.createElement("button",{"aria-pressed":f===x.id,onClick:()=>C(x.id)},x.status," \xB7 ",x.oldPath?x.oldPath+" \u2192 ":"",x.path)))),f&&B.default.createElement(Ye,{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),[y,E]=(0,B.useState)(0),[g,x]=(0,B.useState)(!1),[h,w]=(0,B.useState)("");return(0,B.useEffect)(()=>{if(!y)return;let b=new AbortController;return x(!0),w(""),t("vcs/references",{sessionId:o,repositoryId:i},b.signal).then(A=>{b.signal.aborted||(k(A.references),C(!0),c?.(A.references))}).catch(A=>{b.signal.aborted||(w(A.message),A.code==="vcs/rediscover-required"&&s())}).finally(()=>{b.signal.aborted||x(!1)}),()=>b.abort()},[o,i,y]),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:g,onClick:()=>E(b=>b+1)},r("revisionLoadRefs")),B.default.createElement("p",null,r("revisionRefsScope")),f&&!g&&!h&&B.default.createElement("p",{role:"status"},u.length?`${r("revisionRefsCount")}: ${u.length}`:r("revisionRefsEmpty")),g&&B.default.createElement("p",{role:"status"},r("loading")),h&&B.default.createElement("p",{role:"alert"},h),[[m,p,"revisionBase"],[n,l,"revisionTarget"]].map(([b,A,P])=>B.default.createElement("label",{key:P},r(P)," ",B.default.createElement("select",{"aria-label":r(P),value:b,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)))),b&&!e.some(v=>v.id===b)&&!u.some(v=>v.commit===b)&&B.default.createElement("option",{value:b},b)))),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 $e(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,y]=(0,N.useState)(""),[E,g]=(0,N.useState)(""),x=L=>{let ie=(k||[]).find(Se=>JSON.stringify([Se.name,Se.commit])===L)?.commit||"";g(L),y(ie),A(Se=>Se?{...Se,snapshot:ie||null}:null),ye(0),n(""),H(null),D({commits:[],snapshot:null,nextOffset:null})},[h,w]=(0,N.useState)({message:"",author:"",path:"",since:"",until:""}),[b,A]=(0,N.useState)(null),P=L=>{A({values:L,snapshot:T.snapshot}),ye(0),n(""),H(null),D(Y=>({...Y,commits:[],nextOffset:null}))},v=()=>{ne&&(D(L=>({commits:[],snapshot:L.snapshot,nextOffset:null})),H(null),n(""),ye(Math.max(0,ne-50)))},q=(0,N.useMemo)(()=>Fo(k||[]),[k]),le=c.id,se=(L,Y=null)=>{c.id&&u(ie=>[...ie,c]),m(ie=>({id:L,path:Y,revision:ie.revision+1}))},ce=()=>{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)})),[T,D]=(0,N.useState)({commits:[],snapshot:null,nextOffset:null}),[ne,ye]=(0,N.useState)(0),[Re,ht]=(0,N.useState)(0),[he,be]=(0,N.useState)(!0),[Ce,Ne]=(0,N.useState)("");(0,N.useEffect)(()=>{let L=new AbortController;return be(!0),Ne(""),i("vcs/history",{sessionId:e,repositoryId:o,offset:ne,limit:50,...b?{search:b.values}:{},...b?.snapshot||C||T.snapshot?{snapshot:b?.snapshot||C||T.snapshot}:{}},L.signal).then(Y=>{L.signal.aborted||(D(ie=>ut(ie,Y,ne)),ne>=200&&(H(null),n("")))}).catch(Y=>{L.signal.aborted||(Ne(Y.message),Y.code==="vcs/rediscover-required"&&r())}).finally(()=>{L.signal.aborted||be(!1)}),()=>L.abort()},[e,o,ne,Re,b,C]);let ve=Vo(T.commits,p);return N.default.createElement("section",{className:"vcs-history vcs-history-browser","aria-label":t("history"),"aria-busy":he},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:he,onChange:L=>x(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(),P({...h})}},N.default.createElement("fieldset",{disabled:he},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=>w(ie=>({...ie,[L]:Y.target.value}))}))),N.default.createElement("button",{type:"submit"},t("historyServerApply")),N.default.createElement("button",{type:"button",onClick:()=>{w({message:"",author:"",path:"",since:"",until:""}),P({})}},t("historyServerClear")))),b&&N.default.createElement("p",{role:"status"},t("historyServerActive"),": ",JSON.stringify(b.values)," \xB7 ",N.default.createElement("code",null,b.snapshot||T.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," ",ve.length," / ",T.commits.length)),!!T.commits.length&&N.default.createElement(N.default.Fragment,null,N.default.createElement("p",{role:"status"},t("historyWindow"),": ",Math.max(0,(T.windowEnd??T.commits.length)-T.commits.length),"\u2013",T.windowEnd??T.commits.length),s&&N.default.createElement("details",{className:"vcs-help"},N.default.createElement("summary",null,t("historySearchHelp")),N.default.createElement("p",null,t("historyWindowScope")))),!!T.commits.length&&!ve.length&&N.default.createElement("p",{role:"status"},t("historyNoMatch")),N.default.createElement("ol",{className:"vcs-commit-list"},ve.map(L=>N.default.createElement("li",{key:L.id},N.default.createElement("button",{className:"vcs-commit-row","aria-pressed":le===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))))),he&&N.default.createElement("p",{role:"status"},t("loading")),Ce&&N.default.createElement("p",{role:"alert"},Ce," ",N.default.createElement("button",{onClick:()=>ht(L=>L+1)},t("retry"))),!he&&!Ce&&!T.commits.length&&N.default.createElement("p",null,t("historyEmpty")),T.truncated&&N.default.createElement("p",{role:"status"},t("historyLimit")),!!ne&&N.default.createElement("button",{disabled:he,onClick:v},t("historyBack")),!Ce&&T.nextOffset!==null&&N.default.createElement("button",{disabled:he,onClick:()=>ye(T.nextOffset)},t("historyMore")),!!T.commits.length&&N.default.createElement(Yt,{commits:T.commits,selected:le,onSelect:H,t}),N.default.createElement(Qt,{onReferencesLoaded:f,commits:T.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:ce,"aria-label":t("historyNavigationBack")},t("historyNavigationBack")," \xB7 ",l[l.length-1].id.slice(0,10))),le&&N.default.createElement(Qe,{key:JSON.stringify([le,c.revision]),initialPath:c.path,sessionId:e,repositoryId:o,commit:le,onSelectCommit:se,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(Qe,{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 ge=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),y=(0,_.useRef)(null),E=x=>{y.current?.abort();let h=new AbortController;y.current=h,C(!0),k(""),l(null),p(x),i("vcs/grep",{sessionId:e,repositoryId:o,query:x},h.signal).then(w=>{h.signal.aborted||l(w.matches)}).catch(w=>{h.signal.aborted||(k(w.message),w.code==="vcs/rediscover-required"&&r())}).finally(()=>{h.signal.aborted||C(!1)})};(0,_.useEffect)(()=>()=>y.current?.abort(),[]);let g=x=>{x.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:g},_.default.createElement("input",{"aria-label":t("grepQuery"),maxLength:1024,placeholder:t("grepPlaceholder"),value:s,onChange:x=>c(x.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((x,h)=>_.default.createElement("li",{key:h},_.default.createElement("code",null,x.path,":",x.line)," ",_.default.createElement("pre",{style:{margin:0}},x.text)))):_.default.createElement("p",{role:"status"},t("grepEmpty"))))}function Zt(e){return ge.default.createElement(Rr,{key:JSON.stringify([e.sessionId,e.repositoryId]),...e})}function Rr({t:e,...o}){let[i,t]=(0,ge.useState)("content");return ge.default.createElement("section",{className:"vcs-search-panel","aria-label":e("searchCenter")},ge.default.createElement("nav",{className:"vcs-search-modes","aria-label":e("searchMode")},ge.default.createElement("button",{"aria-pressed":i==="content",onClick:()=>t("content")},e("searchContentMode")),ge.default.createElement("button",{"aria-pressed":i==="history",onClick:()=>t("history")},e("searchHistoryMode"))),i==="content"?ge.default.createElement(Xt,{...o,t:e}):ge.default.createElement($e,{...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 Xe=(e,o)=>JSON.stringify([e,o]),Ze=(e,o=".")=>[e.type.toUpperCase(),e.relativePath==="."?o:e.relativePath||".",e.branch].filter(Boolean).join(" \xB7 "),ft=(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=Ft(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),[y,E]=(0,a.useState)(0),[g,x]=(0,a.useState)(null),[h,w]=(0,a.useState)({}),[b,A]=(0,a.useState)(()=>zo(n?.cwd)),[P,v]=(0,a.useState)(0),[q,le]=(0,a.useState)(""),[se,ce]=(0,a.useState)(""),[H,T]=(0,a.useState)(null),[D,ne]=(0,a.useState)(null),[ye,Re]=(0,a.useState)(!1),[ht,he]=(0,a.useState)(!1),[be,Ce]=(0,a.useState)(""),[Ne,ve]=(0,a.useState)(""),[L,Y]=(0,a.useState)(""),[ie,Se]=(0,a.useState)(!1),[Ee,vt]=(0,a.useState)(""),[et,oo]=(0,a.useState)("all"),[Me,ro]=(0,a.useState)(!0),[io,gt]=(0,a.useState)({}),[Ve,sr]=(0,a.useState)(!0),[yt,nr]=(0,a.useState)(!1),[bt,ar]=(0,a.useState)(!1),[tt,Ie]=(0,a.useState)("content"),[so,no]=(0,a.useState)(0),[Ge,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}),[de,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),ot=(0,a.useRef)(null),kt=(0,a.useRef)(null),ho=(0,a.useRef)(null),Be=(0,a.useRef)(null),Ct=(0,a.useRef)(null),Nt=(0,a.useRef)(null),Et=(0,a.useRef)(!1),rt=(0,a.useRef)(!1),Ae=g?.repositories||[],Le=Ae.filter(d=>d.id===b),Fe=Le.some(d=>d.type==="git"),Ht=Le.some(d=>d.type==="svn"),qe=(Fe||Ht)&&Ge==="history",it=Fe&&Ge==="stash",st=Fe&&Ge==="grep",pe=qe||it||st;(0,a.useEffect)(()=>{i?.(Ge)},[Ge]);let At=d=>{Be.current?.abort(),ne(null),T(null),ve(""),ao(d)};(0,a.useEffect)(()=>{Ae.some(d=>d.id===b)&&Wo(n?.cwd,b)},[n?.cwd,b,g]);let Je=()=>{ho.current?.abort(),Be.current?.abort(),ne(null),T(null),ve(""),Ie("content"),wt({added:0,deleted:0,count:0})},nt=()=>{rt.current=!1,Je(),Ct.current?.abort(),Nt.current=g,x(null),w({}),ce(q.trim()),v(d=>d+1)},xe=()=>{rt.current||(rt.current=!0,Je(),Ct.current?.abort(),Nt.current=null,x(null),w({}),ce(""),v(d=>d+1))},vo=(d=!1)=>{d||E(M=>M+1),Et.current=d,d||Je(),d||w({}),C(M=>M+1)};(0,a.useEffect)(()=>{let d=new AbortController;return Ct.current=d,Ce(""),Re(!!l),l&&s("vcs/repositories",{sessionId:l,...se?{subdirectory:se}:{}},d.signal).then(M=>{if(!d.signal.aborted){let U=er(Nt.current,M,se);rt.current=!1,A(X=>Ko(U.repositories,X)),x(U)}}).catch(M=>{d.signal.aborted||Ce(M.message)}).finally(()=>{d.signal.aborted||Re(!1)}),()=>d.abort()},[l,P,se]),(0,a.useEffect)(()=>{let d=new AbortController,M=Et.current;ho.current=d,Et.current=!1,M||(w({}),ve(""));for(let U of Le){let X=ft(U,u);r(()=>s("vcs/status",{sessionId:l,repositoryId:U.id,mode:X},d.signal),d.signal).then(ae=>{d.signal.aborted||w(ue=>({...ue,[U.id]:{...ae,mode:X}}))}).catch(ae=>{if(!d.signal.aborted){if(ae.code==="vcs/rediscover-required"){xe();return}w(ue=>({...ue,[U.id]:{error:ae.message,changes:[],mode:X}}))}})}return()=>d.abort()},[l,g,b,u,f]),(0,a.useEffect)(()=>{let d=M=>{M.target===window&&l&&b&&document.visibilityState==="visible"&&vo(!0)};return window.addEventListener("focus",d),()=>window.removeEventListener("focus",d)},[l,b,u]);let Pe=Ae.find(d=>d.id===H?.repositoryId),we=H?h[H.repositoryId]:null,Lt=JSON.stringify([l,g?.cwd,H?.repositoryId,u,H?.id]),Oe=lo?.key===Lt&&lo?.status===we;(0,a.useEffect)(()=>co(null),[Lt,we,pe]),(0,a.useEffect)(()=>{let d=new AbortController;return Be.current=d,ne(null),ve(""),wt({added:0,deleted:0,count:0}),Ie("content"),he(!!H&&!!we),!pe&&H&&we&&Pe&&s("vcs/compare",{sessionId:l,repositoryId:H.repositoryId,mode:ft(Pe,u),id:H.id,...Oe?{large:!0}:{}},d.signal).then(M=>{d.signal.aborted||ne(M)}).catch(M=>{if(!d.signal.aborted){if(M.code==="vcs/rediscover-required"){xe();return}ve(M.message)}}).finally(()=>{d.signal.aborted||he(!1)}),()=>d.abort()},[H,we,l,u,pe,Oe,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),ct(or("editor.js")+"?v="+encodeURIComponent(dt)+"&retry="+so,{signal:U.signal}).then(ae=>{d||(M=ae.createDiff(fo.current,{onStats:wt,onComputation:ue=>{d||dr(ue)}}),He.current=M,uo(!0))}).catch(ae=>{d||Y(ae.message)}),()=>{d=!0,U.abort(),M?.dispose(),He.current=null,X.remove()}},[so]),(0,a.useEffect)(()=>{de&&(!D||D.binary||pe)&&He.current?.setContent({left:{text:""},right:{text:""}},"empty"),de&&D&&!D.binary&&!pe&&He.current?.setContent(D,JSON.stringify([l,g?.cwd,H?.repositoryId,u,H?.id,D.path]))},[de,D,l,g,H,u,pe]),(0,a.useEffect)(()=>{He.current?.options({sideBySide:Ve,ignoreWhitespace:yt,wrap:bt})},[de,Ve,yt,bt]);let Ue=Ro(Le,h,Ee,et),Te=Ue.flatMap(d=>d.changes),pr=Zo(we?.changes),Pt=Yo(Te,H?.id),go=()=>{vt(""),oo("all")},ur=async()=>{let d=D?.path||ke?.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()}}Se(!0),window.setTimeout(()=>Se(!1),1500)}catch{ve(t("copyFailed"))}};(0,a.useEffect)(()=>{let d=M=>{if(pe)return;let U=qo(M,mo.current,ot.current,!!Ee);U&&(M.preventDefault(),U==="search"?(ot.current?.focus(),ot.current?.select()):U==="clear"?vt(""):Dt(U))};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[Ee,Te,H,pe]);let yo=d=>gt(M=>{let U={...M};for(let X of Ue)for(let ae of to(eo(X.changes)))U[X.repository.id+"\0"+ae]=!d;return U}),mr=()=>{let d=ke;!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=Xe(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)},[Me,Ee,et,io,Ue]);let Dt=d=>{let M=Qo(Te,H?.id,d);M&&(Be.current?.abort(),ne(null),Ie("content"),T({repositoryId:b,id:M.id}))},bo=ye||Le.some(d=>!h[d.id]),ke=we?.changes?.find(d=>d.id===H?.id),De=D?.properties,Mt=De?[...new Set([...Object.keys(De.left||{}),...Object.keys(De.right||{})])].filter(d=>De.left?.[d]!==De.right?.[d]):[],ze=d=>tr[d?.status]||d?.status?.slice(0,1).toUpperCase()||"M",xo=D?.binary?[D.left.label,D.right.label].filter(Boolean).join(" \u2194 "):"",je=Ne||(ht?t("loading"):l?bo&&!ke?t("loading"):be||(Ae.length?ke?D?.binary?t("binary")+(xo?" "+t("binaryComparison",{files:xo}):""):D?!de&&!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":Xe(b,d.id),"aria-current":H?.repositoryId===b&&H?.id===d.id?"true":void 0,style:{paddingInlineStart:8+U*14},title:(d.oldPath?d.oldPath+" \u2192 ":"")+d.path+" \xB7 "+t(ze(d)),onClick:()=>{Be.current?.abort(),ne(null),Ie("content"),T({repositoryId:b,id:d.id})}},a.default.createElement("span",{className:"vcs-status","data-status":ze(d)},ze(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 ae=M.id+"\0"+X.id,ue=!!io[ae];return a.default.createElement(a.default.Fragment,{key:ae},a.default.createElement("button",{className:"vcs-dir vcs-dir-toggle","data-vcs-item":!0,"data-vcs-directory":ue?"closed":"open","aria-expanded":!ue,style:{paddingInlineStart:8+U*14},onClick:()=>gt(hr=>({...hr,[ae]:!ue}))},a.default.createElement("span",{"aria-hidden":"true"},ue?"\u203A":"\u2304"),X.name,a.default.createElement("small",null,X.count)),!ue&&a.default.createElement(So,{node:X,repository:M,depth:U+1}))}),d.files.map(X=>a.default.createElement(wo,{key:Xe(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:b,disabled:ye||!Ae.length,onChange:d=>{Je(),w({}),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},Ze(d,t("workspaceRoot"))))),a.default.createElement("label",{className:"vcs-mode"},t("gitMode")," ",a.default.createElement("select",{"aria-label":t("gitMode"),value:u,disabled:pe||!Le.some(d=>d.type==="git"),onChange:d=>{Je(),w({}),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:g?.cwd||n?.cwd},t("session"),": ",g?.cwd||n?.cwd||"\u2014"),a.default.createElement("form",{className:"vcs-discovery",onSubmit:d=>{d.preventDefault(),nt()}},a.default.createElement("input",{"aria-label":t("subdirectory"),placeholder:t("subdirectory"),value:q,onChange:d=>le(d.target.value)}),a.default.createElement("button",{disabled:!l||ye},t("rescan")),a.default.createElement("span",null,t("scanHint"))),g?.truncated&&a.default.createElement("div",{className:"vcs-notice"},t("truncated")),(g?.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"&&!pe).map(d=>a.default.createElement(a.default.Fragment,{key:JSON.stringify([l,d.id,P,f])},a.default.createElement(Vt,{repositoryId:d.id,sessionId:l,rpc:s,t,onRediscover:xe}))),(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":!pe,onClick:()=>ao("workspace")},t("workspaceView")),a.default.createElement("button",{"aria-pressed":qe,"aria-expanded":qe,onClick:()=>At("history")},t("history")),Fe&&a.default.createElement(a.default.Fragment,null,a.default.createElement("button",{"aria-pressed":it,"aria-expanded":it,onClick:()=>At("stash")},t("stash")),a.default.createElement("button",{"aria-pressed":st,"aria-expanded":st,onClick:()=>At("grep")},t("grep")))),qe&&Ht&&a.default.createElement(Jt,{key:JSON.stringify([l,b,y,P]),sessionId:l,repositoryId:b,rpc:s,t,onRediscover:xe}),qe&&Fe&&a.default.createElement($e,{key:JSON.stringify([l,b,y,P]),sessionId:l,repositoryId:b,rpc:s,t,onRediscover:xe}),it&&a.default.createElement($t,{sessionId:l,repositoryId:b,rpc:s,t,onRediscover:xe}),st&&a.default.createElement(Zt,{sessionId:l,repositoryId:b,rpc:s,t,onRediscover:xe})),a.default.createElement("div",{className:"vcs-body",hidden:pe,"aria-label":t("workspaceView")},a.default.createElement("aside",{className:"vcs-files"},a.default.createElement("div",{className:"vcs-filter"},a.default.createElement("input",{ref:ot,"aria-label":t("search"),placeholder:t("search"),title:t("searchShortcut"),value:Ee,onChange:d=>vt(d.target.value)}),(Ee||et!=="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":et===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,Te.length," ",t("files")),a.default.createElement("span",{className:"vcs-auto"},t("autoRefresh")),a.default.createElement("button",{"aria-pressed":Me,onClick:()=>ro(!Me)},t(Me?"tree":"list"))),Me&&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:!ke},t("revealSelected"))),a.default.createElement("nav",{className:"vcs-filelist","aria-label":t("title"),ref:St,onKeyDown:fr},Ue.map(d=>{let M=d.repository;return a.default.createElement("section",{className:"vcs-repository",key:M.id,"aria-label":Ze(M,t("workspaceRoot"))},a.default.createElement("div",{className:"vcs-repository-heading",title:M.root},a.default.createElement("strong",null,Ze(M,t("workspaceRoot"))),a.default.createElement("small",null,M.type==="svn"?t("svnBase"):t(ft(M,u)))),d.error?a.default.createElement("div",{className:"vcs-message vcs-error",role:"status"},d.error,a.default.createElement("button",{onClick:nt},t("rescan"))):h[M.id]?Me?a.default.createElement(So,{node:eo(d.changes),repository:M}):d.changes.map(U=>a.default.createElement(wo,{key:Xe(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(Ee?"emptySearch":"clean")))}),!Ue.length&&a.default.createElement("div",{className:"vcs-message"},ye?t("loading"):be||t(l?"noRepo":"noSession"),be&&a.default.createElement("button",{onClick:nt},t("rescan"))))),a.default.createElement("main",{className:"vcs-detail"},a.default.createElement("div",{className:"vcs-filehead"},a.default.createElement("strong",{title:D?.path||ke?.path},Pe?Ze(Pe,t("workspaceRoot"))+" / ":"",D?.path||ke?.path||t("pick")),a.default.createElement("button",{className:"vcs-copy-path",disabled:!(D?.path||ke?.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"}),D&&!D.binary&&de&&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)),D&&a.default.createElement("div",{className:"vcs-context","aria-label":t("comparisonContext")},a.default.createElement("span",{className:"vcs-context-status","data-status":ze(D)},t(ze(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&&Pe?.type==="git"&&a.default.createElement(_e,{key:JSON.stringify([l,g?.cwd,H.repositoryId,u,H.id,f,we]),workspace:!0,sessionId:l,repositoryId:H.repositoryId,mode:u,id:H.id,rpc:s,t,onRediscover:xe}),Pe?.type==="git"&&(Oe||D?.notice?.includes("2 MiB"))&&a.default.createElement("div",{className:"vcs-notice"},a.default.createElement("span",null,t("workspaceLargeScope")),a.default.createElement("button",{onClick:()=>{Be.current?.abort(),ne(null),co(Oe?null:{key:Lt,status:we})}},t(Oe?"largeClose":"largeLoad")),Oe&&Ne&&a.default.createElement("button",{onClick:()=>cr(d=>d+1)},t("retry"))),D?.large&&a.default.createElement("p",{role:"status"},t(L?"largeFallback":po==="complete"?"diffComplete":po==="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"&&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:xe}),Mt.length>0&&a.default.createElement("div",{className:"vcs-tabs"},["content","properties"].map(d=>a.default.createElement("button",{key:d,"aria-pressed":tt===d,onClick:()=>Ie(d)},t(d),d==="properties"?" ("+Mt.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":!!je||tt!=="content",style:tt==="properties"?{display:"none"}:void 0},a.default.createElement("div",{className:"vcs-editor",ref:fo,style:L?{display:"none"}:void 0}),L&&D&&!D.binary&&!je&&a.default.createElement(We,{comparison:D,labels:lt(t)}),je&&a.default.createElement("div",{className:"vcs-message "+(be||Ne||L?"vcs-error":""),role:"status"},je,(be||Ne||L)&&a.default.createElement("button",{onClick:()=>L?no(d=>d+1):nt()},t(L?"retry":"rescan")))),tt==="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,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:!de,"aria-pressed":Ve,onClick:()=>sr(!Ve)},t(Ve?"side":"inline")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!de,checked:yt,onChange:d=>nr(d.target.checked)}),t("whitespace")),a.default.createElement("label",null,a.default.createElement("input",{type:"checkbox",disabled:!de,checked:bt,onChange:d=>ar(d.target.checked)}),t("wrap")),a.default.createElement("span",{className:"vcs-spacer"}),de&&a.default.createElement("span",null,xt.count," ",t("changes")),a.default.createElement("button",{disabled:!de||!D||!!je,onClick:()=>He.current?.navigate("previous")},t("previous")),a.default.createElement("button",{disabled:!de||!D||!!je,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:!Te.length,onClick:()=>Dt("previous")},t("previousFile")),a.default.createElement("button",{title:t("fileShortcut"),disabled:!Te.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; }
@@ -0,0 +1 @@
1
+ import{readFileSync as u}from"node:fs";var a="@feng0531/dsh-vcs";function i(r){return typeof r=="string"&&/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(r)&&r.length<50}function l(r,s){if(!i(r)||!i(s))return!1;let t=r.split(".").map(BigInt),n=s.split(".").map(BigInt);for(let e=0;e<3;e++)if(t[e]!==n[e])return t[e]>n[e];return!1}var f=JSON.parse(u(new URL("../package.json",import.meta.url),"utf8")).version;function m(){return{packageName:a,runningVersion:f,protocol:1}}async function b({fetcher:r=fetch,signal:s}={}){let t=await r("https://registry.npmjs.org/@feng0531%2fdsh-vcs/latest",{redirect:"error",headers:{Accept:"application/json"},signal:AbortSignal.any([...s?[s]:[],AbortSignal.timeout(15e3)])});if(!t.ok)throw new Error("\u65E0\u6CD5\u67E5\u8BE2 npm \u6700\u65B0\u7248\u672C\uFF08HTTP "+t.status+"\uFF09");if(Number(t.headers.get("content-length"))>256*1024)throw new Error("\u7248\u672C\u4FE1\u606F\u8FC7\u5927");let n=t.body.getReader(),e=0,c=[];try{for(;;){let{value:p,done:g}=await n.read();if(g)break;if(e+=p.length,e>256*1024)throw new Error("\u7248\u672C\u4FE1\u606F\u8FC7\u5927");c.push(p)}}finally{await n.cancel(),n.releaseLock()}let o=JSON.parse(Buffer.concat(c).toString("utf8"));if(o.name!==a||!i(o.version)||!o.dsh?.bundle)throw new Error("npm \u8FD4\u56DE\u7684\u63D2\u4EF6\u4FE1\u606F\u65E0\u6548");return{...m(),latestVersion:o.version,available:l(o.version,f),registry:"https://registry.npmjs.org/",releaseUrl:"https://github.com/f-e-n-g-0531/dsh-vcs/releases/tag/v"+o.version}}export{f as RUNNING_VERSION,b as checkUpdate,m as runtimeInfo};
package/docs/RELEASING.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  ## 发布内容
6
6
 
7
+ 每次改动完成并验证通过后,主动完成 npm 与 GitHub 正式发布,不停留在本地修改或只推标签。版本使用 `vX.Y.Z`:X 为大版本,Y 为小版本/新增功能,Z 为 BUG 修复;递增前一位时后面的位归零。失败门禁必须先修复,不能为了发布跳过验证。发布不自动安装或重启宿主。
8
+
7
9
  每个新版本必须有独立的中文发布说明,放在 `docs/releases/版本号.md`。按“本版变化、安装、限制、验证”组织,不把自动提交列表、开发轮次或内部恢复记录当作用户说明。没有新增功能时明确写出,不夸大改动。
8
10
 
9
11
  更新包版本和锁文件,在变更记录中填写同一版本。核查许可证、第三方声明及公开文件,排除凭据和私人数据。
package/index.mjs CHANGED
@@ -3,6 +3,7 @@ import {readFileSync} from 'node:fs';
3
3
  import {registerFrontendAssets} from './frontend-assets.mjs';
4
4
  const runningFrontend=JSON.parse(readFileSync(new URL('./dist/frontend.json',import.meta.url),'utf8'));
5
5
  import * as adapter from './vcs.mjs';
6
+ import {runtimeInfo,checkUpdate} from './dist/updates.mjs';
6
7
  import {createSvnHttpsHost} from './dist/svn-host.mjs';
7
8
 
8
9
  export const name = 'dsh-vcs';
@@ -160,6 +161,15 @@ export function createHandler(ctx, api = adapter, maxActive = 4, { now = Date.no
160
161
  }
161
162
  if(bindSvnIdentityResolver!==undefined){if(typeof bindSvnIdentityResolver!=='function')throw new Error('Invalid internal SVN resolver binding');bindSvnIdentityResolver(async(address,signal)=>{validatePayload('vcs/svn-identity',address);signal?.throwIfAborted();const cwd=await resolveSessionCwd(ctx,address.sessionId,signal),entry=current(address.sessionId,cwd),repository=entry?.repositories.get(address.repositoryId);if(!repository)throw rediscover();if(repository.type!=='svn')throw invalid('SVN working copy required.');const identity=await api.getSvnIdentity({...repository},{signal});await assertCurrent(address.sessionId,cwd,entry,signal);if(entry.repositories.get(address.repositoryId)!==repository)throw rediscover();return {...identity,cwd};});}
162
163
  return async (endpoint, payload, signal) => {
164
+ if (['vcs/runtime-info','vcs/check-update'].includes(endpoint)) {
165
+ try {
166
+ signal?.throwIfAborted();
167
+ if (!payload || typeof payload!=='object' || Array.isArray(payload) || Object.keys(payload).length) throw invalid('Update requests accept no fields.');
168
+ if (endpoint==='vcs/runtime-info') return {ok:true,value:runtimeInfo()};
169
+ if (active>=maxActive) return failure('vcs/busy','Too many VCS requests. Please retry.');
170
+ active++;try { return {ok:true,value:await checkUpdate({signal})}; } finally { active--; }
171
+ } catch(error) { return failure(signal?.aborted?'vcs/cancelled':'vcs/update-failed',error.message); }
172
+ }
163
173
  if (!['vcs/svn-identity', 'vcs/repositories', 'vcs/status', 'vcs/compare', 'vcs/conflict-stages', 'vcs/history', 'vcs/commit', 'vcs/commit-compare', 'vcs/revision-changes', 'vcs/revision-compare', 'vcs/file-history', 'vcs/blame', 'vcs/tree', 'vcs/tree-file', 'vcs/tree-segment', 'vcs/tree-history', 'vcs/commit-image', 'vcs/revision-image', 'vcs/workspace-image', 'vcs/references', 'vcs/stash-list', 'vcs/grep'].includes(endpoint)) return failure('vcs/not-found', 'Unknown VCS endpoint.');
164
174
  if (active >= maxActive) return failure('vcs/busy', 'Too many VCS requests. Please retry.');
165
175
  active++;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feng0531/dsh-vcs",
3
- "version": "0.3.106",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
6
6
  "type": "module",