minerva-design 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +21 -21
- package/custom-elements.json +13630 -4757
- package/dist/angular/fesm2022/minerva-angular.mjs +6872 -172
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +2240 -0
- package/dist/charts/canvas.d.cts +10 -2
- package/dist/charts/canvas.d.ts +10 -2
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +9 -3
- package/dist/charts/core.d.ts +9 -3
- package/dist/charts/core.js +19 -6
- package/dist/charts/engine/axis.cjs +1 -1
- package/dist/charts/engine/axis.cjs.map +1 -1
- package/dist/charts/engine/axis.js +6 -6
- package/dist/charts/engine/axis.js.map +1 -1
- package/dist/charts/engine/canvas.cjs +1 -1
- package/dist/charts/engine/canvas.cjs.map +1 -1
- package/dist/charts/engine/canvas.d.cts +11 -1
- package/dist/charts/engine/canvas.d.ts +11 -1
- package/dist/charts/engine/canvas.js +161 -99
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -2
- package/dist/charts/engine/chart.cjs.map +1 -1
- package/dist/charts/engine/chart.d.cts +1 -1
- package/dist/charts/engine/chart.d.ts +1 -1
- package/dist/charts/engine/chart.js +390 -349
- package/dist/charts/engine/chart.js.map +1 -1
- package/dist/charts/engine/color.cjs +1 -1
- package/dist/charts/engine/color.cjs.map +1 -1
- package/dist/charts/engine/color.d.cts +17 -0
- package/dist/charts/engine/color.d.ts +17 -0
- package/dist/charts/engine/color.js +27 -3
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +2 -2
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +17 -2
- package/dist/charts/engine/controller.d.ts +17 -2
- package/dist/charts/engine/controller.js +404 -280
- package/dist/charts/engine/controller.js.map +1 -1
- package/dist/charts/engine/curve.cjs +2 -0
- package/dist/charts/engine/curve.cjs.map +1 -0
- package/dist/charts/engine/curve.d.cts +15 -0
- package/dist/charts/engine/curve.d.ts +15 -0
- package/dist/charts/engine/curve.js +56 -0
- package/dist/charts/engine/curve.js.map +1 -0
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +21 -2
- package/dist/charts/engine/data.d.ts +21 -2
- package/dist/charts/engine/data.js +117 -43
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/dom.cjs +1 -1
- package/dist/charts/engine/dom.cjs.map +1 -1
- package/dist/charts/engine/dom.d.cts +5 -3
- package/dist/charts/engine/dom.d.ts +5 -3
- package/dist/charts/engine/dom.js +27 -22
- package/dist/charts/engine/dom.js.map +1 -1
- package/dist/charts/engine/format.cjs +1 -1
- package/dist/charts/engine/format.cjs.map +1 -1
- package/dist/charts/engine/format.d.cts +21 -6
- package/dist/charts/engine/format.d.ts +21 -6
- package/dist/charts/engine/format.js +46 -21
- package/dist/charts/engine/format.js.map +1 -1
- package/dist/charts/engine/items.cjs +1 -1
- package/dist/charts/engine/items.cjs.map +1 -1
- package/dist/charts/engine/items.js +290 -62
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/labels.cjs +2 -0
- package/dist/charts/engine/labels.cjs.map +1 -0
- package/dist/charts/engine/labels.d.cts +13 -0
- package/dist/charts/engine/labels.d.ts +13 -0
- package/dist/charts/engine/labels.js +74 -0
- package/dist/charts/engine/labels.js.map +1 -0
- package/dist/charts/engine/layout.cjs +1 -1
- package/dist/charts/engine/layout.cjs.map +1 -1
- package/dist/charts/engine/layout.d.cts +34 -2
- package/dist/charts/engine/layout.d.ts +34 -2
- package/dist/charts/engine/layout.js +53 -12
- package/dist/charts/engine/layout.js.map +1 -1
- package/dist/charts/engine/locale.cjs +2 -0
- package/dist/charts/engine/locale.cjs.map +1 -0
- package/dist/charts/engine/locale.d.cts +33 -0
- package/dist/charts/engine/locale.d.ts +33 -0
- package/dist/charts/engine/locale.js +68 -0
- package/dist/charts/engine/locale.js.map +1 -0
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +68 -3
- package/dist/charts/engine/model.d.ts +68 -3
- package/dist/charts/engine/model.js +332 -108
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/book.cjs +2 -0
- package/dist/charts/engine/orderbook/book.cjs.map +1 -0
- package/dist/charts/engine/orderbook/book.d.cts +28 -0
- package/dist/charts/engine/orderbook/book.d.ts +28 -0
- package/dist/charts/engine/orderbook/book.js +134 -0
- package/dist/charts/engine/orderbook/book.js.map +1 -0
- package/dist/charts/engine/orderbook/depth.cjs +2 -0
- package/dist/charts/engine/orderbook/depth.cjs.map +1 -0
- package/dist/charts/engine/orderbook/depth.d.cts +7 -0
- package/dist/charts/engine/orderbook/depth.d.ts +7 -0
- package/dist/charts/engine/orderbook/depth.js +413 -0
- package/dist/charts/engine/orderbook/depth.js.map +1 -0
- package/dist/charts/engine/orderbook/format.cjs +2 -0
- package/dist/charts/engine/orderbook/format.cjs.map +1 -0
- package/dist/charts/engine/orderbook/format.d.cts +48 -0
- package/dist/charts/engine/orderbook/format.d.ts +48 -0
- package/dist/charts/engine/orderbook/format.js +65 -0
- package/dist/charts/engine/orderbook/format.js.map +1 -0
- package/dist/charts/engine/orderbook/heatmap.cjs +2 -0
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -0
- package/dist/charts/engine/orderbook/heatmap.d.cts +9 -0
- package/dist/charts/engine/orderbook/heatmap.d.ts +9 -0
- package/dist/charts/engine/orderbook/heatmap.js +703 -0
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -0
- package/dist/charts/engine/orderbook/host.cjs +2 -0
- package/dist/charts/engine/orderbook/host.cjs.map +1 -0
- package/dist/charts/engine/orderbook/host.d.cts +50 -0
- package/dist/charts/engine/orderbook/host.d.ts +50 -0
- package/dist/charts/engine/orderbook/host.js +161 -0
- package/dist/charts/engine/orderbook/host.js.map +1 -0
- package/dist/charts/engine/orderbook/index.cjs +1 -0
- package/dist/charts/engine/orderbook/index.d.cts +6 -0
- package/dist/charts/engine/orderbook/index.d.ts +6 -0
- package/dist/charts/engine/orderbook/index.js +6 -0
- package/dist/charts/engine/orderbook/ladder.cjs +2 -0
- package/dist/charts/engine/orderbook/ladder.cjs.map +1 -0
- package/dist/charts/engine/orderbook/ladder.d.cts +6 -0
- package/dist/charts/engine/orderbook/ladder.d.ts +6 -0
- package/dist/charts/engine/orderbook/ladder.js +341 -0
- package/dist/charts/engine/orderbook/ladder.js.map +1 -0
- package/dist/charts/engine/orderbook/tape.cjs +2 -0
- package/dist/charts/engine/orderbook/tape.cjs.map +1 -0
- package/dist/charts/engine/orderbook/tape.d.cts +6 -0
- package/dist/charts/engine/orderbook/tape.d.ts +6 -0
- package/dist/charts/engine/orderbook/tape.js +450 -0
- package/dist/charts/engine/orderbook/tape.js.map +1 -0
- package/dist/charts/engine/orderbook/types.d.cts +735 -0
- package/dist/charts/engine/orderbook/types.d.ts +735 -0
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +18 -0
- package/dist/charts/engine/overlay.d.ts +18 -0
- package/dist/charts/engine/overlay.js +138 -102
- package/dist/charts/engine/overlay.js.map +1 -1
- package/dist/charts/engine/presets.cjs +2 -2
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +319 -5
- package/dist/charts/engine/presets.d.ts +319 -5
- package/dist/charts/engine/presets.js +463 -38
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.js +149 -111
- package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
- package/dist/charts/engine/renderers/detect.cjs +1 -1
- package/dist/charts/engine/renderers/detect.cjs.map +1 -1
- package/dist/charts/engine/renderers/detect.js +18 -15
- package/dist/charts/engine/renderers/detect.js.map +1 -1
- package/dist/charts/engine/renderers/gl.cjs +2 -0
- package/dist/charts/engine/renderers/gl.cjs.map +1 -0
- package/dist/charts/engine/renderers/gl.d.cts +21 -0
- package/dist/charts/engine/renderers/gl.d.ts +21 -0
- package/dist/charts/engine/renderers/gl.js +56 -0
- package/dist/charts/engine/renderers/gl.js.map +1 -0
- package/dist/charts/engine/renderers/range.cjs +1 -1
- package/dist/charts/engine/renderers/range.cjs.map +1 -1
- package/dist/charts/engine/renderers/range.js +4 -4
- package/dist/charts/engine/renderers/range.js.map +1 -1
- package/dist/charts/engine/renderers/shaders.cjs +180 -20
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
- package/dist/charts/engine/renderers/shaders.d.cts +18 -2
- package/dist/charts/engine/renderers/shaders.d.ts +18 -2
- package/dist/charts/engine/renderers/shaders.js +176 -20
- package/dist/charts/engine/renderers/shaders.js.map +1 -1
- package/dist/charts/engine/renderers/types.cjs.map +1 -1
- package/dist/charts/engine/renderers/types.d.cts +11 -4
- package/dist/charts/engine/renderers/types.d.ts +11 -4
- package/dist/charts/engine/renderers/types.js.map +1 -1
- package/dist/charts/engine/renderers/webgl.cjs +2 -0
- package/dist/charts/engine/renderers/webgl.cjs.map +1 -0
- package/dist/charts/engine/renderers/webgl.d.cts +4 -0
- package/dist/charts/engine/renderers/webgl.d.ts +4 -0
- package/dist/charts/engine/renderers/webgl.js +133 -0
- package/dist/charts/engine/renderers/webgl.js.map +1 -0
- package/dist/charts/engine/renderers/webgl2.cjs +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl2.d.cts +0 -1
- package/dist/charts/engine/renderers/webgl2.d.ts +0 -1
- package/dist/charts/engine/renderers/webgl2.js +62 -90
- package/dist/charts/engine/renderers/webgl2.js.map +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgpu.js +18 -15
- package/dist/charts/engine/renderers/webgpu.js.map +1 -1
- package/dist/charts/engine/scale.cjs +1 -1
- package/dist/charts/engine/scale.cjs.map +1 -1
- package/dist/charts/engine/scale.js +1 -1
- package/dist/charts/engine/scale.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +32 -9
- package/dist/charts/engine/scene.d.ts +32 -9
- package/dist/charts/engine/scene.js +363 -122
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/bullet.cjs +2 -0
- package/dist/charts/engine/shapes/bullet.cjs.map +1 -0
- package/dist/charts/engine/shapes/bullet.d.cts +6 -0
- package/dist/charts/engine/shapes/bullet.d.ts +6 -0
- package/dist/charts/engine/shapes/bullet.js +255 -0
- package/dist/charts/engine/shapes/bullet.js.map +1 -0
- package/dist/charts/engine/shapes/calendar.cjs +2 -0
- package/dist/charts/engine/shapes/calendar.cjs.map +1 -0
- package/dist/charts/engine/shapes/calendar.d.cts +38 -0
- package/dist/charts/engine/shapes/calendar.d.ts +38 -0
- package/dist/charts/engine/shapes/calendar.js +369 -0
- package/dist/charts/engine/shapes/calendar.js.map +1 -0
- package/dist/charts/engine/shapes/canvas.cjs +2 -0
- package/dist/charts/engine/shapes/canvas.cjs.map +1 -0
- package/dist/charts/engine/shapes/canvas.d.cts +65 -0
- package/dist/charts/engine/shapes/canvas.d.ts +65 -0
- package/dist/charts/engine/shapes/canvas.js +168 -0
- package/dist/charts/engine/shapes/canvas.js.map +1 -0
- package/dist/charts/engine/shapes/chart.cjs +2 -0
- package/dist/charts/engine/shapes/chart.cjs.map +1 -0
- package/dist/charts/engine/shapes/chart.d.cts +7 -0
- package/dist/charts/engine/shapes/chart.d.ts +7 -0
- package/dist/charts/engine/shapes/chart.js +292 -0
- package/dist/charts/engine/shapes/chart.js.map +1 -0
- package/dist/charts/engine/shapes/draw.cjs +2 -0
- package/dist/charts/engine/shapes/draw.cjs.map +1 -0
- package/dist/charts/engine/shapes/draw.d.cts +22 -0
- package/dist/charts/engine/shapes/draw.d.ts +22 -0
- package/dist/charts/engine/shapes/draw.js +165 -0
- package/dist/charts/engine/shapes/draw.js.map +1 -0
- package/dist/charts/engine/shapes/funnel.cjs +2 -0
- package/dist/charts/engine/shapes/funnel.cjs.map +1 -0
- package/dist/charts/engine/shapes/funnel.d.cts +6 -0
- package/dist/charts/engine/shapes/funnel.d.ts +6 -0
- package/dist/charts/engine/shapes/funnel.js +149 -0
- package/dist/charts/engine/shapes/funnel.js.map +1 -0
- package/dist/charts/engine/shapes/gauge.cjs +2 -0
- package/dist/charts/engine/shapes/gauge.cjs.map +1 -0
- package/dist/charts/engine/shapes/gauge.d.cts +7 -0
- package/dist/charts/engine/shapes/gauge.d.ts +7 -0
- package/dist/charts/engine/shapes/gauge.js +210 -0
- package/dist/charts/engine/shapes/gauge.js.map +1 -0
- package/dist/charts/engine/shapes/hit.cjs +2 -0
- package/dist/charts/engine/shapes/hit.cjs.map +1 -0
- package/dist/charts/engine/shapes/hit.d.cts +30 -0
- package/dist/charts/engine/shapes/hit.d.ts +30 -0
- package/dist/charts/engine/shapes/hit.js +145 -0
- package/dist/charts/engine/shapes/hit.js.map +1 -0
- package/dist/charts/engine/shapes/index.d.cts +12 -0
- package/dist/charts/engine/shapes/index.d.ts +12 -0
- package/dist/charts/engine/shapes/labels.cjs +2 -0
- package/dist/charts/engine/shapes/labels.cjs.map +1 -0
- package/dist/charts/engine/shapes/labels.d.cts +14 -0
- package/dist/charts/engine/shapes/labels.d.ts +14 -0
- package/dist/charts/engine/shapes/labels.js +146 -0
- package/dist/charts/engine/shapes/labels.js.map +1 -0
- package/dist/charts/engine/shapes/layout.cjs +3 -0
- package/dist/charts/engine/shapes/layout.cjs.map +1 -0
- package/dist/charts/engine/shapes/layout.d.cts +93 -0
- package/dist/charts/engine/shapes/layout.d.ts +93 -0
- package/dist/charts/engine/shapes/layout.js +353 -0
- package/dist/charts/engine/shapes/layout.js.map +1 -0
- package/dist/charts/engine/shapes/pie.cjs +2 -0
- package/dist/charts/engine/shapes/pie.cjs.map +1 -0
- package/dist/charts/engine/shapes/pie.d.cts +20 -0
- package/dist/charts/engine/shapes/pie.d.ts +20 -0
- package/dist/charts/engine/shapes/pie.js +302 -0
- package/dist/charts/engine/shapes/pie.js.map +1 -0
- package/dist/charts/engine/shapes/radar.cjs +2 -0
- package/dist/charts/engine/shapes/radar.cjs.map +1 -0
- package/dist/charts/engine/shapes/radar.d.cts +8 -0
- package/dist/charts/engine/shapes/radar.d.ts +8 -0
- package/dist/charts/engine/shapes/radar.js +198 -0
- package/dist/charts/engine/shapes/radar.js.map +1 -0
- package/dist/charts/engine/shapes/radialBar.cjs +2 -0
- package/dist/charts/engine/shapes/radialBar.cjs.map +1 -0
- package/dist/charts/engine/shapes/radialBar.d.cts +8 -0
- package/dist/charts/engine/shapes/radialBar.d.ts +8 -0
- package/dist/charts/engine/shapes/radialBar.js +155 -0
- package/dist/charts/engine/shapes/radialBar.js.map +1 -0
- package/dist/charts/engine/shapes/runtime.cjs +2 -0
- package/dist/charts/engine/shapes/runtime.cjs.map +1 -0
- package/dist/charts/engine/shapes/runtime.d.cts +36 -0
- package/dist/charts/engine/shapes/runtime.d.ts +36 -0
- package/dist/charts/engine/shapes/runtime.js +107 -0
- package/dist/charts/engine/shapes/runtime.js.map +1 -0
- package/dist/charts/engine/shapes/sankey.cjs +2 -0
- package/dist/charts/engine/shapes/sankey.cjs.map +1 -0
- package/dist/charts/engine/shapes/sankey.d.cts +29 -0
- package/dist/charts/engine/shapes/sankey.d.ts +29 -0
- package/dist/charts/engine/shapes/sankey.js +372 -0
- package/dist/charts/engine/shapes/sankey.js.map +1 -0
- package/dist/charts/engine/shapes/scene.cjs +2 -0
- package/dist/charts/engine/shapes/scene.cjs.map +1 -0
- package/dist/charts/engine/shapes/scene.d.cts +311 -0
- package/dist/charts/engine/shapes/scene.d.ts +311 -0
- package/dist/charts/engine/shapes/scene.js +125 -0
- package/dist/charts/engine/shapes/scene.js.map +1 -0
- package/dist/charts/engine/shapes/sunburst.cjs +2 -0
- package/dist/charts/engine/shapes/sunburst.cjs.map +1 -0
- package/dist/charts/engine/shapes/sunburst.d.cts +6 -0
- package/dist/charts/engine/shapes/sunburst.d.ts +6 -0
- package/dist/charts/engine/shapes/sunburst.js +261 -0
- package/dist/charts/engine/shapes/sunburst.js.map +1 -0
- package/dist/charts/engine/shapes/treemap.cjs +2 -0
- package/dist/charts/engine/shapes/treemap.cjs.map +1 -0
- package/dist/charts/engine/shapes/treemap.d.cts +14 -0
- package/dist/charts/engine/shapes/treemap.d.ts +14 -0
- package/dist/charts/engine/shapes/treemap.js +213 -0
- package/dist/charts/engine/shapes/treemap.js.map +1 -0
- package/dist/charts/engine/shapes/types.d.cts +719 -0
- package/dist/charts/engine/shapes/types.d.ts +719 -0
- package/dist/charts/engine/signature.cjs +2 -0
- package/dist/charts/engine/signature.cjs.map +1 -0
- package/dist/charts/engine/signature.d.cts +9 -0
- package/dist/charts/engine/signature.d.ts +9 -0
- package/dist/charts/engine/signature.js +13 -0
- package/dist/charts/engine/signature.js.map +1 -0
- package/dist/charts/engine/theme.cjs +1 -1
- package/dist/charts/engine/theme.cjs.map +1 -1
- package/dist/charts/engine/theme.d.cts +10 -1
- package/dist/charts/engine/theme.d.ts +10 -1
- package/dist/charts/engine/theme.js +40 -16
- package/dist/charts/engine/theme.js.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs +2 -0
- package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -0
- package/dist/charts/engine/three-d/canvas2d.d.cts +4 -0
- package/dist/charts/engine/three-d/canvas2d.d.ts +4 -0
- package/dist/charts/engine/three-d/canvas2d.js +104 -0
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -0
- package/dist/charts/engine/three-d/chart.cjs +2 -0
- package/dist/charts/engine/three-d/chart.cjs.map +1 -0
- package/dist/charts/engine/three-d/chart.d.cts +15 -0
- package/dist/charts/engine/three-d/chart.d.ts +15 -0
- package/dist/charts/engine/three-d/chart.js +621 -0
- package/dist/charts/engine/three-d/chart.js.map +1 -0
- package/dist/charts/engine/three-d/colormap.cjs +2 -0
- package/dist/charts/engine/three-d/colormap.cjs.map +1 -0
- package/dist/charts/engine/three-d/colormap.d.cts +16 -0
- package/dist/charts/engine/three-d/colormap.d.ts +16 -0
- package/dist/charts/engine/three-d/colormap.js +166 -0
- package/dist/charts/engine/three-d/colormap.js.map +1 -0
- package/dist/charts/engine/three-d/contours.cjs +2 -0
- package/dist/charts/engine/three-d/contours.cjs.map +1 -0
- package/dist/charts/engine/three-d/contours.d.cts +7 -0
- package/dist/charts/engine/three-d/contours.d.ts +7 -0
- package/dist/charts/engine/three-d/contours.js +47 -0
- package/dist/charts/engine/three-d/contours.js.map +1 -0
- package/dist/charts/engine/three-d/detect.cjs +2 -0
- package/dist/charts/engine/three-d/detect.cjs.map +1 -0
- package/dist/charts/engine/three-d/detect.d.cts +11 -0
- package/dist/charts/engine/three-d/detect.d.ts +11 -0
- package/dist/charts/engine/three-d/detect.js +35 -0
- package/dist/charts/engine/three-d/detect.js.map +1 -0
- package/dist/charts/engine/three-d/dom.cjs +2 -0
- package/dist/charts/engine/three-d/dom.cjs.map +1 -0
- package/dist/charts/engine/three-d/dom.d.cts +21 -0
- package/dist/charts/engine/three-d/dom.d.ts +21 -0
- package/dist/charts/engine/three-d/dom.js +98 -0
- package/dist/charts/engine/three-d/dom.js.map +1 -0
- package/dist/charts/engine/three-d/geometry.cjs +2 -0
- package/dist/charts/engine/three-d/geometry.cjs.map +1 -0
- package/dist/charts/engine/three-d/geometry.d.cts +76 -0
- package/dist/charts/engine/three-d/geometry.d.ts +76 -0
- package/dist/charts/engine/three-d/geometry.js +529 -0
- package/dist/charts/engine/three-d/geometry.js.map +1 -0
- package/dist/charts/engine/three-d/hover.cjs +2 -0
- package/dist/charts/engine/three-d/hover.cjs.map +1 -0
- package/dist/charts/engine/three-d/hover.d.cts +25 -0
- package/dist/charts/engine/three-d/hover.d.ts +25 -0
- package/dist/charts/engine/three-d/hover.js +131 -0
- package/dist/charts/engine/three-d/hover.js.map +1 -0
- package/dist/charts/engine/three-d/index.cjs +1 -0
- package/dist/charts/engine/three-d/index.d.cts +2 -0
- package/dist/charts/engine/three-d/index.d.ts +2 -0
- package/dist/charts/engine/three-d/index.js +2 -0
- package/dist/charts/engine/three-d/labels.cjs +2 -0
- package/dist/charts/engine/three-d/labels.cjs.map +1 -0
- package/dist/charts/engine/three-d/labels.d.cts +23 -0
- package/dist/charts/engine/three-d/labels.d.ts +23 -0
- package/dist/charts/engine/three-d/labels.js +136 -0
- package/dist/charts/engine/three-d/labels.js.map +1 -0
- package/dist/charts/engine/three-d/math.cjs +2 -0
- package/dist/charts/engine/three-d/math.cjs.map +1 -0
- package/dist/charts/engine/three-d/math.d.cts +84 -0
- package/dist/charts/engine/three-d/math.d.ts +84 -0
- package/dist/charts/engine/three-d/math.js +150 -0
- package/dist/charts/engine/three-d/math.js.map +1 -0
- package/dist/charts/engine/three-d/model.cjs +2 -0
- package/dist/charts/engine/three-d/model.cjs.map +1 -0
- package/dist/charts/engine/three-d/model.d.cts +130 -0
- package/dist/charts/engine/three-d/model.d.ts +130 -0
- package/dist/charts/engine/three-d/model.js +277 -0
- package/dist/charts/engine/three-d/model.js.map +1 -0
- package/dist/charts/engine/three-d/overlay.cjs +2 -0
- package/dist/charts/engine/three-d/overlay.cjs.map +1 -0
- package/dist/charts/engine/three-d/overlay.d.cts +72 -0
- package/dist/charts/engine/three-d/overlay.d.ts +72 -0
- package/dist/charts/engine/three-d/overlay.js +197 -0
- package/dist/charts/engine/three-d/overlay.js.map +1 -0
- package/dist/charts/engine/three-d/pick.cjs +2 -0
- package/dist/charts/engine/three-d/pick.cjs.map +1 -0
- package/dist/charts/engine/three-d/pick.d.cts +52 -0
- package/dist/charts/engine/three-d/pick.d.ts +52 -0
- package/dist/charts/engine/three-d/pick.js +220 -0
- package/dist/charts/engine/three-d/pick.js.map +1 -0
- package/dist/charts/engine/three-d/render-types.cjs +2 -0
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -0
- package/dist/charts/engine/three-d/render-types.d.cts +82 -0
- package/dist/charts/engine/three-d/render-types.d.ts +82 -0
- package/dist/charts/engine/three-d/render-types.js +13 -0
- package/dist/charts/engine/three-d/render-types.js.map +1 -0
- package/dist/charts/engine/three-d/shaders.cjs +276 -0
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -0
- package/dist/charts/engine/three-d/shaders.d.cts +26 -0
- package/dist/charts/engine/three-d/shaders.d.ts +26 -0
- package/dist/charts/engine/three-d/shaders.js +191 -0
- package/dist/charts/engine/three-d/shaders.js.map +1 -0
- package/dist/charts/engine/three-d/sort.cjs +2 -0
- package/dist/charts/engine/three-d/sort.cjs.map +1 -0
- package/dist/charts/engine/three-d/sort.d.cts +18 -0
- package/dist/charts/engine/three-d/sort.d.ts +18 -0
- package/dist/charts/engine/three-d/sort.js +71 -0
- package/dist/charts/engine/three-d/sort.js.map +1 -0
- package/dist/charts/engine/three-d/types.d.cts +588 -0
- package/dist/charts/engine/three-d/types.d.ts +588 -0
- package/dist/charts/engine/three-d/webgl.cjs +2 -0
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -0
- package/dist/charts/engine/three-d/webgl.d.cts +10 -0
- package/dist/charts/engine/three-d/webgl.d.ts +10 -0
- package/dist/charts/engine/three-d/webgl.js +130 -0
- package/dist/charts/engine/three-d/webgl.js.map +1 -0
- package/dist/charts/engine/three-d/webgpu.cjs +2 -0
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -0
- package/dist/charts/engine/three-d/webgpu.d.cts +5 -0
- package/dist/charts/engine/three-d/webgpu.d.ts +5 -0
- package/dist/charts/engine/three-d/webgpu.js +249 -0
- package/dist/charts/engine/three-d/webgpu.js.map +1 -0
- package/dist/charts/engine/time.cjs +1 -1
- package/dist/charts/engine/time.cjs.map +1 -1
- package/dist/charts/engine/time.d.cts +13 -4
- package/dist/charts/engine/time.d.ts +13 -4
- package/dist/charts/engine/time.js +156 -91
- package/dist/charts/engine/time.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +2 -0
- package/dist/charts/engine/trading/chart.cjs.map +1 -0
- package/dist/charts/engine/trading/chart.d.cts +3 -0
- package/dist/charts/engine/trading/chart.d.ts +3 -0
- package/dist/charts/engine/trading/chart.js +1507 -0
- package/dist/charts/engine/trading/chart.js.map +1 -0
- package/dist/charts/engine/trading/drawings.cjs +2 -0
- package/dist/charts/engine/trading/drawings.cjs.map +1 -0
- package/dist/charts/engine/trading/drawings.d.cts +57 -0
- package/dist/charts/engine/trading/drawings.d.ts +57 -0
- package/dist/charts/engine/trading/drawings.js +160 -0
- package/dist/charts/engine/trading/drawings.js.map +1 -0
- package/dist/charts/engine/trading/format.cjs +2 -0
- package/dist/charts/engine/trading/format.cjs.map +1 -0
- package/dist/charts/engine/trading/format.d.cts +60 -0
- package/dist/charts/engine/trading/format.d.ts +60 -0
- package/dist/charts/engine/trading/format.js +131 -0
- package/dist/charts/engine/trading/format.js.map +1 -0
- package/dist/charts/engine/trading/geometry.cjs +2 -0
- package/dist/charts/engine/trading/geometry.cjs.map +1 -0
- package/dist/charts/engine/trading/geometry.d.cts +55 -0
- package/dist/charts/engine/trading/geometry.d.ts +55 -0
- package/dist/charts/engine/trading/geometry.js +131 -0
- package/dist/charts/engine/trading/geometry.js.map +1 -0
- package/dist/charts/engine/trading/index.cjs +1 -0
- package/dist/charts/engine/trading/index.d.cts +3 -0
- package/dist/charts/engine/trading/index.d.ts +3 -0
- package/dist/charts/engine/trading/index.js +3 -0
- package/dist/charts/engine/trading/indicators.cjs +2 -0
- package/dist/charts/engine/trading/indicators.cjs.map +1 -0
- package/dist/charts/engine/trading/indicators.d.cts +105 -0
- package/dist/charts/engine/trading/indicators.d.ts +105 -0
- package/dist/charts/engine/trading/indicators.js +268 -0
- package/dist/charts/engine/trading/indicators.js.map +1 -0
- package/dist/charts/engine/trading/labels.cjs +2 -0
- package/dist/charts/engine/trading/labels.cjs.map +1 -0
- package/dist/charts/engine/trading/labels.d.cts +7 -0
- package/dist/charts/engine/trading/labels.d.ts +7 -0
- package/dist/charts/engine/trading/labels.js +91 -0
- package/dist/charts/engine/trading/labels.js.map +1 -0
- package/dist/charts/engine/trading/scale.cjs +2 -0
- package/dist/charts/engine/trading/scale.cjs.map +1 -0
- package/dist/charts/engine/trading/scale.d.cts +46 -0
- package/dist/charts/engine/trading/scale.d.ts +46 -0
- package/dist/charts/engine/trading/scale.js +100 -0
- package/dist/charts/engine/trading/scale.js.map +1 -0
- package/dist/charts/engine/trading/store.cjs +2 -0
- package/dist/charts/engine/trading/store.cjs.map +1 -0
- package/dist/charts/engine/trading/store.d.cts +62 -0
- package/dist/charts/engine/trading/store.d.ts +62 -0
- package/dist/charts/engine/trading/store.js +129 -0
- package/dist/charts/engine/trading/store.js.map +1 -0
- package/dist/charts/engine/trading/studies.cjs +2 -0
- package/dist/charts/engine/trading/studies.cjs.map +1 -0
- package/dist/charts/engine/trading/studies.d.cts +52 -0
- package/dist/charts/engine/trading/studies.d.ts +52 -0
- package/dist/charts/engine/trading/studies.js +254 -0
- package/dist/charts/engine/trading/studies.js.map +1 -0
- package/dist/charts/engine/trading/types.d.cts +656 -0
- package/dist/charts/engine/trading/types.d.ts +656 -0
- package/dist/charts/engine/types.d.cts +227 -15
- package/dist/charts/engine/types.d.ts +227 -15
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +7 -2
- package/dist/charts/index.d.ts +7 -2
- package/dist/charts/index.js +22 -8
- package/dist/charts/react/Chart.cjs +1 -1
- package/dist/charts/react/Chart.cjs.map +1 -1
- package/dist/charts/react/Chart.d.cts +11 -4
- package/dist/charts/react/Chart.d.ts +11 -4
- package/dist/charts/react/Chart.js +70 -47
- package/dist/charts/react/Chart.js.map +1 -1
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.d.cts +48 -2
- package/dist/charts/react/charts.d.ts +48 -2
- package/dist/charts/react/charts.js +371 -76
- package/dist/charts/react/charts.js.map +1 -1
- package/dist/charts/react/orderbook.cjs +2 -0
- package/dist/charts/react/orderbook.cjs.map +1 -0
- package/dist/charts/react/orderbook.d.cts +142 -0
- package/dist/charts/react/orderbook.d.ts +142 -0
- package/dist/charts/react/orderbook.js +182 -0
- package/dist/charts/react/orderbook.js.map +1 -0
- package/dist/charts/react/shapes.cjs +2 -0
- package/dist/charts/react/shapes.cjs.map +1 -0
- package/dist/charts/react/shapes.d.cts +537 -0
- package/dist/charts/react/shapes.d.ts +537 -0
- package/dist/charts/react/shapes.js +429 -0
- package/dist/charts/react/shapes.js.map +1 -0
- package/dist/charts/react/three-d.cjs +2 -0
- package/dist/charts/react/three-d.cjs.map +1 -0
- package/dist/charts/react/three-d.d.cts +151 -0
- package/dist/charts/react/three-d.d.ts +151 -0
- package/dist/charts/react/three-d.js +154 -0
- package/dist/charts/react/three-d.js.map +1 -0
- package/dist/charts/react/trading.cjs +2 -0
- package/dist/charts/react/trading.cjs.map +1 -0
- package/dist/charts/react/trading.d.cts +93 -0
- package/dist/charts/react/trading.d.ts +93 -0
- package/dist/charts/react/trading.js +95 -0
- package/dist/charts/react/trading.js.map +1 -0
- package/dist/charts/react/types.d.cts +200 -7
- package/dist/charts/react/types.d.ts +200 -7
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/native/charts/src/canvas.cjs +1 -1
- package/dist/native/charts/src/canvas.js +9 -3
- package/dist/native/charts/src/engine/axis.cjs +1 -1
- package/dist/native/charts/src/engine/axis.cjs.map +1 -1
- package/dist/native/charts/src/engine/axis.js +6 -6
- package/dist/native/charts/src/engine/axis.js.map +1 -1
- package/dist/native/charts/src/engine/color.cjs +1 -1
- package/dist/native/charts/src/engine/color.cjs.map +1 -1
- package/dist/native/charts/src/engine/color.js +12 -3
- package/dist/native/charts/src/engine/color.js.map +1 -1
- package/dist/native/charts/src/engine/controller.cjs +2 -2
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +418 -294
- package/dist/native/charts/src/engine/controller.js.map +1 -1
- package/dist/native/charts/src/engine/curve.cjs +2 -0
- package/dist/native/charts/src/engine/curve.cjs.map +1 -0
- package/dist/native/charts/src/engine/curve.js +56 -0
- package/dist/native/charts/src/engine/curve.js.map +1 -0
- package/dist/native/charts/src/engine/data.cjs +1 -1
- package/dist/native/charts/src/engine/data.cjs.map +1 -1
- package/dist/native/charts/src/engine/data.js +117 -43
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/format.cjs +1 -1
- package/dist/native/charts/src/engine/format.cjs.map +1 -1
- package/dist/native/charts/src/engine/format.js +46 -21
- package/dist/native/charts/src/engine/format.js.map +1 -1
- package/dist/native/charts/src/engine/labels.cjs +2 -0
- package/dist/native/charts/src/engine/labels.cjs.map +1 -0
- package/dist/native/charts/src/engine/labels.js +74 -0
- package/dist/native/charts/src/engine/labels.js.map +1 -0
- package/dist/native/charts/src/engine/layout.cjs +1 -1
- package/dist/native/charts/src/engine/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/layout.js +53 -12
- package/dist/native/charts/src/engine/layout.js.map +1 -1
- package/dist/native/charts/src/engine/locale.cjs +2 -0
- package/dist/native/charts/src/engine/locale.cjs.map +1 -0
- package/dist/native/charts/src/engine/locale.js +60 -0
- package/dist/native/charts/src/engine/locale.js.map +1 -0
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +335 -111
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- package/dist/native/charts/src/engine/overlay.js +54 -31
- package/dist/native/charts/src/engine/overlay.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +2 -2
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +456 -34
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scale.cjs +1 -1
- package/dist/native/charts/src/engine/scale.cjs.map +1 -1
- package/dist/native/charts/src/engine/scale.js +1 -1
- package/dist/native/charts/src/engine/scale.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +369 -128
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/bullet.js +255 -0
- package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/calendar.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/calendar.js +364 -0
- package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/canvas.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/canvas.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/canvas.js +168 -0
- package/dist/native/charts/src/engine/shapes/canvas.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.js +165 -0
- package/dist/native/charts/src/engine/shapes/draw.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/funnel.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/funnel.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/funnel.js +149 -0
- package/dist/native/charts/src/engine/shapes/funnel.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/gauge.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/gauge.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/gauge.js +210 -0
- package/dist/native/charts/src/engine/shapes/gauge.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/hit.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/hit.js +106 -0
- package/dist/native/charts/src/engine/shapes/hit.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/labels.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/labels.js +146 -0
- package/dist/native/charts/src/engine/shapes/labels.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/layout.cjs +3 -0
- package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/layout.js +331 -0
- package/dist/native/charts/src/engine/shapes/layout.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/pie.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/pie.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/pie.js +302 -0
- package/dist/native/charts/src/engine/shapes/pie.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/radar.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/radar.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/radar.js +198 -0
- package/dist/native/charts/src/engine/shapes/radar.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/radialBar.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/radialBar.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/radialBar.js +155 -0
- package/dist/native/charts/src/engine/shapes/radialBar.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/runtime.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/runtime.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/runtime.js +107 -0
- package/dist/native/charts/src/engine/shapes/runtime.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/sankey.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/sankey.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/sankey.js +372 -0
- package/dist/native/charts/src/engine/shapes/sankey.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/scene.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/scene.js +125 -0
- package/dist/native/charts/src/engine/shapes/scene.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/sunburst.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/sunburst.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/sunburst.js +261 -0
- package/dist/native/charts/src/engine/shapes/sunburst.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/treemap.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/treemap.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/treemap.js +213 -0
- package/dist/native/charts/src/engine/shapes/treemap.js.map +1 -0
- package/dist/native/charts/src/engine/theme.cjs.map +1 -1
- package/dist/native/charts/src/engine/theme.js.map +1 -1
- package/dist/native/charts/src/engine/time.cjs +1 -1
- package/dist/native/charts/src/engine/time.cjs.map +1 -1
- package/dist/native/charts/src/engine/time.js +156 -91
- package/dist/native/charts/src/engine/time.js.map +1 -1
- package/dist/native/components/Chart/ChartBase.cjs +1 -1
- package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
- package/dist/native/components/Chart/ChartBase.d.cts +1 -1
- package/dist/native/components/Chart/ChartBase.d.ts +1 -1
- package/dist/native/components/Chart/ChartBase.js +110 -107
- package/dist/native/components/Chart/ChartBase.js.map +1 -1
- package/dist/native/components/Chart/charts.cjs +1 -1
- package/dist/native/components/Chart/charts.cjs.map +1 -1
- package/dist/native/components/Chart/charts.d.cts +6 -1
- package/dist/native/components/Chart/charts.d.ts +6 -1
- package/dist/native/components/Chart/charts.js +53 -29
- package/dist/native/components/Chart/charts.js.map +1 -1
- package/dist/native/components/Chart/index.cjs +1 -1
- package/dist/native/components/Chart/index.d.cts +1 -1
- package/dist/native/components/Chart/index.d.ts +1 -1
- package/dist/native/components/Chart/index.js +2 -2
- package/dist/native/components/Chart/scene.cjs +1 -1
- package/dist/native/components/Chart/scene.cjs.map +1 -1
- package/dist/native/components/Chart/scene.js +244 -215
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Chart/types.d.cts +26 -3
- package/dist/native/components/Chart/types.d.ts +26 -3
- package/dist/native/components/Charts/charts.cjs +2 -0
- package/dist/native/components/Charts/charts.cjs.map +1 -0
- package/dist/native/components/Charts/charts.d.cts +41 -0
- package/dist/native/components/Charts/charts.d.ts +41 -0
- package/dist/native/components/Charts/charts.js +338 -0
- package/dist/native/components/Charts/charts.js.map +1 -0
- package/dist/native/components/Charts/index.cjs +1 -0
- package/dist/native/components/Charts/index.d.cts +2 -0
- package/dist/native/components/Charts/index.d.ts +2 -0
- package/dist/native/components/Charts/index.js +2 -0
- package/dist/native/components/Charts/types.d.cts +144 -0
- package/dist/native/components/Charts/types.d.ts +144 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs +2 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +24 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +24 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.js +271 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -0
- package/dist/native/components/ShapeChart/charts.cjs +2 -0
- package/dist/native/components/ShapeChart/charts.cjs.map +1 -0
- package/dist/native/components/ShapeChart/charts.d.cts +38 -0
- package/dist/native/components/ShapeChart/charts.d.ts +38 -0
- package/dist/native/components/ShapeChart/charts.js +387 -0
- package/dist/native/components/ShapeChart/charts.js.map +1 -0
- package/dist/native/components/ShapeChart/draw.cjs +2 -0
- package/dist/native/components/ShapeChart/draw.cjs.map +1 -0
- package/dist/native/components/ShapeChart/draw.d.cts +4 -0
- package/dist/native/components/ShapeChart/draw.d.ts +4 -0
- package/dist/native/components/ShapeChart/draw.js +104 -0
- package/dist/native/components/ShapeChart/draw.js.map +1 -0
- package/dist/native/components/ShapeChart/geometry.cjs +2 -0
- package/dist/native/components/ShapeChart/geometry.cjs.map +1 -0
- package/dist/native/components/ShapeChart/geometry.d.cts +71 -0
- package/dist/native/components/ShapeChart/geometry.d.ts +71 -0
- package/dist/native/components/ShapeChart/geometry.js +602 -0
- package/dist/native/components/ShapeChart/geometry.js.map +1 -0
- package/dist/native/components/ShapeChart/index.cjs +1 -0
- package/dist/native/components/ShapeChart/index.d.cts +2 -0
- package/dist/native/components/ShapeChart/index.d.ts +2 -0
- package/dist/native/components/ShapeChart/index.js +2 -0
- package/dist/native/components/ShapeChart/recorder.cjs +2 -0
- package/dist/native/components/ShapeChart/recorder.cjs.map +1 -0
- package/dist/native/components/ShapeChart/recorder.d.cts +106 -0
- package/dist/native/components/ShapeChart/recorder.d.ts +106 -0
- package/dist/native/components/ShapeChart/recorder.js +574 -0
- package/dist/native/components/ShapeChart/recorder.js.map +1 -0
- package/dist/native/components/ShapeChart/types.d.cts +509 -0
- package/dist/native/components/ShapeChart/types.d.ts +509 -0
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.d.cts +2 -0
- package/dist/native/index.d.ts +2 -0
- package/dist/native/index.js +14 -10
- package/dist/native/manifest.d.cts +6 -4
- package/dist/native/manifest.d.ts +6 -4
- package/dist/native/source/components/Chart/ChartBase.tsx +8 -1
- package/dist/native/source/components/Chart/charts.tsx +42 -6
- package/dist/native/source/components/Chart/index.ts +1 -0
- package/dist/native/source/components/Chart/scene.tsx +204 -100
- package/dist/native/source/components/Chart/types.ts +31 -1
- package/dist/native/source/components/Charts/charts.tsx +493 -0
- package/dist/native/source/components/Charts/index.ts +14 -0
- package/dist/native/source/components/Charts/types.ts +207 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +484 -0
- package/dist/native/source/components/ShapeChart/charts.tsx +605 -0
- package/dist/native/source/components/ShapeChart/draw.tsx +170 -0
- package/dist/native/source/components/ShapeChart/geometry.ts +1185 -0
- package/dist/native/source/components/ShapeChart/index.ts +15 -0
- package/dist/native/source/components/ShapeChart/recorder.ts +830 -0
- package/dist/native/source/components/ShapeChart/types.ts +564 -0
- package/dist/native/source/index.ts +2 -0
- package/dist/native/source/manifest.ts +30 -4
- package/dist/taro/charts.d.ts +209 -4
- package/dist/taro/index.d.ts +1 -0
- package/dist/taro/index.js +8032 -1891
- package/dist/taro/manifest.d.ts +1 -0
- package/dist/taro/shape-charts.d.ts +537 -0
- package/dist/uni/AreaChart.vue +68 -0
- package/dist/uni/AreaChart.vue.d.ts +120 -0
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BoxPlotChart.vue +66 -0
- package/dist/uni/BoxPlotChart.vue.d.ts +102 -0
- package/dist/uni/BubbleChart.vue +68 -0
- package/dist/uni/BubbleChart.vue.d.ts +106 -0
- package/dist/uni/BulletChart.vue +86 -0
- package/dist/uni/BulletChart.vue.d.ts +110 -0
- package/dist/uni/CalendarHeatmap.vue +92 -0
- package/dist/uni/CalendarHeatmap.vue.d.ts +129 -0
- package/dist/uni/CandlestickChart.vue +66 -0
- package/dist/uni/CandlestickChart.vue.d.ts +100 -0
- package/dist/uni/DonutChart.vue +72 -0
- package/dist/uni/DonutChart.vue.d.ts +114 -0
- package/dist/uni/FunnelChart.vue +67 -0
- package/dist/uni/FunnelChart.vue.d.ts +104 -0
- package/dist/uni/GanttChart.vue +67 -0
- package/dist/uni/GanttChart.vue.d.ts +123 -0
- package/dist/uni/GaugeChart.vue +77 -0
- package/dist/uni/GaugeChart.vue.d.ts +123 -0
- package/dist/uni/HeatmapChart.vue +66 -0
- package/dist/uni/HeatmapChart.vue.d.ts +114 -0
- package/dist/uni/HistogramChart.vue +66 -0
- package/dist/uni/HistogramChart.vue.d.ts +121 -0
- package/dist/uni/HorizontalBarChart.vue +68 -0
- package/dist/uni/HorizontalBarChart.vue.d.ts +127 -0
- package/dist/uni/Input.vue.d.ts +1 -1
- package/dist/uni/MixedChart.vue +68 -0
- package/dist/uni/MixedChart.vue.d.ts +106 -0
- package/dist/uni/NumberInput.vue.d.ts +1 -1
- package/dist/uni/PieChart.vue +72 -0
- package/dist/uni/PieChart.vue.d.ts +114 -0
- package/dist/uni/RadarChart.vue +67 -0
- package/dist/uni/RadarChart.vue.d.ts +110 -0
- package/dist/uni/RadialBarChart.vue +90 -0
- package/dist/uni/RadialBarChart.vue.d.ts +132 -0
- package/dist/uni/RangeAreaChart.vue +68 -0
- package/dist/uni/RangeAreaChart.vue.d.ts +102 -0
- package/dist/uni/ResponsiveGrid.vue.d.ts +1 -1
- package/dist/uni/SankeyChart.vue +88 -0
- package/dist/uni/SankeyChart.vue.d.ts +121 -0
- package/dist/uni/ShapeChart.vue +73 -0
- package/dist/uni/ShapeChart.vue.d.ts +54 -0
- package/dist/uni/Sparkline.vue +58 -0
- package/dist/uni/Sparkline.vue.d.ts +77 -0
- package/dist/uni/SunburstChart.vue +90 -0
- package/dist/uni/SunburstChart.vue.d.ts +114 -0
- package/dist/uni/Textarea.vue.d.ts +1 -1
- package/dist/uni/TimePicker.vue.d.ts +1 -1
- package/dist/uni/TreemapChart.vue +65 -0
- package/dist/uni/TreemapChart.vue.d.ts +100 -0
- package/dist/uni/WaterfallChart.vue +66 -0
- package/dist/uni/WaterfallChart.vue.d.ts +125 -0
- package/dist/uni/chart-types.d.ts +216 -2
- package/dist/uni/chart-types.js +174 -0
- package/dist/uni/charts-canvas.js +10 -3
- package/dist/uni/index.d.ts +26 -1
- package/dist/uni/index.js +26 -1
- package/dist/uni/manifest.d.ts +272 -0
- package/dist/uni/manifest.js +387 -0
- package/dist/uni/named-chart-options.d.ts +88 -0
- package/dist/uni/named-chart-options.js +156 -0
- package/dist/uni/shape-chart-canvas.d.ts +51 -0
- package/dist/uni/shape-chart-canvas.js +342 -0
- package/dist/uni/shape-chart-types.d.ts +381 -0
- package/dist/uni/shape-chart-types.js +261 -0
- package/dist/vue/components/Chart/AreaChart.vue.d.ts +124 -0
- package/dist/vue/components/Chart/AreaChart.vue.js +7 -0
- package/dist/vue/components/Chart/AreaChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js +49 -0
- package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js +55 -0
- package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BarChart.vue.d.ts +123 -0
- package/dist/vue/components/Chart/BarChart.vue.js +7 -0
- package/dist/vue/components/Chart/BarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +112 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js +7 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BubbleChart.vue.d.ts +106 -0
- package/dist/vue/components/Chart/BubbleChart.vue.js +7 -0
- package/dist/vue/components/Chart/BubbleChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js +52 -0
- package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BulletChart.vue.d.ts +117 -0
- package/dist/vue/components/Chart/BulletChart.vue.js +7 -0
- package/dist/vue/components/Chart/BulletChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js +64 -0
- package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue.d.ts +144 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue.js +7 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue.js.map +1 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js +77 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/CandlestickChart.vue.d.ts +94 -0
- package/dist/vue/components/Chart/CandlestickChart.vue.js +7 -0
- package/dist/vue/components/Chart/CandlestickChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Chart.vue.d.ts +103 -0
- package/dist/vue/components/Chart/Chart.vue.js +7 -0
- package/dist/vue/components/Chart/Chart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DepthChart.vue.d.ts +139 -0
- package/dist/vue/components/Chart/DepthChart.vue.js +7 -0
- package/dist/vue/components/Chart/DepthChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DonutChart.vue.d.ts +104 -0
- package/dist/vue/components/Chart/DonutChart.vue.js +7 -0
- package/dist/vue/components/Chart/DonutChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/FunnelChart.vue.d.ts +105 -0
- package/dist/vue/components/Chart/FunnelChart.vue.js +7 -0
- package/dist/vue/components/Chart/FunnelChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js +58 -0
- package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/GanttChart.vue.js +7 -0
- package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +98 -0
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GaugeChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/GaugeChart.vue.js +7 -0
- package/dist/vue/components/Chart/GaugeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +125 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.js +7 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HistogramChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/HistogramChart.vue.js +7 -0
- package/dist/vue/components/Chart/HistogramChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue.d.ts +121 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue.js +7 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js +55 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Line3DChart.vue.d.ts +121 -0
- package/dist/vue/components/Chart/Line3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Line3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/LineChart.vue.d.ts +125 -0
- package/dist/vue/components/Chart/LineChart.vue.js +7 -0
- package/dist/vue/components/Chart/LineChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js +50 -0
- package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/MixedChart.vue.d.ts +103 -0
- package/dist/vue/components/Chart/MixedChart.vue.js +7 -0
- package/dist/vue/components/Chart/MixedChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/OrderBook.vue.d.ts +125 -0
- package/dist/vue/components/Chart/OrderBook.vue.js +7 -0
- package/dist/vue/components/Chart/OrderBook.vue.js.map +1 -0
- package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js +38 -0
- package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +128 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.js +7 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.js.map +1 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/PieChart.vue.d.ts +104 -0
- package/dist/vue/components/Chart/PieChart.vue.js +7 -0
- package/dist/vue/components/Chart/PieChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/QuadrantChart.vue.d.ts +186 -0
- package/dist/vue/components/Chart/QuadrantChart.vue.js +7 -0
- package/dist/vue/components/Chart/QuadrantChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js +107 -0
- package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/RadarChart.vue.d.ts +111 -0
- package/dist/vue/components/Chart/RadarChart.vue.js +7 -0
- package/dist/vue/components/Chart/RadarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/RadialBarChart.vue.d.ts +147 -0
- package/dist/vue/components/Chart/RadialBarChart.vue.js +7 -0
- package/dist/vue/components/Chart/RadialBarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js +78 -0
- package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue.d.ts +106 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue.js +7 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/SankeyChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/SankeyChart.vue.js +7 -0
- package/dist/vue/components/Chart/SankeyChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +121 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/ScatterChart.vue.d.ts +94 -0
- package/dist/vue/components/Chart/ScatterChart.vue.js +7 -0
- package/dist/vue/components/Chart/ScatterChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/ShapeChart.vue.d.ts +39 -0
- package/dist/vue/components/Chart/ShapeChart.vue.js +7 -0
- package/dist/vue/components/Chart/ShapeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js +43 -0
- package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Sparkline.vue.d.ts +90 -0
- package/dist/vue/components/Chart/Sparkline.vue.js +7 -0
- package/dist/vue/components/Chart/Sparkline.vue.js.map +1 -0
- package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/SunburstChart.vue.d.ts +123 -0
- package/dist/vue/components/Chart/SunburstChart.vue.js +7 -0
- package/dist/vue/components/Chart/SunburstChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js +68 -0
- package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +143 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +114 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.js +7 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.js.map +1 -0
- package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/TradingChart.vue.d.ts +160 -0
- package/dist/vue/components/Chart/TradingChart.vue.js +7 -0
- package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +70 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/TreemapChart.vue.d.ts +97 -0
- package/dist/vue/components/Chart/TreemapChart.vue.js +7 -0
- package/dist/vue/components/Chart/TreemapChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.js +7 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +68 -0
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/cartesian.d.ts +47 -0
- package/dist/vue/components/Chart/cartesian.js +56 -0
- package/dist/vue/components/Chart/cartesian.js.map +1 -0
- package/dist/vue/components/Chart/engine.d.ts +35 -0
- package/dist/vue/components/Chart/engine.js +35 -0
- package/dist/vue/components/Chart/engine.js.map +1 -0
- package/dist/vue/components/Chart/index.d.ts +41 -0
- package/dist/vue/components/Chart/index.js +40 -0
- package/dist/vue/components/Chart/orderbook.d.ts +359 -0
- package/dist/vue/components/Chart/orderbook.js +126 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -0
- package/dist/vue/components/Chart/props.d.ts +188 -0
- package/dist/vue/components/Chart/props.js +92 -0
- package/dist/vue/components/Chart/props.js.map +1 -0
- package/dist/vue/components/Chart/shape.d.ts +41 -0
- package/dist/vue/components/Chart/shape.js +42 -0
- package/dist/vue/components/Chart/shape.js.map +1 -0
- package/dist/vue/components/Chart/three-d.d.ts +106 -0
- package/dist/vue/components/Chart/three-d.js +88 -0
- package/dist/vue/components/Chart/three-d.js.map +1 -0
- package/dist/vue/components/Chart/trading.d.ts +105 -0
- package/dist/vue/components/Chart/trading.js +55 -0
- package/dist/vue/components/Chart/trading.js.map +1 -0
- package/dist/vue/components/Chart/types.d.ts +137 -0
- package/dist/vue/global.d.ts +38 -0
- package/dist/vue/groups/charts.d.ts +1 -0
- package/dist/vue/groups/charts.js +87 -0
- package/dist/vue/groups/charts.js.map +1 -0
- package/dist/vue/index.d.ts +1 -0
- package/dist/vue/index.js +63 -23
- package/dist/vue/plugin.js +12 -10
- package/dist/vue/plugin.js.map +1 -1
- package/dist/weapp/area-chart/index.js +1 -0
- package/dist/weapp/area-chart/index.json +1 -0
- package/dist/weapp/area-chart/index.wxml +1 -0
- package/dist/weapp/area-chart/index.wxss +1 -0
- package/dist/weapp/box-plot-chart/index.js +1 -0
- package/dist/weapp/box-plot-chart/index.json +1 -0
- package/dist/weapp/box-plot-chart/index.wxml +1 -0
- package/dist/weapp/box-plot-chart/index.wxss +1 -0
- package/dist/weapp/bubble-chart/index.js +1 -0
- package/dist/weapp/bubble-chart/index.json +1 -0
- package/dist/weapp/bubble-chart/index.wxml +1 -0
- package/dist/weapp/bubble-chart/index.wxss +1 -0
- package/dist/weapp/bullet-chart/index.js +1 -0
- package/dist/weapp/bullet-chart/index.json +1 -0
- package/dist/weapp/bullet-chart/index.wxml +1 -0
- package/dist/weapp/bullet-chart/index.wxss +1 -0
- package/dist/weapp/calendar-heatmap/index.js +1 -0
- package/dist/weapp/calendar-heatmap/index.json +1 -0
- package/dist/weapp/calendar-heatmap/index.wxml +1 -0
- package/dist/weapp/calendar-heatmap/index.wxss +1 -0
- package/dist/weapp/candlestick-chart/index.js +1 -0
- package/dist/weapp/candlestick-chart/index.json +1 -0
- package/dist/weapp/candlestick-chart/index.wxml +1 -0
- package/dist/weapp/candlestick-chart/index.wxss +1 -0
- package/dist/weapp/charts/canvas.js +11436 -0
- package/dist/weapp/charts/core.d.ts +2 -0
- package/dist/weapp/charts/core.js +41 -0
- package/dist/weapp/controls.js +1428 -3732
- package/dist/weapp/donut-chart/index.js +1 -0
- package/dist/weapp/donut-chart/index.json +1 -0
- package/dist/weapp/donut-chart/index.wxml +1 -0
- package/dist/weapp/donut-chart/index.wxss +1 -0
- package/dist/weapp/funnel-chart/index.js +1 -0
- package/dist/weapp/funnel-chart/index.json +1 -0
- package/dist/weapp/funnel-chart/index.wxml +1 -0
- package/dist/weapp/funnel-chart/index.wxss +1 -0
- package/dist/weapp/gantt-chart/index.js +1 -0
- package/dist/weapp/gantt-chart/index.json +1 -0
- package/dist/weapp/gantt-chart/index.wxml +1 -0
- package/dist/weapp/gantt-chart/index.wxss +1 -0
- package/dist/weapp/gauge-chart/index.js +1 -0
- package/dist/weapp/gauge-chart/index.json +1 -0
- package/dist/weapp/gauge-chart/index.wxml +1 -0
- package/dist/weapp/gauge-chart/index.wxss +1 -0
- package/dist/weapp/heatmap-chart/index.js +1 -0
- package/dist/weapp/heatmap-chart/index.json +1 -0
- package/dist/weapp/heatmap-chart/index.wxml +1 -0
- package/dist/weapp/heatmap-chart/index.wxss +1 -0
- package/dist/weapp/histogram-chart/index.js +1 -0
- package/dist/weapp/histogram-chart/index.json +1 -0
- package/dist/weapp/histogram-chart/index.wxml +1 -0
- package/dist/weapp/histogram-chart/index.wxss +1 -0
- package/dist/weapp/horizontal-bar-chart/index.js +1 -0
- package/dist/weapp/horizontal-bar-chart/index.json +1 -0
- package/dist/weapp/horizontal-bar-chart/index.wxml +1 -0
- package/dist/weapp/horizontal-bar-chart/index.wxss +1 -0
- package/dist/weapp/mixed-chart/index.js +1 -0
- package/dist/weapp/mixed-chart/index.json +1 -0
- package/dist/weapp/mixed-chart/index.wxml +1 -0
- package/dist/weapp/mixed-chart/index.wxss +1 -0
- package/dist/weapp/pie-chart/index.js +1 -0
- package/dist/weapp/pie-chart/index.json +1 -0
- package/dist/weapp/pie-chart/index.wxml +1 -0
- package/dist/weapp/pie-chart/index.wxss +1 -0
- package/dist/weapp/radar-chart/index.js +1 -0
- package/dist/weapp/radar-chart/index.json +1 -0
- package/dist/weapp/radar-chart/index.wxml +1 -0
- package/dist/weapp/radar-chart/index.wxss +1 -0
- package/dist/weapp/radial-bar-chart/index.js +1 -0
- package/dist/weapp/radial-bar-chart/index.json +1 -0
- package/dist/weapp/radial-bar-chart/index.wxml +1 -0
- package/dist/weapp/radial-bar-chart/index.wxss +1 -0
- package/dist/weapp/range-area-chart/index.js +1 -0
- package/dist/weapp/range-area-chart/index.json +1 -0
- package/dist/weapp/range-area-chart/index.wxml +1 -0
- package/dist/weapp/range-area-chart/index.wxss +1 -0
- package/dist/weapp/sankey-chart/index.js +1 -0
- package/dist/weapp/sankey-chart/index.json +1 -0
- package/dist/weapp/sankey-chart/index.wxml +1 -0
- package/dist/weapp/sankey-chart/index.wxss +1 -0
- package/dist/weapp/shape-chart/index.js +1 -0
- package/dist/weapp/shape-chart/index.json +1 -0
- package/dist/weapp/shape-chart/index.wxml +1 -0
- package/dist/weapp/shape-chart/index.wxss +1 -0
- package/dist/weapp/sparkline/index.js +1 -0
- package/dist/weapp/sparkline/index.json +1 -0
- package/dist/weapp/sparkline/index.wxml +1 -0
- package/dist/weapp/sparkline/index.wxss +1 -0
- package/dist/weapp/sunburst-chart/index.js +1 -0
- package/dist/weapp/sunburst-chart/index.json +1 -0
- package/dist/weapp/sunburst-chart/index.wxml +1 -0
- package/dist/weapp/sunburst-chart/index.wxss +1 -0
- package/dist/weapp/treemap-chart/index.js +1 -0
- package/dist/weapp/treemap-chart/index.json +1 -0
- package/dist/weapp/treemap-chart/index.wxml +1 -0
- package/dist/weapp/treemap-chart/index.wxss +1 -0
- package/dist/weapp/types.d.ts +466 -0
- package/dist/weapp/waterfall-chart/index.js +1 -0
- package/dist/weapp/waterfall-chart/index.json +1 -0
- package/dist/weapp/waterfall-chart/index.wxml +1 -0
- package/dist/weapp/waterfall-chart/index.wxss +1 -0
- package/dist/web-components/components/chart/chart.d.ts +58 -0
- package/dist/web-components/components/chart/chart.js +55 -0
- package/dist/web-components/components/chart/chart.js.map +1 -0
- package/dist/web-components/components/chart/charts.d.ts +252 -0
- package/dist/web-components/components/chart/charts.js +201 -0
- package/dist/web-components/components/chart/charts.js.map +1 -0
- package/dist/web-components/components/chart/engine-element.d.ts +53 -0
- package/dist/web-components/components/chart/engine-element.js +77 -0
- package/dist/web-components/components/chart/engine-element.js.map +1 -0
- package/dist/web-components/components/chart/extended.d.ts +224 -0
- package/dist/web-components/components/chart/extended.js +183 -0
- package/dist/web-components/components/chart/extended.js.map +1 -0
- package/dist/web-components/components/chart/series.d.ts +7 -0
- package/dist/web-components/components/chart/series.js +14 -0
- package/dist/web-components/components/chart/series.js.map +1 -0
- package/dist/web-components/components/chart/shape-chart.d.ts +199 -0
- package/dist/web-components/components/chart/shape-chart.js +161 -0
- package/dist/web-components/components/chart/shape-chart.js.map +1 -0
- package/dist/web-components/components/chart/shapes-extended.d.ts +162 -0
- package/dist/web-components/components/chart/shapes-extended.js +156 -0
- package/dist/web-components/components/chart/shapes-extended.js.map +1 -0
- package/dist/web-components/components/chart-3d/chart-3d.d.ts +111 -0
- package/dist/web-components/components/chart-3d/chart-3d.js +97 -0
- package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -0
- package/dist/web-components/components/order-book/order-book.d.ts +165 -0
- package/dist/web-components/components/order-book/order-book.js +174 -0
- package/dist/web-components/components/order-book/order-book.js.map +1 -0
- package/dist/web-components/components/trading-chart/trading-chart.d.ts +96 -0
- package/dist/web-components/components/trading-chart/trading-chart.js +96 -0
- package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -0
- package/dist/web-components/elements/chart-3d.d.ts +2 -0
- package/dist/web-components/elements/chart-3d.js +13 -0
- package/dist/web-components/elements/chart-3d.js.map +1 -0
- package/dist/web-components/elements/chart.d.ts +7 -0
- package/dist/web-components/elements/chart.js +43 -0
- package/dist/web-components/elements/chart.js.map +1 -0
- package/dist/web-components/elements/order-book.d.ts +2 -0
- package/dist/web-components/elements/order-book.js +13 -0
- package/dist/web-components/elements/order-book.js.map +1 -0
- package/dist/web-components/elements/trading-chart.d.ts +2 -0
- package/dist/web-components/elements/trading-chart.js +8 -0
- package/dist/web-components/elements/trading-chart.js.map +1 -0
- package/dist/web-components/html-custom-data.json +1192 -29
- package/dist/web-components/types/react.d.ts +435 -0
- package/dist/web-components/types/solid.d.ts +321 -0
- package/dist/web-components/types/svelte.d.ts +321 -0
- package/dist/web-components/types/vue.d.ts +359 -0
- package/package.json +113 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heatmap.js","names":["CHUNK","LUT_SIZE","DARK_RAMP","LIGHT_RAMP","LABELS","heatIntensity","size","max","r","contrast","scale","createOrderBookHeatmap","options","initial","store","createOrderBookStore","emitter","createEmitter","fmt","createFormatters","colors","lut","tick","columns","seq","openStart","open","lastTrade","dataTime","dataWall","scaleMax","bubbleRef","chunks","dirtyChunks","itemVersion","headItem","headVersion","origin","renderer","rendererToken","destroyed","resolveReady","ready","resolve","follow","windowSpan","viewX","viewY","yCenter","ySpan","userSpan","lastFrame","plot","hoverAt","hoverKey","drag","host","createHost","container","refreshColors","markAllDirty","root","texts","localeLabels","labels","applyTexts","interval","history","depth","nowTime","elapsed","perfNow","theme","sideColors","value","dark","luminance","stops","i","c","rampColor","packColor","refreshFormat","decimalsOf","inferPriceDecimals","inferSizeDecimals","id","clearHistory","ensureTick","base","inferTickSize","mid","ratio","multiple","p","m","roundToStep","sampleBook","limit","bins","sizes","n","top","side","count","rows","bin","s","b","a","closeColumn","column","start","recent","sum","target","oldest","drop","first","advance","time","step","noteTime","columnAt","lo","hi","ensureOrigin","intensityIndex","cellsItem","list","instances","f","u","k","half","x","level","price","chunkItems","byChunk","visibleColumns","out","bubblesItem","all","push","volume","notional","buy","visible","ref","maxD","buffer","up","down","clamp","lineItems","build","points","write","y","GAP","pick","key","headCells","version","draw","ctx","dt","now","l","fontSize","width","live","dpr","height","fontOf","sample","axisW","profileW","timeH","right","ease","center","x0","x1","y0","y1","xOf","t","yOf","canvas","bw","bh","items","head","bubbles","xScale","yScale","yTicks","linearTicks","toCss","xt","timeTicks","px","rowPx","maxSize","sides","w","tag","text","filled","color","roundRect","clear","drawHover","fresh","hide","hx","hy","rowPrice","bestBid","bestAsk","buyVolume","sellVolume","levels","lv","ry","cx0","cx1","cy0","cy1","sideColor","tooltipHtml","doc","formatClock","event","initRenderer","token","next","createRenderer","kind","exclude","setFollow","onPointerDown","localPoint","onPointerMove","dx","dy","span","tx","ty","onPointerUp","onPointerLeave","zoomTime","factor","anchorX","zoomPrice","onWheel","onDoubleClick","instance","onKeyDown","d","applyOne","delta","snapshot","deltas","trades","trade","previous","handler"],"sources":["../../../../../charts/src/engine/orderbook/heatmap.ts"],"sourcesContent":["// createOrderBookHeatmap: Bookmap-style liquidity heatmap. The book is\n// sampled every `interval` ms into a column of price rows; columns are\n// drawn by the GPU renderers of the chart engine as bar instances (one per\n// cell), in chunks of CHUNK columns uploaded once, so streaming costs one\n// small chunk per column. Trades are bubbles (scatter instances), the best\n// bid / ask are lines; axes, the book profile, the crosshair and the\n// tooltip are drawn on a Canvas2D layer above.\n\nimport { packColor, rampColor, toCss, luminance, type Rgba } from \"../color\";\nimport { createRenderer } from \"../renderers/detect\";\nimport {\n BAR_STRIDE,\n GAP,\n SCATTER_STRIDE,\n type BarItem,\n type ChartRenderer,\n type LineItem,\n type RenderItem,\n type ScatterItem,\n} from \"../renderers/types\";\nimport { linearTicks } from \"../scale\";\nimport { timeTicks } from \"../time\";\nimport type { ChartRendererKind } from \"../types\";\nimport {\n createOrderBookStore,\n decimalsOf,\n inferPriceDecimals,\n inferSizeDecimals,\n inferTickSize,\n roundToStep,\n} from \"./book\";\nimport {\n clamp,\n createFormatters,\n ease,\n fontOf,\n formatClock,\n roundRect,\n sideColors,\n type Formatters,\n} from \"./format\";\nimport { localeLabels, type LabelDictionary } from \"../locale\";\nimport { createEmitter, createHost, localPoint, tooltipHtml } from \"./host\";\nimport type {\n OrderBookDelta,\n OrderBookHeatmapEventMap,\n OrderBookHeatmapHoverEvent,\n OrderBookHeatmapInstance,\n OrderBookHeatmapLabels,\n OrderBookHeatmapOptions,\n OrderBookHeatmapScale,\n OrderBookSide,\n MarketTrade,\n} from \"./types\";\n\n/** Columns per GPU chunk */\nconst CHUNK = 32;\n/** Colors of the ramp lookup table */\nconst LUT_SIZE = 128;\n\nconst DARK_RAMP = [\n \"#0b2a4f\",\n \"#12508f\",\n \"#1c7fd0\",\n \"#25b3d6\",\n \"#4fd6a0\",\n \"#e9e35a\",\n \"#ffa23d\",\n \"#ff5533\",\n];\nconst LIGHT_RAMP = [\n \"#dbeafe\",\n \"#93c5fd\",\n \"#3b82f6\",\n \"#4338ca\",\n \"#9333ea\",\n \"#db2777\",\n \"#f97316\",\n];\n\nconst LABELS: LabelDictionary<OrderBookHeatmapLabels> = {\n en: {\n time: \"Time\",\n price: \"Price\",\n liquidity: \"Liquidity\",\n buys: \"Buys\",\n sells: \"Sells\",\n bid: \"Bid\",\n ask: \"Ask\",\n name: \"Liquidity heatmap\",\n },\n zh: {\n time: \"时间\",\n price: \"价格\",\n liquidity: \"挂单量\",\n buys: \"主动买入\",\n sells: \"主动卖出\",\n bid: \"买一\",\n ask: \"卖一\",\n name: \"订单簿热力图\",\n },\n ja: {\n time: \"時刻\",\n price: \"価格\",\n liquidity: \"指値量\",\n buys: \"買い約定\",\n sells: \"売り約定\",\n bid: \"最良買気配\",\n ask: \"最良売気配\",\n name: \"板ヒートマップ\",\n },\n fr: {\n time: \"Heure\",\n price: \"Prix\",\n liquidity: \"Liquidité\",\n buys: \"Achats\",\n sells: \"Ventes\",\n bid: \"Meilleur achat\",\n ask: \"Meilleure vente\",\n name: \"Carte de chaleur de la liquidité\",\n },\n};\n\ninterface Column {\n /** Sequence number (chunk = seq / CHUNK) */\n seq: number;\n /** Start time */\n time: number;\n /** Price rows (price / tick, rounded) */\n bins: Float64Array;\n sizes: Float32Array;\n bestBid: number;\n bestAsk: number;\n buyVolume: number;\n buyNotional: number;\n sellVolume: number;\n sellNotional: number;\n /** A robust \"large\" size of the column (4th largest), for the auto scale */\n reference: number;\n}\n\n/** Normalized intensity (0-1) of a size */\nexport const heatIntensity = (\n size: number,\n max: number,\n scale: OrderBookHeatmapScale,\n contrast: number,\n): number => {\n if (!(size > 0) || !(max > 0)) return 0;\n const r = Math.min(1, (size * contrast) / max);\n switch (scale) {\n case \"linear\":\n return r;\n case \"sqrt\":\n return Math.sqrt(r);\n default:\n // one decade: a tenth of the hottest size is a fifth of the ramp\n return Math.log10(1 + 9 * r);\n }\n};\n\n/**\n * Creates a liquidity heatmap in `container`: resting size over time and\n * price on the GPU, trades as bubbles, best bid / ask lines, the current\n * book profile, zoom / pan and a crosshair tooltip.\n */\nexport const createOrderBookHeatmap = (\n container: HTMLElement,\n initial: OrderBookHeatmapOptions = {},\n): OrderBookHeatmapInstance => {\n let options = initial;\n const store = createOrderBookStore();\n const emitter = createEmitter<OrderBookHeatmapEventMap>();\n let fmt: Formatters = createFormatters(options, 2, 4);\n let colors = { up: [0, 0, 0, 1] as Rgba, down: [0, 0, 0, 1] as Rgba };\n let lut = new Uint32Array(LUT_SIZE);\n\n let tick = 0;\n let columns: Column[] = [];\n let seq = 0;\n /** Start of the open column (the live book), NaN before the first data */\n let openStart = NaN;\n const open = { buyVolume: 0, buyNotional: 0, sellVolume: 0, sellNotional: 0 };\n let lastTrade: MarketTrade | null = null;\n\n /** Time source: exchange times once any is given, the local clock otherwise */\n let dataTime = NaN;\n let dataWall = 0;\n\n let scaleMax = 0;\n let bubbleRef = 0;\n const chunks = new Map<number, BarItem>();\n const dirtyChunks = new Set<number>();\n let itemVersion = 0;\n let headItem: BarItem | null = null;\n let headVersion = -1;\n let origin = { x: NaN, y: NaN };\n\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let destroyed = false;\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n /** View: time range and price range; follows the market unless panned */\n let follow = true;\n let windowSpan = NaN;\n let viewX: [number, number] = [0, 1];\n let viewY: [number, number] = [0, 1];\n let yCenter = NaN;\n let ySpan = NaN;\n /** The price range was zoomed by the user: no more auto fit */\n let userSpan = false;\n let lastFrame = 0;\n let plot = { x: 0, y: 0, w: 0, h: 0 };\n let hoverAt: [number, number] | null = null;\n let hoverKey = \"\";\n let drag: {\n x: number;\n y: number;\n viewX: [number, number];\n viewY: [number, number];\n axis: boolean;\n span: number;\n } | null = null;\n\n const host = createHost(container, {\n className: \"minerva-orderbook-heatmap\",\n draw,\n onTheme: () => {\n refreshColors();\n markAllDirty();\n },\n });\n const { root, doc } = host;\n root.tabIndex = 0;\n root.setAttribute(\"role\", \"figure\");\n root.style.touchAction = \"none\";\n\n /** Texts in the locale, resolved on every option update */\n let texts = localeLabels(LABELS, options.locale, options.labels);\n const labels = () => texts;\n const applyTexts = () => {\n texts = localeLabels(LABELS, options.locale, options.labels);\n root.setAttribute(\"aria-label\", options.ariaLabel ?? texts.name);\n };\n const interval = () => Math.max(10, options.interval ?? 100);\n const history = () => Math.max(interval() * 4, options.history ?? 300_000);\n const depth = () => Math.max(4, Math.round(options.depth ?? 160));\n const nowTime = () => {\n if (!Number.isFinite(dataTime)) return Date.now();\n const elapsed = perfNow() - dataWall;\n return dataTime + Math.min(Math.max(0, elapsed), interval() * 3);\n };\n const perfNow = () =>\n typeof performance !== \"undefined\" ? performance.now() : Date.now();\n\n function refreshColors() {\n const theme = host.theme;\n colors = sideColors(theme, options);\n const resolve = (value: string) =>\n theme.resolve ? theme.resolve(value, theme.primary) : theme.primary;\n const dark = luminance(theme.background) < 0.4;\n const stops: Rgba[] = [\n theme.background,\n ...(options.colors?.length\n ? options.colors\n : dark\n ? DARK_RAMP\n : LIGHT_RAMP\n ).map(resolve),\n ];\n lut = new Uint32Array(LUT_SIZE);\n for (let i = 0; i < LUT_SIZE; i++) {\n const c = rampColor(stops, i / (LUT_SIZE - 1));\n lut[i] = packColor([c[0], c[1], c[2], 1]);\n }\n }\n\n const refreshFormat = () => {\n fmt = createFormatters(\n options,\n tick > 0\n ? Math.max(decimalsOf(tick), inferPriceDecimals(store))\n : inferPriceDecimals(store),\n inferSizeDecimals(store),\n );\n };\n\n const markAllDirty = () => {\n for (const id of chunks.keys()) dirtyChunks.add(id);\n headVersion = -1;\n host.invalidate();\n };\n\n const clearHistory = () => {\n columns = [];\n chunks.clear();\n dirtyChunks.clear();\n headItem = null;\n headVersion = -1;\n openStart = NaN;\n origin = { x: NaN, y: NaN };\n scaleMax = 0;\n bubbleRef = 0;\n open.buyVolume = open.buyNotional = open.sellVolume = open.sellNotional = 0;\n };\n\n // --------------------------------------------------------------- columns\n\n const ensureTick = () => {\n if (tick > 0) return;\n const base = inferTickSize(store);\n const mid = store.mid();\n if (options.tickSize && options.tickSize > 0) tick = options.tickSize;\n else if (base > 0 && Number.isFinite(mid)) {\n // rows of about 0.1 basis point: a round multiple of the tick (BTC at\n // 64,000 with a 0.1 tick: 0.5 rows)\n const ratio = (mid * 1e-5) / base;\n let multiple = 1;\n for (let p = 1; p <= 1e9 && multiple < ratio * 0.75; p *= 10) {\n for (const m of [1, 2, 5]) {\n multiple = m * p;\n if (multiple >= ratio * 0.75) break;\n }\n }\n tick = roundToStep(base * multiple, base);\n } else tick = Number.isFinite(mid) ? Math.max(1e-8, mid * 1e-5) : 0;\n if (tick > 0) refreshFormat();\n };\n\n /** Samples the book into price rows */\n const sampleBook = () => {\n const limit = depth();\n const bins = new Float64Array(limit * 2);\n const sizes = new Float32Array(limit * 2);\n let n = 0;\n const top = [0, 0, 0, 0];\n for (const side of [\"bid\", \"ask\"] as const) {\n const count = store.count(side);\n let rows = 0;\n for (let i = 0; i < count; i++) {\n const bin = Math.round(store.priceAt(side, i) / tick);\n const size = store.sizeAt(side, i);\n if (n > 0 && bins[n - 1] === bin && rows > 0) {\n sizes[n - 1] += size;\n continue;\n }\n if (rows >= limit) break;\n bins[n] = bin;\n sizes[n] = size;\n n++;\n rows++;\n }\n }\n for (let i = 0; i < n; i++) {\n const s = sizes[i]!;\n if (s > top[3]!) {\n top[3] = s;\n top.sort((a, b) => b - a);\n }\n }\n return {\n bins: bins.subarray(0, n),\n sizes: sizes.subarray(0, n),\n reference: top[3]! || top[0]!,\n };\n };\n\n /** Closes the open column at `start` with the current book */\n const closeColumn = (start: number) => {\n if (!(tick > 0)) return;\n const { bins, sizes, reference } = sampleBook();\n const column: Column = {\n seq: seq++,\n time: start,\n bins,\n sizes,\n bestBid: store.bestBid(),\n bestAsk: store.bestAsk(),\n buyVolume: open.buyVolume,\n buyNotional: open.buyNotional,\n sellVolume: open.sellVolume,\n sellNotional: open.sellNotional,\n reference,\n };\n open.buyVolume = open.buyNotional = open.sellVolume = open.sellNotional = 0;\n columns.push(column);\n dirtyChunks.add(Math.floor(column.seq / CHUNK));\n // the auto color scale: average reference of the recent columns, moved\n // only on a clear change (a change recolors every chunk)\n if (options.maxSize === undefined) {\n const recent = columns.slice(-100);\n let sum = 0;\n for (const c of recent) sum += c.reference;\n const target = (sum / recent.length) * 1.6;\n if (!(scaleMax > 0) || Math.abs(target / scaleMax - 1) > 0.3) {\n scaleMax = target;\n for (const id of chunks.keys()) dirtyChunks.add(id);\n headVersion = -1;\n }\n }\n // history\n const oldest = start - history();\n let drop = 0;\n while (drop < columns.length && columns[drop]!.time < oldest) drop++;\n if (drop) {\n columns = columns.slice(drop);\n const first = columns[0] ? Math.floor(columns[0].seq / CHUNK) : Infinity;\n for (const id of [...chunks.keys()]) {\n if (id < first) chunks.delete(id);\n }\n }\n };\n\n /** Closes every column ending before `time` */\n const advance = (time: number) => {\n if (!Number.isFinite(time)) return;\n const step = interval();\n if (!Number.isFinite(openStart)) {\n openStart = Math.floor(time / step) * step;\n return;\n }\n if (time - openStart > history()) {\n // a long gap: one column, then jump\n closeColumn(openStart);\n openStart = Math.floor(time / step) * step;\n return;\n }\n while (time >= openStart + step) {\n closeColumn(openStart);\n openStart += step;\n }\n };\n\n const noteTime = (time: number | undefined) => {\n if (time === undefined || !Number.isFinite(time)) return Date.now();\n if (!Number.isFinite(dataTime) || time >= dataTime) {\n dataTime = time;\n dataWall = perfNow();\n }\n return time;\n };\n\n /** Column containing a time (`null` for the open one or outside) */\n const columnAt = (time: number): Column | null => {\n let lo = 0;\n let hi = columns.length - 1;\n const step = interval();\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const c = columns[mid]!;\n if (time < c.time) hi = mid - 1;\n else if (time >= c.time + step) lo = mid + 1;\n else return c;\n }\n return null;\n };\n\n // --------------------------------------------------------------- items\n\n const ensureOrigin = () => {\n if (Number.isFinite(origin.x)) return;\n const mid = store.mid();\n origin = {\n x: Number.isFinite(openStart) ? openStart : 0,\n y: Number.isFinite(mid) ? mid : 0,\n };\n };\n\n const intensityIndex = (size: number) => {\n const t = heatIntensity(\n size,\n options.maxSize ?? scaleMax,\n options.colorScale ?? \"log\",\n Math.max(0.01, options.contrast ?? 1),\n );\n return Math.round(t * (LUT_SIZE - 1));\n };\n\n /** Bar instances of a set of columns (empty cells skipped) */\n const cellsItem = (\n key: string,\n list: readonly { time: number; bins: Float64Array; sizes: Float32Array }[],\n ): BarItem => {\n const step = interval();\n let count = 0;\n for (const c of list) {\n for (let i = 0; i < c.sizes.length; i++) {\n if (intensityIndex(c.sizes[i]!) > 0) count++;\n }\n }\n const instances = new ArrayBuffer(Math.max(1, count) * BAR_STRIDE);\n const f = new Float32Array(instances);\n const u = new Uint32Array(instances);\n let k = 0;\n // cells overlap a little: no seams between neighbours after rasterization\n const half = (tick / 2) * 1.06;\n for (const c of list) {\n const x = c.time + step / 2 - origin.x;\n for (let i = 0; i < c.sizes.length; i++) {\n const level = intensityIndex(c.sizes[i]!);\n if (level <= 0) continue;\n const price = c.bins[i]! * tick - origin.y;\n f[k * 4] = x;\n f[k * 4 + 1] = price - half;\n f[k * 4 + 2] = price + half;\n u[k * 4 + 3] = lut[level]!;\n k++;\n }\n }\n return {\n kind: \"bar\",\n key,\n version: ++itemVersion,\n color: [1, 1, 1, 1],\n instances,\n count,\n halfWidth: (step / 2) * 1.06,\n radius: 0,\n // a positive inset turns on the renderers' overlap of small cells (no\n // seam between neighbours); 0.01 px leaves no visible gap on large ones\n inset: 0.01,\n minHalf: 0,\n sorted: true,\n };\n };\n\n const chunkItems = (): BarItem[] => {\n if (dirtyChunks.size) {\n const byChunk = new Map<number, Column[]>();\n for (const c of columns) {\n const id = Math.floor(c.seq / CHUNK);\n if (!dirtyChunks.has(id)) continue;\n let list = byChunk.get(id);\n if (!list) byChunk.set(id, (list = []));\n list.push(c);\n }\n for (const id of dirtyChunks) {\n const list = byChunk.get(id);\n if (list) chunks.set(id, cellsItem(`heat:${id}`, list));\n else chunks.delete(id);\n }\n dirtyChunks.clear();\n }\n return [...chunks.values()];\n };\n\n const visibleColumns = () => {\n const step = interval();\n const out: Column[] = [];\n // binary search of the first visible column\n let lo = 0;\n let hi = columns.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (columns[mid]!.time + step < viewX[0]) lo = mid + 1;\n else hi = mid;\n }\n for (let i = lo; i < columns.length; i++) {\n const c = columns[i]!;\n if (c.time > viewX[1]) break;\n out.push(c);\n }\n return out;\n };\n\n const bubblesItem = (visible: readonly Column[]): ScatterItem | null => {\n if (options.bubbles === false) return null;\n const step = interval();\n const all: [number, number, number, boolean][] = [];\n const push = (\n time: number,\n volume: number,\n notional: number,\n buy: boolean,\n ) => {\n if (volume > 0)\n all.push([time + step / 2, notional / volume, volume, buy]);\n };\n for (const c of visible) {\n push(c.time, c.sellVolume, c.sellNotional, false);\n push(c.time, c.buyVolume, c.buyNotional, true);\n }\n if (Number.isFinite(openStart)) {\n push(openStart, open.sellVolume, open.sellNotional, false);\n push(openStart, open.buyVolume, open.buyNotional, true);\n }\n if (!all.length) return null;\n let max = 0;\n for (const b of all) max = Math.max(max, b[2]);\n bubbleRef = bubbleRef > 0 ? Math.max(max, bubbleRef * 0.995) : max;\n const ref = options.bubbleVolume ?? bubbleRef;\n const maxD = Math.max(4, options.bubbleSize ?? 28);\n const buffer = new ArrayBuffer(all.length * SCATTER_STRIDE);\n const f = new Float32Array(buffer);\n const u = new Uint32Array(buffer);\n const up = packColor([colors.up[0], colors.up[1], colors.up[2], 0.78]);\n const down = packColor([\n colors.down[0],\n colors.down[1],\n colors.down[2],\n 0.78,\n ]);\n all.forEach(([x, price, volume, buy], i) => {\n f[i * 4] = x - origin.x;\n f[i * 4 + 1] = price - origin.y;\n f[i * 4 + 2] = clamp(Math.sqrt(volume / ref) * maxD, 3, maxD);\n u[i * 4 + 3] = buy ? up : down;\n });\n return {\n kind: \"scatter\",\n key: \"trades\",\n version: ++itemVersion,\n color: colors.up,\n instances: buffer,\n count: all.length,\n opacity: 1,\n stroke: 1.25,\n };\n };\n\n const lineItems = (visible: readonly Column[]): LineItem[] => {\n if (options.bestLines === false) return [];\n const step = interval();\n const build = (key: string, pick: (c: Column) => number, color: Rgba) => {\n const n = visible.length + (Number.isFinite(openStart) ? 1 : 0);\n const points = new Float32Array(n * 4);\n const write = (i: number, time: number, price: number) => {\n const y = Number.isFinite(price) ? price - origin.y : GAP;\n points[i * 4] = time - origin.x;\n points[i * 4 + 1] = y;\n points[i * 4 + 2] = time + step - origin.x;\n points[i * 4 + 3] = y;\n };\n visible.forEach((c, i) => write(i, c.time, pick(c)));\n if (Number.isFinite(openStart)) {\n const price = key === \"bid\" ? store.bestBid() : store.bestAsk();\n write(visible.length, openStart, price);\n }\n const item: LineItem = {\n kind: \"line\",\n key: `best:${key}`,\n version: ++itemVersion,\n color,\n points,\n count: n * 2,\n width: 1.5,\n sorted: true,\n };\n return item;\n };\n return [\n build(\"bid\", (c) => c.bestBid, colors.up),\n build(\"ask\", (c) => c.bestAsk, colors.down),\n ];\n };\n\n const headCells = (): BarItem | null => {\n if (!Number.isFinite(openStart) || !(tick > 0)) return null;\n const version = store.version();\n if (headItem && headVersion === version) return headItem;\n const { bins, sizes } = sampleBook();\n headItem = cellsItem(\"heat:head\", [{ time: openStart, bins, sizes }]);\n headVersion = version;\n return headItem;\n };\n\n // ---------------------------------------------------------------- draw\n\n function draw(now: number): boolean {\n const ctx = host.ctx;\n if (!ctx) return false;\n const { width, height, dpr, theme } = host;\n const dt = lastFrame ? now - lastFrame : 0;\n lastFrame = now;\n const l = labels();\n const fontSize = options.fontSize ?? (width < 420 ? 10 : 11);\n const step = interval();\n const live = !Number.isFinite(dataTime);\n if (live && store.count(\"bid\") + store.count(\"ask\") > 0)\n advance(Date.now());\n const time = nowTime();\n\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n ctx.font = fontOf(theme, options, 400, fontSize);\n\n // layout\n const mid = store.mid();\n const sample = fmt.price(Number.isFinite(mid) ? mid * 1.0001 : 0);\n const axisW = Math.ceil(ctx.measureText(sample).width) + 16;\n const profileW =\n options.profile === false ? 0 : Math.round(clamp(width * 0.1, 36, 84));\n const timeH = fontSize + 12;\n plot = {\n x: 0,\n y: 0,\n w: Math.max(10, width - axisW - profileW),\n h: Math.max(10, height - timeH),\n };\n\n // view\n if (!Number.isFinite(windowSpan))\n windowSpan = Math.max(step * 10, options.window ?? 60_000);\n if (!Number.isFinite(ySpan) || ySpan <= 0) {\n ensureTick();\n ySpan = options.priceSpan ?? (tick > 0 ? tick * 60 : NaN);\n }\n if (follow) {\n const right = time + step * 1.5;\n viewX = [right - windowSpan, right];\n // fit the prices traded in the window (best bid / ask), with room\n let lo = store.bestBid();\n let hi = store.bestAsk();\n if (!Number.isFinite(lo)) lo = hi;\n if (!Number.isFinite(hi)) hi = lo;\n for (const c of visibleColumns()) {\n if (c.bestBid < lo) lo = c.bestBid;\n if (c.bestAsk > hi) hi = c.bestAsk;\n }\n if (Number.isFinite(lo) && Number.isFinite(hi)) {\n const k = Number.isFinite(yCenter) ? ease(dt, 260) : 1;\n const center = (lo + hi) / 2;\n yCenter = Number.isFinite(yCenter)\n ? yCenter + (center - yCenter) * k\n : center;\n if (!userSpan && options.priceSpan === undefined && tick > 0) {\n const target = Math.max(tick * 60, (hi - lo) * 1.5);\n ySpan += (target - ySpan) * k;\n }\n } else if (Number.isFinite(mid)) {\n yCenter = Number.isFinite(yCenter)\n ? yCenter + (mid - yCenter) * ease(dt, 220)\n : mid;\n }\n if (Number.isFinite(yCenter) && Number.isFinite(ySpan))\n viewY = [yCenter - ySpan / 2, yCenter + ySpan / 2];\n }\n const [x0, x1] = viewX;\n const [y0, y1] = viewY;\n const xOf = (t: number) => plot.x + ((t - x0) / (x1 - x0)) * plot.w;\n const yOf = (p: number) =>\n plot.y + plot.h - ((p - y0) / (y1 - y0)) * plot.h;\n\n // data layer\n const visible = visibleColumns();\n if (renderer && tick > 0) {\n ensureOrigin();\n const canvas = renderer.canvas;\n canvas.style.left = `${plot.x}px`;\n canvas.style.top = `${plot.y}px`;\n canvas.style.width = `${plot.w}px`;\n canvas.style.height = `${plot.h}px`;\n const bw = Math.max(1, Math.round(plot.w * dpr));\n const bh = Math.max(1, Math.round(plot.h * dpr));\n if (canvas.width !== bw || canvas.height !== bh) renderer.resize(bw, bh);\n const items: RenderItem[] = chunkItems();\n const head = headCells();\n if (head) items.push(head);\n items.push(...lineItems(visible));\n const bubbles = bubblesItem(visible);\n if (bubbles) items.push(bubbles);\n const xScale = 2 / (x1 - x0);\n const yScale = 2 / (y1 - y0);\n renderer.render(items, {\n transform: {\n xScale,\n xOffset: (origin.x - x0) * xScale - 1,\n yScale,\n yOffset: (origin.y - y0) * yScale - 1,\n },\n width: bw,\n height: bh,\n dpr,\n });\n }\n\n // price grid and axis\n const right = plot.x + plot.w + profileW;\n const yTicks = Number.isFinite(y0)\n ? linearTicks(y0, y1, Math.max(2, Math.floor(plot.h / 44)))\n : [];\n ctx.strokeStyle = toCss(theme.text, 0.07);\n ctx.lineWidth = 1;\n ctx.beginPath();\n for (const p of yTicks) {\n const y = Math.round(yOf(p)) + 0.5;\n ctx.moveTo(plot.x, y);\n ctx.lineTo(right, y);\n }\n ctx.stroke();\n ctx.fillStyle = toCss(theme.textMuted);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n for (const p of yTicks) {\n const y = yOf(p);\n if (y < 6 || y > plot.h - 6) continue;\n ctx.fillText(fmt.price(p), right + 6, y);\n }\n\n // time axis\n const xt = timeTicks(x0, x1, Math.max(2, Math.floor(plot.w / 90)));\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"top\";\n for (const t of xt.values) {\n const x = xOf(t);\n if (x < 20 || x > plot.x + plot.w - 20) continue;\n ctx.fillText(xt.format(t), x, plot.y + plot.h + 6);\n }\n ctx.strokeStyle = toCss(theme.axis);\n ctx.beginPath();\n ctx.moveTo(0, Math.round(plot.y + plot.h) + 0.5);\n ctx.lineTo(width, Math.round(plot.y + plot.h) + 0.5);\n ctx.moveTo(Math.round(right) + 0.5, 0);\n ctx.lineTo(Math.round(right) + 0.5, plot.y + plot.h);\n ctx.stroke();\n\n // current book profile\n if (profileW && tick > 0 && Number.isFinite(y0)) {\n const px = plot.x + plot.w;\n ctx.fillStyle = toCss(theme.background, 0.85);\n ctx.fillRect(px, plot.y, profileW, plot.h);\n const rowPx = Math.max(1, (tick / (y1 - y0)) * plot.h);\n let maxSize = 0;\n const sides = ([\"bid\", \"ask\"] as const).map((side) => {\n const { price, size, count } = store.levels(side, {\n step: tick,\n limit: depth(),\n });\n for (let i = 0; i < count; i++) {\n if (price[i]! >= y0 && price[i]! <= y1)\n maxSize = Math.max(maxSize, size[i]!);\n }\n return { side, price, size, count };\n });\n for (const { side, price, size, count } of sides) {\n ctx.fillStyle = toCss(side === \"bid\" ? colors.up : colors.down, 0.6);\n for (let i = 0; i < count; i++) {\n const p = price[i]!;\n if (p < y0 || p > y1 || maxSize <= 0) continue;\n const w = (size[i]! / maxSize) * (profileW - 4);\n const y = yOf(p) - rowPx / 2;\n ctx.fillRect(\n px + 2,\n y + (rowPx > 3 ? 0.5 : 0),\n w,\n Math.max(1, rowPx - (rowPx > 3 ? 1 : 0)),\n );\n }\n }\n }\n\n // price tags: best bid / ask and the last trade\n const tag = (price: number, color: Rgba, filled: boolean) => {\n if (!Number.isFinite(price) || price < y0 || price > y1) return;\n const y = clamp(yOf(price), 8, plot.h - 8);\n const text = fmt.price(price);\n ctx.font = fontOf(theme, options, 600, fontSize);\n const w = ctx.measureText(text).width + 10;\n ctx.fillStyle = filled ? toCss(color) : toCss(theme.background);\n roundRect(ctx, right + 1, y - 8, Math.min(w, width - right - 2), 16, 3);\n ctx.fill();\n if (!filled) {\n ctx.strokeStyle = toCss(color);\n ctx.stroke();\n }\n ctx.fillStyle = filled ? \"#fff\" : toCss(color);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, right + 6, y + 0.5);\n ctx.font = fontOf(theme, options, 400, fontSize);\n };\n tag(store.bestBid(), colors.up, true);\n tag(store.bestAsk(), colors.down, true);\n // the last trade only when it does not cover the best bid / ask tags\n const clear = (price: number) =>\n !Number.isFinite(price) ||\n Math.abs(yOf(price) - yOf(lastTrade?.price ?? NaN)) >= 17;\n if (lastTrade && clear(store.bestBid()) && clear(store.bestAsk()))\n tag(\n lastTrade.price,\n lastTrade.side === \"buy\" ? colors.up : colors.down,\n false,\n );\n\n // crosshair and tooltip\n drawHover(ctx, xOf, yOf, fontSize, right, l);\n\n if (!renderer && !host.root.dataset.renderer) {\n // no backend yet: nothing else to draw\n }\n host.describe(\n `${options.ariaLabel ?? l.name}. ${l.bid} ${fmt.price(store.bestBid())}, ${l.ask} ${fmt.price(store.bestAsk())}.`,\n );\n // keep scrolling while following a live market\n const fresh = live || perfNow() - dataWall < 2000;\n return follow && fresh && Number.isFinite(openStart);\n }\n\n function drawHover(\n ctx: CanvasRenderingContext2D,\n xOf: (t: number) => number,\n yOf: (p: number) => number,\n fontSize: number,\n right: number,\n l: OrderBookHeatmapLabels,\n ) {\n const { theme } = host;\n const hide = () => {\n host.tooltip.style.display = \"none\";\n if (hoverKey) {\n hoverKey = \"\";\n emitter.emit(\"hover\", null);\n }\n };\n if (!hoverAt || options.tooltip === false || !(tick > 0) || drag) {\n hide();\n return;\n }\n const [hx, hy] = hoverAt;\n if (\n hx < plot.x ||\n hx > plot.x + plot.w ||\n hy < plot.y ||\n hy > plot.y + plot.h\n ) {\n hide();\n return;\n }\n const [x0, x1] = viewX;\n const [y0, y1] = viewY;\n const time = x0 + ((hx - plot.x) / plot.w) * (x1 - x0);\n const price = y0 + ((plot.y + plot.h - hy) / plot.h) * (y1 - y0);\n const bin = Math.round(price / tick);\n const rowPrice = +(bin * tick).toFixed(Math.min(12, decimalsOf(tick) + 2));\n const column = columnAt(time);\n const step = interval();\n let size = 0;\n let bestBid = NaN;\n let bestAsk = NaN;\n let buyVolume = 0;\n let sellVolume = 0;\n let start = NaN;\n if (column) {\n for (let i = 0; i < column.bins.length; i++) {\n if (column.bins[i] === bin) size += column.sizes[i]!;\n }\n ({ bestBid, bestAsk, buyVolume, sellVolume } = column);\n start = column.time;\n } else if (Number.isFinite(openStart) && time >= openStart) {\n const levels = ([\"bid\", \"ask\"] as const).map((side) =>\n store.levels(side, { step: tick, limit: depth() }),\n );\n for (const lv of levels) {\n for (let i = 0; i < lv.count; i++) {\n if (Math.round(lv.price[i]! / tick) === bin) size += lv.size[i]!;\n }\n }\n bestBid = store.bestBid();\n bestAsk = store.bestAsk();\n buyVolume = open.buyVolume;\n sellVolume = open.sellVolume;\n start = openStart;\n }\n const side: OrderBookSide | null =\n rowPrice <= bestBid ? \"bid\" : rowPrice >= bestAsk ? \"ask\" : null;\n\n // crosshair\n ctx.strokeStyle = toCss(theme.text, 0.45);\n ctx.setLineDash([3, 3]);\n ctx.beginPath();\n ctx.moveTo(Math.round(hx) + 0.5, plot.y);\n ctx.lineTo(Math.round(hx) + 0.5, plot.y + plot.h);\n const ry = Math.round(yOf(rowPrice)) + 0.5;\n ctx.moveTo(plot.x, ry);\n ctx.lineTo(right, ry);\n ctx.stroke();\n ctx.setLineDash([]);\n if (Number.isFinite(start)) {\n // outline of the hovered cell\n const cx0 = xOf(start);\n const cx1 = xOf(start + step);\n const cy0 = yOf(rowPrice + tick / 2);\n const cy1 = yOf(rowPrice - tick / 2);\n ctx.strokeStyle = toCss(theme.text, 0.85);\n ctx.strokeRect(cx0, cy0, Math.max(2, cx1 - cx0), Math.max(2, cy1 - cy0));\n }\n // price label on the axis\n ctx.font = fontOf(theme, options, 600, fontSize);\n const text = fmt.price(rowPrice);\n const w = Math.min(\n ctx.measureText(text).width + 10,\n host.width - right - 2,\n );\n ctx.fillStyle = toCss(theme.text);\n roundRect(ctx, right + 1, ry - 8, w, 16, 3);\n ctx.fill();\n ctx.fillStyle = toCss(theme.background);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, right + 6, ry + 0.5);\n ctx.font = fontOf(theme, options, 400, fontSize);\n\n const sideColor =\n side === \"bid\" ? colors.up : side === \"ask\" ? colors.down : theme.text;\n tooltipHtml(\n doc,\n host.tooltip,\n {\n text: Number.isFinite(start) ? formatClock(start) : formatClock(time),\n color: undefined,\n },\n [\n [l.price, fmt.price(rowPrice)],\n [l.liquidity, fmt.size(size)],\n [l.buys, fmt.size(buyVolume)],\n [l.sells, fmt.size(sellVolume)],\n ],\n );\n host.tooltip.style.display = \"block\";\n host.tooltip.style.borderLeft = `3px solid ${toCss(sideColor)}`;\n host.placeTooltip(\n host.tooltip,\n hx,\n hy,\n hx > plot.w * 0.6 ? \"left\" : \"right\",\n );\n\n const key = `${start}|${bin}|${size}|${buyVolume}|${sellVolume}`;\n if (key !== hoverKey) {\n hoverKey = key;\n const event: OrderBookHeatmapHoverEvent = {\n time: Number.isFinite(start) ? start : time,\n price: rowPrice,\n size,\n side,\n buyVolume,\n sellVolume,\n };\n emitter.emit(\"hover\", event);\n }\n }\n\n // ------------------------------------------------------------ renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer(\n options.renderer ?? \"auto\",\n () => {\n const canvas = doc.createElement(\"canvas\");\n Object.assign(canvas.style, {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n canvas.setAttribute(\"aria-hidden\", \"true\");\n return canvas;\n },\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n if (next) {\n root.dataset.renderer = next.kind;\n root.insertBefore(next.canvas, host.canvas);\n emitter.emit(\"renderer\", next.kind);\n }\n resolveReady(next?.kind ?? null);\n host.invalidate();\n };\n\n // --------------------------------------------------------- interaction\n\n const setFollow = (value: boolean) => {\n if (follow === value) return;\n follow = value;\n emitter.emit(\"follow\", value);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (options.interactive === false) return;\n const [x, y] = localPoint(root, event);\n root.setPointerCapture?.(event.pointerId);\n drag = {\n x,\n y,\n viewX: [...viewX],\n viewY: [...viewY],\n axis: x > plot.x + plot.w,\n span: viewY[1] - viewY[0],\n };\n };\n const onPointerMove = (event: PointerEvent) => {\n const [x, y] = localPoint(root, event);\n hoverAt = [x, y];\n if (drag) {\n const dx = x - drag.x;\n const dy = y - drag.y;\n if (drag.axis) {\n // dragging the price axis scales the prices around the center\n const span = drag.span * Math.exp(dy * 0.006);\n const c = (drag.viewY[0] + drag.viewY[1]) / 2;\n ySpan = span;\n userSpan = true;\n viewY = [c - span / 2, c + span / 2];\n if (follow) yCenter = c;\n } else if (Math.abs(dx) + Math.abs(dy) > 3) {\n setFollow(false);\n const tx = ((drag.viewX[1] - drag.viewX[0]) / plot.w) * dx;\n const ty = ((drag.viewY[1] - drag.viewY[0]) / plot.h) * dy;\n viewX = [drag.viewX[0] - tx, drag.viewX[1] - tx];\n viewY = [drag.viewY[0] + ty, drag.viewY[1] + ty];\n }\n }\n host.invalidate();\n };\n const onPointerUp = (event: PointerEvent) => {\n root.releasePointerCapture?.(event.pointerId);\n drag = null;\n host.invalidate();\n };\n const onPointerLeave = () => {\n if (drag) return;\n hoverAt = null;\n host.invalidate();\n };\n const zoomTime = (factor: number, anchorX: number) => {\n const [a, b] = viewX;\n const span = clamp((b - a) * factor, interval() * 10, history());\n windowSpan = span;\n if (!follow) {\n const t = a + ((anchorX - plot.x) / plot.w) * (b - a);\n const r = (t - a) / (b - a);\n viewX = [t - span * r, t + span * (1 - r)];\n }\n host.invalidate();\n };\n const zoomPrice = (factor: number) => {\n const span = clamp(\n (viewY[1] - viewY[0]) * factor,\n tick * 6 || 1e-9,\n Infinity,\n );\n const c = (viewY[0] + viewY[1]) / 2;\n ySpan = span;\n userSpan = true;\n viewY = [c - span / 2, c + span / 2];\n host.invalidate();\n };\n const onWheel = (event: WheelEvent) => {\n if (options.interactive === false || !(event.ctrlKey || event.metaKey))\n return;\n event.preventDefault();\n const [x] = localPoint(root, event);\n const factor = Math.exp(event.deltaY * 0.002);\n if (event.shiftKey || x > plot.x + plot.w) zoomPrice(factor);\n else zoomTime(factor, x);\n };\n const onDoubleClick = () => {\n if (options.interactive === false) return;\n instance.resetView();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (options.interactive === false) return;\n switch (event.key) {\n case \"+\":\n case \"=\":\n zoomTime(0.8, plot.x + plot.w);\n break;\n case \"-\":\n zoomTime(1.25, plot.x + plot.w);\n break;\n case \"ArrowUp\":\n case \"ArrowDown\": {\n if (event.shiftKey) {\n zoomPrice(event.key === \"ArrowUp\" ? 0.8 : 1.25);\n break;\n }\n setFollow(false);\n const d =\n (viewY[1] - viewY[0]) * 0.1 * (event.key === \"ArrowUp\" ? 1 : -1);\n viewY = [viewY[0] + d, viewY[1] + d];\n host.invalidate();\n break;\n }\n case \"ArrowLeft\":\n case \"ArrowRight\": {\n setFollow(false);\n const d =\n (viewX[1] - viewX[0]) * 0.1 * (event.key === \"ArrowLeft\" ? -1 : 1);\n viewX = [viewX[0] + d, viewX[1] + d];\n host.invalidate();\n break;\n }\n case \"0\":\n case \"Home\":\n instance.resetView();\n break;\n default:\n return;\n }\n event.preventDefault();\n };\n\n root.addEventListener(\"pointerdown\", onPointerDown);\n root.addEventListener(\"pointermove\", onPointerMove);\n root.addEventListener(\"pointerup\", onPointerUp);\n root.addEventListener(\"pointercancel\", onPointerUp);\n root.addEventListener(\"pointerleave\", onPointerLeave);\n root.addEventListener(\"wheel\", onWheel, { passive: false });\n root.addEventListener(\"dblclick\", onDoubleClick);\n root.addEventListener(\"keydown\", onKeyDown);\n\n // ----------------------------------------------------------------- api\n\n const applyOne = (delta: OrderBookDelta) => {\n const time = noteTime(delta.time);\n if (store.count(\"bid\") + store.count(\"ask\") > 0) {\n ensureTick();\n advance(time);\n }\n store.applyDelta(delta);\n };\n\n const instance: OrderBookHeatmapInstance = {\n setBook(snapshot) {\n const time = noteTime(snapshot.time);\n if (store.count(\"bid\") + store.count(\"ask\") > 0) advance(time);\n store.setSnapshot(snapshot);\n ensureTick();\n refreshFormat();\n if (!Number.isFinite(openStart)) advance(time);\n host.invalidate();\n },\n applyDeltas(deltas) {\n if (Array.isArray(deltas)) {\n for (const d of deltas as readonly OrderBookDelta[]) applyOne(d);\n } else applyOne(deltas as OrderBookDelta);\n if (!Number.isFinite(openStart) && tick > 0) advance(nowTime());\n host.invalidate();\n },\n addTrades(trades) {\n const list: readonly MarketTrade[] = Array.isArray(trades)\n ? (trades as readonly MarketTrade[])\n : [trades as MarketTrade];\n for (const trade of list) {\n if (!(trade.size > 0) || !Number.isFinite(trade.price)) continue;\n if (Number.isFinite(dataTime)) {\n noteTime(trade.time);\n advance(trade.time);\n }\n const target =\n !Number.isFinite(openStart) || trade.time >= openStart\n ? open\n : columnAt(trade.time);\n if (target) {\n if (trade.side === \"buy\") {\n target.buyVolume += trade.size;\n target.buyNotional += trade.size * trade.price;\n } else {\n target.sellVolume += trade.size;\n target.sellNotional += trade.size * trade.price;\n }\n }\n if (!lastTrade || trade.time >= lastTrade.time) lastTrade = trade;\n }\n host.invalidate();\n },\n clear() {\n store.clear();\n clearHistory();\n lastTrade = null;\n dataTime = NaN;\n tick = 0;\n yCenter = NaN;\n ySpan = NaN;\n userSpan = false;\n host.invalidate();\n },\n setOptions(next) {\n const previous = options;\n options = next;\n applyTexts();\n if (\n next.tickSize !== previous.tickSize ||\n (next.interval ?? 100) !== (previous.interval ?? 100)\n ) {\n clearHistory();\n tick = 0;\n ySpan = NaN;\n ensureTick();\n }\n if (next.window !== previous.window) windowSpan = NaN;\n if (next.priceSpan !== previous.priceSpan) ySpan = NaN;\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n refreshColors();\n refreshFormat();\n markAllDirty();\n },\n resetView() {\n windowSpan = NaN;\n ySpan = NaN;\n userSpan = false;\n yCenter = NaN;\n setFollow(true);\n host.invalidate();\n },\n getRenderer: () => renderer?.kind ?? null,\n ready,\n getStore: () => store,\n on: (event, handler) => emitter.on(event, handler),\n resize() {\n host.invalidate();\n },\n destroy() {\n destroyed = true;\n root.removeEventListener(\"pointerdown\", onPointerDown);\n root.removeEventListener(\"pointermove\", onPointerMove);\n root.removeEventListener(\"pointerup\", onPointerUp);\n root.removeEventListener(\"pointercancel\", onPointerUp);\n root.removeEventListener(\"pointerleave\", onPointerLeave);\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"dblclick\", onDoubleClick);\n root.removeEventListener(\"keydown\", onKeyDown);\n renderer?.destroy();\n renderer = null;\n emitter.clear();\n host.destroy();\n resolveReady(null);\n },\n };\n\n applyTexts();\n refreshColors();\n void initRenderer();\n return instance;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../dom.cjs"),t=require("../theme.cjs");var n={position:`absolute`,left:`0`,top:`0`,zIndex:`2`,display:`none`,pointerEvents:`none`,padding:`6px 10px`,borderRadius:`8px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)`,background:`var(--surface-elevated-color, var(--background-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 12px 32px -8px rgba(15, 23, 42, 0.18), 0 4px 10px -4px rgba(15, 23, 42, 0.1)`,fontSize:`12px`,lineHeight:`18px`,whiteSpace:`nowrap`,fontVariantNumeric:`tabular-nums`},r=(r,i)=>{let a=r.ownerDocument,o=a.defaultView,s=e.styleElement(a.createElement(`div`),{position:`relative`,width:`100%`,height:`100%`,minHeight:`0`,overflow:`hidden`,userSelect:`none`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`,borderRadius:`inherit`});s.className=`minerva-orderbook ${i.className}`;let c=e.styleElement(a.createElement(`canvas`),{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`});c.setAttribute(`aria-hidden`,`true`);let l;try{l=c.getContext(`2d`)}catch{l=null}s.appendChild(c),r.appendChild(s);let u=()=>{let t=e.styleElement(a.createElement(`div`),n);return t.className=`minerva-orderbook-tooltip`,t.setAttribute(`role`,`tooltip`),s.appendChild(t),t},d=u(),f=e.styleElement(a.createElement(`div`),{position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`});s.appendChild(f);let p=``,m=-1/0,h=!1,g=0,_=null,v=!1,y=!0,b=o&&typeof o.requestAnimationFrame==`function`?e=>o.requestAnimationFrame(e):null,x=()=>{if(g=0,_=null,h||(v=!1,!C.measure()))return;let e=typeof performance<`u`?performance.now():Date.now();i.draw(e)&&C.invalidate()},S=()=>{g||_!==null||h||(b?g=b(x):_=setTimeout(x,16))},C={doc:a,root:s,canvas:c,ctx:l,tooltip:d,width:0,height:0,dpr:1,theme:t.readTheme(s),invalidate(){v=!0,y&&S()},measure(){let e=s.clientWidth,t=s.clientHeight;if(e<=0||t<=0)return!1;let n=o?.devicePixelRatio||1,r=Math.max(1,Math.round(e*n)),i=Math.max(1,Math.round(t*n));return c.width!==r&&(c.width=r),c.height!==i&&(c.height=i),(C.width!==e||C.height!==t)&&(c.style.width=`${e}px`,c.style.height=`${t}px`),C.width=e,C.height=t,C.dpr=n,!0},placeTooltip(e,t,n,r=`right`){let i=e.offsetWidth,a=e.offsetHeight,o=r===`right`?t+14:t-14-i;o+i>C.width-4&&(o=t-14-i),o<4&&(o=Math.min(t+14,C.width-i-4));let s=Math.max(4,Math.min(n-a/2,C.height-a-4));e.style.transform=`translate(${Math.round(Math.max(4,o))}px, ${Math.round(s)}px)`},createTooltip:u,describe(e){if(e===p)return;let t=Date.now();t-m<1e3&&p||(m=t,p=e,f.textContent=e)},destroy(){h=!0,g&&o&&o.cancelAnimationFrame(g),_!==null&&clearTimeout(_),w?.disconnect(),T?.disconnect(),E(),s.remove()}},w=typeof ResizeObserver==`function`?new ResizeObserver(()=>C.invalidate()):null;w?.observe(s);let T=o&&typeof o.IntersectionObserver==`function`?new o.IntersectionObserver(e=>{let t=e[e.length-1];t&&(y=t.isIntersecting,y&&v&&S())}):null;T?.observe(s);let E=t.watchTheme(()=>{h||(C.theme=t.readTheme(s),i.onTheme?.(),C.invalidate())});return C},i=()=>{let e=new Map;return{on(t,n){let r=e.get(t);return r||e.set(t,r=new Set),r.add(n),()=>{r.delete(n)}},emit(t,n){let r=e.get(t);if(r)for(let e of r)e(n)},has(t){return(e.get(t)?.size??0)>0},clear(){e.clear()}}},a=(e,t)=>{let n=e.getBoundingClientRect();return[t.clientX-n.left,t.clientY-n.top]},o=(t,n,r,i)=>{let a=`${r?.text??``}|${r?.color??``}|${i.map(e=>e.join(`=`)).join(`|`)}`;if(n.dataset.key!==a){if(n.dataset.key=a,n.textContent=``,r){let i=e.styleElement(t.createElement(`div`),{fontWeight:`600`,marginBottom:`2px`,color:r.color??`inherit`});i.textContent=r.text,n.appendChild(i)}for(let[r,a]of i){let i=e.styleElement(t.createElement(`div`),{display:`flex`,justifyContent:`space-between`,gap:`16px`}),o=e.styleElement(t.createElement(`span`),{color:`var(--text-secondary-color, #6b7280)`});o.textContent=r;let s=e.styleElement(t.createElement(`span`),{fontWeight:`500`});s.textContent=a,i.append(o,s),n.appendChild(i)}}};exports.createEmitter=i,exports.createHost=r,exports.localPoint=a,exports.tooltipHtml=o;
|
|
2
|
+
//# sourceMappingURL=host.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.cjs","names":["styleElement","readTheme","watchTheme","require_dom","require_theme","TOOLTIP_STYLE","createHost","doc","container","win","root","config","canvas","ctx","createTooltip","tip","tooltip","summary","summaryText","summaryAt","destroyed","frameId","timeoutId","pending","visible","raf","cb","run","host","now","schedule","width","height","dpr","w","h","tw","th","left","prefer","x","top","y","text","resizeObserver","intersection","unwatchTheme","entry","entries","createEmitter","handlers","set","event","handler","payload","localPoint","rect","element","tooltipHtml","key","title","rows","r","head","label","value","row","l","v"],"sources":["../../../../../charts/src/engine/orderbook/host.ts"],"sourcesContent":["// DOM host of the order book widgets: a sized Canvas2D layer, a frame\n// scheduler coalescing any number of updates into one requestAnimationFrame,\n// paused while the widget is off screen, theme watching, resize observing,\n// a tooltip and a tiny event emitter.\n\nimport { styleElement } from \"../dom\";\nimport { readTheme, watchTheme, type ChartTheme } from \"../theme\";\n\nexport interface HostConfig {\n /** Class of the root element */\n className: string;\n /** Draws a frame; returns `true` to get another one (animations) */\n draw(now: number): boolean;\n /** The theme changed (colors must be resolved again) */\n onTheme?(): void;\n}\n\nexport interface Host {\n readonly doc: Document;\n readonly root: HTMLDivElement;\n readonly canvas: HTMLCanvasElement;\n readonly ctx: CanvasRenderingContext2D | null;\n readonly tooltip: HTMLDivElement;\n /** Size of the widget in CSS pixels, read at the start of every frame */\n width: number;\n height: number;\n dpr: number;\n theme: ChartTheme;\n /** Requests a frame (coalesced) */\n invalidate(): void;\n /** Sizes the canvas to the root; `false` when it has no size */\n measure(): boolean;\n /** Places the tooltip next to a point, inside the widget */\n placeTooltip(\n tip: HTMLElement,\n x: number,\n y: number,\n prefer?: \"left\" | \"right\",\n ): void;\n /** New tooltip element (one is created with the host) */\n createTooltip(): HTMLDivElement;\n /** Text read by screen readers (visually hidden, updated at most once a second) */\n describe(text: string): void;\n destroy(): void;\n}\n\n/** Tooltip look of the chart engine (dom.ts), copied for the widgets */\nconst TOOLTIP_STYLE: Partial<CSSStyleDeclaration> = {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n padding: \"6px 10px\",\n borderRadius: \"8px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.18), 0 4px 10px -4px rgba(15, 23, 42, 0.1)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n whiteSpace: \"nowrap\",\n fontVariantNumeric: \"tabular-nums\",\n};\n\nexport const createHost = (\n container: HTMLElement,\n config: HostConfig,\n): Host => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const root = styleElement(doc.createElement(\"div\"), {\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n overflow: \"hidden\",\n userSelect: \"none\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n borderRadius: \"inherit\",\n }) as HTMLDivElement;\n root.className = `minerva-orderbook ${config.className}`;\n const canvas = styleElement(doc.createElement(\"canvas\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n }) as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n let ctx: CanvasRenderingContext2D | null;\n try {\n ctx = canvas.getContext(\"2d\");\n } catch {\n ctx = null;\n }\n root.appendChild(canvas);\n container.appendChild(root);\n\n const createTooltip = () => {\n const tip = styleElement(\n doc.createElement(\"div\"),\n TOOLTIP_STYLE,\n ) as HTMLDivElement;\n tip.className = \"minerva-orderbook-tooltip\";\n tip.setAttribute(\"role\", \"tooltip\");\n root.appendChild(tip);\n return tip;\n };\n const tooltip = createTooltip();\n\n const summary = styleElement(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n });\n root.appendChild(summary);\n let summaryText = \"\";\n let summaryAt = -Infinity;\n\n let destroyed = false;\n let frameId = 0;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let pending = false;\n let visible = true;\n\n const raf =\n win && typeof win.requestAnimationFrame === \"function\"\n ? (cb: (t: number) => void) => win.requestAnimationFrame(cb)\n : null;\n\n const run = () => {\n frameId = 0;\n timeoutId = null;\n if (destroyed) return;\n pending = false;\n if (!host.measure()) return;\n const now =\n typeof performance !== \"undefined\" ? performance.now() : Date.now();\n if (config.draw(now)) host.invalidate();\n };\n\n const schedule = () => {\n if (frameId || timeoutId !== null || destroyed) return;\n if (raf) frameId = raf(run);\n else timeoutId = setTimeout(run, 16);\n };\n\n const host: Host = {\n doc,\n root,\n canvas,\n ctx,\n tooltip,\n width: 0,\n height: 0,\n dpr: 1,\n theme: readTheme(root),\n invalidate() {\n pending = true;\n if (visible) schedule();\n },\n measure() {\n const width = root.clientWidth;\n const height = root.clientHeight;\n if (width <= 0 || height <= 0) return false;\n const dpr = win?.devicePixelRatio || 1;\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n if (host.width !== width || host.height !== height) {\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n }\n host.width = width;\n host.height = height;\n host.dpr = dpr;\n return true;\n },\n placeTooltip(tip, x, y, prefer = \"right\") {\n const tw = tip.offsetWidth;\n const th = tip.offsetHeight;\n const gap = 14;\n let left = prefer === \"right\" ? x + gap : x - gap - tw;\n if (left + tw > host.width - 4) left = x - gap - tw;\n if (left < 4) left = Math.min(x + gap, host.width - tw - 4);\n const top = Math.max(4, Math.min(y - th / 2, host.height - th - 4));\n tip.style.transform = `translate(${Math.round(Math.max(4, left))}px, ${Math.round(top)}px)`;\n },\n createTooltip,\n describe(text) {\n if (text === summaryText) return;\n const now = Date.now();\n if (now - summaryAt < 1000 && summaryText) return;\n summaryAt = now;\n summaryText = text;\n summary.textContent = text;\n },\n destroy() {\n destroyed = true;\n if (frameId && win) win.cancelAnimationFrame(frameId);\n if (timeoutId !== null) clearTimeout(timeoutId);\n resizeObserver?.disconnect();\n intersection?.disconnect();\n unwatchTheme();\n root.remove();\n },\n };\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => host.invalidate())\n : null;\n resizeObserver?.observe(root);\n\n // no frames while off screen: updates only touch the data, the next\n // visible frame draws the latest state\n const intersection =\n win && typeof win.IntersectionObserver === \"function\"\n ? new win.IntersectionObserver((entries) => {\n const entry = entries[entries.length - 1];\n if (!entry) return;\n visible = entry.isIntersecting;\n if (visible && pending) schedule();\n })\n : null;\n intersection?.observe(root);\n\n const unwatchTheme = watchTheme(() => {\n if (destroyed) return;\n host.theme = readTheme(root);\n config.onTheme?.();\n host.invalidate();\n });\n\n return host;\n};\n\n/** Minimal typed event emitter */\nexport const createEmitter = <M extends object>() => {\n const handlers = new Map<keyof M, Set<(payload: never) => void>>();\n return {\n on<K extends keyof M>(event: K, handler: (payload: M[K]) => void) {\n let set = handlers.get(event);\n if (!set) handlers.set(event, (set = new Set()));\n set.add(handler as (payload: never) => void);\n return () => {\n set.delete(handler as (payload: never) => void);\n };\n },\n emit<K extends keyof M>(event: K, payload: M[K]) {\n const set = handlers.get(event);\n if (!set) return;\n for (const handler of set) (handler as (p: M[K]) => void)(payload);\n },\n has(event: keyof M) {\n return (handlers.get(event)?.size ?? 0) > 0;\n },\n clear() {\n handlers.clear();\n },\n };\n};\n\n/** Pointer position relative to an element */\nexport const localPoint = (\n element: HTMLElement,\n event: { clientX: number; clientY: number },\n): [number, number] => {\n const rect = element.getBoundingClientRect();\n return [event.clientX - rect.left, event.clientY - rect.top];\n};\n\n/** Rows of a tooltip: label / value pairs, an optional colored title */\nexport const tooltipHtml = (\n doc: Document,\n tip: HTMLElement,\n title: { text: string; color?: string } | null,\n rows: readonly (readonly [string, string])[],\n) => {\n // the content only changes when the hovered values do\n const key = `${title?.text ?? \"\"}|${title?.color ?? \"\"}|${rows.map((r) => r.join(\"=\")).join(\"|\")}`;\n if (tip.dataset.key === key) return;\n tip.dataset.key = key;\n tip.textContent = \"\";\n if (title) {\n const head = styleElement(doc.createElement(\"div\"), {\n fontWeight: \"600\",\n marginBottom: \"2px\",\n color: title.color ?? \"inherit\",\n });\n head.textContent = title.text;\n tip.appendChild(head);\n }\n for (const [label, value] of rows) {\n const row = styleElement(doc.createElement(\"div\"), {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"16px\",\n });\n const l = styleElement(doc.createElement(\"span\"), {\n color: \"var(--text-secondary-color, #6b7280)\",\n });\n l.textContent = label;\n const v = styleElement(doc.createElement(\"span\"), { fontWeight: \"500\" });\n v.textContent = value;\n row.append(l, v);\n tip.appendChild(row);\n }\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ChartTheme } from '../theme.cjs';
|
|
2
|
+
export interface HostConfig {
|
|
3
|
+
/** Class of the root element */
|
|
4
|
+
className: string;
|
|
5
|
+
/** Draws a frame; returns `true` to get another one (animations) */
|
|
6
|
+
draw(now: number): boolean;
|
|
7
|
+
/** The theme changed (colors must be resolved again) */
|
|
8
|
+
onTheme?(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface Host {
|
|
11
|
+
readonly doc: Document;
|
|
12
|
+
readonly root: HTMLDivElement;
|
|
13
|
+
readonly canvas: HTMLCanvasElement;
|
|
14
|
+
readonly ctx: CanvasRenderingContext2D | null;
|
|
15
|
+
readonly tooltip: HTMLDivElement;
|
|
16
|
+
/** Size of the widget in CSS pixels, read at the start of every frame */
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
dpr: number;
|
|
20
|
+
theme: ChartTheme;
|
|
21
|
+
/** Requests a frame (coalesced) */
|
|
22
|
+
invalidate(): void;
|
|
23
|
+
/** Sizes the canvas to the root; `false` when it has no size */
|
|
24
|
+
measure(): boolean;
|
|
25
|
+
/** Places the tooltip next to a point, inside the widget */
|
|
26
|
+
placeTooltip(tip: HTMLElement, x: number, y: number, prefer?: "left" | "right"): void;
|
|
27
|
+
/** New tooltip element (one is created with the host) */
|
|
28
|
+
createTooltip(): HTMLDivElement;
|
|
29
|
+
/** Text read by screen readers (visually hidden, updated at most once a second) */
|
|
30
|
+
describe(text: string): void;
|
|
31
|
+
destroy(): void;
|
|
32
|
+
}
|
|
33
|
+
export declare const createHost: (container: HTMLElement, config: HostConfig) => Host;
|
|
34
|
+
/** Minimal typed event emitter */
|
|
35
|
+
export declare const createEmitter: <M extends object>() => {
|
|
36
|
+
on<K extends keyof M>(event: K, handler: (payload: M[K]) => void): () => void;
|
|
37
|
+
emit<K extends keyof M>(event: K, payload: M[K]): void;
|
|
38
|
+
has(event: keyof M): boolean;
|
|
39
|
+
clear(): void;
|
|
40
|
+
};
|
|
41
|
+
/** Pointer position relative to an element */
|
|
42
|
+
export declare const localPoint: (element: HTMLElement, event: {
|
|
43
|
+
clientX: number;
|
|
44
|
+
clientY: number;
|
|
45
|
+
}) => [number, number];
|
|
46
|
+
/** Rows of a tooltip: label / value pairs, an optional colored title */
|
|
47
|
+
export declare const tooltipHtml: (doc: Document, tip: HTMLElement, title: {
|
|
48
|
+
text: string;
|
|
49
|
+
color?: string;
|
|
50
|
+
} | null, rows: readonly (readonly [string, string])[]) => void;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ChartTheme } from '../theme.js';
|
|
2
|
+
export interface HostConfig {
|
|
3
|
+
/** Class of the root element */
|
|
4
|
+
className: string;
|
|
5
|
+
/** Draws a frame; returns `true` to get another one (animations) */
|
|
6
|
+
draw(now: number): boolean;
|
|
7
|
+
/** The theme changed (colors must be resolved again) */
|
|
8
|
+
onTheme?(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface Host {
|
|
11
|
+
readonly doc: Document;
|
|
12
|
+
readonly root: HTMLDivElement;
|
|
13
|
+
readonly canvas: HTMLCanvasElement;
|
|
14
|
+
readonly ctx: CanvasRenderingContext2D | null;
|
|
15
|
+
readonly tooltip: HTMLDivElement;
|
|
16
|
+
/** Size of the widget in CSS pixels, read at the start of every frame */
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
dpr: number;
|
|
20
|
+
theme: ChartTheme;
|
|
21
|
+
/** Requests a frame (coalesced) */
|
|
22
|
+
invalidate(): void;
|
|
23
|
+
/** Sizes the canvas to the root; `false` when it has no size */
|
|
24
|
+
measure(): boolean;
|
|
25
|
+
/** Places the tooltip next to a point, inside the widget */
|
|
26
|
+
placeTooltip(tip: HTMLElement, x: number, y: number, prefer?: "left" | "right"): void;
|
|
27
|
+
/** New tooltip element (one is created with the host) */
|
|
28
|
+
createTooltip(): HTMLDivElement;
|
|
29
|
+
/** Text read by screen readers (visually hidden, updated at most once a second) */
|
|
30
|
+
describe(text: string): void;
|
|
31
|
+
destroy(): void;
|
|
32
|
+
}
|
|
33
|
+
export declare const createHost: (container: HTMLElement, config: HostConfig) => Host;
|
|
34
|
+
/** Minimal typed event emitter */
|
|
35
|
+
export declare const createEmitter: <M extends object>() => {
|
|
36
|
+
on<K extends keyof M>(event: K, handler: (payload: M[K]) => void): () => void;
|
|
37
|
+
emit<K extends keyof M>(event: K, payload: M[K]): void;
|
|
38
|
+
has(event: keyof M): boolean;
|
|
39
|
+
clear(): void;
|
|
40
|
+
};
|
|
41
|
+
/** Pointer position relative to an element */
|
|
42
|
+
export declare const localPoint: (element: HTMLElement, event: {
|
|
43
|
+
clientX: number;
|
|
44
|
+
clientY: number;
|
|
45
|
+
}) => [number, number];
|
|
46
|
+
/** Rows of a tooltip: label / value pairs, an optional colored title */
|
|
47
|
+
export declare const tooltipHtml: (doc: Document, tip: HTMLElement, title: {
|
|
48
|
+
text: string;
|
|
49
|
+
color?: string;
|
|
50
|
+
} | null, rows: readonly (readonly [string, string])[]) => void;
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { styleElement as e } from "../dom.js";
|
|
2
|
+
import { readTheme as t, watchTheme as n } from "../theme.js";
|
|
3
|
+
//#region src/engine/orderbook/host.ts
|
|
4
|
+
var r = {
|
|
5
|
+
position: "absolute",
|
|
6
|
+
left: "0",
|
|
7
|
+
top: "0",
|
|
8
|
+
zIndex: "2",
|
|
9
|
+
display: "none",
|
|
10
|
+
pointerEvents: "none",
|
|
11
|
+
padding: "6px 10px",
|
|
12
|
+
borderRadius: "8px",
|
|
13
|
+
border: "1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)",
|
|
14
|
+
background: "var(--surface-elevated-color, var(--background-color, #fff))",
|
|
15
|
+
color: "var(--text-color, #1f2937)",
|
|
16
|
+
boxShadow: "0 12px 32px -8px rgba(15, 23, 42, 0.18), 0 4px 10px -4px rgba(15, 23, 42, 0.1)",
|
|
17
|
+
fontSize: "12px",
|
|
18
|
+
lineHeight: "18px",
|
|
19
|
+
whiteSpace: "nowrap",
|
|
20
|
+
fontVariantNumeric: "tabular-nums"
|
|
21
|
+
}, i = (i, a) => {
|
|
22
|
+
let o = i.ownerDocument, s = o.defaultView, c = e(o.createElement("div"), {
|
|
23
|
+
position: "relative",
|
|
24
|
+
width: "100%",
|
|
25
|
+
height: "100%",
|
|
26
|
+
minHeight: "0",
|
|
27
|
+
overflow: "hidden",
|
|
28
|
+
userSelect: "none",
|
|
29
|
+
fontFamily: "var(--font-family-sans, system-ui, sans-serif)",
|
|
30
|
+
color: "var(--text-color, #1f2937)",
|
|
31
|
+
borderRadius: "inherit"
|
|
32
|
+
});
|
|
33
|
+
c.className = `minerva-orderbook ${a.className}`;
|
|
34
|
+
let l = e(o.createElement("canvas"), {
|
|
35
|
+
position: "absolute",
|
|
36
|
+
left: "0",
|
|
37
|
+
top: "0",
|
|
38
|
+
pointerEvents: "none"
|
|
39
|
+
});
|
|
40
|
+
l.setAttribute("aria-hidden", "true");
|
|
41
|
+
let u;
|
|
42
|
+
try {
|
|
43
|
+
u = l.getContext("2d");
|
|
44
|
+
} catch {
|
|
45
|
+
u = null;
|
|
46
|
+
}
|
|
47
|
+
c.appendChild(l), i.appendChild(c);
|
|
48
|
+
let d = () => {
|
|
49
|
+
let t = e(o.createElement("div"), r);
|
|
50
|
+
return t.className = "minerva-orderbook-tooltip", t.setAttribute("role", "tooltip"), c.appendChild(t), t;
|
|
51
|
+
}, f = d(), p = e(o.createElement("div"), {
|
|
52
|
+
position: "absolute",
|
|
53
|
+
width: "1px",
|
|
54
|
+
height: "1px",
|
|
55
|
+
overflow: "hidden",
|
|
56
|
+
clip: "rect(0 0 0 0)",
|
|
57
|
+
clipPath: "inset(50%)",
|
|
58
|
+
whiteSpace: "nowrap"
|
|
59
|
+
});
|
|
60
|
+
c.appendChild(p);
|
|
61
|
+
let m = "", h = -Infinity, g = !1, _ = 0, v = null, y = !1, b = !0, x = s && typeof s.requestAnimationFrame == "function" ? (e) => s.requestAnimationFrame(e) : null, S = () => {
|
|
62
|
+
if (_ = 0, v = null, g || (y = !1, !w.measure())) return;
|
|
63
|
+
let e = typeof performance < "u" ? performance.now() : Date.now();
|
|
64
|
+
a.draw(e) && w.invalidate();
|
|
65
|
+
}, C = () => {
|
|
66
|
+
_ || v !== null || g || (x ? _ = x(S) : v = setTimeout(S, 16));
|
|
67
|
+
}, w = {
|
|
68
|
+
doc: o,
|
|
69
|
+
root: c,
|
|
70
|
+
canvas: l,
|
|
71
|
+
ctx: u,
|
|
72
|
+
tooltip: f,
|
|
73
|
+
width: 0,
|
|
74
|
+
height: 0,
|
|
75
|
+
dpr: 1,
|
|
76
|
+
theme: t(c),
|
|
77
|
+
invalidate() {
|
|
78
|
+
y = !0, b && C();
|
|
79
|
+
},
|
|
80
|
+
measure() {
|
|
81
|
+
let e = c.clientWidth, t = c.clientHeight;
|
|
82
|
+
if (e <= 0 || t <= 0) return !1;
|
|
83
|
+
let n = s?.devicePixelRatio || 1, r = Math.max(1, Math.round(e * n)), i = Math.max(1, Math.round(t * n));
|
|
84
|
+
return l.width !== r && (l.width = r), l.height !== i && (l.height = i), (w.width !== e || w.height !== t) && (l.style.width = `${e}px`, l.style.height = `${t}px`), w.width = e, w.height = t, w.dpr = n, !0;
|
|
85
|
+
},
|
|
86
|
+
placeTooltip(e, t, n, r = "right") {
|
|
87
|
+
let i = e.offsetWidth, a = e.offsetHeight, o = r === "right" ? t + 14 : t - 14 - i;
|
|
88
|
+
o + i > w.width - 4 && (o = t - 14 - i), o < 4 && (o = Math.min(t + 14, w.width - i - 4));
|
|
89
|
+
let s = Math.max(4, Math.min(n - a / 2, w.height - a - 4));
|
|
90
|
+
e.style.transform = `translate(${Math.round(Math.max(4, o))}px, ${Math.round(s)}px)`;
|
|
91
|
+
},
|
|
92
|
+
createTooltip: d,
|
|
93
|
+
describe(e) {
|
|
94
|
+
if (e === m) return;
|
|
95
|
+
let t = Date.now();
|
|
96
|
+
t - h < 1e3 && m || (h = t, m = e, p.textContent = e);
|
|
97
|
+
},
|
|
98
|
+
destroy() {
|
|
99
|
+
g = !0, _ && s && s.cancelAnimationFrame(_), v !== null && clearTimeout(v), T?.disconnect(), E?.disconnect(), D(), c.remove();
|
|
100
|
+
}
|
|
101
|
+
}, T = typeof ResizeObserver == "function" ? new ResizeObserver(() => w.invalidate()) : null;
|
|
102
|
+
T?.observe(c);
|
|
103
|
+
let E = s && typeof s.IntersectionObserver == "function" ? new s.IntersectionObserver((e) => {
|
|
104
|
+
let t = e[e.length - 1];
|
|
105
|
+
t && (b = t.isIntersecting, b && y && C());
|
|
106
|
+
}) : null;
|
|
107
|
+
E?.observe(c);
|
|
108
|
+
let D = n(() => {
|
|
109
|
+
g || (w.theme = t(c), a.onTheme?.(), w.invalidate());
|
|
110
|
+
});
|
|
111
|
+
return w;
|
|
112
|
+
}, a = () => {
|
|
113
|
+
let e = /* @__PURE__ */ new Map();
|
|
114
|
+
return {
|
|
115
|
+
on(t, n) {
|
|
116
|
+
let r = e.get(t);
|
|
117
|
+
return r || e.set(t, r = /* @__PURE__ */ new Set()), r.add(n), () => {
|
|
118
|
+
r.delete(n);
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
emit(t, n) {
|
|
122
|
+
let r = e.get(t);
|
|
123
|
+
if (r) for (let e of r) e(n);
|
|
124
|
+
},
|
|
125
|
+
has(t) {
|
|
126
|
+
return (e.get(t)?.size ?? 0) > 0;
|
|
127
|
+
},
|
|
128
|
+
clear() {
|
|
129
|
+
e.clear();
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}, o = (e, t) => {
|
|
133
|
+
let n = e.getBoundingClientRect();
|
|
134
|
+
return [t.clientX - n.left, t.clientY - n.top];
|
|
135
|
+
}, s = (t, n, r, i) => {
|
|
136
|
+
let a = `${r?.text ?? ""}|${r?.color ?? ""}|${i.map((e) => e.join("=")).join("|")}`;
|
|
137
|
+
if (n.dataset.key !== a) {
|
|
138
|
+
if (n.dataset.key = a, n.textContent = "", r) {
|
|
139
|
+
let i = e(t.createElement("div"), {
|
|
140
|
+
fontWeight: "600",
|
|
141
|
+
marginBottom: "2px",
|
|
142
|
+
color: r.color ?? "inherit"
|
|
143
|
+
});
|
|
144
|
+
i.textContent = r.text, n.appendChild(i);
|
|
145
|
+
}
|
|
146
|
+
for (let [r, a] of i) {
|
|
147
|
+
let i = e(t.createElement("div"), {
|
|
148
|
+
display: "flex",
|
|
149
|
+
justifyContent: "space-between",
|
|
150
|
+
gap: "16px"
|
|
151
|
+
}), o = e(t.createElement("span"), { color: "var(--text-secondary-color, #6b7280)" });
|
|
152
|
+
o.textContent = r;
|
|
153
|
+
let s = e(t.createElement("span"), { fontWeight: "500" });
|
|
154
|
+
s.textContent = a, i.append(o, s), n.appendChild(i);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
//#endregion
|
|
159
|
+
export { a as createEmitter, i as createHost, o as localPoint, s as tooltipHtml };
|
|
160
|
+
|
|
161
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","names":["styleElement","assign","TOOLTIP_STYLE","createHost","doc","container","win","root","config","canvas","ctx","createTooltip","tip","tooltip","summary","summaryText","summaryAt","destroyed","frameId","timeoutId","pending","visible","raf","cb","run","host","now","schedule","readTheme","width","height","dpr","w","h","tw","th","left","prefer","x","top","y","text","resizeObserver","intersection","unwatchTheme","entry","entries","watchTheme","createEmitter","handlers","set","event","handler","payload","localPoint","rect","element","tooltipHtml","key","title","rows","r","head","label","value","row","l","v"],"sources":["../../../../../charts/src/engine/orderbook/host.ts"],"sourcesContent":["// DOM host of the order book widgets: a sized Canvas2D layer, a frame\n// scheduler coalescing any number of updates into one requestAnimationFrame,\n// paused while the widget is off screen, theme watching, resize observing,\n// a tooltip and a tiny event emitter.\n\nimport { styleElement } from \"../dom\";\nimport { readTheme, watchTheme, type ChartTheme } from \"../theme\";\n\nexport interface HostConfig {\n /** Class of the root element */\n className: string;\n /** Draws a frame; returns `true` to get another one (animations) */\n draw(now: number): boolean;\n /** The theme changed (colors must be resolved again) */\n onTheme?(): void;\n}\n\nexport interface Host {\n readonly doc: Document;\n readonly root: HTMLDivElement;\n readonly canvas: HTMLCanvasElement;\n readonly ctx: CanvasRenderingContext2D | null;\n readonly tooltip: HTMLDivElement;\n /** Size of the widget in CSS pixels, read at the start of every frame */\n width: number;\n height: number;\n dpr: number;\n theme: ChartTheme;\n /** Requests a frame (coalesced) */\n invalidate(): void;\n /** Sizes the canvas to the root; `false` when it has no size */\n measure(): boolean;\n /** Places the tooltip next to a point, inside the widget */\n placeTooltip(\n tip: HTMLElement,\n x: number,\n y: number,\n prefer?: \"left\" | \"right\",\n ): void;\n /** New tooltip element (one is created with the host) */\n createTooltip(): HTMLDivElement;\n /** Text read by screen readers (visually hidden, updated at most once a second) */\n describe(text: string): void;\n destroy(): void;\n}\n\n/** Tooltip look of the chart engine (dom.ts), copied for the widgets */\nconst TOOLTIP_STYLE: Partial<CSSStyleDeclaration> = {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n padding: \"6px 10px\",\n borderRadius: \"8px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.18), 0 4px 10px -4px rgba(15, 23, 42, 0.1)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n whiteSpace: \"nowrap\",\n fontVariantNumeric: \"tabular-nums\",\n};\n\nexport const createHost = (\n container: HTMLElement,\n config: HostConfig,\n): Host => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const root = styleElement(doc.createElement(\"div\"), {\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n overflow: \"hidden\",\n userSelect: \"none\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n borderRadius: \"inherit\",\n }) as HTMLDivElement;\n root.className = `minerva-orderbook ${config.className}`;\n const canvas = styleElement(doc.createElement(\"canvas\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n }) as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n let ctx: CanvasRenderingContext2D | null;\n try {\n ctx = canvas.getContext(\"2d\");\n } catch {\n ctx = null;\n }\n root.appendChild(canvas);\n container.appendChild(root);\n\n const createTooltip = () => {\n const tip = styleElement(\n doc.createElement(\"div\"),\n TOOLTIP_STYLE,\n ) as HTMLDivElement;\n tip.className = \"minerva-orderbook-tooltip\";\n tip.setAttribute(\"role\", \"tooltip\");\n root.appendChild(tip);\n return tip;\n };\n const tooltip = createTooltip();\n\n const summary = styleElement(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n });\n root.appendChild(summary);\n let summaryText = \"\";\n let summaryAt = -Infinity;\n\n let destroyed = false;\n let frameId = 0;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let pending = false;\n let visible = true;\n\n const raf =\n win && typeof win.requestAnimationFrame === \"function\"\n ? (cb: (t: number) => void) => win.requestAnimationFrame(cb)\n : null;\n\n const run = () => {\n frameId = 0;\n timeoutId = null;\n if (destroyed) return;\n pending = false;\n if (!host.measure()) return;\n const now =\n typeof performance !== \"undefined\" ? performance.now() : Date.now();\n if (config.draw(now)) host.invalidate();\n };\n\n const schedule = () => {\n if (frameId || timeoutId !== null || destroyed) return;\n if (raf) frameId = raf(run);\n else timeoutId = setTimeout(run, 16);\n };\n\n const host: Host = {\n doc,\n root,\n canvas,\n ctx,\n tooltip,\n width: 0,\n height: 0,\n dpr: 1,\n theme: readTheme(root),\n invalidate() {\n pending = true;\n if (visible) schedule();\n },\n measure() {\n const width = root.clientWidth;\n const height = root.clientHeight;\n if (width <= 0 || height <= 0) return false;\n const dpr = win?.devicePixelRatio || 1;\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n if (host.width !== width || host.height !== height) {\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n }\n host.width = width;\n host.height = height;\n host.dpr = dpr;\n return true;\n },\n placeTooltip(tip, x, y, prefer = \"right\") {\n const tw = tip.offsetWidth;\n const th = tip.offsetHeight;\n const gap = 14;\n let left = prefer === \"right\" ? x + gap : x - gap - tw;\n if (left + tw > host.width - 4) left = x - gap - tw;\n if (left < 4) left = Math.min(x + gap, host.width - tw - 4);\n const top = Math.max(4, Math.min(y - th / 2, host.height - th - 4));\n tip.style.transform = `translate(${Math.round(Math.max(4, left))}px, ${Math.round(top)}px)`;\n },\n createTooltip,\n describe(text) {\n if (text === summaryText) return;\n const now = Date.now();\n if (now - summaryAt < 1000 && summaryText) return;\n summaryAt = now;\n summaryText = text;\n summary.textContent = text;\n },\n destroy() {\n destroyed = true;\n if (frameId && win) win.cancelAnimationFrame(frameId);\n if (timeoutId !== null) clearTimeout(timeoutId);\n resizeObserver?.disconnect();\n intersection?.disconnect();\n unwatchTheme();\n root.remove();\n },\n };\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => host.invalidate())\n : null;\n resizeObserver?.observe(root);\n\n // no frames while off screen: updates only touch the data, the next\n // visible frame draws the latest state\n const intersection =\n win && typeof win.IntersectionObserver === \"function\"\n ? new win.IntersectionObserver((entries) => {\n const entry = entries[entries.length - 1];\n if (!entry) return;\n visible = entry.isIntersecting;\n if (visible && pending) schedule();\n })\n : null;\n intersection?.observe(root);\n\n const unwatchTheme = watchTheme(() => {\n if (destroyed) return;\n host.theme = readTheme(root);\n config.onTheme?.();\n host.invalidate();\n });\n\n return host;\n};\n\n/** Minimal typed event emitter */\nexport const createEmitter = <M extends object>() => {\n const handlers = new Map<keyof M, Set<(payload: never) => void>>();\n return {\n on<K extends keyof M>(event: K, handler: (payload: M[K]) => void) {\n let set = handlers.get(event);\n if (!set) handlers.set(event, (set = new Set()));\n set.add(handler as (payload: never) => void);\n return () => {\n set.delete(handler as (payload: never) => void);\n };\n },\n emit<K extends keyof M>(event: K, payload: M[K]) {\n const set = handlers.get(event);\n if (!set) return;\n for (const handler of set) (handler as (p: M[K]) => void)(payload);\n },\n has(event: keyof M) {\n return (handlers.get(event)?.size ?? 0) > 0;\n },\n clear() {\n handlers.clear();\n },\n };\n};\n\n/** Pointer position relative to an element */\nexport const localPoint = (\n element: HTMLElement,\n event: { clientX: number; clientY: number },\n): [number, number] => {\n const rect = element.getBoundingClientRect();\n return [event.clientX - rect.left, event.clientY - rect.top];\n};\n\n/** Rows of a tooltip: label / value pairs, an optional colored title */\nexport const tooltipHtml = (\n doc: Document,\n tip: HTMLElement,\n title: { text: string; color?: string } | null,\n rows: readonly (readonly [string, string])[],\n) => {\n // the content only changes when the hovered values do\n const key = `${title?.text ?? \"\"}|${title?.color ?? \"\"}|${rows.map((r) => r.join(\"=\")).join(\"|\")}`;\n if (tip.dataset.key === key) return;\n tip.dataset.key = key;\n tip.textContent = \"\";\n if (title) {\n const head = styleElement(doc.createElement(\"div\"), {\n fontWeight: \"600\",\n marginBottom: \"2px\",\n color: title.color ?? \"inherit\",\n });\n head.textContent = title.text;\n tip.appendChild(head);\n }\n for (const [label, value] of rows) {\n const row = styleElement(doc.createElement(\"div\"), {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"16px\",\n });\n const l = styleElement(doc.createElement(\"span\"), {\n color: \"var(--text-secondary-color, #6b7280)\",\n });\n l.textContent = label;\n const v = styleElement(doc.createElement(\"span\"), { fontWeight: \"500\" });\n v.textContent = value;\n row.append(l, v);\n tip.appendChild(row);\n }\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./book.cjs"),t=require("./depth.cjs"),n=require("./heatmap.cjs"),r=require("./ladder.cjs"),i=require("./tape.cjs");exports.createDepthChart=t.createDepthChart,exports.createOrderBook=r.createOrderBook,exports.createOrderBookHeatmap=n.createOrderBookHeatmap,exports.createOrderBookStore=e.createOrderBookStore,exports.createTimeAndSales=i.createTimeAndSales;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type * from './types.cjs';
|
|
2
|
+
export { createOrderBookStore } from './book.cjs';
|
|
3
|
+
export { createDepthChart } from './depth.cjs';
|
|
4
|
+
export { createOrderBook } from './ladder.cjs';
|
|
5
|
+
export { createOrderBookHeatmap } from './heatmap.cjs';
|
|
6
|
+
export { createTimeAndSales } from './tape.cjs';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type * from './types.js';
|
|
2
|
+
export { createOrderBookStore } from './book.js';
|
|
3
|
+
export { createDepthChart } from './depth.js';
|
|
4
|
+
export { createOrderBook } from './ladder.js';
|
|
5
|
+
export { createOrderBookHeatmap } from './heatmap.js';
|
|
6
|
+
export { createTimeAndSales } from './tape.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createOrderBookStore as e } from "./book.js";
|
|
2
|
+
import { createDepthChart as t } from "./depth.js";
|
|
3
|
+
import { createOrderBookHeatmap as n } from "./heatmap.js";
|
|
4
|
+
import { createOrderBook as r } from "./ladder.js";
|
|
5
|
+
import { createTimeAndSales as i } from "./tape.js";
|
|
6
|
+
export { t as createDepthChart, r as createOrderBook, n as createOrderBookHeatmap, e as createOrderBookStore, i as createTimeAndSales };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../color.cjs"),t=require("../locale.cjs"),n=require("./book.cjs"),r=require("./format.cjs"),i=require("./host.cjs");var a={en:{price:`Price`,size:`Size`,total:`Total`,spread:`Spread`,average:`Avg. price`,sum:`Sum`,notional:`Notional`,buyShare:`B`,sellShare:`S`,bid:`Bid`,ask:`Ask`,basisPoints:`bp`,name:`Order book`},zh:{price:`价格`,size:`数量`,total:`累计`,spread:`价差`,average:`均价`,sum:`累计数量`,notional:`累计金额`,buyShare:`买`,sellShare:`卖`,bid:`买一`,ask:`卖一`,basisPoints:`基点`,name:`订单簿`},ja:{price:`価格`,size:`数量`,total:`累計`,spread:`スプレッド`,average:`平均価格`,sum:`累計数量`,notional:`累計金額`,buyShare:`買`,sellShare:`売`,bid:`最良買気配`,ask:`最良売気配`,basisPoints:`bp`,name:`板情報`},fr:{price:`Prix`,size:`Quantité`,total:`Cumul`,spread:`Écart`,average:`Prix moyen`,sum:`Somme`,notional:`Montant`,buyShare:`A`,sellShare:`V`,bid:`Meilleur achat`,ask:`Meilleure vente`,basisPoints:`pb`,name:`Carnet d’ordres`}},o=[`price`,`size`,`total`],s=(s,c={})=>{let l=c,u=n.createOrderBookStore(),d=i.createEmitter(),f=r.createFormatters(l,2,4),p=f.price,m=t.localeLabels(a,l.locale,l.labels),h=!1,g={up:[0,0,0,1],down:[0,0,0,1]},_=null,v=NaN,y=0,b=new Map,x={bid:[NaN,NaN],ask:[NaN,NaN]},S=!1,C=[],w=null,T=null,E=``,D=null,O=20,k=i.createHost(s,{className:`minerva-order-book`,draw:F,onTheme:()=>{g=r.sideColors(k.theme,l)}}),{root:A,doc:ee}=k;A.tabIndex=0,A.setAttribute(`role`,`figure`),A.style.cursor=`default`;let te=()=>m,j=()=>{let e=l.grouping??0,t=n.inferPriceDecimals(u);f=r.createFormatters(l,e>0?Math.max(n.decimalsOf(e),0):t,n.inferSizeDecimals(u));let i=r.numberFormat(l.locale,Math.max(f.priceDecimals,l.grouping?t:0));p=l.formatPrice?f.price:e=>Number.isFinite(e)?i.format(e):`–`},M=()=>{m=t.localeLabels(a,l.locale,l.labels),A.setAttribute(`aria-label`,l.ariaLabel??m.name)},N=()=>{M(),g=r.sideColors(k.theme,l),j(),b=new Map,S=!1,k.invalidate()},P=(e,t)=>{let{price:n,size:r,count:i}=u.levels(e,{step:l.grouping??0,limit:t}),a=[],o=0,s=0;for(let t=0;t<i;t++){let i=n[t],c=r[t];o+=c,s+=c*i,a.push({side:e,index:t,price:i,size:c,sum:o,notional:s,average:s/o,y:0})}return a};function F(t){let n=k.ctx;if(!n)return!1;let{width:a,height:s,dpr:c,theme:m}=k,h=te(),A=l.mode??`both`,j=a<260,M=l.fontSize??(j?11:12),N=O=Math.max(12,l.rowHeight??(j?18:20)),F=l.header===!1?0:N+2,L=l.spreadRow===!1?0:Math.round(N*1.7),R=l.imbalance===!1?0:24,z=A===`both`?2:1,B=Math.max(0,s-F-L-R),V=Math.max(0,l.rows??Math.floor(B/N/z)),H=j?6:10;n.setTransform(c,0,0,c,0,0),n.clearRect(0,0,a,s);let U=A===`bids`?[]:P(`ask`,V),W=A===`asks`?[]:P(`bid`,V),G=F,K=G;if(A!==`bids`){for(let e of U)e.y=K+(V-1-e.index)*N;G+=V*N}let ne=A===`bids`?F:G;A===`bids`?G=F+L:G+=L;let re=G;for(let e of W)e.y=re+e.index*N;C=[...U,...W];let ie=A===`asks`?K+V*N:ne,q=(l.columns??o).filter((e,t,n)=>n.indexOf(e)===t),J=j&&q.length>2?q.slice(0,2):q,Y=J.length,ae=a-H*2,X=J.map((e,t)=>t===0?H:H+ae*(t===Y-1?1:.24+.76*t/(Y-1))),Z=l.depthBars??`cumulative`,Q=0;for(let e of C)Q=Math.max(Q,Z===`level`?e.size:e.sum);let oe=l.flash!==!1,se=Math.max(1,l.flashDuration??450),ce=new Map,le=!1,ue=e=>{let t=x[e.side];return S&&e.price>t[0]&&e.price<t[1]};for(let e of C){let n=`${e.side}:${e.price}`,r=b.get(n),i;i=r?r.size===e.size?r:{size:e.size,at:t,grew:e.size>r.size}:{size:e.size,at:ue(e)?t:-1/0,grew:!0},ce.set(n,i)}b=ce,S=!0;for(let e of[`bid`,`ask`]){let t=(e===`bid`?W:U).map(e=>e.price);x[e]=t.length?[Math.min(...t),Math.max(...t)]:[NaN,NaN]}if(D=null,w){let[e,t]=w;e>=0&&e<=a&&(D=C.find(e=>t>=e.y&&t<e.y+N)??null)}else if(T){let e=T.side===`ask`?U:W;D=e[Math.min(T.index,e.length-1)]??null}let de=l.largeOrderThreshold??1/0,fe=e.toCss(m.text),$=e.toCss(m.textMuted);F&&(n.font=r.fontOf(m,l,400,M-1),n.fillStyle=$,n.textBaseline=`middle`,J.forEach((e,t)=>{n.textAlign=t===0?`left`:`right`,n.fillText(h[e],X[t],N/2+1)}));for(let i of C){let o=i.side===`bid`?g.up:g.down,s=`${i.side}:${i.price}`,c=i.size>=de;if(D&&D.side===i.side&&i.index<=D.index&&(n.fillStyle=e.toCss(m.text,i===D?.09:.045),n.fillRect(0,i.y,a,N)),Z!==`none`&&Q>0){let t=(Z===`level`?i.size:i.sum)/Q*a;n.fillStyle=e.toCss(o,.14),n.fillRect(a-t,i.y+1,t,N-2)}c&&(n.fillStyle=e.toCss(o,.16),n.fillRect(0,i.y+1,a,N-2),n.fillStyle=e.toCss(o),n.fillRect(0,i.y+2,3,N-4));let u=b.get(s),d=0;if(oe&&u&&Number.isFinite(u.at)){let e=(t-u.at)/se;e<1&&(d=(1-e)*(1-e),le=!0)}n.textBaseline=`middle`;let p=i.y+N/2+.5;J.forEach((t,a)=>{if(n.textAlign=a===0?`left`:`right`,t===`price`)n.font=r.fontOf(m,l,500,M),n.fillStyle=e.toCss(o),n.fillText(f.price(i.price),X[a]+(c&&a===0?4:0),p);else if(t===`size`){n.font=r.fontOf(m,l,c?700:400,M);let t=f.size(i.size);if(d>0&&u){let s=n.measureText(t).width+10,c=a===0?X[a]-5:X[a]-s+5;n.fillStyle=e.toCss(u.grew?o:m.textMuted,(u.grew?.45:.3)*d),r.roundRect(n,c,i.y+2,s,N-4,3),n.fill()}n.fillStyle=fe,n.fillText(t,X[a],p)}else n.font=r.fontOf(m,l,400,M),n.fillStyle=$,n.fillText(l.total===`quote`?f.notional(i.notional):f.total(i.sum),X[a],p)})}if(D){n.strokeStyle=e.toCss(m.textMuted,.7),n.setLineDash([3,3]),n.beginPath();let t=D.side===`bid`?D.y+N-.5:D.y+.5;n.moveTo(0,t),n.lineTo(a,t),n.stroke(),n.setLineDash([])}if(L){let t=u.mid(),i=_??t;Number.isFinite(i)&&i!==v&&(Number.isFinite(v)&&(y=i>v?1:i<v?-1:y),v=i);let o=ie;n.fillStyle=e.toCss(m.text,.035),n.fillRect(0,o,a,L),n.strokeStyle=e.toCss(m.grid),n.beginPath(),n.moveTo(0,Math.round(o)+.5),n.lineTo(a,Math.round(o)+.5),n.moveTo(0,Math.round(o+L)-.5),n.lineTo(a,Math.round(o+L)-.5),n.stroke();let s=y>0?g.up:y<0?g.down:m.text,c=o+L/2+.5;n.textBaseline=`middle`,n.textAlign=`left`,n.font=r.fontOf(m,l,700,M+(j?2:4)),n.fillStyle=e.toCss(s);let d=p(i);n.fillText(d,H,c);let b=H+n.measureText(d).width+6;if(y!==0){let e=j?4:5;n.beginPath(),y>0?(n.moveTo(b,c+e*.6),n.lineTo(b+e,c-e*.7),n.lineTo(b+e*2,c+e*.6)):(n.moveTo(b,c-e*.6),n.lineTo(b+e,c+e*.7),n.lineTo(b+e*2,c-e*.6)),n.closePath(),n.fill(),b+=e*2+6}let x=u.spread();if(Number.isFinite(x)){n.textAlign=`right`,n.font=r.fontOf(m,l,400,M-1);let e=x/t*1e4,i=`${p(x)} · ${f.fixed(e,e<10?2:1)} ${h.basisPoints}`;if(n.fillStyle=fe,n.fillText(i,a-H,c),!j){let e=n.measureText(i).width;n.fillStyle=$;let t=`${h.spread}`;a-H-e-8-n.measureText(t).width>b&&n.fillText(t,a-H-e-8,c)}}}if(R){let t=0,i=0;for(let e of W)t+=e.size;for(let e of U)i+=e.size;let o=t+i,c=o>0?t/o:.5,u=s-R+6,d=R-10,p=a-H*2,_=H+p*c;n.save(),r.roundRect(n,H,u,p,d,3),n.clip(),n.fillStyle=e.toCss(g.up,.22),n.fillRect(H,u,_-H,d),n.fillStyle=e.toCss(g.down,.22),n.fillRect(_,u,H+p-_,d),n.restore(),n.fillStyle=e.toCss(m.background),n.fillRect(_-1,u,2,d),n.font=r.fontOf(m,l,600,M-1),n.textBaseline=`middle`,n.textAlign=`left`,n.fillStyle=e.toCss(g.up);let v=u+d/2+.5;n.fillText(`${h.buyShare} ${f.percent(c,1,!1)}`,H+6,v),n.textAlign=`right`,n.fillStyle=e.toCss(g.down),n.fillText(`${f.percent(1-c,1,!1)} ${h.sellShare}`,H+p-6,v)}if(D&&l.tooltip!==!1){let t=D.side===`bid`?g.up:g.down;i.tooltipHtml(ee,k.tooltip,{text:f.price(D.price),color:e.toCss(t)},[[h.average,p(D.average)],[h.sum,f.total(D.sum)],[h.notional,f.notional(D.notional)]]),k.tooltip.style.display=`block`;let n=w?w[0]:a*.4;k.placeTooltip(k.tooltip,n,D.y+N/2,n>a/2?`left`:`right`)}else k.tooltip.style.display=`none`;let pe=D?`${D.side}|${D.index}|${D.price}|${D.size}|${D.sum}`:``;pe!==E&&(E=pe,d.emit(`hover`,D?I(D):null));let me=u.bestBid(),he=u.bestAsk();return k.describe(`${l.ariaLabel??h.name}. ${h.bid} ${p(me)}, ${h.ask} ${p(he)}, ${h.spread} ${p(he-me)}.`),le}let I=e=>({side:e.side,index:e.index,price:e.price,size:e.size,sum:e.sum,notional:e.notional,average:e.average}),L=e=>{w=i.localPoint(A,e),T=null,k.invalidate()},R=()=>{w=null,k.invalidate()},z=e=>{let[t,n]=i.localPoint(A,e),r=C.find(e=>n>=e.y&&n<e.y+O);r&&t>=0&&d.emit(`levelClick`,I(r))},B=e=>{let t=[],n=C.filter(e=>e.side===`ask`),i=C.filter(e=>e.side===`bid`);for(let e=n.length-1;e>=0;e--)t.push({side:`ask`,index:e});for(let e=0;e<i.length;e++)t.push({side:`bid`,index:e});if(!t.length)return;let a=T?t.findIndex(e=>e.side===T.side&&e.index===T.index):-1;switch(e.key){case`ArrowDown`:case`ArrowUp`:{let i=e.key===`ArrowDown`;T=t[a>=0?r.clamp(a+(i?1:-1),0,t.length-1):i?Math.min(n.length,t.length-1):Math.max(0,n.length-1)]??null,w=null,k.invalidate();break}case`Enter`:case` `:D&&d.emit(`levelClick`,I(D));break;case`Escape`:T=null,k.invalidate();break;default:return}e.preventDefault()},V=()=>{T&&(T=null,k.invalidate())};A.addEventListener(`pointermove`,L),A.addEventListener(`pointerleave`,R),A.addEventListener(`click`,z),A.addEventListener(`keydown`,B),A.addEventListener(`blur`,V);let H=()=>{!h&&u.count(`bid`)+u.count(`ask`)>0&&(h=!0,j()),k.invalidate()};return N(),{setBook(e){u.setSnapshot(e),h=!1,H()},applyDeltas(e){n.applyDeltas(u,e)&&H()},clear(){u.clear(),h=!1,b=new Map,S=!1,k.invalidate()},setLastPrice(e){_=e!==null&&Number.isFinite(e)?e:null,k.invalidate()},setOptions(e){let t=(e.grouping??0)!==(l.grouping??0)||e.mode!==l.mode;l=e,t?N():(M(),g=r.sideColors(k.theme,l),j(),k.invalidate())},getStore:()=>u,on:(e,t)=>d.on(e,t),resize(){k.invalidate()},destroy(){A.removeEventListener(`pointermove`,L),A.removeEventListener(`pointerleave`,R),A.removeEventListener(`click`,z),A.removeEventListener(`keydown`,B),A.removeEventListener(`blur`,V),d.clear(),k.destroy()}}};exports.createOrderBook=s;
|
|
2
|
+
//# sourceMappingURL=ladder.cjs.map
|