git-history-ui 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,34 @@ All notable changes to this project are documented in this file.
4
4
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
5
5
  this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [3.1.0] - 2026-05-02
8
+
9
+ Visual polish on top of v3.0 — d3 visualizations replace the placeholder
10
+ HTML/CSS charts, and the split diff view gets the niceties developers expect
11
+ from elite diff tools.
12
+
13
+ ### Added
14
+
15
+ - **d3 force-directed impact graph.** New `ImpactGraphComponent` renders
16
+ changed files, their JS/TS imports, and module groupings as a draggable
17
+ force-directed graph in the commit detail panel.
18
+ - **d3 hotspots treemap.** The Insights dashboard now renders hotspots as a
19
+ proportional treemap (cell size = commit count, color = saturation).
20
+ Cells are clickable and open the file's history view.
21
+ - **d3 churn chart.** Insights "Churn over time" upgraded from CSS bars to a
22
+ proper time-axis area chart with a smooth curve.
23
+ - **Side-by-side diff scroll-sync.** The split diff view now mirrors scroll
24
+ position and direction across both panes.
25
+ - **Intra-line word highlighting.** When a `del`/`add` line pair is shown
26
+ side-by-side, only the changed words are accented (not the whole line) —
27
+ uses an LCS word-tokenizer with a 20k character cap to stay snappy.
28
+
29
+ ### Changed
30
+
31
+ - The previous "list of dependency-ripple lines" inside the impact card has
32
+ been replaced with the interactive graph; the related-commits and modules
33
+ lists stay below it for screen-reader / keyboard users.
34
+
7
35
  ## [3.0.0] - 2026-05-02
8
36
 
9
37
  This release transforms `git-history-ui` from a "pretty git log" into a
