@rfkit/renderer 0.1.15 → 0.2.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.
Files changed (67) hide show
  1. package/README.md +1 -20
  2. package/color/ColorInterpolator.d.ts +0 -1
  3. package/color/ColorUtils.d.ts +0 -1
  4. package/color/index.d.ts +0 -1
  5. package/core/Engine.d.ts +0 -1
  6. package/core/WebGLEngine.d.ts +0 -1
  7. package/index.d.ts +0 -1
  8. package/index.js +3 -3
  9. package/package.json +1 -1
  10. package/renderers/cartesian/Fluorescence.d.ts +0 -1
  11. package/renderers/cartesian/Gauge.d.ts +0 -1
  12. package/renderers/cartesian/Heatmap.d.ts +3 -4
  13. package/renderers/cartesian/HeatmapCanvas.d.ts +0 -1
  14. package/renderers/cartesian/Series.d.ts +0 -1
  15. package/renderers/cartesian/SeriesCanvas.d.ts +0 -1
  16. package/renderers/cartesian/index.d.ts +0 -1
  17. package/renderers/circular/CircularBase.d.ts +0 -1
  18. package/renderers/circular/Dial.d.ts +0 -1
  19. package/renderers/circular/Radar.d.ts +0 -1
  20. package/renderers/circular/index.d.ts +0 -1
  21. package/renderers/index.d.ts +0 -1
  22. package/renderers/scatter/IQ.d.ts +0 -1
  23. package/renderers/scatter/IQEye.d.ts +0 -1
  24. package/renderers/scatter/index.d.ts +0 -1
  25. package/renderers/webgl/HeatmapWebGL.d.ts +0 -1
  26. package/renderers/webgl/index.d.ts +0 -1
  27. package/types/common.d.ts +0 -1
  28. package/types/data.d.ts +0 -1
  29. package/types/enums.d.ts +0 -1
  30. package/types/index.d.ts +0 -1
  31. package/types/state.d.ts +0 -1
  32. package/utils/imageData.d.ts +0 -1
  33. package/utils/index.d.ts +0 -1
  34. package/utils/math.d.ts +0 -1
  35. package/utils/webgl.d.ts +0 -1
  36. package/color/ColorInterpolator.d.ts.map +0 -1
  37. package/color/ColorUtils.d.ts.map +0 -1
  38. package/color/index.d.ts.map +0 -1
  39. package/core/Engine.d.ts.map +0 -1
  40. package/core/WebGLEngine.d.ts.map +0 -1
  41. package/index.d.ts.map +0 -1
  42. package/renderers/cartesian/Fluorescence.d.ts.map +0 -1
  43. package/renderers/cartesian/Gauge.d.ts.map +0 -1
  44. package/renderers/cartesian/Heatmap.d.ts.map +0 -1
  45. package/renderers/cartesian/HeatmapCanvas.d.ts.map +0 -1
  46. package/renderers/cartesian/Series.d.ts.map +0 -1
  47. package/renderers/cartesian/SeriesCanvas.d.ts.map +0 -1
  48. package/renderers/cartesian/index.d.ts.map +0 -1
  49. package/renderers/circular/CircularBase.d.ts.map +0 -1
  50. package/renderers/circular/Dial.d.ts.map +0 -1
  51. package/renderers/circular/Radar.d.ts.map +0 -1
  52. package/renderers/circular/index.d.ts.map +0 -1
  53. package/renderers/index.d.ts.map +0 -1
  54. package/renderers/scatter/IQ.d.ts.map +0 -1
  55. package/renderers/scatter/IQEye.d.ts.map +0 -1
  56. package/renderers/scatter/index.d.ts.map +0 -1
  57. package/renderers/webgl/HeatmapWebGL.d.ts.map +0 -1
  58. package/renderers/webgl/index.d.ts.map +0 -1
  59. package/types/common.d.ts.map +0 -1
  60. package/types/data.d.ts.map +0 -1
  61. package/types/enums.d.ts.map +0 -1
  62. package/types/index.d.ts.map +0 -1
  63. package/types/state.d.ts.map +0 -1
  64. package/utils/imageData.d.ts.map +0 -1
  65. package/utils/index.d.ts.map +0 -1
  66. package/utils/math.d.ts.map +0 -1
  67. package/utils/webgl.d.ts.map +0 -1
package/README.md CHANGED
@@ -6,24 +6,12 @@ Canvas/WebGL 渲染器集合,适用于射频和通用数据可视化。内置
6
6
  - WebGL:`HeatmapWebGL`(大规模强度矩阵,颜色查表渲染)
7
7
  - 工具与类型:`ColorInterpolator`、`GraphicType`、`OrientationType`、`AxisYRange`、`SeriesConfig` 等
8
8
 
9
- ## 安装与构建
10
- 仓库开发:
11
-
12
- ```bash
13
- pnpm install
14
- pnpm dev # 实时构建
15
- pnpm build # 生成 dist
16
- pnpm check # biome 格式与检查
17
- ```
18
-
19
- 作为依赖使用(发布包名为 `@rfkit/renderer`):
9
+ ## 安装
20
10
 
21
11
  ```bash
22
12
  pnpm add @rfkit/renderer
23
13
  ```
24
14
 
25
- 正式版本默认走 `Release PR -> 合并 -> GitHub Actions 自动发布 npm`。仓库里的 `publish:npm` / `build:npm` 只保留为调试或应急入口,不作为日常正式发版流程。
26
-
27
15
  ## 快速上手
28
16
  HTML 容器:
29
17
 
@@ -90,10 +78,3 @@ heatmapGL.render(largeMatrix); // largeMatrix: number[][]
90
78
  `CircularData` 支持可选 `polygon: CircularPolygonItem[]` 绘制雷达多边形:每个多边形提供 `values`(各方向归一化值 0-1,长度即方向数,按 0..360 度均匀分布)、可选 `color`(缺省走主题主色)与可选 `showDots`(是否绘制顶点小圆点,缺省 true);各方向值决定半径,连成闭合多边形,径向渐变填充(中心透明→边缘主题色)+ 细描边 + 顶点实心圆点。支持多网叠加,绘制时按每网最大半径降序(大网下层、小网上层)。
91
79
 
92
80
  常用操作:`setRange(range)` 调整量程并重绘;`resize()` 在容器尺寸变化后调用;`clear()` 清空画布及内部数据。
93
-
94
- ## 发版约定
95
-
96
- - 发布级改动默认需要在 PR 中携带 `.changeset/*.md`
97
- - `patch` / `minor` / `major` 由 changeset 决定,不要手改 `package.json.version`
98
- - PR 合并到 `main` 后会自动创建或更新 Release PR;合并 Release PR 后才会正式发布 npm
99
- - 若 GitHub Actions 在 `npm publish` 阶段报 `E404` 或权限类错误,先检查 npm 包设置里的 Trusted Publisher 是否精确匹配 `Hxgh/rfkit-renderer`、`release.yml`、`npm-release`,并确认 `package.json.repository.url` 仍是当前 GitHub 仓库;修配置后直接重跑当前未发布版本,不要继续 bump 版本
@@ -38,4 +38,3 @@ export default class ColorInterpolator {
38
38
  */
39
39
  getColor(value: number): RGBA;
40
40
  }
41
- //# sourceMappingURL=ColorInterpolator.d.ts.map
@@ -24,4 +24,3 @@ export declare function color2intensity(color: string, length?: number): string[
24
24
  * 清除颜色缓存
25
25
  */
26
26
  export declare function clearColorCache(): void;
27
- //# sourceMappingURL=ColorUtils.d.ts.map
package/color/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export { default as ColorInterpolator } from './ColorInterpolator';
2
2
  export { clearColorCache, color2intensity, hexToRGBA, parseColor, rgbToHex } from './ColorUtils';
3
- //# sourceMappingURL=index.d.ts.map
package/core/Engine.d.ts CHANGED
@@ -9,4 +9,3 @@ export default class Engine<TState extends BaseState = BaseState> {
9
9
  draw(): void;
10
10
  dispose(): void;
11
11
  }
12
- //# sourceMappingURL=Engine.d.ts.map
@@ -32,4 +32,3 @@ export default class WebGLEngine<TState extends WebGLBaseState = WebGLBaseState>
32
32
  dispose(): void;
33
33
  }
34
34
  export {};
35
- //# sourceMappingURL=WebGLEngine.d.ts.map
package/index.d.ts CHANGED
@@ -6,4 +6,3 @@ export { Dial, Radar } from './renderers/circular';
6
6
  export { IQ, IQEye } from './renderers/scatter';
7
7
  export { HeatmapWebGL } from './renderers/webgl';
8
8
  export { type AxisYRange, type CircularData, type CircularPolygonItem, FluorescenceRenderMode, type GaugeData, GraphicType, type IQData, type IQEyeRenderMode, OrientationType, RendererType, type SeriesConfig, type StateProps } from './types';
