chartai 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chart-library.d.ts +1 -0
- package/dist/chart-library.d.ts.map +1 -1
- package/dist/chart-library.js +43 -11
- package/dist/chart-library.min.js +1 -1
- package/dist/charts/area.js +1 -1
- package/dist/charts/area.min.js +1 -1
- package/dist/charts/bar.js +1 -1
- package/dist/charts/bar.min.js +1 -1
- package/dist/charts/boids.js +9 -9
- package/dist/charts/boids.min.js +1 -1
- package/dist/charts/candlestick.js +5 -127
- package/dist/charts/candlestick.min.js +1 -32
- package/dist/charts/experimental/baseline-area.js +70 -0
- package/dist/charts/experimental/baseline-area.min.js +1 -0
- package/dist/charts/experimental/bubble.js +48 -0
- package/dist/charts/experimental/bubble.min.js +1 -0
- package/dist/charts/experimental/error-band.js +111 -0
- package/dist/charts/experimental/error-band.min.js +1 -0
- package/dist/charts/experimental/heatmap.js +69 -0
- package/dist/charts/experimental/heatmap.min.js +1 -0
- package/dist/charts/experimental/histogram.js +139 -0
- package/dist/charts/experimental/histogram.min.js +7 -0
- package/dist/charts/experimental/ohlc.js +132 -0
- package/dist/charts/experimental/ohlc.min.js +32 -0
- package/dist/charts/experimental/step.js +67 -0
- package/dist/charts/experimental/step.min.js +1 -0
- package/dist/charts/experimental/waterfall.js +121 -0
- package/dist/charts/experimental/waterfall.min.js +7 -0
- package/dist/charts/line.js +1 -1
- package/dist/charts/line.min.js +1 -1
- package/dist/charts/scatter.js +1 -1
- package/dist/charts/scatter.min.js +1 -1
- package/dist/{chunk-e7d3zgw5.min.js → chunk-0eh4rzy9.min.js} +1 -1
- package/dist/{chunk-a27be8p9.js → chunk-1ngxm8t2.js} +25 -1
- package/dist/chunk-50bcv2hw.min.js +2 -0
- package/dist/{chunk-dmaxrg6s.min.js → chunk-64q9a7nw.min.js} +1 -1
- package/dist/{chunk-me3qaz3m.min.js → chunk-bbyt23tw.min.js} +1 -1
- package/dist/chunk-cbydth3q.min.js +2 -0
- package/dist/chunk-cvtt04m6.min.js +2 -0
- package/dist/chunk-g2qmt43n.min.js +33 -0
- package/dist/{chunk-1p45ex5n.min.js → chunk-gm0d4cgx.min.js} +2 -2
- package/dist/chunk-mmsy3yqt.js +27 -0
- package/dist/{chunk-g6m56ptf.js → chunk-n8ew0z0e.js} +38 -10
- package/dist/chunk-t0kdz02m.js +129 -0
- package/dist/{chunk-bfyv7z27.min.js → chunk-wdfq2fpx.min.js} +1 -1
- package/dist/gpu-worker.js +8 -3
- package/dist/gpu-worker.min.js +1 -1
- package/dist/plugins/experimental/annotations.js +164 -0
- package/dist/plugins/experimental/annotations.min.js +1 -0
- package/dist/plugins/experimental/crosshair.js +82 -0
- package/dist/plugins/experimental/crosshair.min.js +1 -0
- package/dist/plugins/experimental/minimap.js +190 -0
- package/dist/plugins/experimental/minimap.min.js +1 -0
- package/dist/plugins/experimental/range-selector.js +220 -0
- package/dist/plugins/experimental/range-selector.min.js +1 -0
- package/dist/plugins/experimental/ruler.js +434 -0
- package/dist/plugins/experimental/ruler.min.js +59 -0
- package/dist/plugins/experimental/stats.js +229 -0
- package/dist/plugins/experimental/stats.min.js +8 -0
- package/dist/plugins/experimental/threshold.js +96 -0
- package/dist/plugins/experimental/threshold.min.js +1 -0
- package/dist/plugins/experimental/tooltip-pin.js +177 -0
- package/dist/plugins/experimental/tooltip-pin.min.js +1 -0
- package/dist/plugins/experimental/watermark.js +76 -0
- package/dist/plugins/experimental/watermark.min.js +1 -0
- package/dist/plugins/hover.d.ts.map +1 -1
- package/dist/plugins/hover.js +12 -30
- package/dist/plugins/hover.min.js +1 -1
- package/dist/plugins/labels-panel.js +3 -3
- package/dist/plugins/labels-panel.min.js +1 -1
- package/dist/plugins/labels.d.ts.map +1 -1
- package/dist/plugins/labels.js +3 -3
- package/dist/plugins/labels.min.js +1 -1
- package/dist/plugins/legend.d.ts.map +1 -1
- package/dist/plugins/legend.js +87 -16
- package/dist/plugins/legend.min.js +23 -7
- package/dist/plugins/zoom.js +2 -2
- package/dist/plugins/zoom.min.js +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/worker-inline.d.ts +1 -1
- package/dist/worker-inline.d.ts.map +1 -1
- package/package.json +1 -1
- package/readme.md +6 -3
- package/dist/chunk-94kc81rr.min.js +0 -2
- package/dist/chunk-qr6mweck.min.js +0 -2
- /package/dist/{chunk-m17t3vjq.js → chunk-5gtx3pza.js} +0 -0
package/dist/plugins/hover.js
CHANGED
|
@@ -1,40 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
dataToScreen,
|
|
3
|
+
screenToData
|
|
4
|
+
} from "../chunk-mmsy3yqt.js";
|
|
1
5
|
import {
|
|
2
6
|
DEFAULT_FONT
|
|
3
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-1ngxm8t2.js";
|
|
4
8
|
import {
|
|
5
9
|
MARGIN
|
|
6
10
|
} from "../chunk-831dem4f.js";
|
|
7
11
|
import {
|
|
8
12
|
ChartManager
|
|
9
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-n8ew0z0e.js";
|
|
10
14
|
import"../chunk-93yrr7er.js";
|
|
11
|
-
import"../chunk-
|
|
12
|
-
|
|
13
|
-
// src/plugins/coords.ts
|
|
14
|
-
function dataToScreen(dataX, dataY, chart, width, height) {
|
|
15
|
-
const rX = chart.bounds.maxX - chart.bounds.minX;
|
|
16
|
-
const rY = chart.bounds.maxY - chart.bounds.minY;
|
|
17
|
-
const vW = rX / chart.view.zoomX;
|
|
18
|
-
const vH = rY / chart.view.zoomY;
|
|
19
|
-
const vMinX = chart.bounds.minX + chart.view.panX * rX;
|
|
20
|
-
const vMinY = chart.bounds.minY + chart.view.panY * rY;
|
|
21
|
-
return {
|
|
22
|
-
x: (dataX - vMinX) / vW * width,
|
|
23
|
-
y: height * (1 - (dataY - vMinY) / vH)
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
function screenToData(screenX, screenY, chart, width, height) {
|
|
27
|
-
const rX = chart.bounds.maxX - chart.bounds.minX;
|
|
28
|
-
const rY = chart.bounds.maxY - chart.bounds.minY;
|
|
29
|
-
const vW = rX / chart.view.zoomX;
|
|
30
|
-
const vH = rY / chart.view.zoomY;
|
|
31
|
-
const vMinX = chart.bounds.minX + chart.view.panX * rX;
|
|
32
|
-
const vMinY = chart.bounds.minY + chart.view.panY * rY;
|
|
33
|
-
return {
|
|
34
|
-
x: vMinX + screenX / width * vW,
|
|
35
|
-
y: vMinY + (1 - screenY / height) * vH
|
|
36
|
-
};
|
|
37
|
-
}
|
|
15
|
+
import"../chunk-5gtx3pza.js";
|
|
38
16
|
|
|
39
17
|
// src/plugins/hover.ts
|
|
40
18
|
var MAX_HOVER_PX = 50;
|
|
@@ -47,6 +25,8 @@ function findNearestPoint(chart, screenX, screenY, width, height) {
|
|
|
47
25
|
const vMinX = chart.bounds.minX + chart.view.panX * rX;
|
|
48
26
|
let bsi = -1, bi = -1, bdx = Infinity, bdy = Infinity;
|
|
49
27
|
for (let s = 0;s < chart.series.length; s++) {
|
|
28
|
+
if (chart.config?.hiddenSeries?.has(s))
|
|
29
|
+
continue;
|
|
50
30
|
const sr2 = chart.series[s];
|
|
51
31
|
const n = sr2.rawX.length;
|
|
52
32
|
if (n === 0)
|
|
@@ -179,7 +159,9 @@ var hoverPlugin = {
|
|
|
179
159
|
ctx.fill();
|
|
180
160
|
ctx.strokeStyle = dark ? "rgba(0,0,0,0.6)" : "rgba(255,255,255,0.9)";
|
|
181
161
|
ctx.stroke();
|
|
182
|
-
const seriesData = chart.series.map((ser) => {
|
|
162
|
+
const seriesData = chart.series.map((ser, si) => {
|
|
163
|
+
if (chart.config?.hiddenSeries?.has(si))
|
|
164
|
+
return null;
|
|
183
165
|
let l = 0, r = ser.rawX.length - 1;
|
|
184
166
|
while (l <= r) {
|
|
185
167
|
const m = l + r >> 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{j as W,k as B}from"../chunk-cbydth3q.js";import{l as V}from"../chunk-cvtt04m6.js";import{o as L}from"../chunk-0eh4rzy9.js";import{q as I}from"../chunk-50bcv2hw.js";import"../chunk-wdfq2fpx.js";import"../chunk-bbyt23tw.js";var _=50;function q(e,t,r,i,o){if(e.series.length===0)return null;let{x:a,y:s}=B(t,r,e,i,o),l=e.bounds.maxX-e.bounds.minX,g=l/e.view.zoomX,f=e.bounds.minX+e.view.panX*l,b=-1,u=-1,M=1/0,Y=1/0;for(let p=0;p<e.series.length;p++){if(e.config?.hiddenSeries?.has(p))continue;let h=e.series[p],A=h.rawX.length;if(A===0)continue;let m=0,d=A-1;while(m<d){let S=m+d>>1;if(h.rawX[S]<a)m=S+1;else d=S}let X=m;if(m>0&&Math.abs(h.rawX[m-1]-a)<Math.abs(h.rawX[m]-a))X=m-1;let C=Math.abs(h.rawX[X]-a),$=Math.abs(h.rawY[X]-s);if(C<M||C===M&&$<Y)M=C,Y=$,b=p,u=X}if(b===-1)return null;let c=e.series[b];if(Math.abs((c.rawX[u]-f)/g*i-t)>_)return null;return{x:c.rawX[u],y:c.rawY[u],index:u,screenX:t,screenY:r,seriesIndex:b,seriesLabel:c.label}}var k=new WeakMap,O=(e,t,r,i,o,a,s,l)=>{e.beginPath(),e.roundRect(t,r,i,o,a),e.fillStyle=s,e.fill(),e.strokeStyle=l,e.lineWidth=1.5,e.stroke()},Q={name:"hover",install(e,t){let r=I,i=new AbortController,o={hoverResult:null,pillX:0,pillY:0,pillTargetX:0,pillTargetY:0,pillAnimRef:null,abort:i};k.set(e,o);let a=(l)=>{if(e.config.onHover)e.config.onHover(l);if(!(e.config.showTooltip??!1))return;if(o.hoverResult=l,r.drawChart(e),l&&!o.pillAnimRef){let g=performance.now(),f=(b)=>{if(!o.hoverResult)return o.pillAnimRef=null;let u=1-Math.pow(0.5,(b-g)/(e.config.pillDecayMs??60));g=b,o.pillX+=(o.pillTargetX-o.pillX)*u,o.pillY+=(o.pillTargetY-o.pillY)*u,r.drawChart(e),o.pillAnimRef=requestAnimationFrame(f)};o.pillAnimRef=requestAnimationFrame(f)}},s=(l,g)=>{if(e.dragging)return;let f=t.getBoundingClientRect();a(q(e,l-f.left,g-f.top,f.width,f.height))};t.addEventListener("mousemove",(l)=>s(l.clientX,l.clientY),{signal:i.signal}),t.addEventListener("touchmove",(l)=>{if(l.touches.length===1)s(l.touches[0].clientX,l.touches[0].clientY)},{signal:i.signal,passive:!0}),["mouseleave","pointerdown","touchend","touchcancel"].forEach((l)=>t.addEventListener(l,()=>a(null),{signal:i.signal}))},afterDraw(e,t){let r=k.get(t);if(!r?.hoverResult||!t.config.showTooltip)return;let{hoverResult:i}=r,o=t.width,a=t.height,s=L,l=I.isDark,{formatX:g=String,formatY:f=String,fontFamily:b=V}=t.config,{x:u,y:M}=W(i.x,i.y,t,o,a),Y=t.series[i.seriesIndex]||t.series[0],c=`${Math.round(Y.color.r*255)},${Math.round(Y.color.g*255)},${Math.round(Y.color.b*255)}`,p=`rgb(${c})`,h=l?`oklch(from ${p} calc(l + 0.1) c h)`:p;e.save(),e.setLineDash([4,3]),e.strokeStyle=`rgba(${c},0.4)`,e.stroke(new Path2D(`M${u} 0V${a-s.bottom}M${s.left} ${M}H${o}`)),e.restore(),e.beginPath(),e.arc(u,M,4.5,0,Math.PI*2),e.fillStyle=p,e.fill(),e.strokeStyle=l?"rgba(0,0,0,0.6)":"rgba(255,255,255,0.9)",e.stroke();let A=t.series.map((n,v)=>{if(t.config?.hiddenSeries?.has(v))return null;let w=0,y=n.rawX.length-1;while(w<=y){let T=w+y>>1;if(Math.abs(n.rawX[T]-i.x)<0.0001)return{label:n.label,val:f(n.rawY[T]),rawVal:n.rawY[T],col:`rgb(${Math.round(n.color.r*255)},${Math.round(n.color.g*255)},${Math.round(n.color.b*255)})`};n.rawX[T]<i.x?w=T+1:y=T-1}return null}).filter((n)=>n!==null);A.sort((n,v)=>Math.abs(v.rawVal)-Math.abs(n.rawVal));let m=A.length,d=A.slice(0,5),X=m-d.length;if(r.pillTargetX=u,r.pillTargetY=M,!r.pillAnimRef)r.pillX=u,r.pillY=M;let C=(n,v,w,y)=>{e.font=`600 10px ${b}`;let T=e.measureText(w).width,H=T+12,P=18,z=y?n-H/2:n-H,G=y?v:v-P/2;e.save();let N=y?Math.atan((r.pillTargetX-r.pillX)/80)*0.2:Math.atan((r.pillTargetY-r.pillY)/80)*0.2;e.translate(n,v),e.rotate(N);let E=y?-H/2:-H,F=y?0:-P/2;e.beginPath(),e.roundRect(E,F,H,P,4),e.fillStyle=l?"rgba(0,0,0,0.75)":"rgba(255,255,255,0.75)",e.fill(),e.fillStyle=`rgba(${c},0.2)`,e.fill(),e.strokeStyle=h,e.lineWidth=1.5,e.stroke(),e.fillStyle=h,e.textAlign="center",e.textBaseline="middle",e.fillText(w,E+H/2,F+P/2),e.restore()};C(Math.max(s.left,Math.min(o-s.right,r.pillX)),a-s.bottom+4,g(i.x),!0),C(s.left,Math.max(9,Math.min(a-s.bottom-9,r.pillY)),f(i.y),!1);let $=Math.max(...d.map((n)=>e.measureText(n.label+n.val).width))+40,S=30+d.length*18+(X>0?18:0),R=i.screenX+14,D=i.screenY-S-6;if(R+$>o)R=i.screenX-$-14;if(D=Math.max(4,Math.min(a-S-4,i.screenY-S-6)),O(e,R,D,$,S,6,l?"rgba(28,28,30,0.95)":"rgba(255,255,255,0.96)","rgba(0,0,0,0.08)"),e.textAlign="left",e.textBaseline="middle",e.fillStyle=l?"#888":"#999",e.fillText(g(i.x),R+10,D+15),d.forEach((n,v)=>{let w=D+35+v*18;e.fillStyle=n.col,e.beginPath(),e.roundRect(R+10,w-4,8,8,2),e.fill(),e.fillStyle=l?"#eee":"#1a1a1a",e.fillText(`${n.label}: ${n.val}`,R+24,w)}),X>0){let n=D+35+d.length*18;e.fillStyle=l?"#666":"#aaa",e.fillText(`+${X} more`,R+10,n)}},uninstall(e){let t=k.get(e);if(t?.pillAnimRef)cancelAnimationFrame(t.pillAnimRef);t?.abort.abort(),k.delete(e)}};export{Q as hoverPlugin};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DEFAULT_FONT,
|
|
3
3
|
DEFAULT_LABEL_SIZE
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-1ngxm8t2.js";
|
|
5
5
|
import {
|
|
6
6
|
MARGIN
|
|
7
7
|
} from "../chunk-831dem4f.js";
|
|
8
8
|
import {
|
|
9
9
|
ChartManager
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-n8ew0z0e.js";
|
|
11
11
|
import"../chunk-93yrr7er.js";
|
|
12
|
-
import"../chunk-
|
|
12
|
+
import"../chunk-5gtx3pza.js";
|
|
13
13
|
|
|
14
14
|
// src/plugins/labels-panel.ts
|
|
15
15
|
var niceTicks = (min, max, count) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as C,m as M}from"../chunk-cvtt04m6.js";import{o as y}from"../chunk-0eh4rzy9.js";import{q as T}from"../chunk-50bcv2hw.js";import"../chunk-wdfq2fpx.js";import"../chunk-bbyt23tw.js";var d=(o,f,n)=>{let t=f-o;if(t<=0)return[o];let e=t/n,l=10**Math.floor(Math.log10(e)),a=e/l,r=l*(a<=1.5?1:a<=3?2:a<=7?5:10),m=[];for(let s=Math.ceil(o/r)*r;s<=f;s+=r)m.push(s);return m},p=(o)=>{let{width:f,height:n}=o,t=y,{bounds:e,view:l}=o,a=e.maxX-e.minX,r=e.maxY-e.minY,m=a/l.zoomX,s=r/l.zoomY,b=e.minX+l.panX*a,i=e.minY+l.panY*r,g=o.config.bgColor??(T.isDark?[0.11,0.11,0.12]:[0.98,0.98,0.98]);return{w:f,h:n,m:t,rx:m,ry:s,mx:b,my:i,bg:`rgb(${Math.round(g[0]*255)},${Math.round(g[1]*255)},${Math.round(g[2]*255)})`,bgAlpha:`rgba(${Math.round(g[0]*255)},${Math.round(g[1]*255)},${Math.round(g[2]*255)},0.95)`,border:T.isDark?"rgba(255,255,255,0.15)":"rgba(0,0,0,0.15)",font:o.config.fontFamily??C,text:o.config.textColor??(T.isDark?"#c0c0c0":"#333333"),grid:o.config.gridColor??(T.isDark?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)")}},E={name:"labels-panel",beforeDraw(o,f){let{w:n,h:t,m:e,rx:l,ry:a,mx:r,my:m,grid:s}=p(f);o.strokeStyle=s,o.lineWidth=1,o.beginPath(),d(m,m+a,7).forEach((b)=>{let i=t*(1-(b-m)/a);if(i>5&&i<t-e.bottom-5)o.moveTo(e.left,i),o.lineTo(n,i)}),d(r,r+l,8).forEach((b)=>{let i=n*((b-r)/l);if(i>e.left&&i<n)o.moveTo(i,0),o.lineTo(i,t-e.bottom)}),o.stroke()},afterDraw(o,f){let{w:n,h:t,m:e,rx:l,ry:a,mx:r,my:m,bgAlpha:s,border:b,font:i,text:g}=p(f),{formatX:k=String,formatY:v=String,labelSize:S=M}=f.config;o.fillStyle=s,o.fillRect(0,0,e.left,t-e.bottom),o.fillRect(0,t-e.bottom,n,e.bottom),o.strokeStyle=b,o.lineWidth=1,o.beginPath(),o.moveTo(0,0),o.lineTo(e.left,0),o.moveTo(e.left,0),o.lineTo(e.left,t-e.bottom),o.moveTo(0,0),o.lineTo(0,t),o.moveTo(0,t),o.lineTo(n,t),o.moveTo(e.left,t-e.bottom),o.lineTo(n,t-e.bottom),o.moveTo(n,t-e.bottom),o.lineTo(n,t),o.stroke(),o.font=`${S}px ${i}`,o.fillStyle=g,o.textAlign="center",o.textBaseline="middle",d(m,m+a,7).forEach((u)=>{let h=t*(1-(u-m)/a);if(h>5&&h<t-e.bottom-5)o.fillText(v(u),e.left/2,h)}),o.textAlign="right",o.textBaseline="top",d(r,r+l,8).forEach((u)=>{let h=n*((u-r)/l);if(h<e.left-10||h>n+30)return;o.save(),o.translate(h,t-e.bottom*0.7),o.rotate(-Math.PI/14),o.fillText(k(u),0,0),o.restore()})}};export{E as labelsPanelPlugin};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/plugins/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAI3E,eAAO,MAAM,YAAY,2EAC+C,CAAC;AACzE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAED,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,mBAAmB;QAC3B,MAAM,EAAE,YAAY,CAAC;KACtB;CACF;
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/plugins/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAI3E,eAAO,MAAM,YAAY,2EAC+C,CAAC;AACzE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAED,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,mBAAmB;QAC3B,MAAM,EAAE,YAAY,CAAC;KACtB;CACF;AA6DD,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,YAAY,CAmGlD,CAAC"}
|
package/dist/plugins/labels.js
CHANGED
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
DEFAULT_FONT,
|
|
3
3
|
DEFAULT_LABEL_SIZE,
|
|
4
4
|
labelsPlugin
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-1ngxm8t2.js";
|
|
6
6
|
import"../chunk-831dem4f.js";
|
|
7
|
-
import"../chunk-
|
|
7
|
+
import"../chunk-n8ew0z0e.js";
|
|
8
8
|
import"../chunk-93yrr7er.js";
|
|
9
|
-
import"../chunk-
|
|
9
|
+
import"../chunk-5gtx3pza.js";
|
|
10
10
|
export {
|
|
11
11
|
labelsPlugin,
|
|
12
12
|
DEFAULT_LABEL_SIZE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as a,m as b,n as c}from"../chunk-cvtt04m6.js";import"../chunk-0eh4rzy9.js";import"../chunk-50bcv2hw.js";import"../chunk-wdfq2fpx.js";import"../chunk-bbyt23tw.js";export{c as labelsPlugin,b as DEFAULT_LABEL_SIZE,a as DEFAULT_FONT};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legend.d.ts","sourceRoot":"","sources":["../../src/plugins/legend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAI3E,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,mBAAmB;QAC3B,MAAM,EAAE,YAAY,CAAC;KACtB;CACF;AAwED,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"legend.d.ts","sourceRoot":"","sources":["../../src/plugins/legend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAI3E,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,mBAAmB;QAC3B,MAAM,EAAE,YAAY,CAAC;KACtB;CACF;AAwED,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,YAAY,CA2IlD,CAAC"}
|
package/dist/plugins/legend.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DEFAULT_FONT,
|
|
3
3
|
DEFAULT_LABEL_SIZE
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-1ngxm8t2.js";
|
|
5
5
|
import"../chunk-831dem4f.js";
|
|
6
6
|
import {
|
|
7
7
|
ChartManager
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-n8ew0z0e.js";
|
|
9
9
|
import"../chunk-93yrr7er.js";
|
|
10
|
-
import"../chunk-
|
|
10
|
+
import"../chunk-5gtx3pza.js";
|
|
11
11
|
|
|
12
12
|
// src/plugins/legend.ts
|
|
13
13
|
var ICON_SIZE = 28;
|
|
@@ -42,8 +42,8 @@ var LEGEND_HTML = `
|
|
|
42
42
|
<div class="chart-legend-overlay" style="position:absolute;inset:0;pointer-events:none;z-index:20">
|
|
43
43
|
<div class="chart-legend-container" style="position:absolute;top:4px;right:4px;width:${ICON_SIZE}px;height:${ICON_SIZE}px;overflow:hidden;border-radius:50%;pointer-events:auto;transition:width .2s ease,height .2s ease,border-radius .2s ease">
|
|
44
44
|
<button type="button" class="chart-legend-icon" title="Legend" style="position:absolute;inset:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;border:none;border-radius:inherit;cursor:pointer;flex-shrink:0;transition:transform .18s ease,opacity .2s ease"><svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/></svg></button>
|
|
45
|
-
<div class="chart-legend-panel" style="position:absolute;inset:0;display:none;flex-direction:column;overflow:hidden;border-radius:inherit
|
|
46
|
-
<div class="chart-legend-scroll" style="flex:1;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch">
|
|
45
|
+
<div class="chart-legend-panel" style="position:absolute;inset:0;display:none;flex-direction:column;overflow:hidden;border-radius:inherit">
|
|
46
|
+
<div class="chart-legend-scroll" style="flex:1;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:10px 12px">
|
|
47
47
|
<div class="chart-legend-list" style="display:flex;flex-direction:column;gap:4px"></div>
|
|
48
48
|
</div>
|
|
49
49
|
</div>
|
|
@@ -81,6 +81,37 @@ var legendPlugin = {
|
|
|
81
81
|
passive: false,
|
|
82
82
|
signal: ac.signal
|
|
83
83
|
});
|
|
84
|
+
list.addEventListener("pointerdown", (e) => {
|
|
85
|
+
const row = e.target.closest(".chart-legend-row");
|
|
86
|
+
if (!row)
|
|
87
|
+
return;
|
|
88
|
+
e.stopPropagation();
|
|
89
|
+
e.preventDefault();
|
|
90
|
+
const idx = Number(row.dataset.series);
|
|
91
|
+
if (isNaN(idx))
|
|
92
|
+
return;
|
|
93
|
+
const current = new Set(chart.config.hiddenSeries ?? []);
|
|
94
|
+
if (current.has(idx))
|
|
95
|
+
current.delete(idx);
|
|
96
|
+
else
|
|
97
|
+
current.add(idx);
|
|
98
|
+
const isNowHidden = current.has(idx);
|
|
99
|
+
const ser = chart.series[idx];
|
|
100
|
+
if (ser) {
|
|
101
|
+
const col = `rgb(${ser.color.r * 100}% ${ser.color.g * 100}% ${ser.color.b * 100}%)`;
|
|
102
|
+
const swatch = row.querySelector(".chart-legend-swatch");
|
|
103
|
+
const labelEl = row.querySelector(".chart-legend-label");
|
|
104
|
+
swatch.style.background = isNowHidden ? "transparent" : col;
|
|
105
|
+
swatch.style.border = isNowHidden ? `1.5px solid ${col}` : "";
|
|
106
|
+
labelEl.style.opacity = isNowHidden ? "0.4" : "";
|
|
107
|
+
swatch.classList.remove("chart-legend-swatch--bounce");
|
|
108
|
+
labelEl.classList.remove("chart-legend-label--bounce");
|
|
109
|
+
swatch.offsetWidth;
|
|
110
|
+
swatch.classList.add("chart-legend-swatch--bounce");
|
|
111
|
+
labelEl.classList.add("chart-legend-label--bounce");
|
|
112
|
+
}
|
|
113
|
+
ChartManager.setHiddenSeries(chart.id, [...current]);
|
|
114
|
+
}, { capture: true, signal: ac.signal });
|
|
84
115
|
const cfg = getLegendConfig(chart);
|
|
85
116
|
const alwaysOpen = cfg.alwaysOpen ?? false;
|
|
86
117
|
const defaultOpen = cfg.defaultOpen ?? false;
|
|
@@ -188,35 +219,59 @@ function syncSeries(chart) {
|
|
|
188
219
|
const s = states.get(chart);
|
|
189
220
|
if (!s)
|
|
190
221
|
return;
|
|
191
|
-
const series = chart.series;
|
|
192
222
|
const key = seriesKey(chart);
|
|
193
|
-
if (key === s.lastSeriesKey)
|
|
223
|
+
if (key === s.lastSeriesKey) {
|
|
224
|
+
applyHiddenState(chart, s);
|
|
194
225
|
return;
|
|
226
|
+
}
|
|
195
227
|
s.lastSeriesKey = key;
|
|
228
|
+
rebuildRows(chart, s);
|
|
229
|
+
}
|
|
230
|
+
function rebuildRows(chart, s) {
|
|
231
|
+
const series = chart.series;
|
|
196
232
|
const maxChars = getLegendConfig(chart).maxLabelChars ?? DEFAULT_MAX_LABEL_CHARS;
|
|
197
233
|
const labels = series.map((ser, i) => ser.label || `Series ${i + 1}`);
|
|
198
234
|
s.computedWidth = computePanelWidth(chart, labels);
|
|
199
|
-
const
|
|
235
|
+
const hidden = chart.config.hiddenSeries ?? new Set;
|
|
236
|
+
const rowBase = "display:flex;align-items:center;gap:8px;min-width:0;padding-right:8px;cursor:pointer;user-select:none";
|
|
200
237
|
const rowAnim = ";opacity:0;transform:translateY(6px);animation:chart-legend-row-in .25s cubic-bezier(.34,1.2,.64,1) forwards";
|
|
201
|
-
const
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
const g = Math.round(ser.color.g * 255);
|
|
206
|
-
const b = Math.round(ser.color.b * 255);
|
|
238
|
+
const swatchBase = "width:10px;height:10px;border-radius:2px;flex-shrink:0;box-sizing:border-box";
|
|
239
|
+
const labelBase = "min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:opacity .15s ease";
|
|
240
|
+
s.list.innerHTML = series.map((ser, i) => {
|
|
241
|
+
const col = `rgb(${ser.color.r * 100}% ${ser.color.g * 100}% ${ser.color.b * 100}%)`;
|
|
207
242
|
let label = ser.label || `Series ${i + 1}`;
|
|
208
243
|
if (label.length > maxChars)
|
|
209
244
|
label = label.slice(0, maxChars - 1) + "…";
|
|
210
245
|
const animDelay = Math.min(0.02 + i * 0.02, 0.02 + 7 * 0.02);
|
|
211
|
-
|
|
246
|
+
const isHidden = hidden.has(i);
|
|
247
|
+
const swatchStyle = isHidden ? `${swatchBase};background:transparent;border:1.5px solid ${col}` : `${swatchBase};background:${col}`;
|
|
248
|
+
const labelOpacity = isHidden ? "opacity:0.4;" : "";
|
|
249
|
+
return `<div class="chart-legend-row" data-series="${i}" style="${rowBase}${rowAnim};animation-delay:${animDelay}s"><span class="chart-legend-swatch" style="${swatchStyle}"></span><span class="chart-legend-label" style="${labelOpacity}${labelBase}">${escapeHtml(label)}</span></div>`;
|
|
212
250
|
}).join("");
|
|
213
|
-
s.list.innerHTML = rows;
|
|
214
251
|
if (s.open) {
|
|
215
252
|
const packedH = s.list.scrollHeight + 20;
|
|
216
253
|
s.container.style.width = `${s.computedWidth}px`;
|
|
217
254
|
s.container.style.height = `${Math.min(PANEL_MAX_HEIGHT, packedH)}px`;
|
|
218
255
|
}
|
|
219
256
|
}
|
|
257
|
+
function applyHiddenState(chart, s) {
|
|
258
|
+
const hidden = chart.config.hiddenSeries ?? new Set;
|
|
259
|
+
s.list.querySelectorAll(".chart-legend-row").forEach((row) => {
|
|
260
|
+
const i = Number(row.dataset.series);
|
|
261
|
+
if (isNaN(i))
|
|
262
|
+
return;
|
|
263
|
+
const ser = chart.series[i];
|
|
264
|
+
if (!ser)
|
|
265
|
+
return;
|
|
266
|
+
const col = `rgb(${ser.color.r * 100}% ${ser.color.g * 100}% ${ser.color.b * 100}%)`;
|
|
267
|
+
const isHidden = hidden.has(i);
|
|
268
|
+
const swatch = row.querySelector(".chart-legend-swatch");
|
|
269
|
+
const labelEl = row.querySelector(".chart-legend-label");
|
|
270
|
+
swatch.style.background = isHidden ? "transparent" : col;
|
|
271
|
+
swatch.style.border = isHidden ? `1.5px solid ${col}` : "";
|
|
272
|
+
labelEl.style.opacity = isHidden ? "0.4" : "";
|
|
273
|
+
});
|
|
274
|
+
}
|
|
220
275
|
function escapeHtml(s) {
|
|
221
276
|
const div = document.createElement("div");
|
|
222
277
|
div.textContent = s;
|
|
@@ -269,6 +324,22 @@ function injectLegendKeyframes() {
|
|
|
269
324
|
from { opacity: 0; transform: translateY(6px); }
|
|
270
325
|
to { opacity: 1; transform: translateY(0); }
|
|
271
326
|
}
|
|
327
|
+
@keyframes chart-legend-swatch-bounce {
|
|
328
|
+
0% { transform: scale(1); }
|
|
329
|
+
30% { transform: scale(1.5); }
|
|
330
|
+
60% { transform: scale(0.82); }
|
|
331
|
+
80% { transform: scale(1.12); }
|
|
332
|
+
100% { transform: scale(1); }
|
|
333
|
+
}
|
|
334
|
+
.chart-legend-swatch--bounce { animation: chart-legend-swatch-bounce 0.28s ease-out; }
|
|
335
|
+
@keyframes chart-legend-label-bounce {
|
|
336
|
+
0% { transform: scale(1); }
|
|
337
|
+
30% { transform: scale(1.05); }
|
|
338
|
+
60% { transform: scale(0.97); }
|
|
339
|
+
80% { transform: scale(1.02); }
|
|
340
|
+
100% { transform: scale(1); }
|
|
341
|
+
}
|
|
342
|
+
.chart-legend-label--bounce { animation: chart-legend-label-bounce 0.28s ease-out; }
|
|
272
343
|
.chart-legend-scroll::-webkit-scrollbar { width: 6px; }
|
|
273
344
|
.chart-legend-scroll::-webkit-scrollbar-track { background: transparent; }
|
|
274
345
|
.chart-legend-scroll::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.15); border-radius: 3px; }
|
|
@@ -1,21 +1,37 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as b,m as S}from"../chunk-cvtt04m6.js";import"../chunk-0eh4rzy9.js";import{q as C}from"../chunk-50bcv2hw.js";import"../chunk-wdfq2fpx.js";import"../chunk-bbyt23tw.js";var m=28,L=220,w=100,_=24,k=new WeakMap;function M(J){return J.config.legend??{}}function E(J){let q=C.isDark,Q=J.config.bgColor??(q?[0.11,0.11,0.12]:[0.98,0.98,0.98]),V=`${Math.round(Q[0]*255)},${Math.round(Q[1]*255)},${Math.round(Q[2]*255)}`,Y=q?"rgba(255,255,255,0.18)":"rgba(0,0,0,0.14)";return{panelBg:q?`rgba(${V},0.95)`:"rgba(255,255,255,0.98)",panelBorder:Y,closeBg:q?"rgba(0,0,0,0.35)":"rgba(255,255,255,0.98)",closeBgSolid:q?"rgba(0.2,0.2,0.22,0.98)":"rgba(255,255,255,0.98)",text:M(J).textColor??J.config.textColor??(q?"#c0c0c0":"#333333"),textMuted:q?"#888":"#999",font:M(J).fontFamily??J.config.fontFamily??b,labelSize:M(J).labelSize??J.config.labelSize??S}}var f=Math.round(m*0.8),g=180,p=`
|
|
2
2
|
<div class="chart-legend-overlay" style="position:absolute;inset:0;pointer-events:none;z-index:20">
|
|
3
|
-
<div class="chart-legend-container" style="position:absolute;top:4px;right:4px;width:${
|
|
3
|
+
<div class="chart-legend-container" style="position:absolute;top:4px;right:4px;width:${m}px;height:${m}px;overflow:hidden;border-radius:50%;pointer-events:auto;transition:width .2s ease,height .2s ease,border-radius .2s ease">
|
|
4
4
|
<button type="button" class="chart-legend-icon" title="Legend" style="position:absolute;inset:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;border:none;border-radius:inherit;cursor:pointer;flex-shrink:0;transition:transform .18s ease,opacity .2s ease"><svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/></svg></button>
|
|
5
|
-
<div class="chart-legend-panel" style="position:absolute;inset:0;display:none;flex-direction:column;overflow:hidden;border-radius:inherit
|
|
6
|
-
<div class="chart-legend-scroll" style="flex:1;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch">
|
|
5
|
+
<div class="chart-legend-panel" style="position:absolute;inset:0;display:none;flex-direction:column;overflow:hidden;border-radius:inherit">
|
|
6
|
+
<div class="chart-legend-scroll" style="flex:1;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:10px 12px">
|
|
7
7
|
<div class="chart-legend-list" style="display:flex;flex-direction:column;gap:4px"></div>
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
10
10
|
</div>
|
|
11
|
-
<button type="button" class="chart-legend-close" title="Close" style="position:absolute;top:-${
|
|
12
|
-
</div>`,
|
|
11
|
+
<button type="button" class="chart-legend-close" title="Close" style="position:absolute;top:-${f/2}px;right:-${f/2}px;width:${f}px;height:${f}px;display:flex;align-items:center;justify-content:center;border-radius:50%;border:none;cursor:pointer;padding:0;pointer-events:none;opacity:0;visibility:hidden;transition:transform .12s ease,opacity .18s ease .1s;z-index:21;transform:translate(-50%,50%);"><svg viewBox="0 0 24 24" width="10" height="10" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6L6 18"/><path d="M6 6l12 12"/></svg></button>
|
|
12
|
+
</div>`,t={name:"legend",install(J,q){let Q=new AbortController,V=document.createElement("div");V.innerHTML=p.trim();let Y=V.firstElementChild,j=Y.querySelector(".chart-legend-container"),K=j.querySelector(".chart-legend-icon"),U=j.querySelector(".chart-legend-panel"),z=j.querySelector(".chart-legend-scroll"),P=z.querySelector(".chart-legend-list"),$=Y.querySelector(".chart-legend-close");q.appendChild(Y),K.addEventListener("mouseenter",()=>{K.style.transform="scale(1.08)"}),K.addEventListener("mouseleave",()=>{K.style.transform="scale(1)"});let R="translate(-50%, 50%)";$.addEventListener("mouseenter",()=>{$.style.transform=`${R} scale(1.1)`}),$.addEventListener("mouseleave",()=>{$.style.transform=R}),z.addEventListener("wheel",(F)=>F.stopPropagation(),{passive:!1,signal:Q.signal}),P.addEventListener("pointerdown",(F)=>{let G=F.target.closest(".chart-legend-row");if(!G)return;F.stopPropagation(),F.preventDefault();let Z=Number(G.dataset.series);if(isNaN(Z))return;let u=new Set(J.config.hiddenSeries??[]);if(u.has(Z))u.delete(Z);else u.add(Z);let N=u.has(Z),T=J.series[Z];if(T){let O=`rgb(${T.color.r*100}% ${T.color.g*100}% ${T.color.b*100}%)`,D=G.querySelector(".chart-legend-swatch"),I=G.querySelector(".chart-legend-label");D.style.background=N?"transparent":O,D.style.border=N?`1.5px solid ${O}`:"",I.style.opacity=N?"0.4":"",D.classList.remove("chart-legend-swatch--bounce"),I.classList.remove("chart-legend-label--bounce"),D.offsetWidth,D.classList.add("chart-legend-swatch--bounce"),I.classList.add("chart-legend-label--bounce")}C.setHiddenSeries(J.id,[...u])},{capture:!0,signal:Q.signal});let X=M(J),v=X.alwaysOpen??!1,x=X.defaultOpen??!1,W={overlay:Y,container:j,iconBtn:K,panel:U,closeBtn:$,scrollArea:z,list:P,open:v||x,abort:Q,lastSeriesKey:"",computedWidth:L};if(k.set(J,W),!v){let F=()=>{W.open=!W.open,A(J)};K.addEventListener("pointerdown",(G)=>{G.stopPropagation(),G.preventDefault(),F()},{capture:!0,signal:Q.signal}),$.addEventListener("pointerdown",(G)=>{G.stopPropagation(),G.preventDefault(),W.open=!1,A(J)},{capture:!0,signal:Q.signal})}B(J),H(J),A(J)},afterDraw(J,q){B(q),H(q)},uninstall(J){let q=k.get(J);if(q)q.abort.abort(),q.overlay.remove(),k.delete(J)}};function B(J){let q=k.get(J);if(!q)return;let Q=E(J),V=`1px solid ${Q.panelBorder}`;q.container.style.background=Q.panelBg,q.container.style.border=V,q.container.style.fontFamily=Q.font,q.container.style.fontSize=`${Q.labelSize}px`,q.container.style.color=Q.text,q.iconBtn.style.background=Q.closeBg,q.iconBtn.style.border="none",q.iconBtn.style.boxShadow="none",q.iconBtn.style.color=Q.text,q.panel.style.background=Q.panelBg,q.panel.style.fontFamily=Q.font,q.panel.style.fontSize=`${Q.labelSize}px`,q.panel.style.color=Q.text,q.closeBtn.style.background=Q.closeBgSolid,q.closeBtn.style.border=V,q.closeBtn.style.boxShadow="none",q.closeBtn.style.color=Q.text}function y(J){return J.series.map((q,Q)=>`${Q}:${q.label}`).join("|")}function d(J,q,Q){let Y=document.createElement("canvas").getContext("2d");if(!Y)return 0;return Y.font=`${Q}px ${q}`,Y.measureText(J).width}function i(J,q){let Q=E(J),V=Q.font,Y=Q.labelSize,j=M(J).maxLabelChars??_,K=0;for(let $ of q){let R=$.length>j?$.slice(0,j-1)+"…":$,X=d(R,V,Y);if(X>K)K=X}let U=18,z=44,P=Math.ceil(K)+U+z;return Math.min(Math.max(P,w),L)}function H(J){let q=k.get(J);if(!q)return;let Q=y(J);if(Q===q.lastSeriesKey){h(J,q);return}q.lastSeriesKey=Q,o(J,q)}function o(J,q){let Q=J.series,V=M(J).maxLabelChars??_,Y=Q.map(($,R)=>$.label||`Series ${R+1}`);q.computedWidth=i(J,Y);let j=J.config.hiddenSeries??new Set,K="display:flex;align-items:center;gap:8px;min-width:0;padding-right:8px;cursor:pointer;user-select:none",U=";opacity:0;transform:translateY(6px);animation:chart-legend-row-in .25s cubic-bezier(.34,1.2,.64,1) forwards",z="width:10px;height:10px;border-radius:2px;flex-shrink:0;box-sizing:border-box",P="min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:opacity .15s ease";if(q.list.innerHTML=Q.map(($,R)=>{let X=`rgb(${$.color.r*100}% ${$.color.g*100}% ${$.color.b*100}%)`,v=$.label||`Series ${R+1}`;if(v.length>V)v=v.slice(0,V-1)+"…";let x=Math.min(0.02+R*0.02,0.16),W=j.has(R),F=W?`${z};background:transparent;border:1.5px solid ${X}`:`${z};background:${X}`;return`<div class="chart-legend-row" data-series="${R}" style="${K}${U};animation-delay:${x}s"><span class="chart-legend-swatch" style="${F}"></span><span class="chart-legend-label" style="${W?"opacity:0.4;":""}${P}">${n(v)}</span></div>`}).join(""),q.open){let $=q.list.scrollHeight+20;q.container.style.width=`${q.computedWidth}px`,q.container.style.height=`${Math.min(g,$)}px`}}function h(J,q){let Q=J.config.hiddenSeries??new Set;q.list.querySelectorAll(".chart-legend-row").forEach((V)=>{let Y=Number(V.dataset.series);if(isNaN(Y))return;let j=J.series[Y];if(!j)return;let K=`rgb(${j.color.r*100}% ${j.color.g*100}% ${j.color.b*100}%)`,U=Q.has(Y),z=V.querySelector(".chart-legend-swatch"),P=V.querySelector(".chart-legend-label");z.style.background=U?"transparent":K,z.style.border=U?`1.5px solid ${K}`:"",P.style.opacity=U?"0.4":""})}function n(J){let q=document.createElement("div");return q.textContent=J,q.innerHTML}function A(J){let q=k.get(J);if(!q)return;let Q=M(J).alwaysOpen??!1,V=Q||q.open;if(q.container.style.width=V?`${q.computedWidth}px`:`${m}px`,q.container.style.height=`${m}px`,q.container.style.borderRadius=V?"8px":"50%",q.container.style.overflow="hidden",q.iconBtn.style.opacity=Q?"0":V?"0":"1",q.iconBtn.style.pointerEvents=Q?"none":V?"none":"auto",q.iconBtn.style.visibility=Q?"hidden":"visible",q.panel.style.display=V?"flex":"none",q.closeBtn.style.opacity=Q?"0":V?"0":"0",q.closeBtn.style.pointerEvents=Q?"none":V?"auto":"none",q.closeBtn.style.visibility=Q?"hidden":V?"visible":"hidden",q.scrollArea.style.overflowY="hidden",V){let Y=q.list.scrollHeight+20;q.container.style.height=`${Math.min(g,Y)}px`;let j=(K)=>{if(K.propertyName!=="height")return;q.container.removeEventListener("transitionend",j),q.scrollArea.style.overflowY="auto"};if(q.container.addEventListener("transitionend",j),!Q)requestAnimationFrame(()=>{requestAnimationFrame(()=>{q.closeBtn.style.opacity="1"})})}}function l(){if(document.getElementById("chart-legend-keyframes"))return;let J=document.createElement("style");J.id="chart-legend-keyframes",J.textContent=`
|
|
13
13
|
@keyframes chart-legend-row-in {
|
|
14
14
|
from { opacity: 0; transform: translateY(6px); }
|
|
15
15
|
to { opacity: 1; transform: translateY(0); }
|
|
16
16
|
}
|
|
17
|
+
@keyframes chart-legend-swatch-bounce {
|
|
18
|
+
0% { transform: scale(1); }
|
|
19
|
+
30% { transform: scale(1.5); }
|
|
20
|
+
60% { transform: scale(0.82); }
|
|
21
|
+
80% { transform: scale(1.12); }
|
|
22
|
+
100% { transform: scale(1); }
|
|
23
|
+
}
|
|
24
|
+
.chart-legend-swatch--bounce { animation: chart-legend-swatch-bounce 0.28s ease-out; }
|
|
25
|
+
@keyframes chart-legend-label-bounce {
|
|
26
|
+
0% { transform: scale(1); }
|
|
27
|
+
30% { transform: scale(1.05); }
|
|
28
|
+
60% { transform: scale(0.97); }
|
|
29
|
+
80% { transform: scale(1.02); }
|
|
30
|
+
100% { transform: scale(1); }
|
|
31
|
+
}
|
|
32
|
+
.chart-legend-label--bounce { animation: chart-legend-label-bounce 0.28s ease-out; }
|
|
17
33
|
.chart-legend-scroll::-webkit-scrollbar { width: 6px; }
|
|
18
34
|
.chart-legend-scroll::-webkit-scrollbar-track { background: transparent; }
|
|
19
35
|
.chart-legend-scroll::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.15); border-radius: 3px; }
|
|
20
36
|
.chart-legend-scroll::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.25); }
|
|
21
|
-
`,document.head.appendChild(J)}
|
|
37
|
+
`,document.head.appendChild(J)}l();export{t as legendPlugin};
|
package/dist/plugins/zoom.js
CHANGED
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
} from "../chunk-831dem4f.js";
|
|
4
4
|
import {
|
|
5
5
|
ChartManager
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-n8ew0z0e.js";
|
|
7
7
|
import"../chunk-93yrr7er.js";
|
|
8
|
-
import"../chunk-
|
|
8
|
+
import"../chunk-5gtx3pza.js";
|
|
9
9
|
|
|
10
10
|
// src/plugins/zoom.ts
|
|
11
11
|
var MIN_ZOOM = 0.1;
|
package/dist/plugins/zoom.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{o as g}from"../chunk-0eh4rzy9.js";import{q as n}from"../chunk-50bcv2hw.js";import"../chunk-wdfq2fpx.js";import"../chunk-bbyt23tw.js";var P=0.1,y=1e7;function Bj(i={}){let S=i.momentumDecay??0.9,_=new WeakMap;return{name:"zoom",install(j,B){let l=B.style.touchAction,h=B.style.userSelect,o=B.style.webkitUserSelect;B.style.touchAction="none",B.style.userSelect="none",B.style.webkitUserSelect="none";let I=n,C=new AbortController,W={lastX:0,lastY:0,velX:0,velY:0,momentum:null,abort:C,originalTouchAction:l,originalUserSelect:h,originalWebkitUserSelect:o,el:B},A=()=>j.config.zoomMode??"both";_.set(j,W);let F=[],Q="none",v=0,x=0,u=0,w=0,Z=0,s=10,c=10,a=500,R=null,d=0,p=1,m=1,r=0.5,t=0.5,f=0,D=0,Y=0,V=null,T=0,N=1,z=()=>{if(I.requestRender(j.id),I.drawChart(j),I.syncViews)I.syncAllViews(j)},e=()=>{if(W.momentum)cancelAnimationFrame(W.momentum);let q=()=>{if(f*=S,D*=S,Math.abs(f)>0.00005||Math.abs(D)>0.00005){let J=A();if(J!=="none"&&(J==="both"||J==="x-only"))j.view.panX-=f/j.view.zoomX;if(J!=="none"&&(J==="both"||J==="y-only"))j.view.panY+=D/j.view.zoomY;z(),W.momentum=requestAnimationFrame(q)}else W.momentum=null};W.momentum=requestAnimationFrame(q)};B.addEventListener("pointerdown",(q)=>{if(W.momentum)cancelAnimationFrame(W.momentum),W.momentum=null;if(F.push(q),B.setPointerCapture(q.pointerId),F.length===1)if(Q="detecting",v=q.clientX,x=q.clientY,u=q.clientX,w=q.clientY,f=D=0,Z=performance.now(),V=null,q.pointerType==="touch")R=window.setTimeout(()=>{if(Q==="detecting")Q="press",j.dragging=!1},a);else{let J=B.getBoundingClientRect(),$=q.clientX-J.left,K=q.clientY-J.top,U=g,G=$<U.left,L=K>J.height-U.bottom;if(G&&!L)V="y",T=q.clientY,N=j.view.zoomY,j.dragging=!0;else if(L&&!G)V="x",T=q.clientX,N=j.view.zoomX,j.dragging=!0;else j.dragging=!0}else if(F.length===2){if(R)clearTimeout(R),R=null;if(Q="pinch",j.dragging=!1,q.pointerType==="touch")q.preventDefault();let J=B.getBoundingClientRect(),$=F[1].clientX-F[0].clientX,K=F[1].clientY-F[0].clientY;d=Math.hypot($,K),p=j.view.zoomX,m=j.view.zoomY,r=((F[0].clientX+F[1].clientX)/2-J.left)/J.width,t=1-((F[0].clientY+F[1].clientY)/2-J.top)/J.height}},{passive:!1,signal:C.signal}),B.addEventListener("pointermove",(q)=>{let J=F.findIndex(($)=>$.pointerId===q.pointerId);if(J>=0)F[J]=q;if(F.length>=1&&q.buttons===0&&(Q==="pan"||Q==="detecting"||Q==="press"||V!==null)){M(q);return}if(F.length===1){let $=Math.hypot(q.clientX-v,q.clientY-x);if(Q==="detecting"&&$>s){if(Q="pan",j.dragging=!0,R)clearTimeout(R),R=null}if(Q==="press")return;if(V&&q.pointerType!=="touch"){if(V==="x"){let K=q.clientX-T,U=Math.exp(K/200),G=Math.max(P,Math.min(y,N*U)),L=j.view.panX+0.5/N;j.view.zoomX=G,j.view.panX=L-0.5/G,z();return}else if(V==="y"){let K=T-q.clientY,U=Math.exp(K/200),G=Math.max(P,Math.min(y,N*U)),L=j.view.panY+0.5/N;j.view.zoomY=G,j.view.panY=L-0.5/G,z();return}}if(Q==="pan"||j.dragging&&!V){let K=B.getBoundingClientRect(),U=(q.clientX-u)/K.width,G=(q.clientY-w)/K.height,L=performance.now();if(L-Z<100)f=f*0.3+U*0.7,D=D*0.3+G*0.7;Z=L;let b=A();if(b!=="none"&&(b==="both"||b==="x-only"))j.view.panX-=U/j.view.zoomX;if(b!=="none"&&(b==="both"||b==="y-only"))j.view.panY+=G/j.view.zoomY;u=q.clientX,w=q.clientY,z()}}else if(F.length===2&&Q==="pinch"){if(q.pointerType==="touch")q.preventDefault();let $=B.getBoundingClientRect(),K=F[1].clientX-F[0].clientX,U=F[1].clientY-F[0].clientY,G=Math.hypot(K,U),L=((F[0].clientX+F[1].clientX)/2-$.left)/$.width,b=1-((F[0].clientY+F[1].clientY)/2-$.top)/$.height,X=G-d,O=Math.exp(X/280),k=A();if(k!=="none"&&(k==="both"||k==="x-only")){let H=Math.max(P,Math.min(y,p*O)),E=j.view.panX+L/j.view.zoomX;j.view.zoomX=H,j.view.panX=E-L/H}if(k!=="none"&&(k==="both"||k==="y-only")){let H=Math.max(P,Math.min(y,m*O)),E=j.view.panY+b/j.view.zoomY;j.view.zoomY=H,j.view.panY=E-b/H}z()}},{passive:!1,signal:C.signal});let M=(q)=>{if(F=F.filter((J)=>J.pointerId!==q.pointerId),B.releasePointerCapture(q.pointerId),R)clearTimeout(R),R=null;if(F.length===0){if(Math.hypot(q.clientX-v,q.clientY-x)<c&&Q!=="pan"){let K=Date.now();if(K-Y<300)I.resetView(j.id),Y=0;else Y=K}if(Q==="pan"&&(Math.abs(f)>0.001||Math.abs(D)>0.001))e();Q="none",j.dragging=!1,V=null}else if(F.length===1)Q="detecting",v=F[0].clientX,x=F[0].clientY,u=F[0].clientX,w=F[0].clientY};B.addEventListener("pointerup",M,{signal:C.signal}),B.addEventListener("pointercancel",M,{signal:C.signal}),B.addEventListener("wheel",(q)=>{if(q.preventDefault(),W.momentum)cancelAnimationFrame(W.momentum),W.momentum=null;let J=B.getBoundingClientRect(),$=q.clientX-J.left,K=q.clientY-J.top,U=$/J.width,G=1-K/J.height,L=1-q.deltaY*0.002,b=g,X=$<b.left,O=K>J.height-b.bottom,k,H;if(X)k=!1,H=!0;else if(O)k=!0,H=!1;else{let E=A();k=E==="both"||E==="x-only",H=E==="both"||E==="y-only"}if(k){let E=j.view.panX+U/j.view.zoomX;j.view.zoomX=Math.max(P,Math.min(y,j.view.zoomX*L)),j.view.panX=E-U/j.view.zoomX}if(H){let E=j.view.panY+G/j.view.zoomY;j.view.zoomY=Math.max(P,Math.min(y,j.view.zoomY*L)),j.view.panY=E-G/j.view.zoomY}if(k||H)z()},{passive:!1,signal:C.signal})},resetView(j){let B=_.get(j);if(B?.momentum)cancelAnimationFrame(B.momentum),B.momentum=null},uninstall(j){let B=_.get(j);if(B){if(B.momentum)cancelAnimationFrame(B.momentum),B.momentum=null;B.el.style.touchAction=B.originalTouchAction,B.el.style.userSelect=B.originalUserSelect,B.el.style.webkitUserSelect=B.originalWebkitUserSelect,B.abort.abort(),_.delete(j)}}}}export{Bj as zoomPlugin};
|
package/dist/types.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface ChartSeries {
|
|
|
20
20
|
color: ChartColor | string;
|
|
21
21
|
x: number[];
|
|
22
22
|
y: number[];
|
|
23
|
+
hidden?: boolean;
|
|
23
24
|
[key: string]: any;
|
|
24
25
|
}
|
|
25
26
|
export interface HoverData {
|
|
@@ -99,6 +100,7 @@ export interface ChartConfig {
|
|
|
99
100
|
maxY?: number;
|
|
100
101
|
};
|
|
101
102
|
bgColor?: [number, number, number];
|
|
103
|
+
hiddenSeries?: Set<number>;
|
|
102
104
|
}
|
|
103
105
|
export interface ChartTypeRegistry {
|
|
104
106
|
}
|
|
@@ -143,6 +145,12 @@ export interface InternalChart<C extends ChartConfig = ChartConfig> {
|
|
|
143
145
|
zoomX: number;
|
|
144
146
|
zoomY: number;
|
|
145
147
|
};
|
|
148
|
+
homeView: {
|
|
149
|
+
panX: number;
|
|
150
|
+
panY: number;
|
|
151
|
+
zoomX: number;
|
|
152
|
+
zoomY: number;
|
|
153
|
+
};
|
|
146
154
|
visible: boolean;
|
|
147
155
|
dragging: boolean;
|
|
148
156
|
plugins: ChartPlugin<any>[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/worker-inline.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const WORKER_CODE = "var k=\"fn luma(c:vec4f)->f32{return dot(c.rgb,vec3f(.299,.587,.114));}fn laaa(uv:vec2f,t:texture_2d<f32>,s:sampler)->vec4f{let r=1./vec2f(textureDimensions(t));let m=textureSample(t,s,uv);let n=textureSample(t,s,uv+vec2f(0.,-r.y));let e=textureSample(t,s,uv+vec2f(r.x,0.));let w=textureSample(t,s,uv+vec2f(-r.x,0.));let sv=textureSample(t,s,uv+vec2f(0.,r.y));let lm=luma(m);let ln=luma(n);let le=luma(e);let lw=luma(w);let ls=luma(sv);let lo=min(lm,min(min(ln,ls),min(le,lw)));let hi=max(lm,max(max(ln,ls),max(le,lw)));let rng=hi-lo;if(rng<max(.0833,hi*.166)){return m;}return mix(m,(m+n+e+w+sv)*.2,min(rng*3.,1.));}struct BV{@builtin(position)p:vec4f,@location(0)uv:vec2f}@group(0)@binding(0)var inputTex:texture_2d<f32>;@group(0)@binding(1)var samp:sampler;@vertex fn vs(@builtin(vertex_index)i:u32)->BV{var p=array<vec2f,4>(vec2f(-1,-1),vec2f(1,-1),vec2f(-1,1),vec2f(1,1));var u=array<vec2f,4>(vec2f(0,1),vec2f(1,1),vec2f(0,0),vec2f(1,0));return BV(vec4f(p[i],0,1),u[i]);}@fragment fn fs(v:BV)->@location(0)vec4f{return laaa(v.uv,inputTex,samp);}\";var T={INIT:0,THEME:1,REGISTER_RENDERER:2,REGISTER_CHART:3,UNREGISTER_CHART:4,UPDATE_SERIES:5,RESIZE:6,VIEW_TRANSFORM:7,BATCH_VIEW_TRANSFORM:8,SET_VISIBILITY:9,SET_STYLE:10,SET_UNIFORMS:11,GPU_READY:12,ERROR:13,STATS:14},Q={NO_GPU:\"e1:no-gpu\",NO_ADAPTER:\"e2:no-adapter\",DEVICE_LOST:\"e3:device-lost\",NOT_READY:\"e4:not-ready\",COMPILE:\"e5:compile\",CTX_GET:\"e6:ctx-get\",CTX_CFG:\"e7:ctx-cfg\",TEX:\"e8:tex\",BIND_S:\"e9:bind-s\",BIND_C:\"e10:bind-c\",UPDATE:\"e11:update\",NO_RENDERER:\"e12:no-renderer\",RESIZE:\"e13:resize\"};var j,U,J=new Map,R=new Map,w=!1,I,B,l,P=0,M=0,C=!1,p=null,L=new ArrayBuffer(64),b=new Float32Array(L),n=new Uint32Array(L);function D(_){let O=GPUBufferUsage.COPY_DST;for(let N of _)switch(N.toUpperCase()){case\"STORAGE\":O|=GPUBufferUsage.STORAGE;break;case\"VERTEX\":O|=GPUBufferUsage.VERTEX;break;case\"UNIFORM\":O|=GPUBufferUsage.UNIFORM;break;case\"COPY_SRC\":O|=GPUBufferUsage.COPY_SRC;break;case\"COPY_DST\":O|=GPUBufferUsage.COPY_DST;break;case\"INDEX\":O|=GPUBufferUsage.INDEX;break;case\"INDIRECT\":O|=GPUBufferUsage.INDIRECT;break}return O}function i(_,O,N){let m=N===\"compute\"?GPUShaderStage.COMPUTE:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT;if(_===\"uniforms\"||_===\"custom-uniforms\"||_===\"series-index\")return{visibility:m,buffer:{type:\"uniform\"}};if(_===\"render-target\"){if(O)return{visibility:GPUShaderStage.COMPUTE,storageTexture:{access:\"write-only\",format:\"rgba8unorm\"}};return{visibility:m,texture:{sampleType:\"float\"}}}if(O)return{visibility:m,buffer:{type:\"storage\"}};return{visibility:m,buffer:{type:\"read-only-storage\"}}}function z(_,O,N,m,W){switch(_){case\"uniforms\":return{buffer:N.uniformBuffer};case\"custom-uniforms\":return{buffer:N.customUniformBuffer};case\"series-info\":return{buffer:N.seriesStorageBuffer};case\"render-target\":return N.outputTextureView;case\"x-data\":return{buffer:m.dataX};case\"y-data\":return{buffer:m.dataY};case\"series-index\":return{buffer:m.seriesIndexBuffer}}if(_.endsWith(\"-data\")){let Y=_.slice(0,-5);return{buffer:m.extraBuffers.get(Y)}}if(W.config.bufferDefs.find((Y)=>Y.name===_)?.perSeries)return{buffer:m.seriesBuffers.get(_)};return{buffer:N.chartBuffers.get(_)}}function d(_){let O=new Map,N=new Map;for(let m=0;m<_.passes.length;m++){let W=_.passes[m],X=W.bindings.map((v)=>({binding:v.binding,...i(v.source,v.write,W.type)})),Y=j.createBindGroupLayout({entries:X});N.set(`pass-${m}`,Y);let H=j.createPipelineLayout({bindGroupLayouts:[Y]}),G=j.createShaderModule({code:_.shaders[W.shader]});if(W.type===\"compute\")O.set(`pass-${m}`,j.createComputePipeline({layout:H,compute:{module:G,entryPoint:\"main\"}}));else O.set(`pass-${m}`,j.createRenderPipeline({layout:H,vertex:{module:G,entryPoint:\"vs\"},fragment:{module:G,entryPoint:\"fs\",targets:[{format:\"rgba8unorm\",blend:W.blend}]},primitive:{topology:W.topology??\"triangle-list\"}}))}return{config:_,pipelines:O,passLayouts:N}}function h(_){if(!_.seriesStorageBuffer||_.series.length===0)return;let O=new Float32Array(_.series.length*8),N=new Uint32Array(O.buffer);for(let m=0;m<_.series.length;m++){let W=_.series[m],X=m*8;O[X+0]=W.colorR,O[X+1]=W.colorG,O[X+2]=W.colorB,O[X+3]=1,N[X+4]=W.visibleStart,N[X+5]=W.visibleCount}j.queue.writeBuffer(_.seriesStorageBuffer,0,O)}function E(_,O){let N=b,m=n,W=_.maxX-_.minX,X=_.maxY-_.minY,Y=_.bgColor??(w?[0.11,0.11,0.12]:[0.98,0.98,0.98]);N[0]=_.width,N[1]=_.height,N[2]=_.minX+_.panX*W,N[3]=_.minX+_.panX*W+W/_.zoomX,N[4]=_.minY+_.panY*X,N[5]=_.minY+_.panY*X+X/_.zoomY,m[6]=O.pointCount,m[7]=_.series.length,m[8]=w?1:0,N[9]=Y[0],N[10]=Y[1],N[11]=Y[2],N[12]=_.minX,N[13]=_.maxX,N[14]=_.minY,N[15]=_.maxY,j.queue.writeBuffer(_.uniformBuffer,0,L)}function y(_,O){if(!_.customUniformBuffer||O.uniformDefs.length===0)return;let N=O.uniformDefs.length,m=Math.ceil(N*4/16)*16,W=new ArrayBuffer(m),X=new Float32Array(W),Y=new Uint32Array(W);for(let H=0;H<N;H++){let G=O.uniformDefs[H],v=_.customUniformValues[G.name]??G.default;if(G.type===\"u32\")Y[H]=v>>>0;else X[H]=v}j.queue.writeBuffer(_.customUniformBuffer,0,W)}function g(_,O,N){for(let[,m]of _.chartBuffers)m.destroy();_.chartBuffers.clear();for(let m of O.config.bufferDefs)if(!m.perSeries){let W=Math.max(16,N[m.name]??16);_.chartBuffers.set(m.name,j.createBuffer({size:W,usage:D(m.usages)}))}if(O.config.uniformDefs.length>0){if(_.customUniformBuffer)_.customUniformBuffer.destroy();let m=Math.max(16,Math.ceil(O.config.uniformDefs.length*4/16)*16);_.customUniformBuffer=j.createBuffer({size:m,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),y(_,O.config)}}function u(_,O,N,m){for(let[,W]of _.seriesBuffers)W.destroy();_.seriesBuffers.clear();for(let W of N.config.bufferDefs)if(W.perSeries){let X=Math.max(16,m[W.name]??16);_.seriesBuffers.set(W.name,j.createBuffer({size:X,usage:D(W.usages)}))}if(_.seriesIndexBuffer)_.seriesIndexBuffer.destroy();_.seriesIndexBuffer=j.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),j.queue.writeBuffer(_.seriesIndexBuffer,0,new Uint32Array([O,0,0,0]))}function f(_,O){if(!_.seriesStorageBuffer)return;for(let N=0;N<_.series.length;N++){let m=_.series[N];m.passBindGroups=[];for(let W=0;W<O.config.passes.length;W++){let X=O.config.passes[W];if(!X.perSeries){m.passBindGroups.push(null);continue}let Y=O.passLayouts.get(`pass-${W}`);try{let H=X.bindings.map((G)=>({binding:G.binding,resource:z(G.source,G.write,_,m,O)}));m.passBindGroups.push(j.createBindGroup({layout:Y,entries:H}))}catch(H){postMessage({type:T.ERROR,code:Q.BIND_S}),m.passBindGroups.push(null)}}}_.chartPassBindGroups=[];for(let N=0;N<O.config.passes.length;N++){let m=O.config.passes[N];if(m.perSeries){_.chartPassBindGroups.push(null);continue}let W=O.passLayouts.get(`pass-${N}`);try{let X=m.bindings.map((Y)=>({binding:Y.binding,resource:z(Y.source,Y.write,_,null,O)}));_.chartPassBindGroups.push(j.createBindGroup({layout:W,entries:X}))}catch(X){postMessage({type:T.ERROR,code:Q.BIND_C}),_.chartPassBindGroups.push(null)}}}function S(_){if(_.outputTexture)_.outputTexture.destroy();let O=Math.max(1,_.width),N=Math.max(1,_.height),m=R.get(_.rendererName),W=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT;if(m){for(let X of m.config.passes)if(X.type===\"compute\"){for(let Y of X.bindings)if(Y.source===\"render-target\"&&Y.write){W|=GPUTextureUsage.STORAGE_BINDING;break}}}_.outputTexture=j.createTexture({size:[O,N],format:\"rgba8unorm\",usage:W}),_.outputTextureView=_.outputTexture.createView(),_.blitBindGroup=j.createBindGroup({layout:B,entries:[{binding:0,resource:_.outputTextureView},{binding:1,resource:l}]})}function c(_){let O=R.get(_.rendererName);if(!O)return;if(!_.ctx||_.width===0||_.height===0||_.series.length===0)return;let N;try{N=_.ctx.getCurrentTexture().createView()}catch{return}let m=j.createCommandEncoder();if(h(_),_.series.length>0)E(_,_.series[0]);m.beginRenderPass({colorAttachments:[{view:_.outputTextureView,loadOp:\"clear\",storeOp:\"store\",clearValue:{r:0,g:0,b:0,a:0}}]}).end();for(let Y=0;Y<O.config.passes.length;Y++){let H=O.config.passes[Y],G=O.pipelines.get(`pass-${Y}`);if(!G)continue;if(H.type===\"compute\")if(H.perSeries)for(let v=0;v<_.series.length;v++){let V=_.series[v];if(V.pointCount===0)continue;E(_,V);let q=_.perSeriesPassMeta[v]?.[Y]?.dispatch??{x:1},$=V.passBindGroups[Y];if(!$)continue;let Z=m.beginComputePass();Z.setPipeline(G),Z.setBindGroup(0,$),Z.dispatchWorkgroups(q.x,q.y??1,q.z??1),Z.end()}else{let v=_.chartPassBindGroups[Y];if(!v)continue;let K=_.perSeriesPassMeta[0]?.[Y]?.dispatch??{x:1},q=m.beginComputePass();q.setPipeline(G),q.setBindGroup(0,v),q.dispatchWorkgroups(K.x,K.y??1,K.z??1),q.end()}else if(H.type===\"render\"){let V=_.perSeriesPassMeta[0]?.[Y]?.draw??0,K=m.beginRenderPass({colorAttachments:[{view:_.outputTextureView,loadOp:H.loadOp??\"load\",storeOp:\"store\"}]});if(K.setPipeline(G),H.perSeries)for(let q=0;q<_.series.length;q++){let $=_.series[q];if($.pointCount===0)continue;let Z=$.passBindGroups[Y];if(!Z)continue;K.setBindGroup(0,Z),K.draw(V,1,0,q)}else{let q=_.chartPassBindGroups[Y];if(q)K.setBindGroup(0,q),K.draw(V,1,0,0)}K.end()}}let X=m.beginRenderPass({colorAttachments:[{view:N,loadOp:\"clear\",storeOp:\"store\",clearValue:{r:0,g:0,b:0,a:0}}]});if(X.setPipeline(I),_.blitBindGroup)X.setBindGroup(0,_.blitBindGroup);X.draw(4),X.end(),j.queue.submit([m.finish()])}function F(){if(!C)C=!0,requestAnimationFrame(t)}function A(_){if(_.dirty=!0,_.visible)F()}function s(){let _=!1;for(let O of J.values())if(O.dirty=!0,O.visible)_=!0;if(_)F()}function t(){C=!1;let _=performance.now();for(let O of J.values())if(O.visible&&O.dirty&&O.width>0)c(O),O.dirty=!1;M=performance.now()-_,P++}function e(){let _=0;for(let O of J.values())if(O.visible&&O.width>0)_++;return _}async function a(){if(j)return!0;if(!navigator.gpu)return postMessage({type:T.ERROR,code:Q.NO_GPU}),!1;let _=await navigator.gpu.requestAdapter();if(!_)return postMessage({type:T.ERROR,code:Q.NO_ADAPTER}),!1;j=await _.requestDevice({requiredLimits:{maxBufferSize:_.limits.maxBufferSize,maxStorageBufferBindingSize:_.limits.maxStorageBufferBindingSize}}),U=navigator.gpu.getPreferredCanvasFormat(),j.lost.then((N)=>{postMessage({type:T.ERROR,code:Q.DEVICE_LOST})}),B=j.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:\"float\"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]});let O=j.createShaderModule({code:k});return I=j.createRenderPipeline({layout:j.createPipelineLayout({bindGroupLayouts:[B]}),vertex:{module:O,entryPoint:\"vs\"},fragment:{module:O,entryPoint:\"fs\",targets:[{format:U}]},primitive:{topology:\"triangle-strip\"}}),l=j.createSampler({magFilter:\"linear\",minFilter:\"linear\"}),p=setInterval(()=>{postMessage({type:T.STATS,fps:P,renderMs:M,totalCharts:J.size,activeCharts:e()}),P=0},1000),postMessage({type:T.GPU_READY}),!0}function o(_){_.dataX.destroy(),_.dataY.destroy();for(let[,O]of _.extraBuffers)O.destroy();for(let[,O]of _.seriesBuffers)O.destroy();if(_.seriesIndexBuffer)_.seriesIndexBuffer.destroy()}function r(_,O,N,m,W){let X=J.get(_);if(!X||!j)return;let Y=R.get(X.rendererName);if(!Y){postMessage({type:T.ERROR,code:Q.NO_RENDERER});return}try{X.minX=N.minX,X.maxX=N.maxX,X.minY=N.minY,X.maxY=N.maxY,X.perSeriesPassMeta=W;for(let H of X.series)o(H);if(X.series=[],X.seriesStorageBuffer)X.seriesStorageBuffer.destroy();if(O.length>0)X.seriesStorageBuffer=j.createBuffer({size:Math.max(32,O.length*32),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});g(X,Y,m);for(let H=0;H<O.length;H++){let G=O[H],v=j.createBuffer({size:Math.max(16,G.dataX.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),V=j.createBuffer({size:Math.max(16,G.dataY.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});j.queue.writeBuffer(v,0,G.dataX),j.queue.writeBuffer(V,0,G.dataY);let K=new Map;for(let[$,Z]of Object.entries(G.extra??{})){let x=j.createBuffer({size:Math.max(16,Z.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});j.queue.writeBuffer(x,0,Z),K.set($,x)}let q={label:G.label,colorR:G.colorR,colorG:G.colorG,colorB:G.colorB,dataX:v,dataY:V,extraBuffers:K,seriesBuffers:new Map,seriesIndexBuffer:null,pointCount:G.dataX.length,visibleStart:0,visibleCount:G.dataX.length,passBindGroups:[]};X.series.push(q),u(q,H,Y,m)}f(X,Y)}catch(H){postMessage({type:T.ERROR,code:Q.UPDATE})}}self.onmessage=async(_)=>{let{type:O,...N}=_.data;switch(O){case T.INIT:w=N.isDark||!1,await a();break;case T.THEME:w=N.isDark,s();break;case T.REGISTER_RENDERER:{if(!j){postMessage({type:T.ERROR,code:Q.NOT_READY});break}let m={name:N.name,shaders:N.shaders,passes:N.passes,bufferDefs:N.bufferDefs??[],uniformDefs:N.uniformDefs??[]};try{R.set(N.name,d(m))}catch(W){postMessage({type:T.ERROR,code:Q.COMPILE})}break}case T.REGISTER_CHART:{if(!j)break;let m=N.canvas.getContext(\"webgpu\");if(!m){postMessage({type:T.ERROR,code:Q.CTX_GET});break}try{m.configure({device:j,format:U,alphaMode:\"premultiplied\"})}catch(G){postMessage({type:T.ERROR,code:Q.CTX_CFG});break}let W=j.limits.maxTextureDimension2D,X=Math.min(Math.max(1,Math.floor(Number(N.canvas.width)||800)),W),Y=Math.min(Math.max(1,Math.floor(Number(N.canvas.height)||400)),W),H={id:N.id,canvas:N.canvas,ctx:m,rendererName:N.rendererName,visible:!0,series:[],uniformBuffer:j.createBuffer({size:64,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),seriesStorageBuffer:null,outputTexture:null,outputTextureView:null,blitBindGroup:null,chartBuffers:new Map,customUniformBuffer:null,customUniformValues:N.customUniformValues??{},chartPassBindGroups:[],perSeriesPassMeta:N.perSeriesPassMeta??[],width:X,height:Y,panX:0,panY:0,zoomX:1,zoomY:1,minX:0,maxX:1,maxY:1,minY:0,bgColor:N.bgColor??null,dirty:!0};try{S(H)}catch(G){postMessage({type:T.ERROR,code:Q.TEX});break}J.set(N.id,H);break}case T.UNREGISTER_CHART:{let m=J.get(N.id);if(m){try{m.ctx.unconfigure()}catch{}if(m.uniformBuffer.destroy(),m.seriesStorageBuffer)m.seriesStorageBuffer.destroy();if(m.outputTexture)m.outputTexture.destroy();if(m.customUniformBuffer)m.customUniformBuffer.destroy();for(let[,W]of m.chartBuffers)W.destroy();for(let W of m.series)o(W);J.delete(N.id)}break}case T.UPDATE_SERIES:{r(N.id,N.series,N.bounds,N.bufferSizes??{},N.perSeriesPassMeta??[]);let m=J.get(N.id);if(m)A(m);break}case T.RESIZE:{let m=J.get(N.id);if(!m||N.width<=0||N.height<=0)break;let W=j.limits.maxTextureDimension2D,X=Math.min(N.width,W),Y=Math.min(N.height,W);if(X===m.width&&Y===m.height)break;if(m.width=X,m.height=Y,m.canvas.width=X,m.canvas.height=Y,N.perSeriesPassMeta?.length>0)m.perSeriesPassMeta=N.perSeriesPassMeta;let H=R.get(m.rendererName);try{if(S(m),H&&N.bufferSizes){g(m,H,N.bufferSizes);for(let G=0;G<m.series.length;G++)u(m.series[G],G,H,N.bufferSizes);f(m,H)}}catch(G){postMessage({type:T.ERROR,code:Q.RESIZE})}A(m);break}case T.VIEW_TRANSFORM:{let m=J.get(N.id);if(m)m.panX=N.panX,m.panY=N.panY,m.zoomX=Math.max(0.1,Math.min(1e6,N.zoomX)),m.zoomY=Math.max(0.1,Math.min(1e6,N.zoomY)),A(m);break}case T.BATCH_VIEW_TRANSFORM:{let m=Math.max(0.1,Math.min(1e6,N.zoomX)),W=Math.max(0.1,Math.min(1e6,N.zoomY));for(let X of N.transforms){let Y=J.get(X.id);if(Y)Y.panX=N.panX,Y.panY=N.panY,Y.zoomX=m,Y.zoomY=W,Y.dirty=!0}F();break}case T.SET_VISIBILITY:{let m=J.get(N.id);if(m){if(m.visible=N.visible,N.visible&&m.dirty)F()}break}case T.SET_STYLE:{let m=J.get(N.id);if(m){if(N.bgColor!==void 0)m.bgColor=N.bgColor;A(m)}break}case T.SET_UNIFORMS:{let m=J.get(N.id);if(!m)break;Object.assign(m.customUniformValues,N.values);let W=R.get(m.rendererName);if(W)y(m,W.config);A(m);break}}};\n";
|
|
1
|
+
export declare const WORKER_CODE = "var k=\"fn luma(c:vec4f)->f32{return dot(c.rgb,vec3f(.299,.587,.114));}fn laaa(uv:vec2f,t:texture_2d<f32>,s:sampler)->vec4f{let r=1./vec2f(textureDimensions(t));let m=textureSample(t,s,uv);let n=textureSample(t,s,uv+vec2f(0.,-r.y));let e=textureSample(t,s,uv+vec2f(r.x,0.));let w=textureSample(t,s,uv+vec2f(-r.x,0.));let sv=textureSample(t,s,uv+vec2f(0.,r.y));let lm=luma(m);let ln=luma(n);let le=luma(e);let lw=luma(w);let ls=luma(sv);let lo=min(lm,min(min(ln,ls),min(le,lw)));let hi=max(lm,max(max(ln,ls),max(le,lw)));let rng=hi-lo;if(rng<max(.0833,hi*.166)){return m;}return mix(m,(m+n+e+w+sv)*.2,min(rng*3.,1.));}struct BV{@builtin(position)p:vec4f,@location(0)uv:vec2f}@group(0)@binding(0)var inputTex:texture_2d<f32>;@group(0)@binding(1)var samp:sampler;@vertex fn vs(@builtin(vertex_index)i:u32)->BV{var p=array<vec2f,4>(vec2f(-1,-1),vec2f(1,-1),vec2f(-1,1),vec2f(1,1));var u=array<vec2f,4>(vec2f(0,1),vec2f(1,1),vec2f(0,0),vec2f(1,0));return BV(vec4f(p[i],0,1),u[i]);}@fragment fn fs(v:BV)->@location(0)vec4f{return laaa(v.uv,inputTex,samp);}\";var T={INIT:0,THEME:1,REGISTER_RENDERER:2,REGISTER_CHART:3,UNREGISTER_CHART:4,UPDATE_SERIES:5,RESIZE:6,VIEW_TRANSFORM:7,BATCH_VIEW_TRANSFORM:8,SET_VISIBILITY:9,SET_STYLE:10,SET_UNIFORMS:11,GPU_READY:12,ERROR:13,STATS:14},Q={NO_GPU:\"e1:no-gpu\",NO_ADAPTER:\"e2:no-adapter\",DEVICE_LOST:\"e3:device-lost\",NOT_READY:\"e4:not-ready\",COMPILE:\"e5:compile\",CTX_GET:\"e6:ctx-get\",CTX_CFG:\"e7:ctx-cfg\",TEX:\"e8:tex\",BIND_S:\"e9:bind-s\",BIND_C:\"e10:bind-c\",UPDATE:\"e11:update\",NO_RENDERER:\"e12:no-renderer\",RESIZE:\"e13:resize\"};var j,U,J=new Map,R=new Map,w=!1,I,B,l,P=0,M=0,C=!1,p=null,L=new ArrayBuffer(64),b=new Float32Array(L),n=new Uint32Array(L);function D(_){let O=GPUBufferUsage.COPY_DST;for(let N of _)switch(N.toUpperCase()){case\"STORAGE\":O|=GPUBufferUsage.STORAGE;break;case\"VERTEX\":O|=GPUBufferUsage.VERTEX;break;case\"UNIFORM\":O|=GPUBufferUsage.UNIFORM;break;case\"COPY_SRC\":O|=GPUBufferUsage.COPY_SRC;break;case\"COPY_DST\":O|=GPUBufferUsage.COPY_DST;break;case\"INDEX\":O|=GPUBufferUsage.INDEX;break;case\"INDIRECT\":O|=GPUBufferUsage.INDIRECT;break}return O}function i(_,O,N){let m=N===\"compute\"?GPUShaderStage.COMPUTE:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT;if(_===\"uniforms\"||_===\"custom-uniforms\"||_===\"series-index\")return{visibility:m,buffer:{type:\"uniform\"}};if(_===\"render-target\"){if(O)return{visibility:GPUShaderStage.COMPUTE,storageTexture:{access:\"write-only\",format:\"rgba8unorm\"}};return{visibility:m,texture:{sampleType:\"float\"}}}if(O)return{visibility:m,buffer:{type:\"storage\"}};return{visibility:m,buffer:{type:\"read-only-storage\"}}}function z(_,O,N,m,W){switch(_){case\"uniforms\":return{buffer:N.uniformBuffer};case\"custom-uniforms\":return{buffer:N.customUniformBuffer};case\"series-info\":return{buffer:N.seriesStorageBuffer};case\"render-target\":return N.outputTextureView;case\"x-data\":return{buffer:m.dataX};case\"y-data\":return{buffer:m.dataY};case\"series-index\":return{buffer:m.seriesIndexBuffer}}if(_.endsWith(\"-data\")){let Y=_.slice(0,-5);return{buffer:m.extraBuffers.get(Y)}}if(W.config.bufferDefs.find((Y)=>Y.name===_)?.perSeries)return{buffer:m.seriesBuffers.get(_)};return{buffer:N.chartBuffers.get(_)}}function d(_){let O=new Map,N=new Map;for(let m=0;m<_.passes.length;m++){let W=_.passes[m],X=W.bindings.map((v)=>({binding:v.binding,...i(v.source,v.write,W.type)})),Y=j.createBindGroupLayout({entries:X});N.set(`pass-${m}`,Y);let H=j.createPipelineLayout({bindGroupLayouts:[Y]}),G=j.createShaderModule({code:_.shaders[W.shader]});if(W.type===\"compute\")O.set(`pass-${m}`,j.createComputePipeline({layout:H,compute:{module:G,entryPoint:\"main\"}}));else O.set(`pass-${m}`,j.createRenderPipeline({layout:H,vertex:{module:G,entryPoint:\"vs\"},fragment:{module:G,entryPoint:\"fs\",targets:[{format:\"rgba8unorm\",blend:W.blend}]},primitive:{topology:W.topology??\"triangle-list\"}}))}return{config:_,pipelines:O,passLayouts:N}}function h(_){if(!_.seriesStorageBuffer||_.series.length===0)return;let O=new Float32Array(_.series.length*8),N=new Uint32Array(O.buffer);for(let m=0;m<_.series.length;m++){let W=_.series[m],X=m*8;O[X+0]=W.colorR,O[X+1]=W.colorG,O[X+2]=W.colorB,O[X+3]=1,N[X+4]=W.visibleStart,N[X+5]=W.visibleCount}j.queue.writeBuffer(_.seriesStorageBuffer,0,O)}function E(_,O){let N=b,m=n,W=_.maxX-_.minX,X=_.maxY-_.minY,Y=_.bgColor??(w?[0.11,0.11,0.12]:[0.98,0.98,0.98]);N[0]=_.width,N[1]=_.height,N[2]=_.minX+_.panX*W,N[3]=_.minX+_.panX*W+W/_.zoomX,N[4]=_.minY+_.panY*X,N[5]=_.minY+_.panY*X+X/_.zoomY,m[6]=O.pointCount,m[7]=_.series.length,m[8]=w?1:0,N[9]=Y[0],N[10]=Y[1],N[11]=Y[2],N[12]=_.minX,N[13]=_.maxX,N[14]=_.minY,N[15]=_.maxY,j.queue.writeBuffer(_.uniformBuffer,0,L)}function y(_,O){if(!_.customUniformBuffer||O.uniformDefs.length===0)return;let N=O.uniformDefs.length,m=Math.ceil(N*4/16)*16,W=new ArrayBuffer(m),X=new Float32Array(W),Y=new Uint32Array(W);for(let H=0;H<N;H++){let G=O.uniformDefs[H],v=_.customUniformValues[G.name]??G.default;if(G.type===\"u32\")Y[H]=v>>>0;else X[H]=v}j.queue.writeBuffer(_.customUniformBuffer,0,W)}function g(_,O,N){for(let[,m]of _.chartBuffers)m.destroy();_.chartBuffers.clear();for(let m of O.config.bufferDefs)if(!m.perSeries){let W=Math.max(16,N[m.name]??16);_.chartBuffers.set(m.name,j.createBuffer({size:W,usage:D(m.usages)}))}if(O.config.uniformDefs.length>0){if(_.customUniformBuffer)_.customUniformBuffer.destroy();let m=Math.max(16,Math.ceil(O.config.uniformDefs.length*4/16)*16);_.customUniformBuffer=j.createBuffer({size:m,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),y(_,O.config)}}function u(_,O,N,m){for(let[,W]of _.seriesBuffers)W.destroy();_.seriesBuffers.clear();for(let W of N.config.bufferDefs)if(W.perSeries){let X=Math.max(16,m[W.name]??16);_.seriesBuffers.set(W.name,j.createBuffer({size:X,usage:D(W.usages)}))}if(_.seriesIndexBuffer)_.seriesIndexBuffer.destroy();_.seriesIndexBuffer=j.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),j.queue.writeBuffer(_.seriesIndexBuffer,0,new Uint32Array([O,0,0,0]))}function f(_,O){if(!_.seriesStorageBuffer)return;for(let N=0;N<_.series.length;N++){let m=_.series[N];m.passBindGroups=[];for(let W=0;W<O.config.passes.length;W++){let X=O.config.passes[W];if(!X.perSeries){m.passBindGroups.push(null);continue}let Y=O.passLayouts.get(`pass-${W}`);try{let H=X.bindings.map((G)=>({binding:G.binding,resource:z(G.source,G.write,_,m,O)}));m.passBindGroups.push(j.createBindGroup({layout:Y,entries:H}))}catch(H){postMessage({type:T.ERROR,code:Q.BIND_S}),m.passBindGroups.push(null)}}}_.chartPassBindGroups=[];for(let N=0;N<O.config.passes.length;N++){let m=O.config.passes[N];if(m.perSeries){_.chartPassBindGroups.push(null);continue}let W=O.passLayouts.get(`pass-${N}`);try{let X=m.bindings.map((Y)=>({binding:Y.binding,resource:z(Y.source,Y.write,_,null,O)}));_.chartPassBindGroups.push(j.createBindGroup({layout:W,entries:X}))}catch(X){postMessage({type:T.ERROR,code:Q.BIND_C}),_.chartPassBindGroups.push(null)}}}function S(_){if(_.outputTexture)_.outputTexture.destroy();let O=Math.max(1,_.width),N=Math.max(1,_.height),m=R.get(_.rendererName),W=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT;if(m){for(let X of m.config.passes)if(X.type===\"compute\"){for(let Y of X.bindings)if(Y.source===\"render-target\"&&Y.write){W|=GPUTextureUsage.STORAGE_BINDING;break}}}_.outputTexture=j.createTexture({size:[O,N],format:\"rgba8unorm\",usage:W}),_.outputTextureView=_.outputTexture.createView(),_.blitBindGroup=j.createBindGroup({layout:B,entries:[{binding:0,resource:_.outputTextureView},{binding:1,resource:l}]})}function c(_){let O=R.get(_.rendererName);if(!O)return;if(!_.ctx||_.width===0||_.height===0||_.series.length===0)return;let N;try{N=_.ctx.getCurrentTexture().createView()}catch{return}let m=j.createCommandEncoder();if(h(_),_.series.length>0)E(_,_.series[0]);m.beginRenderPass({colorAttachments:[{view:_.outputTextureView,loadOp:\"clear\",storeOp:\"store\",clearValue:{r:0,g:0,b:0,a:0}}]}).end();for(let Y=0;Y<O.config.passes.length;Y++){let H=O.config.passes[Y],G=O.pipelines.get(`pass-${Y}`);if(!G)continue;if(H.type===\"compute\")if(H.perSeries)for(let v=0;v<_.series.length;v++){let V=_.series[v];if(V.pointCount===0||V.hidden)continue;E(_,V);let q=_.perSeriesPassMeta[v]?.[Y]?.dispatch??{x:1},$=V.passBindGroups[Y];if(!$)continue;let Z=m.beginComputePass();Z.setPipeline(G),Z.setBindGroup(0,$),Z.dispatchWorkgroups(q.x,q.y??1,q.z??1),Z.end()}else{let v=_.chartPassBindGroups[Y];if(!v)continue;let K=_.perSeriesPassMeta[0]?.[Y]?.dispatch??{x:1},q=m.beginComputePass();q.setPipeline(G),q.setBindGroup(0,v),q.dispatchWorkgroups(K.x,K.y??1,K.z??1),q.end()}else if(H.type===\"render\"){let V=_.perSeriesPassMeta[0]?.[Y]?.draw??0,K=m.beginRenderPass({colorAttachments:[{view:_.outputTextureView,loadOp:H.loadOp??\"load\",storeOp:\"store\"}]});if(K.setPipeline(G),H.perSeries)for(let q=0;q<_.series.length;q++){let $=_.series[q];if($.pointCount===0||$.hidden)continue;let Z=$.passBindGroups[Y];if(!Z)continue;K.setBindGroup(0,Z),K.draw(V,1,0,q)}else{let q=_.chartPassBindGroups[Y];if(q)K.setBindGroup(0,q),K.draw(V,1,0,0)}K.end()}}let X=m.beginRenderPass({colorAttachments:[{view:N,loadOp:\"clear\",storeOp:\"store\",clearValue:{r:0,g:0,b:0,a:0}}]});if(X.setPipeline(I),_.blitBindGroup)X.setBindGroup(0,_.blitBindGroup);X.draw(4),X.end(),j.queue.submit([m.finish()])}function F(){if(!C)C=!0,requestAnimationFrame(t)}function A(_){if(_.dirty=!0,_.visible)F()}function s(){let _=!1;for(let O of J.values())if(O.dirty=!0,O.visible)_=!0;if(_)F()}function t(){C=!1;let _=performance.now();for(let O of J.values())if(O.visible&&O.dirty&&O.width>0)c(O),O.dirty=!1;M=performance.now()-_,P++}function e(){let _=0;for(let O of J.values())if(O.visible&&O.width>0)_++;return _}async function a(){if(j)return!0;if(!navigator.gpu)return postMessage({type:T.ERROR,code:Q.NO_GPU}),!1;let _=await navigator.gpu.requestAdapter();if(!_)return postMessage({type:T.ERROR,code:Q.NO_ADAPTER}),!1;j=await _.requestDevice({requiredLimits:{maxBufferSize:_.limits.maxBufferSize,maxStorageBufferBindingSize:_.limits.maxStorageBufferBindingSize}}),U=navigator.gpu.getPreferredCanvasFormat(),j.lost.then((N)=>{postMessage({type:T.ERROR,code:Q.DEVICE_LOST})}),B=j.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:\"float\"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]});let O=j.createShaderModule({code:k});return I=j.createRenderPipeline({layout:j.createPipelineLayout({bindGroupLayouts:[B]}),vertex:{module:O,entryPoint:\"vs\"},fragment:{module:O,entryPoint:\"fs\",targets:[{format:U}]},primitive:{topology:\"triangle-strip\"}}),l=j.createSampler({magFilter:\"linear\",minFilter:\"linear\"}),p=setInterval(()=>{postMessage({type:T.STATS,fps:P,renderMs:M,totalCharts:J.size,activeCharts:e()}),P=0},1000),postMessage({type:T.GPU_READY}),!0}function o(_){_.dataX.destroy(),_.dataY.destroy();for(let[,O]of _.extraBuffers)O.destroy();for(let[,O]of _.seriesBuffers)O.destroy();if(_.seriesIndexBuffer)_.seriesIndexBuffer.destroy()}function r(_,O,N,m,W){let X=J.get(_);if(!X||!j)return;let Y=R.get(X.rendererName);if(!Y){postMessage({type:T.ERROR,code:Q.NO_RENDERER});return}try{X.minX=N.minX,X.maxX=N.maxX,X.minY=N.minY,X.maxY=N.maxY,X.perSeriesPassMeta=W;for(let H of X.series)o(H);if(X.series=[],X.seriesStorageBuffer)X.seriesStorageBuffer.destroy();if(O.length>0)X.seriesStorageBuffer=j.createBuffer({size:Math.max(32,O.length*32),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});g(X,Y,m);for(let H=0;H<O.length;H++){let G=O[H],v=j.createBuffer({size:Math.max(16,G.dataX.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),V=j.createBuffer({size:Math.max(16,G.dataY.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});j.queue.writeBuffer(v,0,G.dataX),j.queue.writeBuffer(V,0,G.dataY);let K=new Map;for(let[$,Z]of Object.entries(G.extra??{})){let x=j.createBuffer({size:Math.max(16,Z.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});j.queue.writeBuffer(x,0,Z),K.set($,x)}let q={label:G.label,colorR:G.colorR,colorG:G.colorG,colorB:G.colorB,dataX:v,dataY:V,extraBuffers:K,seriesBuffers:new Map,seriesIndexBuffer:null,pointCount:G.dataX.length,visibleStart:0,visibleCount:G.dataX.length,hidden:G.hidden??!1,passBindGroups:[]};X.series.push(q),u(q,H,Y,m)}f(X,Y)}catch(H){postMessage({type:T.ERROR,code:Q.UPDATE})}}self.onmessage=async(_)=>{let{type:O,...N}=_.data;switch(O){case T.INIT:w=N.isDark||!1,await a();break;case T.THEME:w=N.isDark,s();break;case T.REGISTER_RENDERER:{if(!j){postMessage({type:T.ERROR,code:Q.NOT_READY});break}let m={name:N.name,shaders:N.shaders,passes:N.passes,bufferDefs:N.bufferDefs??[],uniformDefs:N.uniformDefs??[]};try{R.set(N.name,d(m))}catch(W){postMessage({type:T.ERROR,code:Q.COMPILE})}break}case T.REGISTER_CHART:{if(!j)break;let m=N.canvas.getContext(\"webgpu\");if(!m){postMessage({type:T.ERROR,code:Q.CTX_GET});break}try{m.configure({device:j,format:U,alphaMode:\"premultiplied\"})}catch(G){postMessage({type:T.ERROR,code:Q.CTX_CFG});break}let W=j.limits.maxTextureDimension2D,X=Math.min(Math.max(1,Math.floor(Number(N.canvas.width)||800)),W),Y=Math.min(Math.max(1,Math.floor(Number(N.canvas.height)||400)),W),H={id:N.id,canvas:N.canvas,ctx:m,rendererName:N.rendererName,visible:!0,series:[],uniformBuffer:j.createBuffer({size:64,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),seriesStorageBuffer:null,outputTexture:null,outputTextureView:null,blitBindGroup:null,chartBuffers:new Map,customUniformBuffer:null,customUniformValues:N.customUniformValues??{},chartPassBindGroups:[],perSeriesPassMeta:N.perSeriesPassMeta??[],width:X,height:Y,panX:0,panY:0,zoomX:1,zoomY:1,minX:0,maxX:1,maxY:1,minY:0,bgColor:N.bgColor??null,dirty:!0};try{S(H)}catch(G){postMessage({type:T.ERROR,code:Q.TEX});break}J.set(N.id,H);break}case T.UNREGISTER_CHART:{let m=J.get(N.id);if(m){try{m.ctx.unconfigure()}catch{}if(m.uniformBuffer.destroy(),m.seriesStorageBuffer)m.seriesStorageBuffer.destroy();if(m.outputTexture)m.outputTexture.destroy();if(m.customUniformBuffer)m.customUniformBuffer.destroy();for(let[,W]of m.chartBuffers)W.destroy();for(let W of m.series)o(W);J.delete(N.id)}break}case T.UPDATE_SERIES:{r(N.id,N.series,N.bounds,N.bufferSizes??{},N.perSeriesPassMeta??[]);let m=J.get(N.id);if(m)A(m);break}case T.RESIZE:{let m=J.get(N.id);if(!m||N.width<=0||N.height<=0)break;let W=j.limits.maxTextureDimension2D,X=Math.min(N.width,W),Y=Math.min(N.height,W);if(X===m.width&&Y===m.height)break;if(m.width=X,m.height=Y,m.canvas.width=X,m.canvas.height=Y,N.perSeriesPassMeta?.length>0)m.perSeriesPassMeta=N.perSeriesPassMeta;let H=R.get(m.rendererName);try{if(S(m),H&&N.bufferSizes){g(m,H,N.bufferSizes);for(let G=0;G<m.series.length;G++)u(m.series[G],G,H,N.bufferSizes);f(m,H)}}catch(G){postMessage({type:T.ERROR,code:Q.RESIZE})}A(m);break}case T.VIEW_TRANSFORM:{let m=J.get(N.id);if(m)m.panX=N.panX,m.panY=N.panY,m.zoomX=Math.max(0.1,Math.min(1e6,N.zoomX)),m.zoomY=Math.max(0.1,Math.min(1e6,N.zoomY)),A(m);break}case T.BATCH_VIEW_TRANSFORM:{let m=Math.max(0.1,Math.min(1e6,N.zoomX)),W=Math.max(0.1,Math.min(1e6,N.zoomY));for(let X of N.transforms){let Y=J.get(X.id);if(Y)Y.panX=N.panX,Y.panY=N.panY,Y.zoomX=m,Y.zoomY=W,Y.dirty=!0}F();break}case T.SET_VISIBILITY:{let m=J.get(N.id);if(m){if(m.visible=N.visible,N.visible&&m.dirty)F()}break}case T.SET_STYLE:{let m=J.get(N.id);if(m){if(N.bgColor!==void 0)m.bgColor=N.bgColor;if(N.hiddenSeries!==void 0)for(let W=0;W<m.series.length;W++)m.series[W].hidden=N.hiddenSeries.has(W);A(m)}break}case T.SET_UNIFORMS:{let m=J.get(N.id);if(!m)break;Object.assign(m.customUniformValues,N.values);let W=R.get(m.rendererName);if(W)y(m,W.config);A(m);break}}};\n";
|
|
2
2
|
//# sourceMappingURL=worker-inline.d.ts.map
|