diff --git a/dist/index.d.ts b/dist/index.d.ts index 1041560..527a5f8 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -13,6 +13,7 @@ export declare function drawChart(ctx: CanvasRenderingContext2D, seriesList: Cha cursorX?: number | null; maxTimeDelta?: number | null; dateFormat?: (ts: number) => string; + averageData?: number | null; }): void; export declare function createChartElement(seriesList: ChartSeries[], opts: { width?: number; diff --git a/dist/uchart.js b/dist/uchart.js index efb20e7..5eef91f 100644 --- a/dist/uchart.js +++ b/dist/uchart.js @@ -1 +1 @@ -function N(t,u,o){let{width:a,height:m,min:Y,max:n,showYAxis:x=!1,yTicks:w=5,cursorX:s=null,maxTimeDelta:P}=o,c=10,k=m-c-10,y=u.flatMap(l=>l.data.map(i=>i[1])),E=u.flatMap(l=>l.data.map(i=>i[0])),p=Y!==void 0?Y:Math.min(...y),e=n!==void 0?n:Math.max(...y),r=e-p||1,C=Math.min(...E),L=Math.max(...E)-C||1;if(t.clearRect(0,0,a,m),x){t.beginPath(),t.strokeStyle="#aaa",t.lineWidth=1,t.font="15px sans-serif",t.fillStyle=u[0]?.strokeColor||"#000";for(let l=0;l<=w;l++){let i=p+r*l/w,T=c+(1-(i-p)/r)*k;t.moveTo(0,T),t.lineTo(5,T),t.fillText(i.toFixed(2),8,T+5)}t.stroke()}for(let l of u){let i=l.data,T=l.strokeColor||"#000";t.beginPath(),t.strokeStyle=T,t.lineWidth=1;let g=!1,d=null,F=P||600;for(let b=0;be){g=!1,d=null;continue}d!=null&&v-d>F&&(g=!1);let f=(v-C)/L*a,M=c+(1-(h-p)/r)*k;g?t.lineTo(f,M):(t.moveTo(f,M),g=!0),d=v}t.stroke()}if(s!==null&&s>=0&&s<=a){let l=C+s/a*L;t.beginPath(),t.strokeStyle="#888",t.lineWidth=1,t.moveTo(s,0),t.lineTo(s,m),t.stroke(),t.font="12px sans-serif";let i=15;t.fillStyle="#fff";let T=o.dateFormat??(g=>new Date(g).toLocaleTimeString());t.fillText(T(l),s+6,i),i+=15;for(let g of u){let{data:d,strokeColor:F="#fff"}=g,b=d[0],v=Math.abs(b[0]-l);for(let h=1;h{e.style.position="absolute",e.style.top=e.style.left="0",e.style.width=e.style.height="100%",o.appendChild(e)}),m.style.pointerEvents="none";let Y=a.getContext("2d"),n=m.getContext("2d"),x=t,w={...u},s=null,P=!1,c=()=>{let e=o.clientWidth,r=o.clientHeight;!e||!r||a.width===e&&a.height===r||(a.width=e,a.height=r,m.width=e,m.height=r,k(),y(s))},R=typeof ResizeObserver<"u"?new ResizeObserver(c):null;R?.observe(o),window.addEventListener("resize",c);let k=()=>{N(Y,x,{...w,width:a.width,height:a.height})},y=e=>{if(n.clearRect(0,0,m.width,m.height),e==null)return;let r=x.flatMap(f=>f.data.map(M=>M[1])),C=x.flatMap(f=>f.data.map(M=>M[0])),z=w.min??Math.min(...r),l=(w.max??Math.max(...r))-z||1,i=Math.min(...C),g=Math.max(...C)-i||1,d=i+e/a.width*g;n.beginPath(),n.strokeStyle="#888",n.lineWidth=1,n.moveTo(e,0),n.lineTo(e,m.height),n.stroke(),n.font="12px sans-serif",n.fillStyle="#fff";let F=w.dateFormat??(f=>new Date(f).toLocaleTimeString());n.fillText(F(d),e>a.width-100?e-100:e+6,15);let b=10,h=m.height-b-10,S=30;for(let{data:f,strokeColor:M="#fff"}of x){let D=f[0],O=Math.abs(D[0]-d);for(let A=1;Aa.width-100?e-100:e+6,S),S+=15;let W=b+(1-(D[1]-z)/l)*h;n.beginPath(),n.arc(e,W,3,0,Math.PI*2),n.fill()}},E=e=>{let r=o.getBoundingClientRect(),C=a.width/r.width;s=(e.clientX-r.left)*C,P||(P=!0,requestAnimationFrame(()=>{y(s),P=!1}))},p=()=>{s=null,y(null)};return o.addEventListener("mousemove",E),o.addEventListener("mouseleave",p),setTimeout(c,0),{element:o,setSeries(e){x=e,c(),k(),y(s)},setOptions(e){w={...w,...e},c(),k(),y(s)},destroy(){R?.disconnect(),window.removeEventListener("resize",c),o.removeEventListener("mousemove",E),o.removeEventListener("mouseleave",p)}}}export{X as createChartElement,N as drawChart}; +function X(e,r=5){if(e.lengths.data.map(l=>l[1])),D=r.flatMap(s=>s.data.map(l=>l[0])),p=x!==void 0?x:Math.min(...w),t=a!==void 0?a:Math.max(...w),h=t-p||1,C=Math.min(...D),O=Math.max(...D)-C||1;if(e.clearRect(0,0,n,i),k){e.beginPath(),e.strokeStyle="#aaa",e.lineWidth=1,e.font="15px sans-serif",e.fillStyle=r[0]?.strokeColor||"#000";for(let s=0;s<=y;s++){let l=p+h*s/y,M=c+(1-(l-p)/h)*S;e.moveTo(0,M),e.lineTo(5,M),e.fillText(l.toFixed(2),8,M+5)}e.stroke()}for(let s of r){let l=X(s.data,o.averageData??1),M=s.strokeColor||"#000";e.beginPath(),e.strokeStyle=M,e.lineWidth=1;let g=!1,d=null,F=E||600;for(let b=0;bt){g=!1,d=null;continue}d!=null&&v-d>F&&(g=!1);let f=(v-C)/O*n,T=c+(1-(u-p)/h)*S;g?e.lineTo(f,T):(e.moveTo(f,T),g=!0),d=v}e.stroke()}if(m!==null&&m>=0&&m<=n){let s=C+m/n*O;e.beginPath(),e.strokeStyle="#888",e.lineWidth=1,e.moveTo(m,0),e.lineTo(m,i),e.stroke(),e.font="12px sans-serif";let l=15;e.fillStyle="#fff";let M=o.dateFormat??(g=>new Date(g).toLocaleTimeString());e.fillText(M(s),m+6,l),l+=15;for(let g of r){let{data:d,strokeColor:F="#fff"}=g,b=d[0],v=Math.abs(b[0]-s);for(let u=1;u{t.style.position="absolute",t.style.top=t.style.left="0",t.style.width=t.style.height="100%",o.appendChild(t)}),i.style.pointerEvents="none";let x=n.getContext("2d"),a=i.getContext("2d"),k=e,y={...r},m=null,E=!1,c=()=>{let t=o.clientWidth,h=o.clientHeight;!t||!h||n.width===t&&n.height===h||(n.width=t,n.height=h,i.width=t,i.height=h,S(),w(m))},R=typeof ResizeObserver<"u"?new ResizeObserver(c):null;R?.observe(o),window.addEventListener("resize",c);let S=()=>{z(x,k,{...y,width:n.width,height:n.height})},w=t=>{if(a.clearRect(0,0,i.width,i.height),t==null)return;let h=k.flatMap(f=>f.data.map(T=>T[1])),C=k.flatMap(f=>f.data.map(T=>T[0])),L=y.min??Math.min(...h),s=(y.max??Math.max(...h))-L||1,l=Math.min(...C),g=Math.max(...C)-l||1,d=l+t/n.width*g;a.beginPath(),a.strokeStyle="#888",a.lineWidth=1,a.moveTo(t,0),a.lineTo(t,i.height),a.stroke(),a.font="12px sans-serif",a.fillStyle="#fff";let F=y.dateFormat??(f=>new Date(f).toLocaleTimeString());a.fillText(F(d),t>n.width-100?t-100:t+6,15);let b=10,u=i.height-b-10,P=30;for(let{data:f,strokeColor:T="#fff"}of k){let Y=f[0],V=Math.abs(Y[0]-d);for(let A=1;An.width-100?t-100:t+6,P),P+=15;let N=b+(1-(Y[1]-L)/s)*u;a.beginPath(),a.arc(t,N,3,0,Math.PI*2),a.fill()}},D=t=>{let h=o.getBoundingClientRect(),C=n.width/h.width;m=(t.clientX-h.left)*C,E||(E=!0,requestAnimationFrame(()=>{w(m),E=!1}))},p=()=>{m=null,w(null)};return o.addEventListener("mousemove",D),o.addEventListener("mouseleave",p),setTimeout(c,0),{element:o,setSeries(t){k=t,c(),S(),w(m)},setOptions(t){y={...y,...t},c(),S(),w(m)},destroy(){R?.disconnect(),window.removeEventListener("resize",c),o.removeEventListener("mousemove",D),o.removeEventListener("mouseleave",p)}}}export{H as createChartElement,z as drawChart}; diff --git a/package.json b/package.json index 317042a..7ac367e 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,12 @@ "publishConfig": { "access": "public" }, - "version": "1.0.11", + "version": "1.0.10", "description": "Lightweight charting library for the browser and Node.js", "license": "MIT", "repository": { "type": "git", - "url": "https://git.meteolab.online/mi/uChart" + "url": "https://git.mipem.co/mi/uChart" }, "keywords": [ "chart",