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":"depth.js","names":["LABELS","createDepthChart","options","initial","store","createOrderBookStore","emitter","createEmitter","fmt","createFormatters","texts","localeLabels","inferred","colors","rangeOverride","shownRange","shownMax","shownMid","bidShown","askShown","bidTarget","askTarget","lastFrame","plot","hoverAt","hoverKey","lastHover","pointers","pinch","host","createHost","container","refreshColors","mirrorTip","root","labels","sideColors","refreshFormat","inferPriceDecimals","inferSizeDecimals","applyOptions","limits","a","b","autoRange","nb","na","bidExtent","mid","askExtent","extent","currentRange","min","max","clamp","currentMid","bid","depthAt","amount","total","n","side","i","p","price","s","sampleSide","cols","target","quote","linear","priceOf","lo","c","hi","best","cum","prevPrice","step","start","next","nextCum","t","ensureColumns","easeColumns","moving","shown","k","epsilon","draw","ctx","dt","now","animate","ease","l","fontSize","width","axes","dpr","height","fontOf","theme","range","top","bottom","probe","linearTicks","axisWidth","v","domainMax","niceDomain","yOf","xOfPrice","base","yTicks","toCss","y","count","xTicks","x","text","w","fill","drawSide","first","last","x0","x1","xl","xr","gradient","color","line","lx","roundRect","midX","spread","title","bps","sub","w1","w2","narrow","boxW","boxH","bx","right","drawHover","hide","bestBid","bestAsk","point","mirrorPrice","other","mirror","event","column","px","shownOf","colorOf","marker","value","mx","my","rows","show","tooltipHtml","doc","tip","py","room","key","setRangeInternal","emit","instance","inPlot","onPointerMove","localPoint","distance","onPointerDown","onPointerUp","onPointerLeave","onClick","onWheel","onDoubleClick","onKeyDown","zoom","dx","onBlur","changed","snapshot","applyDeltas","deltas","handler"],"sources":["../../../../../charts/src/engine/orderbook/depth.ts"],"sourcesContent":["// createDepthChart: cumulative bid / ask depth around the mid price, drawn\n// with Canvas2D. The curves are sampled once per pixel column (a sweep over\n// the levels, so the cost follows the width, not the book) and eased from\n// one snapshot to the next.\n\nimport { toCss, type Rgba } from \"../color\";\nimport { localeLabels, type LabelDictionary } from \"../locale\";\nimport { linearTicks, niceDomain } from \"../scale\";\nimport {\n applyDeltas,\n createOrderBookStore,\n inferPriceDecimals,\n inferSizeDecimals,\n} from \"./book\";\nimport {\n clamp,\n createFormatters,\n ease,\n fontOf,\n roundRect,\n sideColors,\n type Formatters,\n} from \"./format\";\nimport { createEmitter, createHost, localPoint, tooltipHtml } from \"./host\";\nimport type {\n DepthChartEventMap,\n DepthChartHoverEvent,\n DepthChartInstance,\n DepthChartLabels,\n DepthChartOptions,\n DepthPoint,\n OrderBookSide,\n} from \"./types\";\n\nconst LABELS: LabelDictionary<DepthChartLabels> = {\n en: {\n bids: \"Bids\",\n asks: \"Asks\",\n price: \"Price\",\n amount: \"Amount\",\n total: \"Total\",\n average: \"Avg. price\",\n distance: \"From mid\",\n mid: \"Mid\",\n spread: \"Spread\",\n basisPoints: \"bp\",\n name: \"Depth chart\",\n },\n zh: {\n bids: \"买盘\",\n asks: \"卖盘\",\n price: \"价格\",\n amount: \"累计数量\",\n total: \"累计金额\",\n average: \"均价\",\n distance: \"距中间价\",\n mid: \"中间价\",\n spread: \"价差\",\n basisPoints: \"基点\",\n name: \"深度图\",\n },\n ja: {\n bids: \"買い\",\n asks: \"売り\",\n price: \"価格\",\n amount: \"累計数量\",\n total: \"累計金額\",\n average: \"平均価格\",\n distance: \"仲値から\",\n mid: \"仲値\",\n spread: \"スプレッド\",\n basisPoints: \"bp\",\n name: \"デプスチャート\",\n },\n fr: {\n bids: \"Achats\",\n asks: \"Ventes\",\n price: \"Prix\",\n amount: \"Quantité\",\n total: \"Montant\",\n average: \"Prix moyen\",\n distance: \"Écart au médian\",\n mid: \"Médian\",\n spread: \"Écart\",\n basisPoints: \"pb\",\n name: \"Graphique de profondeur\",\n },\n};\n\ninterface Plot {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n/**\n * Creates a depth chart in `container`: cumulative bid and ask areas around\n * the mid price, with a mirrored hover tooltip and incremental updates\n * coalesced into one frame.\n */\nexport const createDepthChart = (\n container: HTMLElement,\n initial: DepthChartOptions = {},\n): DepthChartInstance => {\n let options = initial;\n const store = createOrderBookStore();\n const emitter = createEmitter<DepthChartEventMap>();\n let fmt: Formatters = createFormatters(options, 2, 4);\n /** Texts in the locale, resolved on every option update */\n let texts = localeLabels(LABELS, options.locale, options.labels);\n let inferred = false;\n let colors = { up: [0, 0, 0, 1] as Rgba, down: [0, 0, 0, 1] as Rgba };\n\n let rangeOverride: number | null = null;\n /** Range drawn (eased) */\n let shownRange = NaN;\n let shownMax = NaN;\n let shownMid = NaN;\n let bidShown = new Float64Array(0);\n let askShown = new Float64Array(0);\n let bidTarget = new Float64Array(0);\n let askTarget = new Float64Array(0);\n let lastFrame = 0;\n let plot: Plot = { x: 0, y: 0, w: 0, h: 0 };\n /** Hover position in CSS pixels (pointer or keyboard) */\n let hoverAt: [number, number] | null = null;\n let hoverKey = \"\";\n let lastHover: DepthChartHoverEvent | null = null;\n const pointers = new Map<number, [number, number]>();\n let pinch: { distance: number; range: number } | null = null;\n\n const host = createHost(container, {\n className: \"minerva-depth-chart\",\n draw,\n onTheme: () => refreshColors(),\n });\n const { root, doc } = host;\n const mirrorTip = host.createTooltip();\n root.tabIndex = 0;\n root.setAttribute(\"role\", \"figure\");\n root.style.touchAction = \"pan-y\";\n\n const labels = () => texts;\n\n function refreshColors() {\n colors = sideColors(host.theme, options);\n }\n\n function refreshFormat() {\n fmt = createFormatters(\n options,\n inferPriceDecimals(store),\n inferSizeDecimals(store),\n );\n }\n\n const applyOptions = () => {\n texts = localeLabels(LABELS, options.locale, options.labels);\n root.setAttribute(\"aria-label\", options.ariaLabel ?? texts.name);\n refreshColors();\n refreshFormat();\n host.invalidate();\n };\n\n const limits = (): [number, number] => {\n const [a, b] = options.rangeLimits ?? [0.0005, 0.5];\n return [Math.min(a, b), Math.max(a, b)];\n };\n\n /** Range fitting the shorter side of the book */\n const autoRange = (mid: number) => {\n const nb = store.count(\"bid\");\n const na = store.count(\"ask\");\n if (!nb && !na) return 0.01;\n const bidExtent = nb\n ? (mid - store.priceAt(\"bid\", nb - 1)) / mid\n : Infinity;\n const askExtent = na\n ? (store.priceAt(\"ask\", na - 1) - mid) / mid\n : Infinity;\n const extent = Math.min(bidExtent, askExtent);\n return Number.isFinite(extent) && extent > 0 ? extent : 0.01;\n };\n\n const currentRange = (mid: number) => {\n const [min, max] = limits();\n return clamp(rangeOverride ?? options.range ?? autoRange(mid), min, max);\n };\n\n const currentMid = () => {\n const mid = store.mid();\n if (Number.isFinite(mid)) return mid;\n const bid = store.bestBid();\n return Number.isFinite(bid) ? bid : store.bestAsk();\n };\n\n // ---------------------------------------------------------- depth values\n\n /** Cumulative depth of a side down to (bids) / up to (asks) a price */\n const depthAt = (side: OrderBookSide, price: number, mid: number) => {\n let amount = 0;\n let total = 0;\n const n = store.count(side);\n for (let i = 0; i < n; i++) {\n const p = store.priceAt(side, i);\n if (side === \"bid\" ? p < price : p > price) break;\n const s = store.sizeAt(side, i);\n amount += s;\n total += s * p;\n }\n const point: DepthPoint = {\n side,\n price,\n amount,\n total,\n average: amount > 0 ? total / amount : NaN,\n distance: (price - mid) / mid,\n };\n return point;\n };\n\n /**\n * Target cumulative values per pixel column (NaN outside the side): one\n * sweep from the best level outwards\n */\n const sampleSide = (\n side: OrderBookSide,\n target: Float64Array,\n lo: number,\n hi: number,\n ) => {\n const cols = target.length;\n target.fill(NaN);\n const n = store.count(side);\n if (!n) return;\n const quote = options.amount === \"quote\";\n const linear = options.curve === \"linear\";\n const priceOf = (c: number) => lo + ((c + 0.5) / cols) * (hi - lo);\n const best = store.priceAt(side, 0);\n let i = 0;\n let cum = 0;\n /** Price of the last level included (linear curves) */\n let prevPrice = best;\n const step = side === \"bid\" ? -1 : 1;\n const start =\n side === \"bid\"\n ? Math.min(cols - 1, Math.floor(((best - lo) / (hi - lo)) * cols))\n : Math.max(0, Math.ceil(((best - lo) / (hi - lo)) * cols - 1));\n for (let c = start; c >= 0 && c < cols; c += step) {\n const price = priceOf(c);\n const inside = side === \"bid\" ? price <= best : price >= best;\n if (!inside) continue;\n while (i < n) {\n const p = store.priceAt(side, i);\n if (side === \"bid\" ? p < price : p > price) break;\n const s = store.sizeAt(side, i);\n prevPrice = p;\n cum += quote ? s * p : s;\n i++;\n }\n if (linear && i < n) {\n // between the last included level and the next one\n const next = store.priceAt(side, i);\n const nextCum = cum + store.sizeAt(side, i) * (quote ? next : 1);\n const t = (price - prevPrice) / (next - prevPrice);\n target[c] = Number.isFinite(t) ? cum + (nextCum - cum) * t : cum;\n } else {\n target[c] = cum;\n }\n }\n };\n\n // ------------------------------------------------------------------ draw\n\n const ensureColumns = (cols: number) => {\n if (bidShown.length === cols) return;\n bidShown = new Float64Array(cols).fill(NaN);\n askShown = new Float64Array(cols).fill(NaN);\n bidTarget = new Float64Array(cols);\n askTarget = new Float64Array(cols);\n };\n\n /** Eases `shown` towards `target`; `true` while it still moves */\n const easeColumns = (\n shown: Float64Array,\n target: Float64Array,\n k: number,\n epsilon: number,\n ) => {\n let moving = false;\n for (let c = 0; c < shown.length; c++) {\n const t = target[c]!;\n const s = shown[c]!;\n if (!Number.isFinite(t) || !Number.isFinite(s) || k >= 1) {\n shown[c] = t;\n continue;\n }\n const next = s + (t - s) * k;\n if (Math.abs(t - next) > epsilon) moving = true;\n else {\n shown[c] = t;\n continue;\n }\n shown[c] = next;\n }\n return moving;\n };\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 animate = options.animate !== false;\n const k = animate && dt > 0 ? ease(dt, 70) : 1;\n const l = labels();\n const fontSize = options.fontSize ?? (width < 360 ? 11 : 12);\n const axes = options.axes !== false;\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 const mid = currentMid();\n const range = Number.isFinite(mid) ? currentRange(mid) : 0.01;\n shownRange =\n Number.isFinite(shownRange) && animate\n ? shownRange + (range - shownRange) * k\n : range;\n shownMid =\n Number.isFinite(shownMid) && Number.isFinite(mid) && animate\n ? shownMid + (mid - shownMid) * Math.min(1, k * 1.5)\n : mid;\n let moving = Math.abs(shownRange - range) > range * 1e-3;\n if (Math.abs(shownMid - mid) > Math.abs(mid) * 1e-7) moving = true;\n\n const lo = shownMid * (1 - shownRange);\n const hi = shownMid * (1 + shownRange);\n\n // y scale: largest cumulative value inside the range\n const top = options.legend === false && options.midLine === false ? 10 : 30;\n const bottom = axes ? fontSize + 12 : 4;\n const probe = linearTicks(0, Math.max(1, shownMax || 1), 4);\n const axisWidth = axes\n ? Math.ceil(\n Math.max(\n ...probe.map((v) => ctx.measureText(fmt.compact(v)).width),\n 24,\n ),\n ) + 12\n : 0;\n plot = {\n x: 0,\n y: top,\n w: Math.max(10, width - axisWidth),\n h: Math.max(10, height - top - bottom),\n };\n const cols = Math.max(1, Math.floor(plot.w));\n ensureColumns(cols);\n if (Number.isFinite(lo) && hi > lo) {\n sampleSide(\"bid\", bidTarget, lo, hi);\n sampleSide(\"ask\", askTarget, lo, hi);\n } else {\n bidTarget.fill(NaN);\n askTarget.fill(NaN);\n }\n let max = 0;\n for (let c = 0; c < cols; c++) {\n const b = bidTarget[c]!;\n const a = askTarget[c]!;\n if (b > max) max = b;\n if (a > max) max = a;\n }\n const domainMax = max > 0 ? niceDomain(0, max * 1.08, 4)[1] : 1;\n shownMax =\n Number.isFinite(shownMax) && animate\n ? shownMax + (domainMax - shownMax) * k\n : domainMax;\n if (Math.abs(shownMax - domainMax) > domainMax * 1e-3) moving = true;\n const epsilon = shownMax * 1e-4;\n if (easeColumns(bidShown, bidTarget, k, epsilon)) moving = true;\n if (easeColumns(askShown, askTarget, k, epsilon)) moving = true;\n\n const yOf = (v: number) => plot.y + plot.h - (v / shownMax) * plot.h;\n const xOfPrice = (p: number) => plot.x + ((p - lo) / (hi - lo)) * plot.w;\n const base = plot.y + plot.h;\n\n // grid and axes\n const yTicks = linearTicks(\n 0,\n shownMax,\n Math.max(2, Math.floor(plot.h / 48)),\n );\n if (options.grid !== false) {\n ctx.strokeStyle = toCss(theme.grid);\n ctx.lineWidth = 1;\n ctx.beginPath();\n for (const v of yTicks) {\n const y = Math.round(yOf(v)) + 0.5;\n ctx.moveTo(plot.x, y);\n ctx.lineTo(plot.x + plot.w, y);\n }\n ctx.stroke();\n }\n if (axes) {\n ctx.fillStyle = toCss(theme.textMuted);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n for (const v of yTicks) {\n if (v === 0) continue;\n ctx.fillText(fmt.compact(v), plot.x + plot.w + 6, yOf(v));\n }\n ctx.textBaseline = \"top\";\n ctx.textAlign = \"center\";\n const count = Math.max(2, Math.floor(plot.w / 110));\n const xTicks = Number.isFinite(lo) ? linearTicks(lo, hi, count) : [];\n for (const p of xTicks) {\n const x = xOfPrice(p);\n const text = fmt.price(p);\n const w = ctx.measureText(text).width;\n if (x - w / 2 < 2 || x + w / 2 > plot.x + plot.w - 2) continue;\n ctx.fillText(text, x, base + 6);\n }\n ctx.strokeStyle = toCss(theme.axis);\n ctx.beginPath();\n ctx.moveTo(plot.x, Math.round(base) + 0.5);\n ctx.lineTo(plot.x + plot.w, Math.round(base) + 0.5);\n ctx.stroke();\n }\n\n // areas\n const fill = options.fillOpacity ?? 0.28;\n const drawSide = (shown: Float64Array, color: Rgba) => {\n let first = -1;\n let last = -1;\n for (let c = 0; c < cols; c++) {\n if (Number.isFinite(shown[c]!)) {\n if (first < 0) first = c;\n last = c;\n }\n }\n if (first < 0) return;\n const x0 = plot.x + (first / cols) * plot.w;\n const x1 = plot.x + ((last + 1) / cols) * plot.w;\n ctx.beginPath();\n ctx.moveTo(x0, yOf(shown[first]!));\n for (let c = first; c <= last; c++) {\n const y = yOf(shown[c]!);\n const xl = plot.x + (c / cols) * plot.w;\n const xr = plot.x + ((c + 1) / cols) * plot.w;\n ctx.lineTo(xl, y);\n ctx.lineTo(xr, y);\n }\n const gradient = ctx.createLinearGradient(0, plot.y, 0, base);\n gradient.addColorStop(0, toCss(color, fill));\n gradient.addColorStop(1, toCss(color, fill * 0.15));\n ctx.save();\n ctx.lineTo(x1, base);\n ctx.lineTo(x0, base);\n ctx.closePath();\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n ctx.beginPath();\n ctx.moveTo(x0, yOf(shown[first]!));\n for (let c = first; c <= last; c++) {\n const y = yOf(shown[c]!);\n ctx.lineTo(plot.x + (c / cols) * plot.w, y);\n ctx.lineTo(plot.x + ((c + 1) / cols) * plot.w, y);\n }\n ctx.lineTo(x1, base);\n ctx.strokeStyle = toCss(color);\n ctx.lineWidth = 1.5;\n ctx.lineJoin = \"round\";\n ctx.stroke();\n };\n ctx.save();\n ctx.beginPath();\n ctx.rect(plot.x, plot.y - 2, plot.w, plot.h + 2);\n ctx.clip();\n drawSide(bidShown, colors.up);\n drawSide(askShown, colors.down);\n\n // price lines\n for (const line of options.priceLines ?? []) {\n const x = Math.round(xOfPrice(line.price)) + 0.5;\n if (x < plot.x || x > plot.x + plot.w) continue;\n const color =\n line.color && theme.resolve\n ? theme.resolve(line.color, theme.text)\n : theme.text;\n ctx.strokeStyle = toCss(color, 0.8);\n ctx.setLineDash([4, 3]);\n ctx.beginPath();\n ctx.moveTo(x, plot.y);\n ctx.lineTo(x, base);\n ctx.stroke();\n ctx.setLineDash([]);\n if (line.label) {\n ctx.font = fontOf(theme, options, 500, fontSize - 1);\n const w = ctx.measureText(line.label).width + 10;\n const lx = clamp(x - w / 2, plot.x + 2, plot.x + plot.w - w - 2);\n ctx.fillStyle = toCss(color);\n roundRect(ctx, lx, base - fontSize - 10, w, fontSize + 6, 4);\n ctx.fill();\n ctx.fillStyle = toCss(theme.background);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(line.label, lx + 5, base - fontSize / 2 - 7);\n ctx.font = fontOf(theme, options, 400, fontSize);\n }\n }\n ctx.restore();\n\n // mid line and spread label\n const midX = xOfPrice(shownMid);\n if (options.midLine !== false && Number.isFinite(midX)) {\n ctx.strokeStyle = toCss(theme.textMuted, 0.55);\n ctx.setLineDash([3, 3]);\n ctx.beginPath();\n ctx.moveTo(Math.round(midX) + 0.5, plot.y);\n ctx.lineTo(Math.round(midX) + 0.5, base);\n ctx.stroke();\n ctx.setLineDash([]);\n const spread = store.spread();\n const title = `${l.mid} ${fmt.price(mid)}`;\n const bps = (spread / mid) * 1e4;\n const sub = Number.isFinite(spread)\n ? `${l.spread} ${fmt.price(spread)} · ${fmt.fixed(bps, bps < 10 ? 2 : 1)} ${l.basisPoints}`\n : \"\";\n ctx.font = fontOf(theme, options, 600, fontSize);\n const w1 = ctx.measureText(title).width;\n ctx.font = fontOf(theme, options, 400, fontSize - 1);\n const w2 = sub ? ctx.measureText(sub).width : 0;\n const narrow = width < 420;\n const boxW = narrow ? Math.max(w1, w2) + 16 : w1 + w2 + 28;\n const boxH = narrow && sub ? fontSize * 2 + 10 : fontSize + 10;\n const bx = clamp(midX - boxW / 2, 2, width - boxW - 2);\n const by = 4;\n ctx.fillStyle = toCss(theme.background, 0.92);\n ctx.strokeStyle = toCss(theme.axis);\n roundRect(ctx, bx, by, boxW, boxH, 6);\n ctx.fill();\n ctx.stroke();\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"left\";\n ctx.fillStyle = toCss(theme.text);\n ctx.font = fontOf(theme, options, 600, fontSize);\n ctx.fillText(title, bx + 8, by + fontSize / 2 + 5);\n if (sub) {\n ctx.font = fontOf(theme, options, 400, fontSize - 1);\n ctx.fillStyle = toCss(theme.textMuted);\n if (narrow) ctx.fillText(sub, bx + 8, by + fontSize * 1.5 + 6);\n else ctx.fillText(sub, bx + 20 + w1, by + fontSize / 2 + 5);\n }\n ctx.font = fontOf(theme, options, 400, fontSize);\n }\n\n // legend\n if (options.legend !== false && width >= 300) {\n ctx.textBaseline = \"middle\";\n const y = 4 + fontSize / 2 + 5;\n ctx.font = fontOf(theme, options, 500, fontSize);\n ctx.fillStyle = toCss(colors.up);\n ctx.beginPath();\n ctx.arc(8, y, 3.5, 0, Math.PI * 2);\n ctx.fill();\n ctx.textAlign = \"left\";\n ctx.fillStyle = toCss(theme.textMuted);\n ctx.fillText(l.bids, 16, y);\n const right = plot.x + plot.w;\n ctx.textAlign = \"right\";\n ctx.fillText(l.asks, right - 16, y);\n ctx.fillStyle = toCss(colors.down);\n ctx.beginPath();\n ctx.arc(right - 8, y, 3.5, 0, Math.PI * 2);\n ctx.fill();\n ctx.font = fontOf(theme, options, 400, fontSize);\n }\n\n drawHover(ctx, mid, lo, hi, cols, yOf, fontSize);\n\n host.describe(\n Number.isFinite(mid)\n ? `${options.ariaLabel ?? l.name}. ${l.bids} ${fmt.price(store.bestBid())}, ${l.asks} ${fmt.price(store.bestAsk())}, ${l.spread} ${fmt.price(store.spread())}.`\n : (options.ariaLabel ?? l.name),\n );\n return moving;\n }\n\n function drawHover(\n ctx: CanvasRenderingContext2D,\n mid: number,\n lo: number,\n hi: number,\n cols: number,\n yOf: (v: number) => number,\n fontSize: number,\n ) {\n const { theme } = host;\n const hide = () => {\n host.tooltip.style.display = \"none\";\n mirrorTip.style.display = \"none\";\n if (lastHover) {\n lastHover = null;\n hoverKey = \"\";\n emitter.emit(\"hover\", null);\n }\n };\n if (!hoverAt || options.tooltip === false || !Number.isFinite(mid)) {\n hide();\n return;\n }\n const x = clamp(hoverAt[0], plot.x, plot.x + plot.w - 1);\n const price = lo + ((x - plot.x) / plot.w) * (hi - lo);\n const bestBid = store.bestBid();\n const bestAsk = store.bestAsk();\n let side: OrderBookSide = price < shownMid ? \"bid\" : \"ask\";\n if (side === \"bid\" && !Number.isFinite(bestBid)) side = \"ask\";\n if (side === \"ask\" && !Number.isFinite(bestAsk)) side = \"bid\";\n const point = depthAt(side, price, mid);\n const mirrorPrice = 2 * shownMid - price;\n const other: OrderBookSide = side === \"bid\" ? \"ask\" : \"bid\";\n const mirror =\n options.mirror !== false && store.count(other)\n ? depthAt(other, mirrorPrice, mid)\n : null;\n const event: DepthChartHoverEvent = { ...point, mirror };\n const l = labels();\n\n const column = (px: number) =>\n clamp(Math.floor(((px - plot.x) / plot.w) * cols), 0, cols - 1);\n const shownOf = (s: OrderBookSide, px: number) =>\n (s === \"bid\" ? bidShown : askShown)[column(px)]!;\n const colorOf = (s: OrderBookSide) =>\n s === \"bid\" ? colors.up : colors.down;\n\n const marker = (s: OrderBookSide, px: number) => {\n const value = shownOf(s, px);\n if (!Number.isFinite(value)) return NaN;\n const y = yOf(value);\n ctx.strokeStyle = toCss(theme.textMuted, 0.6);\n ctx.setLineDash([3, 3]);\n ctx.beginPath();\n ctx.moveTo(Math.round(px) + 0.5, plot.y);\n ctx.lineTo(Math.round(px) + 0.5, plot.y + plot.h);\n ctx.moveTo(plot.x, Math.round(y) + 0.5);\n ctx.lineTo(plot.x + plot.w, Math.round(y) + 0.5);\n ctx.stroke();\n ctx.setLineDash([]);\n const color = colorOf(s);\n ctx.fillStyle = toCss(color, 0.2);\n ctx.beginPath();\n ctx.arc(px, y, 8, 0, Math.PI * 2);\n ctx.fill();\n ctx.fillStyle = toCss(color);\n ctx.strokeStyle = toCss(theme.background);\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.arc(px, y, 4, 0, Math.PI * 2);\n ctx.fill();\n ctx.stroke();\n ctx.lineWidth = 1;\n // amount tag on the axis\n if (options.axes !== false) {\n const text = fmt.compact(value);\n ctx.font = fontOf(theme, options, 500, fontSize - 1);\n const w = ctx.measureText(text).width + 8;\n ctx.fillStyle = toCss(color);\n roundRect(ctx, plot.x + plot.w + 2, y - 9, w, 18, 3);\n ctx.fill();\n ctx.fillStyle = \"#fff\";\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, plot.x + plot.w + 6, y);\n ctx.font = fontOf(theme, options, 400, fontSize);\n }\n return y;\n };\n\n const y = marker(side, x);\n const mx = plot.x + ((mirrorPrice - lo) / (hi - lo)) * plot.w;\n const my =\n mirror && mx >= plot.x && mx <= plot.x + plot.w ? marker(other, mx) : NaN;\n\n const rows = (p: DepthPoint): [string, string][] => [\n [l.price, fmt.price(p.price)],\n [l.amount, fmt.total(p.amount)],\n [l.total, fmt.notional(p.total)],\n [l.average, fmt.price(p.average)],\n [\n l.distance,\n fmt.percent(p.distance, Math.abs(p.distance) < 0.01 ? 3 : 2),\n ],\n ];\n const show = (\n tip: HTMLDivElement,\n p: DepthPoint,\n px: number,\n py: number,\n ) => {\n tooltipHtml(\n doc,\n tip,\n {\n text: p.side === \"bid\" ? l.bids : l.asks,\n color: toCss(colorOf(p.side)),\n },\n rows(p),\n );\n tip.style.display = \"block\";\n host.placeTooltip(\n tip,\n px,\n Number.isFinite(py) ? py : plot.y + plot.h / 2,\n p.side === \"bid\" ? \"left\" : \"right\",\n );\n };\n show(host.tooltip, point, x, y);\n // the mirror needs room for both tooltips side by side (phones: one)\n const room = plot.w >= 2 * (host.tooltip.offsetWidth + 24);\n if (mirror && Number.isFinite(my) && room) show(mirrorTip, mirror, mx, my);\n else mirrorTip.style.display = \"none\";\n\n const key = `${point.price}|${point.amount}|${mirror?.amount ?? \"\"}`;\n lastHover = event;\n if (key !== hoverKey) {\n hoverKey = key;\n emitter.emit(\"hover\", event);\n }\n }\n\n // ---------------------------------------------------------- interaction\n\n const setRangeInternal = (range: number | null, emit: boolean) => {\n if (range === null) rangeOverride = null;\n else {\n const [min, max] = limits();\n rangeOverride = clamp(range, min, max);\n }\n host.invalidate();\n if (emit) emitter.emit(\"range\", instance.getRange());\n };\n\n const inPlot = (x: number, y: number) =>\n x >= plot.x &&\n x <= plot.x + plot.w &&\n y >= plot.y - 30 &&\n y <= plot.y + plot.h;\n\n const onPointerMove = (event: PointerEvent) => {\n const point = localPoint(root, event);\n pointers.set(event.pointerId, point);\n if (pinch && pointers.size === 2) {\n const [a, b] = [...pointers.values()] as [\n [number, number],\n [number, number],\n ];\n const distance = Math.hypot(a[0] - b[0], a[1] - b[1]);\n if (distance > 0 && options.zoomable !== false)\n setRangeInternal((pinch.range * pinch.distance) / distance, true);\n return;\n }\n hoverAt = inPlot(point[0], point[1]) ? point : null;\n host.invalidate();\n };\n const onPointerDown = (event: PointerEvent) => {\n const point = localPoint(root, event);\n pointers.set(event.pointerId, point);\n if (pointers.size === 2) {\n const [a, b] = [...pointers.values()] as [\n [number, number],\n [number, number],\n ];\n pinch = {\n distance: Math.hypot(a[0] - b[0], a[1] - b[1]),\n range: instance.getRange(),\n };\n hoverAt = null;\n } else {\n hoverAt = inPlot(point[0], point[1]) ? point : null;\n }\n host.invalidate();\n };\n const onPointerUp = (event: PointerEvent) => {\n pointers.delete(event.pointerId);\n if (pointers.size < 2) pinch = null;\n };\n const onPointerLeave = (event: PointerEvent) => {\n pointers.delete(event.pointerId);\n if (event.pointerType === \"mouse\") {\n hoverAt = null;\n host.invalidate();\n }\n };\n const onClick = () => {\n if (lastHover) emitter.emit(\"click\", lastHover);\n };\n const onWheel = (event: WheelEvent) => {\n if (options.zoomable === false || !(event.ctrlKey || event.metaKey)) return;\n event.preventDefault();\n setRangeInternal(\n instance.getRange() * Math.exp(event.deltaY * 0.0025),\n true,\n );\n };\n const onDoubleClick = () => {\n if (options.zoomable === false) return;\n setRangeInternal(null, true);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const zoom = options.zoomable !== false;\n switch (event.key) {\n case \"+\":\n case \"=\":\n if (zoom) setRangeInternal(instance.getRange() / 1.25, true);\n break;\n case \"-\":\n if (zoom) setRangeInternal(instance.getRange() * 1.25, true);\n break;\n case \"0\":\n if (zoom) setRangeInternal(null, true);\n break;\n case \"ArrowLeft\":\n case \"ArrowRight\": {\n const dx =\n (event.key === \"ArrowLeft\" ? -1 : 1) * Math.max(2, plot.w / 50);\n const x = hoverAt ? hoverAt[0] + dx : plot.x + plot.w / 2 + dx;\n hoverAt = [clamp(x, plot.x, plot.x + plot.w - 1), plot.y + plot.h / 2];\n host.invalidate();\n break;\n }\n case \"Escape\":\n hoverAt = null;\n host.invalidate();\n break;\n case \"Enter\":\n onClick();\n break;\n default:\n return;\n }\n event.preventDefault();\n };\n const onBlur = () => {\n if (hoverAt && !pointers.size) {\n hoverAt = null;\n host.invalidate();\n }\n };\n\n root.addEventListener(\"pointermove\", onPointerMove);\n root.addEventListener(\"pointerdown\", onPointerDown);\n root.addEventListener(\"pointerup\", onPointerUp);\n root.addEventListener(\"pointercancel\", onPointerUp);\n root.addEventListener(\"pointerleave\", onPointerLeave);\n root.addEventListener(\"click\", onClick);\n root.addEventListener(\"wheel\", onWheel, { passive: false });\n root.addEventListener(\"dblclick\", onDoubleClick);\n root.addEventListener(\"keydown\", onKeyDown);\n root.addEventListener(\"blur\", onBlur);\n\n const changed = () => {\n if (!inferred && store.count(\"bid\") + store.count(\"ask\") > 0) {\n inferred = true;\n refreshFormat();\n }\n host.invalidate();\n };\n\n const instance: DepthChartInstance = {\n setBook(snapshot) {\n store.setSnapshot(snapshot);\n inferred = false;\n changed();\n },\n applyDeltas(deltas) {\n if (applyDeltas(store, deltas)) changed();\n },\n clear() {\n store.clear();\n inferred = false;\n host.invalidate();\n },\n setOptions(next) {\n // a new range option replaces the zoom of the user\n if (next.range !== options.range) rangeOverride = null;\n options = next;\n applyOptions();\n },\n setRange(range) {\n setRangeInternal(range, false);\n },\n getRange() {\n const mid = currentMid();\n return Number.isFinite(mid)\n ? currentRange(mid)\n : (rangeOverride ?? options.range ?? 0.01);\n },\n getStore: () => store,\n on: (event, handler) => emitter.on(event, handler),\n resize() {\n host.invalidate();\n },\n destroy() {\n root.removeEventListener(\"pointermove\", onPointerMove);\n root.removeEventListener(\"pointerdown\", onPointerDown);\n root.removeEventListener(\"pointerup\", onPointerUp);\n root.removeEventListener(\"pointercancel\", onPointerUp);\n root.removeEventListener(\"pointerleave\", onPointerLeave);\n root.removeEventListener(\"click\", onClick);\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"dblclick\", onDoubleClick);\n root.removeEventListener(\"keydown\", onKeyDown);\n root.removeEventListener(\"blur\", onBlur);\n emitter.clear();\n host.destroy();\n },\n };\n applyOptions();\n return instance;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../locale.cjs");var t=(t,n)=>{let r=Math.max(0,Math.min(12,Math.round(n)));return e.numberFormat(e.resolveLocale(t),{minimumFractionDigits:r,maximumFractionDigits:r})},n=(t,n,r=2)=>{if(!Number.isFinite(t))return`–`;let i=e.resolveLocale(n),a=Math.abs(t);for(let[n,o]of e.compactUnits(i))if(a>=n)return e.numberFormat(i,{maximumFractionDigits:r}).format(t/n)+o;return e.numberFormat(i,{maximumFractionDigits:a>=100?0:a>=1?2:4}).format(t)},r=(t,n,r=2,i=!0)=>{if(!Number.isFinite(t))return`–`;let a=Math.max(0,Math.min(6,Math.round(r)));return e.numberFormat(e.resolveLocale(n),{style:`percent`,minimumFractionDigits:a,maximumFractionDigits:a,signDisplay:i?`exceptZero`:`auto`}).format(t)},i=(i,a,o)=>{let s=e.resolveLocale(i.locale),c=i.pricePrecision??a,l=i.sizePrecision??o,u=t(s,c),d=t(s,l),f=e=>t=>Number.isFinite(t)?e(t):`–`,p=f(i.formatSize??(e=>d.format(e))),m=e=>n(e,s,2);return{price:f(i.formatPrice??(e=>u.format(e))),size:p,total:f(e=>Math.abs(e)>=1e6?m(e):p(e)),notional:f(e=>Math.abs(e)>=1e4?m(e):t(s,2).format(e)),compact:f(m),fixed:(e,n)=>Number.isFinite(e)?t(s,n).format(e):`–`,percent:(e,t=2,n=!0)=>r(e,s,t,n),locale:s,priceDecimals:c,sizeDecimals:l}},a=(e,t=2)=>String(e).padStart(t,`0`),o=(e,t=!0)=>{let n=new Date(e);if(Number.isNaN(n.getTime()))return`–`;let r=`${a(n.getHours())}:${a(n.getMinutes())}:${a(n.getSeconds())}`;return t?`${r}.${a(n.getMilliseconds(),3)}`:r},s=`var(--success-color, #16a34a)`,c=`var(--danger-color, #dc2626)`,l=[.09,.64,.29,1],u=[.86,.15,.15,1],d=(e,t)=>{let n=(t,n)=>e.resolve?e.resolve(t,n):n,r=t.colorConvention===`red-up`;return{up:n(t.upColor??(r?`var(--danger-color, #dc2626)`:`var(--success-color, #16a34a)`),r?u:l),down:n(t.downColor??(r?`var(--success-color, #16a34a)`:`var(--danger-color, #dc2626)`),r?l:u)}},f=(e,t,n=400,r)=>`${n} ${r??t.fontSize??12}px ${t.fontFamily??e.fontFamily}`,p=(e,t)=>t<=0?1:1-Math.exp(-Math.max(0,e)/t),m=(e,t,n)=>e<t?t:e>n?n:e,h=(e,t,n,r,i,a)=>{let o=Math.max(0,Math.min(a,r/2,i/2));e.beginPath(),e.moveTo(t+o,n),e.arcTo(t+r,n,t+r,n+i,o),e.arcTo(t+r,n+i,t,n+i,o),e.arcTo(t,n+i,t,n,o),e.arcTo(t,n,t+r,n,o),e.closePath()};exports.DEFAULT_DOWN=c,exports.DEFAULT_UP=s,exports.clamp=m,exports.createFormatters=i,exports.ease=p,exports.fontOf=f,exports.formatClock=o,exports.formatCompactNumber=n,exports.formatPercent=r,exports.numberFormat=t,exports.roundRect=h,exports.sideColors=d;
|
|
2
|
+
//# sourceMappingURL=format.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.cjs","names":["intlNumberFormat","resolveLocale","compactUnits","require_locale","numberFormat","d","decimals","locale","formatCompactNumber","value","resolved","abs","unit","suffix","maxDecimals","formatPercent","fraction","signed","createFormatters","options","priceDecimals","inferredPrice","sizeDecimals","inferredSize","priceFormat","sizeFormat","finite","fn","size","v","compact","pad","length","formatClock","time","base","milliseconds","DEFAULT_UP","DEFAULT_DOWN","UP_FALLBACK","DOWN_FALLBACK","sideColors","resolve","theme","fallback","redUp","fontOf","weight","ease","tau","dt","clamp","min","max","roundRect","radius","r","w","h","ctx","x","y"],"sources":["../../../../../charts/src/engine/orderbook/format.ts"],"sourcesContent":["// Number, time and color helpers shared by the order book widgets.\n\nimport type { ChartTheme } from \"../theme\";\nimport type { Rgba } from \"../color\";\nimport {\n compactUnits,\n numberFormat as intlNumberFormat,\n resolveLocale,\n} from \"../locale\";\nimport type { OrderBookCommonOptions } from \"./types\";\n\n/** Cached `Intl.NumberFormat` with fixed decimals (page language when `locale` is omitted) */\nexport const numberFormat = (\n locale: string | undefined,\n decimals: number,\n): Intl.NumberFormat => {\n const d = Math.max(0, Math.min(12, Math.round(decimals)));\n return intlNumberFormat(resolveLocale(locale), {\n minimumFractionDigits: d,\n maximumFractionDigits: d,\n });\n};\n\n/**\n * Compact number in the units of the language (12.4k, 1.25 M, 3.2万, 1.5億),\n * with the locale's decimal separator\n */\nexport const formatCompactNumber = (\n value: number,\n locale?: string,\n maxDecimals = 2,\n): string => {\n if (!Number.isFinite(value)) return \"–\";\n const resolved = resolveLocale(locale);\n const abs = Math.abs(value);\n for (const [unit, suffix] of compactUnits(resolved)) {\n if (abs >= unit)\n return (\n intlNumberFormat(resolved, {\n maximumFractionDigits: maxDecimals,\n }).format(value / unit) + suffix\n );\n }\n return intlNumberFormat(resolved, {\n maximumFractionDigits: abs >= 100 ? 0 : abs >= 1 ? 2 : 4,\n }).format(value);\n};\n\n/** Signed percentage of a fraction (`+0.125%`), in the locale */\nexport const formatPercent = (\n fraction: number,\n locale?: string,\n decimals = 2,\n signed = true,\n): string => {\n if (!Number.isFinite(fraction)) return \"–\";\n const d = Math.max(0, Math.min(6, Math.round(decimals)));\n return intlNumberFormat(resolveLocale(locale), {\n style: \"percent\",\n minimumFractionDigits: d,\n maximumFractionDigits: d,\n signDisplay: signed ? \"exceptZero\" : \"auto\",\n }).format(fraction);\n};\n\nexport interface Formatters {\n price: (value: number) => string;\n size: (value: number) => string;\n /** Large totals: compact (12.4k, 124万) above a million */\n total: (value: number) => string;\n /** Notional values: compact above ten thousand */\n notional: (value: number) => string;\n /** Axis values: always compact when large */\n compact: (value: number) => string;\n /** Fixed decimals in the locale (basis points, shares) */\n fixed: (value: number, decimals: number) => string;\n /** Percentage of a fraction (signed by default) */\n percent: (fraction: number, decimals?: number, signed?: boolean) => string;\n /** Resolved locale (`locale` option or page language) */\n locale: string;\n priceDecimals: number;\n sizeDecimals: number;\n}\n\n/** Formatters of the options, with inferred decimals as fallbacks */\nexport const createFormatters = (\n options: OrderBookCommonOptions,\n inferredPrice: number,\n inferredSize: number,\n): Formatters => {\n const locale = resolveLocale(options.locale);\n const priceDecimals = options.pricePrecision ?? inferredPrice;\n const sizeDecimals = options.sizePrecision ?? inferredSize;\n const priceFormat = numberFormat(locale, priceDecimals);\n const sizeFormat = numberFormat(locale, sizeDecimals);\n const finite =\n (fn: (value: number) => string) =>\n (value: number): string =>\n Number.isFinite(value) ? fn(value) : \"–\";\n const size = finite(options.formatSize ?? ((v) => sizeFormat.format(v)));\n const compact = (v: number) => formatCompactNumber(v, locale, 2);\n return {\n price: finite(options.formatPrice ?? ((v) => priceFormat.format(v))),\n size,\n total: finite((v) => (Math.abs(v) >= 1e6 ? compact(v) : size(v))),\n notional: finite((v) =>\n Math.abs(v) >= 1e4 ? compact(v) : numberFormat(locale, 2).format(v),\n ),\n compact: finite(compact),\n fixed: (v, decimals) =>\n Number.isFinite(v) ? numberFormat(locale, decimals).format(v) : \"–\",\n percent: (fraction, decimals = 2, signed = true) =>\n formatPercent(fraction, locale, decimals, signed),\n locale,\n priceDecimals,\n sizeDecimals,\n };\n};\n\nconst pad = (value: number, length = 2) => String(value).padStart(length, \"0\");\n\n/** `HH:MM:SS` or `HH:MM:SS.mmm`, local time */\nexport const formatClock = (time: number, milliseconds = true): string => {\n const d = new Date(time);\n if (Number.isNaN(d.getTime())) return \"–\";\n const base = `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n return milliseconds ? `${base}.${pad(d.getMilliseconds(), 3)}` : base;\n};\n\nexport const DEFAULT_UP = \"var(--success-color, #16a34a)\";\nexport const DEFAULT_DOWN = \"var(--danger-color, #dc2626)\";\nconst UP_FALLBACK: Rgba = [0.09, 0.64, 0.29, 1];\nconst DOWN_FALLBACK: Rgba = [0.86, 0.15, 0.15, 1];\n\n/** Colors of the bids / buys (`up`) and asks / sells (`down`) */\nexport const sideColors = (\n theme: ChartTheme,\n options: OrderBookCommonOptions,\n): { up: Rgba; down: Rgba } => {\n const resolve = (value: string, fallback: Rgba) =>\n theme.resolve ? theme.resolve(value, fallback) : fallback;\n const redUp = options.colorConvention === \"red-up\";\n return {\n up: resolve(\n options.upColor ?? (redUp ? DEFAULT_DOWN : DEFAULT_UP),\n redUp ? DOWN_FALLBACK : UP_FALLBACK,\n ),\n down: resolve(\n options.downColor ?? (redUp ? DEFAULT_UP : DEFAULT_DOWN),\n redUp ? UP_FALLBACK : DOWN_FALLBACK,\n ),\n };\n};\n\n/** Canvas font of the options */\nexport const fontOf = (\n theme: ChartTheme,\n options: OrderBookCommonOptions,\n weight: number | string = 400,\n size?: number,\n): string =>\n `${weight} ${size ?? options.fontSize ?? 12}px ${options.fontFamily ?? theme.fontFamily}`;\n\n/** Exponential smoothing factor for a frame of `dt` ms */\nexport const ease = (dt: number, tau: number): number =>\n tau <= 0 ? 1 : 1 - Math.exp(-Math.max(0, dt) / tau);\n\nexport const clamp = (value: number, min: number, max: number): number =>\n value < min ? min : value > max ? max : value;\n\n/** Rounded rectangle path (`roundRect` is missing in older browsers) */\nexport const roundRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n) => {\n const radius = Math.max(0, Math.min(r, w / 2, h / 2));\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.arcTo(x + w, y, x + w, y + h, radius);\n ctx.arcTo(x + w, y + h, x, y + h, radius);\n ctx.arcTo(x, y + h, x, y, radius);\n ctx.arcTo(x, y, x + w, y, radius);\n ctx.closePath();\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ChartTheme } from '../theme.cjs';
|
|
2
|
+
import { Rgba } from '../color.cjs';
|
|
3
|
+
import { OrderBookCommonOptions } from './types.cjs';
|
|
4
|
+
/** Cached `Intl.NumberFormat` with fixed decimals (page language when `locale` is omitted) */
|
|
5
|
+
export declare const numberFormat: (locale: string | undefined, decimals: number) => Intl.NumberFormat;
|
|
6
|
+
/**
|
|
7
|
+
* Compact number in the units of the language (12.4k, 1.25 M, 3.2万, 1.5億),
|
|
8
|
+
* with the locale's decimal separator
|
|
9
|
+
*/
|
|
10
|
+
export declare const formatCompactNumber: (value: number, locale?: string, maxDecimals?: number) => string;
|
|
11
|
+
/** Signed percentage of a fraction (`+0.125%`), in the locale */
|
|
12
|
+
export declare const formatPercent: (fraction: number, locale?: string, decimals?: number, signed?: boolean) => string;
|
|
13
|
+
export interface Formatters {
|
|
14
|
+
price: (value: number) => string;
|
|
15
|
+
size: (value: number) => string;
|
|
16
|
+
/** Large totals: compact (12.4k, 124万) above a million */
|
|
17
|
+
total: (value: number) => string;
|
|
18
|
+
/** Notional values: compact above ten thousand */
|
|
19
|
+
notional: (value: number) => string;
|
|
20
|
+
/** Axis values: always compact when large */
|
|
21
|
+
compact: (value: number) => string;
|
|
22
|
+
/** Fixed decimals in the locale (basis points, shares) */
|
|
23
|
+
fixed: (value: number, decimals: number) => string;
|
|
24
|
+
/** Percentage of a fraction (signed by default) */
|
|
25
|
+
percent: (fraction: number, decimals?: number, signed?: boolean) => string;
|
|
26
|
+
/** Resolved locale (`locale` option or page language) */
|
|
27
|
+
locale: string;
|
|
28
|
+
priceDecimals: number;
|
|
29
|
+
sizeDecimals: number;
|
|
30
|
+
}
|
|
31
|
+
/** Formatters of the options, with inferred decimals as fallbacks */
|
|
32
|
+
export declare const createFormatters: (options: OrderBookCommonOptions, inferredPrice: number, inferredSize: number) => Formatters;
|
|
33
|
+
/** `HH:MM:SS` or `HH:MM:SS.mmm`, local time */
|
|
34
|
+
export declare const formatClock: (time: number, milliseconds?: boolean) => string;
|
|
35
|
+
export declare const DEFAULT_UP = "var(--success-color, #16a34a)";
|
|
36
|
+
export declare const DEFAULT_DOWN = "var(--danger-color, #dc2626)";
|
|
37
|
+
/** Colors of the bids / buys (`up`) and asks / sells (`down`) */
|
|
38
|
+
export declare const sideColors: (theme: ChartTheme, options: OrderBookCommonOptions) => {
|
|
39
|
+
up: Rgba;
|
|
40
|
+
down: Rgba;
|
|
41
|
+
};
|
|
42
|
+
/** Canvas font of the options */
|
|
43
|
+
export declare const fontOf: (theme: ChartTheme, options: OrderBookCommonOptions, weight?: number | string, size?: number) => string;
|
|
44
|
+
/** Exponential smoothing factor for a frame of `dt` ms */
|
|
45
|
+
export declare const ease: (dt: number, tau: number) => number;
|
|
46
|
+
export declare const clamp: (value: number, min: number, max: number) => number;
|
|
47
|
+
/** Rounded rectangle path (`roundRect` is missing in older browsers) */
|
|
48
|
+
export declare const roundRect: (ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, r: number) => void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ChartTheme } from '../theme.js';
|
|
2
|
+
import { Rgba } from '../color.js';
|
|
3
|
+
import { OrderBookCommonOptions } from './types.js';
|
|
4
|
+
/** Cached `Intl.NumberFormat` with fixed decimals (page language when `locale` is omitted) */
|
|
5
|
+
export declare const numberFormat: (locale: string | undefined, decimals: number) => Intl.NumberFormat;
|
|
6
|
+
/**
|
|
7
|
+
* Compact number in the units of the language (12.4k, 1.25 M, 3.2万, 1.5億),
|
|
8
|
+
* with the locale's decimal separator
|
|
9
|
+
*/
|
|
10
|
+
export declare const formatCompactNumber: (value: number, locale?: string, maxDecimals?: number) => string;
|
|
11
|
+
/** Signed percentage of a fraction (`+0.125%`), in the locale */
|
|
12
|
+
export declare const formatPercent: (fraction: number, locale?: string, decimals?: number, signed?: boolean) => string;
|
|
13
|
+
export interface Formatters {
|
|
14
|
+
price: (value: number) => string;
|
|
15
|
+
size: (value: number) => string;
|
|
16
|
+
/** Large totals: compact (12.4k, 124万) above a million */
|
|
17
|
+
total: (value: number) => string;
|
|
18
|
+
/** Notional values: compact above ten thousand */
|
|
19
|
+
notional: (value: number) => string;
|
|
20
|
+
/** Axis values: always compact when large */
|
|
21
|
+
compact: (value: number) => string;
|
|
22
|
+
/** Fixed decimals in the locale (basis points, shares) */
|
|
23
|
+
fixed: (value: number, decimals: number) => string;
|
|
24
|
+
/** Percentage of a fraction (signed by default) */
|
|
25
|
+
percent: (fraction: number, decimals?: number, signed?: boolean) => string;
|
|
26
|
+
/** Resolved locale (`locale` option or page language) */
|
|
27
|
+
locale: string;
|
|
28
|
+
priceDecimals: number;
|
|
29
|
+
sizeDecimals: number;
|
|
30
|
+
}
|
|
31
|
+
/** Formatters of the options, with inferred decimals as fallbacks */
|
|
32
|
+
export declare const createFormatters: (options: OrderBookCommonOptions, inferredPrice: number, inferredSize: number) => Formatters;
|
|
33
|
+
/** `HH:MM:SS` or `HH:MM:SS.mmm`, local time */
|
|
34
|
+
export declare const formatClock: (time: number, milliseconds?: boolean) => string;
|
|
35
|
+
export declare const DEFAULT_UP = "var(--success-color, #16a34a)";
|
|
36
|
+
export declare const DEFAULT_DOWN = "var(--danger-color, #dc2626)";
|
|
37
|
+
/** Colors of the bids / buys (`up`) and asks / sells (`down`) */
|
|
38
|
+
export declare const sideColors: (theme: ChartTheme, options: OrderBookCommonOptions) => {
|
|
39
|
+
up: Rgba;
|
|
40
|
+
down: Rgba;
|
|
41
|
+
};
|
|
42
|
+
/** Canvas font of the options */
|
|
43
|
+
export declare const fontOf: (theme: ChartTheme, options: OrderBookCommonOptions, weight?: number | string, size?: number) => string;
|
|
44
|
+
/** Exponential smoothing factor for a frame of `dt` ms */
|
|
45
|
+
export declare const ease: (dt: number, tau: number) => number;
|
|
46
|
+
export declare const clamp: (value: number, min: number, max: number) => number;
|
|
47
|
+
/** Rounded rectangle path (`roundRect` is missing in older browsers) */
|
|
48
|
+
export declare const roundRect: (ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, r: number) => void;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { compactUnits as e, numberFormat as t, resolveLocale as n } from "../locale.js";
|
|
2
|
+
//#region src/engine/orderbook/format.ts
|
|
3
|
+
var r = (e, r) => {
|
|
4
|
+
let i = Math.max(0, Math.min(12, Math.round(r)));
|
|
5
|
+
return t(n(e), {
|
|
6
|
+
minimumFractionDigits: i,
|
|
7
|
+
maximumFractionDigits: i
|
|
8
|
+
});
|
|
9
|
+
}, i = (r, i, a = 2) => {
|
|
10
|
+
if (!Number.isFinite(r)) return "–";
|
|
11
|
+
let o = n(i), s = Math.abs(r);
|
|
12
|
+
for (let [n, i] of e(o)) if (s >= n) return t(o, { maximumFractionDigits: a }).format(r / n) + i;
|
|
13
|
+
return t(o, { maximumFractionDigits: s >= 100 ? 0 : s >= 1 ? 2 : 4 }).format(r);
|
|
14
|
+
}, a = (e, r, i = 2, a = !0) => {
|
|
15
|
+
if (!Number.isFinite(e)) return "–";
|
|
16
|
+
let o = Math.max(0, Math.min(6, Math.round(i)));
|
|
17
|
+
return t(n(r), {
|
|
18
|
+
style: "percent",
|
|
19
|
+
minimumFractionDigits: o,
|
|
20
|
+
maximumFractionDigits: o,
|
|
21
|
+
signDisplay: a ? "exceptZero" : "auto"
|
|
22
|
+
}).format(e);
|
|
23
|
+
}, o = (e, t, o) => {
|
|
24
|
+
let s = n(e.locale), c = e.pricePrecision ?? t, l = e.sizePrecision ?? o, u = r(s, c), d = r(s, l), f = (e) => (t) => Number.isFinite(t) ? e(t) : "–", p = f(e.formatSize ?? ((e) => d.format(e))), m = (e) => i(e, s, 2);
|
|
25
|
+
return {
|
|
26
|
+
price: f(e.formatPrice ?? ((e) => u.format(e))),
|
|
27
|
+
size: p,
|
|
28
|
+
total: f((e) => Math.abs(e) >= 1e6 ? m(e) : p(e)),
|
|
29
|
+
notional: f((e) => Math.abs(e) >= 1e4 ? m(e) : r(s, 2).format(e)),
|
|
30
|
+
compact: f(m),
|
|
31
|
+
fixed: (e, t) => Number.isFinite(e) ? r(s, t).format(e) : "–",
|
|
32
|
+
percent: (e, t = 2, n = !0) => a(e, s, t, n),
|
|
33
|
+
locale: s,
|
|
34
|
+
priceDecimals: c,
|
|
35
|
+
sizeDecimals: l
|
|
36
|
+
};
|
|
37
|
+
}, s = (e, t = 2) => String(e).padStart(t, "0"), c = (e, t = !0) => {
|
|
38
|
+
let n = new Date(e);
|
|
39
|
+
if (Number.isNaN(n.getTime())) return "–";
|
|
40
|
+
let r = `${s(n.getHours())}:${s(n.getMinutes())}:${s(n.getSeconds())}`;
|
|
41
|
+
return t ? `${r}.${s(n.getMilliseconds(), 3)}` : r;
|
|
42
|
+
}, l = "var(--success-color, #16a34a)", u = "var(--danger-color, #dc2626)", d = [
|
|
43
|
+
.09,
|
|
44
|
+
.64,
|
|
45
|
+
.29,
|
|
46
|
+
1
|
|
47
|
+
], f = [
|
|
48
|
+
.86,
|
|
49
|
+
.15,
|
|
50
|
+
.15,
|
|
51
|
+
1
|
|
52
|
+
], p = (e, t) => {
|
|
53
|
+
let n = (t, n) => e.resolve ? e.resolve(t, n) : n, r = t.colorConvention === "red-up";
|
|
54
|
+
return {
|
|
55
|
+
up: n(t.upColor ?? (r ? "var(--danger-color, #dc2626)" : "var(--success-color, #16a34a)"), r ? f : d),
|
|
56
|
+
down: n(t.downColor ?? (r ? "var(--success-color, #16a34a)" : "var(--danger-color, #dc2626)"), r ? d : f)
|
|
57
|
+
};
|
|
58
|
+
}, m = (e, t, n = 400, r) => `${n} ${r ?? t.fontSize ?? 12}px ${t.fontFamily ?? e.fontFamily}`, h = (e, t) => t <= 0 ? 1 : 1 - Math.exp(-Math.max(0, e) / t), g = (e, t, n) => e < t ? t : e > n ? n : e, _ = (e, t, n, r, i, a) => {
|
|
59
|
+
let o = Math.max(0, Math.min(a, r / 2, i / 2));
|
|
60
|
+
e.beginPath(), e.moveTo(t + o, n), e.arcTo(t + r, n, t + r, n + i, o), e.arcTo(t + r, n + i, t, n + i, o), e.arcTo(t, n + i, t, n, o), e.arcTo(t, n, t + r, n, o), e.closePath();
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
export { u as DEFAULT_DOWN, l as DEFAULT_UP, g as clamp, o as createFormatters, h as ease, m as fontOf, c as formatClock, i as formatCompactNumber, a as formatPercent, r as numberFormat, _ as roundRect, p as sideColors };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","names":["intlNumberFormat","numberFormat$1","numberFormat","d","decimals","resolveLocale","locale","formatCompactNumber","value","resolved","abs","unit","suffix","compactUnits","maxDecimals","formatPercent","fraction","signed","createFormatters","options","priceDecimals","inferredPrice","sizeDecimals","inferredSize","priceFormat","sizeFormat","finite","fn","size","v","compact","pad","length","formatClock","time","base","milliseconds","DEFAULT_UP","DEFAULT_DOWN","UP_FALLBACK","DOWN_FALLBACK","sideColors","resolve","theme","fallback","redUp","fontOf","weight","ease","tau","dt","clamp","min","max","roundRect","radius","r","w","h","ctx","x","y"],"sources":["../../../../../charts/src/engine/orderbook/format.ts"],"sourcesContent":["// Number, time and color helpers shared by the order book widgets.\n\nimport type { ChartTheme } from \"../theme\";\nimport type { Rgba } from \"../color\";\nimport {\n compactUnits,\n numberFormat as intlNumberFormat,\n resolveLocale,\n} from \"../locale\";\nimport type { OrderBookCommonOptions } from \"./types\";\n\n/** Cached `Intl.NumberFormat` with fixed decimals (page language when `locale` is omitted) */\nexport const numberFormat = (\n locale: string | undefined,\n decimals: number,\n): Intl.NumberFormat => {\n const d = Math.max(0, Math.min(12, Math.round(decimals)));\n return intlNumberFormat(resolveLocale(locale), {\n minimumFractionDigits: d,\n maximumFractionDigits: d,\n });\n};\n\n/**\n * Compact number in the units of the language (12.4k, 1.25 M, 3.2万, 1.5億),\n * with the locale's decimal separator\n */\nexport const formatCompactNumber = (\n value: number,\n locale?: string,\n maxDecimals = 2,\n): string => {\n if (!Number.isFinite(value)) return \"–\";\n const resolved = resolveLocale(locale);\n const abs = Math.abs(value);\n for (const [unit, suffix] of compactUnits(resolved)) {\n if (abs >= unit)\n return (\n intlNumberFormat(resolved, {\n maximumFractionDigits: maxDecimals,\n }).format(value / unit) + suffix\n );\n }\n return intlNumberFormat(resolved, {\n maximumFractionDigits: abs >= 100 ? 0 : abs >= 1 ? 2 : 4,\n }).format(value);\n};\n\n/** Signed percentage of a fraction (`+0.125%`), in the locale */\nexport const formatPercent = (\n fraction: number,\n locale?: string,\n decimals = 2,\n signed = true,\n): string => {\n if (!Number.isFinite(fraction)) return \"–\";\n const d = Math.max(0, Math.min(6, Math.round(decimals)));\n return intlNumberFormat(resolveLocale(locale), {\n style: \"percent\",\n minimumFractionDigits: d,\n maximumFractionDigits: d,\n signDisplay: signed ? \"exceptZero\" : \"auto\",\n }).format(fraction);\n};\n\nexport interface Formatters {\n price: (value: number) => string;\n size: (value: number) => string;\n /** Large totals: compact (12.4k, 124万) above a million */\n total: (value: number) => string;\n /** Notional values: compact above ten thousand */\n notional: (value: number) => string;\n /** Axis values: always compact when large */\n compact: (value: number) => string;\n /** Fixed decimals in the locale (basis points, shares) */\n fixed: (value: number, decimals: number) => string;\n /** Percentage of a fraction (signed by default) */\n percent: (fraction: number, decimals?: number, signed?: boolean) => string;\n /** Resolved locale (`locale` option or page language) */\n locale: string;\n priceDecimals: number;\n sizeDecimals: number;\n}\n\n/** Formatters of the options, with inferred decimals as fallbacks */\nexport const createFormatters = (\n options: OrderBookCommonOptions,\n inferredPrice: number,\n inferredSize: number,\n): Formatters => {\n const locale = resolveLocale(options.locale);\n const priceDecimals = options.pricePrecision ?? inferredPrice;\n const sizeDecimals = options.sizePrecision ?? inferredSize;\n const priceFormat = numberFormat(locale, priceDecimals);\n const sizeFormat = numberFormat(locale, sizeDecimals);\n const finite =\n (fn: (value: number) => string) =>\n (value: number): string =>\n Number.isFinite(value) ? fn(value) : \"–\";\n const size = finite(options.formatSize ?? ((v) => sizeFormat.format(v)));\n const compact = (v: number) => formatCompactNumber(v, locale, 2);\n return {\n price: finite(options.formatPrice ?? ((v) => priceFormat.format(v))),\n size,\n total: finite((v) => (Math.abs(v) >= 1e6 ? compact(v) : size(v))),\n notional: finite((v) =>\n Math.abs(v) >= 1e4 ? compact(v) : numberFormat(locale, 2).format(v),\n ),\n compact: finite(compact),\n fixed: (v, decimals) =>\n Number.isFinite(v) ? numberFormat(locale, decimals).format(v) : \"–\",\n percent: (fraction, decimals = 2, signed = true) =>\n formatPercent(fraction, locale, decimals, signed),\n locale,\n priceDecimals,\n sizeDecimals,\n };\n};\n\nconst pad = (value: number, length = 2) => String(value).padStart(length, \"0\");\n\n/** `HH:MM:SS` or `HH:MM:SS.mmm`, local time */\nexport const formatClock = (time: number, milliseconds = true): string => {\n const d = new Date(time);\n if (Number.isNaN(d.getTime())) return \"–\";\n const base = `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n return milliseconds ? `${base}.${pad(d.getMilliseconds(), 3)}` : base;\n};\n\nexport const DEFAULT_UP = \"var(--success-color, #16a34a)\";\nexport const DEFAULT_DOWN = \"var(--danger-color, #dc2626)\";\nconst UP_FALLBACK: Rgba = [0.09, 0.64, 0.29, 1];\nconst DOWN_FALLBACK: Rgba = [0.86, 0.15, 0.15, 1];\n\n/** Colors of the bids / buys (`up`) and asks / sells (`down`) */\nexport const sideColors = (\n theme: ChartTheme,\n options: OrderBookCommonOptions,\n): { up: Rgba; down: Rgba } => {\n const resolve = (value: string, fallback: Rgba) =>\n theme.resolve ? theme.resolve(value, fallback) : fallback;\n const redUp = options.colorConvention === \"red-up\";\n return {\n up: resolve(\n options.upColor ?? (redUp ? DEFAULT_DOWN : DEFAULT_UP),\n redUp ? DOWN_FALLBACK : UP_FALLBACK,\n ),\n down: resolve(\n options.downColor ?? (redUp ? DEFAULT_UP : DEFAULT_DOWN),\n redUp ? UP_FALLBACK : DOWN_FALLBACK,\n ),\n };\n};\n\n/** Canvas font of the options */\nexport const fontOf = (\n theme: ChartTheme,\n options: OrderBookCommonOptions,\n weight: number | string = 400,\n size?: number,\n): string =>\n `${weight} ${size ?? options.fontSize ?? 12}px ${options.fontFamily ?? theme.fontFamily}`;\n\n/** Exponential smoothing factor for a frame of `dt` ms */\nexport const ease = (dt: number, tau: number): number =>\n tau <= 0 ? 1 : 1 - Math.exp(-Math.max(0, dt) / tau);\n\nexport const clamp = (value: number, min: number, max: number): number =>\n value < min ? min : value > max ? max : value;\n\n/** Rounded rectangle path (`roundRect` is missing in older browsers) */\nexport const roundRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n) => {\n const radius = Math.max(0, Math.min(r, w / 2, h / 2));\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.arcTo(x + w, y, x + w, y + h, radius);\n ctx.arcTo(x + w, y + h, x, y + h, radius);\n ctx.arcTo(x, y + h, x, y, radius);\n ctx.arcTo(x, y, x + w, y, radius);\n ctx.closePath();\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../color.cjs"),t=require("../renderers/types.cjs"),n=require("../locale.cjs"),r=require("../scale.cjs"),i=require("../renderers/detect.cjs"),a=require("../time.cjs"),o=require("./book.cjs"),s=require("./format.cjs"),c=require("./host.cjs");var l=32,u=128,d=[`#0b2a4f`,`#12508f`,`#1c7fd0`,`#25b3d6`,`#4fd6a0`,`#e9e35a`,`#ffa23d`,`#ff5533`],f=[`#dbeafe`,`#93c5fd`,`#3b82f6`,`#4338ca`,`#9333ea`,`#db2777`,`#f97316`],p={en:{time:`Time`,price:`Price`,liquidity:`Liquidity`,buys:`Buys`,sells:`Sells`,bid:`Bid`,ask:`Ask`,name:`Liquidity heatmap`},zh:{time:`时间`,price:`价格`,liquidity:`挂单量`,buys:`主动买入`,sells:`主动卖出`,bid:`买一`,ask:`卖一`,name:`订单簿热力图`},ja:{time:`時刻`,price:`価格`,liquidity:`指値量`,buys:`買い約定`,sells:`売り約定`,bid:`最良買気配`,ask:`最良売気配`,name:`板ヒートマップ`},fr:{time:`Heure`,price:`Prix`,liquidity:`Liquidité`,buys:`Achats`,sells:`Ventes`,bid:`Meilleur achat`,ask:`Meilleure vente`,name:`Carte de chaleur de la liquidité`}},m=(e,t,n,r)=>{if(!(e>0)||!(t>0))return 0;let i=Math.min(1,e*r/t);switch(n){case`linear`:return i;case`sqrt`:return Math.sqrt(i);default:return Math.log10(1+9*i)}},ee=(ee,h={})=>{let g=h,_=o.createOrderBookStore(),v=c.createEmitter(),y=s.createFormatters(g,2,4),b={up:[0,0,0,1],down:[0,0,0,1]},te=new Uint32Array(u),x=0,S=[],ne=0,C=NaN,w={buyVolume:0,buyNotional:0,sellVolume:0,sellNotional:0},T=null,E=NaN,D=0,O=0,k=0,A=new Map,j=new Set,M=0,N=null,P=-1,F={x:NaN,y:NaN},I=null,L=0,R=!1,z=()=>{},re=new Promise(e=>{z=e}),B=!0,V=NaN,H=[0,1],U=[0,1],W=NaN,G=NaN,K=!1,ie=0,q={x:0,y:0,w:0,h:0},J=null,ae=``,Y=null,X=c.createHost(ee,{className:`minerva-orderbook-heatmap`,draw:je,onTheme:()=>{me(),ge()}}),{root:Z,doc:oe}=X;Z.tabIndex=0,Z.setAttribute(`role`,`figure`),Z.style.touchAction=`none`;let se=n.localeLabels(p,g.locale,g.labels),ce=()=>se,le=()=>{se=n.localeLabels(p,g.locale,g.labels),Z.setAttribute(`aria-label`,g.ariaLabel??se.name)},Q=()=>Math.max(10,g.interval??100),ue=()=>Math.max(Q()*4,g.history??3e5),de=()=>Math.max(4,Math.round(g.depth??160)),fe=()=>{if(!Number.isFinite(E))return Date.now();let e=pe()-D;return E+Math.min(Math.max(0,e),Q()*3)},pe=()=>typeof performance<`u`?performance.now():Date.now();function me(){let t=X.theme;b=s.sideColors(t,g);let n=e=>t.resolve?t.resolve(e,t.primary):t.primary,r=e.luminance(t.background)<.4,i=[t.background,...(g.colors?.length?g.colors:r?d:f).map(n)];te=new Uint32Array(u);for(let t=0;t<u;t++){let n=e.rampColor(i,t/127);te[t]=e.packColor([n[0],n[1],n[2],1])}}let he=()=>{y=s.createFormatters(g,x>0?Math.max(o.decimalsOf(x),o.inferPriceDecimals(_)):o.inferPriceDecimals(_),o.inferSizeDecimals(_))},ge=()=>{for(let e of A.keys())j.add(e);P=-1,X.invalidate()},_e=()=>{S=[],A.clear(),j.clear(),N=null,P=-1,C=NaN,F={x:NaN,y:NaN},O=0,k=0,w.buyVolume=w.buyNotional=w.sellVolume=w.sellNotional=0},ve=()=>{if(x>0)return;let e=o.inferTickSize(_),t=_.mid();if(g.tickSize&&g.tickSize>0)x=g.tickSize;else if(e>0&&Number.isFinite(t)){let n=t*1e-5/e,r=1;for(let e=1;e<=1e9&&r<n*.75;e*=10)for(let t of[1,2,5])if(r=t*e,r>=n*.75)break;x=o.roundToStep(e*r,e)}else x=Number.isFinite(t)?Math.max(1e-8,t*1e-5):0;x>0&&he()},ye=()=>{let e=de(),t=new Float64Array(e*2),n=new Float32Array(e*2),r=0,i=[0,0,0,0];for(let i of[`bid`,`ask`]){let a=_.count(i),o=0;for(let s=0;s<a;s++){let a=Math.round(_.priceAt(i,s)/x),c=_.sizeAt(i,s);if(r>0&&t[r-1]===a&&o>0){n[r-1]+=c;continue}if(o>=e)break;t[r]=a,n[r]=c,r++,o++}}for(let e=0;e<r;e++){let t=n[e];t>i[3]&&(i[3]=t,i.sort((e,t)=>t-e))}return{bins:t.subarray(0,r),sizes:n.subarray(0,r),reference:i[3]||i[0]}},be=e=>{if(!(x>0))return;let{bins:t,sizes:n,reference:r}=ye(),i={seq:ne++,time:e,bins:t,sizes:n,bestBid:_.bestBid(),bestAsk:_.bestAsk(),buyVolume:w.buyVolume,buyNotional:w.buyNotional,sellVolume:w.sellVolume,sellNotional:w.sellNotional,reference:r};if(w.buyVolume=w.buyNotional=w.sellVolume=w.sellNotional=0,S.push(i),j.add(Math.floor(i.seq/l)),g.maxSize===void 0){let e=S.slice(-100),t=0;for(let n of e)t+=n.reference;let n=t/e.length*1.6;if(!(O>0)||Math.abs(n/O-1)>.3){O=n;for(let e of A.keys())j.add(e);P=-1}}let a=e-ue(),o=0;for(;o<S.length&&S[o].time<a;)o++;if(o){S=S.slice(o);let e=S[0]?Math.floor(S[0].seq/l):1/0;for(let t of[...A.keys()])t<e&&A.delete(t)}},$=e=>{if(!Number.isFinite(e))return;let t=Q();if(!Number.isFinite(C)){C=Math.floor(e/t)*t;return}if(e-C>ue()){be(C),C=Math.floor(e/t)*t;return}for(;e>=C+t;)be(C),C+=t},xe=e=>e===void 0||!Number.isFinite(e)?Date.now():((!Number.isFinite(E)||e>=E)&&(E=e,D=pe()),e),Se=e=>{let t=0,n=S.length-1,r=Q();for(;t<=n;){let i=t+n>>>1,a=S[i];if(e<a.time)n=i-1;else if(e>=a.time+r)t=i+1;else return a}return null},Ce=()=>{if(Number.isFinite(F.x))return;let e=_.mid();F={x:Number.isFinite(C)?C:0,y:Number.isFinite(e)?e:0}},we=e=>{let t=m(e,g.maxSize??O,g.colorScale??`log`,Math.max(.01,g.contrast??1));return Math.round(t*127)},Te=(e,t)=>{let n=Q(),r=0;for(let e of t)for(let t=0;t<e.sizes.length;t++)we(e.sizes[t])>0&&r++;let i=new ArrayBuffer(Math.max(1,r)*16),a=new Float32Array(i),o=new Uint32Array(i),s=0,c=x/2*1.06;for(let e of t){let t=e.time+n/2-F.x;for(let n=0;n<e.sizes.length;n++){let r=we(e.sizes[n]);if(r<=0)continue;let i=e.bins[n]*x-F.y;a[s*4]=t,a[s*4+1]=i-c,a[s*4+2]=i+c,o[s*4+3]=te[r],s++}}return{kind:`bar`,key:e,version:++M,color:[1,1,1,1],instances:i,count:r,halfWidth:n/2*1.06,radius:0,inset:.01,minHalf:0,sorted:!0}},Ee=()=>{if(j.size){let e=new Map;for(let t of S){let n=Math.floor(t.seq/l);if(!j.has(n))continue;let r=e.get(n);r||e.set(n,r=[]),r.push(t)}for(let t of j){let n=e.get(t);n?A.set(t,Te(`heat:${t}`,n)):A.delete(t)}j.clear()}return[...A.values()]},De=()=>{let e=Q(),t=[],n=0,r=S.length;for(;n<r;){let t=n+r>>>1;S[t].time+e<H[0]?n=t+1:r=t}for(let e=n;e<S.length;e++){let n=S[e];if(n.time>H[1])break;t.push(n)}return t},Oe=t=>{if(g.bubbles===!1)return null;let n=Q(),r=[],i=(e,t,i,a)=>{t>0&&r.push([e+n/2,i/t,t,a])};for(let e of t)i(e.time,e.sellVolume,e.sellNotional,!1),i(e.time,e.buyVolume,e.buyNotional,!0);if(Number.isFinite(C)&&(i(C,w.sellVolume,w.sellNotional,!1),i(C,w.buyVolume,w.buyNotional,!0)),!r.length)return null;let a=0;for(let e of r)a=Math.max(a,e[2]);k=k>0?Math.max(a,k*.995):a;let o=g.bubbleVolume??k,c=Math.max(4,g.bubbleSize??28),l=new ArrayBuffer(r.length*16),u=new Float32Array(l),d=new Uint32Array(l),f=e.packColor([b.up[0],b.up[1],b.up[2],.78]),p=e.packColor([b.down[0],b.down[1],b.down[2],.78]);return r.forEach(([e,t,n,r],i)=>{u[i*4]=e-F.x,u[i*4+1]=t-F.y,u[i*4+2]=s.clamp(Math.sqrt(n/o)*c,3,c),d[i*4+3]=r?f:p}),{kind:`scatter`,key:`trades`,version:++M,color:b.up,instances:l,count:r.length,opacity:1,stroke:1.25}},ke=e=>{if(g.bestLines===!1)return[];let n=Q(),r=(r,i,a)=>{let o=e.length+ +!!Number.isFinite(C),s=new Float32Array(o*4),c=(e,r,i)=>{let a=Number.isFinite(i)?i-F.y:t.GAP;s[e*4]=r-F.x,s[e*4+1]=a,s[e*4+2]=r+n-F.x,s[e*4+3]=a};if(e.forEach((e,t)=>c(t,e.time,i(e))),Number.isFinite(C)){let t=r===`bid`?_.bestBid():_.bestAsk();c(e.length,C,t)}return{kind:`line`,key:`best:${r}`,version:++M,color:a,points:s,count:o*2,width:1.5,sorted:!0}};return[r(`bid`,e=>e.bestBid,b.up),r(`ask`,e=>e.bestAsk,b.down)]},Ae=()=>{if(!Number.isFinite(C)||!(x>0))return null;let e=_.version();if(N&&P===e)return N;let{bins:t,sizes:n}=ye();return N=Te(`heat:head`,[{time:C,bins:t,sizes:n}]),P=e,N};function je(t){let n=X.ctx;if(!n)return!1;let{width:i,height:o,dpr:c,theme:l}=X,u=ie?t-ie:0;ie=t;let d=ce(),f=g.fontSize??(i<420?10:11),p=Q(),m=!Number.isFinite(E);m&&_.count(`bid`)+_.count(`ask`)>0&&$(Date.now());let ee=fe();n.setTransform(c,0,0,c,0,0),n.clearRect(0,0,i,o),n.font=s.fontOf(l,g,400,f);let h=_.mid(),v=y.price(Number.isFinite(h)?h*1.0001:0),te=Math.ceil(n.measureText(v).width)+16,S=g.profile===!1?0:Math.round(s.clamp(i*.1,36,84)),ne=f+12;if(q={x:0,y:0,w:Math.max(10,i-te-S),h:Math.max(10,o-ne)},Number.isFinite(V)||(V=Math.max(p*10,g.window??6e4)),(!Number.isFinite(G)||G<=0)&&(ve(),G=g.priceSpan??(x>0?x*60:NaN)),B){let e=ee+p*1.5;H=[e-V,e];let t=_.bestBid(),n=_.bestAsk();Number.isFinite(t)||(t=n),Number.isFinite(n)||(n=t);for(let e of De())e.bestBid<t&&(t=e.bestBid),e.bestAsk>n&&(n=e.bestAsk);if(Number.isFinite(t)&&Number.isFinite(n)){let e=Number.isFinite(W)?s.ease(u,260):1,r=(t+n)/2;if(W=Number.isFinite(W)?W+(r-W)*e:r,!K&&g.priceSpan===void 0&&x>0){let r=Math.max(x*60,(n-t)*1.5);G+=(r-G)*e}}else Number.isFinite(h)&&(W=Number.isFinite(W)?W+(h-W)*s.ease(u,220):h);Number.isFinite(W)&&Number.isFinite(G)&&(U=[W-G/2,W+G/2])}let[w,O]=H,[k,A]=U,j=e=>q.x+(e-w)/(O-w)*q.w,M=e=>q.y+q.h-(e-k)/(A-k)*q.h,N=De();if(I&&x>0){Ce();let e=I.canvas;e.style.left=`${q.x}px`,e.style.top=`${q.y}px`,e.style.width=`${q.w}px`,e.style.height=`${q.h}px`;let t=Math.max(1,Math.round(q.w*c)),n=Math.max(1,Math.round(q.h*c));(e.width!==t||e.height!==n)&&I.resize(t,n);let r=Ee(),i=Ae();i&&r.push(i),r.push(...ke(N));let a=Oe(N);a&&r.push(a);let o=2/(O-w),s=2/(A-k);I.render(r,{transform:{xScale:o,xOffset:(F.x-w)*o-1,yScale:s,yOffset:(F.y-k)*s-1},width:t,height:n,dpr:c})}let P=q.x+q.w+S,L=Number.isFinite(k)?r.linearTicks(k,A,Math.max(2,Math.floor(q.h/44))):[];n.strokeStyle=e.toCss(l.text,.07),n.lineWidth=1,n.beginPath();for(let e of L){let t=Math.round(M(e))+.5;n.moveTo(q.x,t),n.lineTo(P,t)}n.stroke(),n.fillStyle=e.toCss(l.textMuted),n.textAlign=`left`,n.textBaseline=`middle`;for(let e of L){let t=M(e);t<6||t>q.h-6||n.fillText(y.price(e),P+6,t)}let R=a.timeTicks(w,O,Math.max(2,Math.floor(q.w/90)));n.textAlign=`center`,n.textBaseline=`top`;for(let e of R.values){let t=j(e);t<20||t>q.x+q.w-20||n.fillText(R.format(e),t,q.y+q.h+6)}if(n.strokeStyle=e.toCss(l.axis),n.beginPath(),n.moveTo(0,Math.round(q.y+q.h)+.5),n.lineTo(i,Math.round(q.y+q.h)+.5),n.moveTo(Math.round(P)+.5,0),n.lineTo(Math.round(P)+.5,q.y+q.h),n.stroke(),S&&x>0&&Number.isFinite(k)){let t=q.x+q.w;n.fillStyle=e.toCss(l.background,.85),n.fillRect(t,q.y,S,q.h);let r=Math.max(1,x/(A-k)*q.h),i=0,a=[`bid`,`ask`].map(e=>{let{price:t,size:n,count:r}=_.levels(e,{step:x,limit:de()});for(let e=0;e<r;e++)t[e]>=k&&t[e]<=A&&(i=Math.max(i,n[e]));return{side:e,price:t,size:n,count:r}});for(let{side:o,price:s,size:c,count:l}of a){n.fillStyle=e.toCss(o===`bid`?b.up:b.down,.6);for(let e=0;e<l;e++){let a=s[e];if(a<k||a>A||i<=0)continue;let o=c[e]/i*(S-4),l=M(a)-r/2;n.fillRect(t+2,l+(r>3?.5:0),o,Math.max(1,r-+(r>3)))}}}let z=(t,r,a)=>{if(!Number.isFinite(t)||t<k||t>A)return;let o=s.clamp(M(t),8,q.h-8),c=y.price(t);n.font=s.fontOf(l,g,600,f);let u=n.measureText(c).width+10;n.fillStyle=a?e.toCss(r):e.toCss(l.background),s.roundRect(n,P+1,o-8,Math.min(u,i-P-2),16,3),n.fill(),a||(n.strokeStyle=e.toCss(r),n.stroke()),n.fillStyle=a?`#fff`:e.toCss(r),n.textAlign=`left`,n.textBaseline=`middle`,n.fillText(c,P+6,o+.5),n.font=s.fontOf(l,g,400,f)};z(_.bestBid(),b.up,!0),z(_.bestAsk(),b.down,!0);let re=e=>!Number.isFinite(e)||Math.abs(M(e)-M(T?.price??NaN))>=17;T&&re(_.bestBid())&&re(_.bestAsk())&&z(T.price,T.side===`buy`?b.up:b.down,!1),Me(n,j,M,f,P,d),!I&&X.root.dataset.renderer,X.describe(`${g.ariaLabel??d.name}. ${d.bid} ${y.price(_.bestBid())}, ${d.ask} ${y.price(_.bestAsk())}.`);let J=m||pe()-D<2e3;return B&&J&&Number.isFinite(C)}function Me(t,n,r,i,a,l){let{theme:u}=X,d=()=>{X.tooltip.style.display=`none`,ae&&(ae=``,v.emit(`hover`,null))};if(!J||g.tooltip===!1||!(x>0)||Y){d();return}let[f,p]=J;if(f<q.x||f>q.x+q.w||p<q.y||p>q.y+q.h){d();return}let[m,ee]=H,[h,te]=U,S=m+(f-q.x)/q.w*(ee-m),ne=h+(q.y+q.h-p)/q.h*(te-h),T=Math.round(ne/x),E=+(T*x).toFixed(Math.min(12,o.decimalsOf(x)+2)),D=Se(S),O=Q(),k=0,A=NaN,j=NaN,M=0,N=0,P=NaN;if(D){for(let e=0;e<D.bins.length;e++)D.bins[e]===T&&(k+=D.sizes[e]);({bestBid:A,bestAsk:j,buyVolume:M,sellVolume:N}=D),P=D.time}else if(Number.isFinite(C)&&S>=C){let e=[`bid`,`ask`].map(e=>_.levels(e,{step:x,limit:de()}));for(let t of e)for(let e=0;e<t.count;e++)Math.round(t.price[e]/x)===T&&(k+=t.size[e]);A=_.bestBid(),j=_.bestAsk(),M=w.buyVolume,N=w.sellVolume,P=C}let F=E<=A?`bid`:E>=j?`ask`:null;t.strokeStyle=e.toCss(u.text,.45),t.setLineDash([3,3]),t.beginPath(),t.moveTo(Math.round(f)+.5,q.y),t.lineTo(Math.round(f)+.5,q.y+q.h);let I=Math.round(r(E))+.5;if(t.moveTo(q.x,I),t.lineTo(a,I),t.stroke(),t.setLineDash([]),Number.isFinite(P)){let i=n(P),a=n(P+O),o=r(E+x/2),s=r(E-x/2);t.strokeStyle=e.toCss(u.text,.85),t.strokeRect(i,o,Math.max(2,a-i),Math.max(2,s-o))}t.font=s.fontOf(u,g,600,i);let L=y.price(E),R=Math.min(t.measureText(L).width+10,X.width-a-2);t.fillStyle=e.toCss(u.text),s.roundRect(t,a+1,I-8,R,16,3),t.fill(),t.fillStyle=e.toCss(u.background),t.textAlign=`left`,t.textBaseline=`middle`,t.fillText(L,a+6,I+.5),t.font=s.fontOf(u,g,400,i);let z=F===`bid`?b.up:F===`ask`?b.down:u.text;c.tooltipHtml(oe,X.tooltip,{text:Number.isFinite(P)?s.formatClock(P):s.formatClock(S),color:void 0},[[l.price,y.price(E)],[l.liquidity,y.size(k)],[l.buys,y.size(M)],[l.sells,y.size(N)]]),X.tooltip.style.display=`block`,X.tooltip.style.borderLeft=`3px solid ${e.toCss(z)}`,X.placeTooltip(X.tooltip,f,p,f>q.w*.6?`left`:`right`);let re=`${P}|${T}|${k}|${M}|${N}`;if(re!==ae){ae=re;let e={time:Number.isFinite(P)?P:S,price:E,size:k,side:F,buyVolume:M,sellVolume:N};v.emit(`hover`,e)}}let Ne=async(e=new Set)=>{let t=++L,n=await i.createRenderer(g.renderer??`auto`,()=>{let e=oe.createElement(`canvas`);return Object.assign(e.style,{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),e.setAttribute(`aria-hidden`,`true`),e},t=>{R||I?.kind!==t||(I.destroy(),I.canvas.remove(),I=null,Ne(new Set([...e,t])))},e);if(R||t!==L){n?.destroy();return}I&&(I.destroy(),I.canvas.remove()),I=n,n&&(Z.dataset.renderer=n.kind,Z.insertBefore(n.canvas,X.canvas),v.emit(`renderer`,n.kind)),z(n?.kind??null),X.invalidate()},Pe=e=>{B!==e&&(B=e,v.emit(`follow`,e))},Fe=e=>{if(g.interactive===!1)return;let[t,n]=c.localPoint(Z,e);Z.setPointerCapture?.(e.pointerId),Y={x:t,y:n,viewX:[...H],viewY:[...U],axis:t>q.x+q.w,span:U[1]-U[0]}},Ie=e=>{let[t,n]=c.localPoint(Z,e);if(J=[t,n],Y){let e=t-Y.x,r=n-Y.y;if(Y.axis){let e=Y.span*Math.exp(r*.006),t=(Y.viewY[0]+Y.viewY[1])/2;G=e,K=!0,U=[t-e/2,t+e/2],B&&(W=t)}else if(Math.abs(e)+Math.abs(r)>3){Pe(!1);let t=(Y.viewX[1]-Y.viewX[0])/q.w*e,n=(Y.viewY[1]-Y.viewY[0])/q.h*r;H=[Y.viewX[0]-t,Y.viewX[1]-t],U=[Y.viewY[0]+n,Y.viewY[1]+n]}}X.invalidate()},Le=e=>{Z.releasePointerCapture?.(e.pointerId),Y=null,X.invalidate()},Re=()=>{Y||(J=null,X.invalidate())},ze=(e,t)=>{let[n,r]=H,i=s.clamp((r-n)*e,Q()*10,ue());if(V=i,!B){let e=n+(t-q.x)/q.w*(r-n),a=(e-n)/(r-n);H=[e-i*a,e+i*(1-a)]}X.invalidate()},Be=e=>{let t=s.clamp((U[1]-U[0])*e,x*6||1e-9,1/0),n=(U[0]+U[1])/2;G=t,K=!0,U=[n-t/2,n+t/2],X.invalidate()},Ve=e=>{if(g.interactive===!1||!(e.ctrlKey||e.metaKey))return;e.preventDefault();let[t]=c.localPoint(Z,e),n=Math.exp(e.deltaY*.002);e.shiftKey||t>q.x+q.w?Be(n):ze(n,t)},He=()=>{g.interactive!==!1&&Ge.resetView()},Ue=e=>{if(g.interactive!==!1){switch(e.key){case`+`:case`=`:ze(.8,q.x+q.w);break;case`-`:ze(1.25,q.x+q.w);break;case`ArrowUp`:case`ArrowDown`:{if(e.shiftKey){Be(e.key===`ArrowUp`?.8:1.25);break}Pe(!1);let t=(U[1]-U[0])*.1*(e.key===`ArrowUp`?1:-1);U=[U[0]+t,U[1]+t],X.invalidate();break}case`ArrowLeft`:case`ArrowRight`:{Pe(!1);let t=(H[1]-H[0])*.1*(e.key===`ArrowLeft`?-1:1);H=[H[0]+t,H[1]+t],X.invalidate();break}case`0`:case`Home`:Ge.resetView();break;default:return}e.preventDefault()}};Z.addEventListener(`pointerdown`,Fe),Z.addEventListener(`pointermove`,Ie),Z.addEventListener(`pointerup`,Le),Z.addEventListener(`pointercancel`,Le),Z.addEventListener(`pointerleave`,Re),Z.addEventListener(`wheel`,Ve,{passive:!1}),Z.addEventListener(`dblclick`,He),Z.addEventListener(`keydown`,Ue);let We=e=>{let t=xe(e.time);_.count(`bid`)+_.count(`ask`)>0&&(ve(),$(t)),_.applyDelta(e)},Ge={setBook(e){let t=xe(e.time);_.count(`bid`)+_.count(`ask`)>0&&$(t),_.setSnapshot(e),ve(),he(),Number.isFinite(C)||$(t),X.invalidate()},applyDeltas(e){if(Array.isArray(e))for(let t of e)We(t);else We(e);!Number.isFinite(C)&&x>0&&$(fe()),X.invalidate()},addTrades(e){let t=Array.isArray(e)?e:[e];for(let e of t){if(!(e.size>0)||!Number.isFinite(e.price))continue;Number.isFinite(E)&&(xe(e.time),$(e.time));let t=!Number.isFinite(C)||e.time>=C?w:Se(e.time);t&&(e.side===`buy`?(t.buyVolume+=e.size,t.buyNotional+=e.size*e.price):(t.sellVolume+=e.size,t.sellNotional+=e.size*e.price)),(!T||e.time>=T.time)&&(T=e)}X.invalidate()},clear(){_.clear(),_e(),T=null,E=NaN,x=0,W=NaN,G=NaN,K=!1,X.invalidate()},setOptions(e){let t=g;g=e,le(),(e.tickSize!==t.tickSize||(e.interval??100)!==(t.interval??100))&&(_e(),x=0,G=NaN,ve()),e.window!==t.window&&(V=NaN),e.priceSpan!==t.priceSpan&&(G=NaN),(e.renderer??`auto`)!==(t.renderer??`auto`)&&Ne(),me(),he(),ge()},resetView(){V=NaN,G=NaN,K=!1,W=NaN,Pe(!0),X.invalidate()},getRenderer:()=>I?.kind??null,ready:re,getStore:()=>_,on:(e,t)=>v.on(e,t),resize(){X.invalidate()},destroy(){R=!0,Z.removeEventListener(`pointerdown`,Fe),Z.removeEventListener(`pointermove`,Ie),Z.removeEventListener(`pointerup`,Le),Z.removeEventListener(`pointercancel`,Le),Z.removeEventListener(`pointerleave`,Re),Z.removeEventListener(`wheel`,Ve),Z.removeEventListener(`dblclick`,He),Z.removeEventListener(`keydown`,Ue),I?.destroy(),I=null,v.clear(),X.destroy(),z(null)}};return le(),me(),Ne(),Ge};exports.createOrderBookHeatmap=ee,exports.heatIntensity=m;
|
|
2
|
+
//# sourceMappingURL=heatmap.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heatmap.cjs","names":["createOrderBookStore","createEmitter","createFormatters","createHost","localeLabels","sideColors","luminance","rampColor","packColor","decimalsOf","inferPriceDecimals","inferSizeDecimals","inferTickSize","roundToStep","clamp","GAP","fontOf","ease","linearTicks","toCss","timeTicks","formatClock","createRenderer","localPoint","require_color","require_types","require_locale","require_scale","require_detect","require_time","require_book","require_format","require_host","CHUNK","LUT_SIZE","DARK_RAMP","LIGHT_RAMP","LABELS","heatIntensity","size","max","r","contrast","scale","createOrderBookHeatmap","options","initial","store","emitter","fmt","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","container","refreshColors","markAllDirty","root","texts","labels","applyTexts","interval","history","depth","nowTime","elapsed","perfNow","theme","value","dark","stops","i","c","refreshFormat","id","clearHistory","ensureTick","base","mid","ratio","multiple","p","m","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","lineItems","build","points","write","y","pick","key","headCells","version","draw","ctx","dt","now","l","fontSize","width","live","dpr","height","sample","axisW","profileW","timeH","right","center","x0","x1","y0","y1","xOf","t","yOf","canvas","bw","bh","items","head","bubbles","xScale","yScale","yTicks","xt","px","rowPx","maxSize","sides","w","tag","text","filled","color","clear","drawHover","fresh","hide","hx","hy","rowPrice","bestBid","bestAsk","buyVolume","sellVolume","levels","lv","ry","cx0","cx1","cy0","cy1","sideColor","doc","event","initRenderer","token","next","kind","exclude","setFollow","onPointerDown","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,9 @@
|
|
|
1
|
+
import { OrderBookHeatmapInstance, OrderBookHeatmapOptions, OrderBookHeatmapScale } from './types.cjs';
|
|
2
|
+
/** Normalized intensity (0-1) of a size */
|
|
3
|
+
export declare const heatIntensity: (size: number, max: number, scale: OrderBookHeatmapScale, contrast: number) => number;
|
|
4
|
+
/**
|
|
5
|
+
* Creates a liquidity heatmap in `container`: resting size over time and
|
|
6
|
+
* price on the GPU, trades as bubbles, best bid / ask lines, the current
|
|
7
|
+
* book profile, zoom / pan and a crosshair tooltip.
|
|
8
|
+
*/
|
|
9
|
+
export declare const createOrderBookHeatmap: (container: HTMLElement, initial?: OrderBookHeatmapOptions) => OrderBookHeatmapInstance;
|