@data-vision/interactive-chart 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +144 -0
- package/build/bar.cjs +1 -0
- package/build/bar.d.ts +10 -0
- package/build/bar.js +44 -0
- package/build/base/chart.d.ts +137 -0
- package/build/base/color.d.ts +18 -0
- package/build/base/dragable.d.ts +29 -0
- package/build/base/field.d.ts +18 -0
- package/build/base/index.d.ts +5 -0
- package/build/base/point.d.ts +15 -0
- package/build/brush/brush.d.ts +49 -0
- package/build/brush/crop.d.ts +12 -0
- package/build/brush/index.d.ts +2 -0
- package/build/brush/range.d.ts +6 -0
- package/build/brush/thumb.d.ts +6 -0
- package/build/chart-Cj4Fiwnb.js +965 -0
- package/build/chart-Dr9ZOezr.cjs +1 -0
- package/build/dataset-Bv37sY1L.js +18 -0
- package/build/dataset-D4KLCpTU.cjs +1 -0
- package/build/heatmap-BlMqliH5.cjs +1 -0
- package/build/heatmap-Br4YjrBg.js +859 -0
- package/build/heatmap.cjs +1 -0
- package/build/heatmap.d.ts +91 -0
- package/build/heatmap.js +5 -0
- package/build/index.cjs +1 -0
- package/build/index.d.ts +7 -0
- package/build/index.js +20 -0
- package/build/legend/index.d.ts +1 -0
- package/build/legend/legend.d.ts +20 -0
- package/build/line.cjs +1 -0
- package/build/line.d.ts +11 -0
- package/build/line.js +23 -0
- package/build/otdr.cjs +1 -0
- package/build/otdr.d.ts +186 -0
- package/build/otdr.js +417 -0
- package/build/tooltip/crosshair.d.ts +20 -0
- package/build/tooltip/index.d.ts +2 -0
- package/build/tooltip/tooltip.d.ts +12 -0
- package/build/type.d.ts +78 -0
- package/build/util/dataset.d.ts +6 -0
- package/build/util/date.d.ts +1 -0
- package/build/util/env.d.ts +15 -0
- package/build/util/event.d.ts +6 -0
- package/build/util/index.d.ts +6 -0
- package/build/util/numeric.d.ts +26 -0
- package/build/util/style.d.ts +3 -0
- package/package.json +53 -0
|
@@ -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(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;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function M(l, o, [c, h]) {
|
|
2
|
+
const a = Math.max(0, Math.floor(c / o)), n = Math.min(
|
|
3
|
+
l.length - 1,
|
|
4
|
+
Math.ceil(h / o)
|
|
5
|
+
);
|
|
6
|
+
return {
|
|
7
|
+
start: a,
|
|
8
|
+
end: n,
|
|
9
|
+
loop: (s, f) => {
|
|
10
|
+
const e = Math.ceil(s);
|
|
11
|
+
for (let t = a; t <= n; t += e)
|
|
12
|
+
f(t, e);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
M as f
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function f(s,a,[c,l]){const o=Math.max(0,Math.floor(c/a)),n=Math.min(s.length-1,Math.ceil(l/a));return{start:o,end:n,loop:(h,i)=>{const e=Math.ceil(h);for(let t=o;t<=n;t+=e)i(t,e)}}}exports.fitDataset=f;
|
|
@@ -0,0 +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;
|