zen-gitsync 2.17.28 → 2.17.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/package.json +4 -1
- package/src/ui/public/assets/{AgentEngineSelector-D8iaDrev.js → AgentEngineSelector-Wl7dKYKL.js} +2 -2
- package/src/ui/public/assets/{AgentView-BaYMwfC4.css → AgentView-Bebv5xk6.css} +1 -1
- package/src/ui/public/assets/AgentView-CebQ3545.js +11 -0
- package/src/ui/public/assets/AppVersionBadge-jm8ejuZ-.js +2 -0
- package/src/ui/public/assets/{BranchSelector-CTrTouMm.js → BranchSelector-CcNILIbg.js} +1 -1
- package/src/ui/public/assets/CommitForm-1ocxo8Cb.js +6 -0
- package/src/ui/public/assets/{CommonDialog-Bwj--3EO.js → CommonDialog-DpFTO5cg.js} +1 -1
- package/src/ui/public/assets/EditorView-CtRHV1Sv.js +37 -0
- package/src/ui/public/assets/FileDiffViewer-DXJO-G55.js +15 -0
- package/src/ui/public/assets/{FlowExecutionViewer-awWx7pMb.js → FlowExecutionViewer-d4O5Y9Ca.js} +1 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CKLRMeaL.js +21 -0
- package/src/ui/public/assets/{IconButton-IoukQQts.js → IconButton-Dl1cdP_x.js} +1 -1
- package/src/ui/public/assets/{LogList-Ca0hE-S0.js → LogList-CdDRC_CO.js} +4 -4
- package/src/ui/public/assets/MindmapView-U84MWPHc.js +2 -0
- package/src/ui/public/assets/MonitorView-spOV0cP7.js +1 -0
- package/src/ui/public/assets/{ProjectStartupButton-C8OZPgjM.js → ProjectStartupButton-BbAbfFn2.js} +1 -1
- package/src/ui/public/assets/{RecentDirectoriesChat-DFGIm3ab.js → RecentDirectoriesChat-CxNjjgVG.js} +2 -2
- package/src/ui/public/assets/RemoteManagerDialog-BVm2-Hn4.js +4 -0
- package/src/ui/public/assets/{RemoteRepoCard-HV8oHZL_.js → RemoteRepoCard-UHK_hrDS.js} +2 -2
- package/src/ui/public/assets/{SourceMapView-ByGif9Z8.js → SourceMapView-PHMr0wt3.js} +2 -2
- package/src/ui/public/assets/{SvgIcon-Cv-Ewpj-.js → SvgIcon-Dk7WnZLB.js} +1 -1
- package/src/ui/public/assets/{TemplateManager-DBuPZE4y.js → TemplateManager-B3ZNTXnP.js} +1 -1
- package/src/ui/public/assets/UserInputNode-DeAD7H0z.js +1 -0
- package/src/ui/public/assets/WorkbenchView-DsZ2ONpW.js +143 -0
- package/src/ui/public/assets/WorkbenchView-kZ8DoH2l.css +1 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-BP5VbhV0.js → _plugin-vue_export-helper-BKeZSroN.js} +5 -5
- package/src/ui/public/assets/{agentConversations-CDIB8kgC.js → agentConversations-ChTc-LkQ.js} +5 -5
- package/src/ui/public/assets/{configStore-eQKYDKzd.js → configStore-fJaic3kE.js} +1 -1
- package/src/ui/public/assets/{css.worker-BDCmgL4U.js → css.worker-DFdt6_zu.js} +9 -9
- package/src/ui/public/assets/editor.worker-O-CH8JUO.js +26 -0
- package/src/ui/public/assets/element-plus-D0R8BMj4.js +48 -0
- package/src/ui/public/assets/{element-plus-C1xzgNSR.css → element-plus-Qexo5hiM.css} +1 -1
- package/src/ui/public/assets/{flow-mindmap-B3900Z4K.js → flow-mindmap-Doi70WWn.js} +1 -1
- package/src/ui/public/assets/gitStore-D9oF5nof.js +6 -0
- package/src/ui/public/assets/{html.worker-DG8hnSJR.js → html.worker-JUzsMP-j.js} +8 -8
- package/src/ui/public/assets/index-CKxygqdx.js +148 -0
- package/src/ui/public/assets/json.worker-B4dEhy0e.js +58 -0
- package/src/ui/public/assets/{monaco-BScz9v63.js → monaco-DkJuNcCr.js} +6 -6
- package/src/ui/public/assets/{office-docx-C8sYW8O1.js → office-docx-O0YXk5gA.js} +1 -1
- package/src/ui/public/assets/{office-excel-DpZn5My2.js → office-excel-CXD9VwgB.js} +1 -1
- package/src/ui/public/assets/{office-pptx-BnYBTwT7.js → office-pptx-CiF2OlTq.js} +3 -3
- package/src/ui/public/assets/previewSandbox-21uStCdd.js +9 -0
- package/src/ui/public/assets/{toolsStore-C4B7BL-O.js → toolsStore-C89takm3.js} +1 -1
- package/src/ui/public/assets/{ts.worker-DgFMIcEs.js → ts.worker-CmEKzkmF.js} +49 -49
- package/src/ui/public/assets/{useThemeObserver-CGbhdyNi.js → useThemeObserver-BvSA7RDh.js} +1 -1
- package/src/ui/public/assets/{vendor-CUTaFm6P.js → vendor-CCrjQw5C.js} +2 -2
- package/src/ui/public/assets/{vue-flow-CxnoC7Uq.js → vue-flow-5Aq2bwoG.js} +1 -1
- package/src/ui/public/index.html +18 -18
- package/src/ui/server/routes/fs.js +12 -2
- package/src/ui/server/routes/workbench/agentMarketplace.js +130 -23
- package/src/ui/server/routes/workbench/agentMarketplace.test.js +68 -1
- package/src/ui/server/routes/workbench/envContext.js +69 -29
- package/src/ui/server/routes/workbench/envContext.test.js +68 -0
- package/src/ui/server/routes/workbench/executorModels.test.js +326 -326
- package/src/ui/server/routes/workbench/index.js +10 -3
- package/src/ui/server/routes/workbench/taskRunner.js +11 -4
- package/src/ui/public/assets/AgentView-BQz9h_Qi.js +0 -10
- package/src/ui/public/assets/AppVersionBadge-Mx8QwTA1.js +0 -2
- package/src/ui/public/assets/CommitForm-DsfySGI2.js +0 -6
- package/src/ui/public/assets/EditorView-DiyJWwAk.js +0 -37
- package/src/ui/public/assets/FileDiffViewer-DFFyUPF2.js +0 -15
- package/src/ui/public/assets/FlowOrchestrationWorkspace-Brq0M2sZ.js +0 -21
- package/src/ui/public/assets/MindmapView-BO_PG-mg.js +0 -2
- package/src/ui/public/assets/MonitorView-BXlLpzYU.js +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-DFtZmhn4.js +0 -4
- package/src/ui/public/assets/UserInputNode-CVKtLvHE.js +0 -1
- package/src/ui/public/assets/WorkbenchView-5K0toOqC.js +0 -143
- package/src/ui/public/assets/WorkbenchView-BA7mKIr4.css +0 -1
- package/src/ui/public/assets/editor.worker-GCPm6rMv.js +0 -26
- package/src/ui/public/assets/element-plus-D7LDHcAn.js +0 -48
- package/src/ui/public/assets/gitStore-8MMG-kBB.js +0 -6
- package/src/ui/public/assets/index-DBOS6HZF.js +0 -148
- package/src/ui/public/assets/json.worker-CxwlJRnL.js +0 -58
- package/src/ui/public/assets/previewSandbox-C-BRP5dF.js +0 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$n as e,Bn as t,Cn as n,Cr as r,Dn as i,En as a,Fn as o,Gn as s,Hn as c,In as l,Jn as u,Jr as d,Kr as f,Mn as p,Nr as m,On as h,Pn as g,Qn as _,Qr as v,Rn as y,Sr as b,Tn as x,Vn as S,Wn as C,Xn as w,Yn as T,Zn as E,_r as D,ar as O,cr as k,dr as A,er as j,gr as M,hr as N,ir as P,jn as F,lr as I,mr as L,or as R,pr as z,qn as B,qr as V,rr as H,tr as U,ur as ee,vr as W,wn as G,wr as K,xr as q,yn as J,yr as te,zn as ne}from"./element-plus-D7LDHcAn.js";A(),y(),m();function re(e){return ee()?(N(e),!0):!1}function ie(e){return typeof e==`function`?e():K(e)}var ae=typeof window<`u`&&typeof document<`u`,oe=e=>e!==void 0,se=Object.prototype.toString,ce=e=>se.call(e)===`[object Object]`,le=()=>{};function ue(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return n}var de=e=>e();function fe(e=de){let t=W(!0);function n(){t.value=!1}function r(){t.value=!0}return{isActive:D(t),pause:n,resume:r,eventFilter:(...n)=>{t.value&&e(...n)}}}function pe(e,t=!1,n=`Timeout`){return new Promise((r,i)=>{setTimeout(t?()=>i(n):r,e)})}function me(e,t,n={}){let{eventFilter:r=de,...i}=n;return P(e,ue(r,t),i)}function he(e,t,n={}){let{eventFilter:r,...i}=n,{eventFilter:a,pause:o,resume:s,isActive:c}=fe(r);return{stop:me(e,t,{...i,eventFilter:a}),pause:o,resume:s,isActive:c}}function ge(e,t={}){if(!z(e))return b(e);let n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(let r in e.value)n[r]=k(()=>({get(){return e.value[r]},set(n){if(ie(t.replaceRef)??!0){if(Array.isArray(e.value)){let t=[...e.value];t[r]=n,e.value=t}else{let t={...e.value,[r]:n};Object.setPrototypeOf(t,Object.getPrototypeOf(e.value)),e.value=t}}else e.value[r]=n}}));return n}function _e(e,t=!1){function n(n,{flush:r=`sync`,deep:i=!1,timeout:a,throwOnTimeout:o}={}){let s=null,c=[new Promise(a=>{s=P(e,e=>{n(e)!==t&&(s?.(),a(e))},{flush:r,deep:i,immediate:!0})})];return a!=null&&c.push(pe(a,o).then(()=>ie(e)).finally(()=>s?.())),Promise.race(c)}function r(r,i){if(!z(r))return n(e=>e===r,i);let{flush:a=`sync`,deep:o=!1,timeout:s,throwOnTimeout:c}=i??{},l=null,u=[new Promise(n=>{l=P([e,r],([e,r])=>{t!==(e===r)&&(l?.(),n(e))},{flush:a,deep:o,immediate:!0})})];return s!=null&&u.push(pe(s,c).then(()=>ie(e)).finally(()=>(l?.(),ie(e)))),Promise.race(u)}function i(e){return n(e=>!!e,e)}function a(e){return r(null,e)}function o(e){return r(void 0,e)}function s(e){return n(Number.isNaN,e)}function c(e,t){return n(t=>{let n=Array.from(t);return n.includes(e)||n.includes(ie(e))},t)}function l(e){return u(1,e)}function u(e=1,t){let r=-1;return n(()=>(r+=1,r>=e),t)}return Array.isArray(ie(e))?{toMatch:n,toContains:c,changed:l,changedTimes:u,get not(){return _e(e,!t)}}:{toMatch:n,toBe:r,toBeTruthy:i,toBeNull:a,toBeNaN:s,toBeUndefined:o,changed:l,changedTimes:u,get not(){return _e(e,!t)}}}function ve(e){return _e(e)}function ye(e){let t=ie(e);return t?.$el??t}var be=ae?window:void 0;function xe(...e){let t,n,r,i;if(typeof e[0]==`string`||Array.isArray(e[0])?([n,r,i]=e,t=be):[t,n,r,i]=e,!t)return le;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);let a=[],o=()=>{a.forEach(e=>e()),a.length=0},s=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),c=P(()=>[ye(t),ie(i)],([e,t])=>{if(o(),!e)return;let i=ce(t)?{...t}:t;a.push(...n.flatMap(t=>r.map(n=>s(e,t,n,i))))},{immediate:!0,flush:`post`}),l=()=>{c(),o()};return re(l),l}function Se(e){return typeof e==`function`?e:typeof e==`string`?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Ce(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]==`object`?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);let{target:i=be,eventName:a=`keydown`,passive:o=!1,dedupe:s=!1}=r,c=Se(t);return xe(i,a,e=>{e.repeat&&ie(s)||c(e)&&n(e)},o)}function we(e){return JSON.parse(JSON.stringify(e))}function Te(e,t,r,i={}){let{clone:a=!1,passive:s=!1,eventName:l,deep:u=!1,defaultValue:d,shouldEmit:f}=i,p=o(),m=r||p?.emit||(p?.$emit)?.bind(p)||(p?.proxy?.$emit)?.bind(p?.proxy),h=l;t||=`modelValue`,h||=`update:${t.toString()}`;let g=e=>a?typeof a==`function`?a(e):we(e):e,_=()=>oe(e[t])?g(e[t]):d,v=e=>{f?f(e)&&m(h,e):m(h,e)};if(s){let n=_(),r=W(n),i=!1;return P(()=>e[t],e=>{i||(i=!0,r.value=g(e),c(()=>i=!1))}),P(r,n=>{!i&&(n!==e[t]||u)&&v(n)},{deep:u}),r}return n({get(){return _()},set(e){v(e)}})}var Ee={value:()=>{}};function De(){for(var e=0,t=arguments.length,n={},r;e<t;++e){if(!(r=arguments[e]+``)||r in n||/[\s.]/.test(r))throw Error(`illegal type: `+r);n[r]=[]}return new Oe(n)}function Oe(e){this._=e}function ke(e,t){return e.trim().split(/^|\s+/).map(function(e){var n=``,r=e.indexOf(`.`);if(r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}Oe.prototype=De.prototype={constructor:Oe,on:function(e,t){var n=this._,r=ke(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a<o;)if((i=(e=r[a]).type)&&(i=Ae(n[i],e.name)))return i;return}if(t!=null&&typeof t!=`function`)throw Error(`invalid callback: `+t);for(;++a<o;)if(i=(e=r[a]).type)n[i]=je(n[i],e.name,t);else if(t==null)for(i in n)n[i]=je(n[i],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Oe(e)},call:function(e,t){if((i=arguments.length-2)>0)for(var n=Array(i),r=0,i,a;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(a=this._[e],r=0,i=a.length;r<i;++r)a[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(var r=this._[e],i=0,a=r.length;i<a;++i)r[i].value.apply(t,n)}};function Ae(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function je(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=Ee,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var Me=`http://www.w3.org/1999/xhtml`,Ne={svg:`http://www.w3.org/2000/svg`,xhtml:Me,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function Pe(e){var t=e+=``,n=t.indexOf(`:`);return n>=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),Ne.hasOwnProperty(t)?{space:Ne[t],local:e}:e}function Fe(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Me&&t.documentElement.namespaceURI===Me?t.createElement(e):t.createElementNS(n,e)}}function Ie(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Le(e){var t=Pe(e);return(t.local?Ie:Fe)(t)}function Re(){}function ze(e){return e==null?Re:function(){return this.querySelector(e)}}function Be(e){typeof e!=`function`&&(e=ze(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=Array(o),c,l,u=0;u<o;++u)(c=a[u])&&(l=e.call(c,c.__data__,u,a))&&(`__data__`in c&&(l.__data__=c.__data__),s[u]=l);return new kn(r,this._parents)}function Ve(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function He(){return[]}function Ue(e){return e==null?He:function(){return this.querySelectorAll(e)}}function We(e){return function(){return Ve(e.apply(this,arguments))}}function Ge(e){e=typeof e==`function`?We(e):Ue(e);for(var t=this._groups,n=t.length,r=[],i=[],a=0;a<n;++a)for(var o=t[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&(r.push(e.call(c,c.__data__,l,o)),i.push(c));return new kn(r,i)}function Ke(e){return function(){return this.matches(e)}}function qe(e){return function(t){return t.matches(e)}}var Je=Array.prototype.find;function Ye(e){return function(){return Je.call(this.children,e)}}function Xe(){return this.firstElementChild}function Ze(e){return this.select(e==null?Xe:Ye(typeof e==`function`?e:qe(e)))}var Qe=Array.prototype.filter;function $e(){return Array.from(this.children)}function et(e){return function(){return Qe.call(this.children,e)}}function tt(e){return this.selectAll(e==null?$e:et(typeof e==`function`?e:qe(e)))}function nt(e){typeof e!=`function`&&(e=Ke(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new kn(r,this._parents)}function rt(e){return Array(e.length)}function it(){return new kn(this._enter||this._groups.map(rt),this._parents)}function at(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}at.prototype={constructor:at,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function ot(e){return function(){return e}}function st(e,t,n,r,i,a){for(var o=0,s,c=t.length,l=a.length;o<l;++o)(s=t[o])?(s.__data__=a[o],r[o]=s):n[o]=new at(e,a[o]);for(;o<c;++o)(s=t[o])&&(i[o]=s)}function ct(e,t,n,r,i,a,o){var s,c,l=new Map,u=t.length,d=a.length,f=Array(u),p;for(s=0;s<u;++s)(c=t[s])&&(f[s]=p=o.call(c,c.__data__,s,t)+``,l.has(p)?i[s]=c:l.set(p,c));for(s=0;s<d;++s)p=o.call(e,a[s],s,a)+``,(c=l.get(p))?(r[s]=c,c.__data__=a[s],l.delete(p)):n[s]=new at(e,a[s]);for(s=0;s<u;++s)(c=t[s])&&l.get(f[s])===c&&(i[s]=c)}function lt(e){return e.__data__}function ut(e,t){if(!arguments.length)return Array.from(this,lt);var n=t?ct:st,r=this._parents,i=this._groups;typeof e!=`function`&&(e=ot(e));for(var a=i.length,o=Array(a),s=Array(a),c=Array(a),l=0;l<a;++l){var u=r[l],d=i[l],f=d.length,p=dt(e.call(u,u&&u.__data__,l,r)),m=p.length,h=s[l]=Array(m),g=o[l]=Array(m);n(u,d,h,g,c[l]=Array(f),p,t);for(var _=0,v=0,y,b;_<m;++_)if(y=h[_]){for(_>=v&&(v=_+1);!(b=g[v])&&++v<m;);y._next=b||null}}return o=new kn(o,r),o._enter=s,o._exit=c,o}function dt(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function ft(){return new kn(this._exit||this._groups.map(rt),this._parents)}function pt(e,t,n){var r=this.enter(),i=this,a=this.exit();return typeof e==`function`?(r=e(r),r&&=r.selection()):r=r.append(e+``),t!=null&&(i=t(i),i&&=i.selection()),n==null?a.remove():n(a),r&&i?r.merge(i).order():i}function mt(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,i=n.length,a=r.length,o=Math.min(i,a),s=Array(i),c=0;c<o;++c)for(var l=n[c],u=r[c],d=l.length,f=s[c]=Array(d),p,m=0;m<d;++m)(p=l[m]||u[m])&&(f[m]=p);for(;c<i;++c)s[c]=n[c];return new kn(s,this._parents)}function ht(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],i=r.length-1,a=r[i],o;--i>=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function gt(e){e||=_t;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;a<r;++a){for(var o=n[a],s=o.length,c=i[a]=Array(s),l,u=0;u<s;++u)(l=o[u])&&(c[u]=l);c.sort(t)}return new kn(i,this._parents).order()}function _t(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function vt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function yt(){return Array.from(this)}function bt(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null}function xt(){let e=0;for(let t of this)++e;return e}function St(){return!this.node()}function Ct(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length,s;a<o;++a)(s=i[a])&&e.call(s,s.__data__,a,i);return this}function wt(e){return function(){this.removeAttribute(e)}}function Tt(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Et(e,t){return function(){this.setAttribute(e,t)}}function Dt(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function Ot(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function kt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function At(e,t){var n=Pe(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?Tt:wt:typeof t==`function`?n.local?kt:Ot:n.local?Dt:Et)(n,t))}function jt(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Mt(e){return function(){this.style.removeProperty(e)}}function Nt(e,t,n){return function(){this.style.setProperty(e,t,n)}}function Pt(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function Ft(e,t,n){return arguments.length>1?this.each((t==null?Mt:typeof t==`function`?Pt:Nt)(e,t,n??``)):It(this.node(),e)}function It(e,t){return e.style.getPropertyValue(t)||jt(e).getComputedStyle(e,null).getPropertyValue(t)}function Lt(e){return function(){delete this[e]}}function Rt(e,t){return function(){this[e]=t}}function zt(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Bt(e,t){return arguments.length>1?this.each((t==null?Lt:typeof t==`function`?zt:Rt)(e,t)):this.node()[e]}function Vt(e){return e.trim().split(/^|\s+/)}function Ht(e){return e.classList||new Ut(e)}function Ut(e){this._node=e,this._names=Vt(e.getAttribute(`class`)||``)}Ut.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function Wt(e,t){for(var n=Ht(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function Gt(e,t){for(var n=Ht(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function Kt(e){return function(){Wt(this,e)}}function qt(e){return function(){Gt(this,e)}}function Jt(e,t){return function(){(t.apply(this,arguments)?Wt:Gt)(this,e)}}function Yt(e,t){var n=Vt(e+``);if(arguments.length<2){for(var r=Ht(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t==`function`?Jt:t?Kt:qt)(n,t))}function Xt(){this.textContent=``}function Zt(e){return function(){this.textContent=e}}function Qt(e){return function(){var t=e.apply(this,arguments);this.textContent=t??``}}function $t(e){return arguments.length?this.each(e==null?Xt:(typeof e==`function`?Qt:Zt)(e)):this.node().textContent}function en(){this.innerHTML=``}function tn(e){return function(){this.innerHTML=e}}function nn(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??``}}function rn(e){return arguments.length?this.each(e==null?en:(typeof e==`function`?nn:tn)(e)):this.node().innerHTML}function an(){this.nextSibling&&this.parentNode.appendChild(this)}function on(){return this.each(an)}function sn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function cn(){return this.each(sn)}function ln(e){var t=typeof e==`function`?e:Le(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function un(){return null}function dn(e,t){var n=typeof e==`function`?e:Le(e),r=t==null?un:typeof t==`function`?t:ze(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function fn(){var e=this.parentNode;e&&e.removeChild(this)}function pn(){return this.each(fn)}function mn(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function hn(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function gn(e){return this.select(e?hn:mn)}function _n(e){return arguments.length?this.property(`__data__`,e):this.node().__data__}function vn(e){return function(t){e.call(this,t,this.__data__)}}function yn(e){return e.trim().split(/^|\s+/).map(function(e){var t=``,n=e.indexOf(`.`);return n>=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function bn(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n<i;++n)a=t[n],(!e.type||a.type===e.type)&&a.name===e.name?this.removeEventListener(a.type,a.listener,a.options):t[++r]=a;++r?t.length=r:delete this.__on}}}function xn(e,t,n){return function(){var r=this.__on,i,a=vn(t);if(r){for(var o=0,s=r.length;o<s;++o)if((i=r[o]).type===e.type&&i.name===e.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=n),i.value=t;return}}this.addEventListener(e.type,a,n),i={type:e.type,name:e.name,value:t,listener:a,options:n},r?r.push(i):this.__on=[i]}}function Sn(e,t,n){var r=yn(e+``),i,a=r.length,o;if(arguments.length<2){var s=this.node().__on;if(s){for(var c=0,l=s.length,u;c<l;++c)for(i=0,u=s[c];i<a;++i)if((o=r[i]).type===u.type&&o.name===u.name)return u.value}return}for(s=t?xn:bn,i=0;i<a;++i)this.each(s(r[i],t,n));return this}function Cn(e,t,n){var r=jt(e),i=r.CustomEvent;typeof i==`function`?i=new i(t,n):(i=r.document.createEvent(`Event`),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function wn(e,t){return function(){return Cn(this,e,t)}}function Tn(e,t){return function(){return Cn(this,e,t.apply(this,arguments))}}function En(e,t){return this.each((typeof t==`function`?Tn:wn)(e,t))}function*Dn(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length,o;i<a;++i)(o=r[i])&&(yield o)}var On=[null];function kn(e,t){this._groups=e,this._parents=t}function An(){return new kn([[document.documentElement]],On)}function jn(){return this}kn.prototype=An.prototype={constructor:kn,select:Be,selectAll:Ge,selectChild:Ze,selectChildren:tt,filter:nt,data:ut,enter:it,exit:ft,join:pt,merge:mt,selection:jn,order:ht,sort:gt,call:vt,nodes:yt,node:bt,size:xt,empty:St,each:Ct,attr:At,style:Ft,property:Bt,classed:Yt,text:$t,html:rn,raise:on,lower:cn,append:ln,insert:dn,remove:pn,clone:gn,datum:_n,on:Sn,dispatch:En,[Symbol.iterator]:Dn};function Mn(e){return typeof e==`string`?new kn([[document.querySelector(e)]],[document.documentElement]):new kn([[e]],On)}function Nn(e){let t;for(;t=e.sourceEvent;)e=t;return e}function Pn(e,t){if(e=Nn(e),t===void 0&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}if(t.getBoundingClientRect){var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]}}return[e.pageX,e.pageY]}var Fn={passive:!1},In={capture:!0,passive:!1};function Ln(e){e.stopImmediatePropagation()}function Rn(e){e.preventDefault(),e.stopImmediatePropagation()}function zn(e){var t=e.document.documentElement,n=Mn(e).on(`dragstart.drag`,Rn,In);`onselectstart`in t?n.on(`selectstart.drag`,Rn,In):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect=`none`)}function Bn(e,t){var n=e.document.documentElement,r=Mn(e).on(`dragstart.drag`,null);t&&(r.on(`click.drag`,Rn,In),setTimeout(function(){r.on(`click.drag`,null)},0)),`onselectstart`in n?r.on(`selectstart.drag`,null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var Vn=e=>()=>e;function Hn(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}Hn.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function Un(e){return!e.ctrlKey&&!e.button}function Wn(){return this.parentNode}function Gn(e,t){return t??{x:e.x,y:e.y}}function Kn(){return navigator.maxTouchPoints||`ontouchstart`in this}function qn(){var e=Un,t=Wn,n=Gn,r=Kn,i={},a=De(`start`,`drag`,`end`),o=0,s,c,l,u,d=0;function f(e){e.on(`mousedown.drag`,p).filter(r).on(`touchstart.drag`,g).on(`touchmove.drag`,_,Fn).on(`touchend.drag touchcancel.drag`,v).style(`touch-action`,`none`).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}function p(n,r){if(!u&&e.call(this,n,r)){var i=y(this,t.call(this,n,r),n,r,`mouse`);i&&(Mn(n.view).on(`mousemove.drag`,m,In).on(`mouseup.drag`,h,In),zn(n.view),Ln(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(Rn(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){Mn(e.view).on(`mousemove.drag mouseup.drag`,null),Bn(e.view,l),Rn(e),i.mouse(`end`,e)}function g(n,r){if(e.call(this,n,r))for(var i=n.changedTouches,a=t.call(this,n,r),o=i.length,s=0,c;s<o;++s)(c=y(this,a,n,r,i[s].identifier,i[s]))&&(Ln(n),c(`start`,n,i[s]))}function _(e){for(var t=e.changedTouches,n=t.length,r=0,a;r<n;++r)(a=i[t[r].identifier])&&(Rn(e),a(`drag`,e,t[r]))}function v(e){var t=e.changedTouches,n=t.length,r,a;for(u&&clearTimeout(u),u=setTimeout(function(){u=null},500),r=0;r<n;++r)(a=i[t[r].identifier])&&(Ln(e),a(`end`,e,t[r]))}function y(e,t,r,s,c,l){var u=a.copy(),d=Pn(l||r,t),p,m,h;if((h=n.call(e,new Hn(`beforestart`,{sourceEvent:r,target:f,identifier:c,active:o,x:d[0],y:d[1],dx:0,dy:0,dispatch:u}),s))!=null)return p=h.x-d[0]||0,m=h.y-d[1]||0,function n(r,a,l){var g=d,_;switch(r){case`start`:i[c]=n,_=o++;break;case`end`:delete i[c],--o;case`drag`:d=Pn(l||a,t),_=o}u.call(r,e,new Hn(r,{sourceEvent:a,subject:h,target:f,identifier:c,active:_,x:d[0]+p,y:d[1]+m,dx:d[0]-g[0],dy:d[1]-g[1],dispatch:u}),s)}}return f.filter=function(t){return arguments.length?(e=typeof t==`function`?t:Vn(!!t),f):e},f.container=function(e){return arguments.length?(t=typeof e==`function`?e:Vn(e),f):t},f.subject=function(e){return arguments.length?(n=typeof e==`function`?e:Vn(e),f):n},f.touchable=function(e){return arguments.length?(r=typeof e==`function`?e:Vn(!!e),f):r},f.on=function(){var e=a.on.apply(a,arguments);return e===a?f:e},f.clickDistance=function(e){return arguments.length?(d=(e=+e)*e,f):Math.sqrt(d)},f}function Jn(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function Yn(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Xn(){}var Zn=.7,Qn=1/Zn,$n=`\\s*([+-]?\\d+)\\s*`,er=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,tr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,nr=/^#([0-9a-f]{3,8})$/,rr=RegExp(`^rgb\\(${$n},${$n},${$n}\\)$`),ir=RegExp(`^rgb\\(${tr},${tr},${tr}\\)$`),ar=RegExp(`^rgba\\(${$n},${$n},${$n},${er}\\)$`),or=RegExp(`^rgba\\(${tr},${tr},${tr},${er}\\)$`),sr=RegExp(`^hsl\\(${er},${tr},${tr}\\)$`),cr=RegExp(`^hsla\\(${er},${tr},${tr},${er}\\)$`),lr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Jn(Xn,mr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:ur,formatHex:ur,formatHex8:dr,formatHsl:fr,formatRgb:pr,toString:pr});function ur(){return this.rgb().formatHex()}function dr(){return this.rgb().formatHex8()}function fr(){return Dr(this).formatHsl()}function pr(){return this.rgb().formatRgb()}function mr(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=nr.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?hr(t):n===3?new yr(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?gr(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?gr(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=rr.exec(e))?new yr(t[1],t[2],t[3],1):(t=ir.exec(e))?new yr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=ar.exec(e))?gr(t[1],t[2],t[3],t[4]):(t=or.exec(e))?gr(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=sr.exec(e))?Er(t[1],t[2]/100,t[3]/100,1):(t=cr.exec(e))?Er(t[1],t[2]/100,t[3]/100,t[4]):lr.hasOwnProperty(e)?hr(lr[e]):e===`transparent`?new yr(NaN,NaN,NaN,0):null}function hr(e){return new yr(e>>16&255,e>>8&255,e&255,1)}function gr(e,t,n,r){return r<=0&&(e=t=n=NaN),new yr(e,t,n,r)}function _r(e){return e instanceof Xn||(e=mr(e)),e?(e=e.rgb(),new yr(e.r,e.g,e.b,e.opacity)):new yr}function vr(e,t,n,r){return arguments.length===1?_r(e):new yr(e,t,n,r??1)}function yr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Jn(yr,vr,Yn(Xn,{brighter(e){return e=e==null?Qn:Qn**+e,new yr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Zn:Zn**+e,new yr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new yr(wr(this.r),wr(this.g),wr(this.b),Cr(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:br,formatHex:br,formatHex8:xr,formatRgb:Sr,toString:Sr}));function br(){return`#${Tr(this.r)}${Tr(this.g)}${Tr(this.b)}`}function xr(){return`#${Tr(this.r)}${Tr(this.g)}${Tr(this.b)}${Tr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Sr(){let e=Cr(this.opacity);return`${e===1?`rgb(`:`rgba(`}${wr(this.r)}, ${wr(this.g)}, ${wr(this.b)}${e===1?`)`:`, ${e})`}`}function Cr(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function wr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Tr(e){return e=wr(e),(e<16?`0`:``)+e.toString(16)}function Er(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new kr(e,t,n,r)}function Dr(e){if(e instanceof kr)return new kr(e.h,e.s,e.l,e.opacity);if(e instanceof Xn||(e=mr(e)),!e)return new kr;if(e instanceof kr)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n<r)*6:n===a?(r-t)/s+2:(t-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&c<1?0:o,new kr(o,s,c,e.opacity)}function Or(e,t,n,r){return arguments.length===1?Dr(e):new kr(e,t,n,r??1)}function kr(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Jn(kr,Or,Yn(Xn,{brighter(e){return e=e==null?Qn:Qn**+e,new kr(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Zn:Zn**+e,new kr(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new yr(Mr(e>=240?e-240:e+120,i,r),Mr(e,i,r),Mr(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new kr(Ar(this.h),jr(this.s),jr(this.l),Cr(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=Cr(this.opacity);return`${e===1?`hsl(`:`hsla(`}${Ar(this.h)}, ${jr(this.s)*100}%, ${jr(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function Ar(e){return e=(e||0)%360,e<0?e+360:e}function jr(e){return Math.max(0,Math.min(1,e||0))}function Mr(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var Nr=e=>()=>e;function Pr(e,t){return function(n){return e+n*t}}function Fr(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function Ir(e){return(e=+e)==1?Lr:function(t,n){return n-t?Fr(t,n,e):Nr(isNaN(t)?n:t)}}function Lr(e,t){var n=t-e;return n?Pr(e,n):Nr(isNaN(e)?t:e)}var Rr=function e(t){var n=Ir(t);function r(e,t){var r=n((e=vr(e)).r,(t=vr(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Lr(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r}(1);function zr(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function Br(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Vr(e,t){for(var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o=0;o<r;++o)i[o]=Xr(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function Hr(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Ur(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function Wr(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=Xr(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var Gr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Kr=new RegExp(Gr.source,`g`);function qr(e){return function(){return e}}function Jr(e){return function(t){return e(t)+``}}function Yr(e,t){var n=Gr.lastIndex=Kr.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=Gr.exec(e))&&(i=Kr.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Ur(r,i)})),n=Kr.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?Jr(c[0].x):qr(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function Xr(e,t){var n=typeof t,r;return t==null||n===`boolean`?Nr(t):(n===`number`?Ur:n===`string`?(r=mr(t))?(t=r,Rr):Yr:t instanceof mr?Rr:t instanceof Date?Hr:Br(t)?zr:Array.isArray(t)?Vr:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?Wr:Ur)(e,t)}var Zr=180/Math.PI,Qr={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function $r(e,t,n,r,i,a){var o,s,c;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(c=e*n+t*r)&&(n-=e*c,r-=t*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),e*r<t*n&&(e=-e,t=-t,c=-c,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(t,e)*Zr,skewX:Math.atan(c)*Zr,scaleX:o,scaleY:s}}var ei;function ti(e){let t=new(typeof DOMMatrix==`function`?DOMMatrix:WebKitCSSMatrix)(e+``);return t.isIdentity?Qr:$r(t.a,t.b,t.c,t.d,t.e,t.f)}function ni(e){return e==null||(ei||=document.createElementNS(`http://www.w3.org/2000/svg`,`g`),ei.setAttribute(`transform`,e),!(e=ei.transform.baseVal.consolidate()))?Qr:(e=e.matrix,$r(e.a,e.b,e.c,e.d,e.e,e.f))}function ri(e,t,n,r){function i(e){return e.length?e.pop()+` `:``}function a(e,r,i,a,o,s){if(e!==i||r!==a){var c=o.push(`translate(`,null,t,null,n);s.push({i:c-4,x:Ur(e,i)},{i:c-2,x:Ur(r,a)})}else(i||a)&&o.push(`translate(`+i+t+a+n)}function o(e,t,n,a){e===t?t&&n.push(i(n)+`rotate(`+t+r):(e-t>180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+`rotate(`,null,r)-2,x:Ur(e,t)}))}function s(e,t,n,a){e===t?t&&n.push(i(n)+`skewX(`+t+r):a.push({i:n.push(i(n)+`skewX(`,null,r)-2,x:Ur(e,t)})}function c(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+`scale(`,null,`,`,null,`)`);o.push({i:s-4,x:Ur(e,n)},{i:s-2,x:Ur(t,r)})}else(n!==1||r!==1)&&a.push(i(a)+`scale(`+n+`,`+r+`)`)}return function(t,n){var r=[],i=[];return t=e(t),n=e(n),a(t.translateX,t.translateY,n.translateX,n.translateY,r,i),o(t.rotate,n.rotate,r,i),s(t.skewX,n.skewX,r,i),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,i),t=n=null,function(e){for(var t=-1,n=i.length,a;++t<n;)r[(a=i[t]).i]=a.x(e);return r.join(``)}}}var ii=ri(ti,`px, `,`px)`,`deg)`),ai=ri(ni,`, `,`)`,`)`),oi=1e-12;function si(e){return((e=Math.exp(e))+1/e)/2}function ci(e){return((e=Math.exp(e))-1/e)/2}function li(e){return((e=Math.exp(2*e))-1)/(e+1)}var ui=function e(t,n,r){function i(e,i){var a=e[0],o=e[1],s=e[2],c=i[0],l=i[1],u=i[2],d=c-a,f=l-o,p=d*d+f*f,m,h;if(p<oi)h=Math.log(u/s)/t,m=function(e){return[a+e*d,o+e*f,s*Math.exp(t*e*h)]};else{var g=Math.sqrt(p),_=(u*u-s*s+r*p)/(2*s*n*g),v=(u*u-s*s-r*p)/(2*u*n*g),y=Math.log(Math.sqrt(_*_+1)-_);h=(Math.log(Math.sqrt(v*v+1)-v)-y)/t,m=function(e){var r=e*h,i=si(y),c=s/(n*g)*(i*li(t*r+y)-ci(y));return[a+c*d,o+c*f,s*i/si(t*r+y)]}}return m.duration=h*1e3*t/Math.SQRT2,m}return i.rho=function(t){var n=Math.max(.001,+t),r=n*n;return e(n,r,r*r)},i}(Math.SQRT2,2,4),di=0,fi=0,pi=0,mi=1e3,hi,gi,_i=0,vi=0,yi=0,bi=typeof performance==`object`&&performance.now?performance:Date,xi=typeof window==`object`&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Si(){return vi||=(xi(Ci),bi.now()+yi)}function Ci(){vi=0}function wi(){this._call=this._time=this._next=null}wi.prototype=Ti.prototype={constructor:wi,restart:function(e,t,n){if(typeof e!=`function`)throw TypeError(`callback is not a function`);n=(n==null?Si():+n)+(t==null?0:+t),!this._next&&gi!==this&&(gi?gi._next=this:hi=this,gi=this),this._call=e,this._time=n,Ai()},stop:function(){this._call&&(this._call=null,this._time=1/0,Ai())}};function Ti(e,t,n){var r=new wi;return r.restart(e,t,n),r}function Ei(){Si(),++di;for(var e=hi,t;e;)(t=vi-e._time)>=0&&e._call.call(void 0,t),e=e._next;--di}function Di(){vi=(_i=bi.now())+yi,di=fi=0;try{Ei()}finally{di=0,ki(),vi=0}}function Oi(){var e=bi.now(),t=e-_i;t>mi&&(yi-=t,_i=e)}function ki(){for(var e,t=hi,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:hi=n);gi=e,Ai(r)}function Ai(e){di||(fi&&=clearTimeout(fi),e-vi>24?(e<1/0&&(fi=setTimeout(Di,e-bi.now()-yi)),pi&&=clearInterval(pi)):(pi||=(_i=bi.now(),setInterval(Oi,mi)),di=1,xi(Di)))}function ji(e,t,n){var r=new wi;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var Mi=De(`start`,`end`,`cancel`,`interrupt`),Ni=[],Pi=0,Fi=1,Ii=2,Li=3,Ri=4,zi=5,Bi=6;function Vi(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;Gi(e,n,{name:t,index:r,group:i,on:Mi,tween:Ni,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:Pi})}function Hi(e,t){var n=Wi(e,t);if(n.state>Pi)throw Error(`too late; already scheduled`);return n}function Ui(e,t){var n=Wi(e,t);if(n.state>Li)throw Error(`too late; already running`);return n}function Wi(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function Gi(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Ti(a,0,n.time);function a(e){n.state=Fi,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var l,u,d,f;if(n.state!==Fi)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===Li)return ji(o);f.state===Ri?(f.state=Bi,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l<t&&(f.state=Bi,f.timer.stop(),f.on.call(`cancel`,e,e.__data__,f.index,f.group),delete r[l])}if(ji(function(){n.state===Li&&(n.state=Ri,n.timer.restart(s,n.delay,n.time),s(a))}),n.state=Ii,n.on.call(`start`,e,e.__data__,n.index,n.group),n.state===Ii){for(n.state=Li,i=Array(d=n.tween.length),l=0,u=-1;l<d;++l)(f=n.tween[l].value.call(e,e.__data__,n.index,n.group))&&(i[++u]=f);i.length=u+1}}function s(t){for(var r=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(c),n.state=zi,1),a=-1,o=i.length;++a<o;)i[a].call(e,r);n.state===zi&&(n.on.call(`end`,e,e.__data__,n.index,n.group),c())}function c(){for(var i in n.state=Bi,n.timer.stop(),delete r[t],r)return;delete e.__transition}}function Ki(e,t){var n=e.__transition,r,i,a=!0,o;if(n){for(o in t=t==null?null:t+``,n){if((r=n[o]).name!==t){a=!1;continue}i=r.state>Ii&&r.state<zi,r.state=Bi,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function qi(e){return this.each(function(){Ki(this,e)})}function Ji(e,t){var n,r;return function(){var i=Ui(this,e),a=i.tween;if(a!==n){r=n=a;for(var o=0,s=r.length;o<s;++o)if(r[o].name===t){r=r.slice(),r.splice(o,1);break}}i.tween=r}}function Yi(e,t,n){var r,i;if(typeof n!=`function`)throw Error();return function(){var a=Ui(this,e),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:t,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===t){i[c]=s;break}c===l&&i.push(s)}a.tween=i}}function Xi(e,t){var n=this._id;if(e+=``,arguments.length<2){for(var r=Wi(this.node(),n).tween,i=0,a=r.length,o;i<a;++i)if((o=r[i]).name===e)return o.value;return null}return this.each((t==null?Ji:Yi)(n,e,t))}function Zi(e,t,n){var r=e._id;return e.each(function(){var e=Ui(this,r);(e.value||={})[t]=n.apply(this,arguments)}),function(e){return Wi(e,r).value[t]}}function Qi(e,t){var n;return(typeof t==`number`?Ur:t instanceof mr?Rr:(n=mr(t))?(t=n,Rr):Yr)(e,t)}function $i(e){return function(){this.removeAttribute(e)}}function ea(e){return function(){this.removeAttributeNS(e.space,e.local)}}function ta(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttribute(e);return o===i?null:o===r?a:a=t(r=o,n)}}function na(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttributeNS(e.space,e.local);return o===i?null:o===r?a:a=t(r=o,n)}}function ra(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttribute(e):(o=this.getAttribute(e),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function ia(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttributeNS(e.space,e.local):(o=this.getAttributeNS(e.space,e.local),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function aa(e,t){var n=Pe(e),r=n===`transform`?ai:Qi;return this.attrTween(e,typeof t==`function`?(n.local?ia:ra)(n,r,Zi(this,`attr.`+e,t)):t==null?(n.local?ea:$i)(n):(n.local?na:ta)(n,r,t))}function oa(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function sa(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function ca(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&sa(e,i)),n}return i._value=t,i}function la(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&oa(e,i)),n}return i._value=t,i}function ua(e,t){var n=`attr.`+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!=`function`)throw Error();var r=Pe(e);return this.tween(n,(r.local?ca:la)(r,t))}function da(e,t){return function(){Hi(this,e).delay=+t.apply(this,arguments)}}function fa(e,t){return t=+t,function(){Hi(this,e).delay=t}}function pa(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?da:fa)(t,e)):Wi(this.node(),t).delay}function ma(e,t){return function(){Ui(this,e).duration=+t.apply(this,arguments)}}function ha(e,t){return t=+t,function(){Ui(this,e).duration=t}}function ga(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?ma:ha)(t,e)):Wi(this.node(),t).duration}function _a(e,t){if(typeof t!=`function`)throw Error();return function(){Ui(this,e).ease=t}}function va(e){var t=this._id;return arguments.length?this.each(_a(t,e)):Wi(this.node(),t).ease}function ya(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=`function`)throw Error();Ui(this,e).ease=n}}function ba(e){if(typeof e!=`function`)throw Error();return this.each(ya(this._id,e))}function xa(e){typeof e!=`function`&&(e=Ke(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new Xa(r,this._parents,this._name,this._id)}function Sa(e){if(e._id!==this._id)throw Error();for(var t=this._groups,n=e._groups,r=t.length,i=n.length,a=Math.min(r,i),o=Array(r),s=0;s<a;++s)for(var c=t[s],l=n[s],u=c.length,d=o[s]=Array(u),f,p=0;p<u;++p)(f=c[p]||l[p])&&(d[p]=f);for(;s<r;++s)o[s]=t[s];return new Xa(o,this._parents,this._name,this._id)}function Ca(e){return(e+``).trim().split(/^|\s+/).every(function(e){var t=e.indexOf(`.`);return t>=0&&(e=e.slice(0,t)),!e||e===`start`})}function wa(e,t,n){var r,i,a=Ca(t)?Hi:Ui;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function Ta(e,t){var n=this._id;return arguments.length<2?Wi(this.node(),n).on.on(e):this.each(wa(n,e,t))}function Ea(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Da(){return this.on(`end.remove`,Ea(this._id))}function Oa(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=ze(e));for(var r=this._groups,i=r.length,a=Array(i),o=0;o<i;++o)for(var s=r[o],c=s.length,l=a[o]=Array(c),u,d,f=0;f<c;++f)(u=s[f])&&(d=e.call(u,u.__data__,f,s))&&(`__data__`in u&&(d.__data__=u.__data__),l[f]=d,Vi(l[f],t,n,f,l,Wi(u,n)));return new Xa(a,this._parents,t,n)}function ka(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=Ue(e));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var c=r[s],l=c.length,u,d=0;d<l;++d)if(u=c[d]){for(var f=e.call(u,u.__data__,d,c),p,m=Wi(u,n),h=0,g=f.length;h<g;++h)(p=f[h])&&Vi(p,t,n,h,f,m);a.push(f),o.push(u)}return new Xa(a,o,t,n)}var Aa=An.prototype.constructor;function ja(){return new Aa(this._groups,this._parents)}function Ma(e,t){var n,r,i;return function(){var a=It(this,e),o=(this.style.removeProperty(e),It(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}function Na(e){return function(){this.style.removeProperty(e)}}function Pa(e,t,n){var r,i=n+``,a;return function(){var o=It(this,e);return o===i?null:o===r?a:a=t(r=o,n)}}function Fa(e,t,n){var r,i,a;return function(){var o=It(this,e),s=n(this),c=s+``;return s??(c=s=(this.style.removeProperty(e),It(this,e))),o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s))}}function Ia(e,t){var n,r,i,a=`style.`+t,o=`end.`+a,s;return function(){var c=Ui(this,e),l=c.on,u=c.value[a]==null?s||=Na(t):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(o,i=u),c.on=r}}function La(e,t,n){var r=(e+=``)==`transform`?ii:Qi;return t==null?this.styleTween(e,Ma(e,r)).on(`end.style.`+e,Na(e)):typeof t==`function`?this.styleTween(e,Fa(e,r,Zi(this,`style.`+e,t))).each(Ia(this._id,e)):this.styleTween(e,Pa(e,r,t),n).on(`end.style.`+e,null)}function Ra(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function za(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&Ra(e,a,n)),r}return a._value=t,a}function Ba(e,t,n){var r=`style.`+(e+=``);if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!=`function`)throw Error();return this.tween(r,za(e,t,n??``))}function Va(e){return function(){this.textContent=e}}function Ha(e){return function(){var t=e(this);this.textContent=t??``}}function Ua(e){return this.tween(`text`,typeof e==`function`?Ha(Zi(this,`text`,e)):Va(e==null?``:e+``))}function Wa(e){return function(t){this.textContent=e.call(this,t)}}function Ga(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&Wa(r)),t}return r._value=e,r}function Ka(e){var t=`text`;if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!=`function`)throw Error();return this.tween(t,Ga(e))}function qa(){for(var e=this._name,t=this._id,n=Za(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)if(c=o[l]){var u=Wi(c,t);Vi(c,e,n,l,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new Xa(r,this._parents,e,n)}function Ja(){var e,t,n=this,r=n._id,i=n.size();return new Promise(function(a,o){var s={value:o},c={value:function(){--i===0&&a()}};n.each(function(){var n=Ui(this,r),i=n.on;i!==e&&(t=(e=i).copy(),t._.cancel.push(s),t._.interrupt.push(s),t._.end.push(c)),n.on=t}),i===0&&a()})}var Ya=0;function Xa(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Za(){return++Ya}var Qa=An.prototype;Xa.prototype={constructor:Xa,select:Oa,selectAll:ka,selectChild:Qa.selectChild,selectChildren:Qa.selectChildren,filter:xa,merge:Sa,selection:ja,transition:qa,call:Qa.call,nodes:Qa.nodes,node:Qa.node,size:Qa.size,empty:Qa.empty,each:Qa.each,on:Ta,attr:aa,attrTween:ua,style:La,styleTween:Ba,text:Ua,textTween:Ka,remove:Da,tween:Xi,delay:pa,duration:ga,ease:va,easeVarying:ba,end:Ja,[Symbol.iterator]:Qa[Symbol.iterator]};function $a(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var eo={time:null,delay:0,duration:250,ease:$a};function to(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw Error(`transition ${t} not found`);return n}function no(e){var t,n;e instanceof Xa?(t=e._id,e=e._name):(t=Za(),(n=eo).time=Si(),e=e==null?null:e+``);for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&Vi(c,e,t,l,o,n||to(c,t));return new Xa(r,this._parents,e,t)}An.prototype.interrupt=qi,An.prototype.transition=no;var ro=e=>()=>e;function io(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function ao(e,t,n){this.k=e,this.x=t,this.y=n}ao.prototype={constructor:ao,scale:function(e){return e===1?this:new ao(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new ao(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return`translate(`+this.x+`,`+this.y+`) scale(`+this.k+`)`}};var oo=new ao(1,0,0);ao.prototype;function so(e){e.stopImmediatePropagation()}function co(e){e.preventDefault(),e.stopImmediatePropagation()}function lo(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function uo(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute(`viewBox`)?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function fo(){return this.__zoom||oo}function po(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function mo(){return navigator.maxTouchPoints||`ontouchstart`in this}function ho(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],a=e.invertY(t[0][1])-n[0][1],o=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function go(){var e=lo,t=uo,n=ho,r=po,i=mo,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=ui,l=De(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,fo).on(`wheel.zoom`,w,{passive:!1}).on(`mousedown.zoom`,T).on(`dblclick.zoom`,E).filter(i).on(`touchstart.zoom`,D).on(`touchmove.zoom`,O).on(`touchend.zoom touchcancel.zoom`,k).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}_.transform=function(e,t,n,r){var i=e.selection?e.selection():e;i.property(`__zoom`,fo),e===i?i.interrupt().each(function(){S(this,arguments).event(r).start().zoom(null,typeof t==`function`?t.apply(this,arguments):t).end()}):x(e,t,n,r)},_.scaleBy=function(e,t,n,r){_.scaleTo(e,function(){return this.__zoom.k*(typeof t==`function`?t.apply(this,arguments):t)},n,r)},_.scaleTo=function(e,r,i,a){_.transform(e,function(){var e=t.apply(this,arguments),a=this.__zoom,s=i==null?b(e):typeof i==`function`?i.apply(this,arguments):i,c=a.invert(s),l=typeof r==`function`?r.apply(this,arguments):r;return n(y(v(a,l),s,c),e,o)},i,a)},_.translateBy=function(e,r,i,a){_.transform(e,function(){return n(this.__zoom.translate(typeof r==`function`?r.apply(this,arguments):r,typeof i==`function`?i.apply(this,arguments):i),t.apply(this,arguments),o)},null,a)},_.translateTo=function(e,r,i,a,s){_.transform(e,function(){var e=t.apply(this,arguments),s=this.__zoom,c=a==null?b(e):typeof a==`function`?a.apply(this,arguments):a;return n(oo.translate(c[0],c[1]).scale(s.k).translate(typeof r==`function`?-r.apply(this,arguments):-r,typeof i==`function`?-i.apply(this,arguments):-i),e,o)},a,s)};function v(e,t){return t=Math.max(a[0],Math.min(a[1],t)),t===e.k?e:new ao(t,e.x,e.y)}function y(e,t,n){var r=t[0]-n[0]*e.k,i=t[1]-n[1]*e.k;return r===e.x&&i===e.y?e:new ao(e.k,r,i)}function b(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function x(e,n,r,i){e.on(`start.zoom`,function(){S(this,arguments).event(i).start()}).on(`interrupt.zoom end.zoom`,function(){S(this,arguments).event(i).end()}).tween(`zoom`,function(){var e=this,a=arguments,o=S(e,a).event(i),s=t.apply(e,a),l=r==null?b(s):typeof r==`function`?r.apply(e,a):r,u=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),d=e.__zoom,f=typeof n==`function`?n.apply(e,a):n,p=c(d.invert(l).concat(u/d.k),f.invert(l).concat(u/f.k));return function(e){if(e===1)e=f;else{var t=p(e),n=u/t[2];e=new ao(n,l[0]-t[0]*n,l[1]-t[1]*n)}o.zoom(null,e)}})}function S(e,t,n){return!n&&e.__zooming||new C(e,t)}function C(e,n){this.that=e,this.args=n,this.active=0,this.sourceEvent=null,this.extent=t.apply(e,n),this.taps=0}C.prototype={event:function(e){return e&&(this.sourceEvent=e),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit(`start`)),this},zoom:function(e,t){return this.mouse&&e!==`mouse`&&(this.mouse[1]=t.invert(this.mouse[0])),this.touch0&&e!==`touch`&&(this.touch0[1]=t.invert(this.touch0[0])),this.touch1&&e!==`touch`&&(this.touch1[1]=t.invert(this.touch1[0])),this.that.__zoom=t,this.emit(`zoom`),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit(`end`)),this},emit:function(e){var t=Mn(this.that).datum();l.call(e,this.that,new io(e,{sourceEvent:this.sourceEvent,target:_,type:e,transform:this.that.__zoom,dispatch:l}),t)}};function w(t,...i){if(!e.apply(this,arguments))return;var s=S(this,i).event(t),c=this.__zoom,l=Math.max(a[0],Math.min(a[1],c.k*2**r.apply(this,arguments))),u=Pn(t);if(s.wheel)(s.mouse[0][0]!==u[0]||s.mouse[0][1]!==u[1])&&(s.mouse[1]=c.invert(s.mouse[0]=u)),clearTimeout(s.wheel);else if(c.k===l)return;else s.mouse=[u,c.invert(u)],Ki(this),s.start();co(t),s.wheel=setTimeout(d,m),s.zoom(`mouse`,n(y(v(c,l),s.mouse[0],s.mouse[1]),s.extent,o));function d(){s.wheel=null,s.end()}}function T(t,...r){if(f||!e.apply(this,arguments))return;var i=t.currentTarget,a=S(this,r,!0).event(t),s=Mn(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=Pn(t,i),l=t.clientX,u=t.clientY;zn(t.view),so(t),a.mouse=[c,this.__zoom.invert(c)],Ki(this),a.start();function d(e){if(co(e),!a.moved){var t=e.clientX-l,r=e.clientY-u;a.moved=t*t+r*r>h}a.event(e).zoom(`mouse`,n(y(a.that.__zoom,a.mouse[0]=Pn(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),Bn(e.view,a.moved),co(e),a.event(e).end()}}function E(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=Pn(r.changedTouches?r.changedTouches[0]:r,this),l=a.invert(c),u=a.k*(r.shiftKey?.5:2),d=n(y(v(a,u),c,l),t.apply(this,i),o);co(r),s>0?Mn(this).transition().duration(s).call(x,d,c,r):Mn(this).call(_.transform,d,c,r)}}function D(t,...n){if(e.apply(this,arguments)){var r=t.touches,i=r.length,a=S(this,n,t.changedTouches.length===i).event(t),o,s,c,l;for(so(t),s=0;s<i;++s)c=r[s],l=Pn(c,this),l=[l,this.__zoom.invert(l),c.identifier],a.touch0?!a.touch1&&a.touch0[2]!==l[2]&&(a.touch1=l,a.taps=0):(a.touch0=l,o=!0,a.taps=1+!!u);u&&=clearTimeout(u),o&&(a.taps<2&&(d=l[0],u=setTimeout(function(){u=null},p)),Ki(this),a.start())}}function O(e,...t){if(this.__zooming){var r=S(this,t).event(e),i=e.changedTouches,a=i.length,s,c,l,u;for(co(e),s=0;s<a;++s)c=i[s],l=Pn(c,this),r.touch0&&r.touch0[2]===c.identifier?r.touch0[0]=l:r.touch1&&r.touch1[2]===c.identifier&&(r.touch1[0]=l);if(c=r.that.__zoom,r.touch1){var d=r.touch0[0],f=r.touch0[1],p=r.touch1[0],m=r.touch1[1],h=(h=p[0]-d[0])*h+(h=p[1]-d[1])*h,g=(g=m[0]-f[0])*g+(g=m[1]-f[1])*g;c=v(c,Math.sqrt(h/g)),l=[(d[0]+p[0])/2,(d[1]+p[1])/2],u=[(f[0]+m[0])/2,(f[1]+m[1])/2]}else if(r.touch0)l=r.touch0[0],u=r.touch0[1];else return;r.zoom(`touch`,n(y(c,l,u),r.extent,o))}}function k(e,...t){if(this.__zooming){var n=S(this,t).event(e),r=e.changedTouches,i=r.length,a,o;for(so(e),f&&clearTimeout(f),f=setTimeout(function(){f=null},p),a=0;a<i;++a)o=r[a],n.touch0&&n.touch0[2]===o.identifier?delete n.touch0:n.touch1&&n.touch1[2]===o.identifier&&delete n.touch1;if(n.touch1&&!n.touch0&&(n.touch0=n.touch1,delete n.touch1),n.touch0)n.touch0[1]=this.__zoom.invert(n.touch0[0]);else if(n.end(),n.taps===2&&(o=Pn(o,this),Math.hypot(d[0]-o[0],d[1]-o[1])<g)){var s=Mn(this).on(`dblclick.zoom`);s&&s.apply(this,arguments)}}}return _.wheelDelta=function(e){return arguments.length?(r=typeof e==`function`?e:ro(+e),_):r},_.filter=function(t){return arguments.length?(e=typeof t==`function`?t:ro(!!t),_):e},_.touchable=function(e){return arguments.length?(i=typeof e==`function`?e:ro(!!e),_):i},_.extent=function(e){return arguments.length?(t=typeof e==`function`?e:ro([[+e[0][0],+e[0][1]],[+e[1][0],+e[1][1]]]),_):t},_.scaleExtent=function(e){return arguments.length?(a[0]=+e[0],a[1]=+e[1],_):[a[0],a[1]]},_.translateExtent=function(e){return arguments.length?(o[0][0]=+e[0][0],o[1][0]=+e[1][0],o[0][1]=+e[0][1],o[1][1]=+e[1][1],_):[[o[0][0],o[0][1]],[o[1][0],o[1][1]]]},_.constrain=function(e){return arguments.length?(n=e,_):n},_.duration=function(e){return arguments.length?(s=+e,_):s},_.interpolate=function(e){return arguments.length?(c=e,_):c},_.on=function(){var e=l.on.apply(l,arguments);return e===l?_:e},_.clickDistance=function(e){return arguments.length?(h=(e=+e)*e,_):Math.sqrt(h)},_.tapDistance=function(e){return arguments.length?(g=+e,_):g},_}var Y=(e=>(e.Left=`left`,e.Top=`top`,e.Right=`right`,e.Bottom=`bottom`,e))(Y||{}),_o=(e=>(e.Partial=`partial`,e.Full=`full`,e))(_o||{}),vo=(e=>(e.Bezier=`default`,e.SimpleBezier=`simple-bezier`,e.Straight=`straight`,e.Step=`step`,e.SmoothStep=`smoothstep`,e))(vo||{}),yo=(e=>(e.Strict=`strict`,e.Loose=`loose`,e))(yo||{}),bo=(e=>(e.Arrow=`arrow`,e.ArrowClosed=`arrowclosed`,e))(bo||{}),xo=(e=>(e.Free=`free`,e.Vertical=`vertical`,e.Horizontal=`horizontal`,e))(xo||{}),So=(e=>(e.TopLeft=`top-left`,e.TopCenter=`top-center`,e.TopRight=`top-right`,e.BottomLeft=`bottom-left`,e.BottomCenter=`bottom-center`,e.BottomRight=`bottom-right`,e))(So||{}),Co=[`INPUT`,`SELECT`,`TEXTAREA`],wo=typeof document<`u`?document:null;function To(e){let t=e.composedPath?.call(e)?.[0]||e.target,n=typeof t?.hasAttribute==`function`&&t.hasAttribute(`contenteditable`),r=typeof t?.closest==`function`?t.closest(`.nokey`):null;return Co.includes(t?.nodeName)||n||!!r}function Eo(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function Do(e,t,n,r){let i=t.replace(`+`,`
|
|
1
|
+
import{$n as e,Bn as t,Cn as n,Cr as r,Dn as i,En as a,Fn as o,Gn as s,Hn as c,In as l,Jn as u,Jr as d,Kr as f,Mn as p,Nr as m,On as h,Pn as g,Qn as _,Qr as v,Rn as y,Sr as b,Tn as x,Vn as S,Wn as C,Xn as w,Yn as T,Zn as E,_r as D,ar as O,cr as k,dr as A,er as j,gr as M,hr as N,ir as P,jn as F,lr as I,mr as L,or as R,pr as z,qn as B,qr as V,rr as H,tr as U,ur as ee,vr as W,wn as G,wr as K,xr as q,yn as J,yr as te,zn as ne}from"./element-plus-D0R8BMj4.js";A(),y(),m();function re(e){return ee()?(N(e),!0):!1}function ie(e){return typeof e==`function`?e():K(e)}var ae=typeof window<`u`&&typeof document<`u`,oe=e=>e!==void 0,se=Object.prototype.toString,ce=e=>se.call(e)===`[object Object]`,le=()=>{};function ue(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return n}var de=e=>e();function fe(e=de){let t=W(!0);function n(){t.value=!1}function r(){t.value=!0}return{isActive:D(t),pause:n,resume:r,eventFilter:(...n)=>{t.value&&e(...n)}}}function pe(e,t=!1,n=`Timeout`){return new Promise((r,i)=>{setTimeout(t?()=>i(n):r,e)})}function me(e,t,n={}){let{eventFilter:r=de,...i}=n;return P(e,ue(r,t),i)}function he(e,t,n={}){let{eventFilter:r,...i}=n,{eventFilter:a,pause:o,resume:s,isActive:c}=fe(r);return{stop:me(e,t,{...i,eventFilter:a}),pause:o,resume:s,isActive:c}}function ge(e,t={}){if(!z(e))return b(e);let n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(let r in e.value)n[r]=k(()=>({get(){return e.value[r]},set(n){if(ie(t.replaceRef)??!0){if(Array.isArray(e.value)){let t=[...e.value];t[r]=n,e.value=t}else{let t={...e.value,[r]:n};Object.setPrototypeOf(t,Object.getPrototypeOf(e.value)),e.value=t}}else e.value[r]=n}}));return n}function _e(e,t=!1){function n(n,{flush:r=`sync`,deep:i=!1,timeout:a,throwOnTimeout:o}={}){let s=null,c=[new Promise(a=>{s=P(e,e=>{n(e)!==t&&(s?.(),a(e))},{flush:r,deep:i,immediate:!0})})];return a!=null&&c.push(pe(a,o).then(()=>ie(e)).finally(()=>s?.())),Promise.race(c)}function r(r,i){if(!z(r))return n(e=>e===r,i);let{flush:a=`sync`,deep:o=!1,timeout:s,throwOnTimeout:c}=i??{},l=null,u=[new Promise(n=>{l=P([e,r],([e,r])=>{t!==(e===r)&&(l?.(),n(e))},{flush:a,deep:o,immediate:!0})})];return s!=null&&u.push(pe(s,c).then(()=>ie(e)).finally(()=>(l?.(),ie(e)))),Promise.race(u)}function i(e){return n(e=>!!e,e)}function a(e){return r(null,e)}function o(e){return r(void 0,e)}function s(e){return n(Number.isNaN,e)}function c(e,t){return n(t=>{let n=Array.from(t);return n.includes(e)||n.includes(ie(e))},t)}function l(e){return u(1,e)}function u(e=1,t){let r=-1;return n(()=>(r+=1,r>=e),t)}return Array.isArray(ie(e))?{toMatch:n,toContains:c,changed:l,changedTimes:u,get not(){return _e(e,!t)}}:{toMatch:n,toBe:r,toBeTruthy:i,toBeNull:a,toBeNaN:s,toBeUndefined:o,changed:l,changedTimes:u,get not(){return _e(e,!t)}}}function ve(e){return _e(e)}function ye(e){let t=ie(e);return t?.$el??t}var be=ae?window:void 0;function xe(...e){let t,n,r,i;if(typeof e[0]==`string`||Array.isArray(e[0])?([n,r,i]=e,t=be):[t,n,r,i]=e,!t)return le;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);let a=[],o=()=>{a.forEach(e=>e()),a.length=0},s=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),c=P(()=>[ye(t),ie(i)],([e,t])=>{if(o(),!e)return;let i=ce(t)?{...t}:t;a.push(...n.flatMap(t=>r.map(n=>s(e,t,n,i))))},{immediate:!0,flush:`post`}),l=()=>{c(),o()};return re(l),l}function Se(e){return typeof e==`function`?e:typeof e==`string`?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Ce(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]==`object`?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);let{target:i=be,eventName:a=`keydown`,passive:o=!1,dedupe:s=!1}=r,c=Se(t);return xe(i,a,e=>{e.repeat&&ie(s)||c(e)&&n(e)},o)}function we(e){return JSON.parse(JSON.stringify(e))}function Te(e,t,r,i={}){let{clone:a=!1,passive:s=!1,eventName:l,deep:u=!1,defaultValue:d,shouldEmit:f}=i,p=o(),m=r||p?.emit||(p?.$emit)?.bind(p)||(p?.proxy?.$emit)?.bind(p?.proxy),h=l;t||=`modelValue`,h||=`update:${t.toString()}`;let g=e=>a?typeof a==`function`?a(e):we(e):e,_=()=>oe(e[t])?g(e[t]):d,v=e=>{f?f(e)&&m(h,e):m(h,e)};if(s){let n=_(),r=W(n),i=!1;return P(()=>e[t],e=>{i||(i=!0,r.value=g(e),c(()=>i=!1))}),P(r,n=>{!i&&(n!==e[t]||u)&&v(n)},{deep:u}),r}return n({get(){return _()},set(e){v(e)}})}var Ee={value:()=>{}};function De(){for(var e=0,t=arguments.length,n={},r;e<t;++e){if(!(r=arguments[e]+``)||r in n||/[\s.]/.test(r))throw Error(`illegal type: `+r);n[r]=[]}return new Oe(n)}function Oe(e){this._=e}function ke(e,t){return e.trim().split(/^|\s+/).map(function(e){var n=``,r=e.indexOf(`.`);if(r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}Oe.prototype=De.prototype={constructor:Oe,on:function(e,t){var n=this._,r=ke(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a<o;)if((i=(e=r[a]).type)&&(i=Ae(n[i],e.name)))return i;return}if(t!=null&&typeof t!=`function`)throw Error(`invalid callback: `+t);for(;++a<o;)if(i=(e=r[a]).type)n[i]=je(n[i],e.name,t);else if(t==null)for(i in n)n[i]=je(n[i],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Oe(e)},call:function(e,t){if((i=arguments.length-2)>0)for(var n=Array(i),r=0,i,a;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(a=this._[e],r=0,i=a.length;r<i;++r)a[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(var r=this._[e],i=0,a=r.length;i<a;++i)r[i].value.apply(t,n)}};function Ae(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function je(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=Ee,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var Me=`http://www.w3.org/1999/xhtml`,Ne={svg:`http://www.w3.org/2000/svg`,xhtml:Me,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function Pe(e){var t=e+=``,n=t.indexOf(`:`);return n>=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),Ne.hasOwnProperty(t)?{space:Ne[t],local:e}:e}function Fe(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Me&&t.documentElement.namespaceURI===Me?t.createElement(e):t.createElementNS(n,e)}}function Ie(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Le(e){var t=Pe(e);return(t.local?Ie:Fe)(t)}function Re(){}function ze(e){return e==null?Re:function(){return this.querySelector(e)}}function Be(e){typeof e!=`function`&&(e=ze(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=Array(o),c,l,u=0;u<o;++u)(c=a[u])&&(l=e.call(c,c.__data__,u,a))&&(`__data__`in c&&(l.__data__=c.__data__),s[u]=l);return new kn(r,this._parents)}function Ve(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function He(){return[]}function Ue(e){return e==null?He:function(){return this.querySelectorAll(e)}}function We(e){return function(){return Ve(e.apply(this,arguments))}}function Ge(e){e=typeof e==`function`?We(e):Ue(e);for(var t=this._groups,n=t.length,r=[],i=[],a=0;a<n;++a)for(var o=t[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&(r.push(e.call(c,c.__data__,l,o)),i.push(c));return new kn(r,i)}function Ke(e){return function(){return this.matches(e)}}function qe(e){return function(t){return t.matches(e)}}var Je=Array.prototype.find;function Ye(e){return function(){return Je.call(this.children,e)}}function Xe(){return this.firstElementChild}function Ze(e){return this.select(e==null?Xe:Ye(typeof e==`function`?e:qe(e)))}var Qe=Array.prototype.filter;function $e(){return Array.from(this.children)}function et(e){return function(){return Qe.call(this.children,e)}}function tt(e){return this.selectAll(e==null?$e:et(typeof e==`function`?e:qe(e)))}function nt(e){typeof e!=`function`&&(e=Ke(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new kn(r,this._parents)}function rt(e){return Array(e.length)}function it(){return new kn(this._enter||this._groups.map(rt),this._parents)}function at(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}at.prototype={constructor:at,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function ot(e){return function(){return e}}function st(e,t,n,r,i,a){for(var o=0,s,c=t.length,l=a.length;o<l;++o)(s=t[o])?(s.__data__=a[o],r[o]=s):n[o]=new at(e,a[o]);for(;o<c;++o)(s=t[o])&&(i[o]=s)}function ct(e,t,n,r,i,a,o){var s,c,l=new Map,u=t.length,d=a.length,f=Array(u),p;for(s=0;s<u;++s)(c=t[s])&&(f[s]=p=o.call(c,c.__data__,s,t)+``,l.has(p)?i[s]=c:l.set(p,c));for(s=0;s<d;++s)p=o.call(e,a[s],s,a)+``,(c=l.get(p))?(r[s]=c,c.__data__=a[s],l.delete(p)):n[s]=new at(e,a[s]);for(s=0;s<u;++s)(c=t[s])&&l.get(f[s])===c&&(i[s]=c)}function lt(e){return e.__data__}function ut(e,t){if(!arguments.length)return Array.from(this,lt);var n=t?ct:st,r=this._parents,i=this._groups;typeof e!=`function`&&(e=ot(e));for(var a=i.length,o=Array(a),s=Array(a),c=Array(a),l=0;l<a;++l){var u=r[l],d=i[l],f=d.length,p=dt(e.call(u,u&&u.__data__,l,r)),m=p.length,h=s[l]=Array(m),g=o[l]=Array(m);n(u,d,h,g,c[l]=Array(f),p,t);for(var _=0,v=0,y,b;_<m;++_)if(y=h[_]){for(_>=v&&(v=_+1);!(b=g[v])&&++v<m;);y._next=b||null}}return o=new kn(o,r),o._enter=s,o._exit=c,o}function dt(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function ft(){return new kn(this._exit||this._groups.map(rt),this._parents)}function pt(e,t,n){var r=this.enter(),i=this,a=this.exit();return typeof e==`function`?(r=e(r),r&&=r.selection()):r=r.append(e+``),t!=null&&(i=t(i),i&&=i.selection()),n==null?a.remove():n(a),r&&i?r.merge(i).order():i}function mt(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,i=n.length,a=r.length,o=Math.min(i,a),s=Array(i),c=0;c<o;++c)for(var l=n[c],u=r[c],d=l.length,f=s[c]=Array(d),p,m=0;m<d;++m)(p=l[m]||u[m])&&(f[m]=p);for(;c<i;++c)s[c]=n[c];return new kn(s,this._parents)}function ht(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],i=r.length-1,a=r[i],o;--i>=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function gt(e){e||=_t;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;a<r;++a){for(var o=n[a],s=o.length,c=i[a]=Array(s),l,u=0;u<s;++u)(l=o[u])&&(c[u]=l);c.sort(t)}return new kn(i,this._parents).order()}function _t(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function vt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function yt(){return Array.from(this)}function bt(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null}function xt(){let e=0;for(let t of this)++e;return e}function St(){return!this.node()}function Ct(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length,s;a<o;++a)(s=i[a])&&e.call(s,s.__data__,a,i);return this}function wt(e){return function(){this.removeAttribute(e)}}function Tt(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Et(e,t){return function(){this.setAttribute(e,t)}}function Dt(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function Ot(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function kt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function At(e,t){var n=Pe(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?Tt:wt:typeof t==`function`?n.local?kt:Ot:n.local?Dt:Et)(n,t))}function jt(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Mt(e){return function(){this.style.removeProperty(e)}}function Nt(e,t,n){return function(){this.style.setProperty(e,t,n)}}function Pt(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function Ft(e,t,n){return arguments.length>1?this.each((t==null?Mt:typeof t==`function`?Pt:Nt)(e,t,n??``)):It(this.node(),e)}function It(e,t){return e.style.getPropertyValue(t)||jt(e).getComputedStyle(e,null).getPropertyValue(t)}function Lt(e){return function(){delete this[e]}}function Rt(e,t){return function(){this[e]=t}}function zt(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Bt(e,t){return arguments.length>1?this.each((t==null?Lt:typeof t==`function`?zt:Rt)(e,t)):this.node()[e]}function Vt(e){return e.trim().split(/^|\s+/)}function Ht(e){return e.classList||new Ut(e)}function Ut(e){this._node=e,this._names=Vt(e.getAttribute(`class`)||``)}Ut.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function Wt(e,t){for(var n=Ht(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function Gt(e,t){for(var n=Ht(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function Kt(e){return function(){Wt(this,e)}}function qt(e){return function(){Gt(this,e)}}function Jt(e,t){return function(){(t.apply(this,arguments)?Wt:Gt)(this,e)}}function Yt(e,t){var n=Vt(e+``);if(arguments.length<2){for(var r=Ht(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t==`function`?Jt:t?Kt:qt)(n,t))}function Xt(){this.textContent=``}function Zt(e){return function(){this.textContent=e}}function Qt(e){return function(){var t=e.apply(this,arguments);this.textContent=t??``}}function $t(e){return arguments.length?this.each(e==null?Xt:(typeof e==`function`?Qt:Zt)(e)):this.node().textContent}function en(){this.innerHTML=``}function tn(e){return function(){this.innerHTML=e}}function nn(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??``}}function rn(e){return arguments.length?this.each(e==null?en:(typeof e==`function`?nn:tn)(e)):this.node().innerHTML}function an(){this.nextSibling&&this.parentNode.appendChild(this)}function on(){return this.each(an)}function sn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function cn(){return this.each(sn)}function ln(e){var t=typeof e==`function`?e:Le(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function un(){return null}function dn(e,t){var n=typeof e==`function`?e:Le(e),r=t==null?un:typeof t==`function`?t:ze(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function fn(){var e=this.parentNode;e&&e.removeChild(this)}function pn(){return this.each(fn)}function mn(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function hn(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function gn(e){return this.select(e?hn:mn)}function _n(e){return arguments.length?this.property(`__data__`,e):this.node().__data__}function vn(e){return function(t){e.call(this,t,this.__data__)}}function yn(e){return e.trim().split(/^|\s+/).map(function(e){var t=``,n=e.indexOf(`.`);return n>=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function bn(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n<i;++n)a=t[n],(!e.type||a.type===e.type)&&a.name===e.name?this.removeEventListener(a.type,a.listener,a.options):t[++r]=a;++r?t.length=r:delete this.__on}}}function xn(e,t,n){return function(){var r=this.__on,i,a=vn(t);if(r){for(var o=0,s=r.length;o<s;++o)if((i=r[o]).type===e.type&&i.name===e.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=n),i.value=t;return}}this.addEventListener(e.type,a,n),i={type:e.type,name:e.name,value:t,listener:a,options:n},r?r.push(i):this.__on=[i]}}function Sn(e,t,n){var r=yn(e+``),i,a=r.length,o;if(arguments.length<2){var s=this.node().__on;if(s){for(var c=0,l=s.length,u;c<l;++c)for(i=0,u=s[c];i<a;++i)if((o=r[i]).type===u.type&&o.name===u.name)return u.value}return}for(s=t?xn:bn,i=0;i<a;++i)this.each(s(r[i],t,n));return this}function Cn(e,t,n){var r=jt(e),i=r.CustomEvent;typeof i==`function`?i=new i(t,n):(i=r.document.createEvent(`Event`),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function wn(e,t){return function(){return Cn(this,e,t)}}function Tn(e,t){return function(){return Cn(this,e,t.apply(this,arguments))}}function En(e,t){return this.each((typeof t==`function`?Tn:wn)(e,t))}function*Dn(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length,o;i<a;++i)(o=r[i])&&(yield o)}var On=[null];function kn(e,t){this._groups=e,this._parents=t}function An(){return new kn([[document.documentElement]],On)}function jn(){return this}kn.prototype=An.prototype={constructor:kn,select:Be,selectAll:Ge,selectChild:Ze,selectChildren:tt,filter:nt,data:ut,enter:it,exit:ft,join:pt,merge:mt,selection:jn,order:ht,sort:gt,call:vt,nodes:yt,node:bt,size:xt,empty:St,each:Ct,attr:At,style:Ft,property:Bt,classed:Yt,text:$t,html:rn,raise:on,lower:cn,append:ln,insert:dn,remove:pn,clone:gn,datum:_n,on:Sn,dispatch:En,[Symbol.iterator]:Dn};function Mn(e){return typeof e==`string`?new kn([[document.querySelector(e)]],[document.documentElement]):new kn([[e]],On)}function Nn(e){let t;for(;t=e.sourceEvent;)e=t;return e}function Pn(e,t){if(e=Nn(e),t===void 0&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}if(t.getBoundingClientRect){var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]}}return[e.pageX,e.pageY]}var Fn={passive:!1},In={capture:!0,passive:!1};function Ln(e){e.stopImmediatePropagation()}function Rn(e){e.preventDefault(),e.stopImmediatePropagation()}function zn(e){var t=e.document.documentElement,n=Mn(e).on(`dragstart.drag`,Rn,In);`onselectstart`in t?n.on(`selectstart.drag`,Rn,In):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect=`none`)}function Bn(e,t){var n=e.document.documentElement,r=Mn(e).on(`dragstart.drag`,null);t&&(r.on(`click.drag`,Rn,In),setTimeout(function(){r.on(`click.drag`,null)},0)),`onselectstart`in n?r.on(`selectstart.drag`,null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var Vn=e=>()=>e;function Hn(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}Hn.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function Un(e){return!e.ctrlKey&&!e.button}function Wn(){return this.parentNode}function Gn(e,t){return t??{x:e.x,y:e.y}}function Kn(){return navigator.maxTouchPoints||`ontouchstart`in this}function qn(){var e=Un,t=Wn,n=Gn,r=Kn,i={},a=De(`start`,`drag`,`end`),o=0,s,c,l,u,d=0;function f(e){e.on(`mousedown.drag`,p).filter(r).on(`touchstart.drag`,g).on(`touchmove.drag`,_,Fn).on(`touchend.drag touchcancel.drag`,v).style(`touch-action`,`none`).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}function p(n,r){if(!u&&e.call(this,n,r)){var i=y(this,t.call(this,n,r),n,r,`mouse`);i&&(Mn(n.view).on(`mousemove.drag`,m,In).on(`mouseup.drag`,h,In),zn(n.view),Ln(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(Rn(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){Mn(e.view).on(`mousemove.drag mouseup.drag`,null),Bn(e.view,l),Rn(e),i.mouse(`end`,e)}function g(n,r){if(e.call(this,n,r))for(var i=n.changedTouches,a=t.call(this,n,r),o=i.length,s=0,c;s<o;++s)(c=y(this,a,n,r,i[s].identifier,i[s]))&&(Ln(n),c(`start`,n,i[s]))}function _(e){for(var t=e.changedTouches,n=t.length,r=0,a;r<n;++r)(a=i[t[r].identifier])&&(Rn(e),a(`drag`,e,t[r]))}function v(e){var t=e.changedTouches,n=t.length,r,a;for(u&&clearTimeout(u),u=setTimeout(function(){u=null},500),r=0;r<n;++r)(a=i[t[r].identifier])&&(Ln(e),a(`end`,e,t[r]))}function y(e,t,r,s,c,l){var u=a.copy(),d=Pn(l||r,t),p,m,h;if((h=n.call(e,new Hn(`beforestart`,{sourceEvent:r,target:f,identifier:c,active:o,x:d[0],y:d[1],dx:0,dy:0,dispatch:u}),s))!=null)return p=h.x-d[0]||0,m=h.y-d[1]||0,function n(r,a,l){var g=d,_;switch(r){case`start`:i[c]=n,_=o++;break;case`end`:delete i[c],--o;case`drag`:d=Pn(l||a,t),_=o}u.call(r,e,new Hn(r,{sourceEvent:a,subject:h,target:f,identifier:c,active:_,x:d[0]+p,y:d[1]+m,dx:d[0]-g[0],dy:d[1]-g[1],dispatch:u}),s)}}return f.filter=function(t){return arguments.length?(e=typeof t==`function`?t:Vn(!!t),f):e},f.container=function(e){return arguments.length?(t=typeof e==`function`?e:Vn(e),f):t},f.subject=function(e){return arguments.length?(n=typeof e==`function`?e:Vn(e),f):n},f.touchable=function(e){return arguments.length?(r=typeof e==`function`?e:Vn(!!e),f):r},f.on=function(){var e=a.on.apply(a,arguments);return e===a?f:e},f.clickDistance=function(e){return arguments.length?(d=(e=+e)*e,f):Math.sqrt(d)},f}function Jn(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function Yn(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Xn(){}var Zn=.7,Qn=1/Zn,$n=`\\s*([+-]?\\d+)\\s*`,er=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,tr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,nr=/^#([0-9a-f]{3,8})$/,rr=RegExp(`^rgb\\(${$n},${$n},${$n}\\)$`),ir=RegExp(`^rgb\\(${tr},${tr},${tr}\\)$`),ar=RegExp(`^rgba\\(${$n},${$n},${$n},${er}\\)$`),or=RegExp(`^rgba\\(${tr},${tr},${tr},${er}\\)$`),sr=RegExp(`^hsl\\(${er},${tr},${tr}\\)$`),cr=RegExp(`^hsla\\(${er},${tr},${tr},${er}\\)$`),lr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Jn(Xn,mr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:ur,formatHex:ur,formatHex8:dr,formatHsl:fr,formatRgb:pr,toString:pr});function ur(){return this.rgb().formatHex()}function dr(){return this.rgb().formatHex8()}function fr(){return Dr(this).formatHsl()}function pr(){return this.rgb().formatRgb()}function mr(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=nr.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?hr(t):n===3?new yr(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?gr(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?gr(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=rr.exec(e))?new yr(t[1],t[2],t[3],1):(t=ir.exec(e))?new yr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=ar.exec(e))?gr(t[1],t[2],t[3],t[4]):(t=or.exec(e))?gr(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=sr.exec(e))?Er(t[1],t[2]/100,t[3]/100,1):(t=cr.exec(e))?Er(t[1],t[2]/100,t[3]/100,t[4]):lr.hasOwnProperty(e)?hr(lr[e]):e===`transparent`?new yr(NaN,NaN,NaN,0):null}function hr(e){return new yr(e>>16&255,e>>8&255,e&255,1)}function gr(e,t,n,r){return r<=0&&(e=t=n=NaN),new yr(e,t,n,r)}function _r(e){return e instanceof Xn||(e=mr(e)),e?(e=e.rgb(),new yr(e.r,e.g,e.b,e.opacity)):new yr}function vr(e,t,n,r){return arguments.length===1?_r(e):new yr(e,t,n,r??1)}function yr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Jn(yr,vr,Yn(Xn,{brighter(e){return e=e==null?Qn:Qn**+e,new yr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Zn:Zn**+e,new yr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new yr(wr(this.r),wr(this.g),wr(this.b),Cr(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:br,formatHex:br,formatHex8:xr,formatRgb:Sr,toString:Sr}));function br(){return`#${Tr(this.r)}${Tr(this.g)}${Tr(this.b)}`}function xr(){return`#${Tr(this.r)}${Tr(this.g)}${Tr(this.b)}${Tr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Sr(){let e=Cr(this.opacity);return`${e===1?`rgb(`:`rgba(`}${wr(this.r)}, ${wr(this.g)}, ${wr(this.b)}${e===1?`)`:`, ${e})`}`}function Cr(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function wr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Tr(e){return e=wr(e),(e<16?`0`:``)+e.toString(16)}function Er(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new kr(e,t,n,r)}function Dr(e){if(e instanceof kr)return new kr(e.h,e.s,e.l,e.opacity);if(e instanceof Xn||(e=mr(e)),!e)return new kr;if(e instanceof kr)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n<r)*6:n===a?(r-t)/s+2:(t-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&c<1?0:o,new kr(o,s,c,e.opacity)}function Or(e,t,n,r){return arguments.length===1?Dr(e):new kr(e,t,n,r??1)}function kr(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Jn(kr,Or,Yn(Xn,{brighter(e){return e=e==null?Qn:Qn**+e,new kr(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Zn:Zn**+e,new kr(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new yr(Mr(e>=240?e-240:e+120,i,r),Mr(e,i,r),Mr(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new kr(Ar(this.h),jr(this.s),jr(this.l),Cr(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=Cr(this.opacity);return`${e===1?`hsl(`:`hsla(`}${Ar(this.h)}, ${jr(this.s)*100}%, ${jr(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function Ar(e){return e=(e||0)%360,e<0?e+360:e}function jr(e){return Math.max(0,Math.min(1,e||0))}function Mr(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var Nr=e=>()=>e;function Pr(e,t){return function(n){return e+n*t}}function Fr(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function Ir(e){return(e=+e)==1?Lr:function(t,n){return n-t?Fr(t,n,e):Nr(isNaN(t)?n:t)}}function Lr(e,t){var n=t-e;return n?Pr(e,n):Nr(isNaN(e)?t:e)}var Rr=function e(t){var n=Ir(t);function r(e,t){var r=n((e=vr(e)).r,(t=vr(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Lr(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r}(1);function zr(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function Br(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Vr(e,t){for(var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o=0;o<r;++o)i[o]=Xr(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function Hr(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Ur(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function Wr(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=Xr(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var Gr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Kr=new RegExp(Gr.source,`g`);function qr(e){return function(){return e}}function Jr(e){return function(t){return e(t)+``}}function Yr(e,t){var n=Gr.lastIndex=Kr.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=Gr.exec(e))&&(i=Kr.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Ur(r,i)})),n=Kr.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?Jr(c[0].x):qr(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function Xr(e,t){var n=typeof t,r;return t==null||n===`boolean`?Nr(t):(n===`number`?Ur:n===`string`?(r=mr(t))?(t=r,Rr):Yr:t instanceof mr?Rr:t instanceof Date?Hr:Br(t)?zr:Array.isArray(t)?Vr:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?Wr:Ur)(e,t)}var Zr=180/Math.PI,Qr={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function $r(e,t,n,r,i,a){var o,s,c;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(c=e*n+t*r)&&(n-=e*c,r-=t*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),e*r<t*n&&(e=-e,t=-t,c=-c,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(t,e)*Zr,skewX:Math.atan(c)*Zr,scaleX:o,scaleY:s}}var ei;function ti(e){let t=new(typeof DOMMatrix==`function`?DOMMatrix:WebKitCSSMatrix)(e+``);return t.isIdentity?Qr:$r(t.a,t.b,t.c,t.d,t.e,t.f)}function ni(e){return e==null||(ei||=document.createElementNS(`http://www.w3.org/2000/svg`,`g`),ei.setAttribute(`transform`,e),!(e=ei.transform.baseVal.consolidate()))?Qr:(e=e.matrix,$r(e.a,e.b,e.c,e.d,e.e,e.f))}function ri(e,t,n,r){function i(e){return e.length?e.pop()+` `:``}function a(e,r,i,a,o,s){if(e!==i||r!==a){var c=o.push(`translate(`,null,t,null,n);s.push({i:c-4,x:Ur(e,i)},{i:c-2,x:Ur(r,a)})}else(i||a)&&o.push(`translate(`+i+t+a+n)}function o(e,t,n,a){e===t?t&&n.push(i(n)+`rotate(`+t+r):(e-t>180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+`rotate(`,null,r)-2,x:Ur(e,t)}))}function s(e,t,n,a){e===t?t&&n.push(i(n)+`skewX(`+t+r):a.push({i:n.push(i(n)+`skewX(`,null,r)-2,x:Ur(e,t)})}function c(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+`scale(`,null,`,`,null,`)`);o.push({i:s-4,x:Ur(e,n)},{i:s-2,x:Ur(t,r)})}else(n!==1||r!==1)&&a.push(i(a)+`scale(`+n+`,`+r+`)`)}return function(t,n){var r=[],i=[];return t=e(t),n=e(n),a(t.translateX,t.translateY,n.translateX,n.translateY,r,i),o(t.rotate,n.rotate,r,i),s(t.skewX,n.skewX,r,i),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,i),t=n=null,function(e){for(var t=-1,n=i.length,a;++t<n;)r[(a=i[t]).i]=a.x(e);return r.join(``)}}}var ii=ri(ti,`px, `,`px)`,`deg)`),ai=ri(ni,`, `,`)`,`)`),oi=1e-12;function si(e){return((e=Math.exp(e))+1/e)/2}function ci(e){return((e=Math.exp(e))-1/e)/2}function li(e){return((e=Math.exp(2*e))-1)/(e+1)}var ui=function e(t,n,r){function i(e,i){var a=e[0],o=e[1],s=e[2],c=i[0],l=i[1],u=i[2],d=c-a,f=l-o,p=d*d+f*f,m,h;if(p<oi)h=Math.log(u/s)/t,m=function(e){return[a+e*d,o+e*f,s*Math.exp(t*e*h)]};else{var g=Math.sqrt(p),_=(u*u-s*s+r*p)/(2*s*n*g),v=(u*u-s*s-r*p)/(2*u*n*g),y=Math.log(Math.sqrt(_*_+1)-_);h=(Math.log(Math.sqrt(v*v+1)-v)-y)/t,m=function(e){var r=e*h,i=si(y),c=s/(n*g)*(i*li(t*r+y)-ci(y));return[a+c*d,o+c*f,s*i/si(t*r+y)]}}return m.duration=h*1e3*t/Math.SQRT2,m}return i.rho=function(t){var n=Math.max(.001,+t),r=n*n;return e(n,r,r*r)},i}(Math.SQRT2,2,4),di=0,fi=0,pi=0,mi=1e3,hi,gi,_i=0,vi=0,yi=0,bi=typeof performance==`object`&&performance.now?performance:Date,xi=typeof window==`object`&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Si(){return vi||=(xi(Ci),bi.now()+yi)}function Ci(){vi=0}function wi(){this._call=this._time=this._next=null}wi.prototype=Ti.prototype={constructor:wi,restart:function(e,t,n){if(typeof e!=`function`)throw TypeError(`callback is not a function`);n=(n==null?Si():+n)+(t==null?0:+t),!this._next&&gi!==this&&(gi?gi._next=this:hi=this,gi=this),this._call=e,this._time=n,Ai()},stop:function(){this._call&&(this._call=null,this._time=1/0,Ai())}};function Ti(e,t,n){var r=new wi;return r.restart(e,t,n),r}function Ei(){Si(),++di;for(var e=hi,t;e;)(t=vi-e._time)>=0&&e._call.call(void 0,t),e=e._next;--di}function Di(){vi=(_i=bi.now())+yi,di=fi=0;try{Ei()}finally{di=0,ki(),vi=0}}function Oi(){var e=bi.now(),t=e-_i;t>mi&&(yi-=t,_i=e)}function ki(){for(var e,t=hi,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:hi=n);gi=e,Ai(r)}function Ai(e){di||(fi&&=clearTimeout(fi),e-vi>24?(e<1/0&&(fi=setTimeout(Di,e-bi.now()-yi)),pi&&=clearInterval(pi)):(pi||=(_i=bi.now(),setInterval(Oi,mi)),di=1,xi(Di)))}function ji(e,t,n){var r=new wi;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var Mi=De(`start`,`end`,`cancel`,`interrupt`),Ni=[],Pi=0,Fi=1,Ii=2,Li=3,Ri=4,zi=5,Bi=6;function Vi(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;Gi(e,n,{name:t,index:r,group:i,on:Mi,tween:Ni,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:Pi})}function Hi(e,t){var n=Wi(e,t);if(n.state>Pi)throw Error(`too late; already scheduled`);return n}function Ui(e,t){var n=Wi(e,t);if(n.state>Li)throw Error(`too late; already running`);return n}function Wi(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function Gi(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Ti(a,0,n.time);function a(e){n.state=Fi,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var l,u,d,f;if(n.state!==Fi)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===Li)return ji(o);f.state===Ri?(f.state=Bi,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l<t&&(f.state=Bi,f.timer.stop(),f.on.call(`cancel`,e,e.__data__,f.index,f.group),delete r[l])}if(ji(function(){n.state===Li&&(n.state=Ri,n.timer.restart(s,n.delay,n.time),s(a))}),n.state=Ii,n.on.call(`start`,e,e.__data__,n.index,n.group),n.state===Ii){for(n.state=Li,i=Array(d=n.tween.length),l=0,u=-1;l<d;++l)(f=n.tween[l].value.call(e,e.__data__,n.index,n.group))&&(i[++u]=f);i.length=u+1}}function s(t){for(var r=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(c),n.state=zi,1),a=-1,o=i.length;++a<o;)i[a].call(e,r);n.state===zi&&(n.on.call(`end`,e,e.__data__,n.index,n.group),c())}function c(){for(var i in n.state=Bi,n.timer.stop(),delete r[t],r)return;delete e.__transition}}function Ki(e,t){var n=e.__transition,r,i,a=!0,o;if(n){for(o in t=t==null?null:t+``,n){if((r=n[o]).name!==t){a=!1;continue}i=r.state>Ii&&r.state<zi,r.state=Bi,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function qi(e){return this.each(function(){Ki(this,e)})}function Ji(e,t){var n,r;return function(){var i=Ui(this,e),a=i.tween;if(a!==n){r=n=a;for(var o=0,s=r.length;o<s;++o)if(r[o].name===t){r=r.slice(),r.splice(o,1);break}}i.tween=r}}function Yi(e,t,n){var r,i;if(typeof n!=`function`)throw Error();return function(){var a=Ui(this,e),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:t,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===t){i[c]=s;break}c===l&&i.push(s)}a.tween=i}}function Xi(e,t){var n=this._id;if(e+=``,arguments.length<2){for(var r=Wi(this.node(),n).tween,i=0,a=r.length,o;i<a;++i)if((o=r[i]).name===e)return o.value;return null}return this.each((t==null?Ji:Yi)(n,e,t))}function Zi(e,t,n){var r=e._id;return e.each(function(){var e=Ui(this,r);(e.value||={})[t]=n.apply(this,arguments)}),function(e){return Wi(e,r).value[t]}}function Qi(e,t){var n;return(typeof t==`number`?Ur:t instanceof mr?Rr:(n=mr(t))?(t=n,Rr):Yr)(e,t)}function $i(e){return function(){this.removeAttribute(e)}}function ea(e){return function(){this.removeAttributeNS(e.space,e.local)}}function ta(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttribute(e);return o===i?null:o===r?a:a=t(r=o,n)}}function na(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttributeNS(e.space,e.local);return o===i?null:o===r?a:a=t(r=o,n)}}function ra(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttribute(e):(o=this.getAttribute(e),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function ia(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttributeNS(e.space,e.local):(o=this.getAttributeNS(e.space,e.local),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function aa(e,t){var n=Pe(e),r=n===`transform`?ai:Qi;return this.attrTween(e,typeof t==`function`?(n.local?ia:ra)(n,r,Zi(this,`attr.`+e,t)):t==null?(n.local?ea:$i)(n):(n.local?na:ta)(n,r,t))}function oa(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function sa(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function ca(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&sa(e,i)),n}return i._value=t,i}function la(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&oa(e,i)),n}return i._value=t,i}function ua(e,t){var n=`attr.`+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!=`function`)throw Error();var r=Pe(e);return this.tween(n,(r.local?ca:la)(r,t))}function da(e,t){return function(){Hi(this,e).delay=+t.apply(this,arguments)}}function fa(e,t){return t=+t,function(){Hi(this,e).delay=t}}function pa(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?da:fa)(t,e)):Wi(this.node(),t).delay}function ma(e,t){return function(){Ui(this,e).duration=+t.apply(this,arguments)}}function ha(e,t){return t=+t,function(){Ui(this,e).duration=t}}function ga(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?ma:ha)(t,e)):Wi(this.node(),t).duration}function _a(e,t){if(typeof t!=`function`)throw Error();return function(){Ui(this,e).ease=t}}function va(e){var t=this._id;return arguments.length?this.each(_a(t,e)):Wi(this.node(),t).ease}function ya(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=`function`)throw Error();Ui(this,e).ease=n}}function ba(e){if(typeof e!=`function`)throw Error();return this.each(ya(this._id,e))}function xa(e){typeof e!=`function`&&(e=Ke(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new Xa(r,this._parents,this._name,this._id)}function Sa(e){if(e._id!==this._id)throw Error();for(var t=this._groups,n=e._groups,r=t.length,i=n.length,a=Math.min(r,i),o=Array(r),s=0;s<a;++s)for(var c=t[s],l=n[s],u=c.length,d=o[s]=Array(u),f,p=0;p<u;++p)(f=c[p]||l[p])&&(d[p]=f);for(;s<r;++s)o[s]=t[s];return new Xa(o,this._parents,this._name,this._id)}function Ca(e){return(e+``).trim().split(/^|\s+/).every(function(e){var t=e.indexOf(`.`);return t>=0&&(e=e.slice(0,t)),!e||e===`start`})}function wa(e,t,n){var r,i,a=Ca(t)?Hi:Ui;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function Ta(e,t){var n=this._id;return arguments.length<2?Wi(this.node(),n).on.on(e):this.each(wa(n,e,t))}function Ea(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Da(){return this.on(`end.remove`,Ea(this._id))}function Oa(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=ze(e));for(var r=this._groups,i=r.length,a=Array(i),o=0;o<i;++o)for(var s=r[o],c=s.length,l=a[o]=Array(c),u,d,f=0;f<c;++f)(u=s[f])&&(d=e.call(u,u.__data__,f,s))&&(`__data__`in u&&(d.__data__=u.__data__),l[f]=d,Vi(l[f],t,n,f,l,Wi(u,n)));return new Xa(a,this._parents,t,n)}function ka(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=Ue(e));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var c=r[s],l=c.length,u,d=0;d<l;++d)if(u=c[d]){for(var f=e.call(u,u.__data__,d,c),p,m=Wi(u,n),h=0,g=f.length;h<g;++h)(p=f[h])&&Vi(p,t,n,h,f,m);a.push(f),o.push(u)}return new Xa(a,o,t,n)}var Aa=An.prototype.constructor;function ja(){return new Aa(this._groups,this._parents)}function Ma(e,t){var n,r,i;return function(){var a=It(this,e),o=(this.style.removeProperty(e),It(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}function Na(e){return function(){this.style.removeProperty(e)}}function Pa(e,t,n){var r,i=n+``,a;return function(){var o=It(this,e);return o===i?null:o===r?a:a=t(r=o,n)}}function Fa(e,t,n){var r,i,a;return function(){var o=It(this,e),s=n(this),c=s+``;return s??(c=s=(this.style.removeProperty(e),It(this,e))),o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s))}}function Ia(e,t){var n,r,i,a=`style.`+t,o=`end.`+a,s;return function(){var c=Ui(this,e),l=c.on,u=c.value[a]==null?s||=Na(t):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(o,i=u),c.on=r}}function La(e,t,n){var r=(e+=``)==`transform`?ii:Qi;return t==null?this.styleTween(e,Ma(e,r)).on(`end.style.`+e,Na(e)):typeof t==`function`?this.styleTween(e,Fa(e,r,Zi(this,`style.`+e,t))).each(Ia(this._id,e)):this.styleTween(e,Pa(e,r,t),n).on(`end.style.`+e,null)}function Ra(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function za(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&Ra(e,a,n)),r}return a._value=t,a}function Ba(e,t,n){var r=`style.`+(e+=``);if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!=`function`)throw Error();return this.tween(r,za(e,t,n??``))}function Va(e){return function(){this.textContent=e}}function Ha(e){return function(){var t=e(this);this.textContent=t??``}}function Ua(e){return this.tween(`text`,typeof e==`function`?Ha(Zi(this,`text`,e)):Va(e==null?``:e+``))}function Wa(e){return function(t){this.textContent=e.call(this,t)}}function Ga(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&Wa(r)),t}return r._value=e,r}function Ka(e){var t=`text`;if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!=`function`)throw Error();return this.tween(t,Ga(e))}function qa(){for(var e=this._name,t=this._id,n=Za(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)if(c=o[l]){var u=Wi(c,t);Vi(c,e,n,l,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new Xa(r,this._parents,e,n)}function Ja(){var e,t,n=this,r=n._id,i=n.size();return new Promise(function(a,o){var s={value:o},c={value:function(){--i===0&&a()}};n.each(function(){var n=Ui(this,r),i=n.on;i!==e&&(t=(e=i).copy(),t._.cancel.push(s),t._.interrupt.push(s),t._.end.push(c)),n.on=t}),i===0&&a()})}var Ya=0;function Xa(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Za(){return++Ya}var Qa=An.prototype;Xa.prototype={constructor:Xa,select:Oa,selectAll:ka,selectChild:Qa.selectChild,selectChildren:Qa.selectChildren,filter:xa,merge:Sa,selection:ja,transition:qa,call:Qa.call,nodes:Qa.nodes,node:Qa.node,size:Qa.size,empty:Qa.empty,each:Qa.each,on:Ta,attr:aa,attrTween:ua,style:La,styleTween:Ba,text:Ua,textTween:Ka,remove:Da,tween:Xi,delay:pa,duration:ga,ease:va,easeVarying:ba,end:Ja,[Symbol.iterator]:Qa[Symbol.iterator]};function $a(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var eo={time:null,delay:0,duration:250,ease:$a};function to(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw Error(`transition ${t} not found`);return n}function no(e){var t,n;e instanceof Xa?(t=e._id,e=e._name):(t=Za(),(n=eo).time=Si(),e=e==null?null:e+``);for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&Vi(c,e,t,l,o,n||to(c,t));return new Xa(r,this._parents,e,t)}An.prototype.interrupt=qi,An.prototype.transition=no;var ro=e=>()=>e;function io(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function ao(e,t,n){this.k=e,this.x=t,this.y=n}ao.prototype={constructor:ao,scale:function(e){return e===1?this:new ao(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new ao(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return`translate(`+this.x+`,`+this.y+`) scale(`+this.k+`)`}};var oo=new ao(1,0,0);ao.prototype;function so(e){e.stopImmediatePropagation()}function co(e){e.preventDefault(),e.stopImmediatePropagation()}function lo(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function uo(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute(`viewBox`)?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function fo(){return this.__zoom||oo}function po(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function mo(){return navigator.maxTouchPoints||`ontouchstart`in this}function ho(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],a=e.invertY(t[0][1])-n[0][1],o=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function go(){var e=lo,t=uo,n=ho,r=po,i=mo,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=ui,l=De(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,fo).on(`wheel.zoom`,w,{passive:!1}).on(`mousedown.zoom`,T).on(`dblclick.zoom`,E).filter(i).on(`touchstart.zoom`,D).on(`touchmove.zoom`,O).on(`touchend.zoom touchcancel.zoom`,k).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}_.transform=function(e,t,n,r){var i=e.selection?e.selection():e;i.property(`__zoom`,fo),e===i?i.interrupt().each(function(){S(this,arguments).event(r).start().zoom(null,typeof t==`function`?t.apply(this,arguments):t).end()}):x(e,t,n,r)},_.scaleBy=function(e,t,n,r){_.scaleTo(e,function(){return this.__zoom.k*(typeof t==`function`?t.apply(this,arguments):t)},n,r)},_.scaleTo=function(e,r,i,a){_.transform(e,function(){var e=t.apply(this,arguments),a=this.__zoom,s=i==null?b(e):typeof i==`function`?i.apply(this,arguments):i,c=a.invert(s),l=typeof r==`function`?r.apply(this,arguments):r;return n(y(v(a,l),s,c),e,o)},i,a)},_.translateBy=function(e,r,i,a){_.transform(e,function(){return n(this.__zoom.translate(typeof r==`function`?r.apply(this,arguments):r,typeof i==`function`?i.apply(this,arguments):i),t.apply(this,arguments),o)},null,a)},_.translateTo=function(e,r,i,a,s){_.transform(e,function(){var e=t.apply(this,arguments),s=this.__zoom,c=a==null?b(e):typeof a==`function`?a.apply(this,arguments):a;return n(oo.translate(c[0],c[1]).scale(s.k).translate(typeof r==`function`?-r.apply(this,arguments):-r,typeof i==`function`?-i.apply(this,arguments):-i),e,o)},a,s)};function v(e,t){return t=Math.max(a[0],Math.min(a[1],t)),t===e.k?e:new ao(t,e.x,e.y)}function y(e,t,n){var r=t[0]-n[0]*e.k,i=t[1]-n[1]*e.k;return r===e.x&&i===e.y?e:new ao(e.k,r,i)}function b(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function x(e,n,r,i){e.on(`start.zoom`,function(){S(this,arguments).event(i).start()}).on(`interrupt.zoom end.zoom`,function(){S(this,arguments).event(i).end()}).tween(`zoom`,function(){var e=this,a=arguments,o=S(e,a).event(i),s=t.apply(e,a),l=r==null?b(s):typeof r==`function`?r.apply(e,a):r,u=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),d=e.__zoom,f=typeof n==`function`?n.apply(e,a):n,p=c(d.invert(l).concat(u/d.k),f.invert(l).concat(u/f.k));return function(e){if(e===1)e=f;else{var t=p(e),n=u/t[2];e=new ao(n,l[0]-t[0]*n,l[1]-t[1]*n)}o.zoom(null,e)}})}function S(e,t,n){return!n&&e.__zooming||new C(e,t)}function C(e,n){this.that=e,this.args=n,this.active=0,this.sourceEvent=null,this.extent=t.apply(e,n),this.taps=0}C.prototype={event:function(e){return e&&(this.sourceEvent=e),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit(`start`)),this},zoom:function(e,t){return this.mouse&&e!==`mouse`&&(this.mouse[1]=t.invert(this.mouse[0])),this.touch0&&e!==`touch`&&(this.touch0[1]=t.invert(this.touch0[0])),this.touch1&&e!==`touch`&&(this.touch1[1]=t.invert(this.touch1[0])),this.that.__zoom=t,this.emit(`zoom`),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit(`end`)),this},emit:function(e){var t=Mn(this.that).datum();l.call(e,this.that,new io(e,{sourceEvent:this.sourceEvent,target:_,type:e,transform:this.that.__zoom,dispatch:l}),t)}};function w(t,...i){if(!e.apply(this,arguments))return;var s=S(this,i).event(t),c=this.__zoom,l=Math.max(a[0],Math.min(a[1],c.k*2**r.apply(this,arguments))),u=Pn(t);if(s.wheel)(s.mouse[0][0]!==u[0]||s.mouse[0][1]!==u[1])&&(s.mouse[1]=c.invert(s.mouse[0]=u)),clearTimeout(s.wheel);else if(c.k===l)return;else s.mouse=[u,c.invert(u)],Ki(this),s.start();co(t),s.wheel=setTimeout(d,m),s.zoom(`mouse`,n(y(v(c,l),s.mouse[0],s.mouse[1]),s.extent,o));function d(){s.wheel=null,s.end()}}function T(t,...r){if(f||!e.apply(this,arguments))return;var i=t.currentTarget,a=S(this,r,!0).event(t),s=Mn(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=Pn(t,i),l=t.clientX,u=t.clientY;zn(t.view),so(t),a.mouse=[c,this.__zoom.invert(c)],Ki(this),a.start();function d(e){if(co(e),!a.moved){var t=e.clientX-l,r=e.clientY-u;a.moved=t*t+r*r>h}a.event(e).zoom(`mouse`,n(y(a.that.__zoom,a.mouse[0]=Pn(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),Bn(e.view,a.moved),co(e),a.event(e).end()}}function E(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=Pn(r.changedTouches?r.changedTouches[0]:r,this),l=a.invert(c),u=a.k*(r.shiftKey?.5:2),d=n(y(v(a,u),c,l),t.apply(this,i),o);co(r),s>0?Mn(this).transition().duration(s).call(x,d,c,r):Mn(this).call(_.transform,d,c,r)}}function D(t,...n){if(e.apply(this,arguments)){var r=t.touches,i=r.length,a=S(this,n,t.changedTouches.length===i).event(t),o,s,c,l;for(so(t),s=0;s<i;++s)c=r[s],l=Pn(c,this),l=[l,this.__zoom.invert(l),c.identifier],a.touch0?!a.touch1&&a.touch0[2]!==l[2]&&(a.touch1=l,a.taps=0):(a.touch0=l,o=!0,a.taps=1+!!u);u&&=clearTimeout(u),o&&(a.taps<2&&(d=l[0],u=setTimeout(function(){u=null},p)),Ki(this),a.start())}}function O(e,...t){if(this.__zooming){var r=S(this,t).event(e),i=e.changedTouches,a=i.length,s,c,l,u;for(co(e),s=0;s<a;++s)c=i[s],l=Pn(c,this),r.touch0&&r.touch0[2]===c.identifier?r.touch0[0]=l:r.touch1&&r.touch1[2]===c.identifier&&(r.touch1[0]=l);if(c=r.that.__zoom,r.touch1){var d=r.touch0[0],f=r.touch0[1],p=r.touch1[0],m=r.touch1[1],h=(h=p[0]-d[0])*h+(h=p[1]-d[1])*h,g=(g=m[0]-f[0])*g+(g=m[1]-f[1])*g;c=v(c,Math.sqrt(h/g)),l=[(d[0]+p[0])/2,(d[1]+p[1])/2],u=[(f[0]+m[0])/2,(f[1]+m[1])/2]}else if(r.touch0)l=r.touch0[0],u=r.touch0[1];else return;r.zoom(`touch`,n(y(c,l,u),r.extent,o))}}function k(e,...t){if(this.__zooming){var n=S(this,t).event(e),r=e.changedTouches,i=r.length,a,o;for(so(e),f&&clearTimeout(f),f=setTimeout(function(){f=null},p),a=0;a<i;++a)o=r[a],n.touch0&&n.touch0[2]===o.identifier?delete n.touch0:n.touch1&&n.touch1[2]===o.identifier&&delete n.touch1;if(n.touch1&&!n.touch0&&(n.touch0=n.touch1,delete n.touch1),n.touch0)n.touch0[1]=this.__zoom.invert(n.touch0[0]);else if(n.end(),n.taps===2&&(o=Pn(o,this),Math.hypot(d[0]-o[0],d[1]-o[1])<g)){var s=Mn(this).on(`dblclick.zoom`);s&&s.apply(this,arguments)}}}return _.wheelDelta=function(e){return arguments.length?(r=typeof e==`function`?e:ro(+e),_):r},_.filter=function(t){return arguments.length?(e=typeof t==`function`?t:ro(!!t),_):e},_.touchable=function(e){return arguments.length?(i=typeof e==`function`?e:ro(!!e),_):i},_.extent=function(e){return arguments.length?(t=typeof e==`function`?e:ro([[+e[0][0],+e[0][1]],[+e[1][0],+e[1][1]]]),_):t},_.scaleExtent=function(e){return arguments.length?(a[0]=+e[0],a[1]=+e[1],_):[a[0],a[1]]},_.translateExtent=function(e){return arguments.length?(o[0][0]=+e[0][0],o[1][0]=+e[1][0],o[0][1]=+e[0][1],o[1][1]=+e[1][1],_):[[o[0][0],o[0][1]],[o[1][0],o[1][1]]]},_.constrain=function(e){return arguments.length?(n=e,_):n},_.duration=function(e){return arguments.length?(s=+e,_):s},_.interpolate=function(e){return arguments.length?(c=e,_):c},_.on=function(){var e=l.on.apply(l,arguments);return e===l?_:e},_.clickDistance=function(e){return arguments.length?(h=(e=+e)*e,_):Math.sqrt(h)},_.tapDistance=function(e){return arguments.length?(g=+e,_):g},_}var Y=(e=>(e.Left=`left`,e.Top=`top`,e.Right=`right`,e.Bottom=`bottom`,e))(Y||{}),_o=(e=>(e.Partial=`partial`,e.Full=`full`,e))(_o||{}),vo=(e=>(e.Bezier=`default`,e.SimpleBezier=`simple-bezier`,e.Straight=`straight`,e.Step=`step`,e.SmoothStep=`smoothstep`,e))(vo||{}),yo=(e=>(e.Strict=`strict`,e.Loose=`loose`,e))(yo||{}),bo=(e=>(e.Arrow=`arrow`,e.ArrowClosed=`arrowclosed`,e))(bo||{}),xo=(e=>(e.Free=`free`,e.Vertical=`vertical`,e.Horizontal=`horizontal`,e))(xo||{}),So=(e=>(e.TopLeft=`top-left`,e.TopCenter=`top-center`,e.TopRight=`top-right`,e.BottomLeft=`bottom-left`,e.BottomCenter=`bottom-center`,e.BottomRight=`bottom-right`,e))(So||{}),Co=[`INPUT`,`SELECT`,`TEXTAREA`],wo=typeof document<`u`?document:null;function To(e){let t=e.composedPath?.call(e)?.[0]||e.target,n=typeof t?.hasAttribute==`function`&&t.hasAttribute(`contenteditable`),r=typeof t?.closest==`function`?t.closest(`.nokey`):null;return Co.includes(t?.nodeName)||n||!!r}function Eo(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function Do(e,t,n,r){let i=t.replace(`+`,`
|
|
2
2
|
`).replace(`
|
|
3
3
|
|
|
4
4
|
`,`
|
package/src/ui/public/index.html
CHANGED
|
@@ -10,27 +10,27 @@
|
|
|
10
10
|
<meta name="theme-color" content="#141820" media="(prefers-color-scheme: dark)" />
|
|
11
11
|
<title>Zen GitSync</title>
|
|
12
12
|
<!-- 字体改为自托管(@font-face 见 src/main.css),不再依赖 Google Fonts 外链 -->
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-CKxygqdx.js"></script>
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/element-plus-
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/monaco-
|
|
17
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-
|
|
18
|
-
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-
|
|
19
|
-
<link rel="modulepreload" crossorigin href="/assets/SvgIcon-
|
|
20
|
-
<link rel="modulepreload" crossorigin href="/assets/IconButton-
|
|
21
|
-
<link rel="modulepreload" crossorigin href="/assets/configStore-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/element-plus-D0R8BMj4.js">
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/monaco-DkJuNcCr.js">
|
|
17
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-CCrjQw5C.js">
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-BKeZSroN.js">
|
|
19
|
+
<link rel="modulepreload" crossorigin href="/assets/SvgIcon-Dk7WnZLB.js">
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/IconButton-Dl1cdP_x.js">
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/configStore-fJaic3kE.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/socket-io-BFqQXqAp.js">
|
|
23
|
-
<link rel="modulepreload" crossorigin href="/assets/gitStore-
|
|
23
|
+
<link rel="modulepreload" crossorigin href="/assets/gitStore-D9oF5nof.js">
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/fileIcon-B5p5pGN9.js">
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/flow-mindmap-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/previewSandbox-
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/useThemeObserver-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/CommonDialog-
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/FileDiffViewer-
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/toolsStore-
|
|
31
|
-
<link rel="modulepreload" crossorigin href="/assets/TemplateManager-
|
|
32
|
-
<link rel="modulepreload" crossorigin href="/assets/vue-flow-
|
|
33
|
-
<link rel="stylesheet" crossorigin href="/assets/element-plus-
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/flow-mindmap-Doi70WWn.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/previewSandbox-21uStCdd.js">
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/useThemeObserver-BvSA7RDh.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/CommonDialog-DpFTO5cg.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/FileDiffViewer-DXJO-G55.js">
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/toolsStore-C89takm3.js">
|
|
31
|
+
<link rel="modulepreload" crossorigin href="/assets/TemplateManager-B3ZNTXnP.js">
|
|
32
|
+
<link rel="modulepreload" crossorigin href="/assets/vue-flow-5Aq2bwoG.js">
|
|
33
|
+
<link rel="stylesheet" crossorigin href="/assets/element-plus-Qexo5hiM.css">
|
|
34
34
|
<link rel="stylesheet" crossorigin href="/assets/monaco-B2lPvkrc.css">
|
|
35
35
|
<link rel="stylesheet" crossorigin href="/assets/vendor-Bwl4dT-P.css">
|
|
36
36
|
<link rel="stylesheet" crossorigin href="/assets/SvgIcon-CDNsk4-Q.css">
|
|
@@ -791,12 +791,19 @@ export function registerFsRoutes({
|
|
|
791
791
|
const resolved = safe.safePath;
|
|
792
792
|
const stat = await fs.stat(resolved);
|
|
793
793
|
if (!stat.isFile()) throw new HttpError(400, '目标不是文件');
|
|
794
|
+
// meta=1:只回答"盘上这份还是不是客户端手上那份",不回正文。
|
|
795
|
+
// 文件空间在窗口重新聚焦 / 切标签 / 切回本视图时用它做一次廉价比对 ——
|
|
796
|
+
// 一个 stat 就够,不必每个来回都重读整个文件(大文件尤其明显)。
|
|
797
|
+
if (req.query.meta === '1') {
|
|
798
|
+
return res.json({ success: true, mtimeMs: stat.mtimeMs, size: stat.size });
|
|
799
|
+
}
|
|
794
800
|
// 超过 2MB 不读取
|
|
795
801
|
if (stat.size > 2 * 1024 * 1024) {
|
|
796
802
|
return res.json({ success: false, error: '文件过大(> 2 MB),暂不支持在线编辑' });
|
|
797
803
|
}
|
|
798
804
|
const content = await fs.readFile(resolved, 'utf-8');
|
|
799
|
-
|
|
805
|
+
// mtimeMs 随正文一起给:客户端拿它当"我手上这份对应盘上哪个版本"的基线
|
|
806
|
+
res.json({ success: true, content, mtimeMs: stat.mtimeMs });
|
|
800
807
|
} catch (error) {
|
|
801
808
|
res.status(500).json({ success: false, error: error.message });
|
|
802
809
|
}
|
|
@@ -915,7 +922,10 @@ export function registerFsRoutes({
|
|
|
915
922
|
const safe = await safePathInProject(filePath);
|
|
916
923
|
if (!safe) throw new HttpError(403, '禁止写入工作目录以外的文件');
|
|
917
924
|
await fs.writeFile(safe.safePath, content, 'utf-8');
|
|
918
|
-
|
|
925
|
+
// 回写后的 mtime 一并返回:客户端据此推进自己那份比对基线。
|
|
926
|
+
// 不给的话,下一次聚焦同步会把"自己刚保存的这一笔"误判成外部改动而重载一遍。
|
|
927
|
+
const after = await fs.stat(safe.safePath);
|
|
928
|
+
res.json({ success: true, mtimeMs: after.mtimeMs });
|
|
919
929
|
} catch (error) {
|
|
920
930
|
res.status(500).json({ success: false, error: error.message });
|
|
921
931
|
}
|
|
@@ -40,8 +40,9 @@
|
|
|
40
40
|
import path from 'node:path';
|
|
41
41
|
import os from 'node:os';
|
|
42
42
|
import { promises as fs } from 'node:fs';
|
|
43
|
-
import { execFile } from 'node:child_process';
|
|
43
|
+
import { execFile, spawn } from 'node:child_process';
|
|
44
44
|
import { promisify } from 'node:util';
|
|
45
|
+
import open from 'open';
|
|
45
46
|
import { asyncRoute, HttpError } from '../../utils/asyncRoute.js';
|
|
46
47
|
import { AI_SKILLS_DIR, AI_MCP_FILE } from '../../../../paths.js';
|
|
47
48
|
|
|
@@ -737,13 +738,77 @@ function npmBinary() {
|
|
|
737
738
|
return process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
738
739
|
}
|
|
739
740
|
|
|
741
|
+
/**
|
|
742
|
+
* 扫描 root 下两层内所有含 SKILL.md 的目录。
|
|
743
|
+
* 集合型仓库很常见(一个仓库十几二十个 skill),必须把全部候选都收上来再挑,
|
|
744
|
+
* 不能像以前那样"按目录顺序撞见第一个就用"。
|
|
745
|
+
*
|
|
746
|
+
* @returns {Promise<Array<{ dir: string, rel: string }>>} rel 用 / 分隔,仓库根为 ''
|
|
747
|
+
*/
|
|
748
|
+
async function collectSkillDirs(root) {
|
|
749
|
+
const found = [];
|
|
750
|
+
async function walk(dir, rel, depth) {
|
|
751
|
+
if (await exists(path.join(dir, 'SKILL.md'))) found.push({ dir, rel });
|
|
752
|
+
if (depth >= 2) return;
|
|
753
|
+
const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
754
|
+
for (const entry of entries) {
|
|
755
|
+
// 跳过 .git 与 .claude-plugin 这类点目录:它们不是 skill 本体
|
|
756
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) continue;
|
|
757
|
+
await walk(path.join(dir, entry.name), rel ? `${rel}/${entry.name}` : entry.name, depth + 1);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
await walk(root, '', 0);
|
|
761
|
+
return found;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
/** 目录名归一化:大小写、空格、下划线都抹平,`Taste Skill` 与 `taste-skill` 应当能对上。 */
|
|
765
|
+
function normalizeSkillName(value) {
|
|
766
|
+
return String(value || '').trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/**
|
|
770
|
+
* 从候选目录里挑出"用户点的那个 skill"。
|
|
771
|
+
*
|
|
772
|
+
* 为什么不能直接取第一个:仓库 `Leonxlnx/taste-skill` 的 `skills/` 下有十几个 skill,
|
|
773
|
+
* 目录顺序第一个是 `brandkit`。旧逻辑会把 brandkit 装进去,而卡片的 id 仍然记成
|
|
774
|
+
* `github-Leonxlnx-taste-skill` —— 于是广场卡片显示"已安装",已安装列表里却是
|
|
775
|
+
* `brandkit` 这个名字,用户根本对不上,只能怀疑"是不是没装成功"。
|
|
776
|
+
*
|
|
777
|
+
* @returns {{ dir: string, rel: string } | null} null = 挑不出来(并列歧义),交给调用方报错
|
|
778
|
+
*/
|
|
779
|
+
function pickSkillDir(candidates, { subpath = '', skillName = '' } = {}) {
|
|
780
|
+
if (!candidates.length) return null;
|
|
781
|
+
const wantSub = String(subpath || '').replace(/^\.\//, '').replace(/\/+$/, '').toLowerCase();
|
|
782
|
+
const wantName = normalizeSkillName(skillName);
|
|
783
|
+
|
|
784
|
+
const rank = ({ rel }) => {
|
|
785
|
+
const norm = String(rel).toLowerCase();
|
|
786
|
+
const base = normalizeSkillName(norm.split('/').pop());
|
|
787
|
+
if (wantSub && norm === wantSub) return 0; // 条目自己给的就是这个子目录
|
|
788
|
+
if (wantName && base === wantName) return 1; // 目录名就是用户点的名字
|
|
789
|
+
if (!rel) return 2; // 仓库根就是一份 SKILL.md
|
|
790
|
+
// 名字沾边(如 taste-skill-v1 / taste-skill)。必须卡在 - 边界上:
|
|
791
|
+
// 用裸 includes 的话,目录 `a` 会被判成 `whatever` 的变体,短名一律乱匹配。
|
|
792
|
+
if (wantName && base && (
|
|
793
|
+
base.startsWith(`${wantName}-`) || base.endsWith(`-${wantName}`)
|
|
794
|
+
|| wantName.startsWith(`${base}-`) || wantName.endsWith(`-${base}`)
|
|
795
|
+
)) return 3;
|
|
796
|
+
return 4;
|
|
797
|
+
};
|
|
798
|
+
|
|
799
|
+
const ranked = candidates.map(item => ({ ...item, rank: rank(item) })).sort((a, b) => a.rank - b.rank);
|
|
800
|
+
// 首选并列 → 宁可报错让用户自己说清是哪一个,也不要悄悄装错
|
|
801
|
+
if (ranked.length > 1 && ranked[1].rank === ranked[0].rank) return null;
|
|
802
|
+
return ranked[0];
|
|
803
|
+
}
|
|
804
|
+
|
|
740
805
|
/**
|
|
741
806
|
* 只拉取仓库里的某个子目录。
|
|
742
807
|
* 用 --filter=blob:none --sparse 是为了对付 monorepo ——
|
|
743
808
|
* 直接 --depth 1 全量克隆一个几万文件的仓库只为拿一个 skill 太浪费。
|
|
744
809
|
* sparse 不被支持(旧版 git / 服务端限制)时回落到普通浅克隆。
|
|
745
810
|
*/
|
|
746
|
-
async function cloneSubdirectory({ repository, subpath, dest }) {
|
|
811
|
+
async function cloneSubdirectory({ repository, subpath, dest, skillName = '' }) {
|
|
747
812
|
const temp = await fs.mkdtemp(path.join(os.tmpdir(), 'zen-gitsync-skill-'));
|
|
748
813
|
const url = `https://github.com/${repository}.git`;
|
|
749
814
|
try {
|
|
@@ -767,29 +832,17 @@ async function cloneSubdirectory({ repository, subpath, dest }) {
|
|
|
767
832
|
await execFileAsync(gitBinary(), ['clone', '--depth', '1', url, temp], { timeout: CLONE_TIMEOUT_MS, windowsHide: true });
|
|
768
833
|
}
|
|
769
834
|
|
|
770
|
-
const
|
|
771
|
-
const
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
835
|
+
const candidates = await collectSkillDirs(temp);
|
|
836
|
+
const picked = pickSkillDir(candidates, { subpath, skillName });
|
|
837
|
+
if (!picked) {
|
|
838
|
+
if (!candidates.length) throw new HttpError(422, `仓库 ${repository} 里没有找到 SKILL.md`);
|
|
839
|
+
const names = candidates.slice(0, 8).map(item => item.rel || '仓库根').join('、');
|
|
840
|
+
const more = candidates.length > 8 ? ` 等 ${candidates.length} 个` : '';
|
|
841
|
+
throw new HttpError(422, `仓库 ${repository} 里有多个 skill,且没有一个跟「${skillName || repository}」对得上(${names}${more}),请从具体子目录再装`);
|
|
775
842
|
}
|
|
776
|
-
// 再退一步:找仓库里任意一层含 SKILL.md 的目录(只扫两层,避免在 monorepo 里乱窜)
|
|
777
|
-
if (!source) {
|
|
778
|
-
const top = await fs.readdir(temp, { withFileTypes: true }).catch(() => []);
|
|
779
|
-
for (const dir of top.filter(entry => entry.isDirectory() && entry.name !== '.git')) {
|
|
780
|
-
if (await exists(path.join(temp, dir.name, 'SKILL.md'))) { source = path.join(temp, dir.name); break; }
|
|
781
|
-
const inner = await fs.readdir(path.join(temp, dir.name), { withFileTypes: true }).catch(() => []);
|
|
782
|
-
let hit = null;
|
|
783
|
-
for (const sub of inner.filter(entry => entry.isDirectory())) {
|
|
784
|
-
if (await exists(path.join(temp, dir.name, sub.name, 'SKILL.md'))) { hit = path.join(temp, dir.name, sub.name); break; }
|
|
785
|
-
}
|
|
786
|
-
if (hit) { source = hit; break; }
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
if (!source) throw new HttpError(422, `仓库 ${repository} 里没有找到 SKILL.md`);
|
|
790
843
|
|
|
791
844
|
await fs.mkdir(path.dirname(dest), { recursive: true });
|
|
792
|
-
await fs.cp(
|
|
845
|
+
await fs.cp(picked.dir, dest, { recursive: true, force: false });
|
|
793
846
|
} finally {
|
|
794
847
|
await fs.rm(temp, { recursive: true, force: true }).catch(() => {});
|
|
795
848
|
}
|
|
@@ -806,7 +859,7 @@ async function installSkill({ item, target, cwd }) {
|
|
|
806
859
|
const repository = String(item.repository || '').trim().replace(/^https?:\/\/github\.com\//i, '').replace(/\.git$/, '');
|
|
807
860
|
if (repository && SAFE_REPOSITORY.test(repository)) {
|
|
808
861
|
const subpath = item.subpath && isSafeSubpath(item.subpath) ? String(item.subpath) : '';
|
|
809
|
-
await cloneSubdirectory({ repository, subpath, dest });
|
|
862
|
+
await cloneSubdirectory({ repository, subpath, dest, skillName: String(item.name || id) });
|
|
810
863
|
return { id, type: 'skill', name: item.name || id, target, dir: dest, source: repository };
|
|
811
864
|
}
|
|
812
865
|
|
|
@@ -893,6 +946,29 @@ async function installMcp({ item, target, cwd }) {
|
|
|
893
946
|
return { id, type: 'mcp', name: item.name || id, target, file: paths.file, envKeys: missingEnv, warning: installWarning };
|
|
894
947
|
}
|
|
895
948
|
|
|
949
|
+
/**
|
|
950
|
+
* 在系统文件管理器里定位一个已安装项:
|
|
951
|
+
* 目录 → 直接打开;文件(如 .mcp.json)→ 在其中选中它。
|
|
952
|
+
* Linux 没有"选中文件"的标准接口,退化为打开所在目录。
|
|
953
|
+
* 与 /api/editor/reveal 同一套行为,只是那个接口只认工作目录以内的路径,
|
|
954
|
+
* 这里要能定位 ~/.zen-gitsync/ai 下的全局安装项。
|
|
955
|
+
*/
|
|
956
|
+
async function revealInFileManager(resolved) {
|
|
957
|
+
const stat = await fs.stat(resolved);
|
|
958
|
+
if (stat.isDirectory()) {
|
|
959
|
+
await open(resolved, { wait: false });
|
|
960
|
+
return;
|
|
961
|
+
}
|
|
962
|
+
if (process.platform === 'win32') {
|
|
963
|
+
// explorer.exe /select,<path>(逗号分隔,无双引号,argv 数组防二次解释)
|
|
964
|
+
spawn('explorer.exe', ['/select,', resolved], { detached: true, stdio: 'ignore' }).unref();
|
|
965
|
+
} else if (process.platform === 'darwin') {
|
|
966
|
+
spawn('open', ['-R', resolved], { detached: true, stdio: 'ignore' }).unref();
|
|
967
|
+
} else {
|
|
968
|
+
await open(path.dirname(resolved), { wait: false });
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
|
|
896
972
|
async function uninstall({ type, id, target, cwd }) {
|
|
897
973
|
if (!SAFE_ID.test(id)) throw new HttpError(400, '参数不合法');
|
|
898
974
|
const paths = targetPaths({ type, target, cwd });
|
|
@@ -987,6 +1063,33 @@ export function registerAgentMarketplaceRoutes({ app, getCurrentProjectPath }) {
|
|
|
987
1063
|
res.json({ success: true, target, cwd, item: installed });
|
|
988
1064
|
}));
|
|
989
1065
|
|
|
1066
|
+
// 在文件管理器里定位已安装项。路径由服务端用同一份 targetPaths 推导,
|
|
1067
|
+
// 前端只传 id —— 不接收任意路径,天然不给出路径穿越的口子。
|
|
1068
|
+
app.post('/api/agent/marketplace/reveal', asyncRoute(async (req, res) => {
|
|
1069
|
+
const type = normalizeType(req.body?.type);
|
|
1070
|
+
if (!type) throw new HttpError(400, '未知扩展类型');
|
|
1071
|
+
const target = normalizeTarget(req.body?.target);
|
|
1072
|
+
const cwd = resolveProjectPath(req.body?.cwd, getCurrentProjectPath?.());
|
|
1073
|
+
const id = String(req.body?.id || '');
|
|
1074
|
+
if (type === 'skill' && !SAFE_ID.test(id)) throw new HttpError(400, '参数不合法');
|
|
1075
|
+
if (type === 'mcp' && id && !SAFE_ID.test(id)) throw new HttpError(400, '参数不合法');
|
|
1076
|
+
|
|
1077
|
+
const paths = targetPaths({ type, target, cwd });
|
|
1078
|
+
let resolved;
|
|
1079
|
+
if (type === 'skill') {
|
|
1080
|
+
const root = path.resolve(paths.root);
|
|
1081
|
+
resolved = path.resolve(root, id);
|
|
1082
|
+
if (!resolved.startsWith(`${root}${path.sep}`)) throw new HttpError(400, '路径不合法');
|
|
1083
|
+
} else {
|
|
1084
|
+
// MCP 没有独立目录,定位到配置文件本身(在其中选中)
|
|
1085
|
+
resolved = path.resolve(paths.file);
|
|
1086
|
+
}
|
|
1087
|
+
if (!(await exists(resolved))) throw new HttpError(404, '目标不存在');
|
|
1088
|
+
|
|
1089
|
+
await revealInFileManager(resolved);
|
|
1090
|
+
res.json({ success: true, type, target, path: resolved });
|
|
1091
|
+
}));
|
|
1092
|
+
|
|
990
1093
|
app.delete('/api/agent/marketplace/item/:type/:id', asyncRoute(async (req, res) => {
|
|
991
1094
|
const type = normalizeType(req.params.type);
|
|
992
1095
|
if (!type) throw new HttpError(400, '未知扩展类型');
|
|
@@ -998,3 +1101,7 @@ export function registerAgentMarketplaceRoutes({ app, getCurrentProjectPath }) {
|
|
|
998
1101
|
res.json({ success: true, ...result });
|
|
999
1102
|
}));
|
|
1000
1103
|
}
|
|
1104
|
+
|
|
1105
|
+
// 给回归测试用:集合型仓库"装哪一个"的挑选逻辑必须能被单独钉住
|
|
1106
|
+
// (真跑一遍 git clone 要联网,测试里不现实)
|
|
1107
|
+
export { pickSkillDir, collectSkillDirs };
|