gitopo 0.0.1
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/LICENSE +21 -0
- package/README.md +110 -0
- package/bin/gitopo.js +20 -0
- package/dist/renderer/assets/index-B-xnAFkZ.css +1 -0
- package/dist/renderer/assets/index-B4NR76vm.css +1 -0
- package/dist/renderer/assets/index-B8-bMEZL.js +3 -0
- package/dist/renderer/assets/index-BSM6CD5c.js +3 -0
- package/dist/renderer/assets/index-Biwf0g5L.js +3 -0
- package/dist/renderer/assets/index-BkSteF7v.js +3 -0
- package/dist/renderer/assets/index-Bu2Is4Gi.js +3 -0
- package/dist/renderer/assets/index-BuunUFeT.js +3 -0
- package/dist/renderer/assets/index-BztqQcTT.js +3 -0
- package/dist/renderer/assets/index-C5GvfFhL.js +3 -0
- package/dist/renderer/assets/index-C5pqhkpE.css +1 -0
- package/dist/renderer/assets/index-CAjBcm7_.js +3 -0
- package/dist/renderer/assets/index-CPhqr81-.css +1 -0
- package/dist/renderer/assets/index-CRBk_3U9.js +4 -0
- package/dist/renderer/assets/index-CV77y4NX.js +3 -0
- package/dist/renderer/assets/index-CX4EqujF.js +3 -0
- package/dist/renderer/assets/index-Caevx9so.js +3 -0
- package/dist/renderer/assets/index-CbVNESqC.js +3 -0
- package/dist/renderer/assets/index-CgV3hEXF.js +3 -0
- package/dist/renderer/assets/index-Cgxb7yXH.js +3 -0
- package/dist/renderer/assets/index-Cu7Bdfdp.js +3 -0
- package/dist/renderer/assets/index-D-4eDZ-q.css +1 -0
- package/dist/renderer/assets/index-D3WoIbyB.js +3 -0
- package/dist/renderer/assets/index-DATWWeXq.js +3 -0
- package/dist/renderer/assets/index-DGVlk6ue.css +1 -0
- package/dist/renderer/assets/index-DKxk7KCa.js +3 -0
- package/dist/renderer/assets/index-DPD27o55.js +3 -0
- package/dist/renderer/assets/index-DaP2KGsB.js +3 -0
- package/dist/renderer/assets/index-DeuGEmKM.js +3 -0
- package/dist/renderer/assets/index-Dg_WVb0M.js +3 -0
- package/dist/renderer/assets/index-Dhbf0Fci.js +3 -0
- package/dist/renderer/assets/index-DnUHDinm.css +1 -0
- package/dist/renderer/assets/index-DuNCgxuJ.js +3 -0
- package/dist/renderer/assets/index-HYzjpgUI.js +3 -0
- package/dist/renderer/assets/index-Mn_-m7Tt.js +3 -0
- package/dist/renderer/assets/index-N_FqOAes.js +3 -0
- package/dist/renderer/assets/index-TVFDuiMT.js +3 -0
- package/dist/renderer/assets/index-UF9gobFY.css +1 -0
- package/dist/renderer/assets/index-V7JII7CO.js +3 -0
- package/dist/renderer/assets/index-jDaMuPPI.css +1 -0
- package/dist/renderer/assets/index-kUku5Va6.js +3 -0
- package/dist/renderer/index.html +38 -0
- package/docs/screenshot.png +0 -0
- package/package.json +57 -0
- package/src/main/index.js +85 -0
- package/src/main/preload.js +16 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var Te={value:()=>{}};function re(){for(var t=0,e=arguments.length,n={},r;t<e;++t){if(!(r=arguments[t]+"")||r in n||/[\s.]/.test(r))throw new Error("illegal type: "+r);n[r]=[]}return new nt(n)}function nt(t){this._=t}function Me(t,e){return t.trim().split(/^|\s+/).map(function(n){var r="",i=n.indexOf(".");if(i>=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!e.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}nt.prototype=re.prototype={constructor:nt,on:function(t,e){var n=this._,r=Me(t+"",n),i,o=-1,s=r.length;if(arguments.length<2){for(;++o<s;)if((i=(t=r[o]).type)&&(i=Re(n[i],t.name)))return i;return}if(e!=null&&typeof e!="function")throw new Error("invalid callback: "+e);for(;++o<s;)if(i=(t=r[o]).type)n[i]=Dt(n[i],t.name,e);else if(e==null)for(i in n)n[i]=Dt(n[i],t.name,null);return this},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new nt(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var n=new Array(i),r=0,i,o;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=this._[t],r=0,i=o.length;r<i;++r)o[r].value.apply(e,n)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,o=r.length;i<o;++i)r[i].value.apply(e,n)}};function Re(t,e){for(var n=0,r=t.length,i;n<r;++n)if((i=t[n]).name===e)return i.value}function Dt(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=Te,t=t.slice(0,r).concat(t.slice(r+1));break}return n!=null&&t.push({name:e,value:n}),t}var mt="http://www.w3.org/1999/xhtml";const Yt={svg:"http://www.w3.org/2000/svg",xhtml:mt,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function ft(t){var e=t+="",n=e.indexOf(":");return n>=0&&(e=t.slice(0,n))!=="xmlns"&&(t=t.slice(n+1)),Yt.hasOwnProperty(e)?{space:Yt[e],local:t}:t}function Ie(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===mt&&e.documentElement.namespaceURI===mt?e.createElement(t):e.createElementNS(n,t)}}function Xe(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function ie(t){var e=ft(t);return(e.local?Xe:Ie)(e)}function Fe(){}function Et(t){return t==null?Fe:function(){return this.querySelector(t)}}function He(t){typeof t!="function"&&(t=Et(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var o=e[i],s=o.length,a=r[i]=new Array(s),c,l,u=0;u<s;++u)(c=o[u])&&(l=t.call(c,c.__data__,u,o))&&("__data__"in c&&(l.__data__=c.__data__),a[u]=l);return new x(r,this._parents)}function Pe(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}function Le(){return[]}function oe(t){return t==null?Le:function(){return this.querySelectorAll(t)}}function Oe(t){return function(){return Pe(t.apply(this,arguments))}}function De(t){typeof t=="function"?t=Oe(t):t=oe(t);for(var e=this._groups,n=e.length,r=[],i=[],o=0;o<n;++o)for(var s=e[o],a=s.length,c,l=0;l<a;++l)(c=s[l])&&(r.push(t.call(c,c.__data__,l,s)),i.push(c));return new x(r,i)}function se(t){return function(){return this.matches(t)}}function ae(t){return function(e){return e.matches(t)}}var Ye=Array.prototype.find;function qe(t){return function(){return Ye.call(this.children,t)}}function Be(){return this.firstElementChild}function Ve(t){return this.select(t==null?Be:qe(typeof t=="function"?t:ae(t)))}var ze=Array.prototype.filter;function Ue(){return Array.from(this.children)}function Ge(t){return function(){return ze.call(this.children,t)}}function Ke(t){return this.selectAll(t==null?Ue:Ge(typeof t=="function"?t:ae(t)))}function We(t){typeof t!="function"&&(t=se(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var o=e[i],s=o.length,a=r[i]=[],c,l=0;l<s;++l)(c=o[l])&&t.call(c,c.__data__,l,o)&&a.push(c);return new x(r,this._parents)}function ce(t){return new Array(t.length)}function Je(){return new x(this._enter||this._groups.map(ce),this._parents)}function ot(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}ot.prototype={constructor:ot,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};function Qe(t){return function(){return t}}function Ze(t,e,n,r,i,o){for(var s=0,a,c=e.length,l=o.length;s<l;++s)(a=e[s])?(a.__data__=o[s],r[s]=a):n[s]=new ot(t,o[s]);for(;s<c;++s)(a=e[s])&&(i[s]=a)}function je(t,e,n,r,i,o,s){var a,c,l=new Map,u=e.length,f=o.length,h=new Array(u),d;for(a=0;a<u;++a)(c=e[a])&&(h[a]=d=s.call(c,c.__data__,a,e)+"",l.has(d)?i[a]=c:l.set(d,c));for(a=0;a<f;++a)d=s.call(t,o[a],a,o)+"",(c=l.get(d))?(r[a]=c,c.__data__=o[a],l.delete(d)):n[a]=new ot(t,o[a]);for(a=0;a<u;++a)(c=e[a])&&l.get(h[a])===c&&(i[a]=c)}function tn(t){return t.__data__}function en(t,e){if(!arguments.length)return Array.from(this,tn);var n=e?je:Ze,r=this._parents,i=this._groups;typeof t!="function"&&(t=Qe(t));for(var o=i.length,s=new Array(o),a=new Array(o),c=new Array(o),l=0;l<o;++l){var u=r[l],f=i[l],h=f.length,d=nn(t.call(u,u&&u.__data__,l,r)),_=d.length,m=a[l]=new Array(_),w=s[l]=new Array(_),D=c[l]=new Array(h);n(u,f,m,w,D,d,e);for(var H=0,b=0,S,R;H<_;++H)if(S=m[H]){for(H>=b&&(b=H+1);!(R=w[b])&&++b<_;);S._next=R||null}}return s=new x(s,r),s._enter=a,s._exit=c,s}function nn(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function rn(){return new x(this._exit||this._groups.map(ce),this._parents)}function on(t,e,n){var r=this.enter(),i=this,o=this.exit();return typeof t=="function"?(r=t(r),r&&(r=r.selection())):r=r.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),n==null?o.remove():n(o),r&&i?r.merge(i).order():i}function sn(t){for(var e=t.selection?t.selection():t,n=this._groups,r=e._groups,i=n.length,o=r.length,s=Math.min(i,o),a=new Array(i),c=0;c<s;++c)for(var l=n[c],u=r[c],f=l.length,h=a[c]=new Array(f),d,_=0;_<f;++_)(d=l[_]||u[_])&&(h[_]=d);for(;c<i;++c)a[c]=n[c];return new x(a,this._parents)}function an(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r=t[e],i=r.length-1,o=r[i],s;--i>=0;)(s=r[i])&&(o&&s.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(s,o),o=s);return this}function cn(t){t||(t=ln);function e(f,h){return f&&h?t(f.__data__,h.__data__):!f-!h}for(var n=this._groups,r=n.length,i=new Array(r),o=0;o<r;++o){for(var s=n[o],a=s.length,c=i[o]=new Array(a),l,u=0;u<a;++u)(l=s[u])&&(c[u]=l);c.sort(e)}return new x(i,this._parents).order()}function ln(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function un(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function fn(){return Array.from(this)}function hn(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,o=r.length;i<o;++i){var s=r[i];if(s)return s}return null}function pn(){let t=0;for(const e of this)++t;return t}function dn(){return!this.node()}function gn(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i=e[n],o=0,s=i.length,a;o<s;++o)(a=i[o])&&t.call(a,a.__data__,o,i);return this}function _n(t){return function(){this.removeAttribute(t)}}function mn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function yn(t,e){return function(){this.setAttribute(t,e)}}function wn(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function xn(t,e){return function(){var n=e.apply(this,arguments);n==null?this.removeAttribute(t):this.setAttribute(t,n)}}function vn(t,e){return function(){var n=e.apply(this,arguments);n==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function bn(t,e){var n=ft(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((e==null?n.local?mn:_n:typeof e=="function"?n.local?vn:xn:n.local?wn:yn)(n,e))}function le(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Nn(t){return function(){this.style.removeProperty(t)}}function An(t,e,n){return function(){this.style.setProperty(t,e,n)}}function $n(t,e,n){return function(){var r=e.apply(this,arguments);r==null?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function En(t,e,n){return arguments.length>1?this.each((e==null?Nn:typeof e=="function"?$n:An)(t,e,n??"")):L(this.node(),t)}function L(t,e){return t.style.getPropertyValue(e)||le(t).getComputedStyle(t,null).getPropertyValue(e)}function Sn(t){return function(){delete this[t]}}function kn(t,e){return function(){this[t]=e}}function Cn(t,e){return function(){var n=e.apply(this,arguments);n==null?delete this[t]:this[t]=n}}function Tn(t,e){return arguments.length>1?this.each((e==null?Sn:typeof e=="function"?Cn:kn)(t,e)):this.node()[t]}function ue(t){return t.trim().split(/^|\s+/)}function St(t){return t.classList||new fe(t)}function fe(t){this._node=t,this._names=ue(t.getAttribute("class")||"")}fe.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function he(t,e){for(var n=St(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function pe(t,e){for(var n=St(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function Mn(t){return function(){he(this,t)}}function Rn(t){return function(){pe(this,t)}}function In(t,e){return function(){(e.apply(this,arguments)?he:pe)(this,t)}}function Xn(t,e){var n=ue(t+"");if(arguments.length<2){for(var r=St(this.node()),i=-1,o=n.length;++i<o;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof e=="function"?In:e?Mn:Rn)(n,e))}function Fn(){this.textContent=""}function Hn(t){return function(){this.textContent=t}}function Pn(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function Ln(t){return arguments.length?this.each(t==null?Fn:(typeof t=="function"?Pn:Hn)(t)):this.node().textContent}function On(){this.innerHTML=""}function Dn(t){return function(){this.innerHTML=t}}function Yn(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function qn(t){return arguments.length?this.each(t==null?On:(typeof t=="function"?Yn:Dn)(t)):this.node().innerHTML}function Bn(){this.nextSibling&&this.parentNode.appendChild(this)}function Vn(){return this.each(Bn)}function zn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Un(){return this.each(zn)}function Gn(t){var e=typeof t=="function"?t:ie(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}function Kn(){return null}function Wn(t,e){var n=typeof t=="function"?t:ie(t),r=e==null?Kn:typeof e=="function"?e:Et(e);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function Jn(){var t=this.parentNode;t&&t.removeChild(this)}function Qn(){return this.each(Jn)}function Zn(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function jn(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function tr(t){return this.select(t?jn:Zn)}function er(t){return arguments.length?this.property("__data__",t):this.node().__data__}function nr(t){return function(e){t.call(this,e,this.__data__)}}function rr(t){return t.trim().split(/^|\s+/).map(function(e){var n="",r=e.indexOf(".");return r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),{type:e,name:n}})}function ir(t){return function(){var e=this.__on;if(e){for(var n=0,r=-1,i=e.length,o;n<i;++n)o=e[n],(!t.type||o.type===t.type)&&o.name===t.name?this.removeEventListener(o.type,o.listener,o.options):e[++r]=o;++r?e.length=r:delete this.__on}}}function or(t,e,n){return function(){var r=this.__on,i,o=nr(e);if(r){for(var s=0,a=r.length;s<a;++s)if((i=r[s]).type===t.type&&i.name===t.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=o,i.options=n),i.value=e;return}}this.addEventListener(t.type,o,n),i={type:t.type,name:t.name,value:e,listener:o,options:n},r?r.push(i):this.__on=[i]}}function sr(t,e,n){var r=rr(t+""),i,o=r.length,s;if(arguments.length<2){var a=this.node().__on;if(a){for(var c=0,l=a.length,u;c<l;++c)for(i=0,u=a[c];i<o;++i)if((s=r[i]).type===u.type&&s.name===u.name)return u.value}return}for(a=e?or:ir,i=0;i<o;++i)this.each(a(r[i],e,n));return this}function de(t,e,n){var r=le(t),i=r.CustomEvent;typeof i=="function"?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function ar(t,e){return function(){return de(this,t,e)}}function cr(t,e){return function(){return de(this,t,e.apply(this,arguments))}}function lr(t,e){return this.each((typeof e=="function"?cr:ar)(t,e))}function*ur(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,o=r.length,s;i<o;++i)(s=r[i])&&(yield s)}var ge=[null];function x(t,e){this._groups=t,this._parents=e}function Q(){return new x([[document.documentElement]],ge)}function fr(){return this}x.prototype=Q.prototype={constructor:x,select:He,selectAll:De,selectChild:Ve,selectChildren:Ke,filter:We,data:en,enter:Je,exit:rn,join:on,merge:sn,selection:fr,order:an,sort:cn,call:un,nodes:fn,node:hn,size:pn,empty:dn,each:gn,attr:bn,style:En,property:Tn,classed:Xn,text:Ln,html:qn,raise:Vn,lower:Un,append:Gn,insert:Wn,remove:Qn,clone:tr,datum:er,on:sr,dispatch:lr,[Symbol.iterator]:ur};function qt(t){return typeof t=="string"?new x([[document.querySelector(t)]],[document.documentElement]):new x([[t]],ge)}function kt(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function _e(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Z(){}var G=.7,st=1/G,P="\\s*([+-]?\\d+)\\s*",K="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",$="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",hr=/^#([0-9a-f]{3,8})$/,pr=new RegExp(`^rgb\\(${P},${P},${P}\\)$`),dr=new RegExp(`^rgb\\(${$},${$},${$}\\)$`),gr=new RegExp(`^rgba\\(${P},${P},${P},${K}\\)$`),_r=new RegExp(`^rgba\\(${$},${$},${$},${K}\\)$`),mr=new RegExp(`^hsl\\(${K},${$},${$}\\)$`),yr=new RegExp(`^hsla\\(${K},${$},${$},${K}\\)$`),Bt={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};kt(Z,W,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Vt,formatHex:Vt,formatHex8:wr,formatHsl:xr,formatRgb:zt,toString:zt});function Vt(){return this.rgb().formatHex()}function wr(){return this.rgb().formatHex8()}function xr(){return me(this).formatHsl()}function zt(){return this.rgb().formatRgb()}function W(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=hr.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?Ut(e):n===3?new y(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?j(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?j(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=pr.exec(t))?new y(e[1],e[2],e[3],1):(e=dr.exec(t))?new y(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=gr.exec(t))?j(e[1],e[2],e[3],e[4]):(e=_r.exec(t))?j(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=mr.exec(t))?Wt(e[1],e[2]/100,e[3]/100,1):(e=yr.exec(t))?Wt(e[1],e[2]/100,e[3]/100,e[4]):Bt.hasOwnProperty(t)?Ut(Bt[t]):t==="transparent"?new y(NaN,NaN,NaN,0):null}function Ut(t){return new y(t>>16&255,t>>8&255,t&255,1)}function j(t,e,n,r){return r<=0&&(t=e=n=NaN),new y(t,e,n,r)}function vr(t){return t instanceof Z||(t=W(t)),t?(t=t.rgb(),new y(t.r,t.g,t.b,t.opacity)):new y}function yt(t,e,n,r){return arguments.length===1?vr(t):new y(t,e,n,r??1)}function y(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}kt(y,yt,_e(Z,{brighter(t){return t=t==null?st:Math.pow(st,t),new y(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?G:Math.pow(G,t),new y(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new y(X(this.r),X(this.g),X(this.b),at(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:Gt,formatHex:Gt,formatHex8:br,formatRgb:Kt,toString:Kt}));function Gt(){return`#${I(this.r)}${I(this.g)}${I(this.b)}`}function br(){return`#${I(this.r)}${I(this.g)}${I(this.b)}${I((isNaN(this.opacity)?1:this.opacity)*255)}`}function Kt(){const t=at(this.opacity);return`${t===1?"rgb(":"rgba("}${X(this.r)}, ${X(this.g)}, ${X(this.b)}${t===1?")":`, ${t})`}`}function at(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function X(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function I(t){return t=X(t),(t<16?"0":"")+t.toString(16)}function Wt(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new N(t,e,n,r)}function me(t){if(t instanceof N)return new N(t.h,t.s,t.l,t.opacity);if(t instanceof Z||(t=W(t)),!t)return new N;if(t instanceof N)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),s=NaN,a=o-i,c=(o+i)/2;return a?(e===o?s=(n-r)/a+(n<r)*6:n===o?s=(r-e)/a+2:s=(e-n)/a+4,a/=c<.5?o+i:2-o-i,s*=60):a=c>0&&c<1?0:s,new N(s,a,c,t.opacity)}function Nr(t,e,n,r){return arguments.length===1?me(t):new N(t,e,n,r??1)}function N(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}kt(N,Nr,_e(Z,{brighter(t){return t=t==null?st:Math.pow(st,t),new N(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?G:Math.pow(G,t),new N(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new y(gt(t>=240?t-240:t+120,i,r),gt(t,i,r),gt(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new N(Jt(this.h),tt(this.s),tt(this.l),at(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(){const t=at(this.opacity);return`${t===1?"hsl(":"hsla("}${Jt(this.h)}, ${tt(this.s)*100}%, ${tt(this.l)*100}%${t===1?")":`, ${t})`}`}}));function Jt(t){return t=(t||0)%360,t<0?t+360:t}function tt(t){return Math.max(0,Math.min(1,t||0))}function gt(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const ye=t=>()=>t;function Ar(t,e){return function(n){return t+n*e}}function $r(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}function Er(t){return(t=+t)==1?we:function(e,n){return n-e?$r(e,n,t):ye(isNaN(e)?n:e)}}function we(t,e){var n=e-t;return n?Ar(t,n):ye(isNaN(t)?e:t)}const Qt=(function t(e){var n=Er(e);function r(i,o){var s=n((i=yt(i)).r,(o=yt(o)).r),a=n(i.g,o.g),c=n(i.b,o.b),l=we(i.opacity,o.opacity);return function(u){return i.r=s(u),i.g=a(u),i.b=c(u),i.opacity=l(u),i+""}}return r.gamma=t,r})(1);function T(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var wt=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,_t=new RegExp(wt.source,"g");function Sr(t){return function(){return t}}function kr(t){return function(e){return t(e)+""}}function Cr(t,e){var n=wt.lastIndex=_t.lastIndex=0,r,i,o,s=-1,a=[],c=[];for(t=t+"",e=e+"";(r=wt.exec(t))&&(i=_t.exec(e));)(o=i.index)>n&&(o=e.slice(n,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,c.push({i:s,x:T(r,i)})),n=_t.lastIndex;return n<e.length&&(o=e.slice(n),a[s]?a[s]+=o:a[++s]=o),a.length<2?c[0]?kr(c[0].x):Sr(e):(e=c.length,function(l){for(var u=0,f;u<e;++u)a[(f=c[u]).i]=f.x(l);return a.join("")})}var Zt=180/Math.PI,xt={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function xe(t,e,n,r,i,o){var s,a,c;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(a=Math.sqrt(n*n+r*r))&&(n/=a,r/=a,c/=a),t*r<e*n&&(t=-t,e=-e,c=-c,s=-s),{translateX:i,translateY:o,rotate:Math.atan2(e,t)*Zt,skewX:Math.atan(c)*Zt,scaleX:s,scaleY:a}}var et;function Tr(t){const e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?xt:xe(e.a,e.b,e.c,e.d,e.e,e.f)}function Mr(t){return t==null||(et||(et=document.createElementNS("http://www.w3.org/2000/svg","g")),et.setAttribute("transform",t),!(t=et.transform.baseVal.consolidate()))?xt:(t=t.matrix,xe(t.a,t.b,t.c,t.d,t.e,t.f))}function ve(t,e,n,r){function i(l){return l.length?l.pop()+" ":""}function o(l,u,f,h,d,_){if(l!==f||u!==h){var m=d.push("translate(",null,e,null,n);_.push({i:m-4,x:T(l,f)},{i:m-2,x:T(u,h)})}else(f||h)&&d.push("translate("+f+e+h+n)}function s(l,u,f,h){l!==u?(l-u>180?u+=360:u-l>180&&(l+=360),h.push({i:f.push(i(f)+"rotate(",null,r)-2,x:T(l,u)})):u&&f.push(i(f)+"rotate("+u+r)}function a(l,u,f,h){l!==u?h.push({i:f.push(i(f)+"skewX(",null,r)-2,x:T(l,u)}):u&&f.push(i(f)+"skewX("+u+r)}function c(l,u,f,h,d,_){if(l!==f||u!==h){var m=d.push(i(d)+"scale(",null,",",null,")");_.push({i:m-4,x:T(l,f)},{i:m-2,x:T(u,h)})}else(f!==1||h!==1)&&d.push(i(d)+"scale("+f+","+h+")")}return function(l,u){var f=[],h=[];return l=t(l),u=t(u),o(l.translateX,l.translateY,u.translateX,u.translateY,f,h),s(l.rotate,u.rotate,f,h),a(l.skewX,u.skewX,f,h),c(l.scaleX,l.scaleY,u.scaleX,u.scaleY,f,h),l=u=null,function(d){for(var _=-1,m=h.length,w;++_<m;)f[(w=h[_]).i]=w.x(d);return f.join("")}}}var Rr=ve(Tr,"px, ","px)","deg)"),Ir=ve(Mr,", ",")",")"),O=0,B=0,q=0,be=1e3,ct,V,lt=0,F=0,ht=0,J=typeof performance=="object"&&performance.now?performance:Date,Ne=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Ct(){return F||(Ne(Xr),F=J.now()+ht)}function Xr(){F=0}function ut(){this._call=this._time=this._next=null}ut.prototype=Ae.prototype={constructor:ut,restart:function(t,e,n){if(typeof t!="function")throw new TypeError("callback is not a function");n=(n==null?Ct():+n)+(e==null?0:+e),!this._next&&V!==this&&(V?V._next=this:ct=this,V=this),this._call=t,this._time=n,vt()},stop:function(){this._call&&(this._call=null,this._time=1/0,vt())}};function Ae(t,e,n){var r=new ut;return r.restart(t,e,n),r}function Fr(){Ct(),++O;for(var t=ct,e;t;)(e=F-t._time)>=0&&t._call.call(void 0,e),t=t._next;--O}function jt(){F=(lt=J.now())+ht,O=B=0;try{Fr()}finally{O=0,Pr(),F=0}}function Hr(){var t=J.now(),e=t-lt;e>be&&(ht-=e,lt=t)}function Pr(){for(var t,e=ct,n,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:ct=n);V=t,vt(r)}function vt(t){if(!O){B&&(B=clearTimeout(B));var e=t-F;e>24?(t<1/0&&(B=setTimeout(jt,t-J.now()-ht)),q&&(q=clearInterval(q))):(q||(lt=J.now(),q=setInterval(Hr,be)),O=1,Ne(jt))}}function te(t,e,n){var r=new ut;return e=e==null?0:+e,r.restart(i=>{r.stop(),t(i+e)},e,n),r}var Lr=re("start","end","cancel","interrupt"),Or=[],$e=0,ee=1,bt=2,rt=3,ne=4,Nt=5,it=6;function pt(t,e,n,r,i,o){var s=t.__transition;if(!s)t.__transition={};else if(n in s)return;Dr(t,n,{name:e,index:r,group:i,on:Lr,tween:Or,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:$e})}function Tt(t,e){var n=A(t,e);if(n.state>$e)throw new Error("too late; already scheduled");return n}function E(t,e){var n=A(t,e);if(n.state>rt)throw new Error("too late; already running");return n}function A(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function Dr(t,e,n){var r=t.__transition,i;r[e]=n,n.timer=Ae(o,0,n.time);function o(l){n.state=ee,n.timer.restart(s,n.delay,n.time),n.delay<=l&&s(l-n.delay)}function s(l){var u,f,h,d;if(n.state!==ee)return c();for(u in r)if(d=r[u],d.name===n.name){if(d.state===rt)return te(s);d.state===ne?(d.state=it,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete r[u]):+u<e&&(d.state=it,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete r[u])}if(te(function(){n.state===rt&&(n.state=ne,n.timer.restart(a,n.delay,n.time),a(l))}),n.state=bt,n.on.call("start",t,t.__data__,n.index,n.group),n.state===bt){for(n.state=rt,i=new Array(h=n.tween.length),u=0,f=-1;u<h;++u)(d=n.tween[u].value.call(t,t.__data__,n.index,n.group))&&(i[++f]=d);i.length=f+1}}function a(l){for(var u=l<n.duration?n.ease.call(null,l/n.duration):(n.timer.restart(c),n.state=Nt,1),f=-1,h=i.length;++f<h;)i[f].call(t,u);n.state===Nt&&(n.on.call("end",t,t.__data__,n.index,n.group),c())}function c(){n.state=it,n.timer.stop(),delete r[e];for(var l in r)return;delete t.__transition}}function Yr(t,e){var n=t.__transition,r,i,o=!0,s;if(n){e=e==null?null:e+"";for(s in n){if((r=n[s]).name!==e){o=!1;continue}i=r.state>bt&&r.state<Nt,r.state=it,r.timer.stop(),r.on.call(i?"interrupt":"cancel",t,t.__data__,r.index,r.group),delete n[s]}o&&delete t.__transition}}function qr(t){return this.each(function(){Yr(this,t)})}function Br(t,e){var n,r;return function(){var i=E(this,t),o=i.tween;if(o!==n){r=n=o;for(var s=0,a=r.length;s<a;++s)if(r[s].name===e){r=r.slice(),r.splice(s,1);break}}i.tween=r}}function Vr(t,e,n){var r,i;if(typeof n!="function")throw new Error;return function(){var o=E(this,t),s=o.tween;if(s!==r){i=(r=s).slice();for(var a={name:e,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===e){i[c]=a;break}c===l&&i.push(a)}o.tween=i}}function zr(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r=A(this.node(),n).tween,i=0,o=r.length,s;i<o;++i)if((s=r[i]).name===t)return s.value;return null}return this.each((e==null?Br:Vr)(n,t,e))}function Mt(t,e,n){var r=t._id;return t.each(function(){var i=E(this,r);(i.value||(i.value={}))[e]=n.apply(this,arguments)}),function(i){return A(i,r).value[e]}}function Ee(t,e){var n;return(typeof e=="number"?T:e instanceof W?Qt:(n=W(e))?(e=n,Qt):Cr)(t,e)}function Ur(t){return function(){this.removeAttribute(t)}}function Gr(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Kr(t,e,n){var r,i=n+"",o;return function(){var s=this.getAttribute(t);return s===i?null:s===r?o:o=e(r=s,n)}}function Wr(t,e,n){var r,i=n+"",o;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===r?o:o=e(r=s,n)}}function Jr(t,e,n){var r,i,o;return function(){var s,a=n(this),c;return a==null?void this.removeAttribute(t):(s=this.getAttribute(t),c=a+"",s===c?null:s===r&&c===i?o:(i=c,o=e(r=s,a)))}}function Qr(t,e,n){var r,i,o;return function(){var s,a=n(this),c;return a==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),c=a+"",s===c?null:s===r&&c===i?o:(i=c,o=e(r=s,a)))}}function Zr(t,e){var n=ft(t),r=n==="transform"?Ir:Ee;return this.attrTween(t,typeof e=="function"?(n.local?Qr:Jr)(n,r,Mt(this,"attr."+t,e)):e==null?(n.local?Gr:Ur)(n):(n.local?Wr:Kr)(n,r,e))}function jr(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}function ti(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}function ei(t,e){var n,r;function i(){var o=e.apply(this,arguments);return o!==r&&(n=(r=o)&&ti(t,o)),n}return i._value=e,i}function ni(t,e){var n,r;function i(){var o=e.apply(this,arguments);return o!==r&&(n=(r=o)&&jr(t,o)),n}return i._value=e,i}function ri(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;var r=ft(t);return this.tween(n,(r.local?ei:ni)(r,e))}function ii(t,e){return function(){Tt(this,t).delay=+e.apply(this,arguments)}}function oi(t,e){return e=+e,function(){Tt(this,t).delay=e}}function si(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?ii:oi)(e,t)):A(this.node(),e).delay}function ai(t,e){return function(){E(this,t).duration=+e.apply(this,arguments)}}function ci(t,e){return e=+e,function(){E(this,t).duration=e}}function li(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?ai:ci)(e,t)):A(this.node(),e).duration}function ui(t,e){if(typeof e!="function")throw new Error;return function(){E(this,t).ease=e}}function fi(t){var e=this._id;return arguments.length?this.each(ui(e,t)):A(this.node(),e).ease}function hi(t,e){return function(){var n=e.apply(this,arguments);if(typeof n!="function")throw new Error;E(this,t).ease=n}}function pi(t){if(typeof t!="function")throw new Error;return this.each(hi(this._id,t))}function di(t){typeof t!="function"&&(t=se(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var o=e[i],s=o.length,a=r[i]=[],c,l=0;l<s;++l)(c=o[l])&&t.call(c,c.__data__,l,o)&&a.push(c);return new C(r,this._parents,this._name,this._id)}function gi(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,o=Math.min(r,i),s=new Array(r),a=0;a<o;++a)for(var c=e[a],l=n[a],u=c.length,f=s[a]=new Array(u),h,d=0;d<u;++d)(h=c[d]||l[d])&&(f[d]=h);for(;a<r;++a)s[a]=e[a];return new C(s,this._parents,this._name,this._id)}function _i(t){return(t+"").trim().split(/^|\s+/).every(function(e){var n=e.indexOf(".");return n>=0&&(e=e.slice(0,n)),!e||e==="start"})}function mi(t,e,n){var r,i,o=_i(e)?Tt:E;return function(){var s=o(this,t),a=s.on;a!==r&&(i=(r=a).copy()).on(e,n),s.on=i}}function yi(t,e){var n=this._id;return arguments.length<2?A(this.node(),n).on.on(t):this.each(mi(n,t,e))}function wi(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}function xi(){return this.on("end.remove",wi(this._id))}function vi(t){var e=this._name,n=this._id;typeof t!="function"&&(t=Et(t));for(var r=this._groups,i=r.length,o=new Array(i),s=0;s<i;++s)for(var a=r[s],c=a.length,l=o[s]=new Array(c),u,f,h=0;h<c;++h)(u=a[h])&&(f=t.call(u,u.__data__,h,a))&&("__data__"in u&&(f.__data__=u.__data__),l[h]=f,pt(l[h],e,n,h,l,A(u,n)));return new C(o,this._parents,e,n)}function bi(t){var e=this._name,n=this._id;typeof t!="function"&&(t=oe(t));for(var r=this._groups,i=r.length,o=[],s=[],a=0;a<i;++a)for(var c=r[a],l=c.length,u,f=0;f<l;++f)if(u=c[f]){for(var h=t.call(u,u.__data__,f,c),d,_=A(u,n),m=0,w=h.length;m<w;++m)(d=h[m])&&pt(d,e,n,m,h,_);o.push(h),s.push(u)}return new C(o,s,e,n)}var Ni=Q.prototype.constructor;function Ai(){return new Ni(this._groups,this._parents)}function $i(t,e){var n,r,i;return function(){var o=L(this,t),s=(this.style.removeProperty(t),L(this,t));return o===s?null:o===n&&s===r?i:i=e(n=o,r=s)}}function Se(t){return function(){this.style.removeProperty(t)}}function Ei(t,e,n){var r,i=n+"",o;return function(){var s=L(this,t);return s===i?null:s===r?o:o=e(r=s,n)}}function Si(t,e,n){var r,i,o;return function(){var s=L(this,t),a=n(this),c=a+"";return a==null&&(c=a=(this.style.removeProperty(t),L(this,t))),s===c?null:s===r&&c===i?o:(i=c,o=e(r=s,a))}}function ki(t,e){var n,r,i,o="style."+e,s="end."+o,a;return function(){var c=E(this,t),l=c.on,u=c.value[o]==null?a||(a=Se(e)):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(s,i=u),c.on=r}}function Ci(t,e,n){var r=(t+="")=="transform"?Rr:Ee;return e==null?this.styleTween(t,$i(t,r)).on("end.style."+t,Se(t)):typeof e=="function"?this.styleTween(t,Si(t,r,Mt(this,"style."+t,e))).each(ki(this._id,t)):this.styleTween(t,Ei(t,r,e),n).on("end.style."+t,null)}function Ti(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Mi(t,e,n){var r,i;function o(){var s=e.apply(this,arguments);return s!==i&&(r=(i=s)&&Ti(t,s,n)),r}return o._value=e,o}function Ri(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;return this.tween(r,Mi(t,e,n??""))}function Ii(t){return function(){this.textContent=t}}function Xi(t){return function(){var e=t(this);this.textContent=e??""}}function Fi(t){return this.tween("text",typeof t=="function"?Xi(Mt(this,"text",t)):Ii(t==null?"":t+""))}function Hi(t){return function(e){this.textContent=t.call(this,e)}}function Pi(t){var e,n;function r(){var i=t.apply(this,arguments);return i!==n&&(e=(n=i)&&Hi(i)),e}return r._value=t,r}function Li(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Pi(t))}function Oi(){for(var t=this._name,e=this._id,n=ke(),r=this._groups,i=r.length,o=0;o<i;++o)for(var s=r[o],a=s.length,c,l=0;l<a;++l)if(c=s[l]){var u=A(c,e);pt(c,t,n,l,s,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new C(r,this._parents,t,n)}function Di(){var t,e,n=this,r=n._id,i=n.size();return new Promise(function(o,s){var a={value:s},c={value:function(){--i===0&&o()}};n.each(function(){var l=E(this,r),u=l.on;u!==t&&(e=(t=u).copy(),e._.cancel.push(a),e._.interrupt.push(a),e._.end.push(c)),l.on=e}),i===0&&o()})}var Yi=0;function C(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function ke(){return++Yi}var k=Q.prototype;C.prototype={constructor:C,select:vi,selectAll:bi,selectChild:k.selectChild,selectChildren:k.selectChildren,filter:di,merge:gi,selection:Ai,transition:Oi,call:k.call,nodes:k.nodes,node:k.node,size:k.size,empty:k.empty,each:k.each,on:yi,attr:Zr,attrTween:ri,style:Ci,styleTween:Ri,text:Fi,textTween:Li,remove:xi,tween:zr,delay:si,duration:li,ease:fi,easeVarying:pi,end:Di,[Symbol.iterator]:k[Symbol.iterator]};function qi(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var Bi={time:null,delay:0,duration:250,ease:qi};function Vi(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}function zi(t){var e,n;t instanceof C?(e=t._id,t=t._name):(e=ke(),(n=Bi).time=Ct(),t=t==null?null:t+"");for(var r=this._groups,i=r.length,o=0;o<i;++o)for(var s=r[o],a=s.length,c,l=0;l<a;++l)(c=s[l])&&pt(c,t,e,l,s,n||Vi(c,e));return new C(r,this._parents,t,e)}Q.prototype.interrupt=qr;Q.prototype.transition=zi;function z(t,e,n){this.k=t,this.x=e,this.y=n}z.prototype={constructor:z,scale:function(t){return t===1?this:new z(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new z(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};z.prototype;let M=[],U=[],At=new Map;async function Ui(){const t=await window.gitopo.git.exec('log --all --format="%H|%P|%ct|%s" --date-order -1000');if(!t.success)return console.error("Failed to fetch commits:",t.error),[];const e=[],n=t.output.trim().split(`
|
|
2
|
+
`);for(const r of n){const i=r.split("|");if(i.length>=4){const o=i[0],s=i[1],a=parseInt(i[2],10),c=i.slice(3).join("|"),l=s.trim()?s.trim().split(" "):[];e.push({hash:o,parents:l,timestamp:a,message:c})}}return e.sort((r,i)=>i.timestamp-r.timestamp),e}async function Gi(){const t=await window.gitopo.git.exec('branch -a --format="%(refname:short) %(objectname)"');if(!t.success)return console.error("Failed to fetch branches:",t.error),[];const e=[],n=t.output.trim().split(`
|
|
3
|
+
`);for(const r of n){const i=r.trim().split(" ");if(i.length>=2){const o=i[0],s=i[1];e.push({name:o,hash:s})}}return e}function Ki(t){const e=["branch1","branch2","branch3"],n=t.find(r=>r.name==="main"||r.name==="master");e.forEach((r,i)=>{const o=document.getElementById(r);o.innerHTML="";const s=document.createElement("option");s.value="",s.textContent="----",o.appendChild(s),t.forEach(a=>{const c=document.createElement("option");c.value=a.name,c.textContent=a.name,o.appendChild(c)}),i===0&&n&&(o.value=n.name),o.addEventListener("change",()=>$t())})}function Wi(t){const e=U.find(i=>i.name===t);if(!e)return new Set;const n=new Set;let r=e.hash;for(;r;){n.add(r);const i=At.get(r);if(i&&i.parents.length>0)r=i.parents[0];else break}return n}function Ji(){const t=[];return["branch1","branch2","branch3"].forEach(e=>{const n=document.getElementById(e);n&&n.value&&t.push(n.value)}),t}function $t(){const t=qt("#graph");t.selectAll("*").remove();const e=qt("#app");e.selectAll(".tooltip").remove();const n=document.getElementById("controls").offsetHeight,r=window.innerWidth,i=window.innerHeight-n;t.attr("width",r).attr("height",i);const o=6,s=30,a=150,c=50,l=50,f=Ji().map(p=>({name:p,lineage:Wi(p)})),h=new Map;U.forEach(p=>{h.has(p.hash)||h.set(p.hash,[]),h.get(p.hash).push(p.name)});const d=new Map;M.forEach(p=>{let g=-1;for(let v=0;v<f.length;v++)if(f[v].lineage.has(p.hash)){g=v;break}g===-1&&(g=f.length),d.set(p.hash,g)});const _=new Map;M.forEach((p,g)=>{const v=d.get(p.hash);_.set(p.hash,{col:v,row:g,x:l+v*a,y:c+g*s})}),M.length*s+c*2;const m=Array.from(d.values()).some(p=>p===f.length),w=t.append("g").attr("class","main-group"),D=e.append("div").attr("class","tooltip").style("opacity",0);f.forEach((p,g)=>{w.append("text").attr("x",l+g*a).attr("y",25).attr("fill","#4fc3f7").attr("font-size","14px").attr("font-weight","bold").text(p.name)}),m&&w.append("text").attr("x",l+f.length*a).attr("y",25).attr("fill","#888").attr("font-size","14px").text("Other"),M.forEach(p=>{const g=_.get(p.hash);g&&p.parents.forEach(v=>{const Y=_.get(v);Y&&w.append("line").attr("x1",g.x).attr("y1",g.y).attr("x2",Y.x).attr("y2",Y.y).attr("stroke","#666").attr("stroke-width",1.5).attr("stroke-opacity",.6)})}),w.selectAll("g.node").data(M).enter().append("g").attr("class","node").attr("transform",p=>{const g=_.get(p.hash);return g?`translate(${g.x}, ${g.y})`:"translate(-100, -100)"}).append("circle").attr("r",p=>d.get(p.hash)<f.length?o:o*.7).attr("fill",p=>d.get(p.hash)<f.length?h.has(p.hash)?"#4fc3f7":"#fff":"#888").attr("stroke","#333").attr("stroke-width",p=>d.get(p.hash)<f.length?2:1).style("cursor","pointer").on("mouseenter",(p,g)=>{const v=h.get(g.hash),Y=v?`[${v.join(", ")}]<br/>`:"",Ce=new Date(g.timestamp*1e3).toLocaleString();D.html(`<strong>${g.hash.substring(0,7)}</strong><br/>${Y}${g.message}<br/><span class="date">${Ce}</span>`).style("left",p.pageX+15+"px").style("top",p.pageY-10+"px").style("opacity",1)}).on("mousemove",p=>{D.style("left",p.pageX+15+"px").style("top",p.pageY-10+"px")}).on("mouseleave",()=>{D.style("opacity",0)});let b=0,S=0,R=!1,Rt=0,It=0,Xt=0,Ft=0;function dt(){w.attr("transform",`translate(${b}, ${S})`)}t.on("wheel",p=>{p.preventDefault(),b-=p.deltaX,S-=p.deltaY,dt()}),t.on("mousedown",p=>{p.button===0&&(R=!0,Rt=p.clientX,It=p.clientY,Xt=b,Ft=S,p.preventDefault())}),t.on("mousemove",p=>{R&&(b=Xt+(p.clientX-Rt),S=Ft+(p.clientY-It),dt())}),t.on("mouseup",p=>{p.button===0&&(R=!1)}),t.on("mouseleave",()=>{R=!1});let Ht=0,Pt=0,Lt=0,Ot=0;t.on("touchstart",p=>{if(p.touches.length===1){const g=p.touches[0];Ht=g.clientX,Pt=g.clientY,Lt=b,Ot=S}}),t.on("touchmove",p=>{if(p.touches.length===1){p.preventDefault();const g=p.touches[0];b=Lt+(g.clientX-Ht),S=Ot+(g.clientY-Pt),dt()}}),t.on("contextmenu",p=>{p.preventDefault()})}async function Qi(){[M,U]=await Promise.all([Ui(),Gi()]),At.clear(),M.forEach(t=>At.set(t.hash,t)),console.log("Commits:",M.length),console.log("Branches:",U.length),Ki(U),$t(),window.addEventListener("resize",()=>{$t()})}Qi();
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>gitopo</title>
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-DeuGEmKM.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="./assets/index-jDaMuPPI.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="loading">
|
|
12
|
+
<div class="loading-spinner"></div>
|
|
13
|
+
<div id="loading-status">Initializing...</div>
|
|
14
|
+
</div>
|
|
15
|
+
<div id="app">
|
|
16
|
+
<div id="controls">
|
|
17
|
+
<div id="repo-name"></div>
|
|
18
|
+
<div class="commit-limit">
|
|
19
|
+
<label>Commits:</label>
|
|
20
|
+
<input type="number" id="commit-limit" value="1000" min="1" max="100000000">
|
|
21
|
+
</div>
|
|
22
|
+
<div class="branch-selector">
|
|
23
|
+
<label>Branch 1:</label>
|
|
24
|
+
<select id="branch1"></select>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="branch-selector">
|
|
27
|
+
<label>Branch 2:</label>
|
|
28
|
+
<select id="branch2"></select>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="branch-selector">
|
|
31
|
+
<label>Branch 3:</label>
|
|
32
|
+
<select id="branch3"></select>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<svg id="graph"></svg>
|
|
36
|
+
</div>
|
|
37
|
+
</body>
|
|
38
|
+
</html>
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gitopo",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Topology-preserving Git commit graph visualizer to highlight key branches.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"gitopo": "./bin/gitopo.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin/",
|
|
10
|
+
"dist/",
|
|
11
|
+
"src/main/",
|
|
12
|
+
"docs/"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18.0.0"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"dev": "vite",
|
|
19
|
+
"build": "vite build",
|
|
20
|
+
"electron": "electron src/main/index.js",
|
|
21
|
+
"electron:dev": "NODE_ENV=development electron src/main/index.js",
|
|
22
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
23
|
+
"prepublishOnly": "npm run build"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/asial-matagawa/gitopo.git"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"git",
|
|
31
|
+
"commit-graph",
|
|
32
|
+
"graph",
|
|
33
|
+
"log",
|
|
34
|
+
"history",
|
|
35
|
+
"branch",
|
|
36
|
+
"visualize",
|
|
37
|
+
"topology",
|
|
38
|
+
"layout",
|
|
39
|
+
"mainline",
|
|
40
|
+
"release",
|
|
41
|
+
"staging",
|
|
42
|
+
"production",
|
|
43
|
+
"cli",
|
|
44
|
+
"npx"
|
|
45
|
+
],
|
|
46
|
+
"author": "Naoki Matagawa",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/asial-matagawa/gitopo/issues"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/asial-matagawa/gitopo#readme",
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"d3": "^7.9.0",
|
|
54
|
+
"electron": "^40.4.1",
|
|
55
|
+
"vite": "^7.3.1"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const { app, BrowserWindow, ipcMain } = require('electron');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const { execSync } = require('child_process');
|
|
5
|
+
|
|
6
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
7
|
+
|
|
8
|
+
// Get gitopo version from package.json
|
|
9
|
+
const gitopoPackageJson = JSON.parse(
|
|
10
|
+
fs.readFileSync(path.join(__dirname, '../../package.json'), 'utf-8')
|
|
11
|
+
);
|
|
12
|
+
const gitopoVersion = gitopoPackageJson.version;
|
|
13
|
+
|
|
14
|
+
let mainWindow;
|
|
15
|
+
|
|
16
|
+
function createWindow() {
|
|
17
|
+
mainWindow = new BrowserWindow({
|
|
18
|
+
width: 1200,
|
|
19
|
+
height: 800,
|
|
20
|
+
title: `gitopo ${gitopoVersion}`,
|
|
21
|
+
webPreferences: {
|
|
22
|
+
preload: path.join(__dirname, 'preload.js'),
|
|
23
|
+
contextIsolation: true,
|
|
24
|
+
nodeIntegration: false,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (isDev) {
|
|
29
|
+
mainWindow.loadURL('http://localhost:5273');
|
|
30
|
+
mainWindow.webContents.openDevTools();
|
|
31
|
+
} else {
|
|
32
|
+
mainWindow.loadFile(path.join(__dirname, '../../dist/renderer/index.html'));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Handle git command execution from renderer
|
|
37
|
+
ipcMain.handle('git:exec', async (event, args) => {
|
|
38
|
+
try {
|
|
39
|
+
const result = execSync(`git ${args}`, {
|
|
40
|
+
cwd: process.cwd(),
|
|
41
|
+
encoding: 'utf-8',
|
|
42
|
+
});
|
|
43
|
+
return { success: true, output: result };
|
|
44
|
+
} catch (error) {
|
|
45
|
+
return { success: false, error: error.message };
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Handle gh command execution from renderer
|
|
50
|
+
ipcMain.handle('gh:exec', async (event, args) => {
|
|
51
|
+
try {
|
|
52
|
+
const result = execSync(`gh ${args}`, {
|
|
53
|
+
cwd: process.cwd(),
|
|
54
|
+
encoding: 'utf-8',
|
|
55
|
+
});
|
|
56
|
+
return { success: true, output: result };
|
|
57
|
+
} catch (error) {
|
|
58
|
+
return { success: false, error: error.message };
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Handle config reading from package.json
|
|
63
|
+
ipcMain.handle('config:get', async () => {
|
|
64
|
+
try {
|
|
65
|
+
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
66
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
67
|
+
return { success: true, config: {} };
|
|
68
|
+
}
|
|
69
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
70
|
+
return { success: true, config: packageJson.gitopo || {} };
|
|
71
|
+
} catch (error) {
|
|
72
|
+
return { success: false, error: error.message, config: {} };
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Handle version request
|
|
77
|
+
ipcMain.handle('app:version', async () => {
|
|
78
|
+
return { success: true, version: gitopoVersion };
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
app.whenReady().then(createWindow);
|
|
82
|
+
|
|
83
|
+
app.on('window-all-closed', () => {
|
|
84
|
+
app.quit();
|
|
85
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const { contextBridge, ipcRenderer } = require('electron');
|
|
2
|
+
|
|
3
|
+
contextBridge.exposeInMainWorld('gitopo', {
|
|
4
|
+
git: {
|
|
5
|
+
exec: (args) => ipcRenderer.invoke('git:exec', args),
|
|
6
|
+
},
|
|
7
|
+
gh: {
|
|
8
|
+
exec: (args) => ipcRenderer.invoke('gh:exec', args),
|
|
9
|
+
},
|
|
10
|
+
config: {
|
|
11
|
+
get: () => ipcRenderer.invoke('config:get'),
|
|
12
|
+
},
|
|
13
|
+
app: {
|
|
14
|
+
getVersion: () => ipcRenderer.invoke('app:version'),
|
|
15
|
+
},
|
|
16
|
+
});
|