@@ -0,0 +1,2 @@
1
+ import{a as Zt,b as Qt,c as an}from"./chunk-36NFLS3P.js";import{a as Kt}from"./chunk-R33W2FKN.js";import{a as Ht,b as Wt,c as $t,h as Ut}from"./chunk-YSTG766K.js";import{a as Yt}from"./chunk-NUMLL3OZ.js";import{a as G}from"./chunk-N7UHDKJ7.js";import{e as Xt,f as Jt,g as en,h as tn,i as nn,j as on,k as rn}from"./chunk-QUDEGJKI.js";import{d as Gt}from"./chunk-3FFYILBL.js";import{a as qt}from"./chunk-ITIFFECZ.js";import{$ as f,$a as Dt,Ab as _,B as mt,Bb as B,C as Ce,Cb as De,D as pt,Db as Vt,Ea as Se,Fb as qe,Ga as l,Gb as Ke,Hb as Xe,I as ft,Ia as yt,Ja as Qe,Jb as ce,Ka as St,Lb as de,Ma as Mt,Mb as me,N as gt,Ob as ke,P as ut,Pa as D,Q as Ze,Qa as ae,R as xe,Ra as J,Rb as Ft,S as be,Sa as Ye,Sb as te,Ta as v,Tb as j,V as ht,Va as Ot,W as V,Wa as se,Wb as zt,X as oe,Xa as Et,Xb as Lt,Z,Zb as At,ab as le,db as u,dc as $,e as st,ea as M,eb as s,ec as R,fa as O,fb as a,fc as Pe,g as Ue,ga as _t,gb as b,hb as kt,hc as T,i as lt,ib as Pt,j as N,ja as vt,jb as It,ka as we,kb as Me,la as Ct,lb as Oe,lc as Bt,m as ct,mb as F,mc as jt,n as dt,nb as w,nc as Ie,oa as x,ob as C,pb as Rt,q as W,qa as xt,qb as Tt,ra as bt,s as ve,sa as ye,sb as Q,tb as Y,ub as q,va as re,vb as Ee,wb as ee,xb as z,yb as Nt,za as wt,zb as c}from"./chunk-TQE5NWMZ.js";var Re=class i{http=f(Ie);base="/api";list(n){return this.http.get(`${this.base}/annotations/${n}`)}add(n,e,t){return this.http.post(`${this.base}/annotations/${n}`,{author:e,body:t})}remove(n,e){return this.http.delete(`${this.base}/annotations/${n}/${e}`)}static \u0275fac=function(e){return new(e||i)};static \u0275prov=V({token:i,factory:i.\u0275fac,providedIn:"root"})};var xn=["svg"];function bn(i,n){i&1&&(s(0,"div",8),c(1,"No graph data \u2014 changed files have no detectable internal imports."),a())}var Te=class i{impact=null;svgRef;simulation=null;hasData=!1;ngAfterViewInit(){this.render()}ngOnChanges(){this.render()}ngOnDestroy(){this.simulation?.stop()}render(){if(!this.svgRef)return;let n=this.svgRef.nativeElement,e=Xt(n);e.selectAll("*").remove();let t=this.impact;if(!t||t.dependencyRipple.length===0&&t.modules.length===0){this.hasData=!1;return}this.hasData=!0;let o=n.clientWidth||600,r=280,p=new Map,g=(m,I,P)=>{let y=p.get(m);return y||(y={id:m,group:I,label:P},p.set(m,y)),y};for(let m of t.files)g(`f:${m}`,"changed",Je(m));for(let m of t.modules)g(`m:${m}`,"module",m);for(let m of t.dependencyRipple)g(`f:${m.from}`,"changed",Je(m.from)),g(`f:${m.to}`,"imported",Je(m.to));let d=[];for(let m of t.dependencyRipple)d.push({source:`f:${m.from}`,target:`f:${m.to}`,type:"imports"});for(let m of t.files){let I=wn(m);t.modules.includes(I)&&d.push({source:`f:${m}`,target:`m:${I}`,type:"in-module"})}let h=Array.from(p.values()),E=e.append("g").attr("stroke","var(--border-strong)").attr("stroke-opacity",.5).selectAll("line").data(d).join("line").attr("stroke-dasharray",m=>m.type==="in-module"?"2,3":null),k=e.append("g").selectAll("circle").data(h).join("circle").attr("r",m=>m.group==="module"?7:5).attr("fill",m=>m.group==="changed"?"var(--accent)":m.group==="imported"?"#f59e0b":"#8b5cf6").attr("stroke","var(--bg-app)").attr("stroke-width",1.5).call(U());k.append("title").text(m=>m.id.slice(2));let _e=e.append("g").selectAll("text").data(h).join("text").attr("class","node-label").attr("dx",8).attr("dy",3).text(m=>m.label);this.simulation?.stop(),this.simulation=on(h).force("link",nn(d).id(m=>m.id).distance(60).strength(.4)).force("charge",rn().strength(-160)).force("center",en(o/2,r/2)).force("collide",tn(14)).on("tick",()=>{E.attr("x1",m=>m.source.x??0).attr("y1",m=>m.source.y??0).attr("x2",m=>m.target.x??0).attr("y2",m=>m.target.y??0),k.attr("cx",m=>m.x??0).attr("cy",m=>m.y??0),_e.attr("x",m=>m.x??0).attr("y",m=>m.y??0)});function U(){function m(y,S){y.active||window.__impactSim?.alphaTarget?.(.3).restart(),S.fx=S.x,S.fy=S.y}function I(y,S){S.fx=y.x,S.fy=y.y}function P(y,S){y.active||window.__impactSim?.alphaTarget?.(0),S.fx=null,S.fy=null}return Jt().on("start",m).on("drag",I).on("end",P)}window.__impactSim=this.simulation}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=D({type:i,selectors:[["app-impact-graph"]],viewQuery:function(e,t){if(e&1&&Q(xn,7),e&2){let o;Y(o=q())&&(t.svgRef=o.first)}},inputs:{impact:"impact"},features:[ye],decls:11,vars:1,consts:[["svg",""],[1,"legend"],[1,"dot","dot-changed"],[1,"dot","dot-imported"],[1,"dot","dot-module"],[1,"canvas-wrap"],["width","100%","height","280","aria-label","Commit impact graph"],["class","empty",4,"ngIf"],[1,"empty"]],template:function(e,t){e&1&&(s(0,"div",1),b(1,"span",2),c(2," changed "),b(3,"span",3),c(4," imports "),b(5,"span",4),c(6," module "),a(),s(7,"div",5),_t(),b(8,"svg",6,0),v(10,bn,2,0,"div",7),a()),e&2&&(l(10),u("ngIf",!t.hasData))},dependencies:[T,R],styles:["[_nghost-%COMP%]{display:block}.legend[_ngcontent-%COMP%]{display:flex;gap:.75rem;align-items:center;font-size:11px;color:var(--fg-muted);margin-bottom:.4rem}.dot[_ngcontent-%COMP%]{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}.dot-changed[_ngcontent-%COMP%]{background:var(--accent)}.dot-imported[_ngcontent-%COMP%]{background:#f59e0b}.dot-module[_ngcontent-%COMP%]{background:#8b5cf6}.canvas-wrap[_ngcontent-%COMP%]{position:relative;background:var(--bg-app);border-radius:var(--radius-sm);border:1px solid var(--border-soft);overflow:hidden}.empty[_ngcontent-%COMP%]{position:absolute;inset:0;display:grid;place-items:center;color:var(--fg-muted);font-size:11px;pointer-events:none}svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.node-label){font-size:9px;fill:var(--fg-secondary);font-family:var(--font-mono, monospace);pointer-events:none}"],changeDetection:0})};function Je(i){let n=i.split("/");return n[n.length-1]}function wn(i){let n=i.split("/");return n.length===1?"(root)":n.slice(0,Math.min(n.length-1,3)).join("/")}function yn(i,n){if(i&1&&(s(0,"span",36),c(1),a()),i&2){let e=n.$implicit;l(),_(e)}}function Sn(i,n){if(i&1&&(s(0,"span",37),c(1),a()),i&2){let e=n.$implicit;l(),_(e)}}function Mn(i,n){i&1&&(s(0,"span",38),c(1,"merge"),a())}function On(i,n){if(i&1&&(s(0,"pre",39),c(1),a()),i&2){let e=C().ngIf;l(),_(e.body)}}function En(i,n){if(i&1){let e=F();s(0,"div",40)(1,"span",41),c(2,"AI"),a(),s(3,"span",42),c(4),a(),s(5,"button",43),w("click",function(){M(e);let o=C(2);return O(o.explanation.set(null))}),c(6,"\xD7"),a()()}if(i&2){let e=n.ngIf;l(4),_(e)}}function Dn(i,n){if(i&1&&(s(0,"div",44),c(1),a()),i&2){let e=n.ngIf;l(),_(e)}}function kn(i,n){if(i&1&&(s(0,"li"),c(1),a()),i&2){let e=n.$implicit;l(),_(e)}}function Pn(i,n){if(i&1){let e=F();s(0,"li",28),w("click",function(){let o=M(e).$implicit,r=C(3);return O(r.state.selectHash(o.hash))}),s(1,"code"),c(2),a(),s(3,"span"),c(4),a()()}if(i&2){let e=n.$implicit;l(2),_(e.hash.slice(0,7)),l(2),_(e.subject)}}function In(i,n){if(i&1&&(s(0,"div",45)(1,"div",46)(2,"span"),c(3,"Impact"),a(),s(4,"span",47),c(5),a()(),b(6,"app-impact-graph",48),s(7,"div",49)(8,"div")(9,"h4"),c(10,"Modules"),a(),s(11,"ul",50),v(12,kn,2,1,"li",51),a()(),s(13,"div")(14,"h4"),c(15,"Related commits"),a(),s(16,"ul",52),v(17,Pn,5,2,"li",53),a()()()()),i&2){let e=n.ngIf;l(5),Vt(" ",e.files.length," files \xB7 ",e.modules.length," modules \xB7 ",e.relatedCommits.length," related commits "),l(),u("impact",e),l(6),u("ngForOf",e.modules),l(5),u("ngForOf",e.relatedCommits)}}function Rn(i,n){if(i&1&&(s(0,"span",54),c(1),a()),i&2){let e=C(2);l(),_(e.files().length)}}function Tn(i,n){if(i&1&&(s(0,"span",63),c(1),a()),i&2){let e=C().$implicit;l(),B("+",e.additions)}}function Nn(i,n){if(i&1&&(s(0,"span",64),c(1),a()),i&2){let e=C().$implicit;l(),B("\u2212",e.deletions)}}function Vn(i,n){if(i&1){let e=F();s(0,"div",55)(1,"button",56),w("click",function(){let o=M(e).$implicit,r=C(2);return O(r.selectFile(o))}),b(2,"span",57),s(3,"span",58),c(4),a(),s(5,"span",59),v(6,Tn,2,1,"span",60)(7,Nn,2,1,"span",61),a()(),s(8,"button",62),w("click",function(){let o=M(e).$implicit,r=C(2);return O(r.openFileHistory(o.file))}),c(9," \u23F1 "),a()()}if(i&2){let e,t=n.$implicit,o=C(2);l(),z("selected",t.file===((e=o.activeFile())==null?null:e.file)),l(),le("data-status",t.status),l(),u("title",t.file),l(),_(t.file),l(2),u("ngIf",t.additions),l(),u("ngIf",t.deletions)}}function Fn(i,n){i&1&&(s(0,"div",65),c(1," No files changed. "),a())}function zn(i,n){i&1&&(s(0,"div",65),c(1,"Loading\u2026"),a())}function Ln(i,n){if(i&1){let e=F();s(0,"div",66)(1,"div",67)(2,"strong"),c(3),a(),s(4,"span",68),c(5),de(6,"date"),a(),s(7,"button",69),w("click",function(){let o=M(e).$implicit,r=C(2);return O(r.deleteComment(o.id))}),c(8,"\xD7"),a()(),s(9,"p",70),c(10),a()()}if(i&2){let e=n.$implicit;l(3),_(e.author),l(2),_(me(6,3,e.createdAt,"short")),l(5),_(e.body)}}function An(i,n){if(i&1){let e=F();Me(0),s(1,"header",2)(2,"div",3)(3,"span",4),c(4),a(),s(5,"span",5),v(6,yn,2,1,"span",6)(7,Sn,2,1,"span",7)(8,Mn,2,0,"span",8),a()(),s(9,"h2",9),c(10),a(),s(11,"div",10)(12,"span"),c(13),a(),s(14,"span",11),c(15,"\u2022"),a(),s(16,"span"),c(17),de(18,"date"),a()(),v(19,On,2,1,"pre",12),s(20,"div",13)(21,"button",14),w("click",function(){M(e);let o=C();return O(o.onExplain())}),c(22),a(),s(23,"button",14),w("click",function(){M(e);let o=C();return O(o.onLoadImpact())}),c(24),a(),s(25,"button",15),w("click",function(){M(e);let o=C();return O(o.copyShareLink())}),c(26),a()(),v(27,En,7,1,"div",16)(28,Dn,2,1,"div",17),a(),v(29,In,18,6,"div",18),s(30,"div",19)(31,"aside",20)(32,"div",21)(33,"span"),c(34,"Files"),a(),v(35,Rn,2,1,"span",22),a(),s(36,"div",23),v(37,Vn,10,7,"div",24)(38,Fn,2,0,"div",25)(39,zn,2,0,"div",25),a()(),s(40,"section",26)(41,"details",27)(42,"summary",28),w("click",function(o){M(e);let r=C();return O(r.toggleAnnotations(o))}),c(43),a(),s(44,"div",29),v(45,Ln,11,6,"div",30),s(46,"div",31)(47,"input",32),Xe("ngModelChange",function(o){M(e);let r=C();return Ke(r.commentAuthor,o)||(r.commentAuthor=o),O(o)}),a(),s(48,"textarea",33),Xe("ngModelChange",function(o){M(e);let r=C();return Ke(r.commentDraft,o)||(r.commentDraft=o),O(o)}),a(),s(49,"button",34),w("click",function(){M(e);let o=C();return O(o.addComment())}),c(50,"Post"),a()()()(),b(51,"app-diff-viewer",35),a()(),Oe()}if(i&2){let e=n.ngIf,t=C();l(4),_(e.shortHash),l(2),u("ngForOf",e.tags),l(),u("ngForOf",e.branches),l(),u("ngIf",e.isMerge),l(2),_(e.subject),l(3),De("",e.author," <",e.authorEmail,">"),l(4),_(me(18,29,e.date,"medium")),l(2),u("ngIf",e.body),l(2),u("disabled",t.explaining()),l(),B(" ",t.explaining()?"...":"\u2728 Explain change"," "),l(),u("disabled",t.loadingImpact()),l(),B(" ",t.loadingImpact()?"...":t.impact()?"Refresh impact":"Show impact"," "),l(2),B(" ",t.shareCopied()?"Copied!":"\u{1F517} Share"," "),l(),u("ngIf",t.explanation()),l(),u("ngIf",t.explainError()),l(),u("ngIf",t.impact()),l(6),u("ngIf",t.files().length),l(2),u("ngForOf",t.files())("ngForTrackBy",t.trackByFile),l(),u("ngIf",!t.files().length&&!t.loading()),l(),u("ngIf",t.loading()),l(2),u("open",t.annotationsOpen()),l(2),B(" \u{1F4AC} Notes (",t.comments().length,") "),l(2),u("ngForOf",t.comments()),l(2),qe("ngModel",t.commentAuthor),l(),qe("ngModel",t.commentDraft),l(),u("disabled",!t.commentDraft.trim()),l(2),u("fileInput",t.activeFile())}}function Bn(i,n){i&1&&(s(0,"div",71)(1,"p",72),c(2,"No commit selected"),a(),s(3,"p",73),c(4," Pick a commit from the list, or press "),s(5,"kbd",74),c(6,"\u2318K"),a(),c(7," to open the command palette. "),a()())}var Ne=class i{state=f(G);git=f(Yt);insightsApi=f(qt);annotationsApi=f(Re);router=f(Gt);commit=this.state.selected;impact=x(null);loadingImpact=x(!1);explanation=x(null);explainError=x(null);explaining=x(!1);comments=x([]);annotationsOpen=x(!1);shareCopied=x(!1);commentDraft="";commentAuthor="me";loading=x(!1);files=Qt(Zt(this.commit).pipe(xe(n=>n?(this.loading.set(!0),this.git.getDiff(n.hash).pipe(pt(()=>W([])))):(this.loading.set(!1),W([])))),{initialValue:[]});activeFileIndex=x(0);activeFile=te(()=>{let n=this.files();if(!n.length)return null;let e=Math.min(this.activeFileIndex(),n.length-1);return n[e]});constructor(){j(()=>{this.files(),this.activeFileIndex.set(0),this.loading.set(!1)}),j(()=>{let n=this.commit();if(this.impact.set(null),this.explanation.set(null),this.explainError.set(null),this.shareCopied.set(!1),!n){this.comments.set([]);return}this.annotationsApi.list(n.hash).subscribe({next:e=>this.comments.set(e),error:()=>this.comments.set([])})})}trackByFile(n,e){return e.file}selectFile(n){let e=this.files().findIndex(t=>t.file===n.file);e>=0&&this.activeFileIndex.set(e)}openFileHistory(n){this.router.navigate(["/file",encodeURIComponent(n)])}shortPath(n){if(n.length<=32)return n;let e=n.split("/");return e.length<=2?n:e[0]+"/.../"+e.slice(-2).join("/")}onLoadImpact(){let n=this.commit();n&&(this.loadingImpact.set(!0),this.insightsApi.impact(n.hash).subscribe({next:e=>{this.impact.set(e),this.loadingImpact.set(!1)},error:()=>this.loadingImpact.set(!1)}))}onExplain(){let n=this.commit();!n||this.explaining()||(this.explaining.set(!0),this.explainError.set(null),this.insightsApi.explainCommit(n.hash).subscribe({next:e=>{this.explanation.set(e.summary),this.explaining.set(!1)},error:e=>{this.explainError.set(e?.error?.error??"AI explanation unavailable. Set ANTHROPIC_API_KEY or OPENAI_API_KEY."),this.explaining.set(!1)}}))}copyShareLink(){let n=this.commit();if(!n)return;let e=`${window.location.origin}/?commit=${n.hash}`;navigator.clipboard?.writeText(e).then(()=>{this.shareCopied.set(!0),setTimeout(()=>this.shareCopied.set(!1),1500)}).catch(()=>{this.shareCopied.set(!1)})}toggleAnnotations(n){setTimeout(()=>this.annotationsOpen.set(!this.annotationsOpen()),0)}addComment(){let n=this.commit();!n||!this.commentDraft.trim()||this.annotationsApi.add(n.hash,this.commentAuthor||"anonymous",this.commentDraft.trim()).subscribe({next:e=>{this.comments.set([...this.comments(),e]),this.commentDraft=""}})}deleteComment(n){let e=this.commit();e&&this.annotationsApi.remove(e.hash,n).subscribe({next:()=>this.comments.set(this.comments().filter(t=>t.id!==n))})}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=D({type:i,selectors:[["app-commit-detail"]],decls:3,vars:2,consts:[["empty",""],[4,"ngIf","ngIfElse"],[1,"head"],[1,"row"],[1,"hash"],[1,"badges"],["class","badge tag",4,"ngFor","ngForOf"],["class","badge branch",4,"ngFor","ngForOf"],["class","badge merge",4,"ngIf"],[1,"subject"],[1,"meta"],[1,"dot"],["class","body",4,"ngIf"],[1,"actions"],[1,"btn","btn-ghost","btn-sm",3,"click","disabled"],[1,"btn","btn-ghost","btn-sm",3,"click"],["class","ai-card",4,"ngIf"],["class","ai-card error",4,"ngIf"],["class","impact-card",4,"ngIf"],[1,"split"],[1,"files"],[1,"files-header"],["class","count",4,"ngIf"],[1,"files-list"],["class","file-row",4,"ngFor","ngForOf","ngForTrackBy"],["class","files-empty",4,"ngIf"],[1,"diff"],[1,"annotations",3,"open"],[3,"click"],[1,"annot-body"],["class","comment",4,"ngFor","ngForOf"],[1,"comment-form"],["placeholder","Your name",1,"input",3,"ngModelChange","ngModel"],["placeholder","Add a note for your team\u2026",1,"input",3,"ngModelChange","ngModel"],[1,"btn",3,"click","disabled"],[3,"fileInput"],[1,"badge","tag"],[1,"badge","branch"],[1,"badge","merge"],[1,"body"],[1,"ai-card"],[1,"ai-pill"],[1,"ai-text"],[1,"btn","btn-ghost","btn-icon","close",3,"click"],[1,"ai-card","error"],[1,"impact-card"],[1,"impact-head"],[1,"impact-meta"],[3,"impact"],[1,"impact-body"],[1,"modules"],[4,"ngFor","ngForOf"],[1,"related"],[3,"click",4,"ngFor","ngForOf"],[1,"count"],[1,"file-row"],[1,"file",3,"click"],[1,"status-dot"],[1,"path",3,"title"],[1,"counts"],["class","add",4,"ngIf"],["class","del",4,"ngIf"],["title","View file history",1,"file-history",3,"click"],[1,"add"],[1,"del"],[1,"files-empty"],[1,"comment"],[1,"comment-head"],[1,"comment-date"],["title","Delete",1,"btn","btn-ghost","btn-icon",3,"click"],[1,"comment-body"],[1,"placeholder"],[1,"title"],[1,"hint"],[1,"kbd"]],template:function(e,t){if(e&1&&v(0,An,52,32,"ng-container",1)(1,Bn,8,0,"ng-template",null,0,ke),e&2){let o=Ee(2);u("ngIf",t.commit())("ngIfElse",o)}},dependencies:[T,$,R,Ut,Ht,Wt,$t,Kt,Te,Pe],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--bg-app)}.head[_ngcontent-%COMP%]{padding:.85rem 1rem;border-bottom:1px solid var(--border-soft);background:var(--bg-surface)}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.4rem}.hash[_ngcontent-%COMP%]{font-family:var(--font-mono);font-size:12px;color:var(--fg-muted);padding:2px 6px;background:var(--bg-surface-2);border:1px solid var(--border-soft);border-radius:4px}.badges[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:4px}.badge[_ngcontent-%COMP%]{font-size:10px;font-weight:600;padding:2px 6px;border-radius:999px}.badge.tag[_ngcontent-%COMP%]{background:#d9770626;color:var(--warning)}.badge.branch[_ngcontent-%COMP%]{background:var(--accent-soft);color:var(--accent)}.badge.merge[_ngcontent-%COMP%]{background:#8b5cf62e;color:#8b5cf6}.subject[_ngcontent-%COMP%]{font-size:18px;margin:0 0 4px;font-weight:600}.meta[_ngcontent-%COMP%]{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--fg-muted)}.meta[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{opacity:.5}.body[_ngcontent-%COMP%]{white-space:pre-wrap;font-family:var(--font-mono);font-size:12px;color:var(--fg-secondary);background:var(--bg-surface-2);border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:.5rem .75rem;margin-top:.5rem;max-height:160px;overflow:auto}.split[_ngcontent-%COMP%]{flex:1;display:grid;grid-template-columns:280px 1fr;grid-template-rows:minmax(0,1fr);min-height:0;overflow:hidden}.files[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-height:0;background:var(--bg-surface);border-right:1px solid var(--border-soft)}.files-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:.5rem .85rem;font-size:12px;color:var(--fg-muted);border-bottom:1px solid var(--border-soft)}.count[_ngcontent-%COMP%]{background:var(--bg-surface-2);padding:0 6px;border-radius:999px;font-size:11px}.files-list[_ngcontent-%COMP%]{overflow:auto;flex:1;min-height:0}.file[_ngcontent-%COMP%]{display:grid;grid-template-columns:10px 1fr auto;gap:.5rem;align-items:center;width:100%;padding:.5rem .85rem;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left;border-bottom:1px solid var(--border-soft);font-size:12px}.file[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.file.selected[_ngcontent-%COMP%]{background:var(--bg-selected)}.file[_ngcontent-%COMP%] .path[_ngcontent-%COMP%]{font-family:var(--font-mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;direction:rtl;text-align:left}.status-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background:var(--accent)}.status-dot[data-status=added][_ngcontent-%COMP%]{background:var(--success)}.status-dot[data-status=deleted][_ngcontent-%COMP%]{background:var(--danger)}.status-dot[data-status=renamed][_ngcontent-%COMP%], .status-dot[data-status=copied][_ngcontent-%COMP%]{background:var(--warning)}.status-dot[data-status=binary][_ngcontent-%COMP%]{background:var(--fg-muted)}.counts[_ngcontent-%COMP%]{display:flex;gap:6px;font-family:var(--font-mono);font-size:11px}.counts[_ngcontent-%COMP%] .add[_ngcontent-%COMP%]{color:var(--success)}.counts[_ngcontent-%COMP%] .del[_ngcontent-%COMP%]{color:var(--danger)}.files-empty[_ngcontent-%COMP%]{padding:1rem;color:var(--fg-muted);font-size:12px;text-align:center}.diff[_ngcontent-%COMP%]{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.placeholder[_ngcontent-%COMP%]{flex:1;display:grid;place-items:center;text-align:center;color:var(--fg-muted)}.placeholder[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{font-size:16px;margin-bottom:4px;color:var(--fg-secondary)}.placeholder[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{font-size:13px}.actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}.btn-sm[_ngcontent-%COMP%]{font-size:11px;padding:.3rem .65rem}.ai-card[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;padding:.55rem .75rem;margin-top:.5rem;background:color-mix(in oklab,var(--accent) 12%,transparent);border-radius:var(--radius-sm);font-size:12px;color:var(--fg-secondary)}.ai-card.error[_ngcontent-%COMP%]{background:#ef44441f;color:var(--danger)}.ai-pill[_ngcontent-%COMP%]{flex-shrink:0;font-size:10px;font-weight:700;letter-spacing:.04em;background:var(--accent);color:var(--accent-fg);padding:1px 5px;border-radius:4px}.ai-text[_ngcontent-%COMP%]{flex:1;line-height:1.5}.ai-card[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{font-size:14px;line-height:1;padding:0 6px}.impact-card[_ngcontent-%COMP%]{margin:.6rem 1rem;background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:.75rem 1rem}.impact-head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-weight:600;margin-bottom:.5rem;font-size:13px}.impact-meta[_ngcontent-%COMP%]{color:var(--fg-muted);font-weight:400;font-size:11px}.impact-body[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;font-size:12px}.impact-body[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 .4rem;font-size:11px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.04em}.impact-body[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0}.impact-body[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:2px 0;word-break:break-all}.modules[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace)}.ripple[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-secondary)}.related[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{cursor:pointer;display:flex;gap:.4rem}.related[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover{color:var(--accent)}.related[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);color:var(--fg-muted);flex-shrink:0}.impact-body[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%]{color:var(--fg-muted);font-style:italic;margin:0;font-size:11px}.file-row[_ngcontent-%COMP%]{display:flex}.file-row[_ngcontent-%COMP%] .file[_ngcontent-%COMP%]{flex:1}.file-history[_ngcontent-%COMP%]{background:transparent;border:0;border-bottom:1px solid var(--border-soft);cursor:pointer;color:var(--fg-muted);padding:0 .6rem;font-size:12px}.file-history[_ngcontent-%COMP%]:hover{background:var(--bg-elevated);color:var(--accent)}.annotations[_ngcontent-%COMP%]{margin:.5rem;background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-sm)}.annotations[_ngcontent-%COMP%] summary[_ngcontent-%COMP%]{padding:.4rem .7rem;cursor:pointer;font-size:12px;color:var(--fg-secondary);-webkit-user-select:none;user-select:none}.annotations[open][_ngcontent-%COMP%] summary[_ngcontent-%COMP%]{border-bottom:1px solid var(--border-soft)}.annot-body[_ngcontent-%COMP%]{padding:.5rem .7rem}.comment[_ngcontent-%COMP%]{padding:.4rem 0;border-bottom:1px dashed var(--border-soft);font-size:12px}.comment[_ngcontent-%COMP%]:last-of-type{border-bottom:0}.comment-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.comment-date[_ngcontent-%COMP%]{color:var(--fg-muted);font-size:11px;flex:1}.comment-body[_ngcontent-%COMP%]{margin:.2rem 0 0;line-height:1.4;white-space:pre-wrap}.comment-form[_ngcontent-%COMP%]{display:flex;gap:.4rem;flex-direction:column;margin-top:.5rem}.comment-form[_ngcontent-%COMP%] .input[_ngcontent-%COMP%]{width:100%;padding:.35rem .5rem;background:var(--bg-app);border:1px solid var(--border-soft);border-radius:var(--radius-sm);color:var(--fg-primary);font-family:inherit;font-size:12px}.comment-form[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{min-height:60px;resize:vertical}.comment-form[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{align-self:flex-end}"],changeDetection:0})};var jn=["canvas"],Gn=["scroll"];function Hn(i,n){if(i&1&&b(0,"span",10),i&2){let e=n.$implicit;ee("background",e)}}function Wn(i,n){i&1&&(s(0,"div",11),c(1," No commits to draw. "),a())}var H=34,ge=24,Ve=5.5,et=16,Fe=16,tt=["#4f46e5","#06b6d4","#f59e0b","#ef4444","#10b981","#8b5cf6","#ec4899","#0ea5e9"],ze=class i{state=f(G);theme=f(an);legendColors=tt.slice(0,5);graphSummary=te(()=>{let n=this.state.commits().length,e=this.laneCount;return n?`${n.toLocaleString()} commits across ${e} lane${e===1?"":"s"}`:"Swim-lane visualization"});canvasRef;scrollRef;nodes=[];rowByHash=new Map;laneCount=1;hoverRow=-1;onCanvasClick=n=>this.onClick(n);onCanvasMove=n=>this.onMouseMove(n);onCanvasLeave=()=>this.onMouseLeave();constructor(){j(()=>{this.layout(this.state.commits()),this.draw()}),j(()=>{this.state.selectedHash(),this.theme.resolved(),this.draw()})}ngAfterViewInit(){let n=this.canvasRef.nativeElement;n.addEventListener("click",this.onCanvasClick),n.addEventListener("mousemove",this.onCanvasMove),n.addEventListener("mouseleave",this.onCanvasLeave),this.draw()}ngOnDestroy(){let n=this.canvasRef?.nativeElement;n?.removeEventListener("click",this.onCanvasClick),n?.removeEventListener("mousemove",this.onCanvasMove),n?.removeEventListener("mouseleave",this.onCanvasLeave)}onResize(){this.draw()}layout(n){if(this.nodes=[],this.rowByHash.clear(),this.hoverRow=-1,!n.length){this.laneCount=1;return}let e=[],t=o=>{let r=e.indexOf(o);if(r>=0)return r;let p=e.indexOf(null);return p>=0?(e[p]=o,p):(e.push(o),e.length-1)};for(let o=0;o<n.length;o++){let r=n[o],p=t(r.hash),g={commit:r,row:o,lane:p};this.nodes.push(g),this.rowByHash.set(r.hash,g);let[d,...h]=r.parents;e[p]=d??null;for(let E of h)if(e.indexOf(E)===-1){let k=e.indexOf(null);k>=0?e[k]=E:e.push(E)}for(;e.length&&e[e.length-1]===null;)e.pop()}this.laneCount=Math.max(1,this.nodes.reduce((o,r)=>Math.max(o,r.lane+1),0))}draw(){let n=this.canvasRef?.nativeElement;if(!n)return;let e=this.scrollRef?.nativeElement,t=window.devicePixelRatio||1,o=et*2+this.laneCount*ge,r=Fe*2+Math.max(this.nodes.length,1)*H,p=Math.max(o,e?.clientWidth??o),g=Math.max(r,e?.clientHeight??r);n.width=Math.floor(p*t),n.height=Math.floor(g*t),n.style.width=`${p}px`,n.style.height=`${g}px`;let d=n.getContext("2d"),h=this.readTheme(n);if(d.setTransform(t,0,0,t,0,0),d.clearRect(0,0,p,g),d.fillStyle=h.surface,d.fillRect(0,0,p,g),!this.nodes.length)return;let E=m=>et+m*ge+ge/2,k=m=>Fe+m*H+H/2,_e=m=>tt[m%tt.length],U=this.state.selectedHash();this.drawRows(d,p,E,k,h,U),this.drawGuides(d,k,h),d.lineCap="round",d.lineJoin="round";for(let m of this.nodes)for(let I of m.commit.parents){let P=this.rowByHash.get(I);if(!P)continue;let y=E(m.lane),S=k(m.row),ie=E(P.lane),X=k(P.row);d.strokeStyle=h.shadow,d.lineWidth=4,d.globalAlpha=.35,this.drawEdge(d,y,S,ie,X),d.strokeStyle=_e(P.lane),d.lineWidth=m.commit.isMerge?2.6:2.2,d.globalAlpha=U&&U!==m.commit.hash&&U!==P.commit.hash?.55:.9,this.drawEdge(d,y,S,ie,X),d.globalAlpha=1}for(let m of this.nodes){let I=E(m.lane),P=k(m.row),y=_e(m.lane),S=m.commit.hash===U,ie=m.row===this.hoverRow,X=S?Ve+2:ie?Ve+1:Ve;d.beginPath(),d.arc(I,P,X+3,0,Math.PI*2),d.fillStyle=h.nodeRing,d.fill(),d.beginPath(),d.arc(I,P,X,0,Math.PI*2),d.fillStyle=m.commit.isMerge?h.surface:y,d.fill(),d.lineWidth=m.commit.isMerge||S?2.5:1.75,d.strokeStyle=y,d.stroke(),(S||ie)&&(d.beginPath(),d.arc(I,P,X+5,0,Math.PI*2),d.strokeStyle=y,d.globalAlpha=S?.42:.24,d.lineWidth=2,d.stroke(),d.globalAlpha=1)}}drawRows(n,e,t,o,r,p){for(let g of this.nodes){let d=o(g.row)-H/2;if(g.row%2===1&&(n.fillStyle=r.rowAlt,n.fillRect(0,d,e,H)),(g.row===this.hoverRow||g.commit.hash===p)&&(n.fillStyle=g.commit.hash===p?r.rowSelected:r.rowHover,this.roundRect(n,6,d+3,e-12,H-6,8),n.fill()),g.commit.branches.length||g.commit.tags.length){let h=t(g.lane)+Ve+8;this.drawRefPill(n,h,o(g.row),g.commit,r)}}}drawGuides(n,e,t){n.save(),n.strokeStyle=t.guide,n.lineWidth=1,n.setLineDash([3,5]);for(let o=0;o<this.laneCount;o++){let r=et+o*ge+ge/2;n.beginPath(),n.moveTo(r,Fe/2),n.lineTo(r,e(this.nodes.length-1)+H/2),n.stroke()}n.restore()}drawEdge(n,e,t,o,r){if(n.beginPath(),n.moveTo(e,t),e===o)n.lineTo(o,r);else{let p=t+Math.min(H*.75,Math.max(12,(r-t)*.36));n.bezierCurveTo(e,p,o,p,o,r)}n.stroke()}drawRefPill(n,e,t,o,r){let p=o.tags[0]??o.branches[0];if(!p)return;let g=p.length>16?`${p.slice(0,15)}...`:p;n.font="600 10px ui-sans-serif, system-ui, sans-serif";let d=Math.min(96,n.measureText(g).width+14),h=18;n.fillStyle=o.tags.length?r.warningSoft:r.accentSoft,this.roundRect(n,e,t-h/2,d,h,999),n.fill(),n.fillStyle=o.tags.length?r.warning:r.accent,n.fillText(g,e+7,t+3.5)}onClick(n){let e=this.nodeFromEvent(n);e&&this.state.selectHash(e.commit.hash)}onMouseMove(n){let e=this.nodeFromEvent(n),t=e?.row??-1;t!==this.hoverRow&&(this.hoverRow=t,this.canvasRef.nativeElement.style.cursor=e?"pointer":"default",this.draw())}onMouseLeave(){this.hoverRow!==-1&&(this.hoverRow=-1,this.canvasRef.nativeElement.style.cursor="default",this.draw())}nodeFromEvent(n){let e=this.canvasRef.nativeElement.getBoundingClientRect(),t=n.clientY-e.top,o=Math.floor((t-Fe)/H);return this.nodes[o]}readTheme(n){let e=getComputedStyle(n);return{accent:this.css(e,"--accent","#4f46e5"),accentSoft:this.css(e,"--accent-soft","#eef2ff"),guide:this.css(e,"--graph-guide","rgba(148, 163, 184, 0.28)"),nodeRing:this.css(e,"--graph-node-ring","#ffffff"),rowAlt:this.css(e,"--graph-row-alt","rgba(15, 23, 42, 0.025)"),rowHover:this.css(e,"--graph-row-hover","rgba(79, 70, 229, 0.08)"),rowSelected:this.css(e,"--graph-row-selected","rgba(79, 70, 229, 0.14)"),shadow:this.css(e,"--graph-shadow","rgba(15, 23, 42, 0.12)"),surface:this.css(e,"--bg-surface","#ffffff"),warning:this.css(e,"--warning","#d97706"),warningSoft:"rgba(217, 119, 6, 0.15)"}}css(n,e,t){return n.getPropertyValue(e).trim()||t}roundRect(n,e,t,o,r,p){let g=Math.min(p,o/2,r/2);n.beginPath(),n.moveTo(e+g,t),n.arcTo(e+o,t,e+o,t+r,g),n.arcTo(e+o,t+r,e,t+r,g),n.arcTo(e,t+r,e,t,g),n.arcTo(e,t,e+o,t,g),n.closePath()}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=D({type:i,selectors:[["app-commit-graph"]],viewQuery:function(e,t){if(e&1&&(Q(jn,7),Q(Gn,7)),e&2){let o;Y(o=q())&&(t.canvasRef=o.first),Y(o=q())&&(t.scrollRef=o.first)}},hostBindings:function(e,t){e&1&&w("resize",function(){return t.onResize()},Se)},decls:13,vars:3,consts:[["scroll",""],["canvas",""],[1,"header"],[1,"title"],[1,"hint"],["aria-hidden","true",1,"legend"],["class","swatch",3,"background",4,"ngFor","ngForOf"],[1,"scroll"],["aria-label","Commit graph","role","img"],["class","empty",4,"ngIf"],[1,"swatch"],[1,"empty"]],template:function(e,t){e&1&&(s(0,"div",2)(1,"div",3)(2,"span"),c(3,"Graph"),a(),s(4,"span",4),c(5),a()(),s(6,"div",5),v(7,Hn,1,2,"span",6),a()(),s(8,"div",7,0),b(10,"canvas",8,1),v(12,Wn,2,0,"div",9),a()),e&2&&(l(5),_(t.graphSummary()),l(2),u("ngForOf",t.legendColors),l(5),u("ngIf",!t.state.commits().length&&!t.state.loading()))},dependencies:[T,$,R],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--bg-surface);border-right:1px solid var(--border-soft)}.header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.6rem .85rem;border-bottom:1px solid var(--border-soft);font-size:12px;color:var(--fg-muted);background:color-mix(in oklab,var(--bg-surface) 96%,var(--bg-surface-2))}.title[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1px;min-width:0}.title[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]:first-child{color:var(--fg-primary);font-size:13px;font-weight:600}.hint[_ngcontent-%COMP%]{white-space:nowrap}.legend[_ngcontent-%COMP%]{display:flex;gap:4px;align-items:center;flex:0 0 auto}.swatch[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:999px;box-shadow:0 0 0 2px var(--bg-surface)}.scroll[_ngcontent-%COMP%]{position:relative;flex:1;overflow:auto;min-height:0;background:radial-gradient(circle at 24px 24px,var(--graph-row-alt) 0 1px,transparent 1px 100%),var(--bg-surface);background-size:24px 24px}canvas[_ngcontent-%COMP%]{display:block}.empty[_ngcontent-%COMP%]{position:absolute;inset:0;display:grid;place-items:center;padding:1rem;color:var(--fg-muted);font-size:12px;text-align:center}"],changeDetection:0})};function ue(i,n=0){return $n(i)?Number(i):arguments.length===2?n:0}function $n(i){return!isNaN(parseFloat(i))&&!isNaN(Number(i))}function sn(i){return i instanceof re?i.nativeElement:i}var nt;try{nt=typeof Intl<"u"&&Intl.v8BreakIterator}catch{nt=!1}var Le=(()=>{class i{_platformId=f(wt);isBrowser=this._platformId?Bt(this._platformId):typeof document=="object"&&!!document;EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent);TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent);BLINK=this.isBrowser&&!!(window.chrome||nt)&&typeof CSS<"u"&&!this.EDGE&&!this.TRIDENT;WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT;IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window);FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent);ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT;SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT;constructor(){}static \u0275fac=function(t){return new(t||i)};static \u0275prov=V({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var Un=new Z("cdk-dir-doc",{providedIn:"root",factory:Zn});function Zn(){return f(we)}var Qn=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;function Yn(i){let n=i?.toLowerCase()||"";return n==="auto"&&typeof navigator<"u"&&navigator?.language?Qn.test(navigator.language)?"rtl":"ltr":n==="rtl"?"rtl":"ltr"}var ln=(()=>{class i{get value(){return this.valueSignal()}valueSignal=x("ltr");change=new Ot;constructor(){let e=f(Un,{optional:!0});if(e){let t=e.body?e.body.dir:null,o=e.documentElement?e.documentElement.dir:null;this.valueSignal.set(Yn(t||o||"ltr"))}}ngOnDestroy(){this.change.complete()}static \u0275fac=function(t){return new(t||i)};static \u0275prov=V({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var A=(function(i){return i[i.NORMAL=0]="NORMAL",i[i.NEGATED=1]="NEGATED",i[i.INVERTED=2]="INVERTED",i})(A||{}),Ae,K;function cn(){if(K==null){if(typeof document!="object"||!document||typeof Element!="function"||!Element)return K=!1,K;if(document.documentElement?.style&&"scrollBehavior"in document.documentElement.style)K=!0;else{let i=Element.prototype.scrollTo;i?K=!/\{\s*\[native code\]\s*\}/.test(i.toString()):K=!1}}return K}function ne(){if(typeof document!="object"||!document)return A.NORMAL;if(Ae==null){let i=document.createElement("div"),n=i.style;i.dir="rtl",n.width="1px",n.overflow="auto",n.visibility="hidden",n.pointerEvents="none",n.position="absolute";let e=document.createElement("div"),t=e.style;t.width="2px",t.height="1px",i.appendChild(e),document.body.appendChild(i),Ae=A.NORMAL,i.scrollLeft===0&&(i.scrollLeft=1,Ae=i.scrollLeft===0?A.NEGATED:A.INVERTED),i.remove()}return Ae}var it=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=ae({type:i});static \u0275inj=oe({})}return i})();var Be=class{};function dn(i){return i&&typeof i.connect=="function"&&!(i instanceof lt)}var je=class extends Be{_data;constructor(n){super(),this._data=n}connect(){return ve(this._data)?this._data:W(this._data)}disconnect(){}},he=(function(i){return i[i.REPLACED=0]="REPLACED",i[i.INSERTED=1]="INSERTED",i[i.MOVED=2]="MOVED",i[i.REMOVED=3]="REMOVED",i})(he||{}),ot=new Z("_ViewRepeater"),Ge=class{viewCacheSize=20;_viewCache=[];applyChanges(n,e,t,o,r){n.forEachOperation((p,g,d)=>{let h,E;if(p.previousIndex==null){let k=()=>t(p,g,d);h=this._insertView(k,d,e,o(p)),E=h?he.INSERTED:he.REPLACED}else d==null?(this._detachAndCacheView(g,e),E=he.REMOVED):(h=this._moveView(g,d,e,o(p)),E=he.MOVED);r&&r({context:h?.context,operation:E,record:p})})}detach(){for(let n of this._viewCache)n.destroy();this._viewCache=[]}_insertView(n,e,t,o){let r=this._insertViewFromCache(e,t);if(r){r.context.$implicit=o;return}let p=n();return t.createEmbeddedView(p.templateRef,p.context,p.index)}_detachAndCacheView(n,e){let t=e.detach(n);this._maybeCacheView(t,e)}_moveView(n,e,t,o){let r=t.get(n);return t.move(r,e),r.context.$implicit=o,r}_maybeCacheView(n,e){if(this._viewCache.length<this.viewCacheSize)this._viewCache.push(n);else{let t=e.indexOf(n);t===-1?n.destroy():e.remove(t)}}_insertViewFromCache(n,e){let t=this._viewCache.pop();return t&&e.insert(t,n),t||null}};var qn=["contentWrapper"],Kn=["*"],gn=new Z("VIRTUAL_SCROLL_STRATEGY"),rt=class{_scrolledIndexChange=new N;scrolledIndexChange=this._scrolledIndexChange.pipe(ft());_viewport=null;_itemSize;_minBufferPx;_maxBufferPx;constructor(n,e,t){this._itemSize=n,this._minBufferPx=e,this._maxBufferPx=t}attach(n){this._viewport=n,this._updateTotalContentSize(),this._updateRenderedRange()}detach(){this._scrolledIndexChange.complete(),this._viewport=null}updateItemAndBufferSize(n,e,t){t<e,this._itemSize=n,this._minBufferPx=e,this._maxBufferPx=t,this._updateTotalContentSize(),this._updateRenderedRange()}onContentScrolled(){this._updateRenderedRange()}onDataLengthChanged(){this._updateTotalContentSize(),this._updateRenderedRange()}onContentRendered(){}onRenderedOffsetChanged(){}scrollToIndex(n,e){this._viewport&&this._viewport.scrollToOffset(n*this._itemSize,e)}_updateTotalContentSize(){this._viewport&&this._viewport.setTotalContentSize(this._viewport.getDataLength()*this._itemSize)}_updateRenderedRange(){if(!this._viewport)return;let n=this._viewport.getRenderedRange(),e={start:n.start,end:n.end},t=this._viewport.getViewportSize(),o=this._viewport.getDataLength(),r=this._viewport.measureScrollOffset(),p=this._itemSize>0?r/this._itemSize:0;if(e.end>o){let d=Math.ceil(t/this._itemSize),h=Math.max(0,Math.min(p,o-d));p!=h&&(p=h,r=h*this._itemSize,e.start=Math.floor(p)),e.end=Math.max(0,Math.min(o,e.start+d))}let g=r-e.start*this._itemSize;if(g<this._minBufferPx&&e.start!=0){let d=Math.ceil((this._maxBufferPx-g)/this._itemSize);e.start=Math.max(0,e.start-d),e.end=Math.min(o,Math.ceil(p+(t+this._minBufferPx)/this._itemSize))}else{let d=e.end*this._itemSize-(r+t);if(d<this._minBufferPx&&e.end!=o){let h=Math.ceil((this._maxBufferPx-d)/this._itemSize);h>0&&(e.end=Math.min(o,e.end+h),e.start=Math.max(0,Math.floor(p-this._minBufferPx/this._itemSize)))}}this._viewport.setRenderedRange(e),this._viewport.setRenderedContentOffset(Math.round(this._itemSize*e.start)),this._scrolledIndexChange.next(Math.floor(p))}};function Xn(i){return i._scrollStrategy}var un=(()=>{class i{get itemSize(){return this._itemSize}set itemSize(e){this._itemSize=ue(e)}_itemSize=20;get minBufferPx(){return this._minBufferPx}set minBufferPx(e){this._minBufferPx=ue(e)}_minBufferPx=100;get maxBufferPx(){return this._maxBufferPx}set maxBufferPx(e){this._maxBufferPx=ue(e)}_maxBufferPx=200;_scrollStrategy=new rt(this.itemSize,this.minBufferPx,this.maxBufferPx);ngOnChanges(){this._scrollStrategy.updateItemAndBufferSize(this.itemSize,this.minBufferPx,this.maxBufferPx)}static \u0275fac=function(t){return new(t||i)};static \u0275dir=J({type:i,selectors:[["cdk-virtual-scroll-viewport","itemSize",""]],inputs:{itemSize:"itemSize",minBufferPx:"minBufferPx",maxBufferPx:"maxBufferPx"},features:[ce([{provide:gn,useFactory:Xn,deps:[ht(()=>i)]}]),ye]})}return i})(),Jn=20,ei=(()=>{class i{_ngZone=f(se);_platform=f(Le);_renderer=f(Qe).createRenderer(null,null);_cleanupGlobalListener;constructor(){}_scrolled=new N;_scrolledCount=0;scrollContainers=new Map;register(e){this.scrollContainers.has(e)||this.scrollContainers.set(e,e.elementScrolled().subscribe(()=>this._scrolled.next(e)))}deregister(e){let t=this.scrollContainers.get(e);t&&(t.unsubscribe(),this.scrollContainers.delete(e))}scrolled(e=Jn){return this._platform.isBrowser?new Ue(t=>{this._cleanupGlobalListener||(this._cleanupGlobalListener=this._ngZone.runOutsideAngular(()=>this._renderer.listen("document","scroll",()=>this._scrolled.next())));let o=e>0?this._scrolled.pipe(Ce(e)).subscribe(t):this._scrolled.subscribe(t);return this._scrolledCount++,()=>{o.unsubscribe(),this._scrolledCount--,this._scrolledCount||(this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0)}}):W()}ngOnDestroy(){this._cleanupGlobalListener?.(),this._cleanupGlobalListener=void 0,this.scrollContainers.forEach((e,t)=>this.deregister(t)),this._scrolled.complete()}ancestorScrolled(e,t){let o=this.getAncestorScrollContainers(e);return this.scrolled(t).pipe(mt(r=>!r||o.indexOf(r)>-1))}getAncestorScrollContainers(e){let t=[];return this.scrollContainers.forEach((o,r)=>{this._scrollableContainsElement(r,e)&&t.push(r)}),t}_scrollableContainsElement(e,t){let o=sn(t),r=e.getElementRef().nativeElement;do if(o==r)return!0;while(o=o.parentElement);return!1}static \u0275fac=function(t){return new(t||i)};static \u0275prov=V({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})(),hn=(()=>{class i{elementRef=f(re);scrollDispatcher=f(ei);ngZone=f(se);dir=f(ln,{optional:!0});_scrollElement=this.elementRef.nativeElement;_destroyed=new N;_renderer=f(St);_cleanupScroll;_elementScrolled=new N;constructor(){}ngOnInit(){this._cleanupScroll=this.ngZone.runOutsideAngular(()=>this._renderer.listen(this._scrollElement,"scroll",e=>this._elementScrolled.next(e))),this.scrollDispatcher.register(this)}ngOnDestroy(){this._cleanupScroll?.(),this._elementScrolled.complete(),this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(e){let t=this.elementRef.nativeElement,o=this.dir&&this.dir.value=="rtl";e.left==null&&(e.left=o?e.end:e.start),e.right==null&&(e.right=o?e.start:e.end),e.bottom!=null&&(e.top=t.scrollHeight-t.clientHeight-e.bottom),o&&ne()!=A.NORMAL?(e.left!=null&&(e.right=t.scrollWidth-t.clientWidth-e.left),ne()==A.INVERTED?e.left=e.right:ne()==A.NEGATED&&(e.left=e.right?-e.right:e.right)):e.right!=null&&(e.left=t.scrollWidth-t.clientWidth-e.right),this._applyScrollToOptions(e)}_applyScrollToOptions(e){let t=this.elementRef.nativeElement;cn()?t.scrollTo(e):(e.top!=null&&(t.scrollTop=e.top),e.left!=null&&(t.scrollLeft=e.left))}measureScrollOffset(e){let t="left",o="right",r=this.elementRef.nativeElement;if(e=="top")return r.scrollTop;if(e=="bottom")return r.scrollHeight-r.clientHeight-r.scrollTop;let p=this.dir&&this.dir.value=="rtl";return e=="start"?e=p?o:t:e=="end"&&(e=p?t:o),p&&ne()==A.INVERTED?e==t?r.scrollWidth-r.clientWidth-r.scrollLeft:r.scrollLeft:p&&ne()==A.NEGATED?e==t?r.scrollLeft+r.scrollWidth-r.clientWidth:-r.scrollLeft:e==t?r.scrollLeft:r.scrollWidth-r.clientWidth-r.scrollLeft}static \u0275fac=function(t){return new(t||i)};static \u0275dir=J({type:i,selectors:[["","cdk-scrollable",""],["","cdkScrollable",""]]})}return i})(),ti=20,ni=(()=>{class i{_platform=f(Le);_listeners;_viewportSize;_change=new N;_document=f(we);constructor(){let e=f(se),t=f(Qe).createRenderer(null,null);e.runOutsideAngular(()=>{if(this._platform.isBrowser){let o=r=>this._change.next(r);this._listeners=[t.listen("window","resize",o),t.listen("window","orientationchange",o)]}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){this._listeners?.forEach(e=>e()),this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();let e={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),e}getViewportRect(){let e=this.getViewportScrollPosition(),{width:t,height:o}=this.getViewportSize();return{top:e.top,left:e.left,bottom:e.top+o,right:e.left+t,height:o,width:t}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};let e=this._document,t=this._getWindow(),o=e.documentElement,r=o.getBoundingClientRect(),p=-r.top||e.body.scrollTop||t.scrollY||o.scrollTop||0,g=-r.left||e.body.scrollLeft||t.scrollX||o.scrollLeft||0;return{top:p,left:g}}change(e=ti){return e>0?this._change.pipe(Ce(e)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){let e=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:e.innerWidth,height:e.innerHeight}:{width:0,height:0}}static \u0275fac=function(t){return new(t||i)};static \u0275prov=V({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})(),mn=new Z("VIRTUAL_SCROLLABLE"),ii=(()=>{class i extends hn{constructor(){super()}measureViewportSize(e){let t=this.elementRef.nativeElement;return e==="horizontal"?t.clientWidth:t.clientHeight}static \u0275fac=function(t){return new(t||i)};static \u0275dir=J({type:i,features:[Ye]})}return i})();function oi(i,n){return i.start==n.start&&i.end==n.end}var ri=typeof requestAnimationFrame<"u"?dt:ct,at=(()=>{class i extends ii{elementRef=f(re);_changeDetectorRef=f(zt);_scrollStrategy=f(gn,{optional:!0});scrollable=f(mn,{optional:!0});_platform=f(Le);_detachedSubject=new N;_renderedRangeSubject=new N;get orientation(){return this._orientation}set orientation(e){this._orientation!==e&&(this._orientation=e,this._calculateSpacerSize())}_orientation="vertical";appendOnly=!1;scrolledIndexChange=new Ue(e=>this._scrollStrategy.scrolledIndexChange.subscribe(t=>Promise.resolve().then(()=>this.ngZone.run(()=>e.next(t)))));_contentWrapper;renderedRangeStream=this._renderedRangeSubject;_totalContentSize=0;_totalContentWidth=x("");_totalContentHeight=x("");_renderedContentTransform;_renderedRange={start:0,end:0};_dataLength=0;_viewportSize=0;_forOf;_renderedContentOffset=0;_renderedContentOffsetNeedsRewrite=!1;_changeDetectionNeeded=x(!1);_runAfterChangeDetection=[];_viewportChanges=st.EMPTY;_injector=f(vt);_isDestroyed=!1;constructor(){super();let e=f(ni);this._scrollStrategy,this._viewportChanges=e.change().subscribe(()=>{this.checkViewportSize()}),this.scrollable||(this.elementRef.nativeElement.classList.add("cdk-virtual-scrollable"),this.scrollable=this);let t=j(()=>{this._changeDetectionNeeded()&&this._doChangeDetection()},{injector:f(Dt).injector});f(Ct).onDestroy(()=>void t.destroy())}ngOnInit(){this._platform.isBrowser&&(this.scrollable===this&&super.ngOnInit(),this.ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>{this._measureViewportSize(),this._scrollStrategy.attach(this),this.scrollable.elementScrolled().pipe(Ze(null),Ce(0,ri),be(this._destroyed)).subscribe(()=>this._scrollStrategy.onContentScrolled()),this._markChangeDetectionNeeded()})))}ngOnDestroy(){this.detach(),this._scrollStrategy.detach(),this._renderedRangeSubject.complete(),this._detachedSubject.complete(),this._viewportChanges.unsubscribe(),this._isDestroyed=!0,super.ngOnDestroy()}attach(e){this._forOf,this.ngZone.runOutsideAngular(()=>{this._forOf=e,this._forOf.dataStream.pipe(be(this._detachedSubject)).subscribe(t=>{let o=t.length;o!==this._dataLength&&(this._dataLength=o,this._scrollStrategy.onDataLengthChanged()),this._doChangeDetection()})})}detach(){this._forOf=null,this._detachedSubject.next()}getDataLength(){return this._dataLength}getViewportSize(){return this._viewportSize}getRenderedRange(){return this._renderedRange}measureBoundingClientRectWithScrollOffset(e){return this.getElementRef().nativeElement.getBoundingClientRect()[e]}setTotalContentSize(e){this._totalContentSize!==e&&(this._totalContentSize=e,this._calculateSpacerSize(),this._markChangeDetectionNeeded())}setRenderedRange(e){oi(this._renderedRange,e)||(this.appendOnly&&(e={start:0,end:Math.max(this._renderedRange.end,e.end)}),this._renderedRangeSubject.next(this._renderedRange=e),this._markChangeDetectionNeeded(()=>this._scrollStrategy.onContentRendered()))}getOffsetToRenderedContentStart(){return this._renderedContentOffsetNeedsRewrite?null:this._renderedContentOffset}setRenderedContentOffset(e,t="to-start"){e=this.appendOnly&&t==="to-start"?0:e;let o=this.dir&&this.dir.value=="rtl",r=this.orientation=="horizontal",p=r?"X":"Y",d=`translate${p}(${Number((r&&o?-1:1)*e)}px)`;this._renderedContentOffset=e,t==="to-end"&&(d+=` translate${p}(-100%)`,this._renderedContentOffsetNeedsRewrite=!0),this._renderedContentTransform!=d&&(this._renderedContentTransform=d,this._markChangeDetectionNeeded(()=>{this._renderedContentOffsetNeedsRewrite?(this._renderedContentOffset-=this.measureRenderedContentSize(),this._renderedContentOffsetNeedsRewrite=!1,this.setRenderedContentOffset(this._renderedContentOffset)):this._scrollStrategy.onRenderedOffsetChanged()}))}scrollToOffset(e,t="auto"){let o={behavior:t};this.orientation==="horizontal"?o.start=e:o.top=e,this.scrollable.scrollTo(o)}scrollToIndex(e,t="auto"){this._scrollStrategy.scrollToIndex(e,t)}measureScrollOffset(e){let t;return this.scrollable==this?t=o=>super.measureScrollOffset(o):t=o=>this.scrollable.measureScrollOffset(o),Math.max(0,t(e??(this.orientation==="horizontal"?"start":"top"))-this.measureViewportOffset())}measureViewportOffset(e){let t,o="left",r="right",p=this.dir?.value=="rtl";e=="start"?t=p?r:o:e=="end"?t=p?o:r:e?t=e:t=this.orientation==="horizontal"?"left":"top";let g=this.scrollable.measureBoundingClientRectWithScrollOffset(t);return this.elementRef.nativeElement.getBoundingClientRect()[t]-g}measureRenderedContentSize(){let e=this._contentWrapper.nativeElement;return this.orientation==="horizontal"?e.offsetWidth:e.offsetHeight}measureRangeSize(e){return this._forOf?this._forOf.measureRangeSize(e,this.orientation):0}checkViewportSize(){this._measureViewportSize(),this._scrollStrategy.onDataLengthChanged()}_measureViewportSize(){this._viewportSize=this.scrollable.measureViewportSize(this.orientation)}_markChangeDetectionNeeded(e){e&&this._runAfterChangeDetection.push(e),!Ft(this._changeDetectionNeeded)&&this.ngZone.runOutsideAngular(()=>{Promise.resolve().then(()=>{this.ngZone.run(()=>{this._changeDetectionNeeded.set(!0)})})})}_doChangeDetection(){this._isDestroyed||this.ngZone.run(()=>{this._changeDetectorRef.markForCheck(),this._contentWrapper.nativeElement.style.transform=this._renderedContentTransform,Et(()=>{this._changeDetectionNeeded.set(!1);let e=this._runAfterChangeDetection;this._runAfterChangeDetection=[];for(let t of e)t()},{injector:this._injector})})}_calculateSpacerSize(){this._totalContentHeight.set(this.orientation==="horizontal"?"":`${this._totalContentSize}px`),this._totalContentWidth.set(this.orientation==="horizontal"?`${this._totalContentSize}px`:"")}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["cdk-virtual-scroll-viewport"]],viewQuery:function(t,o){if(t&1&&Q(qn,7),t&2){let r;Y(r=q())&&(o._contentWrapper=r.first)}},hostAttrs:[1,"cdk-virtual-scroll-viewport"],hostVars:4,hostBindings:function(t,o){t&2&&z("cdk-virtual-scroll-orientation-horizontal",o.orientation==="horizontal")("cdk-virtual-scroll-orientation-vertical",o.orientation!=="horizontal")},inputs:{orientation:"orientation",appendOnly:[2,"appendOnly","appendOnly",At]},outputs:{scrolledIndexChange:"scrolledIndexChange"},features:[ce([{provide:hn,useFactory:(e,t)=>e||t,deps:[[new bt,new xt(mn)],i]}]),Ye],ngContentSelectors:Kn,decls:4,vars:4,consts:[["contentWrapper",""],[1,"cdk-virtual-scroll-content-wrapper"],[1,"cdk-virtual-scroll-spacer"]],template:function(t,o){t&1&&(Rt(),kt(0,"div",1,0),Tt(2),Pt(),It(3,"div",2)),t&2&&(l(3),ee("width",o._totalContentWidth())("height",o._totalContentHeight()))},styles:[`cdk-virtual-scroll-viewport{display:block;position:relative;transform:translateZ(0)}.cdk-virtual-scrollable{overflow:auto;will-change:scroll-position;contain:strict}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{height:1px;transform-origin:0 0;flex:0 0 auto}[dir=rtl] .cdk-virtual-scroll-spacer{transform-origin:100% 0}
2
+ `],encapsulation:2,changeDetection:0})}return i})();function pn(i,n,e){let t=e;if(!t.getBoundingClientRect)return 0;let o=t.getBoundingClientRect();return i==="horizontal"?n==="start"?o.left:o.right:n==="start"?o.top:o.bottom}var _n=(()=>{class i{_viewContainerRef=f(Mt);_template=f(yt);_differs=f(Lt);_viewRepeater=f(ot);_viewport=f(at,{skipSelf:!0});viewChange=new N;_dataSourceChanges=new N;get cdkVirtualForOf(){return this._cdkVirtualForOf}set cdkVirtualForOf(e){this._cdkVirtualForOf=e,dn(e)?this._dataSourceChanges.next(e):this._dataSourceChanges.next(new je(ve(e)?e:Array.from(e||[])))}_cdkVirtualForOf;get cdkVirtualForTrackBy(){return this._cdkVirtualForTrackBy}set cdkVirtualForTrackBy(e){this._needsUpdate=!0,this._cdkVirtualForTrackBy=e?(t,o)=>e(t+(this._renderedRange?this._renderedRange.start:0),o):void 0}_cdkVirtualForTrackBy;set cdkVirtualForTemplate(e){e&&(this._needsUpdate=!0,this._template=e)}get cdkVirtualForTemplateCacheSize(){return this._viewRepeater.viewCacheSize}set cdkVirtualForTemplateCacheSize(e){this._viewRepeater.viewCacheSize=ue(e)}dataStream=this._dataSourceChanges.pipe(Ze(null),gt(),xe(([e,t])=>this._changeDataSource(e,t)),ut(1));_differ=null;_data;_renderedItems;_renderedRange;_needsUpdate=!1;_destroyed=new N;constructor(){let e=f(se);this.dataStream.subscribe(t=>{this._data=t,this._onRenderedDataChange()}),this._viewport.renderedRangeStream.pipe(be(this._destroyed)).subscribe(t=>{this._renderedRange=t,this.viewChange.observers.length&&e.run(()=>this.viewChange.next(this._renderedRange)),this._onRenderedDataChange()}),this._viewport.attach(this)}measureRangeSize(e,t){if(e.start>=e.end)return 0;e.start<this._renderedRange.start||e.end>this._renderedRange.end;let o=e.start-this._renderedRange.start,r=e.end-e.start,p,g;for(let d=0;d<r;d++){let h=this._viewContainerRef.get(d+o);if(h&&h.rootNodes.length){p=g=h.rootNodes[0];break}}for(let d=r-1;d>-1;d--){let h=this._viewContainerRef.get(d+o);if(h&&h.rootNodes.length){g=h.rootNodes[h.rootNodes.length-1];break}}return p&&g?pn(t,"end",g)-pn(t,"start",p):0}ngDoCheck(){if(this._differ&&this._needsUpdate){let e=this._differ.diff(this._renderedItems);e?this._applyChanges(e):this._updateContext(),this._needsUpdate=!1}}ngOnDestroy(){this._viewport.detach(),this._dataSourceChanges.next(void 0),this._dataSourceChanges.complete(),this.viewChange.complete(),this._destroyed.next(),this._destroyed.complete(),this._viewRepeater.detach()}_onRenderedDataChange(){this._renderedRange&&(this._renderedItems=this._data.slice(this._renderedRange.start,this._renderedRange.end),this._differ||(this._differ=this._differs.find(this._renderedItems).create((e,t)=>this.cdkVirtualForTrackBy?this.cdkVirtualForTrackBy(e,t):t)),this._needsUpdate=!0)}_changeDataSource(e,t){return e&&e.disconnect(this),this._needsUpdate=!0,t?t.connect(this):W()}_updateContext(){let e=this._data.length,t=this._viewContainerRef.length;for(;t--;){let o=this._viewContainerRef.get(t);o.context.index=this._renderedRange.start+t,o.context.count=e,this._updateComputedContextProperties(o.context),o.detectChanges()}}_applyChanges(e){this._viewRepeater.applyChanges(e,this._viewContainerRef,(r,p,g)=>this._getEmbeddedViewArgs(r,g),r=>r.item),e.forEachIdentityChange(r=>{let p=this._viewContainerRef.get(r.currentIndex);p.context.$implicit=r.item});let t=this._data.length,o=this._viewContainerRef.length;for(;o--;){let r=this._viewContainerRef.get(o);r.context.index=this._renderedRange.start+o,r.context.count=t,this._updateComputedContextProperties(r.context)}}_updateComputedContextProperties(e){e.first=e.index===0,e.last=e.index===e.count-1,e.even=e.index%2===0,e.odd=!e.even}_getEmbeddedViewArgs(e,t){return{templateRef:this._template,context:{$implicit:e.item,cdkVirtualForOf:this._cdkVirtualForOf,index:-1,count:-1,first:!1,last:!1,odd:!1,even:!1},index:t}}static ngTemplateContextGuard(e,t){return!0}static \u0275fac=function(t){return new(t||i)};static \u0275dir=J({type:i,selectors:[["","cdkVirtualFor","","cdkVirtualForOf",""]],inputs:{cdkVirtualForOf:"cdkVirtualForOf",cdkVirtualForTrackBy:"cdkVirtualForTrackBy",cdkVirtualForTemplate:"cdkVirtualForTemplate",cdkVirtualForTemplateCacheSize:"cdkVirtualForTemplateCacheSize"},features:[ce([{provide:ot,useClass:Ge}])]})}return i})();var fn=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=ae({type:i});static \u0275inj=oe({})}return i})(),vn=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=ae({type:i});static \u0275inj=oe({imports:[it,fn,it,fn]})}return i})();function si(i,n){i&1&&b(0,"span",19)}function li(i,n){if(i&1&&(s(0,"span",23),c(1),a()),i&2){let e=n.$implicit;l(),_(e)}}function ci(i,n){if(i&1&&(s(0,"span",24),c(1),a()),i&2){let e=n.$implicit;l(),_(e)}}function di(i,n){if(i&1&&(s(0,"span",20),v(1,li,2,1,"span",21)(2,ci,2,1,"span",22),a()),i&2){let e=C().$implicit;l(),u("ngForOf",e.tags),l(),u("ngForOf",e.branches)}}function mi(i,n){if(i&1){let e=F();s(0,"button",7),w("click",function(){let o=M(e).$implicit,r=C();return O(r.select(o))}),s(1,"span",8),b(2,"span",9),v(3,si,1,0,"span",10),a(),s(4,"span",11)(5,"span",12),c(6),a(),s(7,"span",13)(8,"span",14),c(9),a(),s(10,"span",15),c(11,"\u2022"),a(),s(12,"span",16),c(13),a(),s(14,"span",15),c(15,"\u2022"),a(),s(16,"span",17),c(17),de(18,"date"),a()()(),v(19,di,3,2,"span",18),a()}if(i&2){let e=n.$implicit,t=n.index,o=C();z("selected",e.hash===o.selectedHash()),le("aria-current",e.hash===o.selectedHash()?"true":null),l(2),ee("background",o.laneColor(e)),z("merge",e.isMerge),l(),u("ngIf",t<o.commits().length-1),l(2),u("title",e.subject),l(),_(e.subject),l(3),_(e.shortHash),l(4),_(e.author),l(4),_(me(18,14,e.date,"MMM d, y, h:mm a")),l(2),u("ngIf",e.branches.length||e.tags.length)}}function pi(i,n){i&1&&(s(0,"div",25)(1,"p"),c(2,"No commits match your filters."),a()())}var He=class i{state=f(G);commits=this.state.commits;selectedHash=this.state.selectedHash;trackByHash(n,e){return e.hash}select(n){this.state.selectHash(n.hash)}laneColors=["#4f46e5","#06b6d4","#f59e0b","#ef4444","#10b981","#8b5cf6"];laneColor(n){let e=0,t=n.branches[0]??n.parents[0]??n.hash;for(let o=0;o<t.length;o++)e=e*31+t.charCodeAt(o)>>>0;return this.laneColors[e%this.laneColors.length]}onKey(n){if(!this.isTyping(n.target)){if(n.key==="j")n.preventDefault(),this.state.selectByOffset(1);else if(n.key==="k")n.preventDefault(),this.state.selectByOffset(-1);else if(n.key==="g"){n.preventDefault();let e=this.state.commits();e.length&&this.state.selectHash(e[0].hash)}else if(n.key==="G"){n.preventDefault();let e=this.state.commits();e.length&&this.state.selectHash(e[e.length-1].hash)}}}isTyping(n){return n instanceof HTMLElement?["INPUT","TEXTAREA","SELECT"].includes(n.tagName)||n.isContentEditable:!1}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=D({type:i,selectors:[["app-commit-list"]],hostBindings:function(e,t){e&1&&w("keydown",function(r){return t.onKey(r)},Se)},decls:13,vars:6,consts:[[1,"header"],[1,"count"],[1,"hint"],[1,"kbd"],["minBufferPx","640","maxBufferPx","1280",1,"viewport",3,"itemSize"],["class","row",3,"selected","click",4,"cdkVirtualFor","cdkVirtualForOf","cdkVirtualForTrackBy"],["class","empty",4,"ngIf"],[1,"row",3,"click"],[1,"lane"],[1,"dot"],["class","line",4,"ngIf"],[1,"content"],[1,"subject",3,"title"],[1,"meta"],[1,"hash"],[1,"dot-sep"],[1,"author"],[1,"date"],["class","badges",4,"ngIf"],[1,"line"],[1,"badges"],["class","badge tag",4,"ngFor","ngForOf"],["class","badge branch",4,"ngFor","ngForOf"],[1,"badge","tag"],[1,"badge","branch"],[1,"empty"]],template:function(e,t){e&1&&(s(0,"div",0)(1,"span",1),c(2),a(),s(3,"span",2)(4,"kbd",3),c(5,"j"),a(),c(6,"/"),s(7,"kbd",3),c(8,"k"),a(),c(9," navigate "),a()(),s(10,"cdk-virtual-scroll-viewport",4),v(11,mi,20,17,"button",5)(12,pi,3,0,"div",6),a()),e&2&&(l(2),De("",t.commits().length," of ",t.state.total()),l(8),u("itemSize",64),l(),u("cdkVirtualForOf",t.commits())("cdkVirtualForTrackBy",t.trackByHash),l(),u("ngIf",!t.commits().length&&!t.state.loading()))},dependencies:[T,$,R,vn,un,_n,at,Pe],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--bg-surface);border-right:1px solid var(--border-soft)}.header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:.5rem .85rem;border-bottom:1px solid var(--border-soft);font-size:12px;color:var(--fg-muted);background:var(--bg-surface)}.viewport[_ngcontent-%COMP%]{flex:1;min-height:0}.row[_ngcontent-%COMP%]{display:grid;grid-template-columns:24px 1fr auto;gap:.5rem;align-items:center;width:100%;height:64px;padding:.45rem .85rem;background:transparent;border:0;border-bottom:1px solid var(--border-soft);color:inherit;text-align:left;cursor:pointer;transition:background .1s}.row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.row.selected[_ngcontent-%COMP%]{background:var(--bg-selected)}.row.selected[_ngcontent-%COMP%] .subject[_ngcontent-%COMP%]{color:var(--fg-primary)}.lane[_ngcontent-%COMP%]{position:relative;width:24px;height:100%;display:flex;align-items:center;justify-content:center}.dot[_ngcontent-%COMP%]{width:10px;height:10px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--bg-surface);z-index:1}.dot.merge[_ngcontent-%COMP%]{background:transparent;border:2px solid var(--accent)}.line[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;width:2px;height:50%;background:var(--border-strong);transform:translate(-50%)}.content[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0;gap:2px}.subject[_ngcontent-%COMP%]{font-weight:500;color:var(--fg-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meta[_ngcontent-%COMP%]{display:flex;gap:6px;font-size:11px;color:var(--fg-muted);align-items:center}.hash[_ngcontent-%COMP%]{font-family:var(--font-mono)}.dot-sep[_ngcontent-%COMP%]{opacity:.5}.badges[_ngcontent-%COMP%]{display:flex;gap:4px;flex-wrap:wrap}.badge[_ngcontent-%COMP%]{font-size:10px;font-weight:600;padding:2px 6px;border-radius:999px;letter-spacing:.02em}.badge.tag[_ngcontent-%COMP%]{background:#d9770626;color:var(--warning)}.badge.branch[_ngcontent-%COMP%]{background:var(--accent-soft);color:var(--accent)}.empty[_ngcontent-%COMP%]{padding:2rem 1rem;text-align:center;color:var(--fg-muted)}"],changeDetection:0})};var We=class i{http=f(Ie);base="/api";list(n={}){let e=new jt;for(let[t,o]of Object.entries(n))o&&(e=e.set(t,String(o)));return this.http.get(`${this.base}/groups`,{params:e})}static \u0275fac=function(e){return new(e||i)};static \u0275prov=V({token:i,factory:i.\u0275fac,providedIn:"root"})};function fi(i,n){if(i&1&&(s(0,"span",7),c(1),a()),i&2){let e=n.ngIf;l(),B("",e," groups")}}function gi(i,n){i&1&&(s(0,"div",8),c(1,"Loading groups\u2026"),a())}function ui(i,n){if(i&1&&(s(0,"div",9),c(1),a()),i&2){let e=n.ngIf;l(),_(e)}}function hi(i,n){i&1&&(s(0,"div",8),c(1," No groups detected. Try the flat view. "),a())}function _i(i,n){if(i&1&&(s(0,"span",18),c(1),a()),i&2){let e=C().$implicit;l(),B("#",e.prNumber)}}function vi(i,n){if(i&1){let e=F();s(0,"li",21),w("click",function(){let o=M(e).$implicit,r=C(3);return O(r.state.selectHash(o))}),s(1,"code",22),c(2),a(),s(3,"span",23),c(4),a()()}if(i&2){let e=n.$implicit,t=C(3);z("selected",e===t.state.selectedHash()),l(2),_(t.shortHash(e)),l(2),_(t.subjectFor(e))}}function Ci(i,n){if(i&1&&(s(0,"ul",19),v(1,vi,5,4,"li",20),a()),i&2){let e=C().$implicit;l(),u("ngForOf",e.commits)}}function xi(i,n){if(i&1){let e=F();s(0,"li",10)(1,"button",11),w("click",function(){let o=M(e).$implicit,r=C();return O(r.toggle(o.id))}),s(2,"span",12),c(3,"\u25B8"),a(),s(4,"span",13),c(5),a(),v(6,_i,2,1,"span",14),s(7,"span",15),c(8),a(),s(9,"span",16),c(10),a()(),v(11,Ci,2,1,"ul",17),a()}if(i&2){let e=n.$implicit,t=C();z("expanded",t.isExpanded(e.id)),l(2),z("open",t.isExpanded(e.id)),l(2),Nt("src-"+e.source),l(),_(t.sourceLabel(e.source)),l(),u("ngIf",e.prNumber),l(2),_(e.title),l(2),_(e.commits.length),l(),u("ngIf",t.isExpanded(e.id))}}var $e=class i{state=f(G);groupsApi=f(We);groups=x(null);loading=x(!1);error=x(null);expanded=x(new Set);subjectMap=te(()=>{let n=new Map;for(let e of this.state.commits())n.set(e.hash,e.subject);return n});constructor(){j(()=>{let n=this.state.filters();this.load(n.since,n.until,n.author)})}isExpanded(n){return this.expanded().has(n)}toggle(n){let e=new Set(this.expanded());e.has(n)?e.delete(n):e.add(n),this.expanded.set(e)}shortHash(n){return n.slice(0,7)}subjectFor(n){return this.subjectMap().get(n)??n.slice(0,7)}sourceLabel(n){switch(n){case"merge":return"PR";case"squash":return"PR (sq)";case"conventional":return"Feat";case"standalone":return"commit"}}load(n,e,t){this.loading.set(!0),this.error.set(null),this.groupsApi.list({since:n,until:e,author:t}).subscribe({next:o=>{this.groups.set(o),this.loading.set(!1);let r=o.find(p=>p.prNumber);r&&this.expanded.set(new Set([r.id]))},error:o=>{this.error.set(this.errMsg(o)),this.loading.set(!1)}})}errMsg(n){if(n&&typeof n=="object"&&"error"in n){let e=n.error;if(e?.error)return e.error}return n instanceof Error?n.message:"Failed to load groups"}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=D({type:i,selectors:[["app-grouped-list"]],decls:9,vars:5,consts:[[1,"head"],[1,"title"],["class","meta",4,"ngIf"],["class","empty",4,"ngIf"],["class","empty error",4,"ngIf"],[1,"groups"],["class","group",3,"expanded",4,"ngFor","ngForOf"],[1,"meta"],[1,"empty"],[1,"empty","error"],[1,"group"],[1,"group-head",3,"click"],[1,"caret"],[1,"badge"],["class","pr",4,"ngIf"],[1,"g-title"],[1,"count"],["class","commits",4,"ngIf"],[1,"pr"],[1,"commits"],["class","commit",3,"selected","click",4,"ngFor","ngForOf"],[1,"commit",3,"click"],[1,"hash"],[1,"subject"]],template:function(e,t){if(e&1&&(s(0,"div",0)(1,"span",1),c(2,"PR / feature groups"),a(),v(3,fi,2,1,"span",2),a(),v(4,gi,2,0,"div",3)(5,ui,2,1,"div",4)(6,hi,2,0,"div",3),s(7,"ul",5),v(8,xi,12,11,"li",6),a()),e&2){let o,r;l(3),u("ngIf",(o=t.groups())==null?null:o.length),l(),u("ngIf",t.loading()),l(),u("ngIf",t.error()),l(),u("ngIf",!t.loading()&&!t.error()&&(((r=t.groups())==null?null:r.length)??0)===0),l(2),u("ngForOf",t.groups())}},dependencies:[T,$,R],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:.6rem .85rem;border-bottom:1px solid var(--border-soft);background:var(--bg-surface)}.title[_ngcontent-%COMP%]{font-weight:600;font-size:13px}.meta[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted)}.empty[_ngcontent-%COMP%]{padding:1rem .85rem;color:var(--fg-muted);font-size:12px}.empty.error[_ngcontent-%COMP%]{color:var(--danger)}.groups[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;overflow-y:auto;flex:1}.group[_ngcontent-%COMP%]{border-bottom:1px solid var(--border-soft)}.group-head[_ngcontent-%COMP%]{width:100%;display:flex;align-items:center;gap:.5rem;padding:.55rem .85rem;background:transparent;border:0;color:var(--fg-primary);cursor:pointer;text-align:left}.group-head[_ngcontent-%COMP%]:hover{background:var(--bg-elevated)}.caret[_ngcontent-%COMP%]{display:inline-block;width:10px;transition:transform .15s ease;color:var(--fg-muted)}.caret.open[_ngcontent-%COMP%]{transform:rotate(90deg)}.badge[_ngcontent-%COMP%]{font-size:10px;letter-spacing:.04em;padding:1px 6px;border-radius:3px;background:var(--bg-elevated);color:var(--fg-secondary);text-transform:uppercase}.badge.src-merge[_ngcontent-%COMP%]{background:#6366f12e;color:var(--accent)}.badge.src-squash[_ngcontent-%COMP%]{background:#10b9812e;color:#10b981}.badge.src-conventional[_ngcontent-%COMP%]{background:#f59e0b2e;color:#d97706}.pr[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted)}.g-title[_ngcontent-%COMP%]{flex:1;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.count[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted);background:var(--bg-elevated);padding:1px 6px;border-radius:999px}.commits[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0 0 .4rem;background:var(--bg-app)}.commit[_ngcontent-%COMP%]{display:flex;gap:.6rem;align-items:center;padding:.3rem .85rem .3rem 2rem;cursor:pointer;font-size:12px}.commit[_ngcontent-%COMP%]:hover{background:var(--bg-elevated)}.commit.selected[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--accent) 20%,transparent)}.commit[_ngcontent-%COMP%] .hash[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:11px;color:var(--fg-muted)}.commit[_ngcontent-%COMP%] .subject[_ngcontent-%COMP%]{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}"],changeDetection:0})};function bi(i,n){i&1&&(Me(0),b(1,"app-grouped-list"),Oe())}function wi(i,n){i&1&&b(0,"app-commit-list")}var Cn=class i{state=f(G);static \u0275fac=function(e){return new(e||i)};static \u0275cmp=D({type:i,selectors:[["app-home-shell"]],decls:9,vars:2,consts:[["flat",""],[1,"layout"],[1,"pane","graph"],[1,"pane","list"],[4,"ngIf","ngIfElse"],[1,"pane","detail"]],template:function(e,t){if(e&1&&(s(0,"main",1)(1,"aside",2),b(2,"app-commit-graph"),a(),s(3,"section",3),v(4,bi,2,0,"ng-container",4)(5,wi,1,0,"ng-template",null,0,ke),a(),s(7,"section",5),b(8,"app-commit-detail"),a()()),e&2){let o=Ee(6);l(4),u("ngIf",t.state.viewMode()==="grouped")("ngIfElse",o)}},dependencies:[T,R,ze,He,Ne,$e],styles:["[_nghost-%COMP%]{display:block;flex:1;min-height:0}.layout[_ngcontent-%COMP%]{height:100%;display:grid;grid-template-columns:220px 380px 1fr;min-height:0}.pane[_ngcontent-%COMP%]{min-width:0;min-height:0;overflow:hidden}.pane.graph[_ngcontent-%COMP%]{border-right:1px solid var(--border-soft)}@media (max-width: 1100px){.layout[_ngcontent-%COMP%]{grid-template-columns:320px 1fr}.pane.graph[_ngcontent-%COMP%]{display:none}}@media (max-width: 720px){.layout[_ngcontent-%COMP%]{grid-template-columns:1fr}.pane.list[_ngcontent-%COMP%]{display:none}}"],changeDetection:0})};export{Cn as HomeShellComponent};
@@ -1 +1 @@
1
- import{a as J}from"./chunk-HYRHOB47.js";import{a as H,b as V,c as B,d as U,h as q}from"./chunk-YSTG766K.js";import{a as G}from"./chunk-N7UHDKJ7.js";import"./chunk-ITIFFECZ.js";import{$ as h,Ab as d,Bb as y,Cb as z,Ga as o,Ib as A,Pa as P,Sb as v,Ta as m,Tb as M,W as D,db as l,dc as j,ea as E,eb as r,ec as R,fa as S,fb as a,gb as F,hc as L,mb as w,mc as k,nb as x,nc as $,oa as g,ob as f,xb as C,yb as N,zb as s}from"./chunk-TQE5NWMZ.js";var b=class n{http=h($);base="/api";snapshot(t){let e=new k().set("at",t);return this.http.get(`${this.base}/snapshot`,{params:e})}rangeDiff(t,e){let i=new k().set("from",t).set("to",e);return this.http.get(`${this.base}/diff`,{params:i})}static \u0275fac=function(e){return new(e||n)};static \u0275prov=D({token:n,factory:n.\u0275fac,providedIn:"root"})};function X(n,t){if(n&1&&(r(0,"span",16),s(1,"|"),a()),n&2){let e=t.$implicit,i=t.index,c=f();C("active",i===c.tickIndex()),l("title",e.label)}}function Y(n,t){if(n&1&&(r(0,"li")(1,"span",25),s(2),a(),r(3,"code",26),s(4),a()()),n&2){let e=t.$implicit;o(2),d(e.name),o(2),d(e.hash.slice(0,7))}}function Z(n,t){if(n&1&&(r(0,"div",22)(1,"span",19),s(2),a(),r(3,"ul",23),m(4,Y,5,2,"li",24),a()()),n&2){let e=f().ngIf,i=f();o(2),y("Branches (",i.branchEntries(e).length,")"),o(2),l("ngForOf",i.branchEntries(e).slice(0,8))}}function ee(n,t){if(n&1&&(r(0,"li")(1,"span",25),s(2),a(),r(3,"code",26),s(4),a()()),n&2){let e=t.$implicit;o(2),d(e.name),o(2),d(e.hash.slice(0,7))}}function te(n,t){if(n&1&&(r(0,"div",22)(1,"span",19),s(2),a(),r(3,"ul",23),m(4,ee,5,2,"li",24),a()()),n&2){let e=f().ngIf,i=f();o(2),y("Tags (",i.tagEntries(e).length,")"),o(2),l("ngForOf",i.tagEntries(e).slice(0,8))}}function ne(n,t){if(n&1&&(r(0,"section",17)(1,"div",18)(2,"span",19),s(3,"HEAD at this moment"),a(),r(4,"code",20),s(5),a()(),m(6,Z,5,2,"div",21)(7,te,5,2,"div",21),a()),n&2){let e=t.ngIf,i=f();o(5),d(e.ref??"(no commits yet)"),o(),l("ngIf",i.branchEntries(e).length),o(),l("ngIf",i.tagEntries(e).length)}}function ie(n,t){n&1&&(r(0,"span",27),s(1,"Computing diff\u2026"),a())}function ae(n,t){if(n&1&&(r(0,"span",27),s(1),a()),n&2){let e=t.ngIf;o(),d(e)}}function oe(n,t){n&1&&(r(0,"span",28),s(1," No differences (you're already at HEAD). "),a())}function re(n,t){if(n&1){let e=w();r(0,"div",31),x("click",function(){let c=E(e).$implicit,p=f(2);return S(p.selectedFile.set(c))}),r(1,"span"),s(2),a(),r(3,"span",32),s(4),a(),r(5,"span",33),s(6),a()()}if(n&2){let e=t.$implicit,i=f(2);C("selected",e===i.selectedFile()),o(),N(A("status status-",e.status)),o(),d(i.statusLabel(e.status)),o(2),d(e.file),o(2),z("+",e.additions," \u2212",e.deletions)}}function se(n,t){if(n&1&&(r(0,"div",29),m(1,re,7,9,"div",30),a()),n&2){let e=f();o(),l("ngForOf",e.diff())}}function le(n,t){if(n&1&&(r(0,"div",34),F(1,"app-diff-viewer",35),a()),n&2){let e=t.ngIf;o(),l("fileInput",e)}}var K=class n{state=h(G);timelineApi=h(b);snapshot=g(null);diff=g(null);loadingDiff=g(!1);diffError=g(null);selectedFile=g(null);tickIndex=g(0);ticks=v(()=>de(this.state.commits()));atDisplay=v(()=>{let t=this.ticks()[this.tickIndex()];return t?t.label:""});firstTickLabel=v(()=>this.ticks()[0]?.label??"");lastTickLabel=v(()=>this.ticks()[this.ticks().length-1]?.label??"");constructor(){M(()=>{let t=this.ticks();t.length!==0&&this.tickIndex()>=t.length&&this.tickIndex.set(t.length-1)}),M(()=>{let t=this.ticks()[this.tickIndex()];t&&this.timelineApi.snapshot(t.iso).subscribe({next:e=>{this.snapshot.set(e),this.loadDiff(e)},error:()=>this.snapshot.set(null)})})}onTickChange(t){this.tickIndex.set(Math.max(0,Math.min(this.ticks().length-1,Number(t))))}branchEntries(t){return Object.entries(t.branches).map(([e,i])=>({name:e,hash:i}))}tagEntries(t){return Object.entries(t.tags).map(([e,i])=>({name:e,hash:i}))}statusLabel(t){return t==="modified"?"mod":t.slice(0,3)}loadDiff(t){if(!t.ref){this.diff.set([]),this.selectedFile.set(null);return}let e=this.state.commits()[0]?.hash;if(!e||e===t.ref){this.diff.set([]),this.selectedFile.set(null);return}this.loadingDiff.set(!0),this.diffError.set(null),this.timelineApi.rangeDiff(t.ref,e).subscribe({next:i=>{this.diff.set(i),this.selectedFile.set(i[0]??null),this.loadingDiff.set(!1)},error:i=>{this.diffError.set(i?.error?.error??"Failed to compute diff"),this.loadingDiff.set(!1)}})}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=P({type:n,selectors:[["app-timeline"]],decls:28,vars:12,consts:[[1,"page"],[1,"head"],[1,"sub"],[1,"now"],[1,"slider-wrap"],["type","range","min","0",1,"slider",3,"ngModelChange","max","ngModel"],[1,"ticks"],["class","tick",3,"active","title",4,"ngFor","ngForOf"],[1,"tick-labels"],["class","snapshot",4,"ngIf"],[1,"diff-panel"],[1,"diff-head"],["class","diff-status",4,"ngIf"],["class","diff-status muted",4,"ngIf"],["class","files",4,"ngIf"],["class","diff-body",4,"ngIf"],[1,"tick",3,"title"],[1,"snapshot"],[1,"snap-card"],[1,"snap-label"],[1,"snap-hash"],["class","snap-card branches",4,"ngIf"],[1,"snap-card","branches"],[1,"ref-list"],[4,"ngFor","ngForOf"],[1,"ref-name"],[1,"ref-hash"],[1,"diff-status"],[1,"diff-status","muted"],[1,"files"],["class","file",3,"selected","click",4,"ngFor","ngForOf"],[1,"file",3,"click"],[1,"path"],[1,"changes"],[1,"diff-body"],[3,"fileInput"]],template:function(e,i){if(e&1&&(r(0,"div",0)(1,"header",1)(2,"div")(3,"h2"),s(4,"Time travel"),a(),r(5,"p",2),s(6,"Drag the slider to see repo state at any point. Diff is computed against current HEAD."),a()(),r(7,"div",3),s(8),a()(),r(9,"div",4)(10,"input",5),x("ngModelChange",function(p){return i.onTickChange(p)}),a(),r(11,"div",6),m(12,X,2,3,"span",7),a(),r(13,"div",8)(14,"span"),s(15),a(),r(16,"span"),s(17),a()()(),m(18,ne,8,3,"section",9),r(19,"section",10)(20,"div",11)(21,"h3"),s(22,"Diff vs HEAD"),a(),m(23,ie,2,0,"span",12)(24,ae,2,1,"span",12)(25,oe,2,0,"span",13),a(),m(26,se,2,1,"div",14)(27,le,2,1,"div",15),a()()),e&2){let c,p;o(8),d(i.atDisplay()),o(2),l("max",i.ticks().length-1)("ngModel",i.tickIndex()),o(2),l("ngForOf",i.ticks()),o(3),d(i.firstTickLabel()),o(2),d(i.lastTickLabel()),o(),l("ngIf",i.snapshot()),o(5),l("ngIf",i.loadingDiff()),o(),l("ngIf",i.diffError()),o(),l("ngIf",!i.loadingDiff()&&!i.diffError()&&((c=i.diff())==null?null:c.length)===0),o(),l("ngIf",(((p=i.diff())==null?null:p.length)??0)>0),o(),l("ngIf",i.selectedFile())}},dependencies:[L,j,R,q,H,U,V,B,J],styles:["[_nghost-%COMP%]{display:block;flex:1;min-height:0;overflow-y:auto}.page[_ngcontent-%COMP%]{padding:1rem 1.25rem;max-width:1200px;margin:0 auto}.head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:1rem}.head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:18px}.head[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%]{margin:.2rem 0 0;color:var(--fg-muted);font-size:13px}.now[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:13px;padding:.4rem .7rem;background:var(--bg-elevated);border:1px solid var(--border-soft);border-radius:var(--radius-sm)}.slider-wrap[_ngcontent-%COMP%]{background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:1rem 1.25rem;margin-bottom:1rem}.slider[_ngcontent-%COMP%]{width:100%;accent-color:var(--accent)}.ticks[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-top:.4rem;color:var(--fg-subtle);font-size:10px}.tick.active[_ngcontent-%COMP%]{color:var(--accent);font-weight:700}.tick-labels[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-top:.5rem;font-size:11px;color:var(--fg-muted)}.snapshot[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem;margin-bottom:1rem}.snap-card[_ngcontent-%COMP%]{background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:.75rem 1rem}.snap-label[_ngcontent-%COMP%]{display:block;font-size:11px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.4rem}.snap-hash[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:13px;color:var(--accent);word-break:break-all}.ref-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;font-size:12px}.ref-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:2px 0;gap:1rem}.ref-name[_ngcontent-%COMP%]{color:var(--fg-secondary)}.ref-hash[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);color:var(--fg-muted);font-size:11px}.diff-panel[_ngcontent-%COMP%]{background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);overflow:hidden}.diff-head[_ngcontent-%COMP%]{padding:.75rem 1rem;border-bottom:1px solid var(--border-soft);display:flex;align-items:baseline;gap:1rem}.diff-head[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:14px}.diff-status[_ngcontent-%COMP%]{font-size:12px;color:var(--fg-muted)}.diff-status.muted[_ngcontent-%COMP%]{font-style:italic}.files[_ngcontent-%COMP%]{padding:.5rem 0;max-height:220px;overflow-y:auto}.file[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6rem;padding:.35rem 1rem;cursor:pointer;font-size:12px}.file[_ngcontent-%COMP%]:hover{background:var(--bg-elevated)}.file.selected[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--accent) 18%,transparent)}.status[_ngcontent-%COMP%]{font-size:10px;padding:1px 6px;border-radius:3px;background:var(--bg-elevated);color:var(--fg-muted);text-transform:uppercase}.status-added[_ngcontent-%COMP%]{background:#10b9812e;color:#10b981}.status-deleted[_ngcontent-%COMP%]{background:#ef44442e;color:#ef4444}.status-modified[_ngcontent-%COMP%]{background:#6366f12e;color:var(--accent)}.path[_ngcontent-%COMP%]{flex:1;font-family:var(--font-mono, monospace)}.changes[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted)}.diff-body[_ngcontent-%COMP%]{border-top:1px solid var(--border-soft);padding:.5rem 0}"],changeDetection:0})};function de(n){if(n.length===0)return[];let t=[...n].sort((u,_)=>u.date.localeCompare(_.date)),e=t[0].date,i=t[t.length-1].date,c=new Date(e),O=new Date(i).getTime()-c.getTime(),I=Math.max(12,Math.min(24,Math.floor(O/(1e3*60*60*24*7))+1)),Q=O/Math.max(1,I-1),T=[];for(let u=0;u<I;u++){let _=new Date(c.getTime()+u*Q);T.push({iso:_.toISOString(),label:_.toISOString().slice(0,10)})}return T}export{K as TimelineComponent};
1
+ import{a as J}from"./chunk-R33W2FKN.js";import{a as H,b as V,c as B,d as U,h as q}from"./chunk-YSTG766K.js";import{a as G}from"./chunk-N7UHDKJ7.js";import"./chunk-ITIFFECZ.js";import{$ as h,Ab as d,Bb as y,Cb as z,Ga as o,Ib as A,Pa as P,Sb as v,Ta as m,Tb as M,W as D,db as l,dc as j,ea as E,eb as r,ec as R,fa as S,fb as a,gb as F,hc as L,mb as w,mc as k,nb as x,nc as $,oa as g,ob as f,xb as C,yb as N,zb as s}from"./chunk-TQE5NWMZ.js";var b=class n{http=h($);base="/api";snapshot(t){let e=new k().set("at",t);return this.http.get(`${this.base}/snapshot`,{params:e})}rangeDiff(t,e){let i=new k().set("from",t).set("to",e);return this.http.get(`${this.base}/diff`,{params:i})}static \u0275fac=function(e){return new(e||n)};static \u0275prov=D({token:n,factory:n.\u0275fac,providedIn:"root"})};function X(n,t){if(n&1&&(r(0,"span",16),s(1,"|"),a()),n&2){let e=t.$implicit,i=t.index,c=f();C("active",i===c.tickIndex()),l("title",e.label)}}function Y(n,t){if(n&1&&(r(0,"li")(1,"span",25),s(2),a(),r(3,"code",26),s(4),a()()),n&2){let e=t.$implicit;o(2),d(e.name),o(2),d(e.hash.slice(0,7))}}function Z(n,t){if(n&1&&(r(0,"div",22)(1,"span",19),s(2),a(),r(3,"ul",23),m(4,Y,5,2,"li",24),a()()),n&2){let e=f().ngIf,i=f();o(2),y("Branches (",i.branchEntries(e).length,")"),o(2),l("ngForOf",i.branchEntries(e).slice(0,8))}}function ee(n,t){if(n&1&&(r(0,"li")(1,"span",25),s(2),a(),r(3,"code",26),s(4),a()()),n&2){let e=t.$implicit;o(2),d(e.name),o(2),d(e.hash.slice(0,7))}}function te(n,t){if(n&1&&(r(0,"div",22)(1,"span",19),s(2),a(),r(3,"ul",23),m(4,ee,5,2,"li",24),a()()),n&2){let e=f().ngIf,i=f();o(2),y("Tags (",i.tagEntries(e).length,")"),o(2),l("ngForOf",i.tagEntries(e).slice(0,8))}}function ne(n,t){if(n&1&&(r(0,"section",17)(1,"div",18)(2,"span",19),s(3,"HEAD at this moment"),a(),r(4,"code",20),s(5),a()(),m(6,Z,5,2,"div",21)(7,te,5,2,"div",21),a()),n&2){let e=t.ngIf,i=f();o(5),d(e.ref??"(no commits yet)"),o(),l("ngIf",i.branchEntries(e).length),o(),l("ngIf",i.tagEntries(e).length)}}function ie(n,t){n&1&&(r(0,"span",27),s(1,"Computing diff\u2026"),a())}function ae(n,t){if(n&1&&(r(0,"span",27),s(1),a()),n&2){let e=t.ngIf;o(),d(e)}}function oe(n,t){n&1&&(r(0,"span",28),s(1," No differences (you're already at HEAD). "),a())}function re(n,t){if(n&1){let e=w();r(0,"div",31),x("click",function(){let c=E(e).$implicit,p=f(2);return S(p.selectedFile.set(c))}),r(1,"span"),s(2),a(),r(3,"span",32),s(4),a(),r(5,"span",33),s(6),a()()}if(n&2){let e=t.$implicit,i=f(2);C("selected",e===i.selectedFile()),o(),N(A("status status-",e.status)),o(),d(i.statusLabel(e.status)),o(2),d(e.file),o(2),z("+",e.additions," \u2212",e.deletions)}}function se(n,t){if(n&1&&(r(0,"div",29),m(1,re,7,9,"div",30),a()),n&2){let e=f();o(),l("ngForOf",e.diff())}}function le(n,t){if(n&1&&(r(0,"div",34),F(1,"app-diff-viewer",35),a()),n&2){let e=t.ngIf;o(),l("fileInput",e)}}var K=class n{state=h(G);timelineApi=h(b);snapshot=g(null);diff=g(null);loadingDiff=g(!1);diffError=g(null);selectedFile=g(null);tickIndex=g(0);ticks=v(()=>de(this.state.commits()));atDisplay=v(()=>{let t=this.ticks()[this.tickIndex()];return t?t.label:""});firstTickLabel=v(()=>this.ticks()[0]?.label??"");lastTickLabel=v(()=>this.ticks()[this.ticks().length-1]?.label??"");constructor(){M(()=>{let t=this.ticks();t.length!==0&&this.tickIndex()>=t.length&&this.tickIndex.set(t.length-1)}),M(()=>{let t=this.ticks()[this.tickIndex()];t&&this.timelineApi.snapshot(t.iso).subscribe({next:e=>{this.snapshot.set(e),this.loadDiff(e)},error:()=>this.snapshot.set(null)})})}onTickChange(t){this.tickIndex.set(Math.max(0,Math.min(this.ticks().length-1,Number(t))))}branchEntries(t){return Object.entries(t.branches).map(([e,i])=>({name:e,hash:i}))}tagEntries(t){return Object.entries(t.tags).map(([e,i])=>({name:e,hash:i}))}statusLabel(t){return t==="modified"?"mod":t.slice(0,3)}loadDiff(t){if(!t.ref){this.diff.set([]),this.selectedFile.set(null);return}let e=this.state.commits()[0]?.hash;if(!e||e===t.ref){this.diff.set([]),this.selectedFile.set(null);return}this.loadingDiff.set(!0),this.diffError.set(null),this.timelineApi.rangeDiff(t.ref,e).subscribe({next:i=>{this.diff.set(i),this.selectedFile.set(i[0]??null),this.loadingDiff.set(!1)},error:i=>{this.diffError.set(i?.error?.error??"Failed to compute diff"),this.loadingDiff.set(!1)}})}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=P({type:n,selectors:[["app-timeline"]],decls:28,vars:12,consts:[[1,"page"],[1,"head"],[1,"sub"],[1,"now"],[1,"slider-wrap"],["type","range","min","0",1,"slider",3,"ngModelChange","max","ngModel"],[1,"ticks"],["class","tick",3,"active","title",4,"ngFor","ngForOf"],[1,"tick-labels"],["class","snapshot",4,"ngIf"],[1,"diff-panel"],[1,"diff-head"],["class","diff-status",4,"ngIf"],["class","diff-status muted",4,"ngIf"],["class","files",4,"ngIf"],["class","diff-body",4,"ngIf"],[1,"tick",3,"title"],[1,"snapshot"],[1,"snap-card"],[1,"snap-label"],[1,"snap-hash"],["class","snap-card branches",4,"ngIf"],[1,"snap-card","branches"],[1,"ref-list"],[4,"ngFor","ngForOf"],[1,"ref-name"],[1,"ref-hash"],[1,"diff-status"],[1,"diff-status","muted"],[1,"files"],["class","file",3,"selected","click",4,"ngFor","ngForOf"],[1,"file",3,"click"],[1,"path"],[1,"changes"],[1,"diff-body"],[3,"fileInput"]],template:function(e,i){if(e&1&&(r(0,"div",0)(1,"header",1)(2,"div")(3,"h2"),s(4,"Time travel"),a(),r(5,"p",2),s(6,"Drag the slider to see repo state at any point. Diff is computed against current HEAD."),a()(),r(7,"div",3),s(8),a()(),r(9,"div",4)(10,"input",5),x("ngModelChange",function(p){return i.onTickChange(p)}),a(),r(11,"div",6),m(12,X,2,3,"span",7),a(),r(13,"div",8)(14,"span"),s(15),a(),r(16,"span"),s(17),a()()(),m(18,ne,8,3,"section",9),r(19,"section",10)(20,"div",11)(21,"h3"),s(22,"Diff vs HEAD"),a(),m(23,ie,2,0,"span",12)(24,ae,2,1,"span",12)(25,oe,2,0,"span",13),a(),m(26,se,2,1,"div",14)(27,le,2,1,"div",15),a()()),e&2){let c,p;o(8),d(i.atDisplay()),o(2),l("max",i.ticks().length-1)("ngModel",i.tickIndex()),o(2),l("ngForOf",i.ticks()),o(3),d(i.firstTickLabel()),o(2),d(i.lastTickLabel()),o(),l("ngIf",i.snapshot()),o(5),l("ngIf",i.loadingDiff()),o(),l("ngIf",i.diffError()),o(),l("ngIf",!i.loadingDiff()&&!i.diffError()&&((c=i.diff())==null?null:c.length)===0),o(),l("ngIf",(((p=i.diff())==null?null:p.length)??0)>0),o(),l("ngIf",i.selectedFile())}},dependencies:[L,j,R,q,H,U,V,B,J],styles:["[_nghost-%COMP%]{display:block;flex:1;min-height:0;overflow-y:auto}.page[_ngcontent-%COMP%]{padding:1rem 1.25rem;max-width:1200px;margin:0 auto}.head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:1rem}.head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:18px}.head[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%]{margin:.2rem 0 0;color:var(--fg-muted);font-size:13px}.now[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:13px;padding:.4rem .7rem;background:var(--bg-elevated);border:1px solid var(--border-soft);border-radius:var(--radius-sm)}.slider-wrap[_ngcontent-%COMP%]{background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:1rem 1.25rem;margin-bottom:1rem}.slider[_ngcontent-%COMP%]{width:100%;accent-color:var(--accent)}.ticks[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-top:.4rem;color:var(--fg-subtle);font-size:10px}.tick.active[_ngcontent-%COMP%]{color:var(--accent);font-weight:700}.tick-labels[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-top:.5rem;font-size:11px;color:var(--fg-muted)}.snapshot[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem;margin-bottom:1rem}.snap-card[_ngcontent-%COMP%]{background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:.75rem 1rem}.snap-label[_ngcontent-%COMP%]{display:block;font-size:11px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.4rem}.snap-hash[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:13px;color:var(--accent);word-break:break-all}.ref-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;font-size:12px}.ref-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:2px 0;gap:1rem}.ref-name[_ngcontent-%COMP%]{color:var(--fg-secondary)}.ref-hash[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);color:var(--fg-muted);font-size:11px}.diff-panel[_ngcontent-%COMP%]{background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);overflow:hidden}.diff-head[_ngcontent-%COMP%]{padding:.75rem 1rem;border-bottom:1px solid var(--border-soft);display:flex;align-items:baseline;gap:1rem}.diff-head[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:14px}.diff-status[_ngcontent-%COMP%]{font-size:12px;color:var(--fg-muted)}.diff-status.muted[_ngcontent-%COMP%]{font-style:italic}.files[_ngcontent-%COMP%]{padding:.5rem 0;max-height:220px;overflow-y:auto}.file[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6rem;padding:.35rem 1rem;cursor:pointer;font-size:12px}.file[_ngcontent-%COMP%]:hover{background:var(--bg-elevated)}.file.selected[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--accent) 18%,transparent)}.status[_ngcontent-%COMP%]{font-size:10px;padding:1px 6px;border-radius:3px;background:var(--bg-elevated);color:var(--fg-muted);text-transform:uppercase}.status-added[_ngcontent-%COMP%]{background:#10b9812e;color:#10b981}.status-deleted[_ngcontent-%COMP%]{background:#ef44442e;color:#ef4444}.status-modified[_ngcontent-%COMP%]{background:#6366f12e;color:var(--accent)}.path[_ngcontent-%COMP%]{flex:1;font-family:var(--font-mono, monospace)}.changes[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted)}.diff-body[_ngcontent-%COMP%]{border-top:1px solid var(--border-soft);padding:.5rem 0}"],changeDetection:0})};function de(n){if(n.length===0)return[];let t=[...n].sort((u,_)=>u.date.localeCompare(_.date)),e=t[0].date,i=t[t.length-1].date,c=new Date(e),O=new Date(i).getTime()-c.getTime(),I=Math.max(12,Math.min(24,Math.floor(O/(1e3*60*60*24*7))+1)),Q=O/Math.max(1,I-1),T=[];for(let u=0;u<I;u++){let _=new Date(c.getTime()+u*Q);T.push({iso:_.toISOString(),label:_.toISOString().slice(0,10)})}return T}export{K as TimelineComponent};
@@ -0,0 +1,3 @@
1
+ import{a as tt,b as F,c as et,d as nt,e as A,l as it,m as ot,n as at,o as rt,p as st,q as lt,r as ct,s as mt,t as W}from"./chunk-QUDEGJKI.js";import{d as Y}from"./chunk-3FFYILBL.js";import{a as Z}from"./chunk-ITIFFECZ.js";import{$,Ab as h,Cb as G,Eb as L,Ga as s,Lb as Q,Nb as j,Pa as v,Ta as _,Tb as X,Va as q,ab as k,db as g,dc as U,ea as O,eb as a,ec as J,fa as P,fb as r,ga as w,gb as S,gc as K,hc as b,jb as E,mb as D,nb as V,oa as C,ob as x,sa as I,sb as T,tb as H,ub as R,wb as B,zb as l}from"./chunk-TQE5NWMZ.js";var ft=["svg"],N=class i{data=[];height=200;svgRef;ngAfterViewInit(){this.render()}ngOnChanges(){this.render()}render(){if(!this.svgRef)return;let e=this.svgRef.nativeElement,t=e.clientWidth||600,o={top:10,right:16,bottom:24,left:32},c=Math.max(0,t-o.left-o.right),d=Math.max(0,this.height-o.top-o.bottom),y=A(e);if(y.selectAll("*").remove(),this.data.length===0)return;let u=this.data.map(m=>({date:new Date(m.date),commits:m.commits,churn:m.additions+m.deletions})),n=rt().domain(tt(u,m=>m.date)).range([0,c]),p=at().domain([0,F(u,m=>m.commits)??1]).nice().range([d,0]),f=y.append("g").attr("transform",`translate(${o.left},${o.top})`),M=mt().x(m=>n(m.date)).y0(d).y1(m=>p(m.commits)).curve(W);f.append("path").datum(u).attr("class","area").attr("d",M);let ut=ct().x(m=>n(m.date)).y(m=>p(m.commits)).curve(W);f.append("path").datum(u).attr("class","line").attr("d",ut),f.append("g").attr("class","axis").attr("transform",`translate(0,${d})`).call(et(n).ticks(6).tickSizeOuter(0)),f.append("g").attr("class","axis").call(nt(p).ticks(4).tickSizeOuter(0))}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=v({type:i,selectors:[["app-churn-chart"]],viewQuery:function(t,o){if(t&1&&T(ft,7),t&2){let c;H(c=R())&&(o.svgRef=c.first)}},inputs:{data:"data",height:"height"},features:[I],decls:2,vars:1,consts:[["svg",""],["width","100%","aria-label","Churn over time"]],template:function(t,o){t&1&&(w(),E(0,"svg",1,0)),t&2&&k("height",o.height)},dependencies:[b],styles:["[_nghost-%COMP%]{display:block}svg[_ngcontent-%COMP%]{display:block}svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.axis text){font-size:10px;fill:var(--fg-muted)}svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.axis path), svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.axis line){stroke:var(--border-soft)}svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.area){fill:var(--accent);fill-opacity:.18}svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.line){stroke:var(--accent);stroke-width:1.5;fill:none}"],changeDetection:0})};var Ct=["svg"],z=class i{data=[];height=320;fileClick=new q;svgRef;ngAfterViewInit(){this.render()}ngOnChanges(){this.render()}render(){if(!this.svgRef)return;let e=this.svgRef.nativeElement,t=e.clientWidth||600,o=A(e);if(o.selectAll("*").remove(),this.data.length===0)return;let c=it({name:"root",children:this.data}).sum(n=>n.commits??0).sort((n,p)=>(p.value??0)-(n.value??0));ot().size([t,this.height]).padding(2).round(!0)(c);let y=st().domain([0,F(this.data,n=>n.commits)??1]).interpolator(lt),u=o.selectAll("g").data(c.leaves()).join("g").attr("class","cell").attr("transform",n=>`translate(${n.x0},${n.y0})`).on("click",(n,p)=>this.fileClick.emit(p.data.file));u.append("rect").attr("width",n=>n.x1-n.x0).attr("height",n=>n.y1-n.y0).attr("fill",n=>y(n.data.commits)).attr("stroke","var(--bg-app)"),u.append("title").text(n=>{let p=n.data;return`${p.file}
2
+ ${p.commits} commits, ${p.authors} authors
3
+ +${p.additions} -${p.deletions}`}),u.append("text").attr("class","cell-label").attr("x",4).attr("y",12).text(n=>{let p=n.x1-n.x0,f=n.y1-n.y0;if(p<40||f<18)return"";let M=n.data.file;return M.split("/").pop()??M})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=v({type:i,selectors:[["app-hotspots-treemap"]],viewQuery:function(t,o){if(t&1&&T(Ct,7),t&2){let c;H(c=R())&&(o.svgRef=c.first)}},inputs:{data:"data",height:"height"},outputs:{fileClick:"fileClick"},features:[I],decls:2,vars:1,consts:[["svg",""],["width","100%","aria-label","Hotspots treemap"]],template:function(t,o){t&1&&(w(),E(0,"svg",1,0)),t&2&&k("height",o.height)},dependencies:[b],styles:["[_nghost-%COMP%]{display:block}svg[_ngcontent-%COMP%]{display:block}svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.cell){cursor:pointer}svg[_ngcontent-%COMP%] [_ngcontent-%COMP%]:global(.cell-label){pointer-events:none;font-size:10px;fill:var(--bg-app);font-family:var(--font-mono, monospace)}"],changeDetection:0})};function vt(i,e){if(i&1&&(a(0,"p",6),l(1),Q(2,"slice"),Q(3,"slice"),r()),i&2){let t=e.ngIf;s(),L(" ",t.totalCommits," commits, ",t.totalAuthors," contributors \u2014 window ",j(2,4,t.windowStart,0,10)," \u2192 ",j(3,8,t.windowEnd,0,10)," ")}}function _t(i,e){i&1&&(a(0,"div",7),l(1,"Computing insights (this may take a few seconds)\u2026"),r())}function bt(i,e){if(i&1&&(a(0,"div",8),l(1),r()),i&2){let t=e.ngIf;s(),h(t)}}function xt(i,e){if(i&1&&(a(0,"li")(1,"div",19)(2,"span",20),l(3),r(),a(4,"span",21),l(5),r()(),a(6,"div",22),S(7,"div",23),r()()),i&2){let t=e.$implicit,o=x(2);s(3),h(t.author),s(2),h(t.commits),s(2),B("width",o.barPct(t.commits,o.maxAuthorCommits()),"%")}}function yt(i,e){if(i&1){let t=D();a(0,"li")(1,"a",24),V("click",function(){let c=O(t).$implicit,d=x(2);return P(d.openFile(c.file))}),l(2),r(),a(3,"span",25),l(4),r(),a(5,"span",26),l(6),r()()}if(i&2){let t=e.$implicit;s(2),h(t.file),s(2),G("",t.commits,"c \xB7 ",t.authors,"a"),s(2),G("+",t.additions," \u2212",t.deletions)}}function Mt(i,e){if(i&1){let t=D();a(0,"li")(1,"a",24),V("click",function(){let c=O(t).$implicit,d=x(2);return P(d.openFile(c.file))}),l(2),r(),a(3,"div",27),S(4,"div",28),a(5,"span",29),l(6),r()(),a(7,"span",30),l(8),r()()}if(i&2){let t=e.$implicit;s(2),h(t.file),s(2),B("width",t.riskScore*100,"%"),s(2),h((t.riskScore*100).toFixed(0)),s(2),h(t.reason)}}function Ot(i,e){if(i&1){let t=D();a(0,"div",9)(1,"section",10)(2,"h3"),l(3,"Top contributors"),r(),a(4,"ul",11),_(5,xt,8,4,"li",12),r()(),a(6,"section",13)(7,"h3"),l(8,"Hotspots "),a(9,"span",14),l(10,"(treemap sized by commit count \u2014 click to drill in)"),r()(),a(11,"app-hotspots-treemap",15),V("fileClick",function(c){O(t);let d=x();return P(d.openFile(c))}),r(),a(12,"ul",16),_(13,yt,7,5,"li",12),r()(),a(14,"section",10)(15,"h3"),l(16,"Risky files "),a(17,"span",14),l(18,"(churn \xD7 authors \xD7 recency)"),r()(),a(19,"ul",17),_(20,Mt,9,5,"li",12),r()(),a(21,"section",13)(22,"h3"),l(23,"Churn over time"),r(),S(24,"app-churn-chart",18),r()()}if(i&2){let t=e.ngIf;s(5),g("ngForOf",t.topContributors),s(6),g("data",t.hotspots),s(2),g("ngForOf",t.hotspots.slice(0,5)),s(7),g("ngForOf",t.riskyFiles),s(4),g("data",t.churnByDay)}}var gt=class i{insightsApi=$(Z);router=$(Y);bundle=C(null);loading=C(!1);error=C(null);maxAuthorCommits=C(0);maxDayCommits=C(0);constructor(){X(()=>{this.load()})}trackByDate(e,t){return t.date}barPct(e,t){return t>0?Math.round(e/t*100):0}dayPct(e,t){return t>0?Math.max(2,Math.round(e/t*100)):0}shouldShowLabel(e){return e.endsWith("-01")}openFile(e){this.router.navigate(["/file",encodeURIComponent(e)])}load(){this.loading.set(!0),this.error.set(null),this.insightsApi.bundle({maxCommits:500}).subscribe({next:e=>{this.bundle.set(e),this.maxAuthorCommits.set(e.topContributors[0]?.commits??0),this.maxDayCommits.set(Math.max(0,...e.churnByDay.map(t=>t.commits))),this.loading.set(!1)},error:e=>{this.error.set(e?.error?.error??"Failed to load insights"),this.loading.set(!1)}})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=v({type:i,selectors:[["app-insights"]],decls:8,vars:4,consts:[[1,"page"],[1,"head"],["class","sub",4,"ngIf"],["class","empty",4,"ngIf"],["class","empty error",4,"ngIf"],["class","grid",4,"ngIf"],[1,"sub"],[1,"empty"],[1,"empty","error"],[1,"grid"],[1,"card"],[1,"bars"],[4,"ngFor","ngForOf"],[1,"card","wide"],[1,"card-sub"],[3,"fileClick","data"],[1,"hot-list","compact"],[1,"risk-list"],[3,"data"],[1,"bar-row"],[1,"bar-label"],[1,"bar-value"],[1,"bar-track"],[1,"bar-fill"],[1,"path",3,"click"],[1,"count"],[1,"churn"],[1,"risk-bar"],[1,"risk-fill"],[1,"risk-score"],[1,"reason"]],template:function(t,o){t&1&&(a(0,"div",0)(1,"header",1)(2,"h2"),l(3,"Insights"),r(),_(4,vt,4,12,"p",2),r(),_(5,_t,2,0,"div",3)(6,bt,2,1,"div",4)(7,Ot,25,5,"div",5),r()),t&2&&(s(4),g("ngIf",o.bundle()),s(),g("ngIf",o.loading()),s(),g("ngIf",o.error()),s(),g("ngIf",o.bundle()))},dependencies:[b,U,J,z,N,K],styles:["[_nghost-%COMP%]{display:block;flex:1;min-height:0;overflow-y:auto}.page[_ngcontent-%COMP%]{padding:1rem 1.25rem;max-width:1300px;margin:0 auto}.head[_ngcontent-%COMP%]{margin-bottom:1rem}.head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:18px}.head[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%]{margin:.25rem 0 0;color:var(--fg-muted);font-size:13px}.empty[_ngcontent-%COMP%]{padding:2rem;color:var(--fg-muted);text-align:center}.empty.error[_ngcontent-%COMP%]{color:var(--danger)}.grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:1rem}.card[_ngcontent-%COMP%]{background:var(--bg-surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:1rem 1.25rem}.card.wide[_ngcontent-%COMP%]{grid-column:1 / -1}.card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:14px}.card-sub[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted);font-weight:400;margin-left:.4rem}.bars[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:grid;gap:.6rem}.bar-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-size:12px;margin-bottom:3px}.bar-label[_ngcontent-%COMP%]{color:var(--fg-primary)}.bar-value[_ngcontent-%COMP%]{color:var(--fg-muted);font-variant-numeric:tabular-nums}.bar-track[_ngcontent-%COMP%]{height:6px;background:var(--bg-elevated);border-radius:3px;overflow:hidden}.bar-fill[_ngcontent-%COMP%]{height:100%;background:var(--accent);border-radius:3px}.hot-list[_ngcontent-%COMP%], .risk-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0}.hot-list.compact[_ngcontent-%COMP%]{margin-top:.5rem;max-height:130px;overflow-y:auto}.hot-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%], .risk-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr auto auto;gap:.6rem;align-items:center;padding:.4rem 0;border-bottom:1px solid color-mix(in oklab,var(--border-soft) 50%,transparent);font-size:12px}.hot-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child, .risk-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{border-bottom:0}.path[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);color:var(--accent);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.path[_ngcontent-%COMP%]:hover{text-decoration:underline}.count[_ngcontent-%COMP%], .churn[_ngcontent-%COMP%]{color:var(--fg-muted);font-size:11px}.risk-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1.5fr) 100px minmax(0,1.5fr)}.risk-bar[_ngcontent-%COMP%]{position:relative;height:16px;background:var(--bg-elevated);border-radius:3px;overflow:hidden}.risk-fill[_ngcontent-%COMP%]{height:100%;background:linear-gradient(90deg,#10b981,#f59e0b,#ef4444)}.risk-score[_ngcontent-%COMP%]{position:absolute;inset:0;display:grid;place-items:center;font-size:10px;font-weight:600;color:var(--fg-primary);mix-blend-mode:difference}.reason[_ngcontent-%COMP%]{color:var(--fg-muted);font-size:11px}.churn-chart[_ngcontent-%COMP%]{display:flex;align-items:flex-end;height:120px;gap:1px;padding:.5rem 0}.day[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;position:relative}.day-bar[_ngcontent-%COMP%]{width:100%;background:var(--accent);border-radius:2px 2px 0 0;min-height:1px;opacity:.85}.day[_ngcontent-%COMP%]:hover .day-bar[_ngcontent-%COMP%]{opacity:1}.day-label[_ngcontent-%COMP%]{font-size:9px;color:var(--fg-muted);position:absolute;bottom:-16px;transform:rotate(-30deg);transform-origin:top left;white-space:nowrap}"],changeDetection:0})};export{gt as InsightsComponent};
@@ -0,0 +1 @@
1
+ function An(t,e){let r,n;if(e===void 0)for(let o of t)o!=null&&(r===void 0?o>=o&&(r=n=o):(r>o&&(r=o),n<o&&(n=o)));else{let o=-1;for(let i of t)(i=e(i,++o,t))!=null&&(r===void 0?i>=i&&(r=n=i):(r>i&&(r=i),n<i&&(n=i)))}return[r,n]}function Dn(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let o of t)(o=e(o,++n,t))!=null&&(r<o||r===void 0&&o>=o)&&(r=o)}return r}function kt(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Ar(t,e){return t==null||e==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Ct(t){let e,r,n;t.length!==2?(e=kt,r=(s,f)=>kt(t(s),f),n=(s,f)=>t(s)-f):(e=t===kt||t===Ar?t:Tu,r=t,n=t);function o(s,f,u=0,c=s.length){if(u<c){if(e(f,f)!==0)return c;do{let m=u+c>>>1;r(s[m],f)<0?u=m+1:c=m}while(u<c)}return u}function i(s,f,u=0,c=s.length){if(u<c){if(e(f,f)!==0)return c;do{let m=u+c>>>1;r(s[m],f)<=0?u=m+1:c=m}while(u<c)}return u}function a(s,f,u=0,c=s.length){let m=o(s,f,u,c-1);return m>u&&n(s[m-1],f)>-n(s[m],f)?m-1:m}return{left:o,center:a,right:i}}function Tu(){return 0}function Dr(t){return t===null?NaN:+t}var In=Ct(kt),En=In.right,Su=In.left,ku=Ct(Dr).center,Ir=En;var Cu=Math.sqrt(50),Nu=Math.sqrt(10),Au=Math.sqrt(2);function Re(t,e,r){let n=(e-t)/Math.max(0,r),o=Math.floor(Math.log10(n)),i=n/Math.pow(10,o),a=i>=Cu?10:i>=Nu?5:i>=Au?2:1,s,f,u;return o<0?(u=Math.pow(10,-o)/a,s=Math.round(t*u),f=Math.round(e*u),s/u<t&&++s,f/u>e&&--f,u=-u):(u=Math.pow(10,o)*a,s=Math.round(t/u),f=Math.round(e/u),s*u<t&&++s,f*u>e&&--f),f<s&&.5<=r&&r<2?Re(t,e,r*2):[s,f,u]}function ze(t,e,r){if(e=+e,t=+t,r=+r,!(r>0))return[];if(t===e)return[t];let n=e<t,[o,i,a]=n?Re(e,t,r):Re(t,e,r);if(!(i>=o))return[];let s=i-o+1,f=new Array(s);if(n)if(a<0)for(let u=0;u<s;++u)f[u]=(i-u)/-a;else for(let u=0;u<s;++u)f[u]=(i-u)*a;else if(a<0)for(let u=0;u<s;++u)f[u]=(o+u)/-a;else for(let u=0;u<s;++u)f[u]=(o+u)*a;return f}function ue(t,e,r){return e=+e,t=+t,r=+r,Re(t,e,r)[2]}function Wt(t,e,r){e=+e,t=+t,r=+r;let n=e<t,o=n?ue(e,t,r):ue(t,e,r);return(n?-1:1)*(o<0?1/-o:o)}function On(t){return t}var Er=1,Or=2,Yr=3,se=4,Yn=1e-6;function Du(t){return"translate("+t+",0)"}function Iu(t){return"translate(0,"+t+")"}function Eu(t){return e=>+t(e)}function Ou(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Yu(){return!this.__axis}function Fn(t,e){var r=[],n=null,o=null,i=6,a=6,s=3,f=typeof window<"u"&&window.devicePixelRatio>1?0:.5,u=t===Er||t===se?-1:1,c=t===se||t===Or?"x":"y",m=t===Er||t===Yr?Du:Iu;function l(h){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),x=o??(e.tickFormat?e.tickFormat.apply(e,r):On),d=Math.max(i,0)+s,y=e.range(),_=+y[0]+f,M=+y[y.length-1]+f,p=(e.bandwidth?Ou:Eu)(e.copy(),f),b=h.selection?h.selection():h,v=b.selectAll(".domain").data([null]),k=b.selectAll(".tick").data(g,e).order(),C=k.exit(),Y=k.enter().append("g").attr("class","tick"),N=k.select("line"),S=k.select("text");v=v.merge(v.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),k=k.merge(Y),N=N.merge(Y.append("line").attr("stroke","currentColor").attr(c+"2",u*i)),S=S.merge(Y.append("text").attr("fill","currentColor").attr(c,u*d).attr("dy",t===Er?"0em":t===Yr?"0.71em":"0.32em")),h!==b&&(v=v.transition(h),k=k.transition(h),N=N.transition(h),S=S.transition(h),C=C.transition(h).attr("opacity",Yn).attr("transform",function(O){return isFinite(O=p(O))?m(O+f):this.getAttribute("transform")}),Y.attr("opacity",Yn).attr("transform",function(O){var D=this.parentNode.__axis;return m((D&&isFinite(D=D(O))?D:p(O))+f)})),C.remove(),v.attr("d",t===se||t===Or?a?"M"+u*a+","+_+"H"+f+"V"+M+"H"+u*a:"M"+f+","+_+"V"+M:a?"M"+_+","+u*a+"V"+f+"H"+M+"V"+u*a:"M"+_+","+f+"H"+M),k.attr("opacity",1).attr("transform",function(O){return m(p(O)+f)}),N.attr(c+"2",u*i),S.attr(c,u*d).text(x),b.filter(Yu).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Or?"start":t===se?"end":"middle"),b.each(function(){this.__axis=p})}return l.scale=function(h){return arguments.length?(e=h,l):e},l.ticks=function(){return r=Array.from(arguments),l},l.tickArguments=function(h){return arguments.length?(r=h==null?[]:Array.from(h),l):r.slice()},l.tickValues=function(h){return arguments.length?(n=h==null?null:Array.from(h),l):n&&n.slice()},l.tickFormat=function(h){return arguments.length?(o=h,l):o},l.tickSize=function(h){return arguments.length?(i=a=+h,l):i},l.tickSizeInner=function(h){return arguments.length?(i=+h,l):i},l.tickSizeOuter=function(h){return arguments.length?(a=+h,l):a},l.tickPadding=function(h){return arguments.length?(s=+h,l):s},l.offset=function(h){return arguments.length?(f=+h,l):f},l}function Fu(t){return Fn(Yr,t)}function Ru(t){return Fn(se,t)}function zu(){}function Nt(t){return t==null?zu:function(){return this.querySelector(t)}}function Rn(t){typeof t!="function"&&(t=Nt(t));for(var e=this._groups,r=e.length,n=new Array(r),o=0;o<r;++o)for(var i=e[o],a=i.length,s=n[o]=new Array(a),f,u,c=0;c<a;++c)(f=i[c])&&(u=t.call(f,f.__data__,c,i))&&("__data__"in f&&(u.__data__=f.__data__),s[c]=u);return new z(n,this._parents)}function Fr(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}function Uu(){return[]}function fe(t){return t==null?Uu:function(){return this.querySelectorAll(t)}}function Pu(t){return function(){return Fr(t.apply(this,arguments))}}function zn(t){typeof t=="function"?t=Pu(t):t=fe(t);for(var e=this._groups,r=e.length,n=[],o=[],i=0;i<r;++i)for(var a=e[i],s=a.length,f,u=0;u<s;++u)(f=a[u])&&(n.push(t.call(f,f.__data__,u,a)),o.push(f));return new z(n,o)}function le(t){return function(){return this.matches(t)}}function Ue(t){return function(e){return e.matches(t)}}var $u=Array.prototype.find;function Lu(t){return function(){return $u.call(this.children,t)}}function Bu(){return this.firstElementChild}function Un(t){return this.select(t==null?Bu:Lu(typeof t=="function"?t:Ue(t)))}var Hu=Array.prototype.filter;function qu(){return Array.from(this.children)}function Xu(t){return function(){return Hu.call(this.children,t)}}function Pn(t){return this.selectAll(t==null?qu:Xu(typeof t=="function"?t:Ue(t)))}function $n(t){typeof t!="function"&&(t=le(t));for(var e=this._groups,r=e.length,n=new Array(r),o=0;o<r;++o)for(var i=e[o],a=i.length,s=n[o]=[],f,u=0;u<a;++u)(f=i[u])&&t.call(f,f.__data__,u,i)&&s.push(f);return new z(n,this._parents)}function Pe(t){return new Array(t.length)}function Ln(){return new z(this._enter||this._groups.map(Pe),this._parents)}function ce(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}ce.prototype={constructor:ce,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 Bn(t){return function(){return t}}function Wu(t,e,r,n,o,i){for(var a=0,s,f=e.length,u=i.length;a<u;++a)(s=e[a])?(s.__data__=i[a],n[a]=s):r[a]=new ce(t,i[a]);for(;a<f;++a)(s=e[a])&&(o[a]=s)}function Vu(t,e,r,n,o,i,a){var s,f,u=new Map,c=e.length,m=i.length,l=new Array(c),h;for(s=0;s<c;++s)(f=e[s])&&(l[s]=h=a.call(f,f.__data__,s,e)+"",u.has(h)?o[s]=f:u.set(h,f));for(s=0;s<m;++s)h=a.call(t,i[s],s,i)+"",(f=u.get(h))?(n[s]=f,f.__data__=i[s],u.delete(h)):r[s]=new ce(t,i[s]);for(s=0;s<c;++s)(f=e[s])&&u.get(l[s])===f&&(o[s]=f)}function Gu(t){return t.__data__}function Hn(t,e){if(!arguments.length)return Array.from(this,Gu);var r=e?Vu:Wu,n=this._parents,o=this._groups;typeof t!="function"&&(t=Bn(t));for(var i=o.length,a=new Array(i),s=new Array(i),f=new Array(i),u=0;u<i;++u){var c=n[u],m=o[u],l=m.length,h=Zu(t.call(c,c&&c.__data__,u,n)),g=h.length,x=s[u]=new Array(g),d=a[u]=new Array(g),y=f[u]=new Array(l);r(c,m,x,d,y,h,e);for(var _=0,M=0,p,b;_<g;++_)if(p=x[_]){for(_>=M&&(M=_+1);!(b=d[M])&&++M<g;);p._next=b||null}}return a=new z(a,n),a._enter=s,a._exit=f,a}function Zu(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function qn(){return new z(this._exit||this._groups.map(Pe),this._parents)}function Xn(t,e,r){var n=this.enter(),o=this,i=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(o=e(o),o&&(o=o.selection())),r==null?i.remove():r(i),n&&o?n.merge(o).order():o}function Wn(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,o=r.length,i=n.length,a=Math.min(o,i),s=new Array(o),f=0;f<a;++f)for(var u=r[f],c=n[f],m=u.length,l=s[f]=new Array(m),h,g=0;g<m;++g)(h=u[g]||c[g])&&(l[g]=h);for(;f<o;++f)s[f]=r[f];return new z(s,this._parents)}function Vn(){for(var t=this._groups,e=-1,r=t.length;++e<r;)for(var n=t[e],o=n.length-1,i=n[o],a;--o>=0;)(a=n[o])&&(i&&a.compareDocumentPosition(i)^4&&i.parentNode.insertBefore(a,i),i=a);return this}function Gn(t){t||(t=Qu);function e(m,l){return m&&l?t(m.__data__,l.__data__):!m-!l}for(var r=this._groups,n=r.length,o=new Array(n),i=0;i<n;++i){for(var a=r[i],s=a.length,f=o[i]=new Array(s),u,c=0;c<s;++c)(u=a[c])&&(f[c]=u);f.sort(e)}return new z(o,this._parents).order()}function Qu(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function Zn(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Qn(){return Array.from(this)}function Kn(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],o=0,i=n.length;o<i;++o){var a=n[o];if(a)return a}return null}function Jn(){let t=0;for(let e of this)++t;return t}function jn(){return!this.node()}function to(t){for(var e=this._groups,r=0,n=e.length;r<n;++r)for(var o=e[r],i=0,a=o.length,s;i<a;++i)(s=o[i])&&t.call(s,s.__data__,i,o);return this}var $e="http://www.w3.org/1999/xhtml",Rr={svg:"http://www.w3.org/2000/svg",xhtml:$e,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function lt(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),Rr.hasOwnProperty(e)?{space:Rr[e],local:t}:t}function Ku(t){return function(){this.removeAttribute(t)}}function Ju(t){return function(){this.removeAttributeNS(t.space,t.local)}}function ju(t,e){return function(){this.setAttribute(t,e)}}function ts(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function es(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function rs(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function eo(t,e){var r=lt(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?Ju:Ku:typeof e=="function"?r.local?rs:es:r.local?ts:ju)(r,e))}function Le(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function ns(t){return function(){this.style.removeProperty(t)}}function os(t,e,r){return function(){this.style.setProperty(t,e,r)}}function is(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function ro(t,e,r){return arguments.length>1?this.each((e==null?ns:typeof e=="function"?is:os)(t,e,r??"")):yt(this.node(),t)}function yt(t,e){return t.style.getPropertyValue(e)||Le(t).getComputedStyle(t,null).getPropertyValue(e)}function as(t){return function(){delete this[t]}}function us(t,e){return function(){this[t]=e}}function ss(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function no(t,e){return arguments.length>1?this.each((e==null?as:typeof e=="function"?ss:us)(t,e)):this.node()[t]}function oo(t){return t.trim().split(/^|\s+/)}function zr(t){return t.classList||new io(t)}function io(t){this._node=t,this._names=oo(t.getAttribute("class")||"")}io.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 ao(t,e){for(var r=zr(t),n=-1,o=e.length;++n<o;)r.add(e[n])}function uo(t,e){for(var r=zr(t),n=-1,o=e.length;++n<o;)r.remove(e[n])}function fs(t){return function(){ao(this,t)}}function ls(t){return function(){uo(this,t)}}function cs(t,e){return function(){(e.apply(this,arguments)?ao:uo)(this,t)}}function so(t,e){var r=oo(t+"");if(arguments.length<2){for(var n=zr(this.node()),o=-1,i=r.length;++o<i;)if(!n.contains(r[o]))return!1;return!0}return this.each((typeof e=="function"?cs:e?fs:ls)(r,e))}function ms(){this.textContent=""}function hs(t){return function(){this.textContent=t}}function ps(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function fo(t){return arguments.length?this.each(t==null?ms:(typeof t=="function"?ps:hs)(t)):this.node().textContent}function ds(){this.innerHTML=""}function xs(t){return function(){this.innerHTML=t}}function gs(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function lo(t){return arguments.length?this.each(t==null?ds:(typeof t=="function"?gs:xs)(t)):this.node().innerHTML}function ys(){this.nextSibling&&this.parentNode.appendChild(this)}function co(){return this.each(ys)}function vs(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mo(){return this.each(vs)}function ws(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===$e&&e.documentElement.namespaceURI===$e?e.createElement(t):e.createElementNS(r,t)}}function _s(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Be(t){var e=lt(t);return(e.local?_s:ws)(e)}function ho(t){var e=typeof t=="function"?t:Be(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}function bs(){return null}function po(t,e){var r=typeof t=="function"?t:Be(t),n=e==null?bs:typeof e=="function"?e:Nt(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}function Ms(){var t=this.parentNode;t&&t.removeChild(this)}function xo(){return this.each(Ms)}function Ts(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function Ss(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function go(t){return this.select(t?Ss:Ts)}function yo(t){return arguments.length?this.property("__data__",t):this.node().__data__}function ks(t){return function(e){t.call(this,e,this.__data__)}}function Cs(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function Ns(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,o=e.length,i;r<o;++r)i=e[r],(!t.type||i.type===t.type)&&i.name===t.name?this.removeEventListener(i.type,i.listener,i.options):e[++n]=i;++n?e.length=n:delete this.__on}}}function As(t,e,r){return function(){var n=this.__on,o,i=ks(e);if(n){for(var a=0,s=n.length;a<s;++a)if((o=n[a]).type===t.type&&o.name===t.name){this.removeEventListener(o.type,o.listener,o.options),this.addEventListener(o.type,o.listener=i,o.options=r),o.value=e;return}}this.addEventListener(t.type,i,r),o={type:t.type,name:t.name,value:e,listener:i,options:r},n?n.push(o):this.__on=[o]}}function vo(t,e,r){var n=Cs(t+""),o,i=n.length,a;if(arguments.length<2){var s=this.node().__on;if(s){for(var f=0,u=s.length,c;f<u;++f)for(o=0,c=s[f];o<i;++o)if((a=n[o]).type===c.type&&a.name===c.name)return c.value}return}for(s=e?As:Ns,o=0;o<i;++o)this.each(s(n[o],e,r));return this}function wo(t,e,r){var n=Le(t),o=n.CustomEvent;typeof o=="function"?o=new o(e,r):(o=n.document.createEvent("Event"),r?(o.initEvent(e,r.bubbles,r.cancelable),o.detail=r.detail):o.initEvent(e,!1,!1)),t.dispatchEvent(o)}function Ds(t,e){return function(){return wo(this,t,e)}}function Is(t,e){return function(){return wo(this,t,e.apply(this,arguments))}}function _o(t,e){return this.each((typeof e=="function"?Is:Ds)(t,e))}function*bo(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],o=0,i=n.length,a;o<i;++o)(a=n[o])&&(yield a)}var Ur=[null];function z(t,e){this._groups=t,this._parents=e}function Mo(){return new z([[document.documentElement]],Ur)}function Es(){return this}z.prototype=Mo.prototype={constructor:z,select:Rn,selectAll:zn,selectChild:Un,selectChildren:Pn,filter:$n,data:Hn,enter:Ln,exit:qn,join:Xn,merge:Wn,selection:Es,order:Vn,sort:Gn,call:Zn,nodes:Qn,node:Kn,size:Jn,empty:jn,each:to,attr:eo,style:ro,property:no,classed:so,text:fo,html:lo,raise:co,lower:mo,append:ho,insert:po,remove:xo,clone:go,datum:yo,on:vo,dispatch:_o,[Symbol.iterator]:bo};var ct=Mo;function At(t){return typeof t=="string"?new z([[document.querySelector(t)]],[document.documentElement]):new z([[t]],Ur)}function To(t){let e;for(;e=t.sourceEvent;)t=e;return t}function He(t,e){if(t=To(t),e===void 0&&(e=t.currentTarget),e){var r=e.ownerSVGElement||e;if(r.createSVGPoint){var n=r.createSVGPoint();return n.x=t.clientX,n.y=t.clientY,n=n.matrixTransform(e.getScreenCTM().inverse()),[n.x,n.y]}if(e.getBoundingClientRect){var o=e.getBoundingClientRect();return[t.clientX-o.left-e.clientLeft,t.clientY-o.top-e.clientTop]}}return[t.pageX,t.pageY]}function Os(t){var e=0,r=t.children,n=r&&r.length;if(!n)e=1;else for(;--n>=0;)e+=r[n].value;t.value=e}function So(){return this.eachAfter(Os)}function ko(t,e){let r=-1;for(let n of this)t.call(e,n,++r,this);return this}function Co(t,e){for(var r=this,n=[r],o,i,a=-1;r=n.pop();)if(t.call(e,r,++a,this),o=r.children)for(i=o.length-1;i>=0;--i)n.push(o[i]);return this}function No(t,e){for(var r=this,n=[r],o=[],i,a,s,f=-1;r=n.pop();)if(o.push(r),i=r.children)for(a=0,s=i.length;a<s;++a)n.push(i[a]);for(;r=o.pop();)t.call(e,r,++f,this);return this}function Ao(t,e){let r=-1;for(let n of this)if(t.call(e,n,++r,this))return n}function Do(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,o=n&&n.length;--o>=0;)r+=n[o].value;e.value=r})}function Io(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})}function Eo(t){for(var e=this,r=Ys(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var o=n.length;t!==r;)n.splice(o,0,t),t=t.parent;return n}function Ys(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),o=null;for(t=r.pop(),e=n.pop();t===e;)o=t,t=r.pop(),e=n.pop();return o}function Oo(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e}function Yo(){return Array.from(this)}function Fo(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t}function Ro(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e}function*zo(){var t=this,e,r=[t],n,o,i;do for(e=r.reverse(),r=[];t=e.pop();)if(yield t,n=t.children)for(o=0,i=n.length;o<i;++o)r.push(n[o]);while(r.length)}function qe(t,e){t instanceof Map?(t=[void 0,t],e===void 0&&(e=zs)):e===void 0&&(e=Rs);for(var r=new me(t),n,o=[r],i,a,s,f;n=o.pop();)if((a=e(n.data))&&(f=(a=Array.from(a)).length))for(n.children=a,s=f-1;s>=0;--s)o.push(i=a[s]=new me(a[s])),i.parent=n,i.depth=n.depth+1;return r.eachBefore(Ps)}function Fs(){return qe(this).eachBefore(Us)}function Rs(t){return t.children}function zs(t){return Array.isArray(t)?t[1]:null}function Us(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function Ps(t){var e=0;do t.height=e;while((t=t.parent)&&t.height<++e)}function me(t){this.data=t,this.depth=this.height=0,this.parent=null}me.prototype=qe.prototype={constructor:me,count:So,each:ko,eachAfter:No,eachBefore:Co,find:Ao,sum:Do,sort:Io,path:Eo,ancestors:Oo,descendants:Yo,leaves:Fo,links:Ro,copy:Fs,[Symbol.iterator]:zo};function Uo(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function Po(t,e,r,n,o){for(var i=t.children,a,s=-1,f=i.length,u=t.value&&(n-e)/t.value;++s<f;)a=i[s],a.y0=r,a.y1=o,a.x0=e,a.x1=e+=a.value*u}function $o(t,e,r,n,o){for(var i=t.children,a,s=-1,f=i.length,u=t.value&&(o-r)/t.value;++s<f;)a=i[s],a.x0=e,a.x1=n,a.y0=r,a.y1=r+=a.value*u}var $s=(1+Math.sqrt(5))/2;function Ls(t,e,r,n,o,i){for(var a=[],s=e.children,f,u,c=0,m=0,l=s.length,h,g,x=e.value,d,y,_,M,p,b,v;c<l;){h=o-r,g=i-n;do d=s[m++].value;while(!d&&m<l);for(y=_=d,b=Math.max(g/h,h/g)/(x*t),v=d*d*b,p=Math.max(_/v,v/y);m<l;++m){if(d+=u=s[m].value,u<y&&(y=u),u>_&&(_=u),v=d*d*b,M=Math.max(_/v,v/y),M>p){d-=u;break}p=M}a.push(f={value:d,dice:h<g,children:s.slice(c,m)}),f.dice?Po(f,r,n,o,x?n+=g*d/x:i):$o(f,r,n,x?r+=h*d/x:o,i),x-=d,c=m}return a}var Lo=(function t(e){function r(n,o,i,a,s){Ls(e,n,o,i,a,s)}return r.ratio=function(n){return t((n=+n)>1?n:1)},r})($s);function Bo(t){if(typeof t!="function")throw new Error;return t}function Vt(){return 0}function Gt(t){return function(){return t}}function Bs(){var t=Lo,e=!1,r=1,n=1,o=[0],i=Vt,a=Vt,s=Vt,f=Vt,u=Vt;function c(l){return l.x0=l.y0=0,l.x1=r,l.y1=n,l.eachBefore(m),o=[0],e&&l.eachBefore(Uo),l}function m(l){var h=o[l.depth],g=l.x0+h,x=l.y0+h,d=l.x1-h,y=l.y1-h;d<g&&(g=d=(g+d)/2),y<x&&(x=y=(x+y)/2),l.x0=g,l.y0=x,l.x1=d,l.y1=y,l.children&&(h=o[l.depth+1]=i(l)/2,g+=u(l)-h,x+=a(l)-h,d-=s(l)-h,y-=f(l)-h,d<g&&(g=d=(g+d)/2),y<x&&(x=y=(x+y)/2),t(l,g,x,d,y))}return c.round=function(l){return arguments.length?(e=!!l,c):e},c.size=function(l){return arguments.length?(r=+l[0],n=+l[1],c):[r,n]},c.tile=function(l){return arguments.length?(t=Bo(l),c):t},c.padding=function(l){return arguments.length?c.paddingInner(l).paddingOuter(l):c.paddingInner()},c.paddingInner=function(l){return arguments.length?(i=typeof l=="function"?l:Gt(+l),c):i},c.paddingOuter=function(l){return arguments.length?c.paddingTop(l).paddingRight(l).paddingBottom(l).paddingLeft(l):c.paddingTop()},c.paddingTop=function(l){return arguments.length?(a=typeof l=="function"?l:Gt(+l),c):a},c.paddingRight=function(l){return arguments.length?(s=typeof l=="function"?l:Gt(+l),c):s},c.paddingBottom=function(l){return arguments.length?(f=typeof l=="function"?l:Gt(+l),c):f},c.paddingLeft=function(l){return arguments.length?(u=typeof l=="function"?l:Gt(+l),c):u},c}function Xe(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function Pr(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function de(){}var he=.7,Ge=1/he,Zt="\\s*([+-]?\\d+)\\s*",pe="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",ot="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Hs=/^#([0-9a-f]{3,8})$/,qs=new RegExp(`^rgb\\(${Zt},${Zt},${Zt}\\)$`),Xs=new RegExp(`^rgb\\(${ot},${ot},${ot}\\)$`),Ws=new RegExp(`^rgba\\(${Zt},${Zt},${Zt},${pe}\\)$`),Vs=new RegExp(`^rgba\\(${ot},${ot},${ot},${pe}\\)$`),Gs=new RegExp(`^hsl\\(${pe},${ot},${ot}\\)$`),Zs=new RegExp(`^hsla\\(${pe},${ot},${ot},${pe}\\)$`),Ho={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};Xe(de,tt,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:qo,formatHex:qo,formatHex8:Qs,formatHsl:Ks,formatRgb:Xo,toString:Xo});function qo(){return this.rgb().formatHex()}function Qs(){return this.rgb().formatHex8()}function Ks(){return Ko(this).formatHsl()}function Xo(){return this.rgb().formatRgb()}function tt(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=Hs.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?Wo(e):r===3?new G(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?We(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?We(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=qs.exec(t))?new G(e[1],e[2],e[3],1):(e=Xs.exec(t))?new G(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=Ws.exec(t))?We(e[1],e[2],e[3],e[4]):(e=Vs.exec(t))?We(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=Gs.exec(t))?Zo(e[1],e[2]/100,e[3]/100,1):(e=Zs.exec(t))?Zo(e[1],e[2]/100,e[3]/100,e[4]):Ho.hasOwnProperty(t)?Wo(Ho[t]):t==="transparent"?new G(NaN,NaN,NaN,0):null}function Wo(t){return new G(t>>16&255,t>>8&255,t&255,1)}function We(t,e,r,n){return n<=0&&(t=e=r=NaN),new G(t,e,r,n)}function Js(t){return t instanceof de||(t=tt(t)),t?(t=t.rgb(),new G(t.r,t.g,t.b,t.opacity)):new G}function Qt(t,e,r,n){return arguments.length===1?Js(t):new G(t,e,r,n??1)}function G(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}Xe(G,Qt,Pr(de,{brighter(t){return t=t==null?Ge:Math.pow(Ge,t),new G(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?he:Math.pow(he,t),new G(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new G(It(this.r),It(this.g),It(this.b),Ze(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:Vo,formatHex:Vo,formatHex8:js,formatRgb:Go,toString:Go}));function Vo(){return`#${Dt(this.r)}${Dt(this.g)}${Dt(this.b)}`}function js(){return`#${Dt(this.r)}${Dt(this.g)}${Dt(this.b)}${Dt((isNaN(this.opacity)?1:this.opacity)*255)}`}function Go(){let t=Ze(this.opacity);return`${t===1?"rgb(":"rgba("}${It(this.r)}, ${It(this.g)}, ${It(this.b)}${t===1?")":`, ${t})`}`}function Ze(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function It(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Dt(t){return t=It(t),(t<16?"0":"")+t.toString(16)}function Zo(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new j(t,e,r,n)}function Ko(t){if(t instanceof j)return new j(t.h,t.s,t.l,t.opacity);if(t instanceof de||(t=tt(t)),!t)return new j;if(t instanceof j)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,o=Math.min(e,r,n),i=Math.max(e,r,n),a=NaN,s=i-o,f=(i+o)/2;return s?(e===i?a=(r-n)/s+(r<n)*6:r===i?a=(n-e)/s+2:a=(e-r)/s+4,s/=f<.5?i+o:2-i-o,a*=60):s=f>0&&f<1?0:a,new j(a,s,f,t.opacity)}function Jo(t,e,r,n){return arguments.length===1?Ko(t):new j(t,e,r,n??1)}function j(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}Xe(j,Jo,Pr(de,{brighter(t){return t=t==null?Ge:Math.pow(Ge,t),new j(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?he:Math.pow(he,t),new j(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,r=this.l,n=r+(r<.5?r:1-r)*e,o=2*r-n;return new G($r(t>=240?t-240:t+120,o,n),$r(t,o,n),$r(t<120?t+240:t-120,o,n),this.opacity)},clamp(){return new j(Qo(this.h),Ve(this.s),Ve(this.l),Ze(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 t=Ze(this.opacity);return`${t===1?"hsl(":"hsla("}${Qo(this.h)}, ${Ve(this.s)*100}%, ${Ve(this.l)*100}%${t===1?")":`, ${t})`}`}}));function Qo(t){return t=(t||0)%360,t<0?t+360:t}function Ve(t){return Math.max(0,Math.min(1,t||0))}function $r(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}function Lr(t,e,r,n,o){var i=t*t,a=i*t;return((1-3*t+3*i-a)*e+(4-6*i+3*a)*r+(1+3*t+3*i-3*a)*n+a*o)/6}function jo(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),o=t[n],i=t[n+1],a=n>0?t[n-1]:2*o-i,s=n<e-1?t[n+2]:2*i-o;return Lr((r-n/e)*e,a,o,i,s)}}function ti(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),o=t[(n+e-1)%e],i=t[n%e],a=t[(n+1)%e],s=t[(n+2)%e];return Lr((r-n/e)*e,o,i,a,s)}}var xe=t=>()=>t;function tf(t,e){return function(r){return t+r*e}}function ef(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function ei(t){return(t=+t)==1?Qe:function(e,r){return r-e?ef(e,r,t):xe(isNaN(e)?r:e)}}function Qe(t,e){var r=e-t;return r?tf(t,r):xe(isNaN(t)?e:t)}var Et=(function t(e){var r=ei(e);function n(o,i){var a=r((o=Qt(o)).r,(i=Qt(i)).r),s=r(o.g,i.g),f=r(o.b,i.b),u=Qe(o.opacity,i.opacity);return function(c){return o.r=a(c),o.g=s(c),o.b=f(c),o.opacity=u(c),o+""}}return n.gamma=t,n})(1);function ri(t){return function(e){var r=e.length,n=new Array(r),o=new Array(r),i=new Array(r),a,s;for(a=0;a<r;++a)s=Qt(e[a]),n[a]=s.r||0,o[a]=s.g||0,i[a]=s.b||0;return n=t(n),o=t(o),i=t(i),s.opacity=1,function(f){return s.r=n(f),s.g=o(f),s.b=i(f),s+""}}}var Br=ri(jo),rf=ri(ti);function ni(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),o;return function(i){for(o=0;o<r;++o)n[o]=t[o]*(1-i)+e[o]*i;return n}}function oi(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function ii(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,o=new Array(n),i=new Array(r),a;for(a=0;a<n;++a)o[a]=mt(t[a],e[a]);for(;a<r;++a)i[a]=e[a];return function(s){for(a=0;a<n;++a)i[a]=o[a](s);return i}}function ai(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function B(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function ui(t,e){var r={},n={},o;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(o in e)o in t?r[o]=mt(t[o],e[o]):n[o]=e[o];return function(i){for(o in r)n[o]=r[o](i);return n}}var qr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Hr=new RegExp(qr.source,"g");function nf(t){return function(){return t}}function of(t){return function(e){return t(e)+""}}function ge(t,e){var r=qr.lastIndex=Hr.lastIndex=0,n,o,i,a=-1,s=[],f=[];for(t=t+"",e=e+"";(n=qr.exec(t))&&(o=Hr.exec(e));)(i=o.index)>r&&(i=e.slice(r,i),s[a]?s[a]+=i:s[++a]=i),(n=n[0])===(o=o[0])?s[a]?s[a]+=o:s[++a]=o:(s[++a]=null,f.push({i:a,x:B(n,o)})),r=Hr.lastIndex;return r<e.length&&(i=e.slice(r),s[a]?s[a]+=i:s[++a]=i),s.length<2?f[0]?of(f[0].x):nf(e):(e=f.length,function(u){for(var c=0,m;c<e;++c)s[(m=f[c]).i]=m.x(u);return s.join("")})}function mt(t,e){var r=typeof e,n;return e==null||r==="boolean"?xe(e):(r==="number"?B:r==="string"?(n=tt(e))?(e=n,Et):ge:e instanceof tt?Et:e instanceof Date?ai:oi(e)?ni:Array.isArray(e)?ii:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?ui:B)(t,e)}function ye(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var si=180/Math.PI,Ke={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Xr(t,e,r,n,o,i){var a,s,f;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(f=t*r+e*n)&&(r-=t*f,n-=e*f),(s=Math.sqrt(r*r+n*n))&&(r/=s,n/=s,f/=s),t*n<e*r&&(t=-t,e=-e,f=-f,a=-a),{translateX:o,translateY:i,rotate:Math.atan2(e,t)*si,skewX:Math.atan(f)*si,scaleX:a,scaleY:s}}var Je;function fi(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Ke:Xr(e.a,e.b,e.c,e.d,e.e,e.f)}function li(t){return t==null?Ke:(Je||(Je=document.createElementNS("http://www.w3.org/2000/svg","g")),Je.setAttribute("transform",t),(t=Je.transform.baseVal.consolidate())?(t=t.matrix,Xr(t.a,t.b,t.c,t.d,t.e,t.f)):Ke)}function ci(t,e,r,n){function o(u){return u.length?u.pop()+" ":""}function i(u,c,m,l,h,g){if(u!==m||c!==l){var x=h.push("translate(",null,e,null,r);g.push({i:x-4,x:B(u,m)},{i:x-2,x:B(c,l)})}else(m||l)&&h.push("translate("+m+e+l+r)}function a(u,c,m,l){u!==c?(u-c>180?c+=360:c-u>180&&(u+=360),l.push({i:m.push(o(m)+"rotate(",null,n)-2,x:B(u,c)})):c&&m.push(o(m)+"rotate("+c+n)}function s(u,c,m,l){u!==c?l.push({i:m.push(o(m)+"skewX(",null,n)-2,x:B(u,c)}):c&&m.push(o(m)+"skewX("+c+n)}function f(u,c,m,l,h,g){if(u!==m||c!==l){var x=h.push(o(h)+"scale(",null,",",null,")");g.push({i:x-4,x:B(u,m)},{i:x-2,x:B(c,l)})}else(m!==1||l!==1)&&h.push(o(h)+"scale("+m+","+l+")")}return function(u,c){var m=[],l=[];return u=t(u),c=t(c),i(u.translateX,u.translateY,c.translateX,c.translateY,m,l),a(u.rotate,c.rotate,m,l),s(u.skewX,c.skewX,m,l),f(u.scaleX,u.scaleY,c.scaleX,c.scaleY,m,l),u=c=null,function(h){for(var g=-1,x=l.length,d;++g<x;)m[(d=l[g]).i]=d.x(h);return m.join("")}}}var Wr=ci(fi,"px, ","px)","deg)"),Vr=ci(li,", ",")",")");function Gr(t){return function(){return t}}function Zr(t){return+t}var mi=[0,1];function ht(t){return t}function Qr(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:Gr(isNaN(e)?NaN:.5)}function af(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function uf(t,e,r){var n=t[0],o=t[1],i=e[0],a=e[1];return o<n?(n=Qr(o,n),i=r(a,i)):(n=Qr(n,o),i=r(i,a)),function(s){return i(n(s))}}function sf(t,e,r){var n=Math.min(t.length,e.length)-1,o=new Array(n),i=new Array(n),a=-1;for(t[n]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<n;)o[a]=Qr(t[a],t[a+1]),i[a]=r(e[a],e[a+1]);return function(s){var f=Ir(t,s,1,n)-1;return i[f](o[f](s))}}function je(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function ff(){var t=mi,e=mi,r=mt,n,o,i,a=ht,s,f,u;function c(){var l=Math.min(t.length,e.length);return a!==ht&&(a=af(t[0],t[l-1])),s=l>2?sf:uf,f=u=null,m}function m(l){return l==null||isNaN(l=+l)?i:(f||(f=s(t.map(n),e,r)))(n(a(l)))}return m.invert=function(l){return a(o((u||(u=s(e,t.map(n),B)))(l)))},m.domain=function(l){return arguments.length?(t=Array.from(l,Zr),c()):t.slice()},m.range=function(l){return arguments.length?(e=Array.from(l),c()):e.slice()},m.rangeRound=function(l){return e=Array.from(l),r=ye,c()},m.clamp=function(l){return arguments.length?(a=l?!0:ht,c()):a!==ht},m.interpolate=function(l){return arguments.length?(r=l,c()):r},m.unknown=function(l){return arguments.length?(i=l,m):i},function(l,h){return n=l,o=h,c()}}function ve(){return ff()(ht,ht)}function tr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}function hi(t,e){switch(arguments.length){case 0:break;case 1:{typeof t=="function"?this.interpolator(t):this.range(t);break}default:{this.domain(t),typeof e=="function"?this.interpolator(e):this.range(e);break}}return this}function pi(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Ot(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}function it(t){return t=Ot(Math.abs(t)),t?t[1]:NaN}function di(t,e){return function(r,n){for(var o=r.length,i=[],a=0,s=t[0],f=0;o>0&&s>0&&(f+s+1>n&&(s=Math.max(1,n-f)),i.push(r.substring(o-=s,o+s)),!((f+=s+1)>n));)s=t[a=(a+1)%t.length];return i.reverse().join(e)}}function xi(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var lf=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function vt(t){if(!(e=lf.exec(t)))throw new Error("invalid format: "+t);var e;return new er({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}vt.prototype=er.prototype;function er(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}er.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function gi(t){t:for(var e=t.length,r=1,n=-1,o;r<e;++r)switch(t[r]){case".":n=o=r;break;case"0":n===0&&(n=r),o=r;break;default:if(!+t[r])break t;n>0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(o+1):t}var Kr;function yi(t,e){var r=Ot(t,e);if(!r)return t+"";var n=r[0],o=r[1],i=o-(Kr=Math.max(-8,Math.min(8,Math.floor(o/3)))*3)+1,a=n.length;return i===a?n:i>a?n+new Array(i-a+1).join("0"):i>0?n.slice(0,i)+"."+n.slice(i):"0."+new Array(1-i).join("0")+Ot(t,Math.max(0,e+i-1))[0]}function Jr(t,e){var r=Ot(t,e);if(!r)return t+"";var n=r[0],o=r[1];return o<0?"0."+new Array(-o).join("0")+n:n.length>o+1?n.slice(0,o+1)+"."+n.slice(o+1):n+new Array(o-n.length+2).join("0")}var jr={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:pi,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Jr(t*100,e),r:Jr,s:yi,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function tn(t){return t}var vi=Array.prototype.map,wi=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function _i(t){var e=t.grouping===void 0||t.thousands===void 0?tn:di(vi.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",o=t.decimal===void 0?".":t.decimal+"",i=t.numerals===void 0?tn:xi(vi.call(t.numerals,String)),a=t.percent===void 0?"%":t.percent+"",s=t.minus===void 0?"\u2212":t.minus+"",f=t.nan===void 0?"NaN":t.nan+"";function u(m){m=vt(m);var l=m.fill,h=m.align,g=m.sign,x=m.symbol,d=m.zero,y=m.width,_=m.comma,M=m.precision,p=m.trim,b=m.type;b==="n"?(_=!0,b="g"):jr[b]||(M===void 0&&(M=12),p=!0,b="g"),(d||l==="0"&&h==="=")&&(d=!0,l="0",h="=");var v=x==="$"?r:x==="#"&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",k=x==="$"?n:/[%p]/.test(b)?a:"",C=jr[b],Y=/[defgprs%]/.test(b);M=M===void 0?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,M)):Math.max(0,Math.min(20,M));function N(S){var O=v,D=k,Z,Xt,nt;if(b==="c")D=C(S)+D,S="";else{S=+S;var ft=S<0||1/S<0;if(S=isNaN(S)?f:C(Math.abs(S),M),p&&(S=gi(S)),ft&&+S==0&&g!=="+"&&(ft=!1),O=(ft?g==="("?g:s:g==="-"||g==="("?"":g)+O,D=(b==="s"?wi[8+Kr/3]:"")+D+(ft&&g==="("?")":""),Y){for(Z=-1,Xt=S.length;++Z<Xt;)if(nt=S.charCodeAt(Z),48>nt||nt>57){D=(nt===46?o+S.slice(Z+1):S.slice(Z))+D,S=S.slice(0,Z);break}}}_&&!d&&(S=e(S,1/0));var gt=O.length+S.length+D.length,W=gt<y?new Array(y-gt+1).join(l):"";switch(_&&d&&(S=e(W+S,W.length?y-D.length:1/0),W=""),h){case"<":S=O+S+D+W;break;case"=":S=O+W+S+D;break;case"^":S=W.slice(0,gt=W.length>>1)+O+S+D+W.slice(gt);break;default:S=W+O+S+D;break}return i(S)}return N.toString=function(){return m+""},N}function c(m,l){var h=u((m=vt(m),m.type="f",m)),g=Math.max(-8,Math.min(8,Math.floor(it(l)/3)))*3,x=Math.pow(10,-g),d=wi[8+g/3];return function(y){return h(x*y)+d}}return{format:u,formatPrefix:c}}var rr,nr,or;en({thousands:",",grouping:[3],currency:["$",""]});function en(t){return rr=_i(t),nr=rr.format,or=rr.formatPrefix,rr}function rn(t){return Math.max(0,-it(Math.abs(t)))}function nn(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(it(e)/3)))*3-it(Math.abs(t)))}function on(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,it(e)-it(t))+1}function an(t,e,r,n){var o=Wt(t,e,r),i;switch(n=vt(n??",f"),n.type){case"s":{var a=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(i=nn(o,a))&&(n.precision=i),or(n,a)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(i=on(o,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=i-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(i=rn(o))&&(n.precision=i-(n.type==="%")*2);break}}return nr(n)}function un(t){var e=t.domain;return t.ticks=function(r){var n=e();return ze(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var o=e();return an(o[0],o[o.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),o=0,i=n.length-1,a=n[o],s=n[i],f,u,c=10;for(s<a&&(u=a,a=s,s=u,u=o,o=i,i=u);c-- >0;){if(u=ue(a,s,r),u===f)return n[o]=a,n[i]=s,e(n);if(u>0)a=Math.floor(a/u)*u,s=Math.ceil(s/u)*u;else if(u<0)a=Math.ceil(a*u)/u,s=Math.floor(s*u)/u;else break;f=u}return t},t}function sn(){var t=ve();return t.copy=function(){return je(t,sn())},tr.apply(t,arguments),un(t)}var fn=new Date,ln=new Date;function F(t,e,r,n){function o(i){return t(i=arguments.length===0?new Date:new Date(+i)),i}return o.floor=i=>(t(i=new Date(+i)),i),o.ceil=i=>(t(i=new Date(i-1)),e(i,1),t(i),i),o.round=i=>{let a=o(i),s=o.ceil(i);return i-a<s-i?a:s},o.offset=(i,a)=>(e(i=new Date(+i),a==null?1:Math.floor(a)),i),o.range=(i,a,s)=>{let f=[];if(i=o.ceil(i),s=s==null?1:Math.floor(s),!(i<a)||!(s>0))return f;let u;do f.push(u=new Date(+i)),e(i,s),t(i);while(u<i&&i<a);return f},o.filter=i=>F(a=>{if(a>=a)for(;t(a),!i(a);)a.setTime(a-1)},(a,s)=>{if(a>=a)if(s<0)for(;++s<=0;)for(;e(a,-1),!i(a););else for(;--s>=0;)for(;e(a,1),!i(a););}),r&&(o.count=(i,a)=>(fn.setTime(+i),ln.setTime(+a),t(fn),t(ln),Math.floor(r(fn,ln))),o.every=i=>(i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?o.filter(n?a=>n(a)%i===0:a=>o.count(0,a)%i===0):o)),o}var we=F(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);we.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?F(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):we);var Mx=we.range;var at=F(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),bi=at.range;var Kt=F(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),cf=Kt.range,ir=F(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),mf=ir.range;var Jt=F(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),hf=Jt.range,ar=F(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),pf=ar.range;var pt=F(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),df=pt.range,be=F(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),xf=be.range,ur=F(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),gf=ur.range;function Rt(t){return F(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}var dt=Rt(0),jt=Rt(1),Ti=Rt(2),Si=Rt(3),wt=Rt(4),ki=Rt(5),Ci=Rt(6),Ni=dt.range,yf=jt.range,vf=Ti.range,wf=Si.range,_f=wt.range,bf=ki.range,Mf=Ci.range;function zt(t){return F(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var Ut=zt(0),te=zt(1),Ai=zt(2),Di=zt(3),_t=zt(4),Ii=zt(5),Ei=zt(6),Oi=Ut.range,Tf=te.range,Sf=Ai.range,kf=Di.range,Cf=_t.range,Nf=Ii.range,Af=Ei.range;var ee=F(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),Df=ee.range,sr=F(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),If=sr.range;var J=F(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());J.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:F(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});var Ef=J.range,et=F(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());et.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:F(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});var Of=et.range;function Fi(t,e,r,n,o,i){let a=[[at,1,1e3],[at,5,5*1e3],[at,15,15*1e3],[at,30,30*1e3],[i,1,6e4],[i,5,5*6e4],[i,15,15*6e4],[i,30,30*6e4],[o,1,36e5],[o,3,3*36e5],[o,6,6*36e5],[o,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function s(u,c,m){let l=c<u;l&&([u,c]=[c,u]);let h=m&&typeof m.range=="function"?m:f(u,c,m),g=h?h.range(u,+c+1):[];return l?g.reverse():g}function f(u,c,m){let l=Math.abs(c-u)/m,h=Ct(([,,d])=>d).right(a,l);if(h===a.length)return t.every(Wt(u/31536e6,c/31536e6,m));if(h===0)return we.every(Math.max(Wt(u,c,m),1));let[g,x]=a[l/a[h-1][2]<a[h][2]/l?h-1:h];return g.every(x)}return[s,f]}var[Ff,Rf]=Fi(et,sr,Ut,ur,ar,ir),[cn,mn]=Fi(J,ee,dt,pt,Jt,Kt);function hn(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function pn(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Me(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function dn(t){var e=t.dateTime,r=t.date,n=t.time,o=t.periods,i=t.days,a=t.shortDays,s=t.months,f=t.shortMonths,u=Te(o),c=Se(o),m=Te(i),l=Se(i),h=Te(a),g=Se(a),x=Te(s),d=Se(s),y=Te(f),_=Se(f),M={a:ft,A:gt,b:W,B:ae,c:null,d:Li,e:Li,f:il,g:dl,G:gl,H:rl,I:nl,j:ol,L:Wi,m:al,M:ul,p:xu,q:gu,Q:qi,s:Xi,S:sl,u:fl,U:ll,V:cl,w:ml,W:hl,x:null,X:null,y:pl,Y:xl,Z:yl,"%":Hi},p={a:yu,A:vu,b:wu,B:_u,c:null,d:Bi,e:Bi,f:bl,g:El,G:Yl,H:vl,I:wl,j:_l,L:Gi,m:Ml,M:Tl,p:bu,q:Mu,Q:qi,s:Xi,S:Sl,u:kl,U:Cl,V:Nl,w:Al,W:Dl,x:null,X:null,y:Il,Y:Ol,Z:Fl,"%":Hi},b={a:N,A:S,b:O,B:D,c:Z,d:Pi,e:Pi,f:Jf,g:Ui,G:zi,H:$i,I:$i,j:Gf,L:Kf,m:Vf,M:Zf,p:Y,q:Wf,Q:tl,s:el,S:Qf,u:Lf,U:Bf,V:Hf,w:$f,W:qf,x:Xt,X:nt,y:Ui,Y:zi,Z:Xf,"%":jf};M.x=v(r,M),M.X=v(n,M),M.c=v(e,M),p.x=v(r,p),p.X=v(n,p),p.c=v(e,p);function v(T,A){return function(I){var w=[],V=-1,R=0,Q=T.length,K,St,Nn;for(I instanceof Date||(I=new Date(+I));++V<Q;)T.charCodeAt(V)===37&&(w.push(T.slice(R,V)),(St=Ri[K=T.charAt(++V)])!=null?K=T.charAt(++V):St=K==="e"?" ":"0",(Nn=A[K])&&(K=Nn(I,St)),w.push(K),R=V+1);return w.push(T.slice(R,V)),w.join("")}}function k(T,A){return function(I){var w=Me(1900,void 0,1),V=C(w,T,I+="",0),R,Q;if(V!=I.length)return null;if("Q"in w)return new Date(w.Q);if("s"in w)return new Date(w.s*1e3+("L"in w?w.L:0));if(A&&!("Z"in w)&&(w.Z=0),"p"in w&&(w.H=w.H%12+w.p*12),w.m===void 0&&(w.m="q"in w?w.q:0),"V"in w){if(w.V<1||w.V>53)return null;"w"in w||(w.w=1),"Z"in w?(R=pn(Me(w.y,0,1)),Q=R.getUTCDay(),R=Q>4||Q===0?te.ceil(R):te(R),R=be.offset(R,(w.V-1)*7),w.y=R.getUTCFullYear(),w.m=R.getUTCMonth(),w.d=R.getUTCDate()+(w.w+6)%7):(R=hn(Me(w.y,0,1)),Q=R.getDay(),R=Q>4||Q===0?jt.ceil(R):jt(R),R=pt.offset(R,(w.V-1)*7),w.y=R.getFullYear(),w.m=R.getMonth(),w.d=R.getDate()+(w.w+6)%7)}else("W"in w||"U"in w)&&("w"in w||(w.w="u"in w?w.u%7:"W"in w?1:0),Q="Z"in w?pn(Me(w.y,0,1)).getUTCDay():hn(Me(w.y,0,1)).getDay(),w.m=0,w.d="W"in w?(w.w+6)%7+w.W*7-(Q+5)%7:w.w+w.U*7-(Q+6)%7);return"Z"in w?(w.H+=w.Z/100|0,w.M+=w.Z%100,pn(w)):hn(w)}}function C(T,A,I,w){for(var V=0,R=A.length,Q=I.length,K,St;V<R;){if(w>=Q)return-1;if(K=A.charCodeAt(V++),K===37){if(K=A.charAt(V++),St=b[K in Ri?A.charAt(V++):K],!St||(w=St(T,I,w))<0)return-1}else if(K!=I.charCodeAt(w++))return-1}return w}function Y(T,A,I){var w=u.exec(A.slice(I));return w?(T.p=c.get(w[0].toLowerCase()),I+w[0].length):-1}function N(T,A,I){var w=h.exec(A.slice(I));return w?(T.w=g.get(w[0].toLowerCase()),I+w[0].length):-1}function S(T,A,I){var w=m.exec(A.slice(I));return w?(T.w=l.get(w[0].toLowerCase()),I+w[0].length):-1}function O(T,A,I){var w=y.exec(A.slice(I));return w?(T.m=_.get(w[0].toLowerCase()),I+w[0].length):-1}function D(T,A,I){var w=x.exec(A.slice(I));return w?(T.m=d.get(w[0].toLowerCase()),I+w[0].length):-1}function Z(T,A,I){return C(T,e,A,I)}function Xt(T,A,I){return C(T,r,A,I)}function nt(T,A,I){return C(T,n,A,I)}function ft(T){return a[T.getDay()]}function gt(T){return i[T.getDay()]}function W(T){return f[T.getMonth()]}function ae(T){return s[T.getMonth()]}function xu(T){return o[+(T.getHours()>=12)]}function gu(T){return 1+~~(T.getMonth()/3)}function yu(T){return a[T.getUTCDay()]}function vu(T){return i[T.getUTCDay()]}function wu(T){return f[T.getUTCMonth()]}function _u(T){return s[T.getUTCMonth()]}function bu(T){return o[+(T.getUTCHours()>=12)]}function Mu(T){return 1+~~(T.getUTCMonth()/3)}return{format:function(T){var A=v(T+="",M);return A.toString=function(){return T},A},parse:function(T){var A=k(T+="",!1);return A.toString=function(){return T},A},utcFormat:function(T){var A=v(T+="",p);return A.toString=function(){return T},A},utcParse:function(T){var A=k(T+="",!0);return A.toString=function(){return T},A}}}var Ri={"-":"",_:" ",0:"0"},$=/^\s*\d+/,zf=/^%/,Uf=/[\\^$*+?|[\]().{}]/g;function E(t,e,r){var n=t<0?"-":"",o=(n?-t:t)+"",i=o.length;return n+(i<r?new Array(r-i+1).join(e)+o:o)}function Pf(t){return t.replace(Uf,"\\$&")}function Te(t){return new RegExp("^(?:"+t.map(Pf).join("|")+")","i")}function Se(t){return new Map(t.map((e,r)=>[e.toLowerCase(),r]))}function $f(t,e,r){var n=$.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function Lf(t,e,r){var n=$.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function Bf(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function Hf(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function qf(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function zi(t,e,r){var n=$.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Ui(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function Xf(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function Wf(t,e,r){var n=$.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function Vf(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function Pi(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function Gf(t,e,r){var n=$.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function $i(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function Zf(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function Qf(t,e,r){var n=$.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function Kf(t,e,r){var n=$.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function Jf(t,e,r){var n=$.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function jf(t,e,r){var n=zf.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function tl(t,e,r){var n=$.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function el(t,e,r){var n=$.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function Li(t,e){return E(t.getDate(),e,2)}function rl(t,e){return E(t.getHours(),e,2)}function nl(t,e){return E(t.getHours()%12||12,e,2)}function ol(t,e){return E(1+pt.count(J(t),t),e,3)}function Wi(t,e){return E(t.getMilliseconds(),e,3)}function il(t,e){return Wi(t,e)+"000"}function al(t,e){return E(t.getMonth()+1,e,2)}function ul(t,e){return E(t.getMinutes(),e,2)}function sl(t,e){return E(t.getSeconds(),e,2)}function fl(t){var e=t.getDay();return e===0?7:e}function ll(t,e){return E(dt.count(J(t)-1,t),e,2)}function Vi(t){var e=t.getDay();return e>=4||e===0?wt(t):wt.ceil(t)}function cl(t,e){return t=Vi(t),E(wt.count(J(t),t)+(J(t).getDay()===4),e,2)}function ml(t){return t.getDay()}function hl(t,e){return E(jt.count(J(t)-1,t),e,2)}function pl(t,e){return E(t.getFullYear()%100,e,2)}function dl(t,e){return t=Vi(t),E(t.getFullYear()%100,e,2)}function xl(t,e){return E(t.getFullYear()%1e4,e,4)}function gl(t,e){var r=t.getDay();return t=r>=4||r===0?wt(t):wt.ceil(t),E(t.getFullYear()%1e4,e,4)}function yl(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+E(e/60|0,"0",2)+E(e%60,"0",2)}function Bi(t,e){return E(t.getUTCDate(),e,2)}function vl(t,e){return E(t.getUTCHours(),e,2)}function wl(t,e){return E(t.getUTCHours()%12||12,e,2)}function _l(t,e){return E(1+be.count(et(t),t),e,3)}function Gi(t,e){return E(t.getUTCMilliseconds(),e,3)}function bl(t,e){return Gi(t,e)+"000"}function Ml(t,e){return E(t.getUTCMonth()+1,e,2)}function Tl(t,e){return E(t.getUTCMinutes(),e,2)}function Sl(t,e){return E(t.getUTCSeconds(),e,2)}function kl(t){var e=t.getUTCDay();return e===0?7:e}function Cl(t,e){return E(Ut.count(et(t)-1,t),e,2)}function Zi(t){var e=t.getUTCDay();return e>=4||e===0?_t(t):_t.ceil(t)}function Nl(t,e){return t=Zi(t),E(_t.count(et(t),t)+(et(t).getUTCDay()===4),e,2)}function Al(t){return t.getUTCDay()}function Dl(t,e){return E(te.count(et(t)-1,t),e,2)}function Il(t,e){return E(t.getUTCFullYear()%100,e,2)}function El(t,e){return t=Zi(t),E(t.getUTCFullYear()%100,e,2)}function Ol(t,e){return E(t.getUTCFullYear()%1e4,e,4)}function Yl(t,e){var r=t.getUTCDay();return t=r>=4||r===0?_t(t):_t.ceil(t),E(t.getUTCFullYear()%1e4,e,4)}function Fl(){return"+0000"}function Hi(){return"%"}function qi(t){return+t}function Xi(t){return Math.floor(+t/1e3)}var re,fr,Qi,Ki,Ji;xn({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function xn(t){return re=dn(t),fr=re.format,Qi=re.parse,Ki=re.utcFormat,Ji=re.utcParse,re}function gn(t,e){t=t.slice();var r=0,n=t.length-1,o=t[r],i=t[n],a;return i<o&&(a=r,r=n,n=a,a=o,o=i,i=a),t[r]=e.floor(o),t[n]=e.ceil(i),t}function Rl(t){return new Date(t)}function zl(t){return t instanceof Date?+t:+new Date(+t)}function ji(t,e,r,n,o,i,a,s,f,u){var c=ve(),m=c.invert,l=c.domain,h=u(".%L"),g=u(":%S"),x=u("%I:%M"),d=u("%I %p"),y=u("%a %d"),_=u("%b %d"),M=u("%B"),p=u("%Y");function b(v){return(f(v)<v?h:s(v)<v?g:a(v)<v?x:i(v)<v?d:n(v)<v?o(v)<v?y:_:r(v)<v?M:p)(v)}return c.invert=function(v){return new Date(m(v))},c.domain=function(v){return arguments.length?l(Array.from(v,zl)):l().map(Rl)},c.ticks=function(v){var k=l();return t(k[0],k[k.length-1],v??10)},c.tickFormat=function(v,k){return k==null?b:u(k)},c.nice=function(v){var k=l();return(!v||typeof v.range!="function")&&(v=e(k[0],k[k.length-1],v??10)),v?l(gn(k,v)):c},c.copy=function(){return je(c,ji(t,e,r,n,o,i,a,s,f,u))},c}function ta(){return tr.apply(ji(cn,mn,J,ee,dt,pt,Jt,Kt,at,fr).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Ul(){var t=0,e=1,r,n,o,i,a=ht,s=!1,f;function u(m){return m==null||isNaN(m=+m)?f:a(o===0?.5:(m=(i(m)-r)*o,s?Math.max(0,Math.min(1,m)):m))}u.domain=function(m){return arguments.length?([t,e]=m,r=i(t=+t),n=i(e=+e),o=r===n?0:1/(n-r),u):[t,e]},u.clamp=function(m){return arguments.length?(s=!!m,u):s},u.interpolator=function(m){return arguments.length?(a=m,u):a};function c(m){return function(l){var h,g;return arguments.length?([h,g]=l,a=m(h,g),u):[a(0),a(1)]}}return u.range=c(mt),u.rangeRound=c(ye),u.unknown=function(m){return arguments.length?(f=m,u):f},function(m){return i=m,r=m(t),n=m(e),o=r===n?0:1/(n-r),u}}function Pl(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function yn(){var t=un(Ul()(ht));return t.copy=function(){return Pl(t,yn())},hi.apply(t,arguments)}function ea(t){for(var e=t.length/6|0,r=new Array(e),n=0;n<e;)r[n]="#"+t.slice(n*6,++n*6);return r}var ra=t=>Br(t[t.length-1]);var na=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(ea),$l=ra(na);var Ug=Array.prototype.slice;function lr(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function U(t){return function(){return t}}function oa(t){this._context=t}oa.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}}};function cr(t){return new oa(t)}var vn=Math.PI,wn=2*vn,Pt=1e-6,Ll=wn-Pt;function ia(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=arguments[e]+t[e]}function Bl(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ia;let r=10**e;return function(n){this._+=n[0];for(let o=1,i=n.length;o<i;++o)this._+=Math.round(arguments[o]*r)/r+n[o]}}var $t=class{constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?ia:Bl(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,o){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+o}`}bezierCurveTo(e,r,n,o,i,a){this._append`C${+e},${+r},${+n},${+o},${this._x1=+i},${this._y1=+a}`}arcTo(e,r,n,o,i){if(e=+e,r=+r,n=+n,o=+o,i=+i,i<0)throw new Error(`negative radius: ${i}`);let a=this._x1,s=this._y1,f=n-e,u=o-r,c=a-e,m=s-r,l=c*c+m*m;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(l>Pt)if(!(Math.abs(m*f-u*c)>Pt)||!i)this._append`L${this._x1=e},${this._y1=r}`;else{let h=n-a,g=o-s,x=f*f+u*u,d=h*h+g*g,y=Math.sqrt(x),_=Math.sqrt(l),M=i*Math.tan((vn-Math.acos((x+l-d)/(2*y*_)))/2),p=M/_,b=M/y;Math.abs(p-1)>Pt&&this._append`L${e+p*c},${r+p*m}`,this._append`A${i},${i},0,0,${+(m*h>c*g)},${this._x1=e+b*f},${this._y1=r+b*u}`}}arc(e,r,n,o,i,a){if(e=+e,r=+r,n=+n,a=!!a,n<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(o),f=n*Math.sin(o),u=e+s,c=r+f,m=1^a,l=a?o-i:i-o;this._x1===null?this._append`M${u},${c}`:(Math.abs(this._x1-u)>Pt||Math.abs(this._y1-c)>Pt)&&this._append`L${u},${c}`,n&&(l<0&&(l=l%wn+wn),l>Ll?this._append`A${n},${n},0,1,${m},${e-s},${r-f}A${n},${n},0,1,${m},${this._x1=u},${this._y1=c}`:l>Pt&&this._append`A${n},${n},0,${+(l>=vn)},${m},${this._x1=e+n*Math.cos(i)},${this._y1=r+n*Math.sin(i)}`)}rect(e,r,n,o){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+o}h${-n}Z`}toString(){return this._}};function aa(){return new $t}aa.prototype=$t.prototype;function mr(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new $t(e)}function hr(t){return t[0]}function pr(t){return t[1]}function _n(t,e){var r=U(!0),n=null,o=cr,i=null,a=mr(s);t=typeof t=="function"?t:t===void 0?hr:U(t),e=typeof e=="function"?e:e===void 0?pr:U(e);function s(f){var u,c=(f=lr(f)).length,m,l=!1,h;for(n==null&&(i=o(h=a())),u=0;u<=c;++u)!(u<c&&r(m=f[u],u,f))===l&&((l=!l)?i.lineStart():i.lineEnd()),l&&i.point(+t(m,u,f),+e(m,u,f));if(h)return i=null,h+""||null}return s.x=function(f){return arguments.length?(t=typeof f=="function"?f:U(+f),s):t},s.y=function(f){return arguments.length?(e=typeof f=="function"?f:U(+f),s):e},s.defined=function(f){return arguments.length?(r=typeof f=="function"?f:U(!!f),s):r},s.curve=function(f){return arguments.length?(o=f,n!=null&&(i=o(n)),s):o},s.context=function(f){return arguments.length?(f==null?n=i=null:i=o(n=f),s):n},s}function Hl(t,e,r){var n=null,o=U(!0),i=null,a=cr,s=null,f=mr(u);t=typeof t=="function"?t:t===void 0?hr:U(+t),e=typeof e=="function"?e:e===void 0?U(0):U(+e),r=typeof r=="function"?r:r===void 0?pr:U(+r);function u(m){var l,h,g,x=(m=lr(m)).length,d,y=!1,_,M=new Array(x),p=new Array(x);for(i==null&&(s=a(_=f())),l=0;l<=x;++l){if(!(l<x&&o(d=m[l],l,m))===y)if(y=!y)h=l,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),g=l-1;g>=h;--g)s.point(M[g],p[g]);s.lineEnd(),s.areaEnd()}y&&(M[l]=+t(d,l,m),p[l]=+e(d,l,m),s.point(n?+n(d,l,m):M[l],r?+r(d,l,m):p[l]))}if(_)return s=null,_+""||null}function c(){return _n().defined(o).curve(a).context(i)}return u.x=function(m){return arguments.length?(t=typeof m=="function"?m:U(+m),n=null,u):t},u.x0=function(m){return arguments.length?(t=typeof m=="function"?m:U(+m),u):t},u.x1=function(m){return arguments.length?(n=m==null?null:typeof m=="function"?m:U(+m),u):n},u.y=function(m){return arguments.length?(e=typeof m=="function"?m:U(+m),r=null,u):e},u.y0=function(m){return arguments.length?(e=typeof m=="function"?m:U(+m),u):e},u.y1=function(m){return arguments.length?(r=m==null?null:typeof m=="function"?m:U(+m),u):r},u.lineX0=u.lineY0=function(){return c().x(t).y(e)},u.lineY1=function(){return c().x(t).y(r)},u.lineX1=function(){return c().x(n).y(e)},u.defined=function(m){return arguments.length?(o=typeof m=="function"?m:U(!!m),u):o},u.curve=function(m){return arguments.length?(a=m,i!=null&&(s=a(i)),u):a},u.context=function(m){return arguments.length?(m==null?i=s=null:s=a(i=m),u):i},u}function ua(t){return t<0?-1:1}function sa(t,e,r){var n=t._x1-t._x0,o=e-t._x1,i=(t._y1-t._y0)/(n||o<0&&-0),a=(r-t._y1)/(o||n<0&&-0),s=(i*o+a*n)/(n+o);return(ua(i)+ua(a))*Math.min(Math.abs(i),Math.abs(a),.5*Math.abs(s))||0}function fa(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function bn(t,e,r){var n=t._x0,o=t._y0,i=t._x1,a=t._y1,s=(i-n)/3;t._context.bezierCurveTo(n+s,o+s*e,i-s,a-s*r,i,a)}function dr(t){this._context=t}dr.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:bn(this,this._t0,fa(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,bn(this,fa(this,r=sa(this,t,e)),r);break;default:bn(this,this._t0,r=sa(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}}};function ql(t){this._context=new la(t)}(ql.prototype=Object.create(dr.prototype)).point=function(t,e){dr.prototype.point.call(this,e,t)};function la(t){this._context=t}la.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,n,o,i){this._context.bezierCurveTo(e,t,n,r,i,o)}};function Xl(t){return new dr(t)}var Wl={value:()=>{}};function ma(){for(var t=0,e=arguments.length,r={},n;t<e;++t){if(!(n=arguments[t]+"")||n in r||/[\s.]/.test(n))throw new Error("illegal type: "+n);r[n]=[]}return new xr(r)}function xr(t){this._=t}function Vl(t,e){return t.trim().split(/^|\s+/).map(function(r){var n="",o=r.indexOf(".");if(o>=0&&(n=r.slice(o+1),r=r.slice(0,o)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}xr.prototype=ma.prototype={constructor:xr,on:function(t,e){var r=this._,n=Vl(t+"",r),o,i=-1,a=n.length;if(arguments.length<2){for(;++i<a;)if((o=(t=n[i]).type)&&(o=Gl(r[o],t.name)))return o;return}if(e!=null&&typeof e!="function")throw new Error("invalid callback: "+e);for(;++i<a;)if(o=(t=n[i]).type)r[o]=ca(r[o],t.name,e);else if(e==null)for(o in r)r[o]=ca(r[o],t.name,null);return this},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new xr(t)},call:function(t,e){if((o=arguments.length-2)>0)for(var r=new Array(o),n=0,o,i;n<o;++n)r[n]=arguments[n+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(i=this._[t],n=0,o=i.length;n<o;++n)i[n].value.apply(e,r)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],o=0,i=n.length;o<i;++o)n[o].value.apply(e,r)}};function Gl(t,e){for(var r=0,n=t.length,o;r<n;++r)if((o=t[r]).name===e)return o.value}function ca(t,e,r){for(var n=0,o=t.length;n<o;++n)if(t[n].name===e){t[n]=Wl,t=t.slice(0,n).concat(t.slice(n+1));break}return r!=null&&t.push({name:e,value:r}),t}var Lt=ma;var ha={passive:!1},Bt={capture:!0,passive:!1};function gr(t){t.stopImmediatePropagation()}function bt(t){t.preventDefault(),t.stopImmediatePropagation()}function pa(t){var e=t.document.documentElement,r=At(t).on("dragstart.drag",bt,Bt);"onselectstart"in e?r.on("selectstart.drag",bt,Bt):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")}function da(t,e){var r=t.document.documentElement,n=At(t).on("dragstart.drag",null);e&&(n.on("click.drag",bt,Bt),setTimeout(function(){n.on("click.drag",null)},0)),"onselectstart"in r?n.on("selectstart.drag",null):(r.style.MozUserSelect=r.__noselect,delete r.__noselect)}var ke=t=>()=>t;function Ce(t,{sourceEvent:e,subject:r,target:n,identifier:o,active:i,x:a,y:s,dx:f,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:r,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},identifier:{value:o,enumerable:!0,configurable:!0},active:{value:i,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:f,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}Ce.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function Zl(t){return!t.ctrlKey&&!t.button}function Ql(){return this.parentNode}function Kl(t,e){return e??{x:t.x,y:t.y}}function Jl(){return navigator.maxTouchPoints||"ontouchstart"in this}function jl(){var t=Zl,e=Ql,r=Kl,n=Jl,o={},i=Lt("start","drag","end"),a=0,s,f,u,c,m=0;function l(p){p.on("mousedown.drag",h).filter(n).on("touchstart.drag",d).on("touchmove.drag",y,ha).on("touchend.drag touchcancel.drag",_).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(p,b){if(!(c||!t.call(this,p,b))){var v=M(this,e.call(this,p,b),p,b,"mouse");v&&(At(p.view).on("mousemove.drag",g,Bt).on("mouseup.drag",x,Bt),pa(p.view),gr(p),u=!1,s=p.clientX,f=p.clientY,v("start",p))}}function g(p){if(bt(p),!u){var b=p.clientX-s,v=p.clientY-f;u=b*b+v*v>m}o.mouse("drag",p)}function x(p){At(p.view).on("mousemove.drag mouseup.drag",null),da(p.view,u),bt(p),o.mouse("end",p)}function d(p,b){if(t.call(this,p,b)){var v=p.changedTouches,k=e.call(this,p,b),C=v.length,Y,N;for(Y=0;Y<C;++Y)(N=M(this,k,p,b,v[Y].identifier,v[Y]))&&(gr(p),N("start",p,v[Y]))}}function y(p){var b=p.changedTouches,v=b.length,k,C;for(k=0;k<v;++k)(C=o[b[k].identifier])&&(bt(p),C("drag",p,b[k]))}function _(p){var b=p.changedTouches,v=b.length,k,C;for(c&&clearTimeout(c),c=setTimeout(function(){c=null},500),k=0;k<v;++k)(C=o[b[k].identifier])&&(gr(p),C("end",p,b[k]))}function M(p,b,v,k,C,Y){var N=i.copy(),S=He(Y||v,b),O,D,Z;if((Z=r.call(p,new Ce("beforestart",{sourceEvent:v,target:l,identifier:C,active:a,x:S[0],y:S[1],dx:0,dy:0,dispatch:N}),k))!=null)return O=Z.x-S[0]||0,D=Z.y-S[1]||0,function Xt(nt,ft,gt){var W=S,ae;switch(nt){case"start":o[C]=Xt,ae=a++;break;case"end":delete o[C],--a;case"drag":S=He(gt||ft,b),ae=a;break}N.call(nt,p,new Ce(nt,{sourceEvent:ft,subject:Z,target:l,identifier:C,active:ae,x:S[0]+O,y:S[1]+D,dx:S[0]-W[0],dy:S[1]-W[1],dispatch:N}),k)}}return l.filter=function(p){return arguments.length?(t=typeof p=="function"?p:ke(!!p),l):t},l.container=function(p){return arguments.length?(e=typeof p=="function"?p:ke(p),l):e},l.subject=function(p){return arguments.length?(r=typeof p=="function"?p:ke(p),l):r},l.touchable=function(p){return arguments.length?(n=typeof p=="function"?p:ke(!!p),l):n},l.on=function(){var p=i.on.apply(i,arguments);return p===i?l:p},l.clickDistance=function(p){return arguments.length?(m=(p=+p)*p,l):Math.sqrt(m)},l}var ne=0,Ae=0,Ne=0,ga=1e3,yr,De,vr=0,Ht=0,wr=0,Ie=typeof performance=="object"&&performance.now?performance:Date,ya=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Oe(){return Ht||(ya(tc),Ht=Ie.now()+wr)}function tc(){Ht=0}function Ee(){this._call=this._time=this._next=null}Ee.prototype=oe.prototype={constructor:Ee,restart:function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?Oe():+r)+(e==null?0:+e),!this._next&&De!==this&&(De?De._next=this:yr=this,De=this),this._call=t,this._time=r,Mn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Mn())}};function oe(t,e,r){var n=new Ee;return n.restart(t,e,r),n}function va(){Oe(),++ne;for(var t=yr,e;t;)(e=Ht-t._time)>=0&&t._call.call(void 0,e),t=t._next;--ne}function xa(){Ht=(vr=Ie.now())+wr,ne=Ae=0;try{va()}finally{ne=0,rc(),Ht=0}}function ec(){var t=Ie.now(),e=t-vr;e>ga&&(wr-=e,vr=t)}function rc(){for(var t,e=yr,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:yr=r);De=t,Mn(n)}function Mn(t){if(!ne){Ae&&(Ae=clearTimeout(Ae));var e=t-Ht;e>24?(t<1/0&&(Ae=setTimeout(xa,t-Ie.now()-wr)),Ne&&(Ne=clearInterval(Ne))):(Ne||(vr=Ie.now(),Ne=setInterval(ec,ga)),ne=1,ya(xa))}}function _r(t,e,r){var n=new Ee;return e=e==null?0:+e,n.restart(o=>{n.stop(),t(o+e)},e,r),n}var nc=Lt("start","end","cancel","interrupt"),oc=[],ba=0,wa=1,Mr=2,br=3,_a=4,Tr=5,Ye=6;function Mt(t,e,r,n,o,i){var a=t.__transition;if(!a)t.__transition={};else if(r in a)return;ic(t,r,{name:e,index:n,group:o,on:nc,tween:oc,time:i.time,delay:i.delay,duration:i.duration,ease:i.ease,timer:null,state:ba})}function Fe(t,e){var r=P(t,e);if(r.state>ba)throw new Error("too late; already scheduled");return r}function H(t,e){var r=P(t,e);if(r.state>br)throw new Error("too late; already running");return r}function P(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function ic(t,e,r){var n=t.__transition,o;n[e]=r,r.timer=oe(i,0,r.time);function i(u){r.state=wa,r.timer.restart(a,r.delay,r.time),r.delay<=u&&a(u-r.delay)}function a(u){var c,m,l,h;if(r.state!==wa)return f();for(c in n)if(h=n[c],h.name===r.name){if(h.state===br)return _r(a);h.state===_a?(h.state=Ye,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete n[c]):+c<e&&(h.state=Ye,h.timer.stop(),h.on.call("cancel",t,t.__data__,h.index,h.group),delete n[c])}if(_r(function(){r.state===br&&(r.state=_a,r.timer.restart(s,r.delay,r.time),s(u))}),r.state=Mr,r.on.call("start",t,t.__data__,r.index,r.group),r.state===Mr){for(r.state=br,o=new Array(l=r.tween.length),c=0,m=-1;c<l;++c)(h=r.tween[c].value.call(t,t.__data__,r.index,r.group))&&(o[++m]=h);o.length=m+1}}function s(u){for(var c=u<r.duration?r.ease.call(null,u/r.duration):(r.timer.restart(f),r.state=Tr,1),m=-1,l=o.length;++m<l;)o[m].call(t,c);r.state===Tr&&(r.on.call("end",t,t.__data__,r.index,r.group),f())}function f(){r.state=Ye,r.timer.stop(),delete n[e];for(var u in n)return;delete t.__transition}}function Sr(t,e){var r=t.__transition,n,o,i=!0,a;if(r){e=e==null?null:e+"";for(a in r){if((n=r[a]).name!==e){i=!1;continue}o=n.state>Mr&&n.state<Tr,n.state=Ye,n.timer.stop(),n.on.call(o?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete r[a]}i&&delete t.__transition}}function Ma(t){return this.each(function(){Sr(this,t)})}function ac(t,e){var r,n;return function(){var o=H(this,t),i=o.tween;if(i!==r){n=r=i;for(var a=0,s=n.length;a<s;++a)if(n[a].name===e){n=n.slice(),n.splice(a,1);break}}o.tween=n}}function uc(t,e,r){var n,o;if(typeof r!="function")throw new Error;return function(){var i=H(this,t),a=i.tween;if(a!==n){o=(n=a).slice();for(var s={name:e,value:r},f=0,u=o.length;f<u;++f)if(o[f].name===e){o[f]=s;break}f===u&&o.push(s)}i.tween=o}}function Ta(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n=P(this.node(),r).tween,o=0,i=n.length,a;o<i;++o)if((a=n[o]).name===t)return a.value;return null}return this.each((e==null?ac:uc)(r,t,e))}function ie(t,e,r){var n=t._id;return t.each(function(){var o=H(this,n);(o.value||(o.value={}))[e]=r.apply(this,arguments)}),function(o){return P(o,n).value[e]}}function kr(t,e){var r;return(typeof e=="number"?B:e instanceof tt?Et:(r=tt(e))?(e=r,Et):ge)(t,e)}function sc(t){return function(){this.removeAttribute(t)}}function fc(t){return function(){this.removeAttributeNS(t.space,t.local)}}function lc(t,e,r){var n,o=r+"",i;return function(){var a=this.getAttribute(t);return a===o?null:a===n?i:i=e(n=a,r)}}function cc(t,e,r){var n,o=r+"",i;return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===n?i:i=e(n=a,r)}}function mc(t,e,r){var n,o,i;return function(){var a,s=r(this),f;return s==null?void this.removeAttribute(t):(a=this.getAttribute(t),f=s+"",a===f?null:a===n&&f===o?i:(o=f,i=e(n=a,s)))}}function hc(t,e,r){var n,o,i;return function(){var a,s=r(this),f;return s==null?void this.removeAttributeNS(t.space,t.local):(a=this.getAttributeNS(t.space,t.local),f=s+"",a===f?null:a===n&&f===o?i:(o=f,i=e(n=a,s)))}}function Sa(t,e){var r=lt(t),n=r==="transform"?Vr:kr;return this.attrTween(t,typeof e=="function"?(r.local?hc:mc)(r,n,ie(this,"attr."+t,e)):e==null?(r.local?fc:sc)(r):(r.local?cc:lc)(r,n,e))}function pc(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function dc(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function xc(t,e){var r,n;function o(){var i=e.apply(this,arguments);return i!==n&&(r=(n=i)&&dc(t,i)),r}return o._value=e,o}function gc(t,e){var r,n;function o(){var i=e.apply(this,arguments);return i!==n&&(r=(n=i)&&pc(t,i)),r}return o._value=e,o}function ka(t,e){var r="attr."+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;var n=lt(t);return this.tween(r,(n.local?xc:gc)(n,e))}function yc(t,e){return function(){Fe(this,t).delay=+e.apply(this,arguments)}}function vc(t,e){return e=+e,function(){Fe(this,t).delay=e}}function Ca(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?yc:vc)(e,t)):P(this.node(),e).delay}function wc(t,e){return function(){H(this,t).duration=+e.apply(this,arguments)}}function _c(t,e){return e=+e,function(){H(this,t).duration=e}}function Na(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?wc:_c)(e,t)):P(this.node(),e).duration}function bc(t,e){if(typeof e!="function")throw new Error;return function(){H(this,t).ease=e}}function Aa(t){var e=this._id;return arguments.length?this.each(bc(e,t)):P(this.node(),e).ease}function Mc(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;H(this,t).ease=r}}function Da(t){if(typeof t!="function")throw new Error;return this.each(Mc(this._id,t))}function Ia(t){typeof t!="function"&&(t=le(t));for(var e=this._groups,r=e.length,n=new Array(r),o=0;o<r;++o)for(var i=e[o],a=i.length,s=n[o]=[],f,u=0;u<a;++u)(f=i[u])&&t.call(f,f.__data__,u,i)&&s.push(f);return new q(n,this._parents,this._name,this._id)}function Ea(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,o=r.length,i=Math.min(n,o),a=new Array(n),s=0;s<i;++s)for(var f=e[s],u=r[s],c=f.length,m=a[s]=new Array(c),l,h=0;h<c;++h)(l=f[h]||u[h])&&(m[h]=l);for(;s<n;++s)a[s]=e[s];return new q(a,this._parents,this._name,this._id)}function Tc(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function Sc(t,e,r){var n,o,i=Tc(e)?Fe:H;return function(){var a=i(this,t),s=a.on;s!==n&&(o=(n=s).copy()).on(e,r),a.on=o}}function Oa(t,e){var r=this._id;return arguments.length<2?P(this.node(),r).on.on(t):this.each(Sc(r,t,e))}function kc(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function Ya(){return this.on("end.remove",kc(this._id))}function Fa(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Nt(t));for(var n=this._groups,o=n.length,i=new Array(o),a=0;a<o;++a)for(var s=n[a],f=s.length,u=i[a]=new Array(f),c,m,l=0;l<f;++l)(c=s[l])&&(m=t.call(c,c.__data__,l,s))&&("__data__"in c&&(m.__data__=c.__data__),u[l]=m,Mt(u[l],e,r,l,u,P(c,r)));return new q(i,this._parents,e,r)}function Ra(t){var e=this._name,r=this._id;typeof t!="function"&&(t=fe(t));for(var n=this._groups,o=n.length,i=[],a=[],s=0;s<o;++s)for(var f=n[s],u=f.length,c,m=0;m<u;++m)if(c=f[m]){for(var l=t.call(c,c.__data__,m,f),h,g=P(c,r),x=0,d=l.length;x<d;++x)(h=l[x])&&Mt(h,e,r,x,l,g);i.push(l),a.push(c)}return new q(i,a,e,r)}var Cc=ct.prototype.constructor;function za(){return new Cc(this._groups,this._parents)}function Nc(t,e){var r,n,o;return function(){var i=yt(this,t),a=(this.style.removeProperty(t),yt(this,t));return i===a?null:i===r&&a===n?o:o=e(r=i,n=a)}}function Ua(t){return function(){this.style.removeProperty(t)}}function Ac(t,e,r){var n,o=r+"",i;return function(){var a=yt(this,t);return a===o?null:a===n?i:i=e(n=a,r)}}function Dc(t,e,r){var n,o,i;return function(){var a=yt(this,t),s=r(this),f=s+"";return s==null&&(f=s=(this.style.removeProperty(t),yt(this,t))),a===f?null:a===n&&f===o?i:(o=f,i=e(n=a,s))}}function Ic(t,e){var r,n,o,i="style."+e,a="end."+i,s;return function(){var f=H(this,t),u=f.on,c=f.value[i]==null?s||(s=Ua(e)):void 0;(u!==r||o!==c)&&(n=(r=u).copy()).on(a,o=c),f.on=n}}function Pa(t,e,r){var n=(t+="")=="transform"?Wr:kr;return e==null?this.styleTween(t,Nc(t,n)).on("end.style."+t,Ua(t)):typeof e=="function"?this.styleTween(t,Dc(t,n,ie(this,"style."+t,e))).each(Ic(this._id,t)):this.styleTween(t,Ac(t,n,e),r).on("end.style."+t,null)}function Ec(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Oc(t,e,r){var n,o;function i(){var a=e.apply(this,arguments);return a!==o&&(n=(o=a)&&Ec(t,a,r)),n}return i._value=e,i}function $a(t,e,r){var n="style."+(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;return this.tween(n,Oc(t,e,r??""))}function Yc(t){return function(){this.textContent=t}}function Fc(t){return function(){var e=t(this);this.textContent=e??""}}function La(t){return this.tween("text",typeof t=="function"?Fc(ie(this,"text",t)):Yc(t==null?"":t+""))}function Rc(t){return function(e){this.textContent=t.call(this,e)}}function zc(t){var e,r;function n(){var o=t.apply(this,arguments);return o!==r&&(e=(r=o)&&Rc(o)),e}return n._value=t,n}function Ba(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,zc(t))}function Ha(){for(var t=this._name,e=this._id,r=Cr(),n=this._groups,o=n.length,i=0;i<o;++i)for(var a=n[i],s=a.length,f,u=0;u<s;++u)if(f=a[u]){var c=P(f,e);Mt(f,t,r,u,a,{time:c.time+c.delay+c.duration,delay:0,duration:c.duration,ease:c.ease})}return new q(n,this._parents,t,r)}function qa(){var t,e,r=this,n=r._id,o=r.size();return new Promise(function(i,a){var s={value:a},f={value:function(){--o===0&&i()}};r.each(function(){var u=H(this,n),c=u.on;c!==t&&(e=(t=c).copy(),e._.cancel.push(s),e._.interrupt.push(s),e._.end.push(f)),u.on=e}),o===0&&i()})}var Uc=0;function q(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function Xa(t){return ct().transition(t)}function Cr(){return++Uc}var xt=ct.prototype;q.prototype=Xa.prototype={constructor:q,select:Fa,selectAll:Ra,selectChild:xt.selectChild,selectChildren:xt.selectChildren,filter:Ia,merge:Ea,selection:za,transition:Ha,call:xt.call,nodes:xt.nodes,node:xt.node,size:xt.size,empty:xt.empty,each:xt.each,on:Oa,attr:Sa,attrTween:ka,style:Pa,styleTween:$a,text:La,textTween:Ba,remove:Ya,tween:Ta,delay:Ca,duration:Na,ease:Aa,easeVarying:Da,end:qa,[Symbol.iterator]:xt[Symbol.iterator]};function Nr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var Pc={time:null,delay:0,duration:250,ease:Nr};function $c(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function Wa(t){var e,r;t instanceof q?(e=t._id,t=t._name):(e=Cr(),(r=Pc).time=Oe(),t=t==null?null:t+"");for(var n=this._groups,o=n.length,i=0;i<o;++i)for(var a=n[i],s=a.length,f,u=0;u<s;++u)(f=a[u])&&Mt(f,t,e,u,a,r||$c(f,e));return new q(n,this._parents,t,e)}ct.prototype.interrupt=Ma;ct.prototype.transition=Wa;var{abs:Uv,max:Pv,min:$v}=Math;function Va(t){return[+t[0],+t[1]]}function Lc(t){return[Va(t[0]),Va(t[1])]}var Lv={name:"x",handles:["w","e"].map(Tn),input:function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},Bv={name:"y",handles:["n","s"].map(Tn),input:function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},Hv={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(Tn),input:function(t){return t==null?null:Lc(t)},output:function(t){return t}};function Tn(t){return{type:t}}function Bc(t,e){var r,n=1;t==null&&(t=0),e==null&&(e=0);function o(){var i,a=r.length,s,f=0,u=0;for(i=0;i<a;++i)s=r[i],f+=s.x,u+=s.y;for(f=(f/a-t)*n,u=(u/a-e)*n,i=0;i<a;++i)s=r[i],s.x-=f,s.y-=u}return o.initialize=function(i){r=i},o.x=function(i){return arguments.length?(t=+i,o):t},o.y=function(i){return arguments.length?(e=+i,o):e},o.strength=function(i){return arguments.length?(n=+i,o):n},o}function Ga(t){let e=+this._x.call(null,t),r=+this._y.call(null,t);return Za(this.cover(e,r),e,r,t)}function Za(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var o,i=t._root,a={data:n},s=t._x0,f=t._y0,u=t._x1,c=t._y1,m,l,h,g,x,d,y,_;if(!i)return t._root=a,t;for(;i.length;)if((x=e>=(m=(s+u)/2))?s=m:u=m,(d=r>=(l=(f+c)/2))?f=l:c=l,o=i,!(i=i[y=d<<1|x]))return o[y]=a,t;if(h=+t._x.call(null,i.data),g=+t._y.call(null,i.data),e===h&&r===g)return a.next=i,o?o[y]=a:t._root=a,t;do o=o?o[y]=new Array(4):t._root=new Array(4),(x=e>=(m=(s+u)/2))?s=m:u=m,(d=r>=(l=(f+c)/2))?f=l:c=l;while((y=d<<1|x)===(_=(g>=l)<<1|h>=m));return o[_]=i,o[y]=a,t}function Qa(t){var e,r,n=t.length,o,i,a=new Array(n),s=new Array(n),f=1/0,u=1/0,c=-1/0,m=-1/0;for(r=0;r<n;++r)isNaN(o=+this._x.call(null,e=t[r]))||isNaN(i=+this._y.call(null,e))||(a[r]=o,s[r]=i,o<f&&(f=o),o>c&&(c=o),i<u&&(u=i),i>m&&(m=i));if(f>c||u>m)return this;for(this.cover(f,u).cover(c,m),r=0;r<n;++r)Za(this,a[r],s[r],t[r]);return this}function Ka(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,o=this._x1,i=this._y1;if(isNaN(r))o=(r=Math.floor(t))+1,i=(n=Math.floor(e))+1;else{for(var a=o-r||1,s=this._root,f,u;r>t||t>=o||n>e||e>=i;)switch(u=(e<n)<<1|t<r,f=new Array(4),f[u]=s,s=f,a*=2,u){case 0:o=r+a,i=n+a;break;case 1:r=o-a,i=n+a;break;case 2:o=r+a,n=i-a;break;case 3:r=o-a,n=i-a;break}this._root&&this._root.length&&(this._root=s)}return this._x0=r,this._y0=n,this._x1=o,this._y1=i,this}function Ja(){var t=[];return this.visit(function(e){if(!e.length)do t.push(e.data);while(e=e.next)}),t}function ja(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]}function L(t,e,r,n,o){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=o}function tu(t,e,r){var n,o=this._x0,i=this._y0,a,s,f,u,c=this._x1,m=this._y1,l=[],h=this._root,g,x;for(h&&l.push(new L(h,o,i,c,m)),r==null?r=1/0:(o=t-r,i=e-r,c=t+r,m=e+r,r*=r);g=l.pop();)if(!(!(h=g.node)||(a=g.x0)>c||(s=g.y0)>m||(f=g.x1)<o||(u=g.y1)<i))if(h.length){var d=(a+f)/2,y=(s+u)/2;l.push(new L(h[3],d,y,f,u),new L(h[2],a,y,d,u),new L(h[1],d,s,f,y),new L(h[0],a,s,d,y)),(x=(e>=y)<<1|t>=d)&&(g=l[l.length-1],l[l.length-1]=l[l.length-1-x],l[l.length-1-x]=g)}else{var _=t-+this._x.call(null,h.data),M=e-+this._y.call(null,h.data),p=_*_+M*M;if(p<r){var b=Math.sqrt(r=p);o=t-b,i=e-b,c=t+b,m=e+b,n=h.data}}return n}function eu(t){if(isNaN(c=+this._x.call(null,t))||isNaN(m=+this._y.call(null,t)))return this;var e,r=this._root,n,o,i,a=this._x0,s=this._y0,f=this._x1,u=this._y1,c,m,l,h,g,x,d,y;if(!r)return this;if(r.length)for(;;){if((g=c>=(l=(a+f)/2))?a=l:f=l,(x=m>=(h=(s+u)/2))?s=h:u=h,e=r,!(r=r[d=x<<1|g]))return this;if(!r.length)break;(e[d+1&3]||e[d+2&3]||e[d+3&3])&&(n=e,y=d)}for(;r.data!==t;)if(o=r,!(r=r.next))return this;return(i=r.next)&&delete r.next,o?(i?o.next=i:delete o.next,this):e?(i?e[d]=i:delete e[d],(r=e[0]||e[1]||e[2]||e[3])&&r===(e[3]||e[2]||e[1]||e[0])&&!r.length&&(n?n[y]=r:this._root=r),this):(this._root=i,this)}function ru(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this}function nu(){return this._root}function ou(){var t=0;return this.visit(function(e){if(!e.length)do++t;while(e=e.next)}),t}function iu(t){var e=[],r,n=this._root,o,i,a,s,f;for(n&&e.push(new L(n,this._x0,this._y0,this._x1,this._y1));r=e.pop();)if(!t(n=r.node,i=r.x0,a=r.y0,s=r.x1,f=r.y1)&&n.length){var u=(i+s)/2,c=(a+f)/2;(o=n[3])&&e.push(new L(o,u,c,s,f)),(o=n[2])&&e.push(new L(o,i,c,u,f)),(o=n[1])&&e.push(new L(o,u,a,s,c)),(o=n[0])&&e.push(new L(o,i,a,u,c))}return this}function au(t){var e=[],r=[],n;for(this._root&&e.push(new L(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var o=n.node;if(o.length){var i,a=n.x0,s=n.y0,f=n.x1,u=n.y1,c=(a+f)/2,m=(s+u)/2;(i=o[0])&&e.push(new L(i,a,s,c,m)),(i=o[1])&&e.push(new L(i,c,s,f,m)),(i=o[2])&&e.push(new L(i,a,m,c,u)),(i=o[3])&&e.push(new L(i,c,m,f,u))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this}function uu(t){return t[0]}function su(t){return arguments.length?(this._x=t,this):this._x}function fu(t){return t[1]}function lu(t){return arguments.length?(this._y=t,this):this._y}function qt(t,e,r){var n=new Sn(e??uu,r??fu,NaN,NaN,NaN,NaN);return t==null?n:n.addAll(t)}function Sn(t,e,r,n,o,i){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=o,this._y1=i,this._root=void 0}function cu(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}var X=qt.prototype=Sn.prototype;X.copy=function(){var t=new Sn(this._x,this._y,this._x0,this._y0,this._x1,this._y1),e=this._root,r,n;if(!e)return t;if(!e.length)return t._root=cu(e),t;for(r=[{source:e,target:t._root=new Array(4)}];e=r.pop();)for(var o=0;o<4;++o)(n=e.source[o])&&(n.length?r.push({source:n,target:e.target[o]=new Array(4)}):e.target[o]=cu(n));return t};X.add=Ga;X.addAll=Qa;X.cover=Ka;X.data=Ja;X.extent=ja;X.find=tu;X.remove=eu;X.removeAll=ru;X.root=nu;X.size=ou;X.visit=iu;X.visitAfter=au;X.x=su;X.y=lu;function st(t){return function(){return t}}function rt(t){return(t()-.5)*1e-6}function Hc(t){return t.x+t.vx}function qc(t){return t.y+t.vy}function Xc(t){var e,r,n,o=1,i=1;typeof t!="function"&&(t=st(t==null?1:+t));function a(){for(var u,c=e.length,m,l,h,g,x,d,y=0;y<i;++y)for(m=qt(e,Hc,qc).visitAfter(s),u=0;u<c;++u)l=e[u],x=r[l.index],d=x*x,h=l.x+l.vx,g=l.y+l.vy,m.visit(_);function _(M,p,b,v,k){var C=M.data,Y=M.r,N=x+Y;if(C){if(C.index>l.index){var S=h-C.x-C.vx,O=g-C.y-C.vy,D=S*S+O*O;D<N*N&&(S===0&&(S=rt(n),D+=S*S),O===0&&(O=rt(n),D+=O*O),D=(N-(D=Math.sqrt(D)))/D*o,l.vx+=(S*=D)*(N=(Y*=Y)/(d+Y)),l.vy+=(O*=D)*N,C.vx-=S*(N=1-N),C.vy-=O*N)}return}return p>h+N||v<h-N||b>g+N||k<g-N}}function s(u){if(u.data)return u.r=r[u.data.index];for(var c=u.r=0;c<4;++c)u[c]&&u[c].r>u.r&&(u.r=u[c].r)}function f(){if(e){var u,c=e.length,m;for(r=new Array(c),u=0;u<c;++u)m=e[u],r[m.index]=+t(m,u,e)}}return a.initialize=function(u,c){e=u,n=c,f()},a.iterations=function(u){return arguments.length?(i=+u,a):i},a.strength=function(u){return arguments.length?(o=+u,a):o},a.radius=function(u){return arguments.length?(t=typeof u=="function"?u:st(+u),f(),a):t},a}function Wc(t){return t.index}function mu(t,e){var r=t.get(e);if(!r)throw new Error("node not found: "+e);return r}function Vc(t){var e=Wc,r=m,n,o=st(30),i,a,s,f,u,c=1;t==null&&(t=[]);function m(d){return 1/Math.min(s[d.source.index],s[d.target.index])}function l(d){for(var y=0,_=t.length;y<c;++y)for(var M=0,p,b,v,k,C,Y,N;M<_;++M)p=t[M],b=p.source,v=p.target,k=v.x+v.vx-b.x-b.vx||rt(u),C=v.y+v.vy-b.y-b.vy||rt(u),Y=Math.sqrt(k*k+C*C),Y=(Y-i[M])/Y*d*n[M],k*=Y,C*=Y,v.vx-=k*(N=f[M]),v.vy-=C*N,b.vx+=k*(N=1-N),b.vy+=C*N}function h(){if(a){var d,y=a.length,_=t.length,M=new Map(a.map((b,v)=>[e(b,v,a),b])),p;for(d=0,s=new Array(y);d<_;++d)p=t[d],p.index=d,typeof p.source!="object"&&(p.source=mu(M,p.source)),typeof p.target!="object"&&(p.target=mu(M,p.target)),s[p.source.index]=(s[p.source.index]||0)+1,s[p.target.index]=(s[p.target.index]||0)+1;for(d=0,f=new Array(_);d<_;++d)p=t[d],f[d]=s[p.source.index]/(s[p.source.index]+s[p.target.index]);n=new Array(_),g(),i=new Array(_),x()}}function g(){if(a)for(var d=0,y=t.length;d<y;++d)n[d]=+r(t[d],d,t)}function x(){if(a)for(var d=0,y=t.length;d<y;++d)i[d]=+o(t[d],d,t)}return l.initialize=function(d,y){a=d,u=y,h()},l.links=function(d){return arguments.length?(t=d,h(),l):t},l.id=function(d){return arguments.length?(e=d,l):e},l.iterations=function(d){return arguments.length?(c=+d,l):c},l.strength=function(d){return arguments.length?(r=typeof d=="function"?d:st(+d),g(),l):r},l.distance=function(d){return arguments.length?(o=typeof d=="function"?d:st(+d),x(),l):o},l}function hu(){let t=1;return()=>(t=(1664525*t+1013904223)%4294967296)/4294967296}function pu(t){return t.x}function du(t){return t.y}var Gc=10,Zc=Math.PI*(3-Math.sqrt(5));function Qc(t){var e,r=1,n=.001,o=1-Math.pow(n,1/300),i=0,a=.6,s=new Map,f=oe(m),u=Lt("tick","end"),c=hu();t==null&&(t=[]);function m(){l(),u.call("tick",e),r<n&&(f.stop(),u.call("end",e))}function l(x){var d,y=t.length,_;x===void 0&&(x=1);for(var M=0;M<x;++M)for(r+=(i-r)*o,s.forEach(function(p){p(r)}),d=0;d<y;++d)_=t[d],_.fx==null?_.x+=_.vx*=a:(_.x=_.fx,_.vx=0),_.fy==null?_.y+=_.vy*=a:(_.y=_.fy,_.vy=0);return e}function h(){for(var x=0,d=t.length,y;x<d;++x){if(y=t[x],y.index=x,y.fx!=null&&(y.x=y.fx),y.fy!=null&&(y.y=y.fy),isNaN(y.x)||isNaN(y.y)){var _=Gc*Math.sqrt(.5+x),M=x*Zc;y.x=_*Math.cos(M),y.y=_*Math.sin(M)}(isNaN(y.vx)||isNaN(y.vy))&&(y.vx=y.vy=0)}}function g(x){return x.initialize&&x.initialize(t,c),x}return h(),e={tick:l,restart:function(){return f.restart(m),e},stop:function(){return f.stop(),e},nodes:function(x){return arguments.length?(t=x,h(),s.forEach(g),e):t},alpha:function(x){return arguments.length?(r=+x,e):r},alphaMin:function(x){return arguments.length?(n=+x,e):n},alphaDecay:function(x){return arguments.length?(o=+x,e):+o},alphaTarget:function(x){return arguments.length?(i=+x,e):i},velocityDecay:function(x){return arguments.length?(a=1-x,e):1-a},randomSource:function(x){return arguments.length?(c=x,s.forEach(g),e):c},force:function(x,d){return arguments.length>1?(d==null?s.delete(x):s.set(x,g(d)),e):s.get(x)},find:function(x,d,y){var _=0,M=t.length,p,b,v,k,C;for(y==null?y=1/0:y*=y,_=0;_<M;++_)k=t[_],p=x-k.x,b=d-k.y,v=p*p+b*b,v<y&&(C=k,y=v);return C},on:function(x,d){return arguments.length>1?(u.on(x,d),e):u.on(x)}}}function Kc(){var t,e,r,n,o=st(-30),i,a=1,s=1/0,f=.81;function u(h){var g,x=t.length,d=qt(t,pu,du).visitAfter(m);for(n=h,g=0;g<x;++g)e=t[g],d.visit(l)}function c(){if(t){var h,g=t.length,x;for(i=new Array(g),h=0;h<g;++h)x=t[h],i[x.index]=+o(x,h,t)}}function m(h){var g=0,x,d,y=0,_,M,p;if(h.length){for(_=M=p=0;p<4;++p)(x=h[p])&&(d=Math.abs(x.value))&&(g+=x.value,y+=d,_+=d*x.x,M+=d*x.y);h.x=_/y,h.y=M/y}else{x=h,x.x=x.data.x,x.y=x.data.y;do g+=i[x.data.index];while(x=x.next)}h.value=g}function l(h,g,x,d){if(!h.value)return!0;var y=h.x-e.x,_=h.y-e.y,M=d-g,p=y*y+_*_;if(M*M/f<p)return p<s&&(y===0&&(y=rt(r),p+=y*y),_===0&&(_=rt(r),p+=_*_),p<a&&(p=Math.sqrt(a*p)),e.vx+=y*h.value*n/p,e.vy+=_*h.value*n/p),!0;if(h.length||p>=s)return;(h.data!==e||h.next)&&(y===0&&(y=rt(r),p+=y*y),_===0&&(_=rt(r),p+=_*_),p<a&&(p=Math.sqrt(a*p)));do h.data!==e&&(M=i[h.data.index]*n/p,e.vx+=y*M,e.vy+=_*M);while(h=h.next)}return u.initialize=function(h,g){t=h,r=g,c()},u.strength=function(h){return arguments.length?(o=typeof h=="function"?h:st(+h),c(),u):o},u.distanceMin=function(h){return arguments.length?(a=h*h,u):Math.sqrt(a)},u.distanceMax=function(h){return arguments.length?(s=h*h,u):Math.sqrt(s)},u.theta=function(h){return arguments.length?(f=h*h,u):Math.sqrt(f)},u}function Tt(t,e,r){this.k=t,this.x=e,this.y=r}Tt.prototype={constructor:Tt,scale:function(t){return t===1?this:new Tt(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Tt(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+")"}};var kn=new Tt(1,0,0);Cn.prototype=Tt.prototype;function Cn(t){for(;!t.__zoom;)if(!(t=t.parentNode))return kn;return t.__zoom}export{An as a,Dn as b,Fu as c,Ru as d,At as e,jl as f,Bc as g,Xc as h,Vc as i,Qc as j,Kc as k,qe as l,Bs as m,sn as n,ta as o,yn as p,$l as q,_n as r,Hl as s,Xl as t};