@data-vision/interactive-chart 0.0.8 → 0.0.9
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/build/bar.cjs +1 -1
- package/build/bar.js +2 -2
- package/build/{chart-Cj4Fiwnb.js → chart-DDRVFzXA.js} +1 -2
- package/build/chart-DGmZBxvs.cjs +1 -0
- package/build/{heatmap-BlMqliH5.cjs → heatmap-DC9YzFDb.cjs} +1 -1
- package/build/{heatmap-Br4YjrBg.js → heatmap-DVvRVO9Z.js} +1 -1
- package/build/heatmap.cjs +1 -1
- package/build/heatmap.js +2 -2
- package/build/index.cjs +1 -1
- package/build/index.js +2 -2
- package/build/line.cjs +1 -1
- package/build/line.js +2 -2
- package/build/otdr.cjs +1 -1
- package/build/otdr.js +2 -2
- package/package.json +1 -1
- package/build/chart-Dr9ZOezr.cjs +0 -1
package/build/bar.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const M=require("./chart-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const M=require("./chart-DGmZBxvs.cjs"),G=require("./dataset-D4KLCpTU.cjs");class g extends M.Chart{draw(l){const{data:T,xMin:u,xMax:b,yMin:q,scale:i,grid:o,rect:f,sample:w}=this,n=T;if(n){const{precision:S=1,color:h,data:m}=n,{end:I,loop:j}=G.fitDataset(m,S,[u,b]),d=M.getMin([...m]),x=M.getMax([...m]);if(l.save(),d<1/0&&x>-1/0){const v=q/i.y,r=f.y+v,C=S/i.x;if(typeof h=="string")l.fillStyle=h;else if(h.length<2){const[t]=n.color;t&&(l.fillStyle=t)}else{let t=Math.min(r-d/i.y,f.y),s=Math.max(r-x/i.y,o.top);d===x&&(d>0?t=r:(t=s,s=r));const a=l.createLinearGradient(0,t,0,s);for(let e=0,p=n.color,c=p.length,y=1/(c-1);e<c;e++)a.addColorStop(e*y,p[e]);l.fillStyle=a}j(i.x,(t,s)=>{let a=o.left-u/i.x+C*(t+s*.1),e=C*s*.8;a<o.left?(e=Math.max(0,e-(o.left-a)),a=o.left):a+e>f.x&&(e=Math.max(0,f.x-a));const c=w(n.data.slice(t,Math.min(t+s,I+1)),g.config.dataSampleMethod)/i.y,y=r-c,D=c-Math.max(0,o.top-y)-Math.max(0,v);l.fillRect(a,Math.max(y,o.top),e,D)}),l.restore()}}}}exports.ControlType=M.ControlType;exports.default=g;
|
package/build/bar.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as T, g as b, c as j } from "./chart-
|
|
2
|
-
import { a as E } from "./chart-
|
|
1
|
+
import { C as T, g as b, c as j } from "./chart-DDRVFzXA.js";
|
|
2
|
+
import { a as E } from "./chart-DDRVFzXA.js";
|
|
3
3
|
import { f as k } from "./dataset-Bv37sY1L.js";
|
|
4
4
|
class v extends T {
|
|
5
5
|
// @override
|
|
@@ -533,7 +533,6 @@ class l extends R {
|
|
|
533
533
|
throw new Error("Chart.prototype.draw not implemented");
|
|
534
534
|
}
|
|
535
535
|
drawSnapshot(t) {
|
|
536
|
-
throw new Error("Chart.prototype.drawSnapshot not implemented");
|
|
537
536
|
}
|
|
538
537
|
drawAnnotations(t) {
|
|
539
538
|
}
|
|
@@ -588,7 +587,7 @@ class l extends R {
|
|
|
588
587
|
const S = O([h, x], [u, f]);
|
|
589
588
|
this.drawVerticalGrid(S);
|
|
590
589
|
const C = O([p, d], [m, v]);
|
|
591
|
-
this.drawHorizontalGrid(C), t.textRendering = "optimizeLegibility", t.textBaseline = "middle", t.font = `${l.config.fontSize * e.value}px sans-serif`, b && w !== null ? (t.putImageData(w, 0, 0), this.
|
|
590
|
+
this.drawHorizontalGrid(C), t.textRendering = "optimizeLegibility", t.textBaseline = "middle", t.font = `${l.config.fontSize * e.value}px sans-serif`, b && w !== null ? (t.putImageData(w, 0, 0), this.useSnapshot = !1) : this.draw(t), this.drawSnapshot(t), t.clearRect(0, 0, i, r.top), t.clearRect(0, 0, r.left, s), t.clearRect(0, c.y, i, r.bottom), t.clearRect(c.x, 0, r.right, s), this.drawAxisX(S), this.drawAxisY(C), this.drawAnnotations(t), this.shouldUpdate = !1;
|
|
592
591
|
}
|
|
593
592
|
}
|
|
594
593
|
drawVerticalGrid({ rules: t }) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";class P{_value;listeners=[];constructor(t){this._value=t}get value(){return this._value}set value(t){this._value=t}addEventListener(t){this.listeners.push(t)}removeEventListener(t){this.listeners=this.listeners.filter(e=>e!==t)}emitChangeEvent(){for(const t of this.listeners)t(this._value)}}class g{x;y;constructor(t,e){this.x=t,this.y=e}add(t){let{x:e,y:i}=this;return typeof t=="number"?(e+=t,i+=t):(e+=t.x,i+=t.y),new g(e,i)}sub(t){let{x:e,y:i}=this;return typeof t=="number"?(e-=t,i-=t):(e-=t.x,i-=t.y),new g(e,i)}multiply(t){let{x:e,y:i}=this;return typeof t=="number"?(e*=t,i*=t):(e*=t.x,i*=t.y),new g(e,i)}divide(t){let{x:e,y:i}=this;return typeof t=="number"?(e/=t,i/=t):(e/=t.x,i/=t.y),new g(e,i)}static origin(){return new g(0,0)}}function T(s){let t="";for(const[e,i]of Object.entries(s))t+=`${e.replace(/[A-Z]/g,n=>"-"+n.toLowerCase())}: ${i};`;return t}function y(s,t){for(const e in t){const i=t[e];s.style.setProperty(e,`${i}`)}}function k(s,t){const e=g.origin();if(t){const n=t.getBoundingClientRect();e.x=n.x,e.y=n.y}let i;if("touches"in s){const n=s,[o]=n.touches;i=new g(o.clientX,o.clientY)}else i=new g(s.clientX,s.clientY);return i.sub(e)}function H(s,t){let e=null;function i(){e&&(clearTimeout(e),e=null)}function n(...o){i(),e=setTimeout(()=>{s.apply(this,o)},t)}return n.cancel=i,n}const $=s=>[...s].reduce((t,e)=>Math.min(t,e),1/0),A=s=>[...s].reduce((t,e)=>Math.max(t,e),-1/0),D=([s,t])=>s<t?[s,t]:[t,s];function F(s,t=1){const[e,i]=s;return D([t-e,t-i])}function Z([s,t],[e,i],[n,o]=[0,1]){let a=s+e,r=t+i;return a<n&&(a=n,r=a+t-s),r>o&&(r=o,a=r-t+s),[a,r]}function R(s,[t,e]){return s>=t&&s<=e}function G({x:s,y:t},{left:e,top:i,right:n,bottom:o}){return R(s,[e,n])&&R(t,[i,o])}function C(s,[t,e]){return Math.max(t,Math.min(s,e))}function Q(s,t,e){const i=C(s.left,t),n=C(s.right,t),o=C(s.top,e),a=C(s.bottom,e);return{left:i,top:o,right:n,bottom:a}}function V({left:s,top:t,right:e,bottom:i},n){return{left:s*n,top:t*n,right:e*n,bottom:i*n}}function B(s){return+s.toExponential().match(/-?\d+$/)[0]}function q(s){const t=String(s).match(/\.\d+$/);return t?1-t[0].length:B(s)}function K(s,t,[e,i]){let n=Math.floor(e/t)*t;const o=Math.abs(t);for(;n<e;)n+=o;const a=[e],r=Math.abs(t/6);for(let c=0;c<Math.ceil(s);c++){const h=n+o*c;(h>e+r&&h<i-r||e<0&&h===0)&&a.push(h)}return a.push(i),a}function z(s,[t,e]){const[i,n]=s,o=n-i,a=B(o);let r=Math.pow(10,a);n<=0&&(r=-r);let c=Math.abs(o/r);if(c<t||c>e){const p=[2,4,5,8,10];for(const d of p){const u=c<t?r/d:r*d,f=Math.abs(o/u);if(R(f,[t,e])){r=u,c=f;break}}}const h=K(c,r,s),x=q(r);return{rules:h,density:x}}class Y{_value;mediaQuery;listener;constructor(t){this.listener=t,this.onMediaChange=this.onMediaChange.bind(this),this.createMediaMatch()}createMediaMatch(){this._value=window.devicePixelRatio,this.mediaQuery=window.matchMedia(`(resolution: ${this.value}dppx)`),this.mediaQuery.addEventListener("change",this.onMediaChange)}get value(){return this._value}onMediaChange(){this.dispose(),this.createMediaMatch(),this.listener(this._value)}dispose(){this.mediaQuery.removeEventListener("change",this.onMediaChange)}}function U(s,t){const{width:e,hangingBaseline:i}=s.measureText(t);return{width:e,height:i??0}}class O extends P{element;dragging=!1;origin=g.origin();constructor(t,e){super(e),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),t.addEventListener("mousedown",this.onPointerDown),t.addEventListener("touchstart",this.onPointerDown),window.addEventListener("mousemove",this.onPointerMove),window.addEventListener("touchmove",this.onPointerMove),window.addEventListener("mouseup",this.onPointerUp),window.addEventListener("touchend",this.onPointerUp),this.element=t}set value(t){super.value=t,this.resize()}onPointerDown(t){this.dragging=!0,this.origin=k(t),this.onStart(t)}getStyle(t){return""}onUpdate({value:t}){return t}isEqual(t,e){return String(t)===String(e)}onStart(t){}onEnd(t){}resize(){const{_value:t,dragging:e}=this,i=this.getStyle({value:t,dragging:e});i!==""&&this.element.setAttribute("style",i)}onPointerMove(t){if(this.dragging){const e=k(t),i=this.onUpdate({value:this._value,offset:e,delta:e.sub(this.origin),event:t});this.isEqual(i,this._value)||(this._value=i,this.emitChangeEvent(),this.resize()),this.origin=e}}onPointerUp(t){this.dragging=!1,this.onEnd(t)}dispose(){this.element.removeEventListener("pointerdown",this.onPointerDown),this.element.removeEventListener("touchstart",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("touchmove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("touchend",this.onPointerUp)}}class j extends O{root;container;option;constructor(t,e){const i=document.createElement("div");super(i,e.initValue),this.root=t,this.option=e,this.getStyle=e.getStyle,this.container=i,this.root.appendChild(i),this.resize()}onStart(t){this.option.onStart?.(t)}onUpdate(t){return this.option.onUpdate(t)}onEnd(t){this.option.onEnd?.(t)}dispose(){super.dispose(),this.root.removeChild(this.container)}}class I{root;container;style={position:"absolute",display:"none",userSelect:"none"};inheritStyle;constructor(t,e){this.root=t,this.inheritStyle=e,this.container=document.createElement("div"),this.root.appendChild(this.container),this.setContainer()}setContainer(t){this.container.setAttribute("style",T({...this.style,...this.inheritStyle,...t}))}update({top:t,right:e,bottom:i,left:n}){this.setContainer({display:"block",inset:`${t}px ${e}px ${i}px ${n}px`})}hide(){this.setContainer({display:"none"})}dispose(){this.root.removeChild(this.container)}}class W{root;xTooltip;yTooltip;constructor(t,e){this.root=t,this.xTooltip=this.createTooltip(e),this.root.appendChild(this.xTooltip),this.yTooltip=this.createTooltip(e),this.root.appendChild(this.yTooltip)}createTooltip(t){const e=document.createElement("div");return e.setAttribute("style",T({position:"absolute",fontSize:"calc(var(--scale) * 12px)",userSelect:"none",padding:"calc(var(--scale) * 5px) calc(var(--scale) * 6px)",borderRadius:"4px",...t,display:"none"})),e}updateTooltip(t,e,i){y(t,{display:"block",...i}),t.innerText=e}update(t,e){t?this.updateTooltip(this.xTooltip,t.content,{left:`${t.offset.x}px`,top:`${t.offset.y}px`,transform:"translateX(-50%)"}):y(this.xTooltip,{display:"none"}),e?this.updateTooltip(this.yTooltip,e.content,{left:`${e.offset.x}px`,top:`${e.offset.y}px`,transform:"translate(-100%, -50%)"}):y(this.yTooltip,{display:"none"})}hide(){y(this.xTooltip,{display:"none"}),y(this.yTooltip,{display:"none"})}dispose(){this.root.removeChild(this.xTooltip),this.root.removeChild(this.yTooltip)}}class X{root;container;axisX;axisY;option;constructor(t,e){this.root=t,this.option=e,this.container=this.createContainer(),this.setEdge(e.edge),this.axisX=this.createAxis(),this.axisY=this.createAxis()}createContainer(){const t=document.createElement("div");return y(t,{inset:"0",userSelect:"none",display:"none"}),this.root.appendChild(t),t}createAxis(){const{style:t}=this.option,e=document.createElement("div");return y(e,{position:"absolute",...t}),this.container.appendChild(e),e}setEdge(t){y(this.container,{"--edge-top":`calc(${t.top}px * var(--scale))`,"--edge-bottom":`calc(${t.bottom}px * var(--scale))`,"--edge-left":`calc(${t.left}px * var(--scale))`,"--edge-right":`calc(${t.right}px * var(--scale))`})}update({x:t,y:e}){y(this.axisX,{width:"1px",left:`${t}px`,top:"var(--edge-top)",bottom:"var(--edge-bottom)"}),y(this.axisY,{"--gradient-angle":"45deg",height:"1px",top:`${e}px`,left:"var(--edge-left)",right:"var(--edge-right)"}),y(this.container,{display:"block"})}hide(){y(this.container,{display:"none"})}dispose(){this.root.removeChild(this.container)}}var M=(s=>(s[s.none=-1]="none",s[s.crop=0]="crop",s[s.zoom=1]="zoom",s[s.move=2]="move",s))(M||{});class l extends O{root;resizeObserver;dpr;canvasContainer;canvas;static version="0.1.6";static config={xMin:0,xMax:1e4,yMin:0,yMax:1e3,grid:{left:65,top:10,right:30,bottom:35},controlType:M.crop,xUnit:"",yUnit:"",xMinScale:3,xMaxScale:8,yMinScale:3,yMaxScale:8,responsiveScale:!0,backgroundColor:"#fff",gridColor:"#ccc",textColor:"#222",accentColor:"#36f",fontSize:12,cropStyle:{backgroundColor:"#36f4"},tooltip:{enabled:!0,style:{}},crosshair:{enabled:!0,style:{"--gradient-angle":"0",background:"repeating-linear-gradient(var(--gradient-angle), transparent 0 2px, var(--accent-color) 2px 5px)"}},axisXScaleOffset:{x:0,y:15},axisYScaleOffset:{x:5,y:0},xLimit:[-1/0,1/0],yLimit:[-1/0,1/0],wheelZoom:!0,dataSampleMethod:"none"};width=0;height=0;context;xMin=l.config.xMin;xMax=l.config.xMax;yMin=l.config.yMin;yMax=l.config.yMax;data=null;tooltip=null;crosshair=null;crop;controlType=l.config.controlType;prevControlType=l.config.controlType;wheelZoom=l.config.wheelZoom;cropOrigin=g.origin();cropOffset=g.origin();inCrop=!1;grid={...l.config.grid};xMinScale=l.config.xMinScale;xMaxScale=l.config.xMaxScale;yMinScale=l.config.yMinScale;yMaxScale=l.config.yMaxScale;xUnit=l.config.xUnit;yUnit=l.config.yUnit;raf;shouldUpdate=!1;snapshot=null;useSnapshot=!1;constructor(t){const e=document.createElement("div");super(e,0),this.root=t,this.resizeObserver=new ResizeObserver(H(this.onResize,200)),this.resizeObserver.observe(t),this.onDprChange=this.onDprChange.bind(this),this.dpr=new Y(this.onDprChange),this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.context.scale(this.dpr.value,this.dpr.value);const i=this.initCanvas(e,this.canvas);this.onMouseMove=this.onMouseMove.bind(this),i.addEventListener("mousemove",this.onMouseMove),this.onMouseLeave=this.onMouseLeave.bind(this),i.addEventListener("mouseleave",this.onMouseLeave),this.onWheel=this.onWheel.bind(this),i.addEventListener("wheel",this.onWheel),this.onDblClick=this.onDblClick.bind(this),i.addEventListener("dblclick",this.onDblClick),this.setRoot(this.root),this.root.appendChild(i),this.canvasContainer=i;const{tooltip:n,crosshair:o,cropStyle:a,dataSampleMethod:r}=l.config;if(n.enabled&&(this.tooltip=new W(i,{backgroundColor:"var(--accent-color)",fontSize:`${l.config.fontSize}px`,...n.style})),o.enabled){const c={...this.scaleGrid};this.crosshair=new X(i,{edge:c,style:o.style})}this.crop=new I(i,{border:"1px solid var(--accent-color)",...a}),r==="lttb"&&console.warn("lttb sample not implemented."),this.updateDraw()}get $root(){return this.root}get $canvas(){return this.canvas}setData(t){this.data=t,this.shouldUpdate=!0}setControlType(t){this.controlType=t,this.setCursor()}draw(t){throw new Error("Chart.prototype.draw not implemented")}drawSnapshot(t){}drawAnnotations(t){}sample(t,e){let i=0;const n=[...t];switch(e){case"none":case"lttb":default:i=n[Math.floor(n.length/2)];break;case"max":i=A(t);break;case"min":i=$(t);break;case"avg":i=n.reduce((o,a)=>o+a,0)/n.length;break}return i}updateDraw(){this.raf=requestAnimationFrame(this.updateDraw.bind(this));const{context:t,dpr:e,width:i,height:n,drawWidth:o,drawHeight:a,scaleGrid:r,rect:c,xMin:h,xMax:x,yMin:p,yMax:d,xMinScale:u,xMaxScale:f,yMinScale:m,yMaxScale:v,snapshot:w,useSnapshot:b}=this;if(i>0&&n>0&&this.shouldUpdate){t.clearRect(r.left,r.top,o,a);const S=z([h,x],[u,f]);this.drawVerticalGrid(S);const L=z([p,d],[m,v]);this.drawHorizontalGrid(L),t.textRendering="optimizeLegibility",t.textBaseline="middle",t.font=`${l.config.fontSize*e.value}px sans-serif`,b&&w!==null?(t.putImageData(w,0,0),this.useSnapshot=!1):this.draw(t),this.drawSnapshot(t),t.clearRect(0,0,i,r.top),t.clearRect(0,0,r.left,n),t.clearRect(0,c.y,i,r.bottom),t.clearRect(c.x,0,r.right,n),this.drawAxisX(S),this.drawAxisY(L),this.drawAnnotations(t),this.shouldUpdate=!1}}drawVerticalGrid({rules:t}){const{context:e,scaleGrid:i,rect:n,scale:o,xMin:a}=this;e.save(),e.strokeStyle=l.config.gridColor;for(let r=0,c=t.length;r<c;r++){e.beginPath();const h=i.left+(t[r]-a)/o.x;e.moveTo(h,i.top),e.lineTo(h,n.y),r>0&&e.setLineDash([2,2]),e.stroke()}e.restore()}drawAxisX({rules:t,density:e}){for(let i=0,n=t.length;i<n;i++)this.drawScaleX(t[i],e,[0,n-1].includes(i))}drawScaleX(t,e,i=!1){const{context:n,scaleGrid:o,rect:a,xMin:r,scale:c,dpr:h,xUnit:x}=this,p=l.config.axisXScaleOffset,d=o.left+(t-r)/c.x;let u=a.y+p.y;n.lineWidth=h.value,n.strokeStyle=l.config.gridColor,n.beginPath(),n.moveTo(d,a.y),n.lineTo(d,u-p.y*.6),n.stroke();const f=this.getScaleText(t,e,x),{width:m,height:v}=U(n,f);i?(n.fillStyle=l.config.accentColor,u+=v*1.5):(n.fillStyle=l.config.textColor,u+=v/4),n.fillText(f,d-m/2,u)}drawHorizontalGrid({rules:t}){const{context:e,scaleGrid:i,rect:n,scale:o,yMin:a}=this;e.save(),e.strokeStyle=l.config.gridColor;for(let r=0,c=t.length;r<c;r++){e.beginPath();const h=n.y-(t[r]-a)/o.y;e.moveTo(i.left,h),e.lineTo(n.x,h),r>0&&e.setLineDash([2,2]),e.stroke()}e.restore()}drawAxisY({rules:t,density:e}){for(let i of t)this.drawScaleY(i,e)}drawScaleY(t,e){const{context:i,scaleGrid:n,yMin:o,rect:a,scale:r,yUnit:c}=this,h=l.config.axisYScaleOffset,x=n.left,p=a.y-(t-o)/r.y;i.strokeStyle=l.config.gridColor,i.fillStyle=l.config.textColor,i.beginPath(),i.moveTo(x-h.x,p),i.lineTo(x,p),i.stroke();const d=this.getScaleText(t,e,c),{width:u,height:f}=U(i,d);i.fillText(d,x-u-h.x*2,p+f/2)}getScaleText(t,e,i){return t.toFixed(e<0?-e:0)+i}setRoot(t){y(t,{position:"relative",userSelect:"none","--accent-color":l.config.accentColor})}get cursor(){switch(this.controlType){case M.crop:return"crosshair";case M.move:return"move";case M.zoom:return"zoom-in";default:return"default"}}setCursor(t){y(this.canvasContainer,{cursor:t??this.cursor})}initCanvas(t,e){const{cursor:i,dpr:n}=this;return t.setAttribute("style",T({position:"relative",height:"100%",overflow:"hidden",cursor:i,"--scale":1/n.value})),e.setAttribute("style",T({display:"block",width:"100%",height:"100%"})),t.appendChild(e),t}get scaleGrid(){const{left:t,top:e,right:i,bottom:n}=l.config.grid,{value:o}=this.dpr;return{left:t*o,top:e*o,right:i*o,bottom:n*o}}get bounds(){const{xMin:t,xMax:e,yMin:i,yMax:n}=this;return{x:[t,e],y:[i,n]}}get rectBounds(){const{grid:t,rect:e,dpr:i}=this,{left:n,top:o}=t,{x:a,y:r}=e.divide(i.value);return{left:n,top:o,right:a,bottom:r}}get rect(){const{width:t,height:e,scaleGrid:i}=this;return new g(t-i.right,e-i.bottom)}get drawWidth(){const{rect:t,scaleGrid:e}=this;return t.x-e.left}get drawHeight(){const{rect:t,scaleGrid:e}=this;return t.y-e.top}updateCanvas(){const t=this.dpr.value;if(this.width=Math.floor(this.root.clientWidth*t),this.height=Math.floor(this.root.clientHeight*t),this.canvas.width=this.width,this.canvas.height=this.height,l.config.responsiveScale){const{width:e}=U(this.context,"0000000"+this.xUnit);this.xMinScale=Math.max(3,Math.floor(this.drawWidth/e/8)),this.xMaxScale=this.xMinScale*3,this.yMinScale=Math.max(3,Math.floor(this.drawHeight/40/8)),this.yMaxScale=this.yMinScale*3}this.shouldUpdate=!0}onDprChange(t){y(this.canvasContainer,{"--scale":1/t}),this.updateCanvas(),this.context.scale(t,t),this.crosshair?.setEdge(this.scaleGrid)}setUnit(t,e){this.xUnit=t??this.xUnit,this.yUnit=e??this.yUnit,this.shouldUpdate=!0}getOffset(t){return k(t,this.canvasContainer)}onMouseMove(t){const{dpr:e,rectBounds:i,xMin:n,yMin:o,scale:a,dragging:r,tooltip:c,crosshair:h,xUnit:x,yUnit:p}=this,d=this.getOffset(t),{left:u,bottom:f}=i,m=e.value;if(G(d,i)&&!r){const v=n+(d.x-u)*m*a.x,w=o+(f-d.y)*m*a.y,{xLabel:b,yLabel:S}=l.config.tooltip;c?.update({offset:{x:d.x,y:f},content:b?b(v,x):v.toFixed(1)+x},{offset:{x:u,y:d.y},content:S?S(w,p):w.toFixed(1)+p}),h?.update(d)}else h?.hide(),c?.hide()}onMouseLeave(){this.tooltip?.hide(),this.crosshair?.hide()}onWheel(t){if(this.wheelZoom){t.preventDefault();const{xMin:e,xMax:i,yMin:n,yMax:o,grid:a,rectBounds:r,drawWidth:c,drawHeight:h,scale:x}=this,{xLimit:p,yLimit:d}=l.config,[u,f]=p,[m,v]=d,{x:w,y:b}=this.getOffset(t),{right:S,bottom:L}=r,E={x:t.deltaY*x.x/c,y:t.deltaY*x.y/h};this.xMin=Math.max(u,e-E.x*(w-a.left)),this.xMax=Math.min(f,i+E.x*(S-w)),this.yMin=Math.max(m,n-E.y*(L-b)),this.yMax=Math.min(v,o+E.y*(b-a.top)),this.shouldUpdate=!0}}onDblClick(){this.reset()}onResize=()=>{this.resize()};get scale(){const{xMin:t,xMax:e,yMin:i,yMax:n,drawWidth:o,drawHeight:a}=this;return new g((e-t)/o,(n-i)/a)}getRatioOffset(t){const{xMin:e,xMax:i,yMin:n,yMax:o}=this;return{x:e+(i-e)*t,y:n+(o-n)*t}}setMoveBounds({x:t,y:e}){const{xLimit:i,yLimit:n}=l.config,[o,a]=i,[r,c]=n,h=this.xMax-this.xMin,x=this.yMax-this.yMin;let p=this.xMin+t,d=this.xMax+t,u=this.yMin+e,f=this.yMax+e;return p<o&&(p=o,d=p+h),d>a&&(d=a,p=d-h),u<r&&(u=r,f=u+x),f>c&&(f=c,u=f-x),{xMin:p,xMax:d,yMin:u,yMax:f}}onStart(t){if(t.ctrlKey&&(this.prevControlType=this.controlType,this.controlType=M.move),this.setCursor(),this.controlType===M.crop){const e=this.getOffset(t);this.cropOrigin=this.cropOffset=e,this.inCrop=!0}}onUpdate({value:t,delta:e}){const{scale:i,dpr:n,controlType:o,inCrop:a,cropOffset:r}=this,{xMin:c,xMax:h,yMin:x,yMax:p}=this.setMoveBounds(new g(-1,1).multiply(e).multiply(i).multiply(n.value));switch(o){case M.crop:a&&(this.cropOffset=r.add(e),this.updateCrop());break;case M.move:this.xMin=c,this.xMax=h,this.yMin=x,this.yMax=p,this.shouldUpdate=!0;break;case M.zoom:this.xMax=h,this.yMax=p,this.shouldUpdate=!0;break}return t}onEnd(t){switch(this.controlType){case M.crop:if(this.inCrop){const{scale:e,rect:i,scaleGrid:n,xMin:o,yMin:a,dpr:r,cropRange:c}=this,{left:h,top:x,right:p,bottom:d}=c,u=r.value;p-h>1&&d-x>1&&(this.xMin+=(h*u-n.left)*e.x,this.xMax=(p*u-n.left)*e.x+o,this.yMin+=(i.y-d*u)*e.y,this.yMax=(i.y-x*u)*e.y+a),this.crop.hide(),this.cropOrigin=this.cropOffset=g.origin(),this.inCrop=!1,this.shouldUpdate=!0}break;case M.move:break;case M.zoom:break}t.ctrlKey&&(this.controlType=this.prevControlType,this.setCursor())}get cropRange(){const{cropOrigin:t,cropOffset:e,rectBounds:i}=this,[n,o]=D([t.x,e.x]),[a,r]=D([t.y,e.y]);return Q({left:n,top:a,right:o,bottom:r},[i.left,i.right],[i.top,i.bottom])}updateCrop(){const{cropRange:t,width:e,height:i,dpr:n}=this,{left:o,top:a,right:r,bottom:c}=t,h=n.value;o===r||a===c?this.crop.hide():this.crop.update({left:o,top:a,right:e/h-r,bottom:i/h-c})}setCenter(t,e){let{x:i,y:n}=g.origin().sub(this.getRatioOffset(.5));if(arguments.length===1)if(Array.isArray(t)){const[o,a]=t;i+=o,n+=a}else typeof t!="number"&&(i+=t.x,n+=t.y);else arguments.length===2&&typeof t=="number"&&typeof e=="number"&&(i+=t,n+=e);this.xMin+=i,this.xMax+=i,this.yMin+=n,this.yMax+=n,this.shouldUpdate=!0}setBounds(t,e,i,n){this.xMin=t??this.xMin,this.xMax=e??this.xMax,this.yMin=i??this.yMin,this.yMax=n??this.yMax,this.shouldUpdate=!0}resize(){super.resize(),this.updateCanvas()}reset(t){const{xMin:e,xMax:i,yMin:n,yMax:o}=l.config;this.xMin=e,this.xMax=i,this.yMin=n,this.yMax=o,t?.(),this.shouldUpdate=!0}dispose(){super.dispose(),cancelAnimationFrame(this.raf),this.tooltip?.dispose(),this.dpr.dispose(),this.resizeObserver.disconnect(),this.canvasContainer.removeEventListener("mousemove",this.onMouseMove),this.canvasContainer.removeEventListener("mouseleave",this.onMouseLeave),this.canvasContainer.removeEventListener("dblclick",this.onDblClick),this.canvasContainer.removeEventListener("wheel",this.onWheel),this.root.removeChild(this.canvasContainer)}}exports.Chart=l;exports.ControlType=M;exports.Crop=I;exports.Crosshair=X;exports.Dpr=Y;exports.Dragable=O;exports.DragableThumb=j;exports.Field=P;exports.Point=g;exports.Tooltip=W;exports.applyStyle=y;exports.clampInRange=C;exports.createScale=z;exports.createStyle=T;exports.getMax=A;exports.getMin=$;exports.getOffset=k;exports.invertRange=F;exports.isPointInBounds=G;exports.measureText=U;exports.restrictRange=Z;exports.reverseRange=D;exports.scaleBounds=V;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const n=require("./chart-Dr9ZOezr.cjs");class m{r;g;b;constructor(e,t,i){this.r=e,this.g=t,this.b=i}getIntervalValue(e,t,i){return Math.abs((t-e)*i+e)}interval(e,t){const i=Math.max(0,t);return new m(this.getIntervalValue(this.r,e.r,i),this.getIntervalValue(this.g,e.g,i),this.getIntervalValue(this.b,e.b,i))}toHexValue(e){return e.toString(16).padStart(2,"0")}toHex(){return"#"+[this.r,this.g,this.b].map(this.toHexValue).join("")}toString(){return`rgb(${this.r}, ${this.g}, ${this.b})`}}class V{colors;constructor(e){this.colors=e}addColor(e){this.colors.push(e)}toString(){return this.colors.map(e=>e.toHex())}getOffsetColor(e){if(e<1){const t=(this.colors.length-1)*e,i=Math.floor(t);return this.colors[i].interval(this.colors[i+1],t-i)}return this.colors[this.colors.length-1]}}function T(g,e="HH:mm:ss.xxx"){const t=new Map;return t.set("Y",g.getFullYear()).set("M",g.getMonth()+1).set("D",g.getDate()).set("H",g.getHours()).set("m",g.getMinutes()).set("s",g.getSeconds()).set("x",String(g.getMilliseconds()).padStart(3,"0")),e.replace(new RegExp("("+[...t.keys()].join("+|")+"+)","g"),(i,s,r,a)=>String(t.get(a[r])).padStart(i.length,"0"))}class B extends n.DragableThumb{constructor(e,t){super(e,t)}onUpdate(e){return n.clampInRange(e.value+this.option.onUpdate(e),[0,1])}}class $ extends n.DragableThumb{constructor(e,t){super(e,t)}onUpdate(e){return n.restrictRange(e.value,this.option.onUpdate(e))}}const A={initValue:[0,1]};class k extends n.Field{root;container;thumbSize=10;startThumb;endThumb;range;resizeObserver;width;height;brushLabel;labelInput;constructor(e,t){const{initValue:i,labelInput:s,style:r}={...A,...t};super(i),this.root=e,this.container=this.createContainer(r),this.root.appendChild(this.container),this.brushLabel=s,this.brushLabel&&this.initBrushLabelInput(),this.resizeObserver=new ResizeObserver(this.onResize),this.resizeObserver.observe(this.container),this.width=this.container.clientWidth,this.height=this.container.clientHeight,this.onStartValueChange=this.onStartValueChange.bind(this),this.onEndValueChange=this.onEndValueChange.bind(this),this.onRangeValueChange=this.onRangeValueChange.bind(this);const[a,o]=i;this.startThumb=this.createThumb(a,this.onStartValueChange),this.endThumb=this.createThumb(o,this.onEndValueChange),this.range=this.createRange(i,this.onRangeValueChange)}get value(){return n.reverseRange(this._value)}set value([e,t]){this._value=[e,t],this.range.value=[e,t],this.startThumb.value=e,this.endThumb.value=t,this.updateBrushLabelInput()}getFormatLabel(e){const{from:t}=this.brushLabel;return t(e)}updateBrushLabelInput(){if(this.labelInput){const[e,t]=n.reverseRange(this._value),{start:i,end:s}=this.labelInput;i.value=String(this.getFormatLabel(e)),s.value=String(this.getFormatLabel(t))}}initBrushLabelInput(){const e={position:"absolute",height:"20px",fontSize:"12px",boxSizing:"border-box",top:"0"},t=this.createLabelInput({...e,width:"55px",left:"-60px"});t.onchange=this.onStartLabelInputChange.bind(this);const i=this.createLabelInput({...e,width:"60px",right:"-65px"});i.onchange=this.onEndLabelInputChange.bind(this),this.labelInput={start:t,end:i},this.updateBrushLabelInput()}createLabelInput(e){const t=document.createElement("input");return t.setAttribute("style",n.createStyle(e)),t.setAttribute("type","number"),this.container.appendChild(t),t}createThumb(e,t){const i=this.getStyle.bind(this),s=this.onUpdate.bind(this),r=new B(this.container,{initValue:e,getStyle:i,onUpdate:s});return r.addEventListener(t),r}emitChangeEvent(){for(const e of this.listeners)e(this.value)}getRangeStyle({value:[e,t]}){const{trackWidth:i,thumbSize:s}=this,r=s/2;return n.createStyle({position:"absolute",left:i*e+r+"px",top:"0",backgroundColor:"hsla(240deg 100% 50% / 40%)",cursor:"move",right:i*(1-t)+r+"px",bottom:"0",zIndex:"1"})}createRange(e,t){const i=this.getRangeStyle.bind(this),s=new $(this.container,{initValue:e,getStyle:i,onUpdate:({value:[r,a],...o})=>[this.onUpdate({value:r,...o}),this.onUpdate({value:a,...o})]});return s.addEventListener(t),s}updateRangeValue(){this.range.value=this.value,this.emitChangeEvent()}onStartValueChange(e){const[,t]=this._value;this._value=[e,t],this.updateRangeValue(),this.updateBrushLabelInput()}onStartLabelInputChange(e){const t=e.target,i=+t.value,[s,r]=this._value,a=this.brushLabel.to(i);if(a<r){const o=Math.max(0,a);this._value=[o,r],this.startThumb.value=o,this.updateRangeValue(),a<0&&(t.value="0")}}onEndValueChange(e){const[t]=this._value;this._value=[t,e],this.updateRangeValue(),this.updateBrushLabelInput()}onEndLabelInputChange(e){const t=e.target,i=+t.value,[s]=this._value,r=this.brushLabel.to(i);if(r>s){const a=Math.min(1,r);this._value=[s,a],this.endThumb.value=a,this.updateRangeValue(),r>1&&(t.value=String(this.brushLabel.from(1)))}}onRangeValueChange([e,t]){this._value=[e,t],this.startThumb.value=e,this.endThumb.value=t,this.emitChangeEvent(),this.updateBrushLabelInput()}get trackWidth(){return this.width-this.thumbSize}onResize=()=>{this.width=this.container.clientWidth,this.height=this.container.clientHeight,this.startThumb.resize(),this.endThumb.resize(),this.range.resize()};onUpdate({delta:e}){return e.x/this.trackWidth}getStyle({value:e}){const{thumbSize:t,trackWidth:i}=this;return n.createStyle({position:"absolute",backgroundColor:"hsl(240deg 100% 50%)",width:`${t}px`,userSelect:"none",cursor:"ew-resize",left:`${i*e}px`,top:"0",bottom:"0",zIndex:"2"})}createContainer(e){const t=document.createElement("div");return t.setAttribute("style",n.createStyle({position:"relative",height:"20px",backgroundColor:"#ddd",...e})),t}setStyle(e){n.applyStyle(this.container,e)}dispose(){this.startThumb.dispose(),this.endThumb.dispose(),this.resizeObserver.disconnect(),this.root.removeChild(this.container)}}class U extends k{_root;_container;colors;thumbSize=4;constructor(e,{initValue:t=[0,1],colors:i,style:s}){const r=document.createElement("div");super(r,{initValue:t,style:{flexGrow:"1",height:"100%",backgroundColor:"#ccc"}}),this.height=180,this.colors=i,this._root=e,this._container=this.setContainer(r,s),this.createScale()}get trackHeight(){return this.height-this.thumbSize}setContainer(e,t){const i=this.height;return e.setAttribute("style",n.createStyle({display:"flex",width:"60px",height:`${i}px`,fontSize:"10px",userSelect:"none",...t})),this._root.appendChild(e),e}createScale(){const e=document.createElement("div");e.setAttribute("style",n.createStyle({position:"relative",minWidth:"40px"}));let t=255;for(;t>=0;){const i=document.createElement("span");i.innerText=String(t),i.setAttribute("style",n.createStyle({position:"absolute",paddingLeft:"5px",left:"0",top:(1-t/255)*100+"%",fontSize:"inherit"})),e.appendChild(i),t-=51}return this._container.appendChild(e),e}onUpdate({delta:e}){return e.y/this.trackHeight}getStyle({value:e}){const{thumbSize:t,trackHeight:i}=this;return n.createStyle({position:"absolute",width:"100%",height:`${t}px`,backgroundColor:"#222",userSelect:"none",cursor:"ns-resize",left:"0",top:`${i*e}px`,right:"0",zIndex:"2"})}getRangeStyle({value:e}){const[t,i]=e,{trackHeight:s,height:r,colors:a}=this,o=s*t,l=s*(1-i);let u={position:"absolute",left:"0",top:o+"px",userSelect:"none",cursor:"move",right:"0",bottom:l+"px",zIndex:"1"};if(a){const d=a.join(", ");u={...u,backgroundImage:`linear-gradient(0, ${d})`,backgroundSize:`100% ${r}px`,backgroundPosition:`0 -${o}px`}}return n.createStyle(u)}dispose(){super.dispose(),this._root.removeChild(this._container)}}class h extends n.Dragable{constructor(e){const t=document.createElement("div"),i=h.defaultRange;super(t,i),Object.defineProperty(this,"root",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"resizeObserver",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dpr",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvasContainer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvas",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"width",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"height",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"context",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dataCache",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"dataLength",{enumerable:!0,configurable:!0,writable:!0,value:1e4}),Object.defineProperty(this,"precision",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"cropMode",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"cropOrigin",{enumerable:!0,configurable:!0,writable:!0,value:n.Point.origin()}),Object.defineProperty(this,"cropOffset",{enumerable:!0,configurable:!0,writable:!0,value:n.Point.origin()}),Object.defineProperty(this,"gradient",{enumerable:!0,configurable:!0,writable:!0,value:new V([new m(0,0,255),new m(0,255,0),new m(255,255,0),new m(255,128,0),new m(255,0,0)])}),Object.defineProperty(this,"brush",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"legend",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tooltip",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"crop",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"crosshair",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"grid",{enumerable:!0,configurable:!0,writable:!0,value:{...h.config.grid}}),Object.defineProperty(this,"range",{enumerable:!0,configurable:!0,writable:!0,value:h.defaultRange}),Object.defineProperty(this,"dataRange",{enumerable:!0,configurable:!0,writable:!0,value:h.defaultDataRange}),Object.defineProperty(this,"raf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onResize",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.resize()}}),this.root=e,this.resizeObserver=new ResizeObserver(this.onResize),this.resizeObserver.observe(e),this.onDprChange=this.onDprChange.bind(this),this.dpr=new n.Dpr(this.onDprChange),this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d");const s=this.dpr.value;this.context.scale(s,s),this.canvasContainer=this.initCanvas(t,this.canvas),this.onMouseMove=this.onMouseMove.bind(this),this.canvasContainer.addEventListener("mousemove",this.onMouseMove),this.onMouseLeave=this.onMouseLeave.bind(this),this.canvasContainer.addEventListener("mouseleave",this.onMouseLeave),this.onDblClick=this.onDblClick.bind(this),this.canvasContainer.addEventListener("dblclick",this.onDblClick),this.root.appendChild(this.canvasContainer),this.updateCanvas();const r=this.grid;h.config.legend||(r.right=70),this.updateGrid();const a={...this.grid},o=this.brushLabelFrom.bind(this),l=this.brushLabelTo.bind(this);this.brush=new k(e,{initValue:i,labelInput:{from:o,to:l},style:{margin:`0 ${r.right}px 0 ${r.left}px`}}),this.onBrushValueChange=this.onBrushValueChange.bind(this),this.brush.addEventListener(this.onBrushValueChange),h.config.legend&&(this.legend=new U(this.canvasContainer,{colors:this.gradient.toString(),initValue:this.dataRange,style:{position:"absolute",top:`${r.top}px`,right:"0"}}),this.onLegendValueChange=this.onLegendValueChange.bind(this),this.legend.addEventListener(this.onLegendValueChange)),this.tooltip=new n.Tooltip(this.canvasContainer,{fontSize:`${h.config.fontSize}px`,backgroundColor:h.config.accentColor,...h.config.tooltipStyle}),this.crosshair=new n.Crosshair(this.canvasContainer,{edge:a,style:{color:"#eee"}}),this.crop=new n.Crop(this.canvasContainer,{backgroundColor:"#0006",...h.config.cropStyle}),this.updateDraw()}get $root(){return this.root}get $canvas(){return this.canvas}updateGrid(){const{left:e,top:t,right:i,bottom:s}=h.config.grid,r=this.dpr.value;this.grid={left:e*r,top:t*r,right:i*r,bottom:s*r}}get maxCacheSize(){return Math.min(this.height,h.config.maxCacheSize)}get drawRatio(){return this.drawHeight/this.maxCacheSize}brushLabelFrom(e){return Math.round(e*this.precision*this.dataLength)}brushLabelTo(e){return e/this.precision/this.dataLength}reset(){this.brush.value=h.defaultRange,this.range=h.defaultRange}setCursor(e){n.applyStyle(this.canvasContainer,{cursor:e})}getOffset(e){return n.getOffset(e,this.canvasContainer)}onStart(e){if(this.cropMode=!e.ctrlKey,this.cropMode){const t=this.getOffset(e);this.cropOrigin=this.cropOffset=t}else this.setCursor("move")}onUpdate({value:e,delta:t}){if(this.cropMode)this.cropOffset=this.cropOffset.add(t),this.updateCrop();else{const[i,s]=this.range;if(this.dataLength>0&&s-i<1){const r=-t.x*this.scale/this.dataLength,a=n.restrictRange([i,s],[r,r]);this.isEqual([i,s],a)||(this.brush.value=a,this.range=a)}}return e}get scale(){const[e,t]=this.pointRange;return(t-e)/this.drawWidth}get cropRange(){const{cropOrigin:e,cropOffset:t,rect:i,grid:s,dpr:r}=this,[a,o]=n.reverseRange([e.x,Math.abs(t.x)]),l=r.value;return[Math.max(a,s.left/l),Math.min(o,i.x/l)]}updateCrop(){const{cropRange:e,width:t,grid:i,dpr:s}=this,[r,a]=e,o=s.value;this.crop.update({left:r,top:i.top/o,right:t/o-a,bottom:i.bottom/o})}onEnd(){if(this.cropMode){const[e,t]=this.cropRange;if(t-e>=10){const[i]=this.pointRange,{left:s}=this.grid,r=[e-s,t-s].map(a=>(a*this.scale+i)/this.dataLength);this.brush.value=r,this.range=r}this.crop.hide(),this.cropMode=!1}this.setCursor("crosshair")}get rect(){const{width:e,height:t,grid:i}=this;return new n.Point(e-i.right,t-i.bottom)}get drawWidth(){const{rect:e,grid:t}=this;return e.x-t.left}get drawHeight(){const{rect:e,grid:t}=this;return e.y-t.top}get pointRange(){return this.range.map(e=>e*this.dataLength)}onBrushValueChange(e){this.range=e}onLegendValueChange(e){this.dataRange=n.invertRange(e)}setDataLength(e){this.dataLength=e/this.precision}setPrecision(e){this.precision!==e&&(this.precision=e,this.brush.updateBrushLabelInput())}setData(e){const t=this.dataCache.length;if(t===this.maxCacheSize&&this.dataCache.pop(),e.length>this.dataLength){if(t>0){const[i,s]=this.pointRange,r=[Math.max(0,i/e.length),Math.min(1,s/e.length)];this.range=r,this.brush.value=r}this.dataLength=e.length,this.brush.updateBrushLabelInput()}this.dataCache.unshift([new Date,e])}setDataFilter([e,t]){const i=[1-t/255,1-e/255];this.dataRange=n.invertRange(i),this.legend&&(this.legend.value=i)}async updateDraw(){this.raf=requestAnimationFrame(this.updateDraw.bind(this));const{context:e,dataCache:t,gradient:i,grid:s,width:r,height:a,pointRange:o,scale:l,dpr:u,dataRange:d,drawWidth:b,drawHeight:f,maxCacheSize:c}=this;if(!document.hidden&&r>0&&a>0){e.clearRect(0,0,r,a);const C=Math.floor(b),x=e.createImageData(C,c),v=x.data,[L,w]=d.map(p=>p*255),[y]=o;for(let p=0;p<v.length;p+=4){const E=p/4%C,z=Math.floor(p/4/C);let P=0,j=0,I=255,M=255;if(z<t.length){const[,D]=t[z];let S=D.at(Math.floor(E*l)+y);(!S||S<L||S>w)&&(S=0);const R=i.getOffsetColor(S/255);P=R.r,j=R.g,I=R.b}v[p]=P,v[p+1]=j,v[p+2]=I,v[p+3]=M}const O=await createImageBitmap(x);e.drawImage(O,s.left,s.top,b,f),O.close(),e.font=`${h.config.fontSize*u.value}px sans-serif`,this.drawAxisX(e),this.drawAxisY(e)}}drawAxisX(e){const{axisYScaleOffset:t,xMinScale:i,xMaxScale:s,config:r}=h,{grid:a,rect:o,pointRange:l,precision:u}=this,[d,b]=l.map(c=>c*u);e.beginPath(),e.moveTo(a.left-t.x,o.y),e.lineTo(o.x,o.y),e.strokeStyle=r.gridColor,e.stroke();const{rules:f}=n.createScale([d,b],[i,s]);for(let c of f)this.drawScaleX(e,c,[d,b])}drawScaleX(e,t,[i,s]){const{grid:r,drawWidth:a,rect:o}=this,l=h.axisXScaleOffset,u=r.left+(t-i)*a/(s-i)+l.x,d=o.y+l.y;e.beginPath(),e.moveTo(u,r.top),e.lineTo(u,d-l.y/2),e.strokeStyle=h.config.gridColor,e.stroke();const b=Math.round(t)+h.config.xUnit,{width:f,height:c}=n.measureText(e,b);e.fillStyle=h.config.textColor,e.fillText(b,u-f/2,d+c/2)}drawAxisY(e){const{dataCache:t,drawRatio:i,drawHeight:s,grid:r}=this;if(t.length>0){const a=s/8;for(let o=0;o<=s;o+=a){const l=Math.ceil(o/i);if(l<=t.length){let u=Math.min(Math.floor(l),t.length-1);const[d]=t[u];this.drawScaleY(e,T(d),new n.Point(r.left,r.top+o),o===0)}}}}drawScaleY(e,t,{x:i,y:s},r=!1){const a=h.axisYScaleOffset,{height:o}=n.measureText(e,t);e.beginPath(),e.moveTo(i-a.x,s),e.lineTo(r?i+this.drawWidth:i,s),e.strokeStyle=h.config.gridColor,e.stroke(),e.fillStyle=h.config.textColor,e.fillText(t,a.x,s+o/2+a.y)}onMouseMove(e){const{grid:t,rect:i,scale:s,dpr:r,drawRatio:a,pointRange:o,dataCache:l,precision:u,dragging:d,tooltip:b,crosshair:f}=this,c=this.getOffset(e),C=n.scaleBounds({...t,right:i.x,bottom:i.y},1/r.value);if(n.isPointInBounds(c,C)&&!d){const[x]=o,v={x:x+(c.x*r.value-t.left)*s,y:c.y-t.top},L=Math.round(v.x*u)+"m";let w=null;const y=Math.floor(v.y*r.value/a);if(y>=0&&y<l.length){const[O]=l[y];w=T(O)}b.update({offset:new n.Point(c.x,i.y*r.value),content:L},w?{offset:new n.Point(C.left,c.y),content:w}:null),f.update(c)}else f.hide(),b.hide()}onMouseLeave(){this.tooltip.hide(),this.crosshair.hide()}onDblClick(){this.reset()}onDprChange(e){this.updateCanvas(),this.context.scale(e,e),this.updateGrid(),this.crosshair.setEdge(this.grid)}initCanvas(e,t){return t.setAttribute("style",n.createStyle({display:"block",width:"100%",height:"100%"})),e.appendChild(t),e}updateCanvas(){const e=this.dpr.value;this.width=this.root.clientWidth*e;const t=this.root.clientHeight-h.brushHeight;this.height=t*e,this.canvas.width=this.width,this.canvas.height=this.height,this.canvasContainer.setAttribute("style",n.createStyle({position:"relative",height:`${t}px`,cursor:"crosshair",overflow:"hidden","--scale":1/e}))}resize(){super.resize(),this.updateCanvas()}dispose(){super.dispose(),cancelAnimationFrame(this.raf),this.brush.dispose(),this.legend?.dispose(),this.tooltip.dispose(),this.crop.dispose(),this.dpr.dispose(),this.resizeObserver.disconnect(),this.canvasContainer.removeEventListener("mousemove",this.onMouseMove),this.canvasContainer.removeEventListener("mouseleave",this.onMouseLeave),this.canvasContainer.removeEventListener("dblclick",this.onDblClick),this.root.removeChild(this.canvasContainer)}}Object.defineProperty(h,"version",{enumerable:!0,configurable:!0,writable:!0,value:"0.0.7"});Object.defineProperty(h,"config",{enumerable:!0,configurable:!0,writable:!0,value:{xUnit:"m",gridColor:"#aaa",textColor:"#222",accentColor:"#000",fontSize:13,cropStyle:{},tooltipStyle:{color:"#fff"},maxCacheSize:400,legend:!0,grid:{left:90,top:10,right:80,bottom:30}}});Object.defineProperty(h,"defaultRange",{enumerable:!0,configurable:!0,writable:!0,value:[0,1]});Object.defineProperty(h,"defaultDataRange",{enumerable:!0,configurable:!0,writable:!0,value:[0,1]});Object.defineProperty(h,"xMinScale",{enumerable:!0,configurable:!0,writable:!0,value:3});Object.defineProperty(h,"xMaxScale",{enumerable:!0,configurable:!0,writable:!0,value:12});Object.defineProperty(h,"axisXScaleOffset",{enumerable:!0,configurable:!0,writable:!0,value:new n.Point(0,15)});Object.defineProperty(h,"axisYScaleOffset",{enumerable:!0,configurable:!0,writable:!0,value:new n.Point(5,0)});Object.defineProperty(h,"brushHeight",{enumerable:!0,configurable:!0,writable:!0,value:30});exports.Gradient=V;exports.HeatMap=h;exports.RgbColor=m;
|
|
1
|
+
"use strict";const n=require("./chart-DGmZBxvs.cjs");class m{r;g;b;constructor(e,t,i){this.r=e,this.g=t,this.b=i}getIntervalValue(e,t,i){return Math.abs((t-e)*i+e)}interval(e,t){const i=Math.max(0,t);return new m(this.getIntervalValue(this.r,e.r,i),this.getIntervalValue(this.g,e.g,i),this.getIntervalValue(this.b,e.b,i))}toHexValue(e){return e.toString(16).padStart(2,"0")}toHex(){return"#"+[this.r,this.g,this.b].map(this.toHexValue).join("")}toString(){return`rgb(${this.r}, ${this.g}, ${this.b})`}}class V{colors;constructor(e){this.colors=e}addColor(e){this.colors.push(e)}toString(){return this.colors.map(e=>e.toHex())}getOffsetColor(e){if(e<1){const t=(this.colors.length-1)*e,i=Math.floor(t);return this.colors[i].interval(this.colors[i+1],t-i)}return this.colors[this.colors.length-1]}}function T(g,e="HH:mm:ss.xxx"){const t=new Map;return t.set("Y",g.getFullYear()).set("M",g.getMonth()+1).set("D",g.getDate()).set("H",g.getHours()).set("m",g.getMinutes()).set("s",g.getSeconds()).set("x",String(g.getMilliseconds()).padStart(3,"0")),e.replace(new RegExp("("+[...t.keys()].join("+|")+"+)","g"),(i,s,r,a)=>String(t.get(a[r])).padStart(i.length,"0"))}class B extends n.DragableThumb{constructor(e,t){super(e,t)}onUpdate(e){return n.clampInRange(e.value+this.option.onUpdate(e),[0,1])}}class $ extends n.DragableThumb{constructor(e,t){super(e,t)}onUpdate(e){return n.restrictRange(e.value,this.option.onUpdate(e))}}const A={initValue:[0,1]};class k extends n.Field{root;container;thumbSize=10;startThumb;endThumb;range;resizeObserver;width;height;brushLabel;labelInput;constructor(e,t){const{initValue:i,labelInput:s,style:r}={...A,...t};super(i),this.root=e,this.container=this.createContainer(r),this.root.appendChild(this.container),this.brushLabel=s,this.brushLabel&&this.initBrushLabelInput(),this.resizeObserver=new ResizeObserver(this.onResize),this.resizeObserver.observe(this.container),this.width=this.container.clientWidth,this.height=this.container.clientHeight,this.onStartValueChange=this.onStartValueChange.bind(this),this.onEndValueChange=this.onEndValueChange.bind(this),this.onRangeValueChange=this.onRangeValueChange.bind(this);const[a,o]=i;this.startThumb=this.createThumb(a,this.onStartValueChange),this.endThumb=this.createThumb(o,this.onEndValueChange),this.range=this.createRange(i,this.onRangeValueChange)}get value(){return n.reverseRange(this._value)}set value([e,t]){this._value=[e,t],this.range.value=[e,t],this.startThumb.value=e,this.endThumb.value=t,this.updateBrushLabelInput()}getFormatLabel(e){const{from:t}=this.brushLabel;return t(e)}updateBrushLabelInput(){if(this.labelInput){const[e,t]=n.reverseRange(this._value),{start:i,end:s}=this.labelInput;i.value=String(this.getFormatLabel(e)),s.value=String(this.getFormatLabel(t))}}initBrushLabelInput(){const e={position:"absolute",height:"20px",fontSize:"12px",boxSizing:"border-box",top:"0"},t=this.createLabelInput({...e,width:"55px",left:"-60px"});t.onchange=this.onStartLabelInputChange.bind(this);const i=this.createLabelInput({...e,width:"60px",right:"-65px"});i.onchange=this.onEndLabelInputChange.bind(this),this.labelInput={start:t,end:i},this.updateBrushLabelInput()}createLabelInput(e){const t=document.createElement("input");return t.setAttribute("style",n.createStyle(e)),t.setAttribute("type","number"),this.container.appendChild(t),t}createThumb(e,t){const i=this.getStyle.bind(this),s=this.onUpdate.bind(this),r=new B(this.container,{initValue:e,getStyle:i,onUpdate:s});return r.addEventListener(t),r}emitChangeEvent(){for(const e of this.listeners)e(this.value)}getRangeStyle({value:[e,t]}){const{trackWidth:i,thumbSize:s}=this,r=s/2;return n.createStyle({position:"absolute",left:i*e+r+"px",top:"0",backgroundColor:"hsla(240deg 100% 50% / 40%)",cursor:"move",right:i*(1-t)+r+"px",bottom:"0",zIndex:"1"})}createRange(e,t){const i=this.getRangeStyle.bind(this),s=new $(this.container,{initValue:e,getStyle:i,onUpdate:({value:[r,a],...o})=>[this.onUpdate({value:r,...o}),this.onUpdate({value:a,...o})]});return s.addEventListener(t),s}updateRangeValue(){this.range.value=this.value,this.emitChangeEvent()}onStartValueChange(e){const[,t]=this._value;this._value=[e,t],this.updateRangeValue(),this.updateBrushLabelInput()}onStartLabelInputChange(e){const t=e.target,i=+t.value,[s,r]=this._value,a=this.brushLabel.to(i);if(a<r){const o=Math.max(0,a);this._value=[o,r],this.startThumb.value=o,this.updateRangeValue(),a<0&&(t.value="0")}}onEndValueChange(e){const[t]=this._value;this._value=[t,e],this.updateRangeValue(),this.updateBrushLabelInput()}onEndLabelInputChange(e){const t=e.target,i=+t.value,[s]=this._value,r=this.brushLabel.to(i);if(r>s){const a=Math.min(1,r);this._value=[s,a],this.endThumb.value=a,this.updateRangeValue(),r>1&&(t.value=String(this.brushLabel.from(1)))}}onRangeValueChange([e,t]){this._value=[e,t],this.startThumb.value=e,this.endThumb.value=t,this.emitChangeEvent(),this.updateBrushLabelInput()}get trackWidth(){return this.width-this.thumbSize}onResize=()=>{this.width=this.container.clientWidth,this.height=this.container.clientHeight,this.startThumb.resize(),this.endThumb.resize(),this.range.resize()};onUpdate({delta:e}){return e.x/this.trackWidth}getStyle({value:e}){const{thumbSize:t,trackWidth:i}=this;return n.createStyle({position:"absolute",backgroundColor:"hsl(240deg 100% 50%)",width:`${t}px`,userSelect:"none",cursor:"ew-resize",left:`${i*e}px`,top:"0",bottom:"0",zIndex:"2"})}createContainer(e){const t=document.createElement("div");return t.setAttribute("style",n.createStyle({position:"relative",height:"20px",backgroundColor:"#ddd",...e})),t}setStyle(e){n.applyStyle(this.container,e)}dispose(){this.startThumb.dispose(),this.endThumb.dispose(),this.resizeObserver.disconnect(),this.root.removeChild(this.container)}}class U extends k{_root;_container;colors;thumbSize=4;constructor(e,{initValue:t=[0,1],colors:i,style:s}){const r=document.createElement("div");super(r,{initValue:t,style:{flexGrow:"1",height:"100%",backgroundColor:"#ccc"}}),this.height=180,this.colors=i,this._root=e,this._container=this.setContainer(r,s),this.createScale()}get trackHeight(){return this.height-this.thumbSize}setContainer(e,t){const i=this.height;return e.setAttribute("style",n.createStyle({display:"flex",width:"60px",height:`${i}px`,fontSize:"10px",userSelect:"none",...t})),this._root.appendChild(e),e}createScale(){const e=document.createElement("div");e.setAttribute("style",n.createStyle({position:"relative",minWidth:"40px"}));let t=255;for(;t>=0;){const i=document.createElement("span");i.innerText=String(t),i.setAttribute("style",n.createStyle({position:"absolute",paddingLeft:"5px",left:"0",top:(1-t/255)*100+"%",fontSize:"inherit"})),e.appendChild(i),t-=51}return this._container.appendChild(e),e}onUpdate({delta:e}){return e.y/this.trackHeight}getStyle({value:e}){const{thumbSize:t,trackHeight:i}=this;return n.createStyle({position:"absolute",width:"100%",height:`${t}px`,backgroundColor:"#222",userSelect:"none",cursor:"ns-resize",left:"0",top:`${i*e}px`,right:"0",zIndex:"2"})}getRangeStyle({value:e}){const[t,i]=e,{trackHeight:s,height:r,colors:a}=this,o=s*t,l=s*(1-i);let u={position:"absolute",left:"0",top:o+"px",userSelect:"none",cursor:"move",right:"0",bottom:l+"px",zIndex:"1"};if(a){const d=a.join(", ");u={...u,backgroundImage:`linear-gradient(0, ${d})`,backgroundSize:`100% ${r}px`,backgroundPosition:`0 -${o}px`}}return n.createStyle(u)}dispose(){super.dispose(),this._root.removeChild(this._container)}}class h extends n.Dragable{constructor(e){const t=document.createElement("div"),i=h.defaultRange;super(t,i),Object.defineProperty(this,"root",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"resizeObserver",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dpr",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvasContainer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"canvas",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"width",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"height",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"context",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dataCache",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"dataLength",{enumerable:!0,configurable:!0,writable:!0,value:1e4}),Object.defineProperty(this,"precision",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"cropMode",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"cropOrigin",{enumerable:!0,configurable:!0,writable:!0,value:n.Point.origin()}),Object.defineProperty(this,"cropOffset",{enumerable:!0,configurable:!0,writable:!0,value:n.Point.origin()}),Object.defineProperty(this,"gradient",{enumerable:!0,configurable:!0,writable:!0,value:new V([new m(0,0,255),new m(0,255,0),new m(255,255,0),new m(255,128,0),new m(255,0,0)])}),Object.defineProperty(this,"brush",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"legend",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tooltip",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"crop",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"crosshair",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"grid",{enumerable:!0,configurable:!0,writable:!0,value:{...h.config.grid}}),Object.defineProperty(this,"range",{enumerable:!0,configurable:!0,writable:!0,value:h.defaultRange}),Object.defineProperty(this,"dataRange",{enumerable:!0,configurable:!0,writable:!0,value:h.defaultDataRange}),Object.defineProperty(this,"raf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onResize",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.resize()}}),this.root=e,this.resizeObserver=new ResizeObserver(this.onResize),this.resizeObserver.observe(e),this.onDprChange=this.onDprChange.bind(this),this.dpr=new n.Dpr(this.onDprChange),this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d");const s=this.dpr.value;this.context.scale(s,s),this.canvasContainer=this.initCanvas(t,this.canvas),this.onMouseMove=this.onMouseMove.bind(this),this.canvasContainer.addEventListener("mousemove",this.onMouseMove),this.onMouseLeave=this.onMouseLeave.bind(this),this.canvasContainer.addEventListener("mouseleave",this.onMouseLeave),this.onDblClick=this.onDblClick.bind(this),this.canvasContainer.addEventListener("dblclick",this.onDblClick),this.root.appendChild(this.canvasContainer),this.updateCanvas();const r=this.grid;h.config.legend||(r.right=70),this.updateGrid();const a={...this.grid},o=this.brushLabelFrom.bind(this),l=this.brushLabelTo.bind(this);this.brush=new k(e,{initValue:i,labelInput:{from:o,to:l},style:{margin:`0 ${r.right}px 0 ${r.left}px`}}),this.onBrushValueChange=this.onBrushValueChange.bind(this),this.brush.addEventListener(this.onBrushValueChange),h.config.legend&&(this.legend=new U(this.canvasContainer,{colors:this.gradient.toString(),initValue:this.dataRange,style:{position:"absolute",top:`${r.top}px`,right:"0"}}),this.onLegendValueChange=this.onLegendValueChange.bind(this),this.legend.addEventListener(this.onLegendValueChange)),this.tooltip=new n.Tooltip(this.canvasContainer,{fontSize:`${h.config.fontSize}px`,backgroundColor:h.config.accentColor,...h.config.tooltipStyle}),this.crosshair=new n.Crosshair(this.canvasContainer,{edge:a,style:{color:"#eee"}}),this.crop=new n.Crop(this.canvasContainer,{backgroundColor:"#0006",...h.config.cropStyle}),this.updateDraw()}get $root(){return this.root}get $canvas(){return this.canvas}updateGrid(){const{left:e,top:t,right:i,bottom:s}=h.config.grid,r=this.dpr.value;this.grid={left:e*r,top:t*r,right:i*r,bottom:s*r}}get maxCacheSize(){return Math.min(this.height,h.config.maxCacheSize)}get drawRatio(){return this.drawHeight/this.maxCacheSize}brushLabelFrom(e){return Math.round(e*this.precision*this.dataLength)}brushLabelTo(e){return e/this.precision/this.dataLength}reset(){this.brush.value=h.defaultRange,this.range=h.defaultRange}setCursor(e){n.applyStyle(this.canvasContainer,{cursor:e})}getOffset(e){return n.getOffset(e,this.canvasContainer)}onStart(e){if(this.cropMode=!e.ctrlKey,this.cropMode){const t=this.getOffset(e);this.cropOrigin=this.cropOffset=t}else this.setCursor("move")}onUpdate({value:e,delta:t}){if(this.cropMode)this.cropOffset=this.cropOffset.add(t),this.updateCrop();else{const[i,s]=this.range;if(this.dataLength>0&&s-i<1){const r=-t.x*this.scale/this.dataLength,a=n.restrictRange([i,s],[r,r]);this.isEqual([i,s],a)||(this.brush.value=a,this.range=a)}}return e}get scale(){const[e,t]=this.pointRange;return(t-e)/this.drawWidth}get cropRange(){const{cropOrigin:e,cropOffset:t,rect:i,grid:s,dpr:r}=this,[a,o]=n.reverseRange([e.x,Math.abs(t.x)]),l=r.value;return[Math.max(a,s.left/l),Math.min(o,i.x/l)]}updateCrop(){const{cropRange:e,width:t,grid:i,dpr:s}=this,[r,a]=e,o=s.value;this.crop.update({left:r,top:i.top/o,right:t/o-a,bottom:i.bottom/o})}onEnd(){if(this.cropMode){const[e,t]=this.cropRange;if(t-e>=10){const[i]=this.pointRange,{left:s}=this.grid,r=[e-s,t-s].map(a=>(a*this.scale+i)/this.dataLength);this.brush.value=r,this.range=r}this.crop.hide(),this.cropMode=!1}this.setCursor("crosshair")}get rect(){const{width:e,height:t,grid:i}=this;return new n.Point(e-i.right,t-i.bottom)}get drawWidth(){const{rect:e,grid:t}=this;return e.x-t.left}get drawHeight(){const{rect:e,grid:t}=this;return e.y-t.top}get pointRange(){return this.range.map(e=>e*this.dataLength)}onBrushValueChange(e){this.range=e}onLegendValueChange(e){this.dataRange=n.invertRange(e)}setDataLength(e){this.dataLength=e/this.precision}setPrecision(e){this.precision!==e&&(this.precision=e,this.brush.updateBrushLabelInput())}setData(e){const t=this.dataCache.length;if(t===this.maxCacheSize&&this.dataCache.pop(),e.length>this.dataLength){if(t>0){const[i,s]=this.pointRange,r=[Math.max(0,i/e.length),Math.min(1,s/e.length)];this.range=r,this.brush.value=r}this.dataLength=e.length,this.brush.updateBrushLabelInput()}this.dataCache.unshift([new Date,e])}setDataFilter([e,t]){const i=[1-t/255,1-e/255];this.dataRange=n.invertRange(i),this.legend&&(this.legend.value=i)}async updateDraw(){this.raf=requestAnimationFrame(this.updateDraw.bind(this));const{context:e,dataCache:t,gradient:i,grid:s,width:r,height:a,pointRange:o,scale:l,dpr:u,dataRange:d,drawWidth:b,drawHeight:f,maxCacheSize:c}=this;if(!document.hidden&&r>0&&a>0){e.clearRect(0,0,r,a);const C=Math.floor(b),x=e.createImageData(C,c),v=x.data,[L,w]=d.map(p=>p*255),[y]=o;for(let p=0;p<v.length;p+=4){const E=p/4%C,z=Math.floor(p/4/C);let P=0,j=0,I=255,M=255;if(z<t.length){const[,D]=t[z];let S=D.at(Math.floor(E*l)+y);(!S||S<L||S>w)&&(S=0);const R=i.getOffsetColor(S/255);P=R.r,j=R.g,I=R.b}v[p]=P,v[p+1]=j,v[p+2]=I,v[p+3]=M}const O=await createImageBitmap(x);e.drawImage(O,s.left,s.top,b,f),O.close(),e.font=`${h.config.fontSize*u.value}px sans-serif`,this.drawAxisX(e),this.drawAxisY(e)}}drawAxisX(e){const{axisYScaleOffset:t,xMinScale:i,xMaxScale:s,config:r}=h,{grid:a,rect:o,pointRange:l,precision:u}=this,[d,b]=l.map(c=>c*u);e.beginPath(),e.moveTo(a.left-t.x,o.y),e.lineTo(o.x,o.y),e.strokeStyle=r.gridColor,e.stroke();const{rules:f}=n.createScale([d,b],[i,s]);for(let c of f)this.drawScaleX(e,c,[d,b])}drawScaleX(e,t,[i,s]){const{grid:r,drawWidth:a,rect:o}=this,l=h.axisXScaleOffset,u=r.left+(t-i)*a/(s-i)+l.x,d=o.y+l.y;e.beginPath(),e.moveTo(u,r.top),e.lineTo(u,d-l.y/2),e.strokeStyle=h.config.gridColor,e.stroke();const b=Math.round(t)+h.config.xUnit,{width:f,height:c}=n.measureText(e,b);e.fillStyle=h.config.textColor,e.fillText(b,u-f/2,d+c/2)}drawAxisY(e){const{dataCache:t,drawRatio:i,drawHeight:s,grid:r}=this;if(t.length>0){const a=s/8;for(let o=0;o<=s;o+=a){const l=Math.ceil(o/i);if(l<=t.length){let u=Math.min(Math.floor(l),t.length-1);const[d]=t[u];this.drawScaleY(e,T(d),new n.Point(r.left,r.top+o),o===0)}}}}drawScaleY(e,t,{x:i,y:s},r=!1){const a=h.axisYScaleOffset,{height:o}=n.measureText(e,t);e.beginPath(),e.moveTo(i-a.x,s),e.lineTo(r?i+this.drawWidth:i,s),e.strokeStyle=h.config.gridColor,e.stroke(),e.fillStyle=h.config.textColor,e.fillText(t,a.x,s+o/2+a.y)}onMouseMove(e){const{grid:t,rect:i,scale:s,dpr:r,drawRatio:a,pointRange:o,dataCache:l,precision:u,dragging:d,tooltip:b,crosshair:f}=this,c=this.getOffset(e),C=n.scaleBounds({...t,right:i.x,bottom:i.y},1/r.value);if(n.isPointInBounds(c,C)&&!d){const[x]=o,v={x:x+(c.x*r.value-t.left)*s,y:c.y-t.top},L=Math.round(v.x*u)+"m";let w=null;const y=Math.floor(v.y*r.value/a);if(y>=0&&y<l.length){const[O]=l[y];w=T(O)}b.update({offset:new n.Point(c.x,i.y*r.value),content:L},w?{offset:new n.Point(C.left,c.y),content:w}:null),f.update(c)}else f.hide(),b.hide()}onMouseLeave(){this.tooltip.hide(),this.crosshair.hide()}onDblClick(){this.reset()}onDprChange(e){this.updateCanvas(),this.context.scale(e,e),this.updateGrid(),this.crosshair.setEdge(this.grid)}initCanvas(e,t){return t.setAttribute("style",n.createStyle({display:"block",width:"100%",height:"100%"})),e.appendChild(t),e}updateCanvas(){const e=this.dpr.value;this.width=this.root.clientWidth*e;const t=this.root.clientHeight-h.brushHeight;this.height=t*e,this.canvas.width=this.width,this.canvas.height=this.height,this.canvasContainer.setAttribute("style",n.createStyle({position:"relative",height:`${t}px`,cursor:"crosshair",overflow:"hidden","--scale":1/e}))}resize(){super.resize(),this.updateCanvas()}dispose(){super.dispose(),cancelAnimationFrame(this.raf),this.brush.dispose(),this.legend?.dispose(),this.tooltip.dispose(),this.crop.dispose(),this.dpr.dispose(),this.resizeObserver.disconnect(),this.canvasContainer.removeEventListener("mousemove",this.onMouseMove),this.canvasContainer.removeEventListener("mouseleave",this.onMouseLeave),this.canvasContainer.removeEventListener("dblclick",this.onDblClick),this.root.removeChild(this.canvasContainer)}}Object.defineProperty(h,"version",{enumerable:!0,configurable:!0,writable:!0,value:"0.0.7"});Object.defineProperty(h,"config",{enumerable:!0,configurable:!0,writable:!0,value:{xUnit:"m",gridColor:"#aaa",textColor:"#222",accentColor:"#000",fontSize:13,cropStyle:{},tooltipStyle:{color:"#fff"},maxCacheSize:400,legend:!0,grid:{left:90,top:10,right:80,bottom:30}}});Object.defineProperty(h,"defaultRange",{enumerable:!0,configurable:!0,writable:!0,value:[0,1]});Object.defineProperty(h,"defaultDataRange",{enumerable:!0,configurable:!0,writable:!0,value:[0,1]});Object.defineProperty(h,"xMinScale",{enumerable:!0,configurable:!0,writable:!0,value:3});Object.defineProperty(h,"xMaxScale",{enumerable:!0,configurable:!0,writable:!0,value:12});Object.defineProperty(h,"axisXScaleOffset",{enumerable:!0,configurable:!0,writable:!0,value:new n.Point(0,15)});Object.defineProperty(h,"axisYScaleOffset",{enumerable:!0,configurable:!0,writable:!0,value:new n.Point(5,0)});Object.defineProperty(h,"brushHeight",{enumerable:!0,configurable:!0,writable:!0,value:30});exports.Gradient=V;exports.HeatMap=h;exports.RgbColor=m;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b as D, d as Y, r as B, F as G, e as P, f as b, h as $, D as X, P as m, i as q, T as K, j as J, k as N, l as Q, n as V, o as Z, m as E, s as H, p as _ } from "./chart-
|
|
1
|
+
import { b as D, d as Y, r as B, F as G, e as P, f as b, h as $, D as X, P as m, i as q, T as K, j as J, k as N, l as Q, n as V, o as Z, m as E, s as H, p as _ } from "./chart-DDRVFzXA.js";
|
|
2
2
|
class C {
|
|
3
3
|
r;
|
|
4
4
|
g;
|
package/build/heatmap.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("./heatmap-
|
|
1
|
+
"use strict";const e=require("./heatmap-DC9YzFDb.cjs");require("./chart-DGmZBxvs.cjs");module.exports=e.HeatMap;
|
package/build/heatmap.js
CHANGED
package/build/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./heatmap-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./heatmap-DC9YzFDb.cjs"),a=require("./line.cjs"),o=require("./bar.cjs"),t=require("./otdr.cjs"),e=require("./chart-DGmZBxvs.cjs");exports.Gradient=r.Gradient;exports.HeatMap=r.HeatMap;exports.RgbColor=r.RgbColor;exports.Line=a.default;exports.Bar=o.default;Object.defineProperty(exports,"MeasureMode",{enumerable:!0,get:()=>t.MeasureMode});exports.Otdr=t.default;exports.Chart=e.Chart;exports.ControlType=e.ControlType;exports.Dragable=e.Dragable;exports.DragableThumb=e.DragableThumb;exports.Field=e.Field;exports.Point=e.Point;
|
package/build/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { G as e, H as o, R as t } from "./heatmap-
|
|
1
|
+
import { G as e, H as o, R as t } from "./heatmap-DVvRVO9Z.js";
|
|
2
2
|
import { default as f } from "./line.js";
|
|
3
3
|
import { default as d } from "./bar.js";
|
|
4
4
|
import { MeasureMode as m, default as b } from "./otdr.js";
|
|
5
|
-
import { C as x, a as i, D as n, b as C, F as g, P as D } from "./chart-
|
|
5
|
+
import { C as x, a as i, D as n, b as C, F as g, P as D } from "./chart-DDRVFzXA.js";
|
|
6
6
|
export {
|
|
7
7
|
d as Bar,
|
|
8
8
|
x as Chart,
|
package/build/line.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const q=require("./dataset-D4KLCpTU.cjs"),c=require("./chart-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const q=require("./dataset-D4KLCpTU.cjs"),c=require("./chart-DGmZBxvs.cjs");class s extends c.Chart{draw(e){const{data:o,xMin:r,xMax:f,yMin:u,scale:a,grid:h,rect:y,sample:p}=this;if(o)for(const i of o){const{color:M,data:g,lineWidth:m=1,precision:l=1}=i;e.lineWidth=m,e.strokeStyle=M,e.beginPath();const{start:T,end:v,loop:S}=q.fitDataset(g,l,[r,f]);S(a.x,(t,b)=>{const C=i.data.slice(t,Math.min(t+b,v+1)),k=p(C,s.config.dataSampleMethod),n=h.left+(l*t-r)/a.x,d=y.y-(k-u)/a.y;t===T?e.moveTo(n,d):e.lineTo(n,d)}),e.stroke()}}}exports.ControlType=c.ControlType;exports.default=s;
|
package/build/line.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { f as W } from "./dataset-Bv37sY1L.js";
|
|
2
|
-
import { C as b } from "./chart-
|
|
3
|
-
import { a as j } from "./chart-
|
|
2
|
+
import { C as b } from "./chart-DDRVFzXA.js";
|
|
3
|
+
import { a as j } from "./chart-DDRVFzXA.js";
|
|
4
4
|
class d extends b {
|
|
5
5
|
// @override
|
|
6
6
|
draw(a) {
|
package/build/otdr.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const M=require("./chart-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const M=require("./chart-DGmZBxvs.cjs"),C=require("./dataset-D4KLCpTU.cjs");exports.LineStyle=void 0;(function(u){u[u.solid=0]="solid",u[u.dashed=1]="dashed"})(exports.LineStyle||(exports.LineStyle={}));exports.MeasureMode=void 0;(function(u){u[u.two_points=0]="two_points",u[u.four_points=1]="four_points",u[u.none=2]="none"})(exports.MeasureMode||(exports.MeasureMode={}));var c;(function(u){u.line_A="A",u.line_B="B",u.line_a="a",u.line_b="b"})(c||(c={}));class y{constructor(e,t,i){Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"color",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"style",{enumerable:!0,configurable:!0,writable:!0,value:exports.LineStyle.solid}),Object.defineProperty(this,"location",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=e,this.color=t,i&&(this.style=i),this.location=0,this.order=y.orderMap.get(e)??0}copy(){return new y(this.name,this.color).copyWith({location:this.location,style:this.style})}copyWith({name:e,color:t,style:i,location:s,order:n}){return this.name=e??this.name,this.color=t??this.color,this.style=i??this.style,this.location=s??this.location,this.order=n??this.order,this}}Object.defineProperty(y,"orderMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map});class b extends M.Chart{static initConfig(){const e=M.Chart.config;e.measureLine={a:{location:"10%",order:0,color:"#f00",style:exports.LineStyle.dashed},A:{location:"25%",order:1,color:"#f00",style:exports.LineStyle.solid},B:{location:"75%",order:2,color:"cyan",style:exports.LineStyle.solid},b:{location:"90%",order:3,color:"cyan",style:exports.LineStyle.dashed}},e.grid.top=15,b.config=e}constructor(e){super(e),Object.defineProperty(this,"activeEvent",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"measureMode",{enumerable:!0,configurable:!0,writable:!0,value:exports.MeasureMode.none}),Object.defineProperty(this,"measureLine_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"measureLine_A",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"measureLine_B",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"measureLine_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeMeasureLine",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"draggedMeasureLine",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"onMeasureChange",{enumerable:!0,configurable:!0,writable:!0,value:null}),this.measureLine_a=this.createMeasureLine(c.line_a),this.measureLine_A=this.createMeasureLine(c.line_A),this.measureLine_B=this.createMeasureLine(c.line_B),this.measureLine_b=this.createMeasureLine(c.line_b)}createMeasureLine(e){const{color:t,style:i,order:s}=b.config.measureLine[e];return y.orderMap.set(e,s),new y(e,t,i)}mergeDataset(e){const{lineWidth:t=1,precision:i=1,events:s=[],...n}=e;return{lineWidth:t,precision:i,events:s,...n}}loopDatasets(e,t){if(e)for(const i of e){const s=this.mergeDataset(i);t(s)}}draw(e){const{width:t,height:i,data:s,scale:n,sample:r}=this;this.loopDatasets(s,({color:o,data:a,lineWidth:d,precision:f})=>{e.lineWidth=d,e.strokeStyle=o,e.beginPath();const{start:h,end:v,loop:m}=C.fitDataset(a,f,this.xRange);m(n.x,(l,p)=>{const w=a.slice(l,Math.min(l+p,v+1)),x=r(w,b.config.dataSampleMethod),{x:L,y:g}=this.getDataOffset({x:l,y:x},f);l===h?e.moveTo(L,g):e.lineTo(L,g)}),e.stroke(),this.snapshot=e.getImageData(0,0,t,i)})}get measureEnabled(){return this.measureMode!==exports.MeasureMode.none}drawAnnotations(e){this.measureEnabled&&this.drawMeasureLines()}getDataOffset({x:e,y:t},i=1){const{scaleGrid:s,rect:n,xMin:r,yMin:o,scale:a}=this;return{x:s.left+(i*e-r)/a.x,y:n.y-(t-o)/a.y}}getEventOffset({offset:e,size:t}){const{x:i,y:s}=this.getDataOffset(e),{width:n,height:r}=t;return{x:i-n/2,y:s-r*2}}drawSnapshot(e){this.loopDatasets(this.data,t=>{this.drawEvents(t)})}drawEvents(e){const{context:t,activeEvent:i,dpr:s,xMin:n,xMax:r,yMin:o,yMax:a,xUnit:d,yUnit:f}=this,{events:h,color:v}=e;for(const m of h){const{x:l,y:p}=this.getEventOffset(m),{key:w,value:x,offset:L,size:g,image:j,renderLabel:_,renderValue:O}=m;if(t.drawImage(j,l,p,g.width,g.height),i?.key===w){t.strokeStyle=v,t.lineWidth=1,t.strokeRect(l,p,g.width,g.height);const[P,D]=[l+g.width/2,p+g.height];t.beginPath(),t.moveTo(P,D),t.lineTo(P,D+32),t.stroke();const E=16*s.value;t.save(),t.fillStyle=v;const S={xMin:n,xMax:r,yMin:o,yMax:a,xUnit:d,yUnit:f,event:m,dataset:e};t.fillText(`${O?O(x,S):x}`,l,p-E*2),t.fillText(`${_?_(L.x,S):L.x}`,l,p-E),t.restore()}}}setActiveEvent(e){if(this.data){let t=null;if(e!==null)for(const i of this.data){let s=!1;const{events:n}=this.mergeDataset(i);for(const r of n)if(r.key===e){t=r,s=!0;break}if(s)break}if(t?.key!==this.activeEvent?.key){if(t){const{x:i,y:s}=t.offset;this.setCenter(i,s)}return this.activeEvent=t,this.shouldUpdate=!0,!0}}return!1}get measureLines(){const{measureMode:e,measureLine_A:t,measureLine_B:i,measureLine_a:s,measureLine_b:n}=this;let r=[];return e===exports.MeasureMode.two_points?r=[t,i]:e===exports.MeasureMode.four_points&&(r=[t,s,n,i]),r}onMouseMove(e){super.onMouseMove(e);const{data:t,context:i,dpr:s,dragging:n}=this,r=this.getOffset(e).multiply(s.value);let o=null;if(this.loopDatasets(t,({events:a})=>{for(const d of a){const{x:f,y:h}=this.getEventOffset(d),{width:v,height:m}=d.size,l=new Path2D;l.moveTo(f-v/2,h-m/2),l.rect(f,h,v,m),i.isPointInPath(l,r.x,r.y)&&(o=d)}}),this.activeEvent!==o&&(this.activeEvent=o,this.useSnapshot=this.shouldUpdate=!0),!n){const a=this.findNearMeasureLine(r);a!==this.activeMeasureLine&&(this.setCursor(a?"ew-resize":void 0),this.activeMeasureLine=a,this.useSnapshot=this.shouldUpdate=!0)}}get $measureLines(){const{measureLines:e,draggedMeasureLine:t}=this;return t!==null?[...e.filter(({name:i})=>i!==t.name),t]:e}drawMeasureLines(){for(const e of this.$measureLines)this.drawMeasureLine(e)}getLineOffset(e){const{x:t}=this.getDataOffset({x:e.location,y:0});return t}get xRange(){return this.bounds.x}drawMeasureLine(e){const{context:t,rect:i,scaleGrid:s,activeMeasureLine:n}=this,r=M.clampInRange(e.location,this.xRange);r!==e.location&&(e.location=r,this.emitMeasureChangeEvent(n));const{name:o,color:a,style:d}=e,{width:f}=M.measureText(t,o),h=this.getLineOffset(e);t.save(),t.fillStyle=a,t.fillText(o,h-f/2,7),t.beginPath(),t.moveTo(h,s.top),t.lineTo(h,i.y),t.strokeStyle=a,d===exports.LineStyle.dashed&&t.setLineDash([2,2]),t.lineWidth=n?.name===o?2:1,t.stroke(),t.restore()}getMeasureLineDefaultAttrs(e){const{location:t,...i}=b.config.measureLine[e];let s=0;return typeof t=="number"?s=t:s=this.getRatioOffset(+t.replace(/%$/,"")/100).x,{name:e,location:s,...i}}get measureLinesMoved(){return this.measureLines.some(e=>{const{location:t}=this.getMeasureLineDefaultAttrs(e.name);return e.location!==t})}initMeasureLine(e,t){const i=this.getMeasureLineDefaultAttrs(t);e.copyWith(i)}initMeasureLines(e){const t=e??this.measureMode;switch(t){case exports.MeasureMode.two_points:case exports.MeasureMode.four_points:this.initMeasureLine(this.measureLine_A,c.line_A),this.initMeasureLine(this.measureLine_B,c.line_B),t===exports.MeasureMode.four_points&&(this.initMeasureLine(this.measureLine_a,c.line_a),this.initMeasureLine(this.measureLine_b,c.line_b));break;case exports.MeasureMode.none:}}get measureValue(){return this.measureLines.map(({name:e,location:t})=>({name:e,location:t}))}setMeasureMode(e){this.measureMode!==e&&(this.initMeasureLines(e),this.measureMode=e,this.shouldUpdate=!0)}fitDatasets(e=!0){if(this.data){let t=0,i=0,s=0;for(const n of this.data){const{data:r,precision:o}=this.mergeDataset(n);t=Math.max(t,r.length*o),s=M.getMin([s,...r]),i=M.getMax([i,...r])}t>0&&(this.xMin=0,this.xMax=t,this.yMin=s,this.yMax=i,this.shouldUpdate=e)}}reset(){super.reset(()=>{this.fitDatasets(!1),this.measureEnabled&&this.measureLinesMoved&&(this.initMeasureLines(),this.emitMeasureChangeEvent(null))})}findNearMeasureLine(e){for(let t=this.$measureLines.length-1;t>=0;t--){const i=this.$measureLines[t],s=this.getLineOffset(i);if(e.x<s+5&&e.x>s-5)return i}return null}onStart(e){e.stopPropagation,this.activeMeasureLine!==null?this.dragging=!0:super.onStart(e)}emitMeasureChangeEvent(e){const{measureLines:t}=this,i=t.map(({name:s,location:n})=>({name:s,location:e?.name===s?e.location:n}));this.onMeasureChange?.({current:e,context:i})}updateMeasureLines(){const{activeMeasureLine:e,measureLines:t}=this;if(e!==null){const{name:i,location:s,order:n}=e;for(const r of t)r.name!==i&&(n>r.order&&s<r.location||n<r.order&&s>r.location)&&(r.location=e.location)}}onUpdate(e){const{activeMeasureLine:t,scale:i,dpr:s}=this;if(t!==null){const{x:n}=e.delta.multiply(i).multiply(s.value),{name:r,location:o}=t,a=M.clampInRange(o+n,this.xRange);return a!==o&&(t.location=a,this.updateMeasureLines(),this.emitMeasureChangeEvent({name:r,location:a}),this.useSnapshot=this.shouldUpdate=!0),this.draggedMeasureLine=t,e.value}return super.onUpdate(e)}}Object.defineProperty(b,"version",{enumerable:!0,configurable:!0,writable:!0,value:"0.2.0"});b.initConfig();exports.ControlType=M.ControlType;exports.default=b;
|
package/build/otdr.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as A, d as C, m as S, g as U, c as B } from "./chart-
|
|
2
|
-
import { a as G } from "./chart-
|
|
1
|
+
import { C as A, d as C, m as S, g as U, c as B } from "./chart-DDRVFzXA.js";
|
|
2
|
+
import { a as G } from "./chart-DDRVFzXA.js";
|
|
3
3
|
import { f as R } from "./dataset-Bv37sY1L.js";
|
|
4
4
|
var p;
|
|
5
5
|
(function(u) {
|
package/package.json
CHANGED
package/build/chart-Dr9ZOezr.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";class P{_value;listeners=[];constructor(t){this._value=t}get value(){return this._value}set value(t){this._value=t}addEventListener(t){this.listeners.push(t)}removeEventListener(t){this.listeners=this.listeners.filter(e=>e!==t)}emitChangeEvent(){for(const t of this.listeners)t(this._value)}}class g{x;y;constructor(t,e){this.x=t,this.y=e}add(t){let{x:e,y:i}=this;return typeof t=="number"?(e+=t,i+=t):(e+=t.x,i+=t.y),new g(e,i)}sub(t){let{x:e,y:i}=this;return typeof t=="number"?(e-=t,i-=t):(e-=t.x,i-=t.y),new g(e,i)}multiply(t){let{x:e,y:i}=this;return typeof t=="number"?(e*=t,i*=t):(e*=t.x,i*=t.y),new g(e,i)}divide(t){let{x:e,y:i}=this;return typeof t=="number"?(e/=t,i/=t):(e/=t.x,i/=t.y),new g(e,i)}static origin(){return new g(0,0)}}function T(o){let t="";for(const[e,i]of Object.entries(o))t+=`${e.replace(/[A-Z]/g,n=>"-"+n.toLowerCase())}: ${i};`;return t}function y(o,t){for(const e in t){const i=t[e];o.style.setProperty(e,`${i}`)}}function k(o,t){const e=g.origin();if(t){const n=t.getBoundingClientRect();e.x=n.x,e.y=n.y}let i;if("touches"in o){const n=o,[s]=n.touches;i=new g(s.clientX,s.clientY)}else i=new g(o.clientX,o.clientY);return i.sub(e)}function H(o,t){let e=null;function i(){e&&(clearTimeout(e),e=null)}function n(...s){i(),e=setTimeout(()=>{o.apply(this,s)},t)}return n.cancel=i,n}const $=o=>[...o].reduce((t,e)=>Math.min(t,e),1/0),A=o=>[...o].reduce((t,e)=>Math.max(t,e),-1/0),D=([o,t])=>o<t?[o,t]:[t,o];function F(o,t=1){const[e,i]=o;return D([t-e,t-i])}function Z([o,t],[e,i],[n,s]=[0,1]){let a=o+e,r=t+i;return a<n&&(a=n,r=a+t-o),r>s&&(r=s,a=r-t+o),[a,r]}function R(o,[t,e]){return o>=t&&o<=e}function G({x:o,y:t},{left:e,top:i,right:n,bottom:s}){return R(o,[e,n])&&R(t,[i,s])}function C(o,[t,e]){return Math.max(t,Math.min(o,e))}function Q(o,t,e){const i=C(o.left,t),n=C(o.right,t),s=C(o.top,e),a=C(o.bottom,e);return{left:i,top:s,right:n,bottom:a}}function V({left:o,top:t,right:e,bottom:i},n){return{left:o*n,top:t*n,right:e*n,bottom:i*n}}function B(o){return+o.toExponential().match(/-?\d+$/)[0]}function q(o){const t=String(o).match(/\.\d+$/);return t?1-t[0].length:B(o)}function K(o,t,[e,i]){let n=Math.floor(e/t)*t;const s=Math.abs(t);for(;n<e;)n+=s;const a=[e],r=Math.abs(t/6);for(let c=0;c<Math.ceil(o);c++){const h=n+s*c;(h>e+r&&h<i-r||e<0&&h===0)&&a.push(h)}return a.push(i),a}function z(o,[t,e]){const[i,n]=o,s=n-i,a=B(s);let r=Math.pow(10,a);n<=0&&(r=-r);let c=Math.abs(s/r);if(c<t||c>e){const p=[2,4,5,8,10];for(const d of p){const u=c<t?r/d:r*d,f=Math.abs(s/u);if(R(f,[t,e])){r=u,c=f;break}}}const h=K(c,r,o),x=q(r);return{rules:h,density:x}}class Y{_value;mediaQuery;listener;constructor(t){this.listener=t,this.onMediaChange=this.onMediaChange.bind(this),this.createMediaMatch()}createMediaMatch(){this._value=window.devicePixelRatio,this.mediaQuery=window.matchMedia(`(resolution: ${this.value}dppx)`),this.mediaQuery.addEventListener("change",this.onMediaChange)}get value(){return this._value}onMediaChange(){this.dispose(),this.createMediaMatch(),this.listener(this._value)}dispose(){this.mediaQuery.removeEventListener("change",this.onMediaChange)}}function U(o,t){const{width:e,hangingBaseline:i}=o.measureText(t);return{width:e,height:i??0}}class O extends P{element;dragging=!1;origin=g.origin();constructor(t,e){super(e),this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),t.addEventListener("mousedown",this.onPointerDown),t.addEventListener("touchstart",this.onPointerDown),window.addEventListener("mousemove",this.onPointerMove),window.addEventListener("touchmove",this.onPointerMove),window.addEventListener("mouseup",this.onPointerUp),window.addEventListener("touchend",this.onPointerUp),this.element=t}set value(t){super.value=t,this.resize()}onPointerDown(t){this.dragging=!0,this.origin=k(t),this.onStart(t)}getStyle(t){return""}onUpdate({value:t}){return t}isEqual(t,e){return String(t)===String(e)}onStart(t){}onEnd(t){}resize(){const{_value:t,dragging:e}=this,i=this.getStyle({value:t,dragging:e});i!==""&&this.element.setAttribute("style",i)}onPointerMove(t){if(this.dragging){const e=k(t),i=this.onUpdate({value:this._value,offset:e,delta:e.sub(this.origin),event:t});this.isEqual(i,this._value)||(this._value=i,this.emitChangeEvent(),this.resize()),this.origin=e}}onPointerUp(t){this.dragging=!1,this.onEnd(t)}dispose(){this.element.removeEventListener("pointerdown",this.onPointerDown),this.element.removeEventListener("touchstart",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("touchmove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("touchend",this.onPointerUp)}}class j extends O{root;container;option;constructor(t,e){const i=document.createElement("div");super(i,e.initValue),this.root=t,this.option=e,this.getStyle=e.getStyle,this.container=i,this.root.appendChild(i),this.resize()}onStart(t){this.option.onStart?.(t)}onUpdate(t){return this.option.onUpdate(t)}onEnd(t){this.option.onEnd?.(t)}dispose(){super.dispose(),this.root.removeChild(this.container)}}class I{root;container;style={position:"absolute",display:"none",userSelect:"none"};inheritStyle;constructor(t,e){this.root=t,this.inheritStyle=e,this.container=document.createElement("div"),this.root.appendChild(this.container),this.setContainer()}setContainer(t){this.container.setAttribute("style",T({...this.style,...this.inheritStyle,...t}))}update({top:t,right:e,bottom:i,left:n}){this.setContainer({display:"block",inset:`${t}px ${e}px ${i}px ${n}px`})}hide(){this.setContainer({display:"none"})}dispose(){this.root.removeChild(this.container)}}class W{root;xTooltip;yTooltip;constructor(t,e){this.root=t,this.xTooltip=this.createTooltip(e),this.root.appendChild(this.xTooltip),this.yTooltip=this.createTooltip(e),this.root.appendChild(this.yTooltip)}createTooltip(t){const e=document.createElement("div");return e.setAttribute("style",T({position:"absolute",fontSize:"calc(var(--scale) * 12px)",userSelect:"none",padding:"calc(var(--scale) * 5px) calc(var(--scale) * 6px)",borderRadius:"4px",...t,display:"none"})),e}updateTooltip(t,e,i){y(t,{display:"block",...i}),t.innerText=e}update(t,e){t?this.updateTooltip(this.xTooltip,t.content,{left:`${t.offset.x}px`,top:`${t.offset.y}px`,transform:"translateX(-50%)"}):y(this.xTooltip,{display:"none"}),e?this.updateTooltip(this.yTooltip,e.content,{left:`${e.offset.x}px`,top:`${e.offset.y}px`,transform:"translate(-100%, -50%)"}):y(this.yTooltip,{display:"none"})}hide(){y(this.xTooltip,{display:"none"}),y(this.yTooltip,{display:"none"})}dispose(){this.root.removeChild(this.xTooltip),this.root.removeChild(this.yTooltip)}}class X{root;container;axisX;axisY;option;constructor(t,e){this.root=t,this.option=e,this.container=this.createContainer(),this.setEdge(e.edge),this.axisX=this.createAxis(),this.axisY=this.createAxis()}createContainer(){const t=document.createElement("div");return y(t,{inset:"0",userSelect:"none",display:"none"}),this.root.appendChild(t),t}createAxis(){const{style:t}=this.option,e=document.createElement("div");return y(e,{position:"absolute",...t}),this.container.appendChild(e),e}setEdge(t){y(this.container,{"--edge-top":`calc(${t.top}px * var(--scale))`,"--edge-bottom":`calc(${t.bottom}px * var(--scale))`,"--edge-left":`calc(${t.left}px * var(--scale))`,"--edge-right":`calc(${t.right}px * var(--scale))`})}update({x:t,y:e}){y(this.axisX,{width:"1px",left:`${t}px`,top:"var(--edge-top)",bottom:"var(--edge-bottom)"}),y(this.axisY,{"--gradient-angle":"45deg",height:"1px",top:`${e}px`,left:"var(--edge-left)",right:"var(--edge-right)"}),y(this.container,{display:"block"})}hide(){y(this.container,{display:"none"})}dispose(){this.root.removeChild(this.container)}}var M=(o=>(o[o.none=-1]="none",o[o.crop=0]="crop",o[o.zoom=1]="zoom",o[o.move=2]="move",o))(M||{});class l extends O{root;resizeObserver;dpr;canvasContainer;canvas;static version="0.1.6";static config={xMin:0,xMax:1e4,yMin:0,yMax:1e3,grid:{left:65,top:10,right:30,bottom:35},controlType:M.crop,xUnit:"",yUnit:"",xMinScale:3,xMaxScale:8,yMinScale:3,yMaxScale:8,responsiveScale:!0,backgroundColor:"#fff",gridColor:"#ccc",textColor:"#222",accentColor:"#36f",fontSize:12,cropStyle:{backgroundColor:"#36f4"},tooltip:{enabled:!0,style:{}},crosshair:{enabled:!0,style:{"--gradient-angle":"0",background:"repeating-linear-gradient(var(--gradient-angle), transparent 0 2px, var(--accent-color) 2px 5px)"}},axisXScaleOffset:{x:0,y:15},axisYScaleOffset:{x:5,y:0},xLimit:[-1/0,1/0],yLimit:[-1/0,1/0],wheelZoom:!0,dataSampleMethod:"none"};width=0;height=0;context;xMin=l.config.xMin;xMax=l.config.xMax;yMin=l.config.yMin;yMax=l.config.yMax;data=null;tooltip=null;crosshair=null;crop;controlType=l.config.controlType;prevControlType=l.config.controlType;wheelZoom=l.config.wheelZoom;cropOrigin=g.origin();cropOffset=g.origin();inCrop=!1;grid={...l.config.grid};xMinScale=l.config.xMinScale;xMaxScale=l.config.xMaxScale;yMinScale=l.config.yMinScale;yMaxScale=l.config.yMaxScale;xUnit=l.config.xUnit;yUnit=l.config.yUnit;raf;shouldUpdate=!1;snapshot=null;useSnapshot=!1;constructor(t){const e=document.createElement("div");super(e,0),this.root=t,this.resizeObserver=new ResizeObserver(H(this.onResize,200)),this.resizeObserver.observe(t),this.onDprChange=this.onDprChange.bind(this),this.dpr=new Y(this.onDprChange),this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.context.scale(this.dpr.value,this.dpr.value);const i=this.initCanvas(e,this.canvas);this.onMouseMove=this.onMouseMove.bind(this),i.addEventListener("mousemove",this.onMouseMove),this.onMouseLeave=this.onMouseLeave.bind(this),i.addEventListener("mouseleave",this.onMouseLeave),this.onWheel=this.onWheel.bind(this),i.addEventListener("wheel",this.onWheel),this.onDblClick=this.onDblClick.bind(this),i.addEventListener("dblclick",this.onDblClick),this.setRoot(this.root),this.root.appendChild(i),this.canvasContainer=i;const{tooltip:n,crosshair:s,cropStyle:a,dataSampleMethod:r}=l.config;if(n.enabled&&(this.tooltip=new W(i,{backgroundColor:"var(--accent-color)",fontSize:`${l.config.fontSize}px`,...n.style})),s.enabled){const c={...this.scaleGrid};this.crosshair=new X(i,{edge:c,style:s.style})}this.crop=new I(i,{border:"1px solid var(--accent-color)",...a}),r==="lttb"&&console.warn("lttb sample not implemented."),this.updateDraw()}get $root(){return this.root}get $canvas(){return this.canvas}setData(t){this.data=t,this.shouldUpdate=!0}setControlType(t){this.controlType=t,this.setCursor()}draw(t){throw new Error("Chart.prototype.draw not implemented")}drawSnapshot(t){throw new Error("Chart.prototype.drawSnapshot not implemented")}drawAnnotations(t){}sample(t,e){let i=0;const n=[...t];switch(e){case"none":case"lttb":default:i=n[Math.floor(n.length/2)];break;case"max":i=A(t);break;case"min":i=$(t);break;case"avg":i=n.reduce((s,a)=>s+a,0)/n.length;break}return i}updateDraw(){this.raf=requestAnimationFrame(this.updateDraw.bind(this));const{context:t,dpr:e,width:i,height:n,drawWidth:s,drawHeight:a,scaleGrid:r,rect:c,xMin:h,xMax:x,yMin:p,yMax:d,xMinScale:u,xMaxScale:f,yMinScale:m,yMaxScale:v,snapshot:w,useSnapshot:b}=this;if(i>0&&n>0&&this.shouldUpdate){t.clearRect(r.left,r.top,s,a);const S=z([h,x],[u,f]);this.drawVerticalGrid(S);const L=z([p,d],[m,v]);this.drawHorizontalGrid(L),t.textRendering="optimizeLegibility",t.textBaseline="middle",t.font=`${l.config.fontSize*e.value}px sans-serif`,b&&w!==null?(t.putImageData(w,0,0),this.drawSnapshot(t),this.useSnapshot=!1):(this.draw(t),this.drawSnapshot(t)),t.clearRect(0,0,i,r.top),t.clearRect(0,0,r.left,n),t.clearRect(0,c.y,i,r.bottom),t.clearRect(c.x,0,r.right,n),this.drawAxisX(S),this.drawAxisY(L),this.drawAnnotations(t),this.shouldUpdate=!1}}drawVerticalGrid({rules:t}){const{context:e,scaleGrid:i,rect:n,scale:s,xMin:a}=this;e.save(),e.strokeStyle=l.config.gridColor;for(let r=0,c=t.length;r<c;r++){e.beginPath();const h=i.left+(t[r]-a)/s.x;e.moveTo(h,i.top),e.lineTo(h,n.y),r>0&&e.setLineDash([2,2]),e.stroke()}e.restore()}drawAxisX({rules:t,density:e}){for(let i=0,n=t.length;i<n;i++)this.drawScaleX(t[i],e,[0,n-1].includes(i))}drawScaleX(t,e,i=!1){const{context:n,scaleGrid:s,rect:a,xMin:r,scale:c,dpr:h,xUnit:x}=this,p=l.config.axisXScaleOffset,d=s.left+(t-r)/c.x;let u=a.y+p.y;n.lineWidth=h.value,n.strokeStyle=l.config.gridColor,n.beginPath(),n.moveTo(d,a.y),n.lineTo(d,u-p.y*.6),n.stroke();const f=this.getScaleText(t,e,x),{width:m,height:v}=U(n,f);i?(n.fillStyle=l.config.accentColor,u+=v*1.5):(n.fillStyle=l.config.textColor,u+=v/4),n.fillText(f,d-m/2,u)}drawHorizontalGrid({rules:t}){const{context:e,scaleGrid:i,rect:n,scale:s,yMin:a}=this;e.save(),e.strokeStyle=l.config.gridColor;for(let r=0,c=t.length;r<c;r++){e.beginPath();const h=n.y-(t[r]-a)/s.y;e.moveTo(i.left,h),e.lineTo(n.x,h),r>0&&e.setLineDash([2,2]),e.stroke()}e.restore()}drawAxisY({rules:t,density:e}){for(let i of t)this.drawScaleY(i,e)}drawScaleY(t,e){const{context:i,scaleGrid:n,yMin:s,rect:a,scale:r,yUnit:c}=this,h=l.config.axisYScaleOffset,x=n.left,p=a.y-(t-s)/r.y;i.strokeStyle=l.config.gridColor,i.fillStyle=l.config.textColor,i.beginPath(),i.moveTo(x-h.x,p),i.lineTo(x,p),i.stroke();const d=this.getScaleText(t,e,c),{width:u,height:f}=U(i,d);i.fillText(d,x-u-h.x*2,p+f/2)}getScaleText(t,e,i){return t.toFixed(e<0?-e:0)+i}setRoot(t){y(t,{position:"relative",userSelect:"none","--accent-color":l.config.accentColor})}get cursor(){switch(this.controlType){case M.crop:return"crosshair";case M.move:return"move";case M.zoom:return"zoom-in";default:return"default"}}setCursor(t){y(this.canvasContainer,{cursor:t??this.cursor})}initCanvas(t,e){const{cursor:i,dpr:n}=this;return t.setAttribute("style",T({position:"relative",height:"100%",overflow:"hidden",cursor:i,"--scale":1/n.value})),e.setAttribute("style",T({display:"block",width:"100%",height:"100%"})),t.appendChild(e),t}get scaleGrid(){const{left:t,top:e,right:i,bottom:n}=l.config.grid,{value:s}=this.dpr;return{left:t*s,top:e*s,right:i*s,bottom:n*s}}get bounds(){const{xMin:t,xMax:e,yMin:i,yMax:n}=this;return{x:[t,e],y:[i,n]}}get rectBounds(){const{grid:t,rect:e,dpr:i}=this,{left:n,top:s}=t,{x:a,y:r}=e.divide(i.value);return{left:n,top:s,right:a,bottom:r}}get rect(){const{width:t,height:e,scaleGrid:i}=this;return new g(t-i.right,e-i.bottom)}get drawWidth(){const{rect:t,scaleGrid:e}=this;return t.x-e.left}get drawHeight(){const{rect:t,scaleGrid:e}=this;return t.y-e.top}updateCanvas(){const t=this.dpr.value;if(this.width=Math.floor(this.root.clientWidth*t),this.height=Math.floor(this.root.clientHeight*t),this.canvas.width=this.width,this.canvas.height=this.height,l.config.responsiveScale){const{width:e}=U(this.context,"0000000"+this.xUnit);this.xMinScale=Math.max(3,Math.floor(this.drawWidth/e/8)),this.xMaxScale=this.xMinScale*3,this.yMinScale=Math.max(3,Math.floor(this.drawHeight/40/8)),this.yMaxScale=this.yMinScale*3}this.shouldUpdate=!0}onDprChange(t){y(this.canvasContainer,{"--scale":1/t}),this.updateCanvas(),this.context.scale(t,t),this.crosshair?.setEdge(this.scaleGrid)}setUnit(t,e){this.xUnit=t??this.xUnit,this.yUnit=e??this.yUnit,this.shouldUpdate=!0}getOffset(t){return k(t,this.canvasContainer)}onMouseMove(t){const{dpr:e,rectBounds:i,xMin:n,yMin:s,scale:a,dragging:r,tooltip:c,crosshair:h,xUnit:x,yUnit:p}=this,d=this.getOffset(t),{left:u,bottom:f}=i,m=e.value;if(G(d,i)&&!r){const v=n+(d.x-u)*m*a.x,w=s+(f-d.y)*m*a.y,{xLabel:b,yLabel:S}=l.config.tooltip;c?.update({offset:{x:d.x,y:f},content:b?b(v,x):v.toFixed(1)+x},{offset:{x:u,y:d.y},content:S?S(w,p):w.toFixed(1)+p}),h?.update(d)}else h?.hide(),c?.hide()}onMouseLeave(){this.tooltip?.hide(),this.crosshair?.hide()}onWheel(t){if(this.wheelZoom){t.preventDefault();const{xMin:e,xMax:i,yMin:n,yMax:s,grid:a,rectBounds:r,drawWidth:c,drawHeight:h,scale:x}=this,{xLimit:p,yLimit:d}=l.config,[u,f]=p,[m,v]=d,{x:w,y:b}=this.getOffset(t),{right:S,bottom:L}=r,E={x:t.deltaY*x.x/c,y:t.deltaY*x.y/h};this.xMin=Math.max(u,e-E.x*(w-a.left)),this.xMax=Math.min(f,i+E.x*(S-w)),this.yMin=Math.max(m,n-E.y*(L-b)),this.yMax=Math.min(v,s+E.y*(b-a.top)),this.shouldUpdate=!0}}onDblClick(){this.reset()}onResize=()=>{this.resize()};get scale(){const{xMin:t,xMax:e,yMin:i,yMax:n,drawWidth:s,drawHeight:a}=this;return new g((e-t)/s,(n-i)/a)}getRatioOffset(t){const{xMin:e,xMax:i,yMin:n,yMax:s}=this;return{x:e+(i-e)*t,y:n+(s-n)*t}}setMoveBounds({x:t,y:e}){const{xLimit:i,yLimit:n}=l.config,[s,a]=i,[r,c]=n,h=this.xMax-this.xMin,x=this.yMax-this.yMin;let p=this.xMin+t,d=this.xMax+t,u=this.yMin+e,f=this.yMax+e;return p<s&&(p=s,d=p+h),d>a&&(d=a,p=d-h),u<r&&(u=r,f=u+x),f>c&&(f=c,u=f-x),{xMin:p,xMax:d,yMin:u,yMax:f}}onStart(t){if(t.ctrlKey&&(this.prevControlType=this.controlType,this.controlType=M.move),this.setCursor(),this.controlType===M.crop){const e=this.getOffset(t);this.cropOrigin=this.cropOffset=e,this.inCrop=!0}}onUpdate({value:t,delta:e}){const{scale:i,dpr:n,controlType:s,inCrop:a,cropOffset:r}=this,{xMin:c,xMax:h,yMin:x,yMax:p}=this.setMoveBounds(new g(-1,1).multiply(e).multiply(i).multiply(n.value));switch(s){case M.crop:a&&(this.cropOffset=r.add(e),this.updateCrop());break;case M.move:this.xMin=c,this.xMax=h,this.yMin=x,this.yMax=p,this.shouldUpdate=!0;break;case M.zoom:this.xMax=h,this.yMax=p,this.shouldUpdate=!0;break}return t}onEnd(t){switch(this.controlType){case M.crop:if(this.inCrop){const{scale:e,rect:i,scaleGrid:n,xMin:s,yMin:a,dpr:r,cropRange:c}=this,{left:h,top:x,right:p,bottom:d}=c,u=r.value;p-h>1&&d-x>1&&(this.xMin+=(h*u-n.left)*e.x,this.xMax=(p*u-n.left)*e.x+s,this.yMin+=(i.y-d*u)*e.y,this.yMax=(i.y-x*u)*e.y+a),this.crop.hide(),this.cropOrigin=this.cropOffset=g.origin(),this.inCrop=!1,this.shouldUpdate=!0}break;case M.move:break;case M.zoom:break}t.ctrlKey&&(this.controlType=this.prevControlType,this.setCursor())}get cropRange(){const{cropOrigin:t,cropOffset:e,rectBounds:i}=this,[n,s]=D([t.x,e.x]),[a,r]=D([t.y,e.y]);return Q({left:n,top:a,right:s,bottom:r},[i.left,i.right],[i.top,i.bottom])}updateCrop(){const{cropRange:t,width:e,height:i,dpr:n}=this,{left:s,top:a,right:r,bottom:c}=t,h=n.value;s===r||a===c?this.crop.hide():this.crop.update({left:s,top:a,right:e/h-r,bottom:i/h-c})}setCenter(t,e){let{x:i,y:n}=g.origin().sub(this.getRatioOffset(.5));if(arguments.length===1)if(Array.isArray(t)){const[s,a]=t;i+=s,n+=a}else typeof t!="number"&&(i+=t.x,n+=t.y);else arguments.length===2&&typeof t=="number"&&typeof e=="number"&&(i+=t,n+=e);this.xMin+=i,this.xMax+=i,this.yMin+=n,this.yMax+=n,this.shouldUpdate=!0}setBounds(t,e,i,n){this.xMin=t??this.xMin,this.xMax=e??this.xMax,this.yMin=i??this.yMin,this.yMax=n??this.yMax,this.shouldUpdate=!0}resize(){super.resize(),this.updateCanvas()}reset(t){const{xMin:e,xMax:i,yMin:n,yMax:s}=l.config;this.xMin=e,this.xMax=i,this.yMin=n,this.yMax=s,t?.(),this.shouldUpdate=!0}dispose(){super.dispose(),cancelAnimationFrame(this.raf),this.tooltip?.dispose(),this.dpr.dispose(),this.resizeObserver.disconnect(),this.canvasContainer.removeEventListener("mousemove",this.onMouseMove),this.canvasContainer.removeEventListener("mouseleave",this.onMouseLeave),this.canvasContainer.removeEventListener("dblclick",this.onDblClick),this.canvasContainer.removeEventListener("wheel",this.onWheel),this.root.removeChild(this.canvasContainer)}}exports.Chart=l;exports.ControlType=M;exports.Crop=I;exports.Crosshair=X;exports.Dpr=Y;exports.Dragable=O;exports.DragableThumb=j;exports.Field=P;exports.Point=g;exports.Tooltip=W;exports.applyStyle=y;exports.clampInRange=C;exports.createScale=z;exports.createStyle=T;exports.getMax=A;exports.getMin=$;exports.getOffset=k;exports.invertRange=F;exports.isPointInBounds=G;exports.measureText=U;exports.restrictRange=Z;exports.reverseRange=D;exports.scaleBounds=V;
|