=e-1){var s=u[n];return s.x0=i,s.y0=o,s.x1=a,void(s.y1=c)}var l=f[n],h=r/2+l,d=n+1,p=e-1;for(;d>>1;f[g]c-o){var _=r?(i*v+a*y)/r:a;t(n,d,y,i,o,_,c),t(d,e,v,_,o,a,c)}else{var b=r?(o*v+c*y)/r:c;t(n,d,y,i,o,a,b),t(d,e,v,i,b,a,c)}}(0,c,t.value,n,e,r,i)},t.treemapDice=Od,t.treemapResquarify=np,t.treemapSlice=Kd,t.treemapSliceDice=function(t,n,e,r,i){(1&t.depth?Kd:Od)(t,n,e,r,i)},t.treemapSquarify=tp,t.tsv=Gu,t.tsvFormat=qu,t.tsvFormatBody=Ru,t.tsvFormatRow=Ou,t.tsvFormatRows=Fu,t.tsvFormatValue=Uu,t.tsvParse=zu,t.tsvParseRows=Du,t.union=function(...t){const n=new InternSet;for(const e of t)for(const t of e)n.add(t);return n},t.utcDay=iy,t.utcDays=oy,t.utcFriday=hy,t.utcFridays=by,t.utcHour=ny,t.utcHours=ey,t.utcMillisecond=fg,t.utcMilliseconds=sg,t.utcMinute=Qg,t.utcMinutes=Jg,t.utcMonday=cy,t.utcMondays=gy,t.utcMonth=wy,t.utcMonths=My,t.utcSaturday=dy,t.utcSaturdays=my,t.utcSecond=bg,t.utcSeconds=mg,t.utcSunday=uy,t.utcSundays=py,t.utcThursday=ly,t.utcThursdays=_y,t.utcTickInterval=Ny,t.utcTicks=ky,t.utcTuesday=fy,t.utcTuesdays=yy,t.utcWednesday=sy,t.utcWednesdays=vy,t.utcWeek=uy,t.utcWeeks=py,t.utcYear=Ty,t.utcYears=Sy,t.variance=d,t.version="7.2.1",t.window=tn,t.xml=Wu,t.zip=function(){return it(arguments)},t.zoom=function(){var t,n,e,r=Bx,i=Yx,o=Xx,a=jx,u=Hx,c=[0,1/0],f=[[-1/0,-1/0],[1/0,1/0]],s=250,l=Br,h=_t("start","zoom","end"),d=500,p=0,g=10;function y(t){t.property("__zoom",Lx).on("wheel.zoom",M,{passive:!1}).on("mousedown.zoom",A).on("dblclick.zoom",T).filter(u).on("touchstart.zoom",S).on("touchmove.zoom",E).on("touchend.zoom touchcancel.zoom",k).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function v(t,n){return(n=Math.max(c[0],Math.min(c[1],n)))===t.k?t:new Rx(n,t.x,t.y)}function _(t,n,e){var r=n[0]-e[0]*t.k,i=n[1]-e[1]*t.k;return r===t.x&&i===t.y?t:new Rx(t.k,r,i)}function b(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function m(t,n,e,r){t.on("start.zoom",(function(){x(this,arguments).event(r).start()})).on("interrupt.zoom end.zoom",(function(){x(this,arguments).event(r).end()})).tween("zoom",(function(){var t=this,o=arguments,a=x(t,o).event(r),u=i.apply(t,o),c=null==e?b(u):"function"==typeof e?e.apply(t,o):e,f=Math.max(u[1][0]-u[0][0],u[1][1]-u[0][1]),s=t.__zoom,h="function"==typeof n?n.apply(t,o):n,d=l(s.invert(c).concat(f/s.k),h.invert(c).concat(f/h.k));return function(t){if(1===t)t=h;else{var n=d(t),e=f/n[2];t=new Rx(e,c[0]-n[0]*e,c[1]-n[1]*e)}a.zoom(null,t)}}))}function x(t,n,e){return!e&&t.__zooming||new w(t,n)}function w(t,n){this.that=t,this.args=n,this.active=0,this.sourceEvent=null,this.extent=i.apply(t,n),this.taps=0}function M(t,...n){if(r.apply(this,arguments)){var e=x(this,n).event(t),i=this.__zoom,u=Math.max(c[0],Math.min(c[1],i.k*Math.pow(2,a.apply(this,arguments)))),s=jn(t);if(e.wheel)e.mouse[0][0]===s[0]&&e.mouse[0][1]===s[1]||(e.mouse[1]=i.invert(e.mouse[0]=s)),clearTimeout(e.wheel);else{if(i.k===u)return;e.mouse=[s,i.invert(s)],wi(this),e.start()}Ix(t),e.wheel=setTimeout(l,150),e.zoom("mouse",o(_(v(i,u),e.mouse[0],e.mouse[1]),e.extent,f))}function l(){e.wheel=null,e.end()}}function A(t,...n){if(!e&&r.apply(this,arguments)){var i=t.currentTarget,a=x(this,n,!0).event(t),u=Un(t.view).on("mousemove.zoom",h,!0).on("mouseup.zoom",d,!0),c=jn(t,i),s=t.clientX,l=t.clientY;$n(t.view),Ux(t),a.mouse=[c,this.__zoom.invert(c)],wi(this),a.start()}function h(t){if(Ix(t),!a.moved){var n=t.clientX-s,e=t.clientY-l;a.moved=n*n+e*e>p}a.event(t).zoom("mouse",o(_(a.that.__zoom,a.mouse[0]=jn(t,i),a.mouse[1]),a.extent,f))}function d(t){u.on("mousemove.zoom mouseup.zoom",null),Wn(t.view,a.moved),Ix(t),a.event(t).end()}}function T(t,...n){if(r.apply(this,arguments)){var e=this.__zoom,a=jn(t.changedTouches?t.changedTouches[0]:t,this),u=e.invert(a),c=e.k*(t.shiftKey?.5:2),l=o(_(v(e,c),a,u),i.apply(this,n),f);Ix(t),s>0?Un(this).transition().duration(s).call(m,l,a,t):Un(this).call(y.transform,l,a,t)}}function S(e,...i){if(r.apply(this,arguments)){var o,a,u,c,f=e.touches,s=f.length,l=x(this,i,e.changedTouches.length===s).event(e);for(Ux(e),a=0;a d.value)
+ .sort((a, b) => b.value - a.value);
+
+ // Give each node a unique id (used for clip paths)
+ let id = 0;
+ root.descendants().forEach(function (d) {
+ d.id = id;
+ id++;
+ });
+
+ // Find the resetZoomButton and call clicked() with root
+ const button = document.getElementById("resetZoomButton");
+ button.addEventListener("click", (evt) => {
+ clicked.bind(this)(evt, root);
+ });
+
+ const strokeWidth = 1;
+ const numLevels = root.height + 1;
+ const height = numLevels * this.rowHeight + numLevels * strokeWidth;
+
+ this.svg.attr("height", height);
+
+ const x = d3.scaleLinear().range([0, this.width]);
+ const y = d3.scaleLinear().range([0, height]);
+
+ const totalRuntime = root.value;
+
+ const partition = d3.partition();
+ // .size([this.width, height])
+ // .round(true);
+ partition(root);
+
+ // Put text and rectangle into a group;
+ // cf. .
+ const all_g = this.svg.selectAll("g");
+ const g = all_g
+ .data(
+ // Only get the blocks above a certain threshold width
+ root.descendants().filter((d) => x(d.x1 - d.x0) > 1.0)
+ )
+ .enter()
+ .append("g")
+ .attr("class", (d) => "color" + d.data.color)
+ // binding ensures `this` is correct in clicked:
+ .on("click", clicked.bind(this));
+
+ // append , rendered as tooltip
+ g.append("title").text((d) => {
+ let out = d.data.text[0] + " ";
+ if (d.data.text.length > 1) {
+ out += d.data.text[1];
+ } else {
+ out +=
+ d3.format(".3f")(d.value) +
+ " s (" +
+ d3.format(".1%")(d.value / totalRuntime) +
+ ")";
+ }
+ return out;
+ });
+
+ const rect = g
+ .append("rect")
+ .attr("x", (d) => x(d.x0))
+ .attr("y", (d) => y(d.y0))
+ .attr("width", (d) => x(d.x1 - d.x0))
+ .attr("height", this.rowHeight);
+ // .attr("fill", d => color((d.children ? d : d.parent).key))
+
+ // First, the clip path, same as the rect.
+ // It'd be nice to having to repeat outselves here, but the