zen-gitsync 2.17.13 → 2.17.15
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 +211 -185
- package/package.json +2 -2
- package/scripts/release.js +33 -16
- package/src/cli/ai/tools.js +62 -13
- package/src/cli/ai/tools.test.js +35 -1
- package/src/config.js +4 -0
- package/src/gitCommit.js +18 -1
- package/src/ui/public/assets/AgentView-Bz9LFamz.js +5 -0
- package/src/ui/public/assets/{AppVersionBadge-QszUpjxK.js → AppVersionBadge-D5iXcAEV.js} +2 -2
- package/src/ui/public/assets/{BranchSelector-C_j7ayIX.js → BranchSelector-DP4u1f_B.js} +1 -1
- package/src/ui/public/assets/{CommitForm-CH_YTHmd.js → CommitForm-boOw8uGS.js} +1 -1
- package/src/ui/public/assets/{CommonDialog-78tuotW4.js → CommonDialog-B_qUsIGr.js} +1 -1
- package/src/ui/public/assets/{EditorView-CGKjSpRs.js → EditorView-ZULtfIzl.js} +1 -1
- package/src/ui/public/assets/{FileDiffViewer-kQ3WnrlJ.js → FileDiffViewer-C4xxq5S0.js} +1 -1
- package/src/ui/public/assets/{FlowExecutionViewer-PtAICyWn.js → FlowExecutionViewer-BmfstdaT.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-tyQdIh0A.js → FlowOrchestrationWorkspace-28kErqrn.js} +1 -1
- package/src/ui/public/assets/{IconButton-CNMPSvnE.js → IconButton-DcOAqpq0.js} +1 -1
- package/src/ui/public/assets/{LogList-X739IWXT.js → LogList-FEP7EeJt.js} +2 -2
- package/src/ui/public/assets/MindmapView-8X6z245q.css +1 -0
- package/src/ui/public/assets/MindmapView-NDJvfSCn.js +2 -0
- package/src/ui/public/assets/{MonitorView-C_Jj5hEy.js → MonitorView-DU4aBCK0.js} +1 -1
- package/src/ui/public/assets/{ProjectStartupButton-wjBZWElK.js → ProjectStartupButton-JQk4Etsu.js} +1 -1
- package/src/ui/public/assets/{RemoteManagerDialog-DuS66D7T.js → RemoteManagerDialog-Di2WizMS.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-DgOTYE8p.js → RemoteRepoCard-DxB8Q8yE.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-wrchi7Si.js → SourceMapView-CfmrPMBm.js} +1 -1
- package/src/ui/public/assets/{SvgIcon-BwCRUb-C.js → SvgIcon-yefEMV0-.js} +1 -1
- package/src/ui/public/assets/{TemplateManager-B6pI5C4y.js → TemplateManager-CCy_WcSK.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-Di1kFO5g.js → UserInputNode-3Gv_9YZx.js} +1 -1
- package/src/ui/public/assets/{WorkbenchView-CI_sSeYY.js → WorkbenchView-Dgp6A83v.js} +5 -5
- package/src/ui/public/assets/_plugin-vue_export-helper-B1mHBne9.js +19 -0
- package/src/ui/public/assets/configStore-BDxel6Co.js +1 -0
- package/src/ui/public/assets/element-plus-Cwwq-Gje.css +1 -0
- package/src/ui/public/assets/{flow-mindmap-Dybg7aXu.js → flow-mindmap-BqFb1WO5.js} +1 -1
- package/src/ui/public/assets/gitStore-D5CWxPLv.js +6 -0
- package/src/ui/public/assets/index-CmbatbSR.css +1 -0
- package/src/ui/public/assets/index-gpuX9fhG.js +111 -0
- package/src/ui/public/assets/{office-docx-BZoGgigI.js → office-docx-CZXLkCf5.js} +1 -1
- package/src/ui/public/assets/{office-excel-CWXhvPQt.js → office-excel-CBKszjVA.js} +1 -1
- package/src/ui/public/assets/{office-pptx-Di9Tw3Lc.js → office-pptx-NeUSnN3k.js} +1 -1
- package/src/ui/public/assets/{previewSandbox-DMg4ngSx.js → previewSandbox-qLKxghfr.js} +0 -0
- package/src/ui/public/assets/{useThemeObserver-COR_mDL-.js → useThemeObserver-E7Hk50l3.js} +1 -1
- package/src/ui/public/assets/vendor-C5qX_I8r.css +1 -0
- package/src/ui/public/assets/{vendor-DP-rcIZp.js → vendor-IQQMq-1c.js} +20 -20
- package/src/ui/public/assets/{vue-flow-CLj74gJJ.js → vue-flow-fLUQ0_kE.js} +1 -1
- package/src/ui/public/index.html +18 -19
- package/src/ui/server/index.js +4 -0
- package/src/ui/server/routes/explorerContextMenu.js +208 -0
- package/src/ui/server/routes/explorerContextMenu.test.js +180 -0
- package/src/ui/server/routes/workbench/agentChat.js +11 -1
- package/src/ui/public/assets/AgentView-DHXZJLpl.js +0 -5
- package/src/ui/public/assets/MindmapView-BQTqx842.css +0 -1
- package/src/ui/public/assets/MindmapView-Ci2gttUI.js +0 -2
- package/src/ui/public/assets/_plugin-vue_export-helper-BsV3BiZm.js +0 -19
- package/src/ui/public/assets/configStore-Cubt3KDP.js +0 -1
- package/src/ui/public/assets/element-plus-VKM0Y6Ty.css +0 -1
- package/src/ui/public/assets/gitStore-J2f7bmAs.js +0 -4
- package/src/ui/public/assets/index-BZUAVMg6.css +0 -1
- package/src/ui/public/assets/index-ClPoUp9g.js +0 -102
- package/src/ui/public/assets/toolsStore-B2XGcQx-.js +0 -1
- package/src/ui/public/assets/vendor-4ojsjDYc.css +0 -1
- /package/src/ui/public/assets/{element-plus-CqvO58xa.js → element-plus-DxBPQwL7.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$n as e,$r as t,Bn 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,Kn as f,Ln as p,Mn as m,Nn as h,On as g,Pr as _,Qn as v,Sr as y,Tn as b,Tr as x,Un as S,Vn as C,Xn as w,Yn as T,Yr as E,Zn as D,_r as O,ar as k,bn as A,br as j,dr as M,er as N,fr as P,gr as F,hr as I,ir as L,kn as R,lr as z,mr as B,nr as V,or as H,qr as ee,sr as U,tr as W,ur as te,vr as ne,wn as G,wr as K,yr as q,zn as re}from"./element-plus-CqvO58xa.js";P(),re(),_();function ie(e){return M()?(F(e),!0):!1}function ae(e){return typeof e==`function`?e():x(e)}var oe=typeof window<`u`&&typeof document<`u`,se=e=>e!==void 0,ce=Object.prototype.toString,le=e=>ce.call(e)===`[object Object]`,ue=()=>{};function de(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 fe=e=>e();function pe(e=fe){let t=q(!0);function n(){t.value=!1}function r(){t.value=!0}return{isActive:ne(t),pause:n,resume:r,eventFilter:(...n)=>{t.value&&e(...n)}}}function me(e,t=!1,n=`Timeout`){return new Promise((r,i)=>{setTimeout(t?()=>i(n):r,e)})}function he(e,t,n={}){let{eventFilter:r=fe,...i}=n;return k(e,de(r,t),i)}function ge(e,t,n={}){let{eventFilter:r,...i}=n,{eventFilter:a,pause:o,resume:s,isActive:c}=pe(r);return{stop:he(e,t,{...i,eventFilter:a}),pause:o,resume:s,isActive:c}}function _e(e,t={}){if(!B(e))return r(e);let n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(let r in e.value)n[r]=z(()=>({get(){return e.value[r]},set(n){if(ae(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 ve(e,t=!1){function n(n,{flush:r=`sync`,deep:i=!1,timeout:a,throwOnTimeout:o}={}){let s=null,c=[new Promise(a=>{s=k(e,e=>{n(e)!==t&&(s?.(),a(e))},{flush:r,deep:i,immediate:!0})})];return a!=null&&c.push(me(a,o).then(()=>ae(e)).finally(()=>s?.())),Promise.race(c)}function r(r,i){if(!B(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=k([e,r],([e,r])=>{t!==(e===r)&&(l?.(),n(e))},{flush:a,deep:o,immediate:!0})})];return s!=null&&u.push(me(s,c).then(()=>ae(e)).finally(()=>(l?.(),ae(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(ae(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(ae(e))?{toMatch:n,toContains:c,changed:l,changedTimes:u,get not(){return ve(e,!t)}}:{toMatch:n,toBe:r,toBeTruthy:i,toBeNull:a,toBeNaN:s,toBeUndefined:o,changed:l,changedTimes:u,get not(){return ve(e,!t)}}}function ye(e){return ve(e)}function be(e){let t=ae(e);return t?.$el??t}var xe=oe?window:void 0;function Se(...e){let t,n,r,i;if(typeof e[0]==`string`||Array.isArray(e[0])?([n,r,i]=e,t=xe):[t,n,r,i]=e,!t)return ue;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=k(()=>[be(t),ae(i)],([e,t])=>{if(o(),!e)return;let i=le(t)?{...t}:t;a.push(...n.flatMap(t=>r.map(n=>s(e,t,n,i))))},{immediate:!0,flush:`post`}),l=()=>{c(),o()};return ie(l),l}function Ce(e){return typeof e==`function`?e:typeof e==`string`?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function we(...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=xe,eventName:a=`keydown`,passive:o=!1,dedupe:s=!1}=r,c=Ce(t);return Se(i,a,e=>{e.repeat&&ae(s)||c(e)&&n(e)},o)}function Te(e){return JSON.parse(JSON.stringify(e))}function Ee(e,t,n,r={}){let{clone:i=!1,passive:a=!1,eventName:o,deep:s=!1,defaultValue:c,shouldEmit:u}=r,d=l(),f=n||d?.emit||(d?.$emit)?.bind(d)||(d?.proxy?.$emit)?.bind(d?.proxy),p=o;t||=`modelValue`,p||=`update:${t.toString()}`;let m=e=>i?typeof i==`function`?i(e):Te(e):e,h=()=>se(e[t])?m(e[t]):c,g=e=>{u?u(e)&&f(p,e):f(p,e)};if(a){let n=h(),r=q(n),i=!1;return k(()=>e[t],e=>{i||(i=!0,r.value=m(e),S(()=>i=!1))}),k(r,n=>{!i&&(n!==e[t]||s)&&g(n)},{deep:s}),r}return G({get(){return h()},set(e){g(e)}})}var De={value:()=>{}};function Oe(){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 ke(n)}function ke(e){this._=e}function Ae(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}})}ke.prototype=Oe.prototype={constructor:ke,on:function(e,t){var n=this._,r=Ae(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a<o;)if((i=(e=r[a]).type)&&(i=je(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]=Me(n[i],e.name,t);else if(t==null)for(i in n)n[i]=Me(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 ke(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 je(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function Me(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=De,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var Ne=`http://www.w3.org/1999/xhtml`,Pe={svg:`http://www.w3.org/2000/svg`,xhtml:Ne,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function Fe(e){var t=e+=``,n=t.indexOf(`:`);return n>=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),Pe.hasOwnProperty(t)?{space:Pe[t],local:e}:e}function Ie(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Ne&&t.documentElement.namespaceURI===Ne?t.createElement(e):t.createElementNS(n,e)}}function Le(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Re(e){var t=Fe(e);return(t.local?Le:Ie)(t)}function ze(){}function Be(e){return e==null?ze:function(){return this.querySelector(e)}}function Ve(e){typeof e!=`function`&&(e=Be(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 An(r,this._parents)}function He(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function Ue(){return[]}function We(e){return e==null?Ue:function(){return this.querySelectorAll(e)}}function Ge(e){return function(){return He(e.apply(this,arguments))}}function Ke(e){e=typeof e==`function`?Ge(e):We(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 An(r,i)}function qe(e){return function(){return this.matches(e)}}function Je(e){return function(t){return t.matches(e)}}var Ye=Array.prototype.find;function Xe(e){return function(){return Ye.call(this.children,e)}}function Ze(){return this.firstElementChild}function Qe(e){return this.select(e==null?Ze:Xe(typeof e==`function`?e:Je(e)))}var $e=Array.prototype.filter;function et(){return Array.from(this.children)}function tt(e){return function(){return $e.call(this.children,e)}}function nt(e){return this.selectAll(e==null?et:tt(typeof e==`function`?e:Je(e)))}function rt(e){typeof e!=`function`&&(e=qe(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 An(r,this._parents)}function it(e){return Array(e.length)}function at(){return new An(this._enter||this._groups.map(it),this._parents)}function ot(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}ot.prototype={constructor:ot,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 st(e){return function(){return e}}function ct(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 ot(e,a[o]);for(;o<c;++o)(s=t[o])&&(i[o]=s)}function lt(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 ot(e,a[s]);for(s=0;s<u;++s)(c=t[s])&&l.get(f[s])===c&&(i[s]=c)}function ut(e){return e.__data__}function dt(e,t){if(!arguments.length)return Array.from(this,ut);var n=t?lt:ct,r=this._parents,i=this._groups;typeof e!=`function`&&(e=st(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=ft(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 An(o,r),o._enter=s,o._exit=c,o}function ft(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function pt(){return new An(this._exit||this._groups.map(it),this._parents)}function mt(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 ht(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 An(s,this._parents)}function gt(){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 _t(e){e||=vt;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 An(i,this._parents).order()}function vt(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function yt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function bt(){return Array.from(this)}function xt(){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 St(){let e=0;for(let t of this)++e;return e}function Ct(){return!this.node()}function wt(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 Tt(e){return function(){this.removeAttribute(e)}}function Et(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Dt(e,t){return function(){this.setAttribute(e,t)}}function Ot(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function kt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function At(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 jt(e,t){var n=Fe(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?Et:Tt:typeof t==`function`?n.local?At:kt:n.local?Ot:Dt)(n,t))}function Mt(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Nt(e){return function(){this.style.removeProperty(e)}}function Pt(e,t,n){return function(){this.style.setProperty(e,t,n)}}function Ft(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function It(e,t,n){return arguments.length>1?this.each((t==null?Nt:typeof t==`function`?Ft:Pt)(e,t,n??``)):Lt(this.node(),e)}function Lt(e,t){return e.style.getPropertyValue(t)||Mt(e).getComputedStyle(e,null).getPropertyValue(t)}function Rt(e){return function(){delete this[e]}}function zt(e,t){return function(){this[e]=t}}function Bt(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Vt(e,t){return arguments.length>1?this.each((t==null?Rt:typeof t==`function`?Bt:zt)(e,t)):this.node()[e]}function Ht(e){return e.trim().split(/^|\s+/)}function Ut(e){return e.classList||new Wt(e)}function Wt(e){this._node=e,this._names=Ht(e.getAttribute(`class`)||``)}Wt.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 Gt(e,t){for(var n=Ut(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function Kt(e,t){for(var n=Ut(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function qt(e){return function(){Gt(this,e)}}function Jt(e){return function(){Kt(this,e)}}function Yt(e,t){return function(){(t.apply(this,arguments)?Gt:Kt)(this,e)}}function Xt(e,t){var n=Ht(e+``);if(arguments.length<2){for(var r=Ut(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t==`function`?Yt:t?qt:Jt)(n,t))}function Zt(){this.textContent=``}function Qt(e){return function(){this.textContent=e}}function $t(e){return function(){var t=e.apply(this,arguments);this.textContent=t??``}}function en(e){return arguments.length?this.each(e==null?Zt:(typeof e==`function`?$t:Qt)(e)):this.node().textContent}function tn(){this.innerHTML=``}function nn(e){return function(){this.innerHTML=e}}function rn(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??``}}function an(e){return arguments.length?this.each(e==null?tn:(typeof e==`function`?rn:nn)(e)):this.node().innerHTML}function on(){this.nextSibling&&this.parentNode.appendChild(this)}function sn(){return this.each(on)}function cn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function ln(){return this.each(cn)}function un(e){var t=typeof e==`function`?e:Re(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function dn(){return null}function fn(e,t){var n=typeof e==`function`?e:Re(e),r=t==null?dn:typeof t==`function`?t:Be(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function pn(){var e=this.parentNode;e&&e.removeChild(this)}function mn(){return this.each(pn)}function hn(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function gn(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function _n(e){return this.select(e?gn:hn)}function vn(e){return arguments.length?this.property(`__data__`,e):this.node().__data__}function yn(e){return function(t){e.call(this,t,this.__data__)}}function bn(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 xn(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 Sn(e,t,n){return function(){var r=this.__on,i,a=yn(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 Cn(e,t,n){var r=bn(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?Sn:xn,i=0;i<a;++i)this.each(s(r[i],t,n));return this}function wn(e,t,n){var r=Mt(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 Tn(e,t){return function(){return wn(this,e,t)}}function En(e,t){return function(){return wn(this,e,t.apply(this,arguments))}}function Dn(e,t){return this.each((typeof t==`function`?En:Tn)(e,t))}function*On(){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 kn=[null];function An(e,t){this._groups=e,this._parents=t}function jn(){return new An([[document.documentElement]],kn)}function Mn(){return this}An.prototype=jn.prototype={constructor:An,select:Ve,selectAll:Ke,selectChild:Qe,selectChildren:nt,filter:rt,data:dt,enter:at,exit:pt,join:mt,merge:ht,selection:Mn,order:gt,sort:_t,call:yt,nodes:bt,node:xt,size:St,empty:Ct,each:wt,attr:jt,style:It,property:Vt,classed:Xt,text:en,html:an,raise:sn,lower:ln,append:un,insert:fn,remove:mn,clone:_n,datum:vn,on:Cn,dispatch:Dn,[Symbol.iterator]:On};function Nn(e){return typeof e==`string`?new An([[document.querySelector(e)]],[document.documentElement]):new An([[e]],kn)}function Pn(e){let t;for(;t=e.sourceEvent;)e=t;return e}function Fn(e,t){if(e=Pn(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 In={passive:!1},Ln={capture:!0,passive:!1};function Rn(e){e.stopImmediatePropagation()}function zn(e){e.preventDefault(),e.stopImmediatePropagation()}function Bn(e){var t=e.document.documentElement,n=Nn(e).on(`dragstart.drag`,zn,Ln);`onselectstart`in t?n.on(`selectstart.drag`,zn,Ln):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect=`none`)}function Vn(e,t){var n=e.document.documentElement,r=Nn(e).on(`dragstart.drag`,null);t&&(r.on(`click.drag`,zn,Ln),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 Hn=e=>()=>e;function Un(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}})}Un.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function Wn(e){return!e.ctrlKey&&!e.button}function Gn(){return this.parentNode}function Kn(e,t){return t??{x:e.x,y:e.y}}function qn(){return navigator.maxTouchPoints||`ontouchstart`in this}function Jn(){var e=Wn,t=Gn,n=Kn,r=qn,i={},a=Oe(`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`,_,In).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&&(Nn(n.view).on(`mousemove.drag`,m,Ln).on(`mouseup.drag`,h,Ln),Bn(n.view),Rn(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(zn(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){Nn(e.view).on(`mousemove.drag mouseup.drag`,null),Vn(e.view,l),zn(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]))&&(Rn(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])&&(zn(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])&&(Rn(e),a(`end`,e,t[r]))}function y(e,t,r,s,c,l){var u=a.copy(),d=Fn(l||r,t),p,m,h;if((h=n.call(e,new Un(`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=Fn(l||a,t),_=o}u.call(r,e,new Un(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:Hn(!!t),f):e},f.container=function(e){return arguments.length?(t=typeof e==`function`?e:Hn(e),f):t},f.subject=function(e){return arguments.length?(n=typeof e==`function`?e:Hn(e),f):n},f.touchable=function(e){return arguments.length?(r=typeof e==`function`?e:Hn(!!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 Yn(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function Xn(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Zn(){}var Qn=.7,$n=1/Qn,er=`\\s*([+-]?\\d+)\\s*`,tr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,nr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,rr=/^#([0-9a-f]{3,8})$/,ir=RegExp(`^rgb\\(${er},${er},${er}\\)$`),ar=RegExp(`^rgb\\(${nr},${nr},${nr}\\)$`),or=RegExp(`^rgba\\(${er},${er},${er},${tr}\\)$`),sr=RegExp(`^rgba\\(${nr},${nr},${nr},${tr}\\)$`),cr=RegExp(`^hsl\\(${tr},${nr},${nr}\\)$`),lr=RegExp(`^hsla\\(${tr},${nr},${nr},${tr}\\)$`),ur={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};Yn(Zn,hr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:dr,formatHex:dr,formatHex8:fr,formatHsl:pr,formatRgb:mr,toString:mr});function dr(){return this.rgb().formatHex()}function fr(){return this.rgb().formatHex8()}function pr(){return Or(this).formatHsl()}function mr(){return this.rgb().formatRgb()}function hr(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=rr.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?gr(t):n===3?new br(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?_r(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?_r(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=ir.exec(e))?new br(t[1],t[2],t[3],1):(t=ar.exec(e))?new br(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=or.exec(e))?_r(t[1],t[2],t[3],t[4]):(t=sr.exec(e))?_r(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=cr.exec(e))?Dr(t[1],t[2]/100,t[3]/100,1):(t=lr.exec(e))?Dr(t[1],t[2]/100,t[3]/100,t[4]):ur.hasOwnProperty(e)?gr(ur[e]):e===`transparent`?new br(NaN,NaN,NaN,0):null}function gr(e){return new br(e>>16&255,e>>8&255,e&255,1)}function _r(e,t,n,r){return r<=0&&(e=t=n=NaN),new br(e,t,n,r)}function vr(e){return e instanceof Zn||(e=hr(e)),e?(e=e.rgb(),new br(e.r,e.g,e.b,e.opacity)):new br}function yr(e,t,n,r){return arguments.length===1?vr(e):new br(e,t,n,r??1)}function br(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Yn(br,yr,Xn(Zn,{brighter(e){return e=e==null?$n:$n**+e,new br(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Qn:Qn**+e,new br(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new br(Tr(this.r),Tr(this.g),Tr(this.b),wr(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:xr,formatHex:xr,formatHex8:Sr,formatRgb:Cr,toString:Cr}));function xr(){return`#${Er(this.r)}${Er(this.g)}${Er(this.b)}`}function Sr(){return`#${Er(this.r)}${Er(this.g)}${Er(this.b)}${Er((isNaN(this.opacity)?1:this.opacity)*255)}`}function Cr(){let e=wr(this.opacity);return`${e===1?`rgb(`:`rgba(`}${Tr(this.r)}, ${Tr(this.g)}, ${Tr(this.b)}${e===1?`)`:`, ${e})`}`}function wr(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Tr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Er(e){return e=Tr(e),(e<16?`0`:``)+e.toString(16)}function Dr(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Ar(e,t,n,r)}function Or(e){if(e instanceof Ar)return new Ar(e.h,e.s,e.l,e.opacity);if(e instanceof Zn||(e=hr(e)),!e)return new Ar;if(e instanceof Ar)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 Ar(o,s,c,e.opacity)}function kr(e,t,n,r){return arguments.length===1?Or(e):new Ar(e,t,n,r??1)}function Ar(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Yn(Ar,kr,Xn(Zn,{brighter(e){return e=e==null?$n:$n**+e,new Ar(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Qn:Qn**+e,new Ar(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 br(Nr(e>=240?e-240:e+120,i,r),Nr(e,i,r),Nr(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new Ar(jr(this.h),Mr(this.s),Mr(this.l),wr(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=wr(this.opacity);return`${e===1?`hsl(`:`hsla(`}${jr(this.h)}, ${Mr(this.s)*100}%, ${Mr(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function jr(e){return e=(e||0)%360,e<0?e+360:e}function Mr(e){return Math.max(0,Math.min(1,e||0))}function Nr(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 Pr=e=>()=>e;function Fr(e,t){return function(n){return e+n*t}}function Ir(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function Lr(e){return(e=+e)==1?Rr:function(t,n){return n-t?Ir(t,n,e):Pr(isNaN(t)?n:t)}}function Rr(e,t){var n=t-e;return n?Fr(e,n):Pr(isNaN(e)?t:e)}var zr=function e(t){var n=Lr(t);function r(e,t){var r=n((e=yr(e)).r,(t=yr(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Rr(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 Br(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 Vr(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Hr(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]=Zr(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 Ur(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Wr(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function Gr(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]=Zr(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var Kr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,qr=new RegExp(Kr.source,`g`);function Jr(e){return function(){return e}}function Yr(e){return function(t){return e(t)+``}}function Xr(e,t){var n=Kr.lastIndex=qr.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=Kr.exec(e))&&(i=qr.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:Wr(r,i)})),n=qr.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?Yr(c[0].x):Jr(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 Zr(e,t){var n=typeof t,r;return t==null||n===`boolean`?Pr(t):(n===`number`?Wr:n===`string`?(r=hr(t))?(t=r,zr):Xr:t instanceof hr?zr:t instanceof Date?Ur:Vr(t)?Br:Array.isArray(t)?Hr:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?Gr:Wr)(e,t)}var Qr=180/Math.PI,$r={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function ei(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)*Qr,skewX:Math.atan(c)*Qr,scaleX:o,scaleY:s}}var ti;function ni(e){let t=new(typeof DOMMatrix==`function`?DOMMatrix:WebKitCSSMatrix)(e+``);return t.isIdentity?$r:ei(t.a,t.b,t.c,t.d,t.e,t.f)}function ri(e){return e==null||(ti||=document.createElementNS(`http://www.w3.org/2000/svg`,`g`),ti.setAttribute(`transform`,e),!(e=ti.transform.baseVal.consolidate()))?$r:(e=e.matrix,ei(e.a,e.b,e.c,e.d,e.e,e.f))}function ii(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:Wr(e,i)},{i:c-2,x:Wr(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:Wr(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:Wr(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:Wr(e,n)},{i:s-2,x:Wr(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 ai=ii(ni,`px, `,`px)`,`deg)`),oi=ii(ri,`, `,`)`,`)`),si=1e-12;function ci(e){return((e=Math.exp(e))+1/e)/2}function li(e){return((e=Math.exp(e))-1/e)/2}function ui(e){return((e=Math.exp(2*e))-1)/(e+1)}var di=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<si)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=ci(y),c=s/(n*g)*(i*ui(t*r+y)-li(y));return[a+c*d,o+c*f,s*i/ci(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),fi=0,pi=0,mi=0,hi=1e3,gi,_i,vi=0,yi=0,bi=0,xi=typeof performance==`object`&&performance.now?performance:Date,Si=typeof window==`object`&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Ci(){return yi||=(Si(wi),xi.now()+bi)}function wi(){yi=0}function Ti(){this._call=this._time=this._next=null}Ti.prototype=Ei.prototype={constructor:Ti,restart:function(e,t,n){if(typeof e!=`function`)throw TypeError(`callback is not a function`);n=(n==null?Ci():+n)+(t==null?0:+t),!this._next&&_i!==this&&(_i?_i._next=this:gi=this,_i=this),this._call=e,this._time=n,ji()},stop:function(){this._call&&(this._call=null,this._time=1/0,ji())}};function Ei(e,t,n){var r=new Ti;return r.restart(e,t,n),r}function Di(){Ci(),++fi;for(var e=gi,t;e;)(t=yi-e._time)>=0&&e._call.call(void 0,t),e=e._next;--fi}function Oi(){yi=(vi=xi.now())+bi,fi=pi=0;try{Di()}finally{fi=0,Ai(),yi=0}}function ki(){var e=xi.now(),t=e-vi;t>hi&&(bi-=t,vi=e)}function Ai(){for(var e,t=gi,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:gi=n);_i=e,ji(r)}function ji(e){fi||(pi&&=clearTimeout(pi),e-yi>24?(e<1/0&&(pi=setTimeout(Oi,e-xi.now()-bi)),mi&&=clearInterval(mi)):(mi||=(vi=xi.now(),setInterval(ki,hi)),fi=1,Si(Oi)))}function Mi(e,t,n){var r=new Ti;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var Ni=Oe(`start`,`end`,`cancel`,`interrupt`),Pi=[],Fi=0,Ii=1,Li=2,Ri=3,zi=4,Bi=5,Vi=6;function Hi(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;Ki(e,n,{name:t,index:r,group:i,on:Ni,tween:Pi,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:Fi})}function Ui(e,t){var n=Gi(e,t);if(n.state>Fi)throw Error(`too late; already scheduled`);return n}function Wi(e,t){var n=Gi(e,t);if(n.state>Ri)throw Error(`too late; already running`);return n}function Gi(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function Ki(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Ei(a,0,n.time);function a(e){n.state=Ii,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!==Ii)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===Ri)return Mi(o);f.state===zi?(f.state=Vi,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l<t&&(f.state=Vi,f.timer.stop(),f.on.call(`cancel`,e,e.__data__,f.index,f.group),delete r[l])}if(Mi(function(){n.state===Ri&&(n.state=zi,n.timer.restart(s,n.delay,n.time),s(a))}),n.state=Li,n.on.call(`start`,e,e.__data__,n.index,n.group),n.state===Li){for(n.state=Ri,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=Bi,1),a=-1,o=i.length;++a<o;)i[a].call(e,r);n.state===Bi&&(n.on.call(`end`,e,e.__data__,n.index,n.group),c())}function c(){for(var i in n.state=Vi,n.timer.stop(),delete r[t],r)return;delete e.__transition}}function qi(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>Li&&r.state<Bi,r.state=Vi,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function Ji(e){return this.each(function(){qi(this,e)})}function Yi(e,t){var n,r;return function(){var i=Wi(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 Xi(e,t,n){var r,i;if(typeof n!=`function`)throw Error();return function(){var a=Wi(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 Zi(e,t){var n=this._id;if(e+=``,arguments.length<2){for(var r=Gi(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?Yi:Xi)(n,e,t))}function Qi(e,t,n){var r=e._id;return e.each(function(){var e=Wi(this,r);(e.value||={})[t]=n.apply(this,arguments)}),function(e){return Gi(e,r).value[t]}}function $i(e,t){var n;return(typeof t==`number`?Wr:t instanceof hr?zr:(n=hr(t))?(t=n,zr):Xr)(e,t)}function ea(e){return function(){this.removeAttribute(e)}}function ta(e){return function(){this.removeAttributeNS(e.space,e.local)}}function na(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 ra(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 ia(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 aa(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 oa(e,t){var n=Fe(e),r=n===`transform`?oi:$i;return this.attrTween(e,typeof t==`function`?(n.local?aa:ia)(n,r,Qi(this,`attr.`+e,t)):t==null?(n.local?ta:ea)(n):(n.local?ra:na)(n,r,t))}function sa(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function ca(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function la(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&ca(e,i)),n}return i._value=t,i}function ua(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 da(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=Fe(e);return this.tween(n,(r.local?la:ua)(r,t))}function fa(e,t){return function(){Ui(this,e).delay=+t.apply(this,arguments)}}function pa(e,t){return t=+t,function(){Ui(this,e).delay=t}}function ma(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?fa:pa)(t,e)):Gi(this.node(),t).delay}function ha(e,t){return function(){Wi(this,e).duration=+t.apply(this,arguments)}}function ga(e,t){return t=+t,function(){Wi(this,e).duration=t}}function _a(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?ha:ga)(t,e)):Gi(this.node(),t).duration}function va(e,t){if(typeof t!=`function`)throw Error();return function(){Wi(this,e).ease=t}}function ya(e){var t=this._id;return arguments.length?this.each(va(t,e)):Gi(this.node(),t).ease}function ba(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=`function`)throw Error();Wi(this,e).ease=n}}function xa(e){if(typeof e!=`function`)throw Error();return this.each(ba(this._id,e))}function Sa(e){typeof e!=`function`&&(e=qe(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 Za(r,this._parents,this._name,this._id)}function Ca(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 Za(o,this._parents,this._name,this._id)}function wa(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 Ta(e,t,n){var r,i,a=wa(t)?Ui:Wi;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function Ea(e,t){var n=this._id;return arguments.length<2?Gi(this.node(),n).on.on(e):this.each(Ta(n,e,t))}function Da(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Oa(){return this.on(`end.remove`,Da(this._id))}function ka(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=Be(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,Hi(l[f],t,n,f,l,Gi(u,n)));return new Za(a,this._parents,t,n)}function Aa(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=We(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=Gi(u,n),h=0,g=f.length;h<g;++h)(p=f[h])&&Hi(p,t,n,h,f,m);a.push(f),o.push(u)}return new Za(a,o,t,n)}var ja=jn.prototype.constructor;function Ma(){return new ja(this._groups,this._parents)}function Na(e,t){var n,r,i;return function(){var a=Lt(this,e),o=(this.style.removeProperty(e),Lt(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}function Pa(e){return function(){this.style.removeProperty(e)}}function Fa(e,t,n){var r,i=n+``,a;return function(){var o=Lt(this,e);return o===i?null:o===r?a:a=t(r=o,n)}}function Ia(e,t,n){var r,i,a;return function(){var o=Lt(this,e),s=n(this),c=s+``;return s??(c=s=(this.style.removeProperty(e),Lt(this,e))),o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s))}}function La(e,t){var n,r,i,a=`style.`+t,o=`end.`+a,s;return function(){var c=Wi(this,e),l=c.on,u=c.value[a]==null?s||=Pa(t):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(o,i=u),c.on=r}}function Ra(e,t,n){var r=(e+=``)==`transform`?ai:$i;return t==null?this.styleTween(e,Na(e,r)).on(`end.style.`+e,Pa(e)):typeof t==`function`?this.styleTween(e,Ia(e,r,Qi(this,`style.`+e,t))).each(La(this._id,e)):this.styleTween(e,Fa(e,r,t),n).on(`end.style.`+e,null)}function za(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function Ba(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&za(e,a,n)),r}return a._value=t,a}function Va(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,Ba(e,t,n??``))}function Ha(e){return function(){this.textContent=e}}function Ua(e){return function(){var t=e(this);this.textContent=t??``}}function Wa(e){return this.tween(`text`,typeof e==`function`?Ua(Qi(this,`text`,e)):Ha(e==null?``:e+``))}function Ga(e){return function(t){this.textContent=e.call(this,t)}}function Ka(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&Ga(r)),t}return r._value=e,r}function qa(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,Ka(e))}function Ja(){for(var e=this._name,t=this._id,n=Qa(),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=Gi(c,t);Hi(c,e,n,l,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new Za(r,this._parents,e,n)}function Ya(){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=Wi(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 Xa=0;function Za(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Qa(){return++Xa}var $a=jn.prototype;Za.prototype={constructor:Za,select:ka,selectAll:Aa,selectChild:$a.selectChild,selectChildren:$a.selectChildren,filter:Sa,merge:Ca,selection:Ma,transition:Ja,call:$a.call,nodes:$a.nodes,node:$a.node,size:$a.size,empty:$a.empty,each:$a.each,on:Ea,attr:oa,attrTween:da,style:Ra,styleTween:Va,text:Wa,textTween:qa,remove:Oa,tween:Zi,delay:ma,duration:_a,ease:ya,easeVarying:xa,end:Ya,[Symbol.iterator]:$a[Symbol.iterator]};function eo(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var to={time:null,delay:0,duration:250,ease:eo};function no(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw Error(`transition ${t} not found`);return n}function ro(e){var t,n;e instanceof Za?(t=e._id,e=e._name):(t=Qa(),(n=to).time=Ci(),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])&&Hi(c,e,t,l,o,n||no(c,t));return new Za(r,this._parents,e,t)}jn.prototype.interrupt=Ji,jn.prototype.transition=ro;var io=e=>()=>e;function ao(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 oo(e,t,n){this.k=e,this.x=t,this.y=n}oo.prototype={constructor:oo,scale:function(e){return e===1?this:new oo(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new oo(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 so=new oo(1,0,0);oo.prototype;function co(e){e.stopImmediatePropagation()}function lo(e){e.preventDefault(),e.stopImmediatePropagation()}function uo(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function fo(){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 po(){return this.__zoom||so}function mo(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function ho(){return navigator.maxTouchPoints||`ontouchstart`in this}function go(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 _o(){var e=uo,t=fo,n=go,r=mo,i=ho,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=di,l=Oe(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,po).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`,po),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(so.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 oo(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 oo(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 oo(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=Nn(this.that).datum();l.call(e,this.that,new ao(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=Fn(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)],qi(this),s.start();lo(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=Nn(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=Fn(t,i),l=t.clientX,u=t.clientY;Bn(t.view),co(t),a.mouse=[c,this.__zoom.invert(c)],qi(this),a.start();function d(e){if(lo(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]=Fn(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),Vn(e.view,a.moved),lo(e),a.event(e).end()}}function E(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=Fn(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);lo(r),s>0?Nn(this).transition().duration(s).call(x,d,c,r):Nn(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(co(t),s=0;s<i;++s)c=r[s],l=Fn(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)),qi(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(lo(e),s=0;s<a;++s)c=i[s],l=Fn(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(co(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=Fn(o,this),Math.hypot(d[0]-o[0],d[1]-o[1])<g)){var s=Nn(this).on(`dblclick.zoom`);s&&s.apply(this,arguments)}}}return _.wheelDelta=function(e){return arguments.length?(r=typeof e==`function`?e:io(+e),_):r},_.filter=function(t){return arguments.length?(e=typeof t==`function`?t:io(!!t),_):e},_.touchable=function(e){return arguments.length?(i=typeof e==`function`?e:io(!!e),_):i},_.extent=function(e){return arguments.length?(t=typeof e==`function`?e:io([[+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 J=(e=>(e.Left=`left`,e.Top=`top`,e.Right=`right`,e.Bottom=`bottom`,e))(J||{}),vo=(e=>(e.Partial=`partial`,e.Full=`full`,e))(vo||{}),yo=(e=>(e.Bezier=`default`,e.SimpleBezier=`simple-bezier`,e.Straight=`straight`,e.Step=`step`,e.SmoothStep=`smoothstep`,e))(yo||{}),bo=(e=>(e.Strict=`strict`,e.Loose=`loose`,e))(bo||{}),xo=(e=>(e.Arrow=`arrow`,e.ArrowClosed=`arrowclosed`,e))(xo||{}),So=(e=>(e.Free=`free`,e.Vertical=`vertical`,e.Horizontal=`horizontal`,e))(So||{}),Co=(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))(Co||{}),wo=[`INPUT`,`SELECT`,`TEXTAREA`],To=typeof document<`u`?document:null;function Eo(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 wo.includes(t?.nodeName)||n||!!r}function Do(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function Oo(e,t,n,r){let i=t.replace(`+`,`
|
|
1
|
+
import{$n as e,$r as t,Bn 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,Kn as f,Ln as p,Mn as m,Nn as h,On as g,Pr as _,Qn as v,Sr as y,Tn as b,Tr as x,Un as S,Vn as C,Xn as w,Yn as T,Yr as E,Zn as D,_r as O,ar as k,bn as A,br as j,dr as M,er as N,fr as P,gr as F,hr as I,ir as L,kn as R,lr as z,mr as B,nr as V,or as H,qr as ee,sr as U,tr as W,ur as te,vr as ne,wn as G,wr as K,yr as q,zn as re}from"./element-plus-DxBPQwL7.js";P(),re(),_();function ie(e){return M()?(F(e),!0):!1}function ae(e){return typeof e==`function`?e():x(e)}var oe=typeof window<`u`&&typeof document<`u`,se=e=>e!==void 0,ce=Object.prototype.toString,le=e=>ce.call(e)===`[object Object]`,ue=()=>{};function de(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 fe=e=>e();function pe(e=fe){let t=q(!0);function n(){t.value=!1}function r(){t.value=!0}return{isActive:ne(t),pause:n,resume:r,eventFilter:(...n)=>{t.value&&e(...n)}}}function me(e,t=!1,n=`Timeout`){return new Promise((r,i)=>{setTimeout(t?()=>i(n):r,e)})}function he(e,t,n={}){let{eventFilter:r=fe,...i}=n;return k(e,de(r,t),i)}function ge(e,t,n={}){let{eventFilter:r,...i}=n,{eventFilter:a,pause:o,resume:s,isActive:c}=pe(r);return{stop:he(e,t,{...i,eventFilter:a}),pause:o,resume:s,isActive:c}}function _e(e,t={}){if(!B(e))return r(e);let n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(let r in e.value)n[r]=z(()=>({get(){return e.value[r]},set(n){if(ae(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 ve(e,t=!1){function n(n,{flush:r=`sync`,deep:i=!1,timeout:a,throwOnTimeout:o}={}){let s=null,c=[new Promise(a=>{s=k(e,e=>{n(e)!==t&&(s?.(),a(e))},{flush:r,deep:i,immediate:!0})})];return a!=null&&c.push(me(a,o).then(()=>ae(e)).finally(()=>s?.())),Promise.race(c)}function r(r,i){if(!B(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=k([e,r],([e,r])=>{t!==(e===r)&&(l?.(),n(e))},{flush:a,deep:o,immediate:!0})})];return s!=null&&u.push(me(s,c).then(()=>ae(e)).finally(()=>(l?.(),ae(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(ae(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(ae(e))?{toMatch:n,toContains:c,changed:l,changedTimes:u,get not(){return ve(e,!t)}}:{toMatch:n,toBe:r,toBeTruthy:i,toBeNull:a,toBeNaN:s,toBeUndefined:o,changed:l,changedTimes:u,get not(){return ve(e,!t)}}}function ye(e){return ve(e)}function be(e){let t=ae(e);return t?.$el??t}var xe=oe?window:void 0;function Se(...e){let t,n,r,i;if(typeof e[0]==`string`||Array.isArray(e[0])?([n,r,i]=e,t=xe):[t,n,r,i]=e,!t)return ue;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=k(()=>[be(t),ae(i)],([e,t])=>{if(o(),!e)return;let i=le(t)?{...t}:t;a.push(...n.flatMap(t=>r.map(n=>s(e,t,n,i))))},{immediate:!0,flush:`post`}),l=()=>{c(),o()};return ie(l),l}function Ce(e){return typeof e==`function`?e:typeof e==`string`?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function we(...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=xe,eventName:a=`keydown`,passive:o=!1,dedupe:s=!1}=r,c=Ce(t);return Se(i,a,e=>{e.repeat&&ae(s)||c(e)&&n(e)},o)}function Te(e){return JSON.parse(JSON.stringify(e))}function Ee(e,t,n,r={}){let{clone:i=!1,passive:a=!1,eventName:o,deep:s=!1,defaultValue:c,shouldEmit:u}=r,d=l(),f=n||d?.emit||(d?.$emit)?.bind(d)||(d?.proxy?.$emit)?.bind(d?.proxy),p=o;t||=`modelValue`,p||=`update:${t.toString()}`;let m=e=>i?typeof i==`function`?i(e):Te(e):e,h=()=>se(e[t])?m(e[t]):c,g=e=>{u?u(e)&&f(p,e):f(p,e)};if(a){let n=h(),r=q(n),i=!1;return k(()=>e[t],e=>{i||(i=!0,r.value=m(e),S(()=>i=!1))}),k(r,n=>{!i&&(n!==e[t]||s)&&g(n)},{deep:s}),r}return G({get(){return h()},set(e){g(e)}})}var De={value:()=>{}};function Oe(){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 ke(n)}function ke(e){this._=e}function Ae(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}})}ke.prototype=Oe.prototype={constructor:ke,on:function(e,t){var n=this._,r=Ae(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a<o;)if((i=(e=r[a]).type)&&(i=je(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]=Me(n[i],e.name,t);else if(t==null)for(i in n)n[i]=Me(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 ke(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 je(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function Me(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=De,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var Ne=`http://www.w3.org/1999/xhtml`,Pe={svg:`http://www.w3.org/2000/svg`,xhtml:Ne,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function Fe(e){var t=e+=``,n=t.indexOf(`:`);return n>=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),Pe.hasOwnProperty(t)?{space:Pe[t],local:e}:e}function Ie(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Ne&&t.documentElement.namespaceURI===Ne?t.createElement(e):t.createElementNS(n,e)}}function Le(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Re(e){var t=Fe(e);return(t.local?Le:Ie)(t)}function ze(){}function Be(e){return e==null?ze:function(){return this.querySelector(e)}}function Ve(e){typeof e!=`function`&&(e=Be(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 An(r,this._parents)}function He(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function Ue(){return[]}function We(e){return e==null?Ue:function(){return this.querySelectorAll(e)}}function Ge(e){return function(){return He(e.apply(this,arguments))}}function Ke(e){e=typeof e==`function`?Ge(e):We(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 An(r,i)}function qe(e){return function(){return this.matches(e)}}function Je(e){return function(t){return t.matches(e)}}var Ye=Array.prototype.find;function Xe(e){return function(){return Ye.call(this.children,e)}}function Ze(){return this.firstElementChild}function Qe(e){return this.select(e==null?Ze:Xe(typeof e==`function`?e:Je(e)))}var $e=Array.prototype.filter;function et(){return Array.from(this.children)}function tt(e){return function(){return $e.call(this.children,e)}}function nt(e){return this.selectAll(e==null?et:tt(typeof e==`function`?e:Je(e)))}function rt(e){typeof e!=`function`&&(e=qe(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 An(r,this._parents)}function it(e){return Array(e.length)}function at(){return new An(this._enter||this._groups.map(it),this._parents)}function ot(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}ot.prototype={constructor:ot,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 st(e){return function(){return e}}function ct(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 ot(e,a[o]);for(;o<c;++o)(s=t[o])&&(i[o]=s)}function lt(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 ot(e,a[s]);for(s=0;s<u;++s)(c=t[s])&&l.get(f[s])===c&&(i[s]=c)}function ut(e){return e.__data__}function dt(e,t){if(!arguments.length)return Array.from(this,ut);var n=t?lt:ct,r=this._parents,i=this._groups;typeof e!=`function`&&(e=st(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=ft(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 An(o,r),o._enter=s,o._exit=c,o}function ft(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function pt(){return new An(this._exit||this._groups.map(it),this._parents)}function mt(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 ht(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 An(s,this._parents)}function gt(){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 _t(e){e||=vt;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 An(i,this._parents).order()}function vt(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function yt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function bt(){return Array.from(this)}function xt(){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 St(){let e=0;for(let t of this)++e;return e}function Ct(){return!this.node()}function wt(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 Tt(e){return function(){this.removeAttribute(e)}}function Et(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Dt(e,t){return function(){this.setAttribute(e,t)}}function Ot(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function kt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function At(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 jt(e,t){var n=Fe(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?Et:Tt:typeof t==`function`?n.local?At:kt:n.local?Ot:Dt)(n,t))}function Mt(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Nt(e){return function(){this.style.removeProperty(e)}}function Pt(e,t,n){return function(){this.style.setProperty(e,t,n)}}function Ft(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function It(e,t,n){return arguments.length>1?this.each((t==null?Nt:typeof t==`function`?Ft:Pt)(e,t,n??``)):Lt(this.node(),e)}function Lt(e,t){return e.style.getPropertyValue(t)||Mt(e).getComputedStyle(e,null).getPropertyValue(t)}function Rt(e){return function(){delete this[e]}}function zt(e,t){return function(){this[e]=t}}function Bt(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Vt(e,t){return arguments.length>1?this.each((t==null?Rt:typeof t==`function`?Bt:zt)(e,t)):this.node()[e]}function Ht(e){return e.trim().split(/^|\s+/)}function Ut(e){return e.classList||new Wt(e)}function Wt(e){this._node=e,this._names=Ht(e.getAttribute(`class`)||``)}Wt.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 Gt(e,t){for(var n=Ut(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function Kt(e,t){for(var n=Ut(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function qt(e){return function(){Gt(this,e)}}function Jt(e){return function(){Kt(this,e)}}function Yt(e,t){return function(){(t.apply(this,arguments)?Gt:Kt)(this,e)}}function Xt(e,t){var n=Ht(e+``);if(arguments.length<2){for(var r=Ut(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t==`function`?Yt:t?qt:Jt)(n,t))}function Zt(){this.textContent=``}function Qt(e){return function(){this.textContent=e}}function $t(e){return function(){var t=e.apply(this,arguments);this.textContent=t??``}}function en(e){return arguments.length?this.each(e==null?Zt:(typeof e==`function`?$t:Qt)(e)):this.node().textContent}function tn(){this.innerHTML=``}function nn(e){return function(){this.innerHTML=e}}function rn(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??``}}function an(e){return arguments.length?this.each(e==null?tn:(typeof e==`function`?rn:nn)(e)):this.node().innerHTML}function on(){this.nextSibling&&this.parentNode.appendChild(this)}function sn(){return this.each(on)}function cn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function ln(){return this.each(cn)}function un(e){var t=typeof e==`function`?e:Re(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function dn(){return null}function fn(e,t){var n=typeof e==`function`?e:Re(e),r=t==null?dn:typeof t==`function`?t:Be(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function pn(){var e=this.parentNode;e&&e.removeChild(this)}function mn(){return this.each(pn)}function hn(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function gn(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function _n(e){return this.select(e?gn:hn)}function vn(e){return arguments.length?this.property(`__data__`,e):this.node().__data__}function yn(e){return function(t){e.call(this,t,this.__data__)}}function bn(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 xn(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 Sn(e,t,n){return function(){var r=this.__on,i,a=yn(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 Cn(e,t,n){var r=bn(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?Sn:xn,i=0;i<a;++i)this.each(s(r[i],t,n));return this}function wn(e,t,n){var r=Mt(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 Tn(e,t){return function(){return wn(this,e,t)}}function En(e,t){return function(){return wn(this,e,t.apply(this,arguments))}}function Dn(e,t){return this.each((typeof t==`function`?En:Tn)(e,t))}function*On(){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 kn=[null];function An(e,t){this._groups=e,this._parents=t}function jn(){return new An([[document.documentElement]],kn)}function Mn(){return this}An.prototype=jn.prototype={constructor:An,select:Ve,selectAll:Ke,selectChild:Qe,selectChildren:nt,filter:rt,data:dt,enter:at,exit:pt,join:mt,merge:ht,selection:Mn,order:gt,sort:_t,call:yt,nodes:bt,node:xt,size:St,empty:Ct,each:wt,attr:jt,style:It,property:Vt,classed:Xt,text:en,html:an,raise:sn,lower:ln,append:un,insert:fn,remove:mn,clone:_n,datum:vn,on:Cn,dispatch:Dn,[Symbol.iterator]:On};function Nn(e){return typeof e==`string`?new An([[document.querySelector(e)]],[document.documentElement]):new An([[e]],kn)}function Pn(e){let t;for(;t=e.sourceEvent;)e=t;return e}function Fn(e,t){if(e=Pn(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 In={passive:!1},Ln={capture:!0,passive:!1};function Rn(e){e.stopImmediatePropagation()}function zn(e){e.preventDefault(),e.stopImmediatePropagation()}function Bn(e){var t=e.document.documentElement,n=Nn(e).on(`dragstart.drag`,zn,Ln);`onselectstart`in t?n.on(`selectstart.drag`,zn,Ln):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect=`none`)}function Vn(e,t){var n=e.document.documentElement,r=Nn(e).on(`dragstart.drag`,null);t&&(r.on(`click.drag`,zn,Ln),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 Hn=e=>()=>e;function Un(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}})}Un.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function Wn(e){return!e.ctrlKey&&!e.button}function Gn(){return this.parentNode}function Kn(e,t){return t??{x:e.x,y:e.y}}function qn(){return navigator.maxTouchPoints||`ontouchstart`in this}function Jn(){var e=Wn,t=Gn,n=Kn,r=qn,i={},a=Oe(`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`,_,In).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&&(Nn(n.view).on(`mousemove.drag`,m,Ln).on(`mouseup.drag`,h,Ln),Bn(n.view),Rn(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(zn(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){Nn(e.view).on(`mousemove.drag mouseup.drag`,null),Vn(e.view,l),zn(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]))&&(Rn(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])&&(zn(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])&&(Rn(e),a(`end`,e,t[r]))}function y(e,t,r,s,c,l){var u=a.copy(),d=Fn(l||r,t),p,m,h;if((h=n.call(e,new Un(`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=Fn(l||a,t),_=o}u.call(r,e,new Un(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:Hn(!!t),f):e},f.container=function(e){return arguments.length?(t=typeof e==`function`?e:Hn(e),f):t},f.subject=function(e){return arguments.length?(n=typeof e==`function`?e:Hn(e),f):n},f.touchable=function(e){return arguments.length?(r=typeof e==`function`?e:Hn(!!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 Yn(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function Xn(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Zn(){}var Qn=.7,$n=1/Qn,er=`\\s*([+-]?\\d+)\\s*`,tr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,nr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,rr=/^#([0-9a-f]{3,8})$/,ir=RegExp(`^rgb\\(${er},${er},${er}\\)$`),ar=RegExp(`^rgb\\(${nr},${nr},${nr}\\)$`),or=RegExp(`^rgba\\(${er},${er},${er},${tr}\\)$`),sr=RegExp(`^rgba\\(${nr},${nr},${nr},${tr}\\)$`),cr=RegExp(`^hsl\\(${tr},${nr},${nr}\\)$`),lr=RegExp(`^hsla\\(${tr},${nr},${nr},${tr}\\)$`),ur={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};Yn(Zn,hr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:dr,formatHex:dr,formatHex8:fr,formatHsl:pr,formatRgb:mr,toString:mr});function dr(){return this.rgb().formatHex()}function fr(){return this.rgb().formatHex8()}function pr(){return Or(this).formatHsl()}function mr(){return this.rgb().formatRgb()}function hr(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=rr.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?gr(t):n===3?new br(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?_r(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?_r(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=ir.exec(e))?new br(t[1],t[2],t[3],1):(t=ar.exec(e))?new br(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=or.exec(e))?_r(t[1],t[2],t[3],t[4]):(t=sr.exec(e))?_r(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=cr.exec(e))?Dr(t[1],t[2]/100,t[3]/100,1):(t=lr.exec(e))?Dr(t[1],t[2]/100,t[3]/100,t[4]):ur.hasOwnProperty(e)?gr(ur[e]):e===`transparent`?new br(NaN,NaN,NaN,0):null}function gr(e){return new br(e>>16&255,e>>8&255,e&255,1)}function _r(e,t,n,r){return r<=0&&(e=t=n=NaN),new br(e,t,n,r)}function vr(e){return e instanceof Zn||(e=hr(e)),e?(e=e.rgb(),new br(e.r,e.g,e.b,e.opacity)):new br}function yr(e,t,n,r){return arguments.length===1?vr(e):new br(e,t,n,r??1)}function br(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Yn(br,yr,Xn(Zn,{brighter(e){return e=e==null?$n:$n**+e,new br(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Qn:Qn**+e,new br(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new br(Tr(this.r),Tr(this.g),Tr(this.b),wr(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:xr,formatHex:xr,formatHex8:Sr,formatRgb:Cr,toString:Cr}));function xr(){return`#${Er(this.r)}${Er(this.g)}${Er(this.b)}`}function Sr(){return`#${Er(this.r)}${Er(this.g)}${Er(this.b)}${Er((isNaN(this.opacity)?1:this.opacity)*255)}`}function Cr(){let e=wr(this.opacity);return`${e===1?`rgb(`:`rgba(`}${Tr(this.r)}, ${Tr(this.g)}, ${Tr(this.b)}${e===1?`)`:`, ${e})`}`}function wr(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Tr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Er(e){return e=Tr(e),(e<16?`0`:``)+e.toString(16)}function Dr(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Ar(e,t,n,r)}function Or(e){if(e instanceof Ar)return new Ar(e.h,e.s,e.l,e.opacity);if(e instanceof Zn||(e=hr(e)),!e)return new Ar;if(e instanceof Ar)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 Ar(o,s,c,e.opacity)}function kr(e,t,n,r){return arguments.length===1?Or(e):new Ar(e,t,n,r??1)}function Ar(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Yn(Ar,kr,Xn(Zn,{brighter(e){return e=e==null?$n:$n**+e,new Ar(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Qn:Qn**+e,new Ar(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 br(Nr(e>=240?e-240:e+120,i,r),Nr(e,i,r),Nr(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new Ar(jr(this.h),Mr(this.s),Mr(this.l),wr(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=wr(this.opacity);return`${e===1?`hsl(`:`hsla(`}${jr(this.h)}, ${Mr(this.s)*100}%, ${Mr(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function jr(e){return e=(e||0)%360,e<0?e+360:e}function Mr(e){return Math.max(0,Math.min(1,e||0))}function Nr(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 Pr=e=>()=>e;function Fr(e,t){return function(n){return e+n*t}}function Ir(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function Lr(e){return(e=+e)==1?Rr:function(t,n){return n-t?Ir(t,n,e):Pr(isNaN(t)?n:t)}}function Rr(e,t){var n=t-e;return n?Fr(e,n):Pr(isNaN(e)?t:e)}var zr=function e(t){var n=Lr(t);function r(e,t){var r=n((e=yr(e)).r,(t=yr(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Rr(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 Br(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 Vr(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Hr(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]=Zr(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 Ur(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Wr(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function Gr(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]=Zr(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var Kr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,qr=new RegExp(Kr.source,`g`);function Jr(e){return function(){return e}}function Yr(e){return function(t){return e(t)+``}}function Xr(e,t){var n=Kr.lastIndex=qr.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=Kr.exec(e))&&(i=qr.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:Wr(r,i)})),n=qr.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?Yr(c[0].x):Jr(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 Zr(e,t){var n=typeof t,r;return t==null||n===`boolean`?Pr(t):(n===`number`?Wr:n===`string`?(r=hr(t))?(t=r,zr):Xr:t instanceof hr?zr:t instanceof Date?Ur:Vr(t)?Br:Array.isArray(t)?Hr:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?Gr:Wr)(e,t)}var Qr=180/Math.PI,$r={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function ei(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)*Qr,skewX:Math.atan(c)*Qr,scaleX:o,scaleY:s}}var ti;function ni(e){let t=new(typeof DOMMatrix==`function`?DOMMatrix:WebKitCSSMatrix)(e+``);return t.isIdentity?$r:ei(t.a,t.b,t.c,t.d,t.e,t.f)}function ri(e){return e==null||(ti||=document.createElementNS(`http://www.w3.org/2000/svg`,`g`),ti.setAttribute(`transform`,e),!(e=ti.transform.baseVal.consolidate()))?$r:(e=e.matrix,ei(e.a,e.b,e.c,e.d,e.e,e.f))}function ii(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:Wr(e,i)},{i:c-2,x:Wr(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:Wr(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:Wr(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:Wr(e,n)},{i:s-2,x:Wr(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 ai=ii(ni,`px, `,`px)`,`deg)`),oi=ii(ri,`, `,`)`,`)`),si=1e-12;function ci(e){return((e=Math.exp(e))+1/e)/2}function li(e){return((e=Math.exp(e))-1/e)/2}function ui(e){return((e=Math.exp(2*e))-1)/(e+1)}var di=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<si)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=ci(y),c=s/(n*g)*(i*ui(t*r+y)-li(y));return[a+c*d,o+c*f,s*i/ci(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),fi=0,pi=0,mi=0,hi=1e3,gi,_i,vi=0,yi=0,bi=0,xi=typeof performance==`object`&&performance.now?performance:Date,Si=typeof window==`object`&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Ci(){return yi||=(Si(wi),xi.now()+bi)}function wi(){yi=0}function Ti(){this._call=this._time=this._next=null}Ti.prototype=Ei.prototype={constructor:Ti,restart:function(e,t,n){if(typeof e!=`function`)throw TypeError(`callback is not a function`);n=(n==null?Ci():+n)+(t==null?0:+t),!this._next&&_i!==this&&(_i?_i._next=this:gi=this,_i=this),this._call=e,this._time=n,ji()},stop:function(){this._call&&(this._call=null,this._time=1/0,ji())}};function Ei(e,t,n){var r=new Ti;return r.restart(e,t,n),r}function Di(){Ci(),++fi;for(var e=gi,t;e;)(t=yi-e._time)>=0&&e._call.call(void 0,t),e=e._next;--fi}function Oi(){yi=(vi=xi.now())+bi,fi=pi=0;try{Di()}finally{fi=0,Ai(),yi=0}}function ki(){var e=xi.now(),t=e-vi;t>hi&&(bi-=t,vi=e)}function Ai(){for(var e,t=gi,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:gi=n);_i=e,ji(r)}function ji(e){fi||(pi&&=clearTimeout(pi),e-yi>24?(e<1/0&&(pi=setTimeout(Oi,e-xi.now()-bi)),mi&&=clearInterval(mi)):(mi||=(vi=xi.now(),setInterval(ki,hi)),fi=1,Si(Oi)))}function Mi(e,t,n){var r=new Ti;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var Ni=Oe(`start`,`end`,`cancel`,`interrupt`),Pi=[],Fi=0,Ii=1,Li=2,Ri=3,zi=4,Bi=5,Vi=6;function Hi(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;Ki(e,n,{name:t,index:r,group:i,on:Ni,tween:Pi,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:Fi})}function Ui(e,t){var n=Gi(e,t);if(n.state>Fi)throw Error(`too late; already scheduled`);return n}function Wi(e,t){var n=Gi(e,t);if(n.state>Ri)throw Error(`too late; already running`);return n}function Gi(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function Ki(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Ei(a,0,n.time);function a(e){n.state=Ii,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!==Ii)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===Ri)return Mi(o);f.state===zi?(f.state=Vi,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l<t&&(f.state=Vi,f.timer.stop(),f.on.call(`cancel`,e,e.__data__,f.index,f.group),delete r[l])}if(Mi(function(){n.state===Ri&&(n.state=zi,n.timer.restart(s,n.delay,n.time),s(a))}),n.state=Li,n.on.call(`start`,e,e.__data__,n.index,n.group),n.state===Li){for(n.state=Ri,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=Bi,1),a=-1,o=i.length;++a<o;)i[a].call(e,r);n.state===Bi&&(n.on.call(`end`,e,e.__data__,n.index,n.group),c())}function c(){for(var i in n.state=Vi,n.timer.stop(),delete r[t],r)return;delete e.__transition}}function qi(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>Li&&r.state<Bi,r.state=Vi,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function Ji(e){return this.each(function(){qi(this,e)})}function Yi(e,t){var n,r;return function(){var i=Wi(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 Xi(e,t,n){var r,i;if(typeof n!=`function`)throw Error();return function(){var a=Wi(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 Zi(e,t){var n=this._id;if(e+=``,arguments.length<2){for(var r=Gi(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?Yi:Xi)(n,e,t))}function Qi(e,t,n){var r=e._id;return e.each(function(){var e=Wi(this,r);(e.value||={})[t]=n.apply(this,arguments)}),function(e){return Gi(e,r).value[t]}}function $i(e,t){var n;return(typeof t==`number`?Wr:t instanceof hr?zr:(n=hr(t))?(t=n,zr):Xr)(e,t)}function ea(e){return function(){this.removeAttribute(e)}}function ta(e){return function(){this.removeAttributeNS(e.space,e.local)}}function na(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 ra(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 ia(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 aa(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 oa(e,t){var n=Fe(e),r=n===`transform`?oi:$i;return this.attrTween(e,typeof t==`function`?(n.local?aa:ia)(n,r,Qi(this,`attr.`+e,t)):t==null?(n.local?ta:ea)(n):(n.local?ra:na)(n,r,t))}function sa(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function ca(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function la(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&ca(e,i)),n}return i._value=t,i}function ua(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 da(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=Fe(e);return this.tween(n,(r.local?la:ua)(r,t))}function fa(e,t){return function(){Ui(this,e).delay=+t.apply(this,arguments)}}function pa(e,t){return t=+t,function(){Ui(this,e).delay=t}}function ma(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?fa:pa)(t,e)):Gi(this.node(),t).delay}function ha(e,t){return function(){Wi(this,e).duration=+t.apply(this,arguments)}}function ga(e,t){return t=+t,function(){Wi(this,e).duration=t}}function _a(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?ha:ga)(t,e)):Gi(this.node(),t).duration}function va(e,t){if(typeof t!=`function`)throw Error();return function(){Wi(this,e).ease=t}}function ya(e){var t=this._id;return arguments.length?this.each(va(t,e)):Gi(this.node(),t).ease}function ba(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=`function`)throw Error();Wi(this,e).ease=n}}function xa(e){if(typeof e!=`function`)throw Error();return this.each(ba(this._id,e))}function Sa(e){typeof e!=`function`&&(e=qe(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 Za(r,this._parents,this._name,this._id)}function Ca(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 Za(o,this._parents,this._name,this._id)}function wa(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 Ta(e,t,n){var r,i,a=wa(t)?Ui:Wi;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function Ea(e,t){var n=this._id;return arguments.length<2?Gi(this.node(),n).on.on(e):this.each(Ta(n,e,t))}function Da(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Oa(){return this.on(`end.remove`,Da(this._id))}function ka(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=Be(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,Hi(l[f],t,n,f,l,Gi(u,n)));return new Za(a,this._parents,t,n)}function Aa(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=We(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=Gi(u,n),h=0,g=f.length;h<g;++h)(p=f[h])&&Hi(p,t,n,h,f,m);a.push(f),o.push(u)}return new Za(a,o,t,n)}var ja=jn.prototype.constructor;function Ma(){return new ja(this._groups,this._parents)}function Na(e,t){var n,r,i;return function(){var a=Lt(this,e),o=(this.style.removeProperty(e),Lt(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}function Pa(e){return function(){this.style.removeProperty(e)}}function Fa(e,t,n){var r,i=n+``,a;return function(){var o=Lt(this,e);return o===i?null:o===r?a:a=t(r=o,n)}}function Ia(e,t,n){var r,i,a;return function(){var o=Lt(this,e),s=n(this),c=s+``;return s??(c=s=(this.style.removeProperty(e),Lt(this,e))),o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s))}}function La(e,t){var n,r,i,a=`style.`+t,o=`end.`+a,s;return function(){var c=Wi(this,e),l=c.on,u=c.value[a]==null?s||=Pa(t):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(o,i=u),c.on=r}}function Ra(e,t,n){var r=(e+=``)==`transform`?ai:$i;return t==null?this.styleTween(e,Na(e,r)).on(`end.style.`+e,Pa(e)):typeof t==`function`?this.styleTween(e,Ia(e,r,Qi(this,`style.`+e,t))).each(La(this._id,e)):this.styleTween(e,Fa(e,r,t),n).on(`end.style.`+e,null)}function za(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function Ba(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&za(e,a,n)),r}return a._value=t,a}function Va(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,Ba(e,t,n??``))}function Ha(e){return function(){this.textContent=e}}function Ua(e){return function(){var t=e(this);this.textContent=t??``}}function Wa(e){return this.tween(`text`,typeof e==`function`?Ua(Qi(this,`text`,e)):Ha(e==null?``:e+``))}function Ga(e){return function(t){this.textContent=e.call(this,t)}}function Ka(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&Ga(r)),t}return r._value=e,r}function qa(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,Ka(e))}function Ja(){for(var e=this._name,t=this._id,n=Qa(),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=Gi(c,t);Hi(c,e,n,l,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new Za(r,this._parents,e,n)}function Ya(){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=Wi(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 Xa=0;function Za(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Qa(){return++Xa}var $a=jn.prototype;Za.prototype={constructor:Za,select:ka,selectAll:Aa,selectChild:$a.selectChild,selectChildren:$a.selectChildren,filter:Sa,merge:Ca,selection:Ma,transition:Ja,call:$a.call,nodes:$a.nodes,node:$a.node,size:$a.size,empty:$a.empty,each:$a.each,on:Ea,attr:oa,attrTween:da,style:Ra,styleTween:Va,text:Wa,textTween:qa,remove:Oa,tween:Zi,delay:ma,duration:_a,ease:ya,easeVarying:xa,end:Ya,[Symbol.iterator]:$a[Symbol.iterator]};function eo(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var to={time:null,delay:0,duration:250,ease:eo};function no(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw Error(`transition ${t} not found`);return n}function ro(e){var t,n;e instanceof Za?(t=e._id,e=e._name):(t=Qa(),(n=to).time=Ci(),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])&&Hi(c,e,t,l,o,n||no(c,t));return new Za(r,this._parents,e,t)}jn.prototype.interrupt=Ji,jn.prototype.transition=ro;var io=e=>()=>e;function ao(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 oo(e,t,n){this.k=e,this.x=t,this.y=n}oo.prototype={constructor:oo,scale:function(e){return e===1?this:new oo(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new oo(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 so=new oo(1,0,0);oo.prototype;function co(e){e.stopImmediatePropagation()}function lo(e){e.preventDefault(),e.stopImmediatePropagation()}function uo(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function fo(){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 po(){return this.__zoom||so}function mo(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function ho(){return navigator.maxTouchPoints||`ontouchstart`in this}function go(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 _o(){var e=uo,t=fo,n=go,r=mo,i=ho,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=di,l=Oe(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,po).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`,po),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(so.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 oo(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 oo(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 oo(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=Nn(this.that).datum();l.call(e,this.that,new ao(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=Fn(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)],qi(this),s.start();lo(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=Nn(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=Fn(t,i),l=t.clientX,u=t.clientY;Bn(t.view),co(t),a.mouse=[c,this.__zoom.invert(c)],qi(this),a.start();function d(e){if(lo(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]=Fn(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),Vn(e.view,a.moved),lo(e),a.event(e).end()}}function E(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=Fn(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);lo(r),s>0?Nn(this).transition().duration(s).call(x,d,c,r):Nn(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(co(t),s=0;s<i;++s)c=r[s],l=Fn(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)),qi(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(lo(e),s=0;s<a;++s)c=i[s],l=Fn(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(co(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=Fn(o,this),Math.hypot(d[0]-o[0],d[1]-o[1])<g)){var s=Nn(this).on(`dblclick.zoom`);s&&s.apply(this,arguments)}}}return _.wheelDelta=function(e){return arguments.length?(r=typeof e==`function`?e:io(+e),_):r},_.filter=function(t){return arguments.length?(e=typeof t==`function`?t:io(!!t),_):e},_.touchable=function(e){return arguments.length?(i=typeof e==`function`?e:io(!!e),_):i},_.extent=function(e){return arguments.length?(t=typeof e==`function`?e:io([[+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 J=(e=>(e.Left=`left`,e.Top=`top`,e.Right=`right`,e.Bottom=`bottom`,e))(J||{}),vo=(e=>(e.Partial=`partial`,e.Full=`full`,e))(vo||{}),yo=(e=>(e.Bezier=`default`,e.SimpleBezier=`simple-bezier`,e.Straight=`straight`,e.Step=`step`,e.SmoothStep=`smoothstep`,e))(yo||{}),bo=(e=>(e.Strict=`strict`,e.Loose=`loose`,e))(bo||{}),xo=(e=>(e.Arrow=`arrow`,e.ArrowClosed=`arrowclosed`,e))(xo||{}),So=(e=>(e.Free=`free`,e.Vertical=`vertical`,e.Horizontal=`horizontal`,e))(So||{}),Co=(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))(Co||{}),wo=[`INPUT`,`SELECT`,`TEXTAREA`],To=typeof document<`u`?document:null;function Eo(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 wo.includes(t?.nodeName)||n||!!r}function Do(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function Oo(e,t,n,r){let i=t.replace(`+`,`
|
|
2
2
|
`).replace(`
|
|
3
3
|
|
|
4
4
|
`,`
|
package/src/ui/public/index.html
CHANGED
|
@@ -10,28 +10,27 @@
|
|
|
10
10
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
11
11
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
12
12
|
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-gpuX9fhG.js"></script>
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/element-plus-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/element-plus-DxBPQwL7.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/monaco-BScz9v63.js">
|
|
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-
|
|
17
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-IQQMq-1c.js">
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-B1mHBne9.js">
|
|
19
|
+
<link rel="modulepreload" crossorigin href="/assets/SvgIcon-yefEMV0-.js">
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/IconButton-DcOAqpq0.js">
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/configStore-BDxel6Co.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/socket-io-BFqQXqAp.js">
|
|
23
|
-
<link rel="modulepreload" crossorigin href="/assets/gitStore-
|
|
24
|
-
<link rel="modulepreload" crossorigin href="/assets/useThemeObserver-
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/flow-mindmap-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/previewSandbox-
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/FileDiffViewer-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
31
|
-
<link rel="
|
|
32
|
-
<link rel="stylesheet" crossorigin href="/assets/element-plus-VKM0Y6Ty.css">
|
|
23
|
+
<link rel="modulepreload" crossorigin href="/assets/gitStore-D5CWxPLv.js">
|
|
24
|
+
<link rel="modulepreload" crossorigin href="/assets/useThemeObserver-E7Hk50l3.js">
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/flow-mindmap-BqFb1WO5.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/previewSandbox-qLKxghfr.js">
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/FileDiffViewer-C4xxq5S0.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/CommonDialog-B_qUsIGr.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/TemplateManager-CCy_WcSK.js">
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/vue-flow-fLUQ0_kE.js">
|
|
31
|
+
<link rel="stylesheet" crossorigin href="/assets/element-plus-Cwwq-Gje.css">
|
|
33
32
|
<link rel="stylesheet" crossorigin href="/assets/monaco-B2lPvkrc.css">
|
|
34
|
-
<link rel="stylesheet" crossorigin href="/assets/vendor-
|
|
33
|
+
<link rel="stylesheet" crossorigin href="/assets/vendor-C5qX_I8r.css">
|
|
35
34
|
<link rel="stylesheet" crossorigin href="/assets/SvgIcon-CDNsk4-Q.css">
|
|
36
35
|
<link rel="stylesheet" crossorigin href="/assets/IconButton-tjkOjzkC.css">
|
|
37
36
|
<link rel="stylesheet" crossorigin href="/assets/flow-mindmap-DnzM9SlK.css">
|
|
@@ -40,7 +39,7 @@
|
|
|
40
39
|
<link rel="stylesheet" crossorigin href="/assets/CommonDialog-jP0E9mco.css">
|
|
41
40
|
<link rel="stylesheet" crossorigin href="/assets/TemplateManager-DMuG4i3G.css">
|
|
42
41
|
<link rel="stylesheet" crossorigin href="/assets/vue-flow-CavUTEzp.css">
|
|
43
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
42
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CmbatbSR.css">
|
|
44
43
|
</head>
|
|
45
44
|
<body>
|
|
46
45
|
<div id="app"></div>
|
package/src/ui/server/index.js
CHANGED
|
@@ -43,6 +43,7 @@ import { registerRecentDirectoriesSummaryRoutes } from './routes/recentDirectori
|
|
|
43
43
|
import { registerNpmRoutes } from './routes/npm.js';
|
|
44
44
|
import { registerFileOpenRoutes } from './routes/fileOpen.js';
|
|
45
45
|
import { registerLocalReposRoutes } from './routes/localRepos.js';
|
|
46
|
+
import { registerExplorerContextMenuRoutes } from './routes/explorerContextMenu.js';
|
|
46
47
|
import { registerRemoteReposRoutes } from './routes/remoteRepos.js';
|
|
47
48
|
import { registerWorkbenchRoutes } from './routes/workbench.js';
|
|
48
49
|
import { registerGitOpsRoutes } from './routes/gitOps.js';
|
|
@@ -420,6 +421,9 @@ async function startUIServer(noOpen = false, savePort = false) {
|
|
|
420
421
|
// 本机 Git 仓库清单 —— 仓库卡片上「已克隆」徽标的判据(全盘扫描 + 落盘缓存)
|
|
421
422
|
registerLocalReposRoutes({ app });
|
|
422
423
|
|
|
424
|
+
// 资源管理器右键菜单(设置 → 通用设置 → 系统集成 的按钮,写 HKCU 注册表)
|
|
425
|
+
registerExplorerContextMenuRoutes({ app });
|
|
426
|
+
|
|
423
427
|
registerWorkbenchRoutes({
|
|
424
428
|
app,
|
|
425
429
|
getCurrentProjectPath: () => currentProjectPath,
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// Copyright 2026 xz333221
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
// 「把 g ui 加到资源管理器右键菜单」—— 设置 → 通用设置 → 系统集成 的按钮后端。
|
|
16
|
+
//
|
|
17
|
+
// GET /api/explorer-context-menu 查询状态(是否已添加,供按钮显示"添加/移除")
|
|
18
|
+
// POST /api/explorer-context-menu/install 添加(幂等,重复点等于覆盖)
|
|
19
|
+
// POST /api/explorer-context-menu/uninstall 移除
|
|
20
|
+
//
|
|
21
|
+
// 只写 HKCU(当前用户),不碰 HKLM:
|
|
22
|
+
// - 用户级注册表不需要管理员权限 —— 弹 UAC 的右键菜单项没人愿意装;
|
|
23
|
+
// - 同一台机器上其他用户不受影响,卸载也只影响自己。
|
|
24
|
+
//
|
|
25
|
+
// 两个落点(与 VS Code / Git for Windows 的做法一致):
|
|
26
|
+
// HKCU\Software\Classes\Directory\shell\ZenGitSync ← 右键点「文件夹」本身
|
|
27
|
+
// HKCU\Software\Classes\Directory\Background\shell\ZenGitSync ← 右键点文件夹里的空白处
|
|
28
|
+
// Windows 11 上这两处都出现在「显示更多选项」(旧版菜单)里 —— 这是注册表方案的固有限制:
|
|
29
|
+
// 新版一级菜单只认 MSIX + IExplorerCommand 打包的应用,本功能不覆盖。
|
|
30
|
+
//
|
|
31
|
+
// 命令刻意用 `node <entry> ui --path="%V"` 直接拉起,不套 cmd.exe:
|
|
32
|
+
// - %V 是 Explorer 自己展开的"被右键的目录",交给 CLI 的 --path 处理,
|
|
33
|
+
// 少一层 cmd 词法 —— 路径里的 & % 空格都不会被二次解释(对比 `cmd /c start /d "%V"`);
|
|
34
|
+
// - 用 process.execPath 而不是 `g`:Explorer 的 PATH 与终端不同,全局 shim 未必能找到,
|
|
35
|
+
// 而当前正在跑的这个 node + 本包自带的 gitCommit.js 一定存在。
|
|
36
|
+
//
|
|
37
|
+
// 安全口径:注册表值只来自服务端自己的常量 + 按钮传进来的菜单标题(sanitize 后截断),
|
|
38
|
+
// 不接受任何路径参数 —— 右键菜单打开哪个目录由 Explorer 的 %V 决定,客户端说了不算。
|
|
39
|
+
|
|
40
|
+
import { promisify } from 'node:util';
|
|
41
|
+
import { execFile } from 'node:child_process';
|
|
42
|
+
import { fileURLToPath } from 'node:url';
|
|
43
|
+
import { asyncRoute, HttpError } from '../utils/asyncRoute.js';
|
|
44
|
+
|
|
45
|
+
const execFileAsync = promisify(execFile);
|
|
46
|
+
|
|
47
|
+
/** 菜单项注册表键名(两个落点共用),改它就是"换一个菜单项" */
|
|
48
|
+
export const MENU_KEY_NAME = 'ZenGitSync';
|
|
49
|
+
|
|
50
|
+
/** 两个落点:右键文件夹 / 右键文件夹空白处 */
|
|
51
|
+
export const MENU_REGISTRY_ROOTS = Object.freeze([
|
|
52
|
+
`HKCU\\Software\\Classes\\Directory\\shell\\${MENU_KEY_NAME}`,
|
|
53
|
+
`HKCU\\Software\\Classes\\Directory\\Background\\shell\\${MENU_KEY_NAME}`,
|
|
54
|
+
]);
|
|
55
|
+
|
|
56
|
+
/** 中文默认菜单标题(前端会按当前界面语言传 label,这里只是兜底) */
|
|
57
|
+
export const DEFAULT_MENU_LABEL = '用 g UI 打开';
|
|
58
|
+
|
|
59
|
+
/** 标题最长 64 字符:注册表项显示名,长了会被菜单截断,也没必要 */
|
|
60
|
+
const MAX_LABEL_LENGTH = 64;
|
|
61
|
+
|
|
62
|
+
/** 本包自带的 CLI 入口(与 fileOpen.js 里 launchGai 用同一个) */
|
|
63
|
+
export const CLI_ENTRY_PATH = fileURLToPath(new URL('../../../gitCommit.js', import.meta.url));
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* 菜单标题的清洗:控制字符换空格、去首尾空白、超长截断。
|
|
67
|
+
* 空值(或全是控制字符)退回默认标题 —— 保证菜单项永远有个能看的名字。
|
|
68
|
+
*
|
|
69
|
+
* @param {unknown} label
|
|
70
|
+
* @returns {string}
|
|
71
|
+
*/
|
|
72
|
+
export function sanitizeMenuLabel(label) {
|
|
73
|
+
if (typeof label !== 'string') return DEFAULT_MENU_LABEL;
|
|
74
|
+
const cleaned = label.replace(/[\u0000-\u001f\u007f]/g, ' ').trim();
|
|
75
|
+
if (!cleaned) return DEFAULT_MENU_LABEL;
|
|
76
|
+
return cleaned.slice(0, MAX_LABEL_LENGTH);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 右键菜单要执行的命令行。`%V` 由 Explorer 展开成被右键的目录。
|
|
81
|
+
* 引号是给 CreateProcess 的(路径可能带空格),不是给 shell 的。
|
|
82
|
+
*
|
|
83
|
+
* @param {{ nodePath?: string, entryPath?: string }} [options]
|
|
84
|
+
* @returns {string}
|
|
85
|
+
*/
|
|
86
|
+
export function buildMenuCommand({ nodePath = process.execPath, entryPath = CLI_ENTRY_PATH } = {}) {
|
|
87
|
+
return `"${nodePath}" "${entryPath}" ui --path="%V"`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* 把整块菜单项(含 command 子键)写进注册表。reg add 自带 /f 覆盖语义,天然幂等。
|
|
92
|
+
*
|
|
93
|
+
* @param {{ label?: unknown, execFileFn?: Function, nodePath?: string, entryPath?: string }} [options]
|
|
94
|
+
*/
|
|
95
|
+
export async function installExplorerContextMenu({
|
|
96
|
+
label,
|
|
97
|
+
execFileFn = execFileAsync,
|
|
98
|
+
nodePath = process.execPath,
|
|
99
|
+
entryPath = CLI_ENTRY_PATH,
|
|
100
|
+
} = {}) {
|
|
101
|
+
const menuLabel = sanitizeMenuLabel(label);
|
|
102
|
+
const command = buildMenuCommand({ nodePath, entryPath });
|
|
103
|
+
for (const key of MENU_REGISTRY_ROOTS) {
|
|
104
|
+
await execFileFn('reg.exe', ['add', key, '/ve', '/t', 'REG_SZ', '/d', menuLabel, '/f']);
|
|
105
|
+
// 图标借 node.exe 的(注册表菜单项只认 exe/dll/ico 资源,本包没有 .ico)
|
|
106
|
+
await execFileFn('reg.exe', ['add', key, '/v', 'Icon', '/t', 'REG_SZ', '/d', nodePath, '/f']);
|
|
107
|
+
await execFileFn('reg.exe', ['add', `${key}\\command`, '/ve', '/t', 'REG_SZ', '/d', command, '/f']);
|
|
108
|
+
}
|
|
109
|
+
return { label: menuLabel, command };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* 移除两个落点。/f 会连同 command 子键一起删;键不存在时 reg.exe 返回非 0,
|
|
114
|
+
* 这里当成功处理("本来就没了"和"刚删掉"对用户是同一件事)。
|
|
115
|
+
*
|
|
116
|
+
* @param {{ execFileFn?: Function }} [options]
|
|
117
|
+
*/
|
|
118
|
+
export async function uninstallExplorerContextMenu({ execFileFn = execFileAsync } = {}) {
|
|
119
|
+
const errors = [];
|
|
120
|
+
for (const key of MENU_REGISTRY_ROOTS) {
|
|
121
|
+
try {
|
|
122
|
+
await execFileFn('reg.exe', ['delete', key, '/f']);
|
|
123
|
+
} catch (error) {
|
|
124
|
+
if (!isMissingRegistryKeyError(error)) errors.push(error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (errors.length) throw errors[0];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* 判断"删除失败"是不是"键本来就不存在"。reg.exe 对不存在的键返回退出码 1,
|
|
132
|
+
* stderr 形如 `错误: 系统找不到指定的注册表项或值。`(英文系统同义)。
|
|
133
|
+
* 按退出码判断即可 —— 其它失败(EPERM / reg.exe 缺失)不该被吞掉。
|
|
134
|
+
*
|
|
135
|
+
* @param {any} error
|
|
136
|
+
*/
|
|
137
|
+
function isMissingRegistryKeyError(error) {
|
|
138
|
+
return error?.code === 1 || error?.status === 1;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 当前用户下是否已安装(两个落点都在才算"已添加")。
|
|
143
|
+
* 键存在即可 —— 不解析标题,菜单标题只用于安装时写入。
|
|
144
|
+
*
|
|
145
|
+
* @param {{ execFileFn?: Function }} [options]
|
|
146
|
+
* @returns {Promise<{ installed: boolean, keys: Record<string, boolean> }>}
|
|
147
|
+
*/
|
|
148
|
+
export async function getExplorerContextMenuStatus({ execFileFn = execFileAsync } = {}) {
|
|
149
|
+
const keys = {};
|
|
150
|
+
await Promise.all(MENU_REGISTRY_ROOTS.map(async (key) => {
|
|
151
|
+
try {
|
|
152
|
+
await execFileFn('reg.exe', ['query', key, '/ve']);
|
|
153
|
+
keys[key] = true;
|
|
154
|
+
} catch {
|
|
155
|
+
keys[key] = false;
|
|
156
|
+
}
|
|
157
|
+
}));
|
|
158
|
+
return { installed: MENU_REGISTRY_ROOTS.every((key) => keys[key] === true), keys };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* 注册路由。
|
|
163
|
+
*
|
|
164
|
+
* 注入口(与 registerLocalReposRoutes 同一套做法):单测传假的 execFileFn,
|
|
165
|
+
* 就不会往真实注册表里写东西。
|
|
166
|
+
*/
|
|
167
|
+
export function registerExplorerContextMenuRoutes({
|
|
168
|
+
app,
|
|
169
|
+
platform = process.platform,
|
|
170
|
+
execFileFn = execFileAsync,
|
|
171
|
+
nodePath = process.execPath,
|
|
172
|
+
entryPath = CLI_ENTRY_PATH,
|
|
173
|
+
} = {}) {
|
|
174
|
+
const supported = platform === 'win32';
|
|
175
|
+
|
|
176
|
+
app.get('/api/explorer-context-menu', asyncRoute(async (req, res) => {
|
|
177
|
+
if (!supported) {
|
|
178
|
+
return res.json({ success: true, supported: false, installed: false });
|
|
179
|
+
}
|
|
180
|
+
const { installed } = await getExplorerContextMenuStatus({ execFileFn });
|
|
181
|
+
res.json({ success: true, supported: true, installed });
|
|
182
|
+
}));
|
|
183
|
+
|
|
184
|
+
app.post('/api/explorer-context-menu/install', asyncRoute(async (req, res) => {
|
|
185
|
+
if (!supported) throw new HttpError(400, '仅支持 Windows 资源管理器右键菜单');
|
|
186
|
+
try {
|
|
187
|
+
const { label } = await installExplorerContextMenu({
|
|
188
|
+
label: req.body?.label,
|
|
189
|
+
execFileFn,
|
|
190
|
+
nodePath,
|
|
191
|
+
entryPath,
|
|
192
|
+
});
|
|
193
|
+
res.json({ success: true, message: `已添加「${label}」到资源管理器右键菜单` });
|
|
194
|
+
} catch (error) {
|
|
195
|
+
throw new HttpError(400, `无法写入右键菜单注册表项: ${error.message}`);
|
|
196
|
+
}
|
|
197
|
+
}));
|
|
198
|
+
|
|
199
|
+
app.post('/api/explorer-context-menu/uninstall', asyncRoute(async (req, res) => {
|
|
200
|
+
if (!supported) throw new HttpError(400, '仅支持 Windows 资源管理器右键菜单');
|
|
201
|
+
try {
|
|
202
|
+
await uninstallExplorerContextMenu({ execFileFn });
|
|
203
|
+
res.json({ success: true, message: '已从资源管理器右键菜单移除' });
|
|
204
|
+
} catch (error) {
|
|
205
|
+
throw new HttpError(400, `无法删除右键菜单注册表项: ${error.message}`);
|
|
206
|
+
}
|
|
207
|
+
}));
|
|
208
|
+
}
|