9
- //# sourceMappingURL=index.d.ts.map
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- const colorCache=new Map;function hexToRGBA(hexColor,alpha){const hexRegex=/^#([A-Fa-f0-9]{3}){1,2}([A-Fa-f0-9]{2})?$/;if(!hexRegex.test(hexColor))throw new Error("Invalid hex color format");const hex=hexColor.replace("#","");let r;let g;let b;let a;if(3===hex.length){r=Number.parseInt(hex[0]+hex[0],16);g=Number.parseInt(hex[1]+hex[1],16);b=Number.parseInt(hex[2]+hex[2],16);a=255}else if(6===hex.length){r=Number.parseInt(hex.substring(0,2),16);g=Number.parseInt(hex.substring(2,4),16);b=Number.parseInt(hex.substring(4,6),16);a=255}else if(8===hex.length){r=Number.parseInt(hex.substring(0,2),16);g=Number.parseInt(hex.substring(2,4),16);b=Number.parseInt(hex.substring(4,6),16);a=Number.parseInt(hex.substring(6,8),16)}else throw new Error("Invalid hex color length");if("number"==typeof alpha)a=Math.round(255*Math.max(0,Math.min(1,alpha)));return{r,g,b,a}}function rgbToHex(r,g,b,a=255){const toHex=channel=>channel.toString(16).padStart(2,"0");const hex=`#${toHex(r)}${toHex(g)}${toHex(b)}`;return a<255?`${hex}${toHex(a)}`:hex}function parseColor(color){if("string"==typeof color){const cached=colorCache.get(color);if(cached)return cached;const result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(color);const parsed=result?{r:parseInt(result[1],16),g:parseInt(result[2],16),b:parseInt(result[3],16),a:result[4]?parseInt(result[4],16):255}:{r:0,g:0,b:0,a:255};colorCache.set(color,parsed);return parsed}return{r:color.r,g:color.g,b:color.b,a:color.a??255}}function color2intensity(color,length=100){const colorArray=[];for(let i=0;i<=length;i++){const alphaHex=Math.round(i/length*255);const alphaHexString=alphaHex.toString(16).padStart(2,"0").toUpperCase();const colorWithOpacity=`${color}${alphaHexString}`;colorArray.push(colorWithOpacity)}return colorArray}function clearColorCache(){colorCache.clear()}class ColorInterpolator{colorsPresetList=[];range=[0,0,0];static transparent={r:0,g:0,b:0,a:0};constructor(colors,rangeMin,rangeMax,stepSize=.1){this.setColors(colors,rangeMin,rangeMax,stepSize)}setColors(colors,rangeMin,rangeMax,stepSize){this.colorsPresetList=[];const steps=Math.max(1,Math.floor((rangeMax-rangeMin)/stepSize));const rangeDiff=rangeMax-rangeMin;this.range=[rangeMin,rangeMax,rangeDiff];const parsedColors=colors.map(parseColor);for(let i=0;i<=steps;i++){const value=rangeMin+i*stepSize;const position=(value-rangeMin)/rangeDiff;this.colorsPresetList.push(this.interpolateColor(parsedColors,position))}}interpolateColor(colors,position){const index=Math.floor(position*(colors.length-1));const ratio=position*(colors.length-1)-index;const startColor=colors[index];const endColor=colors[index+1]||colors[index];const rgba={r:Math.round(startColor.r+ratio*(endColor.r-startColor.r)),g:Math.round(startColor.g+ratio*(endColor.g-startColor.g)),b:Math.round(startColor.b+ratio*(endColor.b-startColor.b)),a:Math.round(startColor.a+ratio*(endColor.a-startColor.a))};return{...rgba,hax:rgbToHex(rgba.r,rgba.g,rgba.b,rgba.a)}}getColor(value){if(!Number.isFinite(value))return ColorInterpolator.transparent;const[rangeMin,,rangeDiff]=this.range;const position=(value-rangeMin)/rangeDiff;if(position<=0)return this.colorsPresetList[0];if(position>=1)return this.colorsPresetList[this.colorsPresetList.length-1];const index=Math.min(Math.floor(position*this.colorsPresetList.length),this.colorsPresetList.length-1);return this.colorsPresetList[index]}}class Engine{state;constructor(props){this.state={id:props.id,container:void 0,canvas:null,ctx:null,range:props.range??[-20,100]};this.init(props)}updateProps(e){this.state={...this.state,...e}}init(_props){const{id}=this.state;const container=document.getElementById(id);const canvas=document.createElement("canvas");const ctx=canvas.getContext?.("2d");canvas.style.transform="scaleY(-1)";if(ctx){ctx.imageSmoothingEnabled=false;ctx.lineJoin="miter";ctx.lineCap="butt";ctx.textBaseline="middle"}if(ctx)this.updateProps({container:container??void 0,canvas,ctx});container?.appendChild(canvas);this.resize(false)}clearRect(){const{ctx,canvas}=this.state;ctx.clearRect(0,0,canvas.width,canvas.height)}resize(draw=true){const{canvas,container}=this.state;const{clientWidth,clientHeight}=container;if(!clientWidth||!clientHeight)return;canvas.width=clientWidth;canvas.height=clientHeight;if(draw)setTimeout(()=>{this.draw()})}draw(){}dispose(){const{canvas,container}=this.state;container?.removeChild(canvas)}}const DEFAULTS={COLOR:"#000000",THICKNESS:1,FILL_STYLE:"#ffffffB0",FILL_STYLE_PRIMARY:"#1890ff",FILL_STYLE_TRANSPARENT_BASE:"#ffffff10",LINE_COLOR:"#00ff00",POINT_COLOR:"#ff0000",DIAL_NORTH_COLOR:"#ff4d4f",DIAL_SOUTH_COLOR:"#1890ff",FLUORESCENCE_COLORS:["#000080","#0000FF","#00FFFF","#00FF00","#FFFF00","#FF0000"],RANGE:[-20,100]};const FLUORESCENCE={LEVEL_MIN:-20,LEVEL_MAX:140,LEVEL_RANGE:161,MAX_GAUSSIAN_RADIUS:30};const EYE_DEFAULTS={Y_RANGE:[-1,1],SEGMENT_SIZE:5,MODE:"classic",DECAY_FACTOR:.98,MAX_ACCUMULATION:1e3,MODERN_COLORS:["#000080","#0000FF","#00FFFF","#00FF00","#FFFF00","#FF0000"],CLASSIC_COLORS:["#00ff00","#ff0000"],CLASSIC_ALPHA_GAIN:50};var enums_OrientationType=/*#__PURE__*/function(OrientationType){OrientationType["Horizontal"]="horizontal";OrientationType["Vertical"]="vertical";return OrientationType}({});var enums_GraphicType=/*#__PURE__*/function(GraphicType){GraphicType["Circle"]="circle";GraphicType["Rect"]="rect";GraphicType["Line"]="line";GraphicType["Stepline"]="stepline";GraphicType["Bar"]="bar";GraphicType["Area"]="area";return GraphicType}({});var enums_RendererType=/*#__PURE__*/function(RendererType){RendererType["Canvas"]="canvas";RendererType["WebGL"]="webgl";return RendererType}({});var enums_FluorescenceRenderMode=/*#__PURE__*/function(FluorescenceRenderMode){FluorescenceRenderMode["Gaussian"]="gaussian";FluorescenceRenderMode["Grid"]="grid";return FluorescenceRenderMode}({});class Fluorescence extends Engine{init(props){super.init(props);const{colors,display,fluorescenceRenderMode}=props;this.updateProps({colors,data:new Uint32Array(0),display,renderMode:fluorescenceRenderMode??enums_FluorescenceRenderMode.Gaussian});this.resize()}updateProps(e){const rangeChanged=e.range&&(e.range[0]!==this.state.range?.[0]||e.range[1]!==this.state.range?.[1]);const renderModeChanged=void 0!==e.renderMode&&e.renderMode!==this.state.renderMode;super.updateProps(e);if((rangeChanged||renderModeChanged)&&this.state.data?.length>0)this.draw()}setRenderMode(mode){this.updateProps({renderMode:mode})}clearImageData(){const{ctx,canvas:{height,width}}=this.state;if(height&&width)this.updateProps({imageData:ctx.createImageData(width,height)})}clearRect(){super.clearRect();this.clearImageData()}clear(){this.clearRect();this.updateProps({data:new Uint32Array(0)})}dispose(){this.intensityMatrixCache=null;this.gridCentersCache=null;this.weightLookupCache=null;this.colorLookupCache=null;this.colorCache.clear();this.lastRenderParams=null;this.blockPositionsCache=null;this.lastBlockRenderParams=null}drawBlocks(){const{imageData,data,canvas,ctx,colors=DEFAULTS.FLUORESCENCE_COLORS,range=DEFAULTS.RANGE}=this.state;if(!data||0===data.length||!imageData)return;const{width,height}=canvas;const[rangeMin,rangeMax]=range;const rangeSpan=rangeMax-rangeMin;if(rangeSpan<=0)return;const dataLength=data.length/FLUORESCENCE.LEVEL_RANGE;if(!Number.isInteger(dataLength)||dataLength<=0)return;const currentParams={dataLength,width,height,rangeMin,rangeMax};const paramsChanged=!this.lastBlockRenderParams||Object.keys(currentParams).some(key=>this.lastBlockRenderParams?.[key]!==currentParams[key]);if(paramsChanged||!this.blockPositionsCache||this.blockPositionsCache.length!==dataLength){this.blockPositionsCache=new Array(dataLength);const blockWidth=Math.max(1,Math.floor(width/dataLength));for(let i=0;i<dataLength;i++){const startX=Math.floor(i*width/dataLength);const endX=Math.min(width-1,startX+blockWidth-1);this.blockPositionsCache[i]={startX,endX,width:endX-startX+1}}}this.lastBlockRenderParams=currentParams;const pixelData=imageData.data;pixelData.fill(0);const invRangeSpan=1/rangeSpan;const heightMinus1=height-1;const pixelsPerDb=height/rangeSpan;const blockHeight=Math.max(1,Math.ceil(pixelsPerDb));let visibleMaxCount=0;for(let dataIndex=0;dataIndex<dataLength;dataIndex++){const baseIndex=dataIndex*FLUORESCENCE.LEVEL_RANGE;for(let level=0;level<FLUORESCENCE.LEVEL_RANGE;level++){const count=data[baseIndex+level];if(count<=0)continue;const yValue=level+FLUORESCENCE.LEVEL_MIN;if(!(yValue<rangeMin)&&!(yValue>rangeMax)){if(count>visibleMaxCount)visibleMaxCount=count}}}const effectiveMaxCount=Math.max(visibleMaxCount,1);const logMaxCount=Math.log(effectiveMaxCount+1);for(let dataIndex=0;dataIndex<dataLength;dataIndex++){const blockPos=this.blockPositionsCache[dataIndex];const{startX:blockStartX,endX:blockEndX}=blockPos;const baseIndex=dataIndex*FLUORESCENCE.LEVEL_RANGE;for(let level=0;level<FLUORESCENCE.LEVEL_RANGE;level++){const count=data[baseIndex+level];if(count<=0)continue;const yValue=level+FLUORESCENCE.LEVEL_MIN;if(yValue<rangeMin||yValue>rangeMax)continue;const normalizedY=(yValue-rangeMin)*invRangeSpan;const centerY=normalizedY*heightMinus1;const blockStartY=Math.max(0,Math.floor(centerY-blockHeight/2));const blockEndY=Math.min(heightMinus1,blockStartY+blockHeight-1);const intensity=Math.log(count+1)/logMaxCount;const alpha=Math.round(255*intensity);const{r:colorR,g:colorG,b:colorB}=this.interpolateColor(colors,intensity);for(let py=blockStartY;py<=blockEndY;py++){const rowIndex=py*width;for(let px=blockStartX;px<=blockEndX;px++){const pixelIndex=(rowIndex+px)*4;pixelData[pixelIndex]=colorR;pixelData[pixelIndex+1]=colorG;pixelData[pixelIndex+2]=colorB;pixelData[pixelIndex+3]=alpha}}}}ctx.putImageData(imageData,0,0)}resize(){super.resize();this.clearImageData()}setRange(range){if(!range)return;this.updateProps({range});this.draw()}render(data){if(data?.fluorescenceData?.length>=0){const oldLength=this.state.data?.length??0;const newLength=data.fluorescenceData.length;if(oldLength!==newLength){this.clearImageData();this.intensityMatrixCache=null;this.gridCentersCache=null;this.blockPositionsCache=null;this.lastRenderParams=null;this.lastBlockRenderParams=null}this.state.data=data.fluorescenceData;this.state.fluorescenceMaxCount=data.fluorescenceMaxCount;this.draw()}}interpolateColor(colors,ratio){if(!colors||0===colors.length)return{r:255,g:255,b:255,a:255};ratio=Math.max(0,Math.min(1,ratio));const getColorRgb=color=>{if("string"==typeof color)return this.hexToRgb(color);return{r:color.r,g:color.g,b:color.b}};if(1===colors.length){const color=getColorRgb(colors[0]);return{...color,a:255}}if(0===ratio){const color=getColorRgb(colors[0]);return{...color,a:255}}if(1===ratio){const color=getColorRgb(colors[colors.length-1]);return{...color,a:255}}const scaledRatio=ratio*(colors.length-1);const index=Math.floor(scaledRatio);const localRatio=scaledRatio-index;const safeIndex=Math.min(index,colors.length-2);const color1=getColorRgb(colors[safeIndex]);const color2=getColorRgb(colors[safeIndex+1]);return{r:Math.round(color1.r+(color2.r-color1.r)*localRatio),g:Math.round(color1.g+(color2.g-color1.g)*localRatio),b:Math.round(color1.b+(color2.b-color1.b)*localRatio),a:255}}colorCache=new Map;hexToRgb(hex){const cached=this.colorCache.get(hex);if(cached)return cached;const parsed=parseColor(hex);const color={r:parsed.r,g:parsed.g,b:parsed.b};this.colorCache.set(hex,color);return color}lastRenderParams=null;intensityMatrixCache=null;gridCentersCache=null;weightLookupCache=null;colorLookupCache=null;blockPositionsCache=null;lastBlockRenderParams=null;draw(){const{imageData,data,canvas,ctx,colors=DEFAULTS.FLUORESCENCE_COLORS,range=DEFAULTS.RANGE,fluorescenceMaxCount=1,display,renderMode=enums_FluorescenceRenderMode.Gaussian}=this.state;if(!display)return;if(!data||0===data.length||!imageData)return;if(renderMode===enums_FluorescenceRenderMode.Grid){this.drawBlocks();return}const{width,height}=canvas;const[rangeMin,rangeMax]=range;const rangeSpan=rangeMax-rangeMin;if(rangeSpan<=0)return;const dataLength=data.length/FLUORESCENCE.LEVEL_RANGE;if(!Number.isInteger(dataLength)||dataLength<=0)return;const currentParams={dataLength,rangeMin,rangeMax,width,height,maxCount:fluorescenceMaxCount};const needRecalcGridCenters=!this.lastRenderParams||this.lastRenderParams.dataLength!==currentParams.dataLength||this.lastRenderParams.width!==currentParams.width;const needRecalcWeightLookup=!this.lastRenderParams||this.lastRenderParams.height!==currentParams.height;const needRecalcColorLookup=!this.colorLookupCache;this.lastRenderParams=currentParams;const pixelData=imageData.data;pixelData.fill(0);const pixelsPerLevel=height/rangeSpan;const baseInterpolationRadius=Math.max(2,Math.ceil(pixelsPerLevel),Math.floor(height/50));const interpolationRadius=Math.min(baseInterpolationRadius,FLUORESCENCE.MAX_GAUSSIAN_RADIUS);const radiusSquared=interpolationRadius*interpolationRadius;const matrixSize=width*height;const cellWidth=width/dataLength;const baseRadiusX=Math.max(interpolationRadius,Math.ceil(cellWidth));const radiusX=Math.min(baseRadiusX,FLUORESCENCE.MAX_GAUSSIAN_RADIUS);if(this.intensityMatrixCache&&this.intensityMatrixCache.length===matrixSize)this.intensityMatrixCache.fill(0);else this.intensityMatrixCache=new Float32Array(matrixSize);const intensityMatrix=this.intensityMatrixCache;if(needRecalcGridCenters||!this.gridCentersCache||this.gridCentersCache.length!==dataLength){this.gridCentersCache=new Float32Array(dataLength);const cellWidth=width/dataLength;for(let i=0;i<dataLength;i++){const startX=Math.floor(cellWidth*i);const endX=Math.ceil(cellWidth*(i+1));this.gridCentersCache[i]=(startX+endX)/2}}const gridCenters=this.gridCentersCache;const maxDistance=interpolationRadius;const lookupSize=Math.ceil(10*maxDistance)+1;if(needRecalcWeightLookup||!this.weightLookupCache||this.weightLookupCache.length!==lookupSize){this.weightLookupCache=new Float32Array(lookupSize);for(let i=0;i<=10*maxDistance;i++){const distance=i/10;this.weightLookupCache[i]=Math.exp(-(distance*distance)/(2*radiusSquared))}}const weightLookup=this.weightLookupCache;let maxIntensity=0;for(let dataIndex=0;dataIndex<dataLength;dataIndex++){const centerX=gridCenters[dataIndex];const baseIndex=dataIndex*FLUORESCENCE.LEVEL_RANGE;for(let level=0;level<FLUORESCENCE.LEVEL_RANGE;level++){const count=data[baseIndex+level];if(count<=0)continue;const yValue=level+FLUORESCENCE.LEVEL_MIN;if(yValue<rangeMin||yValue>rangeMax)continue;const normalizedY=(yValue-rangeMin)/rangeSpan;const centerY=normalizedY*(height-1);const intensity=Math.log(count+1)/Math.log(Math.max(fluorescenceMaxCount,1)+1);const expandStartX=Math.max(0,Math.floor(centerX-radiusX));const expandEndX=Math.min(width-1,Math.ceil(centerX+radiusX));const startY=Math.max(0,Math.floor(centerY-interpolationRadius));const endY=Math.min(height-1,Math.ceil(centerY+interpolationRadius));for(let py=startY;py<=endY;py++){const dy=py-centerY;const dySquared=dy*dy;const rowIndex=py*width;for(let px=expandStartX;px<=expandEndX;px++){const dx=px-centerX;const normalizedDx=dx*interpolationRadius/radiusX;const distanceSquared=normalizedDx*normalizedDx+dySquared;if(distanceSquared>radiusSquared)continue;const distance=Math.sqrt(distanceSquared);const lookupIndex=Math.floor(10*distance);const weight=lookupIndex<weightLookup.length?weightLookup[lookupIndex]:0;const matrixIndex=rowIndex+px;const newIntensity=intensityMatrix[matrixIndex]+intensity*weight;intensityMatrix[matrixIndex]=newIntensity;if(newIntensity>maxIntensity)maxIntensity=newIntensity}}}}const intensityThreshold=.001;const invMaxIntensity=maxIntensity>0?1/maxIntensity:0;const colorSteps=256;if(needRecalcColorLookup||!this.colorLookupCache||this.colorLookupCache.length!==colorSteps){this.colorLookupCache=new Array(colorSteps);for(let i=0;i<colorSteps;i++){const ratio=i/(colorSteps-1);this.colorLookupCache[i]=this.interpolateColor(colors,ratio)}}const colorLookup=this.colorLookupCache;for(let i=0;i<intensityMatrix.length;i++){const rawIntensity=intensityMatrix[i];if(rawIntensity<=intensityThreshold)continue;const intensity=Math.min(rawIntensity*invMaxIntensity,1);const colorIndex=Math.min(Math.floor(intensity*(colorSteps-1)),colorSteps-1);const color=colorLookup[colorIndex];const pixelIndex=4*i;pixelData[pixelIndex]=color.r;pixelData[pixelIndex+1]=color.g;pixelData[pixelIndex+2]=color.b;pixelData[pixelIndex+3]=Math.round(255*intensity)}ctx.putImageData(imageData,0,0)}}function fillImageData(canvasWidth,canvasHeight,data,imageData,getColor){if(!data)return;const numRows=data.length;const cellHeight=canvasHeight/numRows;let cellWidth=0;for(let r=0;r<numRows;r++){const rowData=data[r];const numCols=rowData.length;if(0===numCols)continue;if(0===cellWidth)cellWidth=canvasWidth/numCols;const startRow=Math.floor(cellHeight*r);const endRow=Math.ceil(cellHeight*(r+1));for(let c=0;c<numCols;c++){const value=rowData[c];const startCol=Math.floor(cellWidth*c);const endCol=Math.ceil(cellWidth*(c+1));const color=getColor(value);for(let y=startRow;y<endRow;y++){const rowIndex=y*canvasWidth;for(let x=startCol;x<endCol;x++){const index=(rowIndex+x)*4;imageData[index]=color.r;imageData[index+1]=color.g;imageData[index+2]=color.b;imageData[index+3]=color.a}}}}}function getMinMax(numbers){if(!Array.isArray(numbers)||0===numbers.length)throw new Error("Input must be a non-empty array.");let min=numbers[0];let max=numbers[0];for(let i=1;i<numbers.length;i++)if(numbers[i]<min)min=numbers[i];else if(numbers[i]>max)max=numbers[i];return[min,max]}function isNumberAlias(n){return"number"==typeof n&&Number.isFinite(n)}function convertToF64(odata){const flattened=odata.flatMap(row=>{if(0===row.length)return Array(odata[0].length).fill(Number.NaN);return row});return new Float64Array(flattened)}let webgl2Supported=null;function isWebGL2Supported(){if(null!==webgl2Supported)return webgl2Supported;try{const canvas=document.createElement("canvas");const gl=canvas.getContext("webgl2");webgl2Supported=!!gl;if(gl){const ext=gl.getExtension("WEBGL_lose_context");ext?.loseContext()}}catch{webgl2Supported=false}return webgl2Supported}class Gauge extends Engine{init(props){super.init(props);this.state.canvas.style.transform="scaleY(1)";const fillStyle=props.fillStyle??DEFAULTS.FILL_STYLE;const fillStylePrimary=props.fillStylePrimary??DEFAULTS.FILL_STYLE_PRIMARY;const fillStyleTransparentBase=props.fillStyleTransparentBase??DEFAULTS.FILL_STYLE_TRANSPARENT_BASE;const baseWidth=6;this.updateProps({fillStyle,fillStylePrimary,fillStyleTransparentBase,baseWidth,padding:props.padding??0,step:props.ticksStep??10,lineWidth:1,data:{value:0,limit:0}})}clear(){this.clearRect();const{ctx,BGCanvas}=this.state;if(BGCanvas)ctx.drawImage(BGCanvas,0,0)}resize(){super.resize();if(this.state.lineWidth)this.drawBackground()}render(data){this.state.data={...this.state.data,...data};this.draw()}draw(){const{data:{value},range:[min,max],canvas,ctx,baseWidth,padding,BGCanvas,fillStylePrimary}=this.state;this.clearRect();if(BGCanvas)ctx.drawImage(BGCanvas,0,0);const width=3*baseWidth;const height=canvas.height-2*padding;const x=(canvas.width-width)/2;const renderHeight=(value-min)/(max-min)*height;const y=height-renderHeight+padding;ctx.fillStyle=fillStylePrimary;ctx.fillRect(x,y,width,renderHeight);this.drawLimit()}drawLimit(){const{data:{limit},range:[min,max],canvas,ctx,baseWidth,padding,lineWidth,fillStylePrimary}=this.state;if(!isNumberAlias(limit))return;const width=3*baseWidth;const height=canvas.height-2*padding;const x=(canvas.width-width)/2;const y=height*(max-limit)/(max-min)+padding;const limitTagHeight=9;const triangleWidth=9;const rectangleWidth=30;ctx.beginPath();ctx.moveTo(x+width,y);ctx.lineTo(x+width+triangleWidth,y-limitTagHeight);ctx.lineTo(x+width+triangleWidth+rectangleWidth,y-limitTagHeight);ctx.lineTo(x+width+triangleWidth+rectangleWidth,y+limitTagHeight);ctx.lineTo(x+width+triangleWidth,y+limitTagHeight);ctx.lineTo(x+width,y);ctx.lineTo(x,y);ctx.lineWidth=lineWidth;ctx.strokeStyle=fillStylePrimary;ctx.stroke();ctx.fillStyle=fillStylePrimary;ctx.font="12px Arial";ctx.textAlign="center";ctx.textBaseline="middle";ctx.fillText(limit.toString(),x+width+triangleWidth+rectangleWidth/2,y+1)}drawBackground(){const{canvas,baseWidth,padding,lineWidth,step,range:[min,max],fillStyle,fillStyleTransparentBase}=this.state;const BGCanvas=document.createElement("canvas");BGCanvas.width=canvas.width;BGCanvas.height=canvas.height;const BGCtx=BGCanvas.getContext("2d");if(!BGCtx)return;const width=3*baseWidth;const height=canvas.height-2*padding;const x=(canvas.width-width)/2;const y=padding;const tagNun=11;const markedAngles=Array.from({length:tagNun},(_,i)=>min+Math.round(i*(max-min)/(tagNun-1)/step)*step);BGCtx.fillStyle=fillStyleTransparentBase;BGCtx.fillRect(x,y,width,height);for(let i=min;i<=max;i+=step){const isMarked=markedAngles.includes(i);const tagY=height*(max-i)/(max-min)+padding;BGCtx.beginPath();BGCtx.moveTo(x-(isMarked?baseWidth:baseWidth/2),tagY);BGCtx.lineTo(x,tagY);BGCtx.strokeStyle=fillStyle;BGCtx.lineWidth=isMarked?lineWidth:lineWidth/2;BGCtx.stroke();if(isMarked){BGCtx.fillStyle=fillStyle;BGCtx.font="12px Arial";BGCtx.textAlign="right";BGCtx.textBaseline="middle";BGCtx.fillText(i.toString(),x-1.2*baseWidth,tagY)}}this.state.BGCanvas=BGCanvas}}class WebGLEngine{state;constructor(props){this.state={id:props.id,container:void 0,canvas:null,gl:null,range:props.range??[-20,100]};this.init(props)}updateProps(e){this.state={...this.state,...e}}init(_props){const{id}=this.state;const container=document.getElementById(id);const canvas=document.createElement("canvas");const gl=canvas.getContext("webgl2",{alpha:true,antialias:false,premultipliedAlpha:false,preserveDrawingBuffer:false});if(!gl){console.error("WebGL 2.0 not supported");return}canvas.style.transform="scaleY(-1)";this.updateProps({container:container??void 0,canvas,gl});container?.appendChild(canvas);this.resize(false)}compileShader(type,source){const{gl}=this.state;const shader=gl.createShader(type);if(!shader)return null;gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error("Shader compile error:",gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null}return shader}createProgram(shaderSource){const{gl}=this.state;const vertexShader=this.compileShader(gl.VERTEX_SHADER,shaderSource.vertex);const fragmentShader=this.compileShader(gl.FRAGMENT_SHADER,shaderSource.fragment);if(!vertexShader||!fragmentShader)return null;const program=gl.createProgram();if(!program)return null;gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error("Program link error:",gl.getProgramInfoLog(program));gl.deleteProgram(program);return null}gl.deleteShader(vertexShader);gl.deleteShader(fragmentShader);return program}createTexture(){const{gl}=this.state;const texture=gl.createTexture();if(!texture)return null;gl.bindTexture(gl.TEXTURE_2D,texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);return texture}createQuadBuffer(){const{gl}=this.state;const buffer=gl.createBuffer();if(!buffer)return null;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);const vertices=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);return buffer}clearRect(){const{gl}=this.state;gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT)}resize(draw=true){const{canvas,container,gl}=this.state;if(!container)return;const{clientWidth,clientHeight}=container;if(!clientWidth||!clientHeight)return;canvas.width=clientWidth;canvas.height=clientHeight;gl.viewport(0,0,clientWidth,clientHeight);if(draw)setTimeout(()=>{this.draw()})}draw(){}dispose(){const{gl,canvas}=this.state;if(gl){const loseContext=gl.getExtension("WEBGL_lose_context");if(loseContext)loseContext.loseContext()}canvas?.remove()}}const VERTEX_SHADER=`#version 300 es
1
+ let t=new Map;function e(t,e){let a,r,i,l;if(!/^#([A-Fa-f0-9]{3}){1,2}([A-Fa-f0-9]{2})?$/.test(t))throw Error("Invalid hex color format");let s=t.replace("#","");if(3===s.length)a=Number.parseInt(s[0]+s[0],16),r=Number.parseInt(s[1]+s[1],16),i=Number.parseInt(s[2]+s[2],16),l=255;else if(6===s.length)a=Number.parseInt(s.substring(0,2),16),r=Number.parseInt(s.substring(2,4),16),i=Number.parseInt(s.substring(4,6),16),l=255;else if(8===s.length)a=Number.parseInt(s.substring(0,2),16),r=Number.parseInt(s.substring(2,4),16),i=Number.parseInt(s.substring(4,6),16),l=Number.parseInt(s.substring(6,8),16);else throw Error("Invalid hex color length");return"number"==typeof e&&(l=Math.round(255*Math.max(0,Math.min(1,e)))),{r:a,g:r,b:i,a:l}}function a(t,e,r,i=255){let l=t=>t.toString(16).padStart(2,"0"),s=`#${l(t)}${l(e)}${l(r)}`;return i<255?`${s}${l(i)}`:s}function r(e){if("string"==typeof e){let a=t.get(e);if(a)return a;let r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(e),i=r?{r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16),a:r[4]?parseInt(r[4],16):255}:{r:0,g:0,b:0,a:255};return t.set(e,i),i}return{r:e.r,g:e.g,b:e.b,a:e.a??255}}function i(t,e=100){let a=[];for(let r=0;r<=e;r++){let i=Math.round(r/e*255).toString(16).padStart(2,"0").toUpperCase(),l=`${t}${i}`;a.push(l)}return a}function l(){t.clear()}class s{colorsPresetList=[];range=[0,0,0];static transparent={r:0,g:0,b:0,a:0};constructor(t,e,a,r=.1){this.setColors(t,e,a,r)}setColors(t,e,a,i){this.colorsPresetList=[];let l=Math.max(1,Math.floor((a-e)/i)),s=a-e;this.range=[e,a,s];let n=t.map(r);for(let t=0;t<=l;t++){let a=(e+t*i-e)/s;this.colorsPresetList.push(this.interpolateColor(n,a))}}interpolateColor(t,e){let r=Math.floor(e*(t.length-1)),i=e*(t.length-1)-r,l=t[r],s=t[r+1]||t[r],n={r:Math.round(l.r+i*(s.r-l.r)),g:Math.round(l.g+i*(s.g-l.g)),b:Math.round(l.b+i*(s.b-l.b)),a:Math.round(l.a+i*(s.a-l.a))};return{...n,hax:a(n.r,n.g,n.b,n.a)}}getColor(t){if(!Number.isFinite(t))return s.transparent;let[e,,a]=this.range,r=(t-e)/a;if(r<=0)return this.colorsPresetList[0];if(r>=1)return this.colorsPresetList[this.colorsPresetList.length-1];let i=Math.min(Math.floor(r*this.colorsPresetList.length),this.colorsPresetList.length-1);return this.colorsPresetList[i]}}class n{state;constructor(t){this.state={id:t.id,container:void 0,canvas:null,ctx:null,range:t.range??[-20,100]},this.init(t)}updateProps(t){this.state={...this.state,...t}}init(t){let{id:e}=this.state,a=document.getElementById(e),r=document.createElement("canvas"),i=r.getContext?.("2d");r.style.transform="scaleY(-1)",i&&(i.imageSmoothingEnabled=!1,i.lineJoin="miter",i.lineCap="butt",i.textBaseline="middle"),i&&this.updateProps({container:a??void 0,canvas:r,ctx:i}),a?.appendChild(r),this.resize(!1)}clearRect(){let{ctx:t,canvas:e}=this.state;t.clearRect(0,0,e.width,e.height)}resize(t=!0){let{canvas:e,container:a}=this.state,{clientWidth:r,clientHeight:i}=a;r&&i&&(e.width=r,e.height=i,t&&setTimeout(()=>{this.draw()}))}draw(){}dispose(){let{canvas:t,container:e}=this.state;e?.removeChild(t)}}let o={COLOR:"#000000",THICKNESS:1,FILL_STYLE:"#ffffffB0",FILL_STYLE_PRIMARY:"#1890ff",FILL_STYLE_TRANSPARENT_BASE:"#ffffff10",LINE_COLOR:"#00ff00",POINT_COLOR:"#ff0000",DIAL_NORTH_COLOR:"#ff4d4f",DIAL_SOUTH_COLOR:"#1890ff",FLUORESCENCE_COLORS:["#000080","#0000FF","#00FFFF","#00FF00","#FFFF00","#FF0000"],RANGE:[-20,100]},h={LEVEL_MIN:-20,LEVEL_MAX:140,LEVEL_RANGE:161,MAX_GAUSSIAN_RADIUS:30},u={Y_RANGE:[-1,1],SEGMENT_SIZE:5,MODE:"classic",DECAY_FACTOR:.98,MAX_ACCUMULATION:1e3,MODERN_COLORS:["#000080","#0000FF","#00FFFF","#00FF00","#FFFF00","#FF0000"],CLASSIC_COLORS:["#00ff00","#ff0000"],CLASSIC_ALPHA_GAIN:50};var c=/*#__PURE__*/function(t){return t.Horizontal="horizontal",t.Vertical="vertical",t}({}),d=/*#__PURE__*/function(t){return t.Circle="circle",t.Rect="rect",t.Line="line",t.Stepline="stepline",t.Bar="bar",t.Area="area",t}({}),f=/*#__PURE__*/function(t){return t.Canvas="canvas",t.WebGL="webgl",t}({}),g=/*#__PURE__*/function(t){return t.Gaussian="gaussian",t.Grid="grid",t}({});class p extends n{init(t){super.init(t);let{colors:e,display:a,fluorescenceRenderMode:r}=t;this.updateProps({colors:e,data:new Uint32Array(0),display:a,renderMode:r??g.Gaussian}),this.resize()}updateProps(t){let e=t.range&&(t.range[0]!==this.state.range?.[0]||t.range[1]!==this.state.range?.[1]),a=void 0!==t.renderMode&&t.renderMode!==this.state.renderMode;super.updateProps(t),(e||a)&&this.state.data?.length>0&&this.draw()}setRenderMode(t){this.updateProps({renderMode:t})}clearImageData(){let{ctx:t,canvas:{height:e,width:a}}=this.state;e&&a&&this.updateProps({imageData:t.createImageData(a,e)})}clearRect(){super.clearRect(),this.clearImageData()}clear(){this.clearRect(),this.updateProps({data:new Uint32Array(0)})}dispose(){this.intensityMatrixCache=null,this.gridCentersCache=null,this.weightLookupCache=null,this.colorLookupCache=null,this.colorCache.clear(),this.lastRenderParams=null,this.blockPositionsCache=null,this.lastBlockRenderParams=null}drawBlocks(){let{imageData:t,data:e,canvas:a,ctx:r,colors:i=o.FLUORESCENCE_COLORS,range:l=o.RANGE}=this.state;if(!e||0===e.length||!t)return;let{width:s,height:n}=a,[u,c]=l,d=c-u;if(d<=0)return;let f=e.length/h.LEVEL_RANGE;if(!Number.isInteger(f)||f<=0)return;let g={dataLength:f,width:s,height:n,rangeMin:u,rangeMax:c};if(!this.lastBlockRenderParams||Object.keys(g).some(t=>this.lastBlockRenderParams?.[t]!==g[t])||!this.blockPositionsCache||this.blockPositionsCache.length!==f){this.blockPositionsCache=Array(f);let t=Math.max(1,Math.floor(s/f));for(let e=0;e<f;e++){let a=Math.floor(e*s/f),r=Math.min(s-1,a+t-1);this.blockPositionsCache[e]={startX:a,endX:r,width:r-a+1}}}this.lastBlockRenderParams=g;let p=t.data;p.fill(0);let m=1/d,T=n-1,C=Math.max(1,Math.ceil(n/d)),M=0;for(let t=0;t<f;t++){let a=t*h.LEVEL_RANGE;for(let t=0;t<h.LEVEL_RANGE;t++){let r=e[a+t];if(r<=0)continue;let i=t+h.LEVEL_MIN;i<u||i>c||!(r>M)||(M=r)}}let E=Math.log(Math.max(M,1)+1);for(let t=0;t<f;t++){let{startX:a,endX:r}=this.blockPositionsCache[t],l=t*h.LEVEL_RANGE;for(let t=0;t<h.LEVEL_RANGE;t++){let n=e[l+t];if(n<=0)continue;let o=t+h.LEVEL_MIN;if(o<u||o>c)continue;let d=Math.max(0,Math.floor((o-u)*m*T-C/2)),f=Math.min(T,d+C-1),g=Math.log(n+1)/E,M=Math.round(255*g),{r:R,g:L,b:A}=this.interpolateColor(i,g);for(let t=d;t<=f;t++){let e=t*s;for(let t=a;t<=r;t++){let a=(e+t)*4;p[a]=R,p[a+1]=L,p[a+2]=A,p[a+3]=M}}}}r.putImageData(t,0,0)}resize(){super.resize(),this.clearImageData()}setRange(t){t&&(this.updateProps({range:t}),this.draw())}render(t){t?.fluorescenceData?.length>=0&&((this.state.data?.length??0)!==t.fluorescenceData.length&&(this.clearImageData(),this.intensityMatrixCache=null,this.gridCentersCache=null,this.blockPositionsCache=null,this.lastRenderParams=null,this.lastBlockRenderParams=null),this.state.data=t.fluorescenceData,this.state.fluorescenceMaxCount=t.fluorescenceMaxCount,this.draw())}interpolateColor(t,e){if(!t||0===t.length)return{r:255,g:255,b:255,a:255};e=Math.max(0,Math.min(1,e));let a=t=>"string"==typeof t?this.hexToRgb(t):{r:t.r,g:t.g,b:t.b};if(1===t.length||0===e)return{...a(t[0]),a:255};if(1===e)return{...a(t[t.length-1]),a:255};let r=e*(t.length-1),i=Math.floor(r),l=r-i,s=Math.min(i,t.length-2),n=a(t[s]),o=a(t[s+1]);return{r:Math.round(n.r+(o.r-n.r)*l),g:Math.round(n.g+(o.g-n.g)*l),b:Math.round(n.b+(o.b-n.b)*l),a:255}}colorCache=new Map;hexToRgb(t){let e=this.colorCache.get(t);if(e)return e;let a=r(t),i={r:a.r,g:a.g,b:a.b};return this.colorCache.set(t,i),i}lastRenderParams=null;intensityMatrixCache=null;gridCentersCache=null;weightLookupCache=null;colorLookupCache=null;blockPositionsCache=null;lastBlockRenderParams=null;draw(){let{imageData:t,data:e,canvas:a,ctx:r,colors:i=o.FLUORESCENCE_COLORS,range:l=o.RANGE,fluorescenceMaxCount:s=1,display:n,renderMode:u=g.Gaussian}=this.state;if(!n||!e||0===e.length||!t)return;if(u===g.Grid){this.drawBlocks();return}let{width:c,height:d}=a,[f,p]=l,m=p-f;if(m<=0)return;let T=e.length/h.LEVEL_RANGE;if(!Number.isInteger(T)||T<=0)return;let C={dataLength:T,rangeMin:f,rangeMax:p,width:c,height:d,maxCount:s},M=!this.lastRenderParams||this.lastRenderParams.dataLength!==C.dataLength||this.lastRenderParams.width!==C.width,E=!this.lastRenderParams||this.lastRenderParams.height!==C.height,R=!this.colorLookupCache;this.lastRenderParams=C;let L=t.data;L.fill(0);let A=Math.min(Math.max(2,Math.ceil(d/m),Math.floor(d/50)),h.MAX_GAUSSIAN_RADIUS),S=A*A,_=c*d,P=Math.min(Math.max(A,Math.ceil(c/T)),h.MAX_GAUSSIAN_RADIUS);this.intensityMatrixCache&&this.intensityMatrixCache.length===_?this.intensityMatrixCache.fill(0):this.intensityMatrixCache=new Float32Array(_);let I=this.intensityMatrixCache;if(M||!this.gridCentersCache||this.gridCentersCache.length!==T){this.gridCentersCache=new Float32Array(T);let t=c/T;for(let e=0;e<T;e++){let a=Math.floor(t*e),r=Math.ceil(t*(e+1));this.gridCentersCache[e]=(a+r)/2}}let x=this.gridCentersCache,b=Math.ceil(10*A)+1;if(E||!this.weightLookupCache||this.weightLookupCache.length!==b){this.weightLookupCache=new Float32Array(b);for(let t=0;t<=10*A;t++){let e=t/10;this.weightLookupCache[t]=Math.exp(-(e*e)/(2*S))}}let w=this.weightLookupCache,y=0;for(let t=0;t<T;t++){let a=x[t],r=t*h.LEVEL_RANGE;for(let t=0;t<h.LEVEL_RANGE;t++){let i=e[r+t];if(i<=0)continue;let l=t+h.LEVEL_MIN;if(l<f||l>p)continue;let n=(l-f)/m*(d-1),o=Math.log(i+1)/Math.log(Math.max(s,1)+1),u=Math.max(0,Math.floor(a-P)),g=Math.min(c-1,Math.ceil(a+P)),T=Math.max(0,Math.floor(n-A)),C=Math.min(d-1,Math.ceil(n+A));for(let t=T;t<=C;t++){let e=t-n,r=e*e,i=t*c;for(let t=u;t<=g;t++){let e=(t-a)*A/P,l=e*e+r;if(l>S)continue;let s=Math.floor(10*Math.sqrt(l)),n=s<w.length?w[s]:0,h=i+t,u=I[h]+o*n;I[h]=u,u>y&&(y=u)}}}}let N=y>0?1/y:0;if(R||!this.colorLookupCache||256!==this.colorLookupCache.length){this.colorLookupCache=Array(256);for(let t=0;t<256;t++){let e=t/255;this.colorLookupCache[t]=this.interpolateColor(i,e)}}let v=this.colorLookupCache;for(let t=0;t<I.length;t++){let e=I[t];if(e<=.001)continue;let a=Math.min(e*N,1),r=v[Math.min(Math.floor(255*a),255)],i=4*t;L[i]=r.r,L[i+1]=r.g,L[i+2]=r.b,L[i+3]=Math.round(255*a)}r.putImageData(t,0,0)}}function m(t,e,a,r,i){if(!a)return;let l=a.length,s=e/l,n=0;for(let e=0;e<l;e++){let l=a[e],o=l.length;if(0===o)continue;0===n&&(n=t/o);let h=Math.floor(s*e),u=Math.ceil(s*(e+1));for(let e=0;e<o;e++){let a=l[e],s=Math.floor(n*e),o=Math.ceil(n*(e+1)),c=i(a);for(let e=h;e<u;e++){let a=e*t;for(let t=s;t<o;t++){let e=(a+t)*4;r[e]=c.r,r[e+1]=c.g,r[e+2]=c.b,r[e+3]=c.a}}}}}function T(t){if(!Array.isArray(t)||0===t.length)throw Error("Input must be a non-empty array.");let e=t[0],a=t[0];for(let r=1;r<t.length;r++)t[r]<e?e=t[r]:t[r]>a&&(a=t[r]);return[e,a]}function C(t){return"number"==typeof t&&Number.isFinite(t)}function M(t){return new Float64Array(t.flatMap(e=>0===e.length?Array(t[0].length).fill(Number.NaN):e))}let E=null;function R(){if(null!==E)return E;try{let t=document.createElement("canvas").getContext("webgl2");if(E=!!t,t){let e=t.getExtension("WEBGL_lose_context");e?.loseContext()}}catch{E=!1}return E}class L extends n{init(t){super.init(t),this.state.canvas.style.transform="scaleY(1)";let e=t.fillStyle??o.FILL_STYLE,a=t.fillStylePrimary??o.FILL_STYLE_PRIMARY,r=t.fillStyleTransparentBase??o.FILL_STYLE_TRANSPARENT_BASE;this.updateProps({fillStyle:e,fillStylePrimary:a,fillStyleTransparentBase:r,baseWidth:6,padding:t.padding??0,step:t.ticksStep??10,lineWidth:1,data:{value:0,limit:0}})}clear(){this.clearRect();let{ctx:t,BGCanvas:e}=this.state;e&&t.drawImage(e,0,0)}resize(){super.resize(),this.state.lineWidth&&this.drawBackground()}render(t){this.state.data={...this.state.data,...t},this.draw()}draw(){let{data:{value:t},range:[e,a],canvas:r,ctx:i,baseWidth:l,padding:s,BGCanvas:n,fillStylePrimary:o}=this.state;this.clearRect(),n&&i.drawImage(n,0,0);let h=3*l,u=r.height-2*s,c=(r.width-h)/2,d=(t-e)/(a-e)*u;i.fillStyle=o,i.fillRect(c,u-d+s,h,d),this.drawLimit()}drawLimit(){let{data:{limit:t},range:[e,a],canvas:r,ctx:i,baseWidth:l,padding:s,lineWidth:n,fillStylePrimary:o}=this.state;if(!C(t))return;let h=3*l,u=r.height-2*s,c=(r.width-h)/2,d=u*(a-t)/(a-e)+s;i.beginPath(),i.moveTo(c+h,d),i.lineTo(c+h+9,d-9),i.lineTo(c+h+9+30,d-9),i.lineTo(c+h+9+30,d+9),i.lineTo(c+h+9,d+9),i.lineTo(c+h,d),i.lineTo(c,d),i.lineWidth=n,i.strokeStyle=o,i.stroke(),i.fillStyle=o,i.font="12px Arial",i.textAlign="center",i.textBaseline="middle",i.fillText(t.toString(),c+h+9+15,d+1)}drawBackground(){let{canvas:t,baseWidth:e,padding:a,lineWidth:r,step:i,range:[l,s],fillStyle:n,fillStyleTransparentBase:o}=this.state,h=document.createElement("canvas");h.width=t.width,h.height=t.height;let u=h.getContext("2d");if(!u)return;let c=3*e,d=t.height-2*a,f=(t.width-c)/2,g=Array.from({length:11},(t,e)=>l+Math.round(e*(s-l)/10/i)*i);u.fillStyle=o,u.fillRect(f,a,c,d);for(let t=l;t<=s;t+=i){let i=g.includes(t),o=d*(s-t)/(s-l)+a;u.beginPath(),u.moveTo(f-(i?e:e/2),o),u.lineTo(f,o),u.strokeStyle=n,u.lineWidth=i?r:r/2,u.stroke(),i&&(u.fillStyle=n,u.font="12px Arial",u.textAlign="right",u.textBaseline="middle",u.fillText(t.toString(),f-1.2*e,o))}this.state.BGCanvas=h}}class A{state;constructor(t){this.state={id:t.id,container:void 0,canvas:null,gl:null,range:t.range??[-20,100]},this.init(t)}updateProps(t){this.state={...this.state,...t}}init(t){let{id:e}=this.state,a=document.getElementById(e),r=document.createElement("canvas"),i=r.getContext("webgl2",{alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1});if(!i){console.error("WebGL 2.0 not supported");return}r.style.transform="scaleY(-1)",this.updateProps({container:a??void 0,canvas:r,gl:i}),a?.appendChild(r),this.resize(!1)}compileShader(t,e){let{gl:a}=this.state,r=a.createShader(t);return r?(a.shaderSource(r,e),a.compileShader(r),a.getShaderParameter(r,a.COMPILE_STATUS))?r:(console.error("Shader compile error:",a.getShaderInfoLog(r)),a.deleteShader(r),null):null}createProgram(t){let{gl:e}=this.state,a=this.compileShader(e.VERTEX_SHADER,t.vertex),r=this.compileShader(e.FRAGMENT_SHADER,t.fragment);if(!a||!r)return null;let i=e.createProgram();return i?(e.attachShader(i,a),e.attachShader(i,r),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS))?(e.deleteShader(a),e.deleteShader(r),i):(console.error("Program link error:",e.getProgramInfoLog(i)),e.deleteProgram(i),null):null}createTexture(){let{gl:t}=this.state,e=t.createTexture();return e?(t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),e):null}createQuadBuffer(){let{gl:t}=this.state,e=t.createBuffer();if(!e)return null;t.bindBuffer(t.ARRAY_BUFFER,e);let a=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);return t.bufferData(t.ARRAY_BUFFER,a,t.STATIC_DRAW),e}clearRect(){let{gl:t}=this.state;t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)}resize(t=!0){let{canvas:e,container:a,gl:r}=this.state;if(!a)return;let{clientWidth:i,clientHeight:l}=a;i&&l&&(e.width=i,e.height=l,r.viewport(0,0,i,l),t&&setTimeout(()=>{this.draw()}))}draw(){}dispose(){let{gl:t,canvas:e}=this.state;if(t){let e=t.getExtension("WEBGL_lose_context");e&&e.loseContext()}e?.remove()}}let S=`#version 300 es
2
2
  in vec2 a_position;
3
3
  out vec2 v_texCoord;
4
4
 
@@ -7,7 +7,7 @@ void main() {
7
7
  // 将 [-1, 1] 映射到 [0, 1]
8
8
  v_texCoord = a_position * 0.5 + 0.5;
9
9
  }
10
- `;const INVALID_VALUE=-34028235e31;const FRAGMENT_SHADER=`#version 300 es
10
+ `,_=-34028235e31,P=`#version 300 es
11
11
  precision highp float;
12
12
 
13
13
  in vec2 v_texCoord;
@@ -43,4 +43,4 @@ void main() {
43
43
  // 从颜色查找纹理获取颜色
44
44
  fragColor = texture(u_colorTexture, vec2(normalized, 0.5));
45
45
  }
46
- `;class HeatmapWebGL extends WebGLEngine{init(props){super.init(props);const{gl}=this.state;if(!gl)return;const colorsInput=props.colors;const colors=colorsInput&&colorsInput.length>0?colorsInput:DEFAULTS.FLUORESCENCE_COLORS;const program=this.createProgram({vertex:VERTEX_SHADER,fragment:FRAGMENT_SHADER});const quadBuffer=this.createQuadBuffer();const dataTexture=this.createTexture();const colorTexture=this.createTexture();const maxTextureSize=gl.getParameter(gl.MAX_TEXTURE_SIZE);if(dataTexture){gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,dataTexture);const emptyData=new Float32Array([INVALID_VALUE]);gl.texImage2D(gl.TEXTURE_2D,0,gl.R32F,1,1,0,gl.RED,gl.FLOAT,emptyData)}const range=props.range??DEFAULTS.RANGE;const[rangeMin,rangeMax]=range;const CI=new ColorInterpolator(colors,rangeMin,rangeMax,.1);this.updateProps({data:[],colors,program,quadBuffer,dataTexture,dataTextures:dataTexture?[dataTexture]:[],dataTiles:[],colorTexture,dataWidth:0,dataHeight:0,CI,maxTextureSize});gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);this.updateColorTexture();gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT);this.resize()}updateColorTexture(){const{gl,colorTexture,CI,range}=this.state;if(!gl||!colorTexture||!CI)return;const[rangeMin,rangeMax]=range;const size=256;const colorData=new Uint8Array(4*size);for(let i=0;i<size;i++){const value=rangeMin+i/(size-1)*(rangeMax-rangeMin);const color=CI.getColor(value);colorData[4*i]=color.r;colorData[4*i+1]=color.g;colorData[4*i+2]=color.b;colorData[4*i+3]=color.a}gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,colorTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,size,1,0,gl.RGBA,gl.UNSIGNED_BYTE,colorData)}updateDataTexture(){const{gl,data}=this.state;if(!gl||0===data.length)return;const height=data.length;let width=0;for(let row=0;row<height;row++){const rowLen=data[row]?.length??0;if(rowLen>width)width=rowLen}if(0===width)return;const maxSize=this.state.maxTextureSize||gl.getParameter(gl.MAX_TEXTURE_SIZE);if(!maxSize||maxSize<=0)return;const tilesX=Math.ceil(width/maxSize);const tilesY=Math.ceil(height/maxSize);const nextTileCount=tilesX*tilesY;let dataTextures=this.state.dataTextures??[];if(dataTextures.length<nextTileCount){const missing=nextTileCount-dataTextures.length;for(let i=0;i<missing;i++){const tex=this.createTexture();if(tex)dataTextures.push(tex)}}else if(dataTextures.length>nextTileCount){for(let i=nextTileCount;i<dataTextures.length;i++)gl.deleteTexture(dataTextures[i]);dataTextures=dataTextures.slice(0,nextTileCount)}const dataTiles=[];gl.activeTexture(gl.TEXTURE0);for(let ty=0;ty<tilesY;ty++){const startRow=ty*maxSize;const tileH=Math.min(maxSize,height-startRow);for(let tx=0;tx<tilesX;tx++){const startCol=tx*maxSize;const tileW=Math.min(maxSize,width-startCol);const tileIndex=ty*tilesX+tx;const texture=dataTextures[tileIndex];if(!texture)continue;const floatData=new Float32Array(tileW*tileH);for(let localRow=0;localRow<tileH;localRow++){const globalRow=startRow+localRow;const rowData=data[globalRow];const rowLen=rowData?.length??0;const rowOffset=localRow*tileW;for(let localCol=0;localCol<tileW;localCol++){const globalCol=startCol+localCol;if(0===rowLen||globalCol>=rowLen){floatData[rowOffset+localCol]=INVALID_VALUE;continue}const value=rowData[globalCol];if(void 0===value||Number.isNaN(value))floatData[rowOffset+localCol]=INVALID_VALUE;else floatData[rowOffset+localCol]=value}}gl.bindTexture(gl.TEXTURE_2D,texture);gl.texImage2D(gl.TEXTURE_2D,0,gl.R32F,tileW,tileH,0,gl.RED,gl.FLOAT,floatData);dataTiles[tileIndex]={startCol,startRow,width:tileW,height:tileH}}}this.updateProps({dataTexture:dataTextures[0]??null,dataTextures,dataTiles,dataWidth:width,dataHeight:height})}updateProps(e){super.updateProps(e);const colors=e.colors??this.state.colors;const range=e.range??this.state.range;if((e.colors||e.range)&&colors.length>0){const[rangeMin,rangeMax]=range;if(this.state.CI)this.state.CI.setColors(colors,rangeMin,rangeMax,.1);else this.state.CI=new ColorInterpolator(colors,rangeMin,rangeMax,.1);this.updateColorTexture()}}setRange(range){if(!range)return;this.updateProps({range});this.draw()}clear(){this.clearRect();this.updateProps({data:[]})}render(data){if(data?.length>0){this.state.data=data;this.updateDataTexture();this.draw()}}draw(){const{gl,program,quadBuffer,dataTextures,dataTiles,colorTexture,data,range,dataWidth,dataHeight,canvas}=this.state;if(!gl||!program||!quadBuffer||!colorTexture)return;gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT);if(0===data.length||0===dataWidth||0===dataHeight||0===dataTiles.length||0===dataTextures.length)return;const[rangeMin,rangeMax]=range;gl.useProgram(program);gl.bindBuffer(gl.ARRAY_BUFFER,quadBuffer);const positionLoc=gl.getAttribLocation(program,"a_position");gl.enableVertexAttribArray(positionLoc);gl.vertexAttribPointer(positionLoc,2,gl.FLOAT,false,0,0);const dataTextureLoc=gl.getUniformLocation(program,"u_dataTexture");const colorTextureLoc=gl.getUniformLocation(program,"u_colorTexture");const rangeMinLoc=gl.getUniformLocation(program,"u_rangeMin");const rangeMaxLoc=gl.getUniformLocation(program,"u_rangeMax");if(!dataTextureLoc||!colorTextureLoc||!rangeMinLoc||!rangeMaxLoc)return;gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,colorTexture);gl.uniform1i(colorTextureLoc,1);gl.uniform1f(rangeMinLoc,rangeMin);gl.uniform1f(rangeMaxLoc,rangeMax);const canvasWidth=canvas.width;const canvasHeight=canvas.height;const toPixX=col=>Math.round(col/dataWidth*canvasWidth);const toPixYFromTop=row=>Math.round(row/dataHeight*canvasHeight);for(let i=0;i<dataTiles.length;i++){const tile=dataTiles[i];const texture=dataTextures[i];if(!tile||!texture)continue;const x0=toPixX(tile.startCol);const x1=toPixX(tile.startCol+tile.width);const yTop0=toPixYFromTop(tile.startRow);const yTop1=toPixYFromTop(tile.startRow+tile.height);const y0=canvasHeight-yTop1;const y1=canvasHeight-yTop0;const w=x1-x0;const h=y1-y0;if(!(w<=0)&&!(h<=0)){gl.viewport(x0,y0,w,h);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture);gl.uniform1i(dataTextureLoc,0);gl.drawArrays(gl.TRIANGLES,0,6)}}gl.viewport(0,0,canvasWidth,canvasHeight)}resize(){super.resize()}dispose(){const{gl,program,quadBuffer,dataTextures,colorTexture}=this.state;if(gl){if(program)gl.deleteProgram(program);if(quadBuffer)gl.deleteBuffer(quadBuffer);for(const tex of dataTextures)gl.deleteTexture(tex);if(colorTexture)gl.deleteTexture(colorTexture)}super.dispose()}}class HeatmapCanvas extends Engine{init(props){super.init(props);const{colors}=props;this.updateProps({colors,data:[]});this.resize()}updateProps(e){super.updateProps(e);const{range=this.state.range,colors=this.state.colors}=e;if(range&&colors){const[rangeMin,rangeMax]=range;if(isNumberAlias(rangeMin)&&isNumberAlias(rangeMax)&&rangeMin<rangeMax){if(this.state.CI)this.state.CI.setColors(colors,rangeMin,rangeMax,.1);else this.updateProps({CI:new ColorInterpolator(colors,rangeMin,rangeMax,.1)})}}}clearImageData(){const{ctx,canvas:{height,width}}=this.state;if(height&&width)this.updateProps({imageData:ctx.createImageData(width,height)})}clearRect(){super.clearRect();this.clearImageData()}clear(){this.clearRect();this.updateProps({data:[]})}resize(){super.resize();this.clearImageData()}setRange(range){if(!range)return;this.updateProps({range});this.draw()}render(data){if(data?.length>=0){this.state.data=data;this.draw()}}draw(){const{imageData,data,canvas,ctx,CI}=this.state;if(0===data.length)return;fillImageData(canvas.width,canvas.height,data,imageData.data,value=>CI.getColor(value));ctx.putImageData(imageData,0,0)}}function createHeatmap(props){const{renderer=enums_RendererType.Canvas}=props;if(renderer===enums_RendererType.WebGL){if(isWebGL2Supported())return new HeatmapWebGL(props);console.warn("[Heatmap] WebGL 2.0 not supported, falling back to Canvas")}return new HeatmapCanvas(props)}const Heatmap_Heatmap=function(props){return createHeatmap(props)};const cartesian_Heatmap=Heatmap_Heatmap;const ENABLE_AREA_GRADIENT=false;class SeriesCanvas extends Engine{init(props){super.init(props);const{series,barValue2Color,disabledClearRect,colors}=props;this.updateProps({interval:0,series:{},barValue2Color,disabledClearRect,colors});this.setRange(this.state.range);if(Array.isArray(series))series.forEach(e=>{this.setSeries(e)})}updateProps(e){super.updateProps(e);const{colors=this.state.colors}=e;if(this.state.barValue2Color&&!this.state.CI&&colors)this.updateProps({CI:new ColorInterpolator(colors,0,100,.1)})}clear(){super.clearRect();const{series}=this.state;const seriesArray=Object.entries(series);seriesArray.forEach(([name,i])=>{this.setSeries({...i,name,data:void 0})})}setRange(range){this.updateProps({range:[range[0],range[1],range[1]-range[0]]});this.draw()}setIntervel(interval){if(!interval)return;this.updateProps({interval})}setSeries(e){if(e?.name){const{name}=e;const{series}=this.state;series[name]={thickness:DEFAULTS.THICKNESS,display:true,color:DEFAULTS.COLOR,type:enums_GraphicType.Line,data:void 0,path:void 0,orientation:enums_OrientationType.Vertical,...series[name],...e};this.draw()}}render(e){e&&this.setSeries(e);this.draw()}draw(){const{series,ctx,disabledClearRect}=this.state;if(!disabledClearRect)this.clearRect();const seriesArray=Object.values(series);const{range,canvas}=this.state;const min=range[0];const max=range[1];const{width,height}=canvas;const rangeY=max-min;ctx.save();ctx.translate(.5,.5);for(let s=0;s<seriesArray.length;s+=1){const seriesItem=seriesArray[s];const{display,type,data,orientation}=seriesItem;const thickness=seriesItem.thickness??DEFAULTS.THICKNESS;const color=seriesItem.color??DEFAULTS.COLOR;if(!data||!display)continue;const len=data.length;const per=width/len;switch(type){case enums_GraphicType.Line:case enums_GraphicType.Stepline:ctx.lineWidth=thickness;ctx.strokeStyle=color;break;case enums_GraphicType.Circle:case enums_GraphicType.Rect:case enums_GraphicType.Bar:case enums_GraphicType.Area:ctx.fillStyle=color;break}if(type===enums_GraphicType.Line){let points=[];for(let i=0;i<len;i+=1){const value=data[i];if(void 0===value||Number.isNaN(value)){if(points.length>0){ctx.beginPath();ctx.moveTo(points[0][0],points[0][1]);for(let j=1;j<points.length;j++)ctx.lineTo(points[j][0],points[j][1]);ctx.lineWidth=thickness;ctx.strokeStyle=color;ctx.stroke();points=[]}}else{const x=Math.round((i+.5)*per);const y=Math.round((value-min)/rangeY*height);points.push([x,y])}}if(points.length>0){ctx.beginPath();ctx.moveTo(points[0][0],points[0][1]);for(let j=1;j<points.length;j++)ctx.lineTo(points[j][0],points[j][1]);ctx.lineWidth=thickness;ctx.strokeStyle=color;ctx.stroke()}}if(type===enums_GraphicType.Stepline){let points=[];for(let i=0;i<len;i+=1){const value=data[i];if(void 0===value||Number.isNaN(value)){if(points.length>0){ctx.beginPath();ctx.moveTo(points[0][0],points[0][1]);for(let j=1;j<points.length;j++){const[_,py]=points[j-1];const[cx,cy]=points[j];ctx.lineTo(cx,py);ctx.lineTo(cx,cy)}const[lx,ly]=points[points.length-1];const endX=Math.round(lx+per);ctx.lineTo(endX,ly);ctx.lineWidth=thickness;ctx.strokeStyle=color;ctx.stroke();points=[]}}else{const x=Math.round(i*per);const y=Math.round((value-min)/rangeY*height);points.push([x,y])}}if(points.length>0){ctx.beginPath();ctx.moveTo(points[0][0],points[0][1]);for(let j=1;j<points.length;j++){const[_,py]=points[j-1];const[cx,cy]=points[j];ctx.lineTo(cx,py);ctx.lineTo(cx,cy)}const[lx,ly]=points[points.length-1];const endX=Math.round(lx+per);ctx.lineTo(endX,ly);ctx.lineWidth=thickness;ctx.strokeStyle=color;ctx.stroke()}}if(type===enums_GraphicType.Circle){const radius=+thickness/2;const endAngle=2*Math.PI;for(let i=0;i<len;i+=1){const x=Math.round((i+.5)*per);const y=Math.round((data[i]-min)/rangeY*height);ctx.beginPath();ctx.arc(x,y,radius,0,endAngle);ctx.fillStyle=color;ctx.fill()}}if(type===enums_GraphicType.Rect){const side=+thickness;for(let i=0;i<len;i+=1){const x=Math.round((i+.5)*per);const y=Math.round((data[i]-min)/rangeY*height);ctx.beginPath();ctx.rect(x,y,side,side);ctx.fillStyle=color;ctx.fill()}}if(type===enums_GraphicType.Area){let points=[];const{r,g,b}=hexToRGBA(color??DEFAULTS.COLOR);const drawArea=pointsToDraw=>{if(0===pointsToDraw.length)return;const[firstX,firstY]=pointsToDraw[0];const[lastX,lastY]=pointsToDraw[pointsToDraw.length-1];const endX=Math.round(lastX+per);ctx.beginPath();ctx.moveTo(firstX,0);ctx.lineTo(firstX,firstY);for(let j=1;j<pointsToDraw.length;j++){const[_,prevY]=pointsToDraw[j-1];const[currX,currY]=pointsToDraw[j];ctx.lineTo(currX,prevY);ctx.lineTo(currX,currY)}ctx.lineTo(endX,lastY);ctx.lineTo(endX,0);ctx.closePath();if(ENABLE_AREA_GRADIENT){const gradient=ctx.createLinearGradient(0,0,0,height);gradient.addColorStop(0,`rgba(${r}, ${g}, ${b}, 0)`);gradient.addColorStop(1,`rgba(${r}, ${g}, ${b}, 0.5)`);ctx.fillStyle=gradient}else ctx.fillStyle=`rgba(${r}, ${g}, ${b}, 1)`;ctx.fill()};for(let i=0;i<len;i+=1){const value=data[i];if(void 0===value||Number.isNaN(value)){drawArea(points);points=[]}else points.push([Math.round(i*per),Math.round((value-min)/rangeY*height)])}drawArea(points)}if(type===enums_GraphicType.Bar){if(orientation===enums_OrientationType.Horizontal){const h=height/len;const hh=Math.round(h);for(let i=0;i<len;i+=1){const y=Math.round(height-(i+1)*h);const w=Math.round((data[i]-min)/rangeY*width);const x=width-w;ctx.beginPath();ctx.rect(x,y,w,hh);ctx.fillStyle=color;ctx.fill()}}else for(let i=0;i<len;i+=1){const startX=Math.floor(i*width/len);const endX=Math.floor((i+1)*width/len);const w=endX-startX;const h=Math.round((data[i]-min)/rangeY*height);ctx.beginPath();ctx.rect(startX,0,w,h);ctx.fillStyle=this.state.barValue2Color?this.state.CI?.getColor(data[i]).hax??color:color;ctx.fill()}}}ctx.restore()}}function createSeries(props){return new SeriesCanvas(props)}const Series_Series=function(props){return createSeries(props)};const cartesian_Series=Series_Series;function getCoordinates(radius,padding,angle){const x=radius+(radius-padding)*Math.cos(angle);const y=radius+(radius-padding)*Math.sin(angle);return[x,y]}function getMaxPolygonValue(poly){let max=0;for(const value of poly.values)if(value>max)max=value;return max}class CircularBase extends Engine{getSpecialTickConfig(_angle){}getAngleOffset(){return 0}init(props){super.init(props);this.state.canvas.style.transform="scaleY(1)";const fillStyle=props.fillStyle??DEFAULTS.FILL_STYLE;const fillStylePrimary=props.fillStylePrimary??DEFAULTS.FILL_STYLE_PRIMARY;const fillStyleTransparentBase=props.fillStyleTransparentBase??DEFAULTS.FILL_STYLE_TRANSPARENT_BASE;const markedNum=12;const baseWidth=6;this.updateProps({fillStyle,fillStylePrimary,fillStyleTransparentBase,baseWidth,padding:10*baseWidth,ticksStep:6,ticksRenderLength:5,markedAngles:Array.from({length:markedNum},(_,i)=>360/markedNum*i),color2intensity:color2intensity(fillStylePrimary),data:{series:[],range:[0,0],polygon:[],yawAngle:0,isNorthFacing:true}})}clear(){this.clearRect()}resize(){super.resize();if(this.state.markedAngles)this.drawBackground();if(this.state.data)this.drawTicks()}render(data){const prevData=this.state.data;const nextData={...prevData,...data};const shouldRedrawTicks=void 0!==data.yawAngle&&data.yawAngle!==prevData?.yawAngle||void 0!==data.isNorthFacing&&data.isNorthFacing!==prevData?.isNorthFacing;this.state.data=nextData;if(shouldRedrawTicks)this.drawTicks();this.draw()}drawTicks(){const{canvas,baseWidth,fillStyle,fillStylePrimary,ticksStep,ticksRenderLength,markedAngles,data}=this.state;const{yawAngle=0,isNorthFacing=true}=data;const ticksCanvas=document.createElement("canvas");ticksCanvas.width=canvas.width;ticksCanvas.height=canvas.height;const ticksCtx=ticksCanvas.getContext("2d");if(!ticksCtx)return;const radius=canvas.width/2;const northYawgle=isNorthFacing?0:-yawAngle;for(let i=0;i<360;i+=ticksStep){const angle=(i+northYawgle)*Math.PI/180;const isMarked=markedAngles.includes(i);const length=ticksRenderLength*(isMarked?1.2:1);const[x,y]=getCoordinates(radius,3.5*baseWidth+length+(isMarked?3:0),angle);const[xOuter,yOuter]=getCoordinates(radius,3.5*baseWidth,angle);ticksCtx.beginPath();ticksCtx.moveTo(x,y);ticksCtx.lineTo(xOuter,yOuter);ticksCtx.strokeStyle=fillStyle;ticksCtx.lineWidth=isMarked?2:.5;ticksCtx.stroke()}ticksCtx.font=`${2*baseWidth}px Arial`;ticksCtx.textAlign="center";ticksCtx.textBaseline="middle";markedAngles.forEach(angle=>{const radian=(angle+northYawgle-90)*Math.PI/180;const[x,y]=getCoordinates(radius,8*baseWidth,radian);const specialConfig=this.getSpecialTickConfig(angle);if(specialConfig){ticksCtx.fillStyle=specialConfig.color;ticksCtx.fillText(specialConfig.alias,x,y)}else{ticksCtx.fillStyle=fillStyle;ticksCtx.fillText(angle.toString(),x,y)}});const arrowWidth=canvas.width/18;ticksCtx.translate(canvas.width/2,canvas.height/2);ticksCtx.scale(1,-1);ticksCtx.rotate((isNorthFacing?-yawAngle:0)*Math.PI/180);ticksCtx.lineJoin="round";ticksCtx.lineCap="round";ticksCtx.strokeStyle=fillStylePrimary;ticksCtx.fillStyle=fillStylePrimary;ticksCtx.lineWidth=arrowWidth/6;ticksCtx.beginPath();ticksCtx.moveTo(0,arrowWidth/2);ticksCtx.lineTo(arrowWidth/2,-arrowWidth/2);ticksCtx.lineTo(0,arrowWidth/2-1/((1+Math.sqrt(5))/2)*arrowWidth);ticksCtx.lineTo(-arrowWidth/2,-arrowWidth/2);ticksCtx.lineTo(0,arrowWidth/2);ticksCtx.fill();ticksCtx.stroke();this.state.ticksCanvas=ticksCanvas}drawBackground(){const{canvas,baseWidth,padding,fillStyleTransparentBase}=this.state;const BGCanvas=document.createElement("canvas");BGCanvas.width=canvas.width;BGCanvas.height=canvas.height;const BGCtx=BGCanvas.getContext("2d");if(!BGCtx)return;const radius=canvas.width/2;BGCtx.beginPath();BGCtx.arc(radius,radius,radius-2*baseWidth,0,2*Math.PI);BGCtx.strokeStyle=fillStyleTransparentBase;BGCtx.lineWidth=baseWidth;BGCtx.stroke();new Array(5).fill(1).forEach((_,i)=>{BGCtx.beginPath();BGCtx.arc(radius,radius,(radius-padding)*(i+1)/5,0,2*Math.PI);BGCtx.strokeStyle=fillStyleTransparentBase;BGCtx.lineWidth=baseWidth/4;BGCtx.stroke()});this.state.BGCanvas=BGCanvas}draw(){const{data,canvas,ctx,baseWidth,padding,BGCanvas,ticksCanvas,color2intensity:c2i,fillStylePrimary,fillStyleTransparentBase}=this.state;const{series,range,polygon,isNorthFacing=true,yawAngle=0}=data;if(!series&&!polygon)return;this.clearRect();const radius=canvas.width/2;const northYawgle=isNorthFacing?0:-yawAngle;const angleOffset=this.getAngleOffset();if(BGCanvas)ctx.drawImage(BGCanvas,0,0);if(range){const sliceAngle=360/range.length;range.forEach((value,index)=>{const startAngle=(index*sliceAngle+northYawgle+angleOffset)*Math.PI/180;const endAngle=((index+1)*sliceAngle+northYawgle+angleOffset)*Math.PI/180;ctx.beginPath();ctx.moveTo(radius,radius);ctx.arc(radius,radius,radius-padding,startAngle,endAngle);ctx.closePath();ctx.fillStyle=c2i[value];ctx.fill()})}if(polygon?.length){const orderedPolygons=[...polygon].sort((a,b)=>getMaxPolygonValue(b)-getMaxPolygonValue(a));for(const poly of orderedPolygons){const{values,color,showDots}=poly;if(!values||values.length<3)continue;const sliceAngle=360/values.length;const polygonColor=color??fillStylePrimary;ctx.beginPath();const vertices=[];values.forEach((value,index)=>{const angle=(index*sliceAngle+northYawgle+angleOffset)*Math.PI/180;const radial=Math.max(0,Math.min(1,value))*(radius-padding);const[x,y]=getCoordinates(radius,radius-radial,angle);vertices.push([x,y]);if(0===index)ctx.moveTo(x,y);else ctx.lineTo(x,y)});ctx.closePath();ctx.save();const gradient=ctx.createRadialGradient(radius,radius,0,radius,radius,radius-padding);gradient.addColorStop(0,"transparent");gradient.addColorStop(1,polygonColor);ctx.fillStyle=gradient;ctx.fill();ctx.strokeStyle=polygonColor;ctx.lineWidth=1;ctx.lineJoin="round";ctx.lineCap="round";ctx.stroke();if(false!==showDots){ctx.fillStyle=polygonColor;const dotRadius=baseWidth/2;for(const[vx,vy]of vertices){ctx.beginPath();ctx.arc(vx,vy,dotRadius,0,2*Math.PI);ctx.fill()}}ctx.restore()}}series?.forEach(({value,color,lineWidth=baseWidth,radio=1})=>{if(null==value)return;const pointerAngle=(value+northYawgle)*Math.PI/180-Math.PI/2;const[startX,startY]=getCoordinates(radius,radius,pointerAngle);const[endX,endY]=getCoordinates(radius,padding+(1-radio)*(radius-padding)+lineWidth/2,pointerAngle);if(1!==radio){ctx.beginPath();ctx.moveTo(...getCoordinates(radius,padding+lineWidth/2,pointerAngle));ctx.lineTo(endX,endY);ctx.strokeStyle=fillStyleTransparentBase;ctx.stroke()}ctx.beginPath();ctx.moveTo(endX,endY);ctx.lineTo(startX,startY);ctx.strokeStyle=color;ctx.lineWidth=lineWidth;ctx.lineJoin="round";ctx.lineCap="round";ctx.stroke()});if(ticksCanvas)ctx.drawImage(ticksCanvas,0,0)}}const SPECIAL_TICK_CONFIG={0:{color:DEFAULTS.DIAL_NORTH_COLOR,alias:"北"},180:{color:DEFAULTS.DIAL_SOUTH_COLOR,alias:"南"}};class Dial extends CircularBase{getSpecialTickConfig(angle){return SPECIAL_TICK_CONFIG[angle]}getAngleOffset(){return -90}}class Radar extends CircularBase{getSpecialTickConfig(_angle){}getAngleOffset(){return 0}}class IQ extends Engine{init(props){super.init(props);this.updateProps({lineColor:props.lineColor??DEFAULTS.LINE_COLOR,pointColor:props.pointColor??DEFAULTS.POINT_COLOR})}clear(){this.clearRect();this.updateProps({data:{IData:[],QData:[]}})}render(data){if(data.IData&&data.QData){this.state.data=data;this.draw()}}draw(){const{data,canvas,pointColor,lineColor,ctx}=this.state;if(!data)return;const{IData,QData}=data;if(0===IData.length||0===QData.length)return;const{width,height}=ctx.canvas;ctx.clearRect(0,0,canvas.width,canvas.height);const[minX,maxX]=getMinMax(IData);const[minY,maxY]=getMinMax([minX,maxX,...QData]);const xScale=width/(maxX-minX);const yScale=height/(maxY-minY);const pointRadius=2;const points=IData.map((xVal,i)=>{const x=(xVal-minX)*xScale;const y=(QData[i]-minY)*yScale;return{x,y}});ctx.beginPath();points.forEach((point,i)=>{ctx[0===i?"moveTo":"lineTo"](point.x,point.y)});ctx.strokeStyle=lineColor;ctx.lineWidth=1;ctx.stroke();points.forEach(point=>{ctx.beginPath();ctx.arc(point.x,point.y,pointRadius,0,2*Math.PI);ctx.fillStyle=pointColor;ctx.fill()})}}const PIXEL_STRIDE=4;const COLOR_LOOKUP_STEPS=256;const createColorLookup=colors=>{const lookup=[];for(let i=0;i<COLOR_LOOKUP_STEPS;i++){const t=i/(COLOR_LOOKUP_STEPS-1);const segmentCount=colors.length-1;const segment=Math.min(Math.floor(t*segmentCount),segmentCount-1);const localT=t*segmentCount-segment;const c1=parseColor(colors[segment]);const c2=parseColor(colors[segment+1]);lookup.push({r:Math.round(c1.r+(c2.r-c1.r)*localT),g:Math.round(c1.g+(c2.g-c1.g)*localT),b:Math.round(c1.b+(c2.b-c1.b)*localT)})}return lookup};const createClassicPixelLookup=()=>{const colorLookup=createColorLookup(EYE_DEFAULTS.CLASSIC_COLORS);const lookup=new Uint8ClampedArray((EYE_DEFAULTS.MAX_ACCUMULATION+1)*PIXEL_STRIDE);const maxColorIndex=colorLookup.length-1;for(let acc=1;acc<=EYE_DEFAULTS.MAX_ACCUMULATION;acc++){const intensity=Math.min(acc*EYE_DEFAULTS.CLASSIC_ALPHA_GAIN/255,1);const colorIdx=Math.min(Math.floor(intensity*maxColorIndex),maxColorIndex);const color=colorLookup[colorIdx];const idx=acc*PIXEL_STRIDE;lookup[idx]=color.r;lookup[idx+1]=color.g;lookup[idx+2]=color.b;lookup[idx+3]=Math.min(acc*EYE_DEFAULTS.CLASSIC_ALPHA_GAIN,255)}return lookup};const CLASSIC_PIXEL_LOOKUP=createClassicPixelLookup();class IQEye extends Engine{init(props){super.init(props);this.state.iqEyeMode=this.resolveMode(props.iqEyeMode);this.initColorLookup()}resize(){super.resize();const{width,height}=this.state.canvas;this.state.accumulator=new Uint16Array(width*height);this.state.imageData=this.state.ctx.createImageData(width,height)}clear(){this.clearRect();this.state.accumulator?.fill(0);this.updateProps({data:{IData:[],QData:[]}})}render(data){if(!data.IData?.length||!data.QData?.length)return;this.state.data=data;if(!this.state.accumulator)return;if("classic"===this.state.iqEyeMode)this.state.accumulator.fill(0);else this.applyDecay();this.accumulateData(data);this.draw()}draw(){if("classic"===this.state.iqEyeMode){this.drawClassic();return}this.drawModern()}drawClassic(){const{accumulator,imageData,ctx}=this.state;if(!accumulator||!imageData)return;const pixelData=imageData.data;for(let i=0;i<accumulator.length;i++){const acc=accumulator[i];const idx=i*PIXEL_STRIDE;if(acc>0){const lookupIndex=acc*PIXEL_STRIDE;pixelData[idx]=CLASSIC_PIXEL_LOOKUP[lookupIndex];pixelData[idx+1]=CLASSIC_PIXEL_LOOKUP[lookupIndex+1];pixelData[idx+2]=CLASSIC_PIXEL_LOOKUP[lookupIndex+2];pixelData[idx+3]=CLASSIC_PIXEL_LOOKUP[lookupIndex+3]}else pixelData[idx+3]=0}ctx.putImageData(imageData,0,0)}drawModern(){const{accumulator,imageData,ctx,colorLookup}=this.state;if(!accumulator||!imageData||!colorLookup)return;const pixelData=imageData.data;const maxAcc=EYE_DEFAULTS.MAX_ACCUMULATION;for(let i=0;i<accumulator.length;i++){const acc=accumulator[i];const idx=i*PIXEL_STRIDE;if(acc>0){const intensity=Math.min(acc/maxAcc,1);const colorIdx=Math.min(Math.floor(intensity*(colorLookup.length-1)),colorLookup.length-1);const color=colorLookup[colorIdx];pixelData[idx]=color.r;pixelData[idx+1]=color.g;pixelData[idx+2]=color.b;pixelData[idx+3]=Math.round(255*Math.min(2*intensity,1))}else pixelData[idx+3]=0}ctx.putImageData(imageData,0,0)}initColorLookup(){const colors="classic"===this.state.iqEyeMode?EYE_DEFAULTS.CLASSIC_COLORS:EYE_DEFAULTS.MODERN_COLORS;this.state.colorLookup=createColorLookup(colors)}resolveMode(mode){if("modern"===mode)return"modern";return EYE_DEFAULTS.MODE}applyDecay(){const{accumulator}=this.state;if(!accumulator)return;const decay=EYE_DEFAULTS.DECAY_FACTOR;for(let i=0;i<accumulator.length;i++)accumulator[i]=Math.floor(accumulator[i]*decay)}accumulateData(data){const{accumulator,canvas}=this.state;if(!accumulator)return;const{width,height}=canvas;const[yMin,yMax]=EYE_DEFAULTS.Y_RANGE;const rangeY=yMax-yMin;const segmentSize=EYE_DEFAULTS.SEGMENT_SIZE;const pointSpacing=width/(segmentSize-1);this.accumulateSegments(data.IData,yMin,rangeY,width,height,segmentSize,pointSpacing,accumulator);this.accumulateSegments(data.QData,yMin,rangeY,width,height,segmentSize,pointSpacing,accumulator)}accumulateSegments(data,yMin,rangeY,width,height,segmentSize,pointSpacing,accumulator){const segmentCount=Math.ceil(data.length/segmentSize);for(let seg=0;seg<segmentCount;seg++){let prevX=-1,prevY=-1;for(let i=0;i<segmentSize;i++){const idx=seg*segmentSize+i;if(idx>=data.length)break;const value=data[idx];if(void 0===value)continue;const x=Math.round(i*pointSpacing);const y=Math.round((value-yMin)/rangeY*(height-1));if(prevX>=0)this.drawLine(prevX,prevY,x,y,width,height,accumulator);prevX=x;prevY=y}}}drawLine(x0,y0,x1,y1,width,height,accumulator){const dx=Math.abs(x1-x0);const dy=Math.abs(y1-y0);const sx=x0<x1?1:-1;const sy=y0<y1?1:-1;let x=x0,y=y0,err=dx-dy;const maxAcc=EYE_DEFAULTS.MAX_ACCUMULATION;while(true){if(x>=0&&x<width&&y>=0&&y<height){const idx=y*width+x;if(accumulator[idx]<maxAcc)accumulator[idx]++}if(x===x1&&y===y1)break;const e2=2*err;if(e2>-dy){err-=dy;x+=sx}if(e2<dx){err+=dx;y+=sy}}}}export{ColorInterpolator,Dial,Fluorescence,enums_FluorescenceRenderMode as FluorescenceRenderMode,Gauge,enums_GraphicType as GraphicType,cartesian_Heatmap as Heatmap,HeatmapCanvas,HeatmapWebGL,IQ,IQEye,enums_OrientationType as OrientationType,Radar,enums_RendererType as RendererType,cartesian_Series as Series,SeriesCanvas,color2intensity,createHeatmap,createSeries,hexToRGBA,rgbToHex};
46
+ `;class I extends A{init(t){super.init(t);let{gl:e}=this.state;if(!e)return;let a=t.colors,r=a&&a.length>0?a:o.FLUORESCENCE_COLORS,i=this.createProgram({vertex:S,fragment:P}),l=this.createQuadBuffer(),n=this.createTexture(),h=this.createTexture(),u=e.getParameter(e.MAX_TEXTURE_SIZE);if(n){e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,n);let t=new Float32Array([-34028235e31]);e.texImage2D(e.TEXTURE_2D,0,e.R32F,1,1,0,e.RED,e.FLOAT,t)}let[c,d]=t.range??o.RANGE,f=new s(r,c,d,.1);this.updateProps({data:[],colors:r,program:i,quadBuffer:l,dataTexture:n,dataTextures:n?[n]:[],dataTiles:[],colorTexture:h,dataWidth:0,dataHeight:0,CI:f,maxTextureSize:u}),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA),this.updateColorTexture(),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),this.resize()}updateColorTexture(){let{gl:t,colorTexture:e,CI:a,range:r}=this.state;if(!t||!e||!a)return;let[i,l]=r,s=new Uint8Array(1024);for(let t=0;t<256;t++){let e=i+t/255*(l-i),r=a.getColor(e);s[4*t]=r.r,s[4*t+1]=r.g,s[4*t+2]=r.b,s[4*t+3]=r.a}t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,e),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,256,1,0,t.RGBA,t.UNSIGNED_BYTE,s)}updateDataTexture(){let{gl:t,data:e}=this.state;if(!t||0===e.length)return;let a=e.length,r=0;for(let t=0;t<a;t++){let a=e[t]?.length??0;a>r&&(r=a)}if(0===r)return;let i=this.state.maxTextureSize||t.getParameter(t.MAX_TEXTURE_SIZE);if(!i||i<=0)return;let l=Math.ceil(r/i),s=Math.ceil(a/i),n=l*s,o=this.state.dataTextures??[];if(o.length<n){let t=n-o.length;for(let e=0;e<t;e++){let t=this.createTexture();t&&o.push(t)}}else if(o.length>n){for(let e=n;e<o.length;e++)t.deleteTexture(o[e]);o=o.slice(0,n)}let h=[];t.activeTexture(t.TEXTURE0);for(let n=0;n<s;n++){let s=n*i,u=Math.min(i,a-s);for(let a=0;a<l;a++){let c=a*i,d=Math.min(i,r-c),f=n*l+a,g=o[f];if(!g)continue;let p=new Float32Array(d*u);for(let t=0;t<u;t++){let a=e[s+t],r=a?.length??0,i=t*d;for(let t=0;t<d;t++){let e=c+t;if(0===r||e>=r){p[i+t]=-34028235e31;continue}let l=a[e];void 0===l||Number.isNaN(l)?p[i+t]=-34028235e31:p[i+t]=l}}t.bindTexture(t.TEXTURE_2D,g),t.texImage2D(t.TEXTURE_2D,0,t.R32F,d,u,0,t.RED,t.FLOAT,p),h[f]={startCol:c,startRow:s,width:d,height:u}}}this.updateProps({dataTexture:o[0]??null,dataTextures:o,dataTiles:h,dataWidth:r,dataHeight:a})}updateProps(t){super.updateProps(t);let e=t.colors??this.state.colors,a=t.range??this.state.range;if((t.colors||t.range)&&e.length>0){let[t,r]=a;this.state.CI?this.state.CI.setColors(e,t,r,.1):this.state.CI=new s(e,t,r,.1),this.updateColorTexture()}}setRange(t){t&&(this.updateProps({range:t}),this.draw())}clear(){this.clearRect(),this.updateProps({data:[]})}render(t){t?.length>0&&(this.state.data=t,this.updateDataTexture(),this.draw())}draw(){let{gl:t,program:e,quadBuffer:a,dataTextures:r,dataTiles:i,colorTexture:l,data:s,range:n,dataWidth:o,dataHeight:h,canvas:u}=this.state;if(!t||!e||!a||!l||(t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),0===s.length||0===o||0===h||0===i.length||0===r.length))return;let[c,d]=n;t.useProgram(e),t.bindBuffer(t.ARRAY_BUFFER,a);let f=t.getAttribLocation(e,"a_position");t.enableVertexAttribArray(f),t.vertexAttribPointer(f,2,t.FLOAT,!1,0,0);let g=t.getUniformLocation(e,"u_dataTexture"),p=t.getUniformLocation(e,"u_colorTexture"),m=t.getUniformLocation(e,"u_rangeMin"),T=t.getUniformLocation(e,"u_rangeMax");if(!g||!p||!m||!T)return;t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,l),t.uniform1i(p,1),t.uniform1f(m,c),t.uniform1f(T,d);let C=u.width,M=u.height,E=t=>Math.round(t/o*C),R=t=>Math.round(t/h*M);for(let e=0;e<i.length;e++){let a=i[e],l=r[e];if(!a||!l)continue;let s=E(a.startCol),n=E(a.startCol+a.width),o=R(a.startRow),h=M-R(a.startRow+a.height),u=n-s,c=M-o-h;u<=0||c<=0||(t.viewport(s,h,u,c),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,l),t.uniform1i(g,0),t.drawArrays(t.TRIANGLES,0,6))}t.viewport(0,0,C,M)}resize(){super.resize()}dispose(){let{gl:t,program:e,quadBuffer:a,dataTextures:r,colorTexture:i}=this.state;if(t){for(let i of(e&&t.deleteProgram(e),a&&t.deleteBuffer(a),r))t.deleteTexture(i);i&&t.deleteTexture(i)}super.dispose()}}class x extends n{init(t){super.init(t);let{colors:e}=t;this.updateProps({colors:e,data:[]}),this.resize()}updateProps(t){super.updateProps(t);let{range:e=this.state.range,colors:a=this.state.colors}=t;if(e&&a){let[t,r]=e;C(t)&&C(r)&&t<r&&(this.state.CI?this.state.CI.setColors(a,t,r,.1):this.updateProps({CI:new s(a,t,r,.1)}))}}clearImageData(){let{ctx:t,canvas:{height:e,width:a}}=this.state;e&&a&&this.updateProps({imageData:t.createImageData(a,e)})}clearRect(){super.clearRect(),this.clearImageData()}clear(){this.clearRect(),this.updateProps({data:[]})}resize(){super.resize(),this.clearImageData()}setRange(t){t&&(this.updateProps({range:t}),this.draw())}render(t){t?.length>=0&&(this.state.data=t,this.draw())}draw(){let{imageData:t,data:e,canvas:a,ctx:r,CI:i}=this.state;0!==e.length&&(m(a.width,a.height,e,t.data,t=>i.getColor(t)),r.putImageData(t,0,0))}}function b(t){let{renderer:e=f.WebGL}=t;if(e===f.WebGL){if(R())return new I(t);console.warn("[Heatmap] WebGL 2.0 not supported, falling back to Canvas")}return new x(t)}let w=function(t){return b(t)},y=w,N=!1;class v extends n{init(t){super.init(t);let{series:e,barValue2Color:a,disabledClearRect:r,colors:i}=t;this.updateProps({interval:0,series:{},barValue2Color:a,disabledClearRect:r,colors:i}),this.setRange(this.state.range),Array.isArray(e)&&e.forEach(t=>{this.setSeries(t)})}updateProps(t){super.updateProps(t);let{colors:e=this.state.colors}=t;this.state.barValue2Color&&!this.state.CI&&e&&this.updateProps({CI:new s(e,0,100,.1)})}clear(){super.clearRect();let{series:t}=this.state;Object.entries(t).forEach(([t,e])=>{this.setSeries({...e,name:t,data:void 0})})}setRange(t){this.updateProps({range:[t[0],t[1],t[1]-t[0]]}),this.draw()}setIntervel(t){t&&this.updateProps({interval:t})}setSeries(t){if(t?.name){let{name:e}=t,{series:a}=this.state;a[e]={thickness:o.THICKNESS,display:!0,color:o.COLOR,type:d.Line,data:void 0,path:void 0,orientation:c.Vertical,...a[e],...t},this.draw()}}render(t){t&&this.setSeries(t),this.draw()}draw(){let{series:t,ctx:a,disabledClearRect:r}=this.state;r||this.clearRect();let i=Object.values(t),{range:l,canvas:s}=this.state,n=l[0],h=l[1],{width:u,height:f}=s,g=h-n;a.save(),a.translate(.5,.5);for(let t=0;t<i.length;t+=1){let r=i[t],{display:l,type:s,data:h,orientation:p}=r,m=r.thickness??o.THICKNESS,T=r.color??o.COLOR;if(!h||!l)continue;let C=h.length,M=u/C;switch(s){case d.Line:case d.Stepline:a.lineWidth=m,a.strokeStyle=T;break;case d.Circle:case d.Rect:case d.Bar:case d.Area:a.fillStyle=T}if(s===d.Line){let t=[];for(let e=0;e<C;e+=1){let r=h[e];if(void 0===r||Number.isNaN(r)){if(t.length>0){a.beginPath(),a.moveTo(t[0][0],t[0][1]);for(let e=1;e<t.length;e++)a.lineTo(t[e][0],t[e][1]);a.lineWidth=m,a.strokeStyle=T,a.stroke(),t=[]}}else{let a=Math.round((e+.5)*M),i=Math.round((r-n)/g*f);t.push([a,i])}}if(t.length>0){a.beginPath(),a.moveTo(t[0][0],t[0][1]);for(let e=1;e<t.length;e++)a.lineTo(t[e][0],t[e][1]);a.lineWidth=m,a.strokeStyle=T,a.stroke()}}if(s===d.Stepline){let t=[];for(let e=0;e<C;e+=1){let r=h[e];if(void 0===r||Number.isNaN(r)){if(t.length>0){a.beginPath(),a.moveTo(t[0][0],t[0][1]);for(let e=1;e<t.length;e++){let[r,i]=t[e-1],[l,s]=t[e];a.lineTo(l,i),a.lineTo(l,s)}let[e,r]=t[t.length-1],i=Math.round(e+M);a.lineTo(i,r),a.lineWidth=m,a.strokeStyle=T,a.stroke(),t=[]}}else{let a=Math.round(e*M),i=Math.round((r-n)/g*f);t.push([a,i])}}if(t.length>0){a.beginPath(),a.moveTo(t[0][0],t[0][1]);for(let e=1;e<t.length;e++){let[r,i]=t[e-1],[l,s]=t[e];a.lineTo(l,i),a.lineTo(l,s)}let[e,r]=t[t.length-1],i=Math.round(e+M);a.lineTo(i,r),a.lineWidth=m,a.strokeStyle=T,a.stroke()}}if(s===d.Circle){let t=+m/2,e=2*Math.PI;for(let r=0;r<C;r+=1){let i=Math.round((r+.5)*M),l=Math.round((h[r]-n)/g*f);a.beginPath(),a.arc(i,l,t,0,e),a.fillStyle=T,a.fill()}}if(s===d.Rect){let t=+m;for(let e=0;e<C;e+=1){let r=Math.round((e+.5)*M),i=Math.round((h[e]-n)/g*f);a.beginPath(),a.rect(r,i,t,t),a.fillStyle=T,a.fill()}}if(s===d.Area){let t=[],{r,g:i,b:l}=e(T??o.COLOR),s=t=>{if(0===t.length)return;let[e,s]=t[0],[n,o]=t[t.length-1],h=Math.round(n+M);a.beginPath(),a.moveTo(e,0),a.lineTo(e,s);for(let e=1;e<t.length;e++){let[r,i]=t[e-1],[l,s]=t[e];a.lineTo(l,i),a.lineTo(l,s)}a.lineTo(h,o),a.lineTo(h,0),a.closePath(),a.fillStyle=`rgba(${r}, ${i}, ${l}, 1)`,a.fill()};for(let e=0;e<C;e+=1){let a=h[e];void 0===a||Number.isNaN(a)?(s(t),t=[]):t.push([Math.round(e*M),Math.round((a-n)/g*f)])}s(t)}if(s===d.Bar){if(p===c.Horizontal){let t=f/C,e=Math.round(t);for(let r=0;r<C;r+=1){let i=Math.round(f-(r+1)*t),l=Math.round((h[r]-n)/g*u),s=u-l;a.beginPath(),a.rect(s,i,l,e),a.fillStyle=T,a.fill()}}else for(let t=0;t<C;t+=1){let e=Math.floor(t*u/C),r=Math.floor((t+1)*u/C)-e,i=Math.round((h[t]-n)/g*f);a.beginPath(),a.rect(e,0,r,i),a.fillStyle=this.state.barValue2Color?this.state.CI?.getColor(h[t]).hax??T:T,a.fill()}}}a.restore()}}function k(t){return new v(t)}let O=function(t){return k(t)},D=O;function F(t,e,a){return[t+(t-e)*Math.cos(a),t+(t-e)*Math.sin(a)]}function U(t){let e=0;for(let a of t.values)a>e&&(e=a);return e}class B extends n{getSpecialTickConfig(t){}getAngleOffset(){return 0}init(t){super.init(t),this.state.canvas.style.transform="scaleY(1)";let e=t.fillStyle??o.FILL_STYLE,a=t.fillStylePrimary??o.FILL_STYLE_PRIMARY,r=t.fillStyleTransparentBase??o.FILL_STYLE_TRANSPARENT_BASE;this.updateProps({fillStyle:e,fillStylePrimary:a,fillStyleTransparentBase:r,baseWidth:6,padding:60,ticksStep:6,ticksRenderLength:5,markedAngles:Array.from({length:12},(t,e)=>30*e),color2intensity:i(a),data:{series:[],range:[0,0],polygon:[],yawAngle:0,isNorthFacing:!0}})}clear(){this.clearRect()}resize(){super.resize(),this.state.markedAngles&&this.drawBackground(),this.state.data&&this.drawTicks()}render(t){let e=this.state.data,a={...e,...t},r=void 0!==t.yawAngle&&t.yawAngle!==e?.yawAngle||void 0!==t.isNorthFacing&&t.isNorthFacing!==e?.isNorthFacing;this.state.data=a,r&&this.drawTicks(),this.draw()}drawTicks(){let{canvas:t,baseWidth:e,fillStyle:a,fillStylePrimary:r,ticksStep:i,ticksRenderLength:l,markedAngles:s,data:n}=this.state,{yawAngle:o=0,isNorthFacing:h=!0}=n,u=document.createElement("canvas");u.width=t.width,u.height=t.height;let c=u.getContext("2d");if(!c)return;let d=t.width/2,f=h?0:-o;for(let t=0;t<360;t+=i){let r=(t+f)*Math.PI/180,i=s.includes(t),[n,o]=F(d,3.5*e+l*(i?1.2:1)+3*!!i,r),[h,u]=F(d,3.5*e,r);c.beginPath(),c.moveTo(n,o),c.lineTo(h,u),c.strokeStyle=a,c.lineWidth=i?2:.5,c.stroke()}c.font=`${2*e}px Arial`,c.textAlign="center",c.textBaseline="middle",s.forEach(t=>{let[r,i]=F(d,8*e,(t+f-90)*Math.PI/180),l=this.getSpecialTickConfig(t);l?(c.fillStyle=l.color,c.fillText(l.alias,r,i)):(c.fillStyle=a,c.fillText(t.toString(),r,i))});let g=t.width/18;c.translate(t.width/2,t.height/2),c.scale(1,-1),c.rotate((h?-o:0)*Math.PI/180),c.lineJoin="round",c.lineCap="round",c.strokeStyle=r,c.fillStyle=r,c.lineWidth=g/6,c.beginPath(),c.moveTo(0,g/2),c.lineTo(g/2,-g/2),c.lineTo(0,g/2-1/((1+Math.sqrt(5))/2)*g),c.lineTo(-g/2,-g/2),c.lineTo(0,g/2),c.fill(),c.stroke(),this.state.ticksCanvas=u}drawBackground(){let{canvas:t,baseWidth:e,padding:a,fillStyleTransparentBase:r}=this.state,i=document.createElement("canvas");i.width=t.width,i.height=t.height;let l=i.getContext("2d");if(!l)return;let s=t.width/2;l.beginPath(),l.arc(s,s,s-2*e,0,2*Math.PI),l.strokeStyle=r,l.lineWidth=e,l.stroke(),[,,,,,].fill(1).forEach((t,i)=>{l.beginPath(),l.arc(s,s,(s-a)*(i+1)/5,0,2*Math.PI),l.strokeStyle=r,l.lineWidth=e/4,l.stroke()}),this.state.BGCanvas=i}draw(){let{data:t,canvas:e,ctx:a,baseWidth:r,padding:i,BGCanvas:l,ticksCanvas:s,color2intensity:n,fillStylePrimary:o,fillStyleTransparentBase:h}=this.state,{series:u,range:c,polygon:d,isNorthFacing:f=!0,yawAngle:g=0}=t;if(!u&&!d)return;this.clearRect();let p=e.width/2,m=f?0:-g,T=this.getAngleOffset();if(l&&a.drawImage(l,0,0),c){let t=360/c.length;c.forEach((e,r)=>{let l=(r*t+m+T)*Math.PI/180,s=((r+1)*t+m+T)*Math.PI/180;a.beginPath(),a.moveTo(p,p),a.arc(p,p,p-i,l,s),a.closePath(),a.fillStyle=n[e],a.fill()})}if(d?.length)for(let t of[...d].sort((t,e)=>U(e)-U(t))){let{values:e,color:l,showDots:s}=t;if(!e||e.length<3)continue;let n=360/e.length,h=l??o;a.beginPath();let u=[];e.forEach((t,e)=>{let r=Math.max(0,Math.min(1,t))*(p-i),[l,s]=F(p,p-r,(e*n+m+T)*Math.PI/180);u.push([l,s]),0===e?a.moveTo(l,s):a.lineTo(l,s)}),a.closePath(),a.save();let c=a.createRadialGradient(p,p,0,p,p,p-i);if(c.addColorStop(0,"transparent"),c.addColorStop(1,h),a.fillStyle=c,a.fill(),a.strokeStyle=h,a.lineWidth=1,a.lineJoin="round",a.lineCap="round",a.stroke(),!1!==s){a.fillStyle=h;let t=r/2;for(let[e,r]of u)a.beginPath(),a.arc(e,r,t,0,2*Math.PI),a.fill()}a.restore()}u?.forEach(({value:t,color:e,lineWidth:l=r,radio:s=1})=>{if(null==t)return;let n=(t+m)*Math.PI/180-Math.PI/2,[o,u]=F(p,p,n),[c,d]=F(p,i+(1-s)*(p-i)+l/2,n);1!==s&&(a.beginPath(),a.moveTo(...F(p,i+l/2,n)),a.lineTo(c,d),a.strokeStyle=h,a.stroke()),a.beginPath(),a.moveTo(c,d),a.lineTo(o,u),a.strokeStyle=e,a.lineWidth=l,a.lineJoin="round",a.lineCap="round",a.stroke()}),s&&a.drawImage(s,0,0)}}let G={0:{color:o.DIAL_NORTH_COLOR,alias:"北"},180:{color:o.DIAL_SOUTH_COLOR,alias:"南"}};class X extends B{getSpecialTickConfig(t){return G[t]}getAngleOffset(){return -90}}class W extends B{getSpecialTickConfig(t){}getAngleOffset(){return 0}}class z extends n{init(t){super.init(t),this.updateProps({lineColor:t.lineColor??o.LINE_COLOR,pointColor:t.pointColor??o.POINT_COLOR})}clear(){this.clearRect(),this.updateProps({data:{IData:[],QData:[]}})}render(t){t.IData&&t.QData&&(this.state.data=t,this.draw())}draw(){let{data:t,canvas:e,pointColor:a,lineColor:r,ctx:i}=this.state;if(!t)return;let{IData:l,QData:s}=t;if(0===l.length||0===s.length)return;let{width:n,height:o}=i.canvas;i.clearRect(0,0,e.width,e.height);let[h,u]=T(l),[c,d]=T([h,u,...s]),f=n/(u-h),g=o/(d-c),p=l.map((t,e)=>({x:(t-h)*f,y:(s[e]-c)*g}));i.beginPath(),p.forEach((t,e)=>{i[0===e?"moveTo":"lineTo"](t.x,t.y)}),i.strokeStyle=r,i.lineWidth=1,i.stroke(),p.forEach(t=>{i.beginPath(),i.arc(t.x,t.y,2,0,2*Math.PI),i.fillStyle=a,i.fill()})}}let H=4,Y=256,V=t=>{let e=[];for(let a=0;a<256;a++){let i=a/255,l=t.length-1,s=Math.min(Math.floor(i*l),l-1),n=i*l-s,o=r(t[s]),h=r(t[s+1]);e.push({r:Math.round(o.r+(h.r-o.r)*n),g:Math.round(o.g+(h.g-o.g)*n),b:Math.round(o.b+(h.b-o.b)*n)})}return e},$=()=>{let t=V(u.CLASSIC_COLORS),e=new Uint8ClampedArray((u.MAX_ACCUMULATION+1)*4),a=t.length-1;for(let r=1;r<=u.MAX_ACCUMULATION;r++){let i=t[Math.min(Math.floor(Math.min(r*u.CLASSIC_ALPHA_GAIN/255,1)*a),a)],l=4*r;e[l]=i.r,e[l+1]=i.g,e[l+2]=i.b,e[l+3]=Math.min(r*u.CLASSIC_ALPHA_GAIN,255)}return e},Q=$();class q extends n{init(t){super.init(t),this.state.iqEyeMode=this.resolveMode(t.iqEyeMode),this.initColorLookup()}resize(){super.resize();let{width:t,height:e}=this.state.canvas;this.state.accumulator=new Uint16Array(t*e),this.state.imageData=this.state.ctx.createImageData(t,e)}clear(){this.clearRect(),this.state.accumulator?.fill(0),this.updateProps({data:{IData:[],QData:[]}})}render(t){t.IData?.length&&t.QData?.length&&(this.state.data=t,this.state.accumulator&&("classic"===this.state.iqEyeMode?this.state.accumulator.fill(0):this.applyDecay(),this.accumulateData(t),this.draw()))}draw(){if("classic"===this.state.iqEyeMode){this.drawClassic();return}this.drawModern()}drawClassic(){let{accumulator:t,imageData:e,ctx:a}=this.state;if(!t||!e)return;let r=e.data;for(let e=0;e<t.length;e++){let a=t[e],i=4*e;if(a>0){let t=4*a;r[i]=Q[t],r[i+1]=Q[t+1],r[i+2]=Q[t+2],r[i+3]=Q[t+3]}else r[i+3]=0}a.putImageData(e,0,0)}drawModern(){let{accumulator:t,imageData:e,ctx:a,colorLookup:r}=this.state;if(!t||!e||!r)return;let i=e.data,l=u.MAX_ACCUMULATION;for(let e=0;e<t.length;e++){let a=t[e],s=4*e;if(a>0){let t=Math.min(a/l,1),e=Math.min(Math.floor(t*(r.length-1)),r.length-1),n=r[e];i[s]=n.r,i[s+1]=n.g,i[s+2]=n.b,i[s+3]=Math.round(255*Math.min(2*t,1))}else i[s+3]=0}a.putImageData(e,0,0)}initColorLookup(){let t="classic"===this.state.iqEyeMode?u.CLASSIC_COLORS:u.MODERN_COLORS;this.state.colorLookup=V(t)}resolveMode(t){return"modern"===t?"modern":u.MODE}applyDecay(){let{accumulator:t}=this.state;if(!t)return;let e=u.DECAY_FACTOR;for(let a=0;a<t.length;a++)t[a]=Math.floor(t[a]*e)}accumulateData(t){let{accumulator:e,canvas:a}=this.state;if(!e)return;let{width:r,height:i}=a,[l,s]=u.Y_RANGE,n=s-l,o=u.SEGMENT_SIZE,h=r/(o-1);this.accumulateSegments(t.IData,l,n,r,i,o,h,e),this.accumulateSegments(t.QData,l,n,r,i,o,h,e)}accumulateSegments(t,e,a,r,i,l,s,n){let o=Math.ceil(t.length/l);for(let h=0;h<o;h++){let o=-1,u=-1;for(let c=0;c<l;c++){let d=h*l+c;if(d>=t.length)break;let f=t[d];if(void 0===f)continue;let g=Math.round(c*s),p=Math.round((f-e)/a*(i-1));o>=0&&this.drawLine(o,u,g,p,r,i,n),o=g,u=p}}}drawLine(t,e,a,r,i,l,s){let n=Math.abs(a-t),o=Math.abs(r-e),h=t<a?1:-1,c=e<r?1:-1,d=t,f=e,g=n-o,p=u.MAX_ACCUMULATION;for(;;){if(d>=0&&d<i&&f>=0&&f<l){let t=f*i+d;s[t]<p&&s[t]++}if(d===a&&f===r)break;let t=2*g;t>-o&&(g-=o,d+=h),t<n&&(g+=n,f+=c)}}}export{s as ColorInterpolator,X as Dial,p as Fluorescence,g as FluorescenceRenderMode,L as Gauge,d as GraphicType,y as Heatmap,x as HeatmapCanvas,I as HeatmapWebGL,z as IQ,q as IQEye,c as OrientationType,W as Radar,f as RendererType,D as Series,v as SeriesCanvas,i as color2intensity,b as createHeatmap,k as createSeries,e as hexToRGBA,a as rgbToHex};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rfkit/renderer",
3
- "version": "0.1.15",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "A high-performance canvas rendering engine for charts and visualizations, supporting Canvas 2D and WebGL rendering",
6
6
  "exports": {
@@ -39,4 +39,3 @@ export default class Fluorescence extends Engine<FluorescenceState> {
39
39
  private lastBlockRenderParams;
40
40
  draw(): void;
41
41
  }
42
- //# sourceMappingURL=Fluorescence.d.ts.map
@@ -9,4 +9,3 @@ export default class Gauge extends Engine<GaugeState> {
9
9
  drawLimit(): void;
10
10
  drawBackground(): void;
11
11
  }
12
- //# sourceMappingURL=Gauge.d.ts.map
@@ -24,13 +24,12 @@ export declare function createHeatmap(props: InitProps): IHeatmap;
24
24
  * 支持 new Heatmap() 或 Heatmap() 两种调用方式
25
25
  *
26
26
  * @example
27
- * // Canvas 2D 版本(默认)
27
+ * // WebGL 版本(默认)
28
28
  * const heatmap = new Heatmap({ id: 'canvas', colors, range });
29
29
  *
30
- * // WebGL 版本
31
- * const heatmap = new Heatmap({ id: 'canvas', colors, range, renderer: RendererType.WebGL });
30
+ * // Canvas 2D 版本
31
+ * const heatmap = new Heatmap({ id: 'canvas', colors, range, renderer: RendererType.Canvas });
32
32
  */
33
33
  declare const Heatmap: HeatmapConstructor;
34
34
  export default Heatmap;
35
35
  export { HeatmapCanvas };
36
- //# sourceMappingURL=Heatmap.d.ts.map
@@ -11,4 +11,3 @@ export default class HeatmapCanvas extends Engine<HeatmapState> {
11
11
  render(data: number[][]): void;
12
12
  draw(): void;
13
13
  }
14
- //# sourceMappingURL=HeatmapCanvas.d.ts.map
@@ -31,4 +31,3 @@ export declare function createSeries(props: InitProps): ISeries;
31
31
  declare const Series: SeriesConstructor;
32
32
  export default Series;
33
33
  export { SeriesCanvas };
34
- //# sourceMappingURL=Series.d.ts.map
@@ -10,4 +10,3 @@ export default class SeriesCanvas extends Engine<SeriesState> {
10
10
  render(e: SeriesConfig): void;
11
11
  draw(): void;
12
12
  }
13
- //# sourceMappingURL=SeriesCanvas.d.ts.map
@@ -4,4 +4,3 @@ export type { IHeatmap } from './Heatmap';
4
4
  export { createHeatmap, default as Heatmap, HeatmapCanvas } from './Heatmap';
5
5
  export type { ISeries } from './Series';
6
6
  export { createSeries, default as Series, SeriesCanvas } from './Series';
7
- //# sourceMappingURL=index.d.ts.map
@@ -24,4 +24,3 @@ export default abstract class CircularBase extends Engine {
24
24
  drawBackground(): void;
25
25
  draw(): void;
26
26
  }
27
- //# sourceMappingURL=CircularBase.d.ts.map
@@ -12,4 +12,3 @@ export default class Dial extends CircularBase {
12
12
  /** 角度偏移:减 90 度使 0 度指向上方 */
13
13
  protected getAngleOffset(): number;
14
14
  }
15
- //# sourceMappingURL=Dial.d.ts.map
@@ -12,4 +12,3 @@ export default class Radar extends CircularBase {
12
12
  /** 无角度偏移 */
13
13
  protected getAngleOffset(): number;
14
14
  }
15
- //# sourceMappingURL=Radar.d.ts.map
@@ -1,4 +1,3 @@
1
1
  export { default as CircularBase } from './CircularBase';
2
2
  export { default as Dial } from './Dial';
3
3
  export { default as Radar } from './Radar';
4
- //# sourceMappingURL=index.d.ts.map
@@ -2,4 +2,3 @@ export { Fluorescence, Gauge, Heatmap, Series } from './cartesian';
2
2
  export { CircularBase, Dial, Radar } from './circular';
3
3
  export { IQ, IQEye } from './scatter';
4
4
  export { HeatmapWebGL } from './webgl';
5
- //# sourceMappingURL=index.d.ts.map
@@ -6,4 +6,3 @@ export default class IQ extends Engine<IQState> {
6
6
  render(data: IQData): void;
7
7
  draw(): void;
8
8
  }
9
- //# sourceMappingURL=IQ.d.ts.map
@@ -15,4 +15,3 @@ export default class IQEye extends Engine<IQEyeState> {
15
15
  private accumulateSegments;
16
16
  private drawLine;
17
17
  }
18
- //# sourceMappingURL=IQEye.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export { default as IQ } from './IQ';
2
2
  export { default as IQEye } from './IQEye';
3
- //# sourceMappingURL=index.d.ts.map
@@ -38,4 +38,3 @@ export default class HeatmapWebGL extends WebGLEngine<HeatmapWebGLState> {
38
38
  resize(): void;
39
39
  dispose(): void;
40
40
  }
41
- //# sourceMappingURL=HeatmapWebGL.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export type { HeatmapWebGLState } from './HeatmapWebGL';
2
2
  export { default as HeatmapWebGL } from './HeatmapWebGL';
3
- //# sourceMappingURL=index.d.ts.map
package/types/common.d.ts CHANGED
@@ -56,4 +56,3 @@ export declare const EYE_DEFAULTS: {
56
56
  readonly CLASSIC_COLORS: readonly ["#00ff00", "#ff0000"];
57
57
  readonly CLASSIC_ALPHA_GAIN: 50;
58
58
  };
59
- //# sourceMappingURL=common.d.ts.map
package/types/data.d.ts CHANGED
@@ -54,4 +54,3 @@ export interface FluorescenceRenderData {
54
54
  fluorescenceData: Uint32Array;
55
55
  fluorescenceMaxCount: number;
56
56
  }
57
- //# sourceMappingURL=data.d.ts.map
package/types/enums.d.ts CHANGED
@@ -24,4 +24,3 @@ export declare enum FluorescenceRenderMode {
24
24
  /** 方格子模式:类似热力图的方块渲染 */
25
25
  Grid = "grid"
26
26
  }
27
- //# sourceMappingURL=enums.d.ts.map
package/types/index.d.ts CHANGED
@@ -3,4 +3,3 @@ export { DEFAULTS, EYE_DEFAULTS, FLUORESCENCE } from './common';
3
3
  export type { AxisYRange, CircularData, CircularPolygonItem, CircularSeriesItem, FluorescenceRenderData, GaugeData, IQData, IQEyeRenderMode, SeriesConfig } from './data';
4
4
  export { FluorescenceRenderMode, GraphicType, OrientationType, RendererType } from './enums';
5
5
  export type { BaseState, CircularState, FluorescenceState, GaugeDataType, GaugeState, HeatmapState, InitProps, IQEyeState, IQState, SeriesState, StateProps } from './state';
6
- //# sourceMappingURL=index.d.ts.map
package/types/state.d.ts CHANGED
@@ -115,4 +115,3 @@ export interface IQEyeState extends BaseState {
115
115
  }
116
116
  /** 兼容旧版 StateProps - 用于渐进迁移 */
117
117
  export type StateProps = InitProps & Partial<BaseState>;
118
- //# sourceMappingURL=state.d.ts.map
@@ -10,4 +10,3 @@ import type { RGBA } from '../types';
10
10
  * @param getColor 颜色获取函数
11
11
  */
12
12
  export declare function fillImageData(canvasWidth: number, canvasHeight: number, data: number[][], imageData: Uint8ClampedArray, getColor: (value: number) => RGBA): void;
13
- //# sourceMappingURL=imageData.d.ts.map
package/utils/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  export { fillImageData } from './imageData';
2
2
  export { convertToF64, getMinMax, isNumberAlias } from './math';
3
3
  export { isWebGL2Supported } from './webgl';
4
- //# sourceMappingURL=index.d.ts.map
package/utils/math.d.ts CHANGED
@@ -10,4 +10,3 @@ export declare function isNumberAlias(n: unknown): n is number;
10
10
  * 将二维数组转换为 Float64Array
11
11
  */
12
12
  export declare function convertToF64(odata: number[][]): Float64Array;
13
- //# sourceMappingURL=math.d.ts.map
package/utils/webgl.d.ts CHANGED
@@ -3,4 +3,3 @@
3
3
  * 结果会被缓存,避免重复检测
4
4
  */
5
5
  export declare function isWebGL2Supported(): boolean;
6
- //# sourceMappingURL=webgl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorInterpolator.d.ts","sourceRoot":"","sources":["../../src/color/ColorInterpolator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGjD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAEvE;;;;;;OAMG;gBAED,MAAM,EAAE,UAAU,EAAE,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,SAAM;IAKhB;;;;;;OAMG;IACI,SAAS,CACd,MAAM,EAAE,UAAU,EAAE,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI;IAiBP;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;;;OAKG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAkBrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorUtils.d.ts","sourceRoot":"","sources":["../../src/color/ColorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAKjD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAyChE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAM,GAAG,MAAM,CAIzE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAoBlD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,EAAE,CAWrE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/color/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,eAAe,EACf,eAAe,EACf,SAAS,EACT,UAAU,EACV,QAAQ,EACT,MAAM,cAAc,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/core/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS;IACvD,KAAK,EAAE,MAAM,CAAC;gBAET,KAAK,EAAE,SAAS;IAW5B,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAO9B,IAAI,CAAC,MAAM,EAAE,SAAS;IAiCtB,SAAS;IAKT,MAAM,CAAC,IAAI,UAAO;IAgBlB,IAAI;IAEJ,OAAO;CAIR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebGLEngine.d.ts","sourceRoot":"","sources":["../../src/core/WebGLEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,iBAAiB;AACjB,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,EAAE,EAAE,sBAAsB,CAAC;IAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpD;AAED,gBAAgB;AAChB,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,WAAW,CAC9B,MAAM,SAAS,cAAc,GAAG,cAAc;IAEvC,KAAK,EAAE,MAAM,CAAC;gBAET,KAAK,EAAE,SAAS;IAW5B,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAO9B,IAAI,CAAC,MAAM,EAAE,SAAS;IAgCtB,gBAAgB;IAChB,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAiBzE,mBAAmB;IACnB,SAAS,CAAC,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI;IAkCxE,WAAW;IACX,SAAS,CAAC,aAAa,IAAI,YAAY,GAAG,IAAI;IAgB9C,kBAAkB;IAClB,SAAS,CAAC,gBAAgB,IAAI,WAAW,GAAG,IAAI;IAehD,SAAS;IAMT,MAAM,CAAC,IAAI,UAAO;IAkBlB,IAAI;IAEJ,WAAW;IACX,OAAO;CAWR"}
package/index.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,OAAO,EACP,aAAa,EACb,MAAM,EACN,YAAY,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,sBAAsB,EACtB,KAAK,SAAS,EACd,WAAW,EACX,KAAK,MAAM,EACX,KAAK,eAAe,EACpB,eAAe,EACf,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Fluorescence.d.ts","sourceRoot":"","sources":["../../../src/renderers/cartesian/Fluorescence.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,SAAS,EACT,KAAK,EACN,MAAM,aAAa,CAAC;AACrB,OAAO,EAA0B,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,MAAM,CAAC,iBAAiB,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,SAAS;IAarB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAazC,aAAa;IACb,aAAa,CAAC,IAAI,EAAE,sBAAsB;IAK1C,cAAc;IAcd,SAAS;IAMT,KAAK;IAQL,OAAO;IAYP,OAAO,CAAC,UAAU;IA+HlB,MAAM;IAKN,QAAQ,CAAC,KAAK,EAAE,KAAK;IAMrB,MAAM,CAAC,IAAI,EAAE,sBAAsB;IAsBnC,gBAAgB,CACd,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAC3D,KAAK,EAAE,MAAM,GACZ;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAgDjD,OAAO,CAAC,UAAU,CAA0D;IAG5E,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAa1D,OAAO,CAAC,gBAAgB,CAOR;IAGhB,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,gBAAgB,CAKP;IAGjB,OAAO,CAAC,mBAAmB,CAIV;IACjB,OAAO,CAAC,qBAAqB,CAMb;IAEhB,IAAI;CAmOL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Gauge.d.ts","sourceRoot":"","sources":["../../../src/renderers/cartesian/Gauge.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxE,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,MAAM,CAAC,UAAU,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,SAAS;IA4BrB,KAAK;IAOL,MAAM;IAKN,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC;IASnC,IAAI;IA8BJ,SAAS;IA8CT,cAAc;CA4Df"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Heatmap.d.ts","sourceRoot":"","sources":["../../../src/renderers/cartesian/Heatmap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,mBAAmB;AACnB,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,qBAAqB;AACrB,UAAU,kBAAkB;IAC1B,KAAK,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IACjC,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAYxD;AAED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,OAAO,EAAE,kBAIQ,CAAC;AAExB,eAAe,OAAO,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"HeatmapCanvas.d.ts","sourceRoot":"","sources":["../../../src/renderers/cartesian/HeatmapCanvas.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,MAAM,CAAC,YAAY,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,SAAS;IAWrB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAwBpC,cAAc;IAcd,SAAS;IAMT,KAAK;IAOL,MAAM;IAKN,QAAQ,CAAC,KAAK,EAAE,KAAK;IAMrB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;IAOvB,IAAI;CAeL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Series.d.ts","sourceRoot":"","sources":["../../../src/renderers/cartesian/Series.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,kBAAkB;AAClB,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;IAChB,IAAI,IAAI,IAAI,CAAC;IACb,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC/C;AAED,oBAAoB;AACpB,UAAU,iBAAiB;IACzB,KAAK,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAChC,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEtD;AAED;;;;;;GAMG;AACH,QAAA,MAAM,MAAM,EAAE,iBAEQ,CAAC;AAEvB,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SeriesCanvas.d.ts","sourceRoot":"","sources":["../../../src/renderers/cartesian/SeriesCanvas.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/E,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,CAAC;IAC3D,IAAI,CAAC,KAAK,EAAE,SAAS;IAqBrB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAYnC,KAAK;IAcL,QAAQ,CAAC,KAAK,EAAE,KAAK;IAOrB,WAAW,CAAC,QAAQ,EAAE,MAAM;IAK5B,SAAS,CAAC,CAAC,EAAE,YAAY;IAoBzB,MAAM,CAAC,CAAC,EAAE,YAAY;IAKtB,IAAI;CAuQL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderers/cartesian/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7E,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,MAAM,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CircularBase.d.ts","sourceRoot":"","sources":["../../../src/renderers/circular/CircularBase.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EACV,YAAY,EAGZ,aAAa,EACb,SAAS,EACV,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,CAAC,MAAM,EAAE,MAAM,CAAC,CAIlB;AAWD;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,YAAa,SAAQ,MAAM;IAC/C,KAAK,EAAE,aAAa,CAAC;IAE7B,mBAAmB;IACnB,SAAS,CAAC,oBAAoB,CAC5B,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAI/C,yCAAyC;IACzC,SAAS,CAAC,cAAc,IAAI,MAAM;IAIlC,IAAI,CAAC,KAAK,EAAE,SAAS;IAoCrB,KAAK;IAIL,MAAM;IAMN,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;IAkBlC,SAAS;IAqFT,cAAc;IAkCd,IAAI;CAkJL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dial.d.ts","sourceRoot":"","sources":["../../../src/renderers/circular/Dial.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAQ1C;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,YAAY;IAC5C,sBAAsB;IACtB,SAAS,CAAC,oBAAoB,CAC5B,KAAK,EAAE,MAAM,GACZ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAI/C,2BAA2B;IAC3B,SAAS,CAAC,cAAc,IAAI,MAAM;CAGnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Radar.d.ts","sourceRoot":"","sources":["../../../src/renderers/circular/Radar.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,YAAY;IAC7C,cAAc;IACd,SAAS,CAAC,oBAAoB,CAC5B,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAI/C,YAAY;IACZ,SAAS,CAAC,cAAc,IAAI,MAAM;CAGnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderers/circular/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"IQ.d.ts","sourceRoot":"","sources":["../../../src/renderers/scatter/IQ.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAS9D,MAAM,CAAC,OAAO,OAAO,EAAG,SAAQ,MAAM,CAAC,OAAO,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,SAAS;IASrB,KAAK;IAUL,MAAM,CAAC,IAAI,EAAE,MAAM;IAOnB,IAAI;CA6CL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"IQEye.d.ts","sourceRoot":"","sources":["../../../src/renderers/scatter/IQEye.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EACV,SAAS,EACT,MAAM,EAEN,UAAU,EACX,MAAM,aAAa,CAAC;AA0DrB,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,MAAM,CAAC,UAAU,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,SAAS;IAMrB,MAAM;IAON,KAAK;IAML,MAAM,CAAC,IAAI,EAAE,MAAM;IAcnB,IAAI;IASJ,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,QAAQ;CAqCjB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderers/scatter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"HeatmapWebGL.d.ts","sourceRoot":"","sources":["../../../src/renderers/webgl/HeatmapWebGL.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,WAAW,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGhE,sBAAsB;AACtB,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,4CAA4C;IAC5C,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,wCAAwC;IACxC,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,oCAAoC;IACpC,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAwDD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW,CAAC,iBAAiB,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,SAAS;IAgFrB,eAAe;IACf,OAAO,CAAC,kBAAkB;IAmC1B,aAAa;IACb,OAAO,CAAC,iBAAiB;IA8GzB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAiBzC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAMrB,KAAK;IAOL,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;IAQvB,IAAI;IAkGJ,MAAM;IAIN,OAAO;CAYR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderers/webgl/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,8BAA8B;AAC9B,MAAM,MAAM,UAAU,GAClB,MAAM,GACN;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,sBAAsB;AACtB,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErC,8BAA8B;AAC9B,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,UAAU;AACV,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,YAAY;AACZ,eAAO,MAAM,QAAQ;;;;;;;;;;yBA0Bd,MAAM,EAAE;WAGQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,YAAY;;;;IAIvB,iCAAiC;;CAEzB,CAAC;AAEX,WAAW;AACX,eAAO,MAAM,YAAY;sBACH,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;CAe5B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/types/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE5D,sBAAsB;AACtB,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0BAA0B;AAC1B,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,cAAc;AACd,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,iBAAiB;AACjB,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9D,WAAW;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1C,gBAAgB;AAChB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iBAAiB;AACjB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B;AAED,wBAAwB;AACxB,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,WAAW,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/types/enums.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,oBAAY,eAAe;IACzB,UAAU,eAAe;IACzB,QAAQ,aAAa;CACtB;AAED,WAAW;AACX,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED,YAAY;AACZ,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,cAAc;AACd,oBAAY,sBAAsB;IAChC,wBAAwB;IACxB,QAAQ,aAAa;IACrB,uBAAuB;IACvB,IAAI,SAAS;CACd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhE,YAAY,EACV,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,MAAM,EACN,eAAe,EACf,YAAY,EACb,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW,EACX,UAAU,EACX,MAAM,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,iBAAiB,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EACV,YAAY,EACZ,MAAM,EACN,eAAe,EACf,YAAY,EACb,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEpE,eAAe;AACf,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,GAAG,EAAE,wBAAwB,CAAC;IAC9B,KAAK,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,oBAAoB;AACpB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,gBAAgB;AAChB,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,iBAAiB;AACjB,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,EAAE,EAAE,iBAAiB,CAAC;CACvB;AAED,sBAAsB;AACtB,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,iBAAiB;AACjB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAe;AACf,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,YAAY;AACZ,MAAM,WAAW,OAAQ,SAAQ,SAAS;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAe;AACf,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrD;AAED,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"imageData.d.ts","sourceRoot":"","sources":["../../src/utils/imageData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAErC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAChC,IAAI,CAkCN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,YAAY,CAQ5D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"webgl.d.ts","sourceRoot":"","sources":["../../src/utils/webgl.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAoB3C"}