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":"chart.js","names":["styleElement","storeUpdate","storeAppend","storePrepend","assign","TIME_AXIS","MIN_AXIS","MAX_SPACING","MIN_PANE","PRICE","UP","DOWN","WARNING","PRIMARY","PRICE_LINE_TITLES","clamp","v","lo","hi","textOn","color","parseColor","fill","luminance","finite","createTradingChart","doc","container","win","options","initial","destroyed","make","tag","style","root","layer","background","foreground","legends","jump","live","store","createStore","pyramid","createPyramid","ha","haValid","haPyramid","studies","studyValid","visibility","compares","dataVersion","tailVersion","detectedPrecision","inferredTimeframe","DAY","spacing","right","plotW","plotH","axisW","width","height","panes","scales","paneHeights","vis","volumeOverlayMax","theme","readTheme","themeVersion","optionsVersion","renderer","rendererToken","frameId","layers","geomKey","builtTail","itemVersion","resolveReady","ready","resolve","pointer","keyboardIndex","gesture","touches","pinch","kinetic","scrollAnim","pendingRange","drawings","emittedDrawings","tool","selected","hovered","draft","drawingCounter","lineOverrides","hoveredLine","lastRange","lastCrosshair","historyFirst","countdownTimer","listeners","emit","type","fn","event","locale","resolveLocale","texts","localeLabels","TRADING_LABELS","resolveTexts","labels","n","redUp","upCss","downCss","css","fallback","toCss","value","alpha","precision","priceFormat","priceFormatter","priceFormatKey","formatPrice","key","timeframe","parseTimeframe","tfMs","font","weight","size","isVisible","study","xOf","index","indexAt","x","timeAt","count","i","indexOfTimeExt","last","time","indexOfTime","display","markDirty","from","c","level","l","p","syncDerived","valid","next","heikinAshiInto","j","lowerBoundTime","afterDataChange","detectPrecision","inferTimeframe","invalidate","rebuildStudies","buildStudies","reused","id","s","rebuildCompares","data","series","a","b","LINE_COLORS","d","followsRealtime","replaceBars","setBars","bars","scale","applyBarsOption","length","inputLength","first","barAt","follow","before","at","updateBar","added","layoutPanes","paneStudies","available","wanted","total","max","k","heights","h","priceHeight","scaleOf","createScale","mode","price","top","paneAt","y","clampView","minSpacing","computeVisible","left","src","cols","pyramidLevel","i0","i1","r0","r1","groupCenter","g","groupValue","values","groupBars","firstVisibleIndex","compareBase","compareScaled","base","toScaled","baselinePrice","autoscale","pane","closeOnly","vol","out","fitScale","timeTicks","tf","intraday","offset","gEnd","groupTime","candidates","prev","shiftTime","boundaryWeight","sample","gap","ctx","pickTicks","t","tickText","paneTickText","formatPercent","scaled","stepDecimals","fromScaled","formatVolume","formatFixed","studyValueText","createLayers","result","up","down","upP","packColor","downP","bg","metrics","candleMetrics","dpr","X","histogramHalf","volumeColors","bottom","Y","yOf","lineLayer","buffer","LineBuffer","isLive","ga","gb","toY","lineWidth","st","BarBuffer","pixelRange","yOfScaled","lineColor","area","AreaBuffer","yb","upArea","downArea","upLine","downLine","px","py","point","hollow","ohlc","wick","body","wicks","bodies","caps","ticks","tick","o","cx","wt","wb","range","clampRange","side","bt","bb","segments","edges","box","items","y0","strong","faded","mix","runLayer","lastMain","version","item","renderData","canvas","bw","bh","sizeCanvas","w","roundRect","r","paintBackground","grid","showGrid","ys","ui","li","upper","lower","started","back","flush","ya","axisLabel","second","textColor","text","priceAxisText","line","kind","linePrice","crosshairState","bar","valueAt","best","yy","drawingMapper","formatSpan","abs","ms","parts","days","hours","HOUR","minutes","MINUTE","paintForeground","muted","bgCss","upC","downC","hiG","loG","below","leftSide","label","stack","many","marker","sell","anchor","dir","tip","mapper","context","drawing","paintDrawing","lastClose","lineStyle","setDash","titleKey","title","pnl","pnlFill","widths","part","grip","lastLine","lastColor","covered","start","end","date","formatCountdown","cross","labelBg","scaledAt","textValue","formatCrosshairTime","legendKey","legendRows","legendBoxes","legendBox","legendRow","row","button","updateLegends","outputs","span","buildLegends","priceBox","head","titleOf","setSpan","prevClose","change","html","name","escapeHtml","pct","shown","slots","prefix","ch","frame","animate","active","now","eased","dt","measureAxis","widest","animating","fg","pass","applyRange","scaleTicks","bands","updateJump","emitView","show","visibleRange","readBar","local","rect","zoomAt","factor","anchorAt","setTool","notify","select","commitDrawings","finishDraft","done","hitLine","hitDrawingAt","hit","hitDrawing","separatorAt","updateCursor","cursor","nextHover","onPointerDown","sep","above","anchorCount","onPointerMove","distance","mid","dx","panScale","zoomScale","lastIndex","dy","nextBelow","step","di","ds","points","onPointerUp","onPointerLeave","onWheel","unit","modifier","onDoubleClick","instance","announce","page","move","current","target","keyboard","resizeObserver","refreshTheme","themeColorsChanged","unwatchTheme","watchTheme","langObserver","applyStatic","initRenderer","token","createRenderer","createDataCanvas","exclude","symbol","wantTimer","applyOptions","previous","appendBars","prependBars","animateScroll","to","visible","set","listener"],"sources":["../../../../../charts/src/engine/trading/chart.ts"],"sourcesContent":["// Trading chart: candles (or bars, lines, areas...) over a gap-free index\n// axis, indicator panes, price lines, markers, drawings and streaming.\n//\n// Layers, bottom to top: a Canvas2D background (grid, bands, watermark),\n// the GPU data canvas covering every pane (candles, volumes, indicator\n// lines, baked in device pixels), a Canvas2D overlay (axes, labels, price\n// lines, markers, drawings, crosshair) and DOM legends. The GPU items are\n// rebuilt only when the view, the scales or the data change; a tick\n// rebuilds only the items of the last bar.\n\nimport {\n luminance,\n mix,\n packColor,\n parseColor,\n toCss,\n type Rgba,\n} from \"../color\";\nimport { createDataCanvas, styleElement } from \"../dom\";\nimport { createRenderer } from \"../renderers/detect\";\nimport type { ChartRenderer, RenderItem } from \"../renderers/types\";\nimport { stepDecimals } from \"../scale\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"../theme\";\nimport type { ChartRendererKind } from \"../types\";\nimport { localeLabels, resolveLocale } from \"../locale\";\nimport {\n anchorCount,\n hitDrawing,\n paintDrawing,\n setDash,\n type DrawingMapper,\n} from \"./drawings\";\nimport {\n DAY,\n HOUR,\n MINUTE,\n boundaryWeight,\n detectPrecision,\n formatCountdown,\n formatCrosshairTime,\n formatFixed,\n formatPercent,\n formatVolume,\n inferTimeframe,\n pickTicks,\n priceFormatter,\n shiftTime,\n tickText,\n} from \"./format\";\nimport {\n AreaBuffer,\n BarBuffer,\n LineBuffer,\n candleMetrics,\n clampRange,\n pixelRange,\n} from \"./geometry\";\nimport { heikinAshiInto, parseTimeframe } from \"./indicators\";\nimport { TRADING_LABELS, fill, type TradingTexts } from \"./labels\";\nimport {\n createScale,\n fitScale,\n fromScaled,\n panScale,\n scaleTicks,\n scaledAt,\n toScaled,\n valueAt,\n yOf,\n yOfScaled,\n zoomScale,\n type PaneScale,\n} from \"./scale\";\nimport {\n appendBars as storeAppend,\n createPyramid,\n createStore,\n indexOfTime,\n inputLength,\n barAt,\n prependBars as storePrepend,\n pyramidLevel,\n readBar,\n setBars as storeSet,\n updateBar as storeUpdate,\n lowerBoundTime,\n type OhlcColumns,\n} from \"./store\";\nimport { LINE_COLORS, buildStudies, type Study } from \"./studies\";\nimport type {\n TradingBarsInput,\n TradingChartEventMap,\n TradingChartInstance,\n TradingChartOptions,\n TradingCrosshairEvent,\n TradingDrawing,\n TradingDrawingPoint,\n TradingDrawingTool,\n TradingPriceLine,\n TradingScaleMode,\n TradingVisibleRange,\n} from \"./types\";\n\nconst TIME_AXIS = 28;\nconst MIN_AXIS = 60;\nconst MAX_SPACING = 60;\nconst MIN_PANE = 48;\nconst PRICE = \"price\";\nconst UP = \"var(--success-color, #089981)\";\nconst DOWN = \"var(--danger-color, #f23645)\";\nconst WARNING = \"var(--warning-color, #f59e0b)\";\nconst PRIMARY = \"var(--primary-color, #2962ff)\";\n\nconst PRICE_LINE_TITLES: Record<string, keyof TradingTexts | undefined> = {\n order: \"limit\",\n position: \"position\",\n takeProfit: \"takeProfit\",\n stopLoss: \"stopLoss\",\n alert: \"alert\",\n};\n\nconst clamp = (v: number, lo: number, hi: number) =>\n v < lo ? lo : v > hi ? hi : v;\n\n/** Readable text on a fill (a CSS color): dark on light fills, white otherwise */\nconst textOn = (fill: string) => {\n const color = parseColor(fill);\n return color && luminance(color) > 0.5 ? \"#0b0e11\" : \"#fff\";\n};\n\nconst finite = Number.isFinite;\n\ninterface Pane {\n id: string;\n study: Study | null;\n scale: PaneScale;\n top: number;\n height: number;\n ticks: number[];\n step: number;\n}\n\n/** Bars drawn: a level of the pyramid and the groups in view */\ninterface Visible {\n /** Logical index at the left edge */\n left: number;\n level: number;\n /** Bars per group */\n size: number;\n cols: OhlcColumns;\n /** Groups drawn (one extra on each side) */\n g0: number;\n g1: number;\n /** Groups whose center is in the plot */\n s0: number;\n s1: number;\n /** Last group */\n last: number;\n}\n\ninterface LegendRow {\n row: HTMLDivElement;\n values: HTMLSpanElement[];\n button: HTMLButtonElement | null;\n}\n\ntype Layer = (ga: number, gb: number, live: boolean) => RenderItem[];\n\n/** Interaction in progress */\ntype Gesture =\n | {\n kind: \"pan\";\n x: number;\n y: number;\n right: number;\n pane: Pane | null;\n moved: boolean;\n lastX: number;\n lastY: number;\n lastT: number;\n velocity: number;\n }\n | { kind: \"axisY\"; pane: Pane; y: number; min: number; max: number }\n | { kind: \"axisX\"; x: number; spacing: number }\n | {\n kind: \"separator\";\n index: number;\n y: number;\n above: number;\n below: number;\n }\n | { kind: \"order\"; line: TradingPriceLine; startPrice: number }\n | {\n kind: \"drawing\";\n id: string;\n handle: number;\n x: number;\n y: number;\n original: TradingDrawing;\n moved: boolean;\n }\n | { kind: \"create\"; x: number; y: number; moved: boolean };\n\n/** Mounts a trading chart in `container` (which should have a height) */\nexport const createTradingChart = (\n container: HTMLElement,\n initial: TradingChartOptions = {},\n): TradingChartInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n let options: TradingChartOptions = { ...initial };\n let destroyed = false;\n\n // ------------------------------------------------------------------ DOM\n\n const make = <K extends keyof HTMLElementTagNameMap>(\n tag: K,\n style: Partial<CSSStyleDeclaration>,\n ) => styleElement(doc.createElement(tag), style) as HTMLElementTagNameMap[K];\n\n const root = make(\"div\", {\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n overflow: \"hidden\",\n outline: \"none\",\n userSelect: \"none\",\n touchAction: \"pan-y\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n cursor: \"crosshair\",\n });\n root.className = \"minerva-trading-chart\";\n root.tabIndex = 0;\n root.setAttribute(\"role\", \"figure\");\n root.setAttribute(\"aria-roledescription\", \"chart\");\n\n const layer = (tag: \"canvas\" | \"div\") =>\n make(tag, {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n const background = layer(\"canvas\") as HTMLCanvasElement;\n const foreground = layer(\"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n const legends = layer(\"div\") as HTMLDivElement;\n legends.style.right = \"0\";\n legends.style.bottom = \"0\";\n const jump = make(\"button\", {\n position: \"absolute\",\n display: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n padding: \"0\",\n borderRadius: \"50%\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 80%, transparent)\",\n background: \"var(--surface-elevated-color, var(--surface-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow: \"0 4px 14px -4px rgba(15, 23, 42, 0.25)\",\n cursor: \"pointer\",\n });\n jump.type = \"button\";\n jump.innerHTML =\n '<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3l5 5-5 5M9 3l5 5-5 5\"/></svg>';\n const live = make(\"div\", {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n });\n live.setAttribute(\"aria-live\", \"polite\");\n root.append(background, foreground, legends, jump, live);\n container.appendChild(root);\n\n // ----------------------------------------------------------------- data\n\n const store = createStore();\n let pyramid = createPyramid();\n /** Heikin-Ashi bars (time and volume shared with the store) */\n const ha: OhlcColumns = {\n time: store.time,\n open: new Float64Array(0),\n high: new Float64Array(0),\n low: new Float64Array(0),\n close: new Float64Array(0),\n volume: store.volume,\n };\n let haValid = 0;\n let haPyramid = createPyramid();\n let studies: Study[] = [];\n const studyValid = new Map<Study, number>();\n const visibility = new Map<string, boolean>();\n interface CompareRuntime {\n id: string;\n name: string;\n color: string;\n times: Float64Array;\n data: Float64Array;\n values: Float64Array;\n valid: number;\n }\n let compares: CompareRuntime[] = [];\n /** Changes when bars other than the last one change */\n let dataVersion = 0;\n /** Changes when the last bar changes */\n let tailVersion = 0;\n let detectedPrecision = 2;\n let inferredTimeframe = DAY;\n\n // ----------------------------------------------------------------- view\n\n let spacing = options.barSpacing ?? 8;\n let right = NaN;\n let plotW = 0;\n let plotH = 0;\n let axisW = MIN_AXIS;\n let width = 0;\n let height = 0;\n let panes: Pane[] = [];\n const scales = new Map<string, PaneScale>();\n const paneHeights = new Map<string, number>();\n let vis: Visible | null = null;\n let volumeOverlayMax = 0;\n\n // -------------------------------------------------------------- state\n\n let theme: ChartTheme = readTheme(root);\n let themeVersion = 0;\n let optionsVersion = 0;\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let frameId = 0;\n let layers: { fn: Layer; main: RenderItem[]; live: RenderItem[] }[] = [];\n let geomKey = \"\";\n let builtTail = -1;\n let itemVersion = 0;\n let resolveReady!: (kind: ChartRendererKind | null) => void;\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n let pointer: { x: number; y: number } | null = null;\n let keyboardIndex: number | null = null;\n let gesture: Gesture | null = null;\n const touches = new Map<number, { x: number; y: number }>();\n let pinch: { distance: number; spacing: number } | null = null;\n let kinetic: { v: number; t: number } | null = null;\n let scrollAnim: { from: number; to: number; start: number } | null = null;\n /** Range asked by `setVisibleRange` / `fitContent`, applied once the plot width is known */\n let pendingRange: { from: number; to: number } | null = null;\n\n let drawings: readonly TradingDrawing[] = options.drawings ?? [];\n let emittedDrawings: readonly TradingDrawing[] | null = null;\n let tool: TradingDrawingTool = options.drawingMode ?? \"cursor\";\n let selected: string | null = null;\n let hovered: string | null = null;\n let draft: TradingDrawing | null = null;\n let drawingCounter = 0;\n const lineOverrides = new Map<string, number>();\n let hoveredLine: string | null = null;\n let lastRange: TradingVisibleRange | null = null;\n let lastCrosshair = \"\";\n let historyFirst = NaN;\n let countdownTimer: ReturnType<typeof setInterval> | null = null;\n\n // ---------------------------------------------------------- listeners\n\n const listeners = new Map<string, Set<(event: never) => void>>();\n const emit = <K extends keyof TradingChartEventMap>(\n type: K,\n event: TradingChartEventMap[K],\n ) => {\n listeners\n .get(type)\n ?.forEach((fn) => (fn as (e: TradingChartEventMap[K]) => void)(event));\n };\n\n // ------------------------------------------------------------- helpers\n\n // locale and texts, resolved at each options update (and `<html lang>` change)\n let locale = resolveLocale(options.locale);\n let texts = localeLabels(TRADING_LABELS, locale, options.labels);\n const resolveTexts = () => {\n locale = resolveLocale(options.locale);\n texts = localeLabels(TRADING_LABELS, locale, options.labels);\n };\n const labels = () => texts;\n const n = () => store.length;\n const style = () => options.chartStyle ?? \"candles\";\n const redUp = () => options.colorConvention === \"redUp\";\n const upCss = () => options.upColor ?? (redUp() ? DOWN : UP);\n const downCss = () => options.downColor ?? (redUp() ? UP : DOWN);\n const resolve = (css: string, fallback: Rgba = theme.primary): Rgba =>\n theme.resolve ? theme.resolve(css, fallback) : fallback;\n const css = (value: string, alpha = 1) => toCss(resolve(value), alpha);\n const precision = () => options.precision ?? detectedPrecision;\n let priceFormat = priceFormatter(2, undefined);\n let priceFormatKey = \"\";\n const formatPrice = (value: number) => {\n if (options.formatPrice) return options.formatPrice(value);\n const key = `${precision()}|${locale}`;\n if (key !== priceFormatKey) {\n priceFormat = priceFormatter(precision(), locale);\n priceFormatKey = key;\n }\n return priceFormat(value);\n };\n const timeframe = () => {\n const parsed =\n options.timeframe !== undefined\n ? parseTimeframe(options.timeframe)\n : null;\n return (\n parsed ?? {\n unit: \"ms\" as const,\n count: inferredTimeframe,\n ms: inferredTimeframe,\n }\n );\n };\n const tfMs = () => timeframe().ms;\n const font = (size: number, weight = 400) =>\n `${weight} ${size}px ${theme.fontFamily}`;\n\n const isVisible = (study: Study) =>\n visibility.get(study.id) ?? study.config.visible ?? true;\n\n const xOf = (index: number) => plotW + (index - right) * spacing;\n const indexAt = (x: number) => right - (plotW - x) / spacing;\n\n /** Time of a logical index (extrapolated outside the bars) */\n const timeAt = (index: number) => {\n const count = n();\n if (!count) return 0;\n const i = Math.round(index);\n if (i < 0) return store.time[0] + i * tfMs();\n if (i >= count) return store.time[count - 1] + (i - count + 1) * tfMs();\n return store.time[i];\n };\n\n /** Logical index of a time (extrapolated outside the bars) */\n const indexOfTimeExt = (time: number) => {\n const count = n();\n if (!count) return 0;\n const last = store.time[count - 1];\n if (time > last) return count - 1 + (time - last) / tfMs();\n if (time < store.time[0]) return (time - store.time[0]) / tfMs();\n return indexOfTime(store.time, count, time);\n };\n\n /** Bars as drawn: Heikin-Ashi or the store */\n const display = (): OhlcColumns => (style() === \"heikinAshi\" ? ha : store);\n\n // ------------------------------------------------------- derived data\n\n const markDirty = (from: number) => {\n for (const study of studies)\n studyValid.set(study, Math.min(studyValid.get(study) ?? 0, from));\n haValid = Math.min(haValid, from);\n for (const c of compares) c.valid = Math.min(c.valid, from);\n const level = (p: typeof pyramid) => {\n for (const l of p.levels)\n if (l) l.valid = Math.min(l.valid, Math.floor(from / l.size));\n };\n level(pyramid);\n level(haPyramid);\n };\n\n const syncDerived = () => {\n const count = n();\n for (const study of studies) {\n const valid = studyValid.get(study) ?? 0;\n if (valid < count) {\n study.compute(store, valid);\n studyValid.set(study, count);\n }\n }\n ha.time = store.time;\n ha.volume = store.volume;\n if (style() === \"heikinAshi\" && haValid < count) {\n if (ha.open.length < store.capacity) {\n for (const key of [\"open\", \"high\", \"low\", \"close\"] as const) {\n const next = new Float64Array(store.capacity);\n next.set(ha[key].subarray(0, haValid));\n ha[key] = next;\n }\n }\n heikinAshiInto(\n store.open,\n store.high,\n store.low,\n store.close,\n count,\n ha,\n haValid,\n );\n haValid = count;\n }\n for (const c of compares) {\n if (c.valid >= count) continue;\n if (c.values.length < store.capacity) {\n const next = new Float64Array(store.capacity).fill(NaN);\n next.set(c.values.subarray(0, c.valid));\n c.values = next;\n }\n for (let i = c.valid; i < count; i++) {\n const j =\n lowerBoundTime(c.times, c.times.length, store.time[i] + 0.5) - 1;\n c.values[i] = j >= 0 ? c.data[j] : NaN;\n }\n c.valid = count;\n }\n };\n\n const afterDataChange = (from: number) => {\n markDirty(from);\n const count = n();\n if (from < count - 1) dataVersion++;\n tailVersion++;\n if (count) {\n detectedPrecision = Math.max(\n from === 0 ? 0 : detectedPrecision,\n detectPrecision(store.close, from, count),\n detectPrecision(store.open, Math.max(from, count - 50), count),\n );\n if (from === 0 || count < 80)\n inferredTimeframe = inferTimeframe(store.time, count);\n }\n invalidate();\n };\n\n const rebuildStudies = () => {\n const { studies: next, reused } = buildStudies(\n options.indicators ?? [],\n studies,\n options.utcOffset ?? -new Date().getTimezoneOffset(),\n );\n for (const study of studies)\n if (!reused.has(study)) studyValid.delete(study);\n for (const study of next) if (!reused.has(study)) studyValid.set(study, 0);\n studies = next;\n // drop the user's toggles of indicators whose visibility is now set\n for (const id of [...visibility.keys()])\n if (!studies.some((s) => s.id === id)) visibility.delete(id);\n };\n\n const rebuildCompares = () => {\n compares = (options.compare ?? []).map((series, i) => {\n const data = [...series.data].sort((a, b) => a.time - b.time);\n return {\n id: series.id ?? series.name,\n name: series.name,\n color: series.color ?? LINE_COLORS[(i + 2) % LINE_COLORS.length],\n times: Float64Array.from(data, (d) => d.time),\n data: Float64Array.from(data, (d) => d.value),\n values: new Float64Array(0),\n valid: 0,\n };\n });\n };\n\n // ---------------------------------------------------------- bars input\n\n /** Last bar visible: new bars keep the view at the latest bar */\n const followsRealtime = () => {\n const count = n();\n if (!count || !finite(right)) return true;\n const x = xOf(count - 1);\n return x >= 0 && x <= plotW + spacing * 0.5;\n };\n\n const replaceBars = (bars: TradingBarsInput) => {\n storeSet(store, bars);\n pyramid = createPyramid();\n haPyramid = createPyramid();\n haValid = 0;\n historyFirst = NaN;\n for (const scale of scales.values()) scale.auto = true;\n right = n() - 1 + (options.rightOffset ?? 8);\n kinetic = null;\n scrollAnim = null;\n afterDataChange(0);\n };\n\n /**\n * New `bars` option: streamed (same first bars plus newer ones),\n * prepended history (same last bar), or replaced\n */\n const applyBarsOption = (bars: TradingBarsInput) => {\n const count = n();\n const length = inputLength(bars);\n if (count >= 2 && length >= count) {\n const first = barAt(bars, 0).time;\n const last = store.time[count - 1];\n if (\n first === store.time[0] &&\n barAt(bars, count - 2).time === store.time[count - 2]\n ) {\n // streaming through the props: update the last bar, append the rest\n const follow = followsRealtime();\n const before = count;\n let from = count;\n for (let i = count - 1; i < length; i++) {\n const at = storeUpdate(store, barAt(bars, i));\n if (at >= 0) from = Math.min(from, at);\n }\n if (follow) right += n() - before;\n if (from < n()) afterDataChange(from);\n return;\n }\n if (barAt(bars, length - 1).time === last && length > count) {\n const added = length - count;\n storeSet(store, bars);\n pyramid = createPyramid();\n haPyramid = createPyramid();\n haValid = 0;\n right += added;\n afterDataChange(0);\n return;\n }\n }\n replaceBars(bars);\n };\n\n // --------------------------------------------------------------- layout\n\n const layoutPanes = () => {\n const paneStudies = studies.filter((s) => !s.overlay);\n const available = plotH;\n const wanted = paneStudies.map((s) => paneHeights.get(s.id) ?? s.height);\n const total = wanted.reduce((a, b) => a + b, 0);\n const max = Math.max(0, available * 0.62);\n const k = total > max && total > 0 ? max / total : 1;\n const heights = wanted.map((h) =>\n Math.max(MIN_PANE * Math.min(1, k * 2), h * k),\n );\n const priceHeight = Math.max(\n 40,\n available - heights.reduce((a, b) => a + b, 0),\n );\n const next: Pane[] = [];\n const scaleOf = (id: string, mode: TradingScaleMode) => {\n let scale = scales.get(id);\n if (!scale) {\n scale = createScale(mode);\n scales.set(id, scale);\n }\n if (scale.mode !== mode) {\n scale.mode = mode;\n scale.auto = true;\n }\n return scale;\n };\n const price = scaleOf(PRICE, options.scaleMode ?? \"linear\");\n price.top = 0;\n price.height = priceHeight;\n price.marginTop = 0.1;\n price.marginBottom = 0.08;\n next.push({\n id: PRICE,\n study: null,\n scale: price,\n top: 0,\n height: priceHeight,\n ticks: [],\n step: 0,\n });\n let top = priceHeight;\n paneStudies.forEach((study, i) => {\n const scale = scaleOf(study.id, \"linear\");\n scale.top = top;\n scale.height = heights[i];\n scale.marginTop = study.type === \"volume\" ? 0.18 : 0.14;\n scale.marginBottom = study.type === \"volume\" ? 0 : 0.1;\n if (study.range) scale.marginTop = scale.marginBottom = 0.06;\n next.push({\n id: study.id,\n study,\n scale,\n top,\n height: heights[i],\n ticks: [],\n step: 0,\n });\n top += heights[i];\n });\n for (const id of [...scales.keys()])\n if (!next.some((p) => p.id === id)) scales.delete(id);\n panes = next;\n };\n\n const paneAt = (y: number) =>\n panes.find((p) => y >= p.top && y < p.top + p.height) ?? null;\n\n const clampView = () => {\n const count = n();\n const minSpacing = Math.min(1, (plotW * 0.8) / Math.max(1, count));\n spacing = clamp(spacing, Math.max(1e-4, minSpacing), MAX_SPACING);\n const bars = plotW / spacing;\n if (!finite(right)) right = count - 1 + (options.rightOffset ?? 8);\n const hi =\n Math.max(0, count - 1) + Math.max(options.rightOffset ?? 8, bars * 0.75);\n const lo = Math.min(bars * 0.25, hi);\n right = clamp(right, lo, hi);\n };\n\n const computeVisible = (): Visible | null => {\n const count = n();\n if (!count) return null;\n const left = right - plotW / spacing;\n const level = spacing >= 2 ? 0 : Math.ceil(Math.log2(2 / spacing));\n const size = 2 ** level;\n const src = display();\n const cols = level\n ? pyramidLevel(\n style() === \"heikinAshi\" ? haPyramid : pyramid,\n src,\n count,\n level,\n )\n : src;\n const last = Math.floor((count - 1) / size);\n const i0 = clamp(Math.floor(left) - 1, 0, count - 1);\n const i1 = clamp(Math.ceil(right) + 1, 0, count - 1);\n const r0 = clamp(Math.ceil(left - 0.5), 0, count - 1);\n const r1 = clamp(Math.floor(right + 0.5), 0, count - 1);\n return {\n left,\n level,\n size,\n cols,\n g0: Math.floor(i0 / size),\n g1: Math.floor(i1 / size),\n s0: Math.floor(r0 / size),\n s1: Math.floor(r1 / size),\n last,\n };\n };\n\n /** Center index of a group */\n const groupCenter = (v: Visible, g: number) => g * v.size + (v.size - 1) / 2;\n /** Value of a study output for a group (its last bar) */\n const groupValue = (v: Visible, values: Float64Array, g: number) =>\n values[Math.min(n() - 1, g * v.size + v.size - 1)];\n const groupBars = (v: Visible, g: number) =>\n Math.min(v.size, n() - g * v.size);\n\n /** First visible bar: the base of the percent scale and of the baseline */\n const firstVisibleIndex = () =>\n clamp(Math.ceil(right - plotW / spacing - 0.5), 0, Math.max(0, n() - 1));\n\n const compareBase = (c: CompareRuntime) => {\n const count = n();\n for (let i = firstVisibleIndex(); i < count; i++) {\n const v = c.values[i];\n if (finite(v) && v !== 0) return v;\n }\n return NaN;\n };\n\n /** Scaled value of a comparison series (percent: from its own base) */\n const compareScaled = (scale: PaneScale, value: number, base: number) =>\n scale.mode === \"percent\"\n ? (value / base - 1) * 100\n : toScaled(scale, value);\n\n const baselinePrice = () =>\n options.baselinePrice ?? display().close[firstVisibleIndex()];\n\n const autoscale = (v: Visible | null) => {\n volumeOverlayMax = 0;\n for (const pane of panes) {\n const scale = pane.scale;\n if (!v) continue;\n if (pane.id === PRICE) {\n scale.base = store.close[firstVisibleIndex()] || 1;\n const { cols } = v;\n const s = style();\n const closeOnly = s === \"line\" || s === \"area\" || s === \"baseline\";\n let lo = Infinity;\n let hi = -Infinity;\n for (let g = v.s0; g <= v.s1; g++) {\n const l = closeOnly ? cols.close[g] : cols.low[g];\n const h = closeOnly ? cols.close[g] : cols.high[g];\n if (l < lo) lo = l;\n if (h > hi) hi = h;\n }\n for (const study of studies) {\n if (!study.overlay || !isVisible(study)) continue;\n if (study.type === \"volume\") {\n for (let g = v.s0; g <= v.s1; g++) {\n const vol = cols.volume[g] / groupBars(v, g);\n if (vol > volumeOverlayMax) volumeOverlayMax = vol;\n }\n continue;\n }\n for (const out of study.outputs) {\n for (let g = v.s0; g <= v.s1; g++) {\n const value = groupValue(v, out.values, g);\n if (value < lo) lo = value;\n if (value > hi) hi = value;\n }\n }\n }\n if (s === \"baseline\") {\n const b = baselinePrice();\n if (b < lo) lo = b;\n if (b > hi) hi = b;\n }\n if (!scale.auto) continue;\n let a = toScaled(scale, lo);\n let b = toScaled(scale, hi);\n if (scale.mode === \"log\" && !(lo > 0))\n a = toScaled(scale, Math.max(hi * 1e-3, 1e-12));\n for (const c of compares) {\n const base = compareBase(c);\n for (let g = v.s0; g <= v.s1; g++) {\n const value = compareScaled(\n scale,\n groupValue(v, c.values, g),\n base,\n );\n if (value < a) a = value;\n if (value > b) b = value;\n }\n }\n fitScale(scale, a, b);\n continue;\n }\n const study = pane.study;\n if (!study || !scale.auto) continue;\n if (study.range) {\n fitScale(scale, study.range[0], study.range[1]);\n continue;\n }\n let lo = Infinity;\n let hi = -Infinity;\n if (study.type === \"volume\") lo = 0;\n for (const out of study.outputs) {\n for (let g = v.s0; g <= v.s1; g++) {\n const value =\n out.kind === \"volume\"\n ? v.cols.volume[g] / groupBars(v, g)\n : groupValue(v, out.values, g);\n if (value < lo) lo = value;\n if (value > hi) hi = value;\n }\n }\n if (study.type === \"macd\" && finite(lo) && finite(hi)) {\n // keep the zero line in view\n lo = Math.min(lo, 0);\n hi = Math.max(hi, 0);\n }\n fitScale(scale, lo, hi);\n }\n };\n\n // ----------------------------------------------------------------- ticks\n\n interface TimeLabel {\n x: number;\n text: string;\n bold: boolean;\n }\n\n const timeTicks = (\n v: Visible | null,\n ctx: CanvasRenderingContext2D,\n ): TimeLabel[] => {\n const count = n();\n if (!count || !v) return [];\n const tf = tfMs();\n const intraday = tf < DAY;\n const offset = options.utcOffset;\n // groups up to the right edge, past the last bar too\n const gEnd = Math.floor(Math.max(0, Math.ceil(right)) / v.size);\n const groupTime = (g: number) => {\n if (g <= v.last) return v.cols.time[g];\n return store.time[count - 1] + (g * v.size - (count - 1)) * tf;\n };\n const candidates: { x: number; weight: number; time: number }[] = [];\n let prev = v.g0 > 0 ? shiftTime(groupTime(v.g0 - 1), offset) : NaN;\n for (let g = v.g0; g <= gEnd; g++) {\n const time = shiftTime(groupTime(g), offset);\n const x = xOf(groupCenter(v, g));\n const weight = boundaryWeight(prev, time);\n // no labels inside a second (tick charts)\n if (x >= -20 && x <= plotW + 20 && weight > 10)\n candidates.push({ x, weight, time });\n prev = time;\n }\n ctx.font = font(theme.fontSize);\n const sample = intraday ? \"00:00\" : \"Sep 30\";\n const gap =\n Math.max(ctx.measureText(sample).width, ctx.measureText(\"2024\").width) +\n 34;\n return pickTicks(candidates, gap)\n .filter((t) => t.x > 8 && t.x < plotW - 8)\n .map((t) => ({\n x: t.x,\n text: tickText(t.time, t.weight, locale, intraday),\n bold: t.weight >= (intraday ? 50 : 60),\n }));\n };\n\n const paneTickText = (pane: Pane, scaled: number) => {\n if (pane.id === PRICE) {\n if (pane.scale.mode === \"percent\")\n return formatPercent(\n scaled,\n locale,\n Math.min(2, stepDecimals(pane.step)),\n );\n return formatPrice(fromScaled(pane.scale, scaled));\n }\n if (pane.study?.compact) return formatVolume(scaled, locale);\n return formatFixed(scaled, Math.min(4, stepDecimals(pane.step)), locale);\n };\n\n /** Text of a value of a study in the legend */\n const studyValueText = (study: Study, value: number) => {\n if (study.overlay && study.type !== \"volume\") return formatPrice(value);\n if (study.compact) return formatVolume(value, locale);\n return formatFixed(\n value,\n study.range ? 2 : Math.max(2, Math.min(6, precision())),\n locale,\n );\n };\n\n // ------------------------------------------------------------ GPU items\n\n const createLayers = (v: Visible, dpr: number): Layer[] => {\n const result: Layer[] = [];\n const cols = v.cols;\n const up = resolve(upCss());\n const down = resolve(downCss());\n const upP = packColor(up);\n const downP = packColor(down);\n const bg = theme.background;\n const metrics = candleMetrics(spacing * v.size * dpr, dpr);\n const X = (g: number) => xOf(groupCenter(v, g)) * dpr;\n const s = style();\n\n const histogramHalf = Math.max(0.5, metrics.body / 2);\n const volumeColors = {\n up: packColor([up[0], up[1], up[2], 0.5]),\n down: packColor([down[0], down[1], down[2], 0.5]),\n };\n\n for (const pane of panes) {\n const top = pane.top * dpr;\n const bottom = (pane.top + pane.height) * dpr;\n const scale = pane.scale;\n const Y = (value: number) => yOf(scale, value) * dpr;\n\n const lineLayer =\n (\n values: (g: number) => number,\n color: Rgba,\n lineWidth: number,\n toY: (value: number) => number = Y,\n ): Layer =>\n (ga, gb, isLive) => {\n const buffer = new LineBuffer(top, bottom);\n for (let g = isLive ? Math.max(v.g0, ga - 1) : ga; g <= gb; g++)\n buffer.push(X(g), toY(values(g)));\n return buffer.count > 1 ? [buffer.item(\"\", 0, color, lineWidth)] : [];\n };\n\n if (pane.id === PRICE) {\n // volume at the bottom of the price pane\n const volumeStudy = studies.find(\n (st) => st.overlay && st.type === \"volume\" && isVisible(st),\n );\n if (volumeStudy && volumeOverlayMax > 0) {\n const h = (bottom - top) * 0.2;\n result.push((ga, gb) => {\n const buffer = new BarBuffer();\n for (let g = ga; g <= gb; g++) {\n const vol = cols.volume[g] / groupBars(v, g);\n if (!(vol > 0)) continue;\n const y = bottom - (vol / volumeOverlayMax) * h;\n const [a, b] = pixelRange(y, bottom);\n buffer.push(\n metrics.snap(X(g)),\n a,\n b,\n cols.close[g] >= cols.open[g]\n ? volumeColors.up\n : volumeColors.down,\n );\n }\n return [buffer.item(\"\", 0, histogramHalf)];\n });\n }\n // comparison series\n for (const c of compares) {\n const base = compareBase(c);\n const color = resolve(c.color);\n result.push(\n lineLayer(\n (g) => groupValue(v, c.values, g),\n color,\n 1.5,\n (value) =>\n yOfScaled(scale, compareScaled(scale, value, base)) * dpr,\n ),\n );\n }\n // the bars\n if (s === \"line\" || s === \"area\" || s === \"baseline\") {\n const lineColor = resolve(PRIMARY);\n if (s === \"area\") {\n result.push((ga, gb, isLive) => {\n const area = new AreaBuffer(top, bottom);\n for (let g = isLive ? Math.max(v.g0, ga - 1) : ga; g <= gb; g++)\n area.push(X(g), Y(cols.close[g]), bottom);\n return area.count > 1 ? [area.item(\"\", 0, lineColor, 0.28)] : [];\n });\n }\n if (s === \"baseline\") {\n const yb = Y(baselinePrice());\n result.push((ga, gb, isLive) => {\n const upArea = new AreaBuffer(top, bottom);\n const downArea = new AreaBuffer(top, bottom);\n const upLine = new LineBuffer(top, bottom);\n const downLine = new LineBuffer(top, bottom);\n let px = NaN;\n let py = NaN;\n const point = (x: number, y: number) => {\n upArea.push(x, Math.min(y, yb), yb);\n downArea.push(x, Math.max(y, yb), yb);\n if (y <= yb) upLine.push(x, y);\n else upLine.break();\n if (y >= yb) downLine.push(x, y);\n else downLine.break();\n };\n for (let g = isLive ? Math.max(v.g0, ga - 1) : ga; g <= gb; g++) {\n const x = X(g);\n const y = Y(cols.close[g]);\n if (finite(py) && (py - yb) * (y - yb) < 0) {\n const t = (yb - py) / (y - py);\n point(px + (x - px) * t, yb);\n }\n point(x, y);\n px = x;\n py = y;\n }\n const out: RenderItem[] = [];\n if (upArea.count > 1)\n out.push(\n upArea.item(\"u\", 0, up, 0.22),\n downArea.item(\"d\", 0, down, 0.22),\n );\n if (upLine.count > 1) out.push(upLine.item(\"ul\", 0, up, 2));\n if (downLine.count > 1) out.push(downLine.item(\"dl\", 0, down, 2));\n return out;\n });\n } else {\n result.push(lineLayer((g) => cols.close[g], lineColor, 2));\n }\n } else {\n const hollow = s === \"hollowCandles\";\n const ohlc = s === \"bars\";\n const wick = metrics.wick;\n const body = metrics.body;\n result.push((ga, gb) => {\n const wicks = new BarBuffer();\n const bodies = new BarBuffer();\n const caps = new BarBuffer();\n const ticks = new BarBuffer();\n const tick = Math.max(wick, Math.round((body - wick) / 2));\n for (let g = ga; g <= gb; g++) {\n const o = cols.open[g];\n const h = cols.high[g];\n const l = cols.low[g];\n const c = cols.close[g];\n if (!finite(o) || !finite(c)) continue;\n const rising = hollow\n ? c >= (g > 0 ? cols.close[g - 1] : o)\n : c >= o;\n const color = rising ? upP : downP;\n const cx = metrics.snap(X(g));\n const [wt, wb] = pixelRange(Y(h), Y(l));\n if (ohlc) {\n const range = clampRange(wt, wb, top, bottom);\n if (range) wicks.push(cx, range[0], range[1], color);\n for (const [value, side] of [\n [o, -1],\n [c, 1],\n ] as const) {\n const y = Math.round(Y(value) - wick / 2);\n if (y < top || y + wick > bottom) continue;\n ticks.push(\n cx + side * (wick / 2 + tick / 2),\n y,\n y + wick,\n color,\n );\n }\n continue;\n }\n const [bt, bb] = pixelRange(Y(o), Y(c));\n if (body <= wick) {\n const range = clampRange(wt, wb, top, bottom);\n if (range) wicks.push(cx, range[0], range[1], color);\n continue;\n }\n if (hollow && c > o) {\n const segments: [number, number][] = [\n [wt, bt],\n [bb, wb],\n ];\n for (const [a, b] of segments) {\n const range = b > a ? clampRange(a, b, top, bottom) : null;\n if (range) wicks.push(cx, range[0], range[1], color);\n }\n const edges = clampRange(bt, bb, top, bottom);\n if (edges) {\n wicks.push(\n cx - body / 2 + wick / 2,\n edges[0],\n edges[1],\n color,\n );\n wicks.push(\n cx + body / 2 - wick / 2,\n edges[0],\n edges[1],\n color,\n );\n }\n for (const y of [bt, bb - wick]) {\n if (y >= top && y + wick <= bottom)\n caps.push(cx, y, y + wick, color);\n }\n continue;\n }\n const range = clampRange(wt, wb, top, bottom);\n if (range) wicks.push(cx, range[0], range[1], color);\n const box = clampRange(bt, bb, top, bottom);\n if (box) bodies.push(cx, box[0], box[1], color);\n }\n const items: RenderItem[] = [wicks.item(\"w\", 0, wick / 2)];\n if (bodies.count) items.push(bodies.item(\"b\", 0, body / 2));\n if (caps.count) items.push(caps.item(\"c\", 0, body / 2));\n if (ticks.count) items.push(ticks.item(\"t\", 0, tick / 2));\n return items;\n });\n }\n }\n\n // indicators of the pane\n const paneStudies =\n pane.id === PRICE\n ? studies.filter((st) => st.overlay && st.type !== \"volume\")\n : pane.study\n ? [pane.study]\n : [];\n for (const study of paneStudies) {\n if (!isVisible(study)) continue;\n for (const out of study.outputs) {\n if (out.kind === \"volume\") {\n const y0 = Y(0);\n result.push((ga, gb) => {\n const buffer = new BarBuffer();\n for (let g = ga; g <= gb; g++) {\n const vol = cols.volume[g] / groupBars(v, g);\n if (!(vol > 0)) continue;\n const range = clampRange(\n ...pixelRange(Y(vol), y0),\n top,\n bottom,\n );\n if (range)\n buffer.push(\n metrics.snap(X(g)),\n range[0],\n range[1],\n cols.close[g] >= cols.open[g]\n ? volumeColors.up\n : volumeColors.down,\n );\n }\n return [buffer.item(\"\", 0, histogramHalf)];\n });\n } else if (out.kind === \"histogram\") {\n const y0 = Y(0);\n const strong = { up: upP, down: downP };\n const faded = {\n up: packColor(mix(bg, up, 0.45)),\n down: packColor(mix(bg, down, 0.45)),\n };\n result.push((ga, gb) => {\n const buffer = new BarBuffer();\n for (let g = ga; g <= gb; g++) {\n const value = groupValue(v, out.values, g);\n if (!finite(value)) continue;\n const prev = g > 0 ? groupValue(v, out.values, g - 1) : value;\n const color =\n value >= 0\n ? value >= prev\n ? strong.up\n : faded.up\n : value <= prev\n ? strong.down\n : faded.down;\n const range = clampRange(\n ...pixelRange(Y(value), y0),\n top,\n bottom,\n );\n if (range)\n buffer.push(metrics.snap(X(g)), range[0], range[1], color);\n }\n return [buffer.item(\"\", 0, histogramHalf)];\n });\n } else {\n result.push(\n lineLayer(\n (g) => groupValue(v, out.values, g),\n resolve(out.color),\n out.width,\n ),\n );\n }\n }\n }\n }\n return result;\n };\n\n /** Builds the items of the main bars or of the last group */\n const runLayer = (\n fn: Layer,\n index: number,\n v: Visible,\n isLive: boolean,\n ): RenderItem[] => {\n const lastMain = Math.min(v.g1, v.last - 1);\n const items = isLive\n ? v.last >= v.g0 && v.last <= v.g1\n ? fn(v.last, v.last, true)\n : []\n : lastMain >= v.g0\n ? fn(v.g0, lastMain, false)\n : [];\n const version = ++itemVersion;\n return items.map((item, k) => ({\n ...item,\n key: `L${index}:${k}:${item.kind}:${item.key}${isLive ? \":live\" : \"\"}`,\n version,\n }));\n };\n\n const renderData = (v: Visible | null, dpr: number) => {\n if (!renderer) return;\n const canvas = renderer.canvas;\n styleElement(canvas, {\n left: \"0px\",\n top: \"0px\",\n width: `${plotW}px`,\n height: `${plotH}px`,\n });\n const bw = Math.max(1, Math.round(plotW * dpr));\n const bh = Math.max(1, Math.round(plotH * dpr));\n if (canvas.width !== bw || canvas.height !== bh) renderer.resize(bw, bh);\n if (v) {\n const key = [\n bw,\n bh,\n dpr,\n spacing,\n right,\n v.level,\n style(),\n dataVersion,\n themeVersion,\n optionsVersion,\n volumeOverlayMax,\n style() === \"baseline\" ? baselinePrice() : 0,\n ...panes.map(\n (p) =>\n `${p.id}:${p.top}:${p.height}:${p.scale.min}:${p.scale.max}:${p.scale.base}:${p.scale.mode}`,\n ),\n ...studies.map((st) => `${st.id}:${isVisible(st)}`),\n ].join(\"|\");\n if (key !== geomKey) {\n geomKey = key;\n builtTail = tailVersion;\n layers = createLayers(v, dpr).map((fn) => ({ fn, main: [], live: [] }));\n layers.forEach((l, i) => {\n l.main = runLayer(l.fn, i, v, false);\n l.live = runLayer(l.fn, i, v, true);\n });\n } else if (builtTail !== tailVersion) {\n builtTail = tailVersion;\n layers.forEach((l, i) => {\n l.live = runLayer(l.fn, i, v, true);\n });\n }\n } else {\n layers = [];\n geomKey = \"\";\n }\n const items = layers.flatMap((l) => [...l.main, ...l.live]);\n renderer.render(items, {\n transform: { xScale: 2 / bw, xOffset: -1, yScale: -2 / bh, yOffset: 1 },\n width: bw,\n height: bh,\n dpr,\n });\n };\n\n // -------------------------------------------------------- 2D painting\n\n const sizeCanvas = (canvas: HTMLCanvasElement, dpr: number) => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n };\n\n const roundRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n ) => {\n ctx.beginPath();\n if (typeof ctx.roundRect === \"function\") ctx.roundRect(x, y, w, h, r);\n else ctx.rect(x, y, w, h);\n };\n\n const paintBackground = (\n ctx: CanvasRenderingContext2D,\n v: Visible | null,\n ticks: TimeLabel[],\n ) => {\n const grid = toCss(theme.grid);\n const showGrid = options.grid !== false;\n ctx.lineWidth = 1;\n if (showGrid) {\n ctx.strokeStyle = grid;\n ctx.beginPath();\n for (const t of ticks) {\n const x = Math.round(t.x) + 0.5;\n ctx.moveTo(x, 0);\n ctx.lineTo(x, plotH);\n }\n for (const pane of panes) {\n for (const t of pane.ticks) {\n const y = Math.round(yOfScaled(pane.scale, t)) + 0.5;\n if (y < pane.top + 2 || y > pane.top + pane.height - 2) continue;\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n }\n }\n ctx.stroke();\n }\n // watermark\n if (options.watermark) {\n const price = panes[0];\n ctx.save();\n ctx.font = font(Math.min(56, Math.max(22, plotW / 14)), 700);\n ctx.fillStyle = toCss(theme.text, 0.07);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(options.watermark, plotW / 2, price.top + price.height / 2);\n ctx.restore();\n }\n // bands of the indicator panes, fill of the Bollinger bands\n for (const pane of panes) {\n const study = pane.study;\n if (study?.bands && isVisible(study)) {\n const color = resolve(study.outputs[0]?.color ?? PRIMARY);\n const ys = study.bands.map((b) => Math.round(yOf(pane.scale, b)) + 0.5);\n if (study.type === \"rsi\" && ys.length === 2) {\n ctx.fillStyle = toCss(color, 0.07);\n ctx.fillRect(\n 0,\n Math.min(ys[0], ys[1]),\n plotW,\n Math.abs(ys[1] - ys[0]),\n );\n }\n ctx.save();\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = toCss(theme.textMuted, 0.45);\n ctx.beginPath();\n for (const y of ys) {\n if (y < pane.top || y > pane.top + pane.height) continue;\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n }\n ctx.stroke();\n ctx.restore();\n }\n }\n if (v) {\n const price = panes[0];\n for (const study of studies) {\n if (study.type !== \"boll\" || !study.fill || !isVisible(study)) continue;\n const [ui, li] = study.fill;\n const upper = study.outputs[ui].values;\n const lower = study.outputs[li].values;\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, price.top, plotW, price.height);\n ctx.clip();\n ctx.fillStyle = css(study.outputs[ui].color, 0.07);\n ctx.beginPath();\n let started = false;\n const back: [number, number][] = [];\n const flush = () => {\n for (let k = back.length - 1; k >= 0; k--)\n ctx.lineTo(back[k][0], back[k][1]);\n if (started) ctx.closePath();\n back.length = 0;\n started = false;\n };\n for (let g = v.g0; g <= v.g1; g++) {\n const a = groupValue(v, upper, g);\n const b = groupValue(v, lower, g);\n if (!finite(a) || !finite(b)) {\n flush();\n continue;\n }\n const x = xOf(groupCenter(v, g));\n const ya = yOf(price.scale, a);\n if (started) ctx.lineTo(x, ya);\n else ctx.moveTo(x, ya);\n started = true;\n back.push([x, yOf(price.scale, b)]);\n }\n flush();\n ctx.fill();\n ctx.restore();\n }\n }\n // separators and axis borders\n ctx.strokeStyle = toCss(theme.axis);\n ctx.beginPath();\n for (const pane of panes.slice(1)) {\n const y = Math.round(pane.top) + 0.5;\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n }\n ctx.moveTo(Math.round(plotW) + 0.5, 0);\n ctx.lineTo(Math.round(plotW) + 0.5, height);\n ctx.moveTo(0, Math.round(plotH) + 0.5);\n ctx.lineTo(width, Math.round(plotH) + 0.5);\n ctx.stroke();\n };\n\n /** Label on the price axis; returns its vertical extent */\n const axisLabel = (\n ctx: CanvasRenderingContext2D,\n y: number,\n text: string,\n fill: string,\n textColor: string,\n second?: string,\n ) => {\n const h = second ? 32 : 18;\n const top = clamp(Math.round(y - 9), 0, plotH - h);\n roundRect(ctx, plotW + 1, top, axisW - 2, h, 3);\n ctx.fillStyle = fill;\n ctx.fill();\n ctx.fillStyle = textColor;\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.font = font(theme.fontSize, 500);\n ctx.fillText(text, plotW + 7, top + 9.5);\n if (second) {\n ctx.font = font(theme.fontSize - 1);\n ctx.fillText(second, plotW + 7, top + 24);\n }\n };\n\n const priceAxisText = (value: number) =>\n panes[0]?.scale.mode === \"percent\"\n ? formatPercent(toScaled(panes[0].scale, value), locale)\n : formatPrice(value);\n\n const lineColor = (line: TradingPriceLine) => {\n if (line.color) return css(line.color);\n const kind = line.kind ?? \"line\";\n if (kind === \"takeProfit\") return css(upCss());\n if (kind === \"stopLoss\") return css(downCss());\n if (kind === \"alert\") return css(WARNING);\n if (kind === \"line\") return css(PRIMARY);\n return css(line.side === \"sell\" ? downCss() : upCss());\n };\n\n const linePrice = (line: TradingPriceLine) =>\n lineOverrides.get(line.id) ?? line.price;\n\n const crosshairState = () => {\n if (!vis || !panes.length) return null;\n if (keyboardIndex !== null) {\n const index = keyboardIndex;\n const bar = index >= 0 && index < n() ? display().close[index] : NaN;\n return { index, pane: panes[0], y: yOf(panes[0].scale, bar), price: bar };\n }\n if (!pointer || pointer.x > plotW || pointer.y > plotH) return null;\n const pane = paneAt(pointer.y);\n if (!pane) return null;\n const index = Math.round(indexAt(pointer.x));\n let y = pointer.y;\n let price = valueAt(pane.scale, y);\n if (\n pane.id === PRICE &&\n options.crosshair !== \"free\" &&\n index >= 0 &&\n index < n() &&\n tool === \"cursor\"\n ) {\n const d = display();\n let best = Infinity;\n for (const value of [\n d.open[index],\n d.high[index],\n d.low[index],\n d.close[index],\n ]) {\n const yy = yOf(pane.scale, value);\n if (Math.abs(yy - pointer.y) < best) {\n best = Math.abs(yy - pointer.y);\n y = yy;\n price = value;\n }\n }\n }\n return { index, pane, y, price };\n };\n\n const drawingMapper = (): DrawingMapper | null => {\n const price = panes[0];\n if (!price) return null;\n return {\n x: xOf,\n y: (p) => yOf(price.scale, p),\n index: indexOfTimeExt,\n left: 0,\n right: plotW,\n top: price.top,\n bottom: price.top + price.height,\n };\n };\n\n const formatSpan = (bars: number, ms: number) => {\n const l = labels();\n const abs = Math.abs(ms);\n const parts: string[] = [];\n const days = Math.floor(abs / DAY);\n const hours = Math.floor((abs % DAY) / HOUR);\n const minutes = Math.floor((abs % HOUR) / MINUTE);\n if (days) parts.push(fill(l.days, { count: days }));\n if (hours) parts.push(fill(l.hours, { count: hours }));\n if (minutes && !days) parts.push(fill(l.minutes, { count: minutes }));\n return `${fill(labels().bars, { count: bars })}, ${parts.join(\" \") || fill(l.minutes, { count: 0 })}`;\n };\n\n const paintForeground = (\n ctx: CanvasRenderingContext2D,\n v: Visible | null,\n ticks: TimeLabel[],\n ) => {\n const price = panes[0];\n if (!price) return;\n const count = n();\n const text = toCss(theme.text);\n const muted = toCss(theme.textMuted);\n const bgCss = toCss(theme.background);\n const upC = css(upCss());\n const downC = css(downCss());\n\n // ---- price pane contents (clipped)\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, price.top, plotW, price.height);\n ctx.clip();\n\n // high / low of the visible bars\n if (\n v &&\n options.highLowMarkers !== false &&\n style() !== \"line\" &&\n style() !== \"area\" &&\n style() !== \"baseline\"\n ) {\n let hi = -Infinity;\n let lo = Infinity;\n let hiG = -1;\n let loG = -1;\n for (let g = v.s0; g <= v.s1; g++) {\n if (v.cols.high[g] > hi) {\n hi = v.cols.high[g];\n hiG = g;\n }\n if (v.cols.low[g] < lo) {\n lo = v.cols.low[g];\n loG = g;\n }\n }\n ctx.font = font(theme.fontSize);\n ctx.fillStyle = muted;\n ctx.strokeStyle = muted;\n ctx.lineWidth = 1;\n for (const [g, value, below] of [\n [hiG, hi, false],\n [loG, lo, true],\n ] as const) {\n if (g < 0 || !finite(value)) continue;\n const x = xOf(groupCenter(v, g));\n const y = yOf(price.scale, value) + (below ? 9 : -9);\n const leftSide = x > plotW * 0.6;\n const label = formatPrice(value);\n ctx.textBaseline = \"middle\";\n ctx.textAlign = leftSide ? \"right\" : \"left\";\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + (leftSide ? -14 : 14), y);\n ctx.stroke();\n ctx.fillText(label, x + (leftSide ? -17 : 17), y);\n }\n }\n\n // trade markers\n if (v && options.markers?.length) {\n const stack = new Map<string, number>();\n ctx.font = font(theme.fontSize, 600);\n ctx.textAlign = \"center\";\n const many = options.markers.length > 400;\n for (const marker of options.markers) {\n const index = indexOfTimeExt(marker.time);\n if (index < 0 || index > count - 1) continue;\n const g = Math.floor(index / v.size);\n if (g < v.g0 || g > v.g1) continue;\n const x = Math.round(xOf(groupCenter(v, g)));\n const sell = marker.side === \"sell\";\n const color = marker.color ? css(marker.color) : sell ? downC : upC;\n const key = `${g}:${sell}`;\n const offset = stack.get(key) ?? 0;\n stack.set(key, offset + (marker.text && !many ? 30 : 16));\n const anchor = yOf(price.scale, sell ? v.cols.high[g] : v.cols.low[g]);\n const dir = sell ? -1 : 1;\n const tip = anchor + dir * (6 + offset);\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x, tip);\n ctx.lineTo(x - 5.5, tip + dir * 7);\n ctx.lineTo(x - 2, tip + dir * 7);\n ctx.lineTo(x - 2, tip + dir * 12);\n ctx.lineTo(x + 2, tip + dir * 12);\n ctx.lineTo(x + 2, tip + dir * 7);\n ctx.lineTo(x + 5.5, tip + dir * 7);\n ctx.closePath();\n ctx.fill();\n if (marker.text && !many) {\n ctx.textBaseline = sell ? \"bottom\" : \"top\";\n ctx.fillText(marker.text, x, tip + dir * 14);\n }\n if (marker.price !== undefined && finite(marker.price)) {\n ctx.beginPath();\n ctx.arc(x, yOf(price.scale, marker.price), 3, 0, Math.PI * 2);\n ctx.fill();\n ctx.lineWidth = 1.5;\n ctx.strokeStyle = bgCss;\n ctx.stroke();\n }\n }\n }\n\n // drawings\n const mapper = drawingMapper();\n if (mapper) {\n const context = (drawing: TradingDrawing) => ({\n color: css(drawing.color ?? PRIMARY),\n text,\n background: bgCss,\n up: upC,\n down: downC,\n font: font(theme.fontSize, 500),\n formatPrice,\n formatPercent: (value: number) => formatPercent(value, locale),\n formatSpan,\n textOn,\n });\n for (const drawing of drawings) {\n paintDrawing(ctx, drawing, mapper, context(drawing), {\n selected: drawing.id === selected,\n hovered: drawing.id === hovered,\n });\n }\n if (draft)\n paintDrawing(ctx, draft, mapper, context(draft), {\n selected: true,\n hovered: false,\n });\n }\n\n // price lines (orders, positions, TP / SL, alerts)\n const lastClose = count ? store.close[count - 1] : NaN;\n for (const line of options.priceLines ?? []) {\n const p = linePrice(line);\n const y = Math.round(yOf(price.scale, p)) + 0.5;\n if (!finite(y) || y < price.top || y > price.top + price.height) continue;\n const color = lineColor(line);\n const kind = line.kind ?? \"line\";\n const lineStyle =\n line.lineStyle ??\n (kind === \"position\" || kind === \"line\" ? \"solid\" : \"dashed\");\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth =\n hoveredLine === line.id ||\n (gesture?.kind === \"order\" && gesture.line.id === line.id)\n ? 1.5\n : 1;\n setDash(ctx, lineStyle, 1);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n ctx.stroke();\n ctx.restore();\n // label: [grip] title | quantity | profit\n const titleKey = PRICE_LINE_TITLES[kind];\n const title = line.title ?? (titleKey ? labels()[titleKey] : \"\");\n const parts: { text: string; fill: string; color: string }[] = [];\n if (title) parts.push({ text: title, fill: color, color: textOn(color) });\n if (line.quantity !== undefined && line.quantity !== \"\")\n parts.push({ text: String(line.quantity), fill: bgCss, color });\n if (\n kind === \"position\" &&\n typeof line.quantity === \"number\" &&\n finite(lastClose)\n ) {\n const pnl =\n (lastClose - p) * line.quantity * (line.side === \"sell\" ? -1 : 1);\n const pnlFill = pnl >= 0 ? upC : downC;\n parts.push({\n text: `${pnl >= 0 ? \"+\" : \"−\"}${formatPrice(Math.abs(pnl))}`,\n fill: pnlFill,\n color: textOn(pnlFill),\n });\n }\n if (!parts.length && !line.draggable) continue;\n ctx.font = font(theme.fontSize, 600);\n const widths = parts.map((part) => ctx.measureText(part.text).width + 12);\n const grip = line.draggable ? 14 : 0;\n const total = widths.reduce((a, b) => a + b, 0) + grip;\n let x = Math.round(plotW - total - 56);\n const top = Math.round(y - 9.5);\n roundRect(ctx, x - 0.5, top - 0.5, total + 1, 19, 3);\n ctx.fillStyle = bgCss;\n ctx.fill();\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n ctx.setLineDash([]);\n ctx.stroke();\n if (grip) {\n ctx.fillStyle = color;\n for (let k = 0; k < 3; k++)\n ctx.fillRect(x + 4, top + 5 + k * 3.5, 6, 1.5);\n x += grip;\n }\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"center\";\n parts.forEach((part, k) => {\n if (part.fill !== bgCss) {\n ctx.fillStyle = part.fill;\n ctx.fillRect(x, top, widths[k], 18);\n }\n ctx.fillStyle = part.color;\n ctx.fillText(part.text, x + widths[k] / 2, top + 9.5);\n x += widths[k];\n });\n }\n\n // last price line\n const lastLine = options.lastPriceLine !== false && count > 0;\n const lastUp = count > 0 && store.close[count - 1] >= store.open[count - 1];\n const lastColor = lastUp ? upC : downC;\n if (lastLine) {\n const y = Math.round(yOf(price.scale, lastClose)) + 0.5;\n ctx.save();\n ctx.strokeStyle = lastColor;\n ctx.setLineDash([1, 2]);\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n ctx.stroke();\n ctx.restore();\n }\n ctx.restore();\n\n // price axis ticks, except under the labels drawn over the axis\n const covered: number[] = [];\n for (const line of options.priceLines ?? [])\n covered.push(yOf(price.scale, linePrice(line)));\n for (const drawing of drawings) {\n if (drawing.type === \"horizontalLine\" && drawing.points[0])\n covered.push(yOf(price.scale, drawing.points[0].price));\n }\n if (lastLine)\n covered.push(yOf(price.scale, lastClose) + (options.countdown ? 7 : 0));\n ctx.font = font(theme.fontSize);\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n ctx.fillStyle = muted;\n for (const pane of panes) {\n for (const t of pane.ticks) {\n const y = yOfScaled(pane.scale, t);\n if (y < pane.top + 8 || y > pane.top + pane.height - 8) continue;\n const gap = options.countdown ? 18 : 14;\n if (pane.id === PRICE && covered.some((c) => Math.abs(c - y) < gap))\n continue;\n ctx.fillText(paneTickText(pane, t), plotW + 8, y);\n }\n }\n // time axis ticks\n ctx.textAlign = \"center\";\n for (const t of ticks) {\n ctx.font = font(theme.fontSize, t.bold ? 600 : 400);\n ctx.fillStyle = t.bold ? text : muted;\n ctx.fillText(t.text, t.x, plotH + TIME_AXIS / 2);\n }\n\n // labels of the price lines and drawings\n for (const line of options.priceLines ?? []) {\n const p = linePrice(line);\n const y = yOf(price.scale, p);\n if (!finite(y) || y < price.top || y > price.top + price.height) continue;\n const fill = lineColor(line);\n axisLabel(ctx, y, priceAxisText(p), fill, textOn(fill));\n }\n for (const drawing of drawings) {\n if (drawing.type !== \"horizontalLine\" || !drawing.points[0]) continue;\n const p = drawing.points[0].price;\n const y = yOf(price.scale, p);\n if (y < price.top || y > price.top + price.height) continue;\n const fill = css(drawing.color ?? PRIMARY);\n axisLabel(ctx, y, priceAxisText(p), fill, textOn(fill));\n }\n // last price label (with the countdown)\n if (lastLine) {\n let second: string | undefined;\n if (options.countdown) {\n const tf = timeframe();\n const start = store.time[count - 1];\n let end = start + tf.ms;\n if (tf.unit === \"month\") {\n const date = new Date(start);\n end = Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth() + tf.count,\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n );\n }\n second = formatCountdown(end - Date.now(), labels());\n }\n axisLabel(\n ctx,\n yOf(price.scale, lastClose),\n priceAxisText(lastClose),\n lastColor,\n textOn(lastColor),\n second,\n );\n }\n\n // crosshair\n const cross = crosshairState();\n if (cross && v) {\n const x = Math.round(xOf(cross.index)) + 0.5;\n ctx.save();\n ctx.strokeStyle = toCss(theme.textMuted, 0.75);\n ctx.lineWidth = 1;\n ctx.setLineDash([4, 3]);\n ctx.beginPath();\n if (x >= 0 && x <= plotW) {\n ctx.moveTo(x, 0);\n ctx.lineTo(x, plotH);\n }\n const y = Math.round(cross.y) + 0.5;\n if (\n finite(y) &&\n y >= cross.pane.top &&\n y <= cross.pane.top + cross.pane.height\n ) {\n ctx.moveTo(0, y);\n ctx.lineTo(plotW, y);\n }\n ctx.stroke();\n ctx.restore();\n const labelBg = toCss(theme.text);\n if (\n finite(cross.y) &&\n cross.y >= cross.pane.top &&\n cross.y <= cross.pane.top + cross.pane.height\n ) {\n const scaled = scaledAt(cross.pane.scale, cross.y);\n const textValue =\n cross.pane.id === PRICE\n ? priceAxisText(fromScaled(cross.pane.scale, scaled))\n : paneTickText(cross.pane, scaled);\n axisLabel(ctx, cross.y, textValue, labelBg, bgCss);\n }\n if (x >= 0 && x <= plotW && count) {\n const label = formatCrosshairTime(\n shiftTime(timeAt(cross.index), options.utcOffset),\n tfMs(),\n locale,\n );\n ctx.font = font(theme.fontSize, 500);\n const w = ctx.measureText(label).width + 16;\n const left = clamp(x - w / 2, 0, width - w);\n roundRect(ctx, left, plotH + 3, w, 21, 3);\n ctx.fillStyle = labelBg;\n ctx.fill();\n ctx.fillStyle = bgCss;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(label, left + w / 2, plotH + 14);\n }\n }\n };\n\n // -------------------------------------------------------------- legends\n\n let legendKey = \"\";\n const legendRows = new Map<string, LegendRow>();\n const legendBoxes = new Map<string, HTMLDivElement>();\n\n const legendBox = (id: string) => {\n let box = legendBoxes.get(id);\n if (!box) {\n box = make(\"div\", {\n position: \"absolute\",\n left: \"8px\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: \"1px\",\n maxWidth: \"calc(100% - 16px)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n fontVariantNumeric: \"tabular-nums\",\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n });\n legends.appendChild(box);\n legendBoxes.set(id, box);\n }\n return box;\n };\n\n const legendRow = (\n box: HTMLDivElement,\n title: string,\n study: Study | null,\n outputs: number,\n ) => {\n const row = make(\"div\", {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"0 4px\",\n marginLeft: \"-4px\",\n borderRadius: \"4px\",\n background:\n \"color-mix(in srgb, var(--surface-color, var(--background-color, #fff)) 86%, transparent)\",\n });\n let button: HTMLButtonElement | null = null;\n if (study) {\n button = make(\"button\", {\n all: \"unset\",\n cursor: \"pointer\",\n pointerEvents: \"auto\",\n color: \"var(--text-color, #1f2937)\",\n fontWeight: \"500\",\n borderRadius: \"3px\",\n });\n button.type = \"button\";\n button.textContent = title;\n button.setAttribute(\n \"aria-label\",\n fill(labels().toggleIndicator, { name: title }),\n );\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n const next = !isVisible(study);\n visibility.set(study.id, next);\n emit(\"indicatorToggle\", { id: study.id, visible: next });\n updateLegends();\n invalidate();\n });\n button.addEventListener(\"pointerdown\", (event) =>\n event.stopPropagation(),\n );\n row.appendChild(button);\n } else if (title) {\n const label = make(\"span\", { fontWeight: \"600\" });\n label.textContent = title;\n row.appendChild(label);\n }\n const values: HTMLSpanElement[] = [];\n for (let i = 0; i < outputs; i++) {\n const span = make(\"span\", {});\n row.appendChild(span);\n values.push(span);\n }\n box.appendChild(row);\n return { row, values, button };\n };\n\n const buildLegends = () => {\n legendRows.clear();\n for (const box of legendBoxes.values()) box.remove();\n legendBoxes.clear();\n if (options.legend === false) return;\n const priceBox = legendBox(PRICE);\n const head = [\n options.symbol,\n options.labels?.timeframe ??\n (typeof options.timeframe === \"string\" ? options.timeframe : \"\"),\n ]\n .filter(Boolean)\n .join(\" · \");\n legendRows.set(\"ohlc\", legendRow(priceBox, head, null, 1));\n for (const study of studies) {\n if (study.overlay && study.type === \"volume\") {\n legendRows.set(study.id, legendRow(priceBox, titleOf(study), study, 1));\n } else if (study.overlay) {\n legendRows.set(\n study.id,\n legendRow(priceBox, titleOf(study), study, study.outputs.length),\n );\n }\n }\n for (const c of compares)\n legendRows.set(`compare:${c.id}`, legendRow(priceBox, \"\", null, 1));\n for (const study of studies) {\n if (study.overlay) continue;\n legendRows.set(\n study.id,\n legendRow(\n legendBox(study.id),\n titleOf(study),\n study,\n study.outputs.length,\n ),\n );\n }\n };\n\n /** Legend title: indicator abbreviations, but a word for the volume */\n const titleOf = (study: Study) =>\n study.type === \"volume\" ? labels().volume : study.title;\n\n const setSpan = (\n span: HTMLSpanElement | undefined,\n text: string,\n color?: string,\n ) => {\n if (!span) return;\n if (span.textContent !== text) span.textContent = text;\n const c = color ?? \"\";\n if (span.style.color !== c) span.style.color = c;\n };\n\n const updateLegends = () => {\n const key = [\n options.legend !== false,\n options.symbol,\n options.timeframe,\n ...studies.map((s) => `${s.id}:${titleOf(s)}:${s.outputs.length}`),\n ...compares.map((c) => c.id),\n texts.toggleIndicator,\n options.labels?.timeframe,\n ].join(\"|\");\n if (key !== legendKey) {\n legendKey = key;\n buildLegends();\n }\n if (options.legend === false) return;\n for (const pane of panes) {\n const box = legendBoxes.get(pane.id);\n if (box) box.style.top = `${pane.top + 6}px`;\n }\n const count = n();\n const cross = crosshairState();\n const index = clamp(\n cross && cross.index >= 0 && cross.index < count\n ? cross.index\n : count - 1,\n 0,\n Math.max(0, count - 1),\n );\n const l = labels();\n const ohlc = legendRows.get(\"ohlc\");\n const upC = css(upCss());\n const downC = css(downCss());\n if (ohlc && count) {\n const d = display();\n const o = d.open[index];\n const c = d.close[index];\n const prevClose = index > 0 ? d.close[index - 1] : o;\n const change = c - prevClose;\n const color = c >= o ? upC : downC;\n const span = ohlc.values[0];\n const html = [\n [l.open, d.open[index]],\n [l.high, d.high[index]],\n [l.low, d.low[index]],\n [l.close, c],\n ]\n .map(\n ([name, value]) =>\n `<span style=\"color:var(--text-secondary-color,#6b7280)\">${escapeHtml(String(name))}</span><span style=\"color:${color}\">${escapeHtml(formatPrice(value as number))}</span>`,\n )\n .join(\" \");\n const pct = prevClose ? (change / prevClose) * 100 : NaN;\n const changeName = l.change\n ? `<span style=\"color:var(--text-secondary-color,#6b7280)\">${escapeHtml(l.change)}</span>`\n : \"\";\n const changeHtml = `${changeName}<span style=\"color:${change >= 0 ? upC : downC}\">${change >= 0 ? \"+\" : \"−\"}${escapeHtml(formatPrice(Math.abs(change)))} (${escapeHtml(formatPercent(pct, locale))})</span>`;\n const vol = store.hasVolume\n ? ` <span style=\"color:var(--text-secondary-color,#6b7280)\">${escapeHtml(l.volume)}</span>${escapeHtml(formatVolume(store.volume[index], locale))}`\n : \"\";\n const next = `${html} ${changeHtml}${vol}`;\n if (span && span.dataset.html !== next) {\n span.innerHTML = next;\n span.dataset.html = next;\n span.style.display = \"inline-flex\";\n span.style.gap = \"4px\";\n span.style.flexWrap = \"wrap\";\n }\n }\n for (const study of studies) {\n const row = legendRows.get(study.id);\n if (!row) continue;\n const shown = isVisible(study);\n row.row.style.opacity = shown ? \"1\" : \"0.5\";\n if (row.button) {\n row.button.setAttribute(\"aria-pressed\", String(shown));\n row.button.style.textDecoration = shown ? \"none\" : \"line-through\";\n }\n const slots = study.outputs.length;\n study.outputs.forEach((out, i) => {\n // the MACD histogram (drawn first, under the lines) is listed last\n const span =\n row.values[study.type === \"macd\" ? (i + slots - 1) % slots : i];\n if (!shown || !count) {\n setSpan(span, \"\");\n return;\n }\n if (out.kind === \"volume\") {\n const c = store.close[index] >= store.open[index] ? upC : downC;\n setSpan(span, formatVolume(store.volume[index], locale), c);\n return;\n }\n const value = out.values[index];\n let color = out.color ? css(out.color) : undefined;\n if (out.kind === \"histogram\") color = value >= 0 ? upC : downC;\n const prefix =\n study.outputs.length > 1 && study.type !== \"boll\"\n ? `${out.label} `\n : \"\";\n setSpan(span, `${prefix}${studyValueText(study, value)}`, color);\n });\n }\n for (const c of compares) {\n const row = legendRows.get(`compare:${c.id}`);\n if (!row) continue;\n const value = c.values[index];\n const base = compareBase(c);\n const pct = finite(base) ? (value / base - 1) * 100 : NaN;\n setSpan(\n row.values[0],\n `${c.name} ${formatPrice(value)} ${formatPercent(pct, locale)}`,\n css(c.color),\n );\n }\n };\n\n const escapeHtml = (text: string) =>\n text.replace(/[&<>\"]/g, (ch) =>\n ch === \"&\"\n ? \"&\"\n : ch === \"<\"\n ? \"<\"\n : ch === \">\"\n ? \">\"\n : \""\",\n );\n\n // ---------------------------------------------------------------- frame\n\n const invalidate = () => {\n if (destroyed || frameId) return;\n frameId = win?.requestAnimationFrame\n ? win.requestAnimationFrame(frame)\n : (setTimeout(() => frame(Date.now()), 16) as unknown as number);\n };\n\n const animate = (now: number) => {\n let active = false;\n if (scrollAnim) {\n const t = Math.min(1, (now - scrollAnim.start) / 320);\n const eased = 1 - (1 - t) ** 3;\n right = scrollAnim.from + (scrollAnim.to - scrollAnim.from) * eased;\n if (t >= 1) scrollAnim = null;\n else active = true;\n }\n if (kinetic) {\n const dt = Math.min(64, now - kinetic.t);\n kinetic.t = now;\n const before = right;\n right -= (kinetic.v * dt) / spacing;\n kinetic.v *= Math.exp(-dt / 320);\n clampView();\n if (Math.abs(kinetic.v) < 0.02 || right === before) kinetic = null;\n else active = true;\n }\n return active;\n };\n\n const measureAxis = (ctx: CanvasRenderingContext2D) => {\n ctx.font = font(theme.fontSize, 500);\n let widest = 0;\n for (const pane of panes) {\n for (const t of pane.ticks)\n widest = Math.max(widest, ctx.measureText(paneTickText(pane, t)).width);\n }\n const count = n();\n if (count) {\n widest = Math.max(\n widest,\n ctx.measureText(priceAxisText(store.close[count - 1])).width,\n );\n if (options.countdown)\n widest = Math.max(widest, ctx.measureText(\"00:00:00\").width);\n }\n const wanted = Math.max(MIN_AXIS, Math.ceil(widest + 18));\n // shrink only when clearly narrower (no jitter while the price moves)\n if (wanted > axisW || wanted < axisW - 12) axisW = wanted;\n };\n\n function frame(now?: number) {\n frameId = 0;\n if (destroyed) return;\n width = root.clientWidth;\n height = root.clientHeight;\n if (width <= 0 || height <= 0) return;\n const time = now ?? Date.now();\n const animating = animate(\n typeof performance !== \"undefined\" ? performance.now() : time,\n );\n const dpr = win?.devicePixelRatio || 1;\n syncDerived();\n sizeCanvas(background, dpr);\n sizeCanvas(foreground, dpr);\n const bg = background.getContext(\"2d\");\n const fg = foreground.getContext(\"2d\");\n plotH = Math.max(1, height - TIME_AXIS);\n for (let pass = 0; pass < 2; pass++) {\n plotW = Math.max(1, width - axisW);\n layoutPanes();\n if (pendingRange) applyRange(pendingRange);\n clampView();\n vis = computeVisible();\n autoscale(vis);\n for (const pane of panes) {\n const ticks = scaleTicks(pane.scale, pane.id === PRICE ? 44 : 30);\n // fixed-range panes (RSI) label their bands and their middle\n const range = pane.study?.range;\n const bands = pane.study?.bands;\n pane.ticks =\n range && bands\n ? [...bands, (range[0] + range[1]) / 2].sort((a, b) => a - b)\n : ticks.scaled;\n pane.step = ticks.step;\n }\n const before = axisW;\n if (fg) measureAxis(fg);\n if (axisW === before) break;\n }\n const v = vis;\n pendingRange = null;\n const ticks = fg ? timeTicks(v, fg) : [];\n renderData(v, dpr);\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.clearRect(0, 0, width, height);\n paintBackground(bg, v, ticks);\n }\n if (fg) {\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n fg.clearRect(0, 0, width, height);\n paintForeground(fg, v, ticks);\n }\n updateLegends();\n updateJump();\n emitView();\n if (animating) invalidate();\n }\n\n const updateJump = () => {\n const count = n();\n const price = panes[0];\n const show = count > 0 && price && xOf(count - 1) > plotW + spacing * 0.5;\n jump.style.display = show ? \"flex\" : \"none\";\n if (show && price) {\n jump.style.left = `${plotW - 40}px`;\n jump.style.top = `${price.top + price.height - 40}px`;\n const text = labels().scrollToRealtime;\n if (jump.getAttribute(\"aria-label\") !== text) {\n jump.setAttribute(\"aria-label\", text);\n jump.title = text;\n }\n }\n };\n\n const visibleRange = (): TradingVisibleRange => {\n const from = right - plotW / spacing;\n return { from, to: right, fromTime: timeAt(from), toTime: timeAt(right) };\n };\n\n const emitView = () => {\n const count = n();\n if (!count) return;\n const range = visibleRange();\n if (\n !lastRange ||\n Math.abs(lastRange.from - range.from) > 1e-6 ||\n Math.abs(lastRange.to - range.to) > 1e-6\n ) {\n lastRange = range;\n emit(\"visibleRangeChange\", range);\n }\n if (range.from < 10 && historyFirst !== store.time[0]) {\n historyFirst = store.time[0];\n emit(\"historyRequest\", { firstTime: store.time[0], count });\n }\n const cross = crosshairState();\n const key = cross ? `${cross.index}|${cross.price}|${cross.pane.id}` : \"\";\n if (key !== lastCrosshair) {\n lastCrosshair = key;\n if (!cross) {\n emit(\"crosshairMove\", null);\n } else {\n const event: TradingCrosshairEvent = {\n index: cross.index,\n time: timeAt(cross.index),\n bar:\n cross.index >= 0 && cross.index < count\n ? readBar(store, cross.index)\n : null,\n price: cross.price,\n pane: cross.pane.id,\n x: xOf(cross.index),\n y: cross.y,\n };\n emit(\"crosshairMove\", event);\n }\n }\n };\n\n // ---------------------------------------------------------- interaction\n\n const local = (event: { clientX: number; clientY: number }) => {\n const rect = root.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n };\n\n const applyRange = (range: { from: number; to: number }) => {\n spacing = plotW / (range.to - range.from);\n right = range.to;\n clampView();\n };\n\n /**\n * Zooms around `x`; while the latest bar is in view it stays where it is\n * (the reader is following the market), like the price scale side of\n * trading terminals\n */\n const zoomAt = (x: number, factor: number) => {\n const count = n();\n if (count && followsRealtime()) x = Math.min(plotW, xOf(count - 1));\n const anchor = indexAt(x);\n spacing = spacing * factor;\n clampView();\n right = anchor + (plotW - x) / spacing;\n clampView();\n kinetic = null;\n scrollAnim = null;\n invalidate();\n };\n\n const anchorAt = (x: number, y: number): TradingDrawingPoint => {\n const index = Math.round(indexAt(x));\n return { time: timeAt(index), price: valueAt(panes[0].scale, y) };\n };\n\n const setTool = (next: TradingDrawingTool, notify: boolean) => {\n if (next === tool) return;\n tool = next;\n draft = null;\n if (notify) emit(\"drawingToolChange\", next);\n invalidate();\n };\n\n const select = (id: string | null) => {\n if (id === selected) return;\n selected = id;\n emit(\"drawingSelect\", id);\n invalidate();\n };\n\n const commitDrawings = (next: readonly TradingDrawing[]) => {\n drawings = next;\n emittedDrawings = next;\n emit(\"drawingsChange\", next);\n invalidate();\n };\n\n const finishDraft = () => {\n if (!draft) return;\n const done = draft;\n draft = null;\n commitDrawings([...drawings, done]);\n select(done.id);\n if (!options.keepDrawingMode) setTool(\"cursor\", true);\n };\n\n const hitLine = (x: number, y: number) => {\n const price = panes[0];\n if (!price || x > plotW) return null;\n for (const line of options.priceLines ?? []) {\n if (!line.draggable) continue;\n if (Math.abs(yOf(price.scale, linePrice(line)) - y) <= 5) return line;\n }\n return null;\n };\n\n const hitDrawingAt = (x: number, y: number) => {\n const mapper = drawingMapper();\n if (!mapper || y < mapper.top || y > mapper.bottom || x > plotW)\n return null;\n for (let i = drawings.length - 1; i >= 0; i--) {\n const hit = hitDrawing(drawings[i], mapper, { x, y });\n if (hit) return { drawing: drawings[i], hit };\n }\n return null;\n };\n\n const separatorAt = (y: number) => {\n for (let i = 1; i < panes.length; i++) {\n if (Math.abs(panes[i].top - y) <= 4) return i;\n }\n return -1;\n };\n\n const updateCursor = (x: number, y: number) => {\n let cursor = \"crosshair\";\n hoveredLine = null;\n let nextHover: string | null = null;\n if (gesture?.kind === \"pan\" && gesture.moved) cursor = \"grabbing\";\n else if (separatorAt(y) > 0) cursor = \"row-resize\";\n else if (x > plotW && y < plotH) cursor = \"ns-resize\";\n else if (y > plotH) cursor = \"ew-resize\";\n else if (tool === \"cursor\") {\n const line = hitLine(x, y);\n if (line) {\n cursor = \"ns-resize\";\n hoveredLine = line.id;\n } else {\n const hit = hitDrawingAt(x, y);\n if (hit) {\n nextHover = hit.drawing.id;\n cursor = hit.drawing.locked\n ? \"pointer\"\n : hit.hit.part === \"handle\"\n ? \"move\"\n : \"pointer\";\n }\n }\n }\n if (nextHover !== hovered) hovered = nextHover;\n if (root.style.cursor !== cursor) root.style.cursor = cursor;\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0 && event.pointerType === \"mouse\") return;\n const { x, y } = local(event);\n pointer = { x, y };\n keyboardIndex = null;\n kinetic = null;\n scrollAnim = null;\n if (event.pointerType === \"touch\") {\n touches.set(event.pointerId, { x, y });\n if (touches.size === 2) {\n const [a, b] = [...touches.values()];\n pinch = { distance: Math.hypot(a.x - b.x, a.y - b.y), spacing };\n gesture = null;\n return;\n }\n }\n try {\n root.setPointerCapture(event.pointerId);\n } catch {\n // the pointer may already be released\n }\n const sep = separatorAt(y);\n if (sep > 0) {\n const above = panes[sep - 1];\n const below = panes[sep];\n gesture = {\n kind: \"separator\",\n index: sep,\n y,\n above: above.height,\n below: below.height,\n };\n return;\n }\n if (x > plotW && y < plotH) {\n const pane = paneAt(y);\n if (pane)\n gesture = {\n kind: \"axisY\",\n pane,\n y,\n min: pane.scale.min,\n max: pane.scale.max,\n };\n return;\n }\n if (y > plotH) {\n gesture = { kind: \"axisX\", x, spacing };\n return;\n }\n const pane = paneAt(y);\n if (tool !== \"cursor\" && pane?.id === PRICE && n()) {\n const point = anchorAt(x, y);\n if (draft) {\n draft = { ...draft, points: [draft.points[0], point] };\n finishDraft();\n gesture = null;\n return;\n }\n const type = tool;\n draft = {\n id: `drawing-${Date.now().toString(36)}-${++drawingCounter}`,\n type,\n points: anchorCount(type) === 1 ? [point] : [point, point],\n };\n if (anchorCount(type) === 1) {\n finishDraft();\n return;\n }\n gesture = { kind: \"create\", x, y, moved: false };\n invalidate();\n return;\n }\n if (tool === \"cursor\") {\n const line = hitLine(x, y);\n if (line) {\n gesture = { kind: \"order\", line, startPrice: line.price };\n return;\n }\n const hit = hitDrawingAt(x, y);\n if (hit) {\n select(hit.drawing.id);\n if (!hit.drawing.locked) {\n gesture = {\n kind: \"drawing\",\n id: hit.drawing.id,\n handle: hit.hit.part === \"handle\" ? hit.hit.index : -1,\n x,\n y,\n original: hit.drawing,\n moved: false,\n };\n }\n return;\n }\n }\n gesture = {\n kind: \"pan\",\n x,\n y,\n right,\n pane,\n moved: false,\n lastX: x,\n lastY: y,\n lastT: event.timeStamp,\n velocity: 0,\n };\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const { x, y } = local(event);\n pointer = { x, y };\n if (event.pointerType === \"touch\" && touches.has(event.pointerId)) {\n touches.set(event.pointerId, { x, y });\n if (pinch && touches.size === 2) {\n const [a, b] = [...touches.values()];\n const distance = Math.hypot(a.x - b.x, a.y - b.y);\n const count = n();\n const mid =\n count && followsRealtime()\n ? Math.min(plotW, xOf(count - 1))\n : (a.x + b.x) / 2;\n const anchor = indexAt(mid);\n spacing = (pinch.spacing * distance) / Math.max(1, pinch.distance);\n clampView();\n right = anchor + (plotW - mid) / spacing;\n clampView();\n invalidate();\n return;\n }\n }\n const g = gesture;\n if (!g) {\n updateCursor(x, y);\n invalidate();\n return;\n }\n switch (g.kind) {\n case \"pan\": {\n const dx = x - g.x;\n if (!g.moved && Math.hypot(dx, y - g.y) < 3) break;\n g.moved = true;\n right = g.right - dx / spacing;\n if (g.pane && !g.pane.scale.auto) panScale(g.pane.scale, y - g.lastY);\n g.lastY = y;\n const dt = Math.max(1, event.timeStamp - g.lastT);\n g.velocity = 0.6 * ((x - g.lastX) / dt) + 0.4 * g.velocity;\n g.lastX = x;\n g.lastT = event.timeStamp;\n clampView();\n root.style.cursor = \"grabbing\";\n break;\n }\n case \"axisY\": {\n const scale = g.pane.scale;\n scale.min = g.min;\n scale.max = g.max;\n zoomScale(scale, Math.exp((y - g.y) * 0.006));\n break;\n }\n case \"axisX\": {\n const lastIndex = right;\n spacing = g.spacing * Math.exp((x - g.x) * 0.006);\n clampView();\n right = lastIndex;\n clampView();\n break;\n }\n case \"separator\": {\n const dy = y - g.y;\n const above = panes[g.index - 1];\n const below = panes[g.index];\n if (!above || !below) break;\n const total = g.above + g.below;\n const nextBelow = clamp(g.below - dy, MIN_PANE, total - MIN_PANE);\n paneHeights.set(below.id, nextBelow);\n if (above.id !== PRICE) paneHeights.set(above.id, total - nextBelow);\n break;\n }\n case \"order\": {\n const price = valueAt(panes[0].scale, y);\n const step = 10 ** -precision();\n lineOverrides.set(g.line.id, Math.round(price / step) * step);\n break;\n }\n case \"drawing\": {\n if (!g.moved && Math.hypot(x - g.x, y - g.y) < 3) break;\n g.moved = true;\n const scale = panes[0].scale;\n const di = Math.round(indexAt(x) - indexAt(g.x));\n const ds = scaledAt(scale, y) - scaledAt(scale, g.y);\n const points = g.original.points.map((p, i) => {\n if (g.handle >= 0 && i !== g.handle) return p;\n if (g.handle >= 0) return anchorAt(x, y);\n return {\n time: timeAt(Math.round(indexOfTimeExt(p.time)) + di),\n price: fromScaled(scale, toScaled(scale, p.price) + ds),\n };\n });\n drawings = drawings.map((d) => (d.id === g.id ? { ...d, points } : d));\n break;\n }\n case \"create\": {\n if (draft) {\n if (Math.hypot(x - g.x, y - g.y) >= 4) g.moved = true;\n draft = { ...draft, points: [draft.points[0], anchorAt(x, y)] };\n }\n break;\n }\n }\n invalidate();\n };\n\n const onPointerUp = (event: PointerEvent) => {\n touches.delete(event.pointerId);\n if (touches.size < 2) pinch = null;\n const g = gesture;\n gesture = null;\n const { x, y } = local(event);\n if (event.pointerType === \"touch\") pointer = null;\n if (!g) {\n invalidate();\n return;\n }\n switch (g.kind) {\n case \"pan\":\n if (!g.moved) {\n if (selected) select(null);\n const pane = paneAt(y);\n if (pane && x <= plotW) {\n emit(\"click\", {\n index: Math.round(indexAt(x)),\n time: timeAt(Math.round(indexAt(x))),\n price: valueAt(pane.scale, y),\n pane: pane.id,\n });\n }\n } else if (\n options.kineticScroll !== false &&\n event.timeStamp - g.lastT < 60 &&\n Math.abs(g.velocity) > 0.25\n ) {\n kinetic = {\n v: g.velocity,\n t:\n typeof performance !== \"undefined\"\n ? performance.now()\n : Date.now(),\n };\n }\n break;\n case \"order\": {\n const next = lineOverrides.get(g.line.id);\n if (next !== undefined && next !== g.startPrice) {\n emit(\"orderMove\", {\n id: g.line.id,\n price: next,\n previousPrice: g.startPrice,\n line: g.line,\n });\n } else {\n lineOverrides.delete(g.line.id);\n }\n break;\n }\n case \"drawing\":\n if (g.moved) commitDrawings(drawings);\n break;\n case \"create\":\n // a click starts a click-click drawing; a drag finishes it\n if (g.moved) finishDraft();\n break;\n default:\n break;\n }\n updateCursor(x, y);\n invalidate();\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n if (gesture || event.pointerType === \"touch\") return;\n pointer = null;\n hovered = null;\n hoveredLine = null;\n invalidate();\n };\n\n const onWheel = (event: WheelEvent) => {\n const mode = options.wheel ?? \"zoom\";\n if (mode === \"none\") return;\n const { x } = local(event);\n const unit = event.deltaMode === 1 ? 16 : event.deltaMode === 2 ? plotW : 1;\n const dx = event.deltaX * unit;\n const dy = event.deltaY * unit;\n const modifier = event.ctrlKey || event.metaKey;\n if (mode === \"modifier\" && !modifier && Math.abs(dx) <= Math.abs(dy))\n return;\n event.preventDefault();\n keyboardIndex = null;\n if (Math.abs(dx) > Math.abs(dy) || event.shiftKey) {\n right += (Math.abs(dx) > Math.abs(dy) ? dx : dy) / spacing;\n clampView();\n kinetic = null;\n invalidate();\n return;\n }\n const factor = Math.exp(-dy * (event.ctrlKey ? 0.01 : 0.0015));\n zoomAt(Math.min(x, plotW), factor);\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n const { x, y } = local(event);\n if (x > plotW && y < plotH) {\n const pane = paneAt(y);\n if (pane) pane.scale.auto = true;\n } else if (y > plotH) {\n spacing = options.barSpacing ?? 8;\n instance.scrollToRealtime(true);\n } else {\n for (const scale of scales.values()) scale.auto = true;\n }\n invalidate();\n };\n\n const announce = (index: number) => {\n if (index < 0 || index >= n()) return;\n const d = display();\n const l = labels();\n live.textContent = fill(l.announcement, {\n time: formatCrosshairTime(\n shiftTime(store.time[index], options.utcOffset),\n tfMs(),\n locale,\n ),\n open: formatPrice(d.open[index]),\n high: formatPrice(d.high[index]),\n low: formatPrice(d.low[index]),\n close: formatPrice(d.close[index]),\n });\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n const count = n();\n const page = Math.max(1, Math.floor(plotW / spacing / 2));\n const move = (index: number) => {\n keyboardIndex = clamp(index, 0, Math.max(0, count - 1));\n const x = xOf(keyboardIndex);\n if (x < spacing) right += (spacing - x) / spacing + 1;\n if (x > plotW - spacing) right -= (x - plotW + spacing) / spacing - 1;\n clampView();\n announce(keyboardIndex);\n };\n const current = keyboardIndex ?? Math.min(count - 1, Math.round(right));\n switch (event.key) {\n case \"ArrowLeft\":\n move(current - (event.shiftKey ? 10 : 1));\n break;\n case \"ArrowRight\":\n move(current + (event.shiftKey ? 10 : 1));\n break;\n case \"PageUp\":\n move(current - page);\n break;\n case \"PageDown\":\n move(current + page);\n break;\n case \"Home\":\n move(0);\n break;\n case \"End\":\n move(count - 1);\n instance.scrollToRealtime(true);\n break;\n case \"+\":\n case \"=\":\n case \"ArrowUp\":\n zoomAt(keyboardIndex !== null ? xOf(keyboardIndex) : plotW, 1.2);\n break;\n case \"-\":\n case \"_\":\n case \"ArrowDown\":\n zoomAt(keyboardIndex !== null ? xOf(keyboardIndex) : plotW, 1 / 1.2);\n break;\n case \"Escape\":\n if (draft) draft = null;\n else if (tool !== \"cursor\") setTool(\"cursor\", true);\n else if (selected) select(null);\n else keyboardIndex = null;\n break;\n case \"Delete\":\n case \"Backspace\": {\n const target = drawings.find((d) => d.id === selected);\n if (!target || target.locked) return;\n select(null);\n commitDrawings(drawings.filter((d) => d.id !== target.id));\n break;\n }\n default:\n return;\n }\n event.preventDefault();\n invalidate();\n };\n\n const onFocus = () => {\n let keyboard = true;\n try {\n keyboard = root.matches(\":focus-visible\");\n } catch {\n // older engines: show the ring\n }\n if (keyboard)\n root.style.boxShadow = `inset 0 0 0 2px ${toCss(theme.primary, 0.6)}`;\n };\n const onBlur = () => {\n root.style.boxShadow = \"\";\n if (keyboardIndex !== null) {\n keyboardIndex = null;\n invalidate();\n }\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 root.addEventListener(\"focus\", onFocus);\n root.addEventListener(\"blur\", onBlur);\n jump.addEventListener(\"pointerdown\", (event) => event.stopPropagation());\n jump.addEventListener(\"click\", () => instance.scrollToRealtime(true));\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => invalidate())\n : null;\n resizeObserver?.observe(root);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(root);\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n legendKey = \"\";\n invalidate();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n\n // the page language, when no `locale` is given\n let langObserver: MutationObserver | null = null;\n if (typeof MutationObserver === \"function\" && root.ownerDocument) {\n langObserver = new MutationObserver(() => {\n if (options.locale) return;\n const before = locale;\n resolveTexts();\n if (locale === before) return;\n legendKey = \"\";\n optionsVersion++;\n applyStatic();\n invalidate();\n });\n langObserver.observe(root.ownerDocument.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\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 () => createDataCanvas(doc),\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 geomKey = \"\";\n if (next) {\n root.dataset.renderer = next.kind;\n root.insertBefore(next.canvas, foreground);\n emit(\"renderer\", next.kind);\n }\n resolveReady(next?.kind ?? null);\n invalidate();\n };\n\n // ------------------------------------------------------------- options\n\n const applyStatic = () => {\n const symbol = options.symbol ?? \"\";\n root.setAttribute(\n \"aria-label\",\n options.ariaLabel ?? fill(labels().chart, { symbol }).trim(),\n );\n const wantTimer = !!options.countdown && options.lastPriceLine !== false;\n if (wantTimer && !countdownTimer)\n countdownTimer = setInterval(invalidate, 1000);\n if (!wantTimer && countdownTimer) {\n clearInterval(countdownTimer);\n countdownTimer = null;\n }\n };\n\n const applyOptions = (previous: TradingChartOptions | null) => {\n const next = options;\n resolveTexts();\n if (\n !previous ||\n next.indicators !== previous.indicators ||\n next.utcOffset !== previous.utcOffset\n ) {\n rebuildStudies();\n }\n if (!previous || next.compare !== previous.compare) rebuildCompares();\n if (next.bars && (!previous || next.bars !== previous.bars)) {\n if (previous) applyBarsOption(next.bars);\n else replaceBars(next.bars);\n } else if (!next.bars && previous?.bars) {\n replaceBars([]);\n }\n if (previous && next.barSpacing !== previous.barSpacing && next.barSpacing)\n spacing = next.barSpacing;\n if (previous && next.scaleMode !== previous.scaleMode) {\n const price = scales.get(PRICE);\n if (price) price.auto = true;\n }\n if (\n next.drawings &&\n next.drawings !== emittedDrawings &&\n (!previous || next.drawings !== previous.drawings)\n ) {\n drawings = next.drawings;\n if (selected && !drawings.some((d) => d.id === selected)) select(null);\n }\n if (\n previous &&\n (next.drawingMode ?? \"cursor\") !== (previous.drawingMode ?? \"cursor\")\n ) {\n setTool(next.drawingMode ?? \"cursor\", false);\n }\n if (previous && next.priceLines !== previous.priceLines)\n lineOverrides.clear();\n if (previous && next.chartStyle !== previous.chartStyle)\n haValid = Math.min(haValid, 0);\n optionsVersion++;\n applyStatic();\n invalidate();\n };\n\n applyOptions(null);\n void initRenderer();\n\n // ------------------------------------------------------------------ api\n\n const instance: TradingChartInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = { ...next };\n applyOptions(previous);\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n },\n setBars(bars) {\n replaceBars(bars);\n },\n update(bar) {\n const before = n();\n const follow = followsRealtime();\n const at = storeUpdate(store, bar);\n if (at < 0) return;\n if (n() > before && follow) right += n() - before;\n afterDataChange(at);\n },\n appendBars(bars) {\n const before = n();\n const follow = followsRealtime();\n const at = storeAppend(store, bars);\n if (at < 0) return;\n if (follow) right += n() - before;\n afterDataChange(at);\n },\n prependBars(bars) {\n const added = storePrepend(store, bars);\n if (!added) return;\n pyramid = createPyramid();\n haPyramid = createPyramid();\n haValid = 0;\n right += added;\n if (keyboardIndex !== null) keyboardIndex += added;\n afterDataChange(0);\n },\n getBarCount: () => n(),\n getBar: (index) =>\n index >= 0 && index < n() ? readBar(store, Math.floor(index)) : null,\n scrollToRealtime(animateScroll = true) {\n const target = n() - 1 + (options.rightOffset ?? 8);\n kinetic = null;\n if (\n animateScroll &&\n finite(right) &&\n Math.abs(target - right) * spacing < plotW * 6\n ) {\n scrollAnim = {\n from: right,\n to: target,\n start:\n typeof performance !== \"undefined\" ? performance.now() : Date.now(),\n };\n } else {\n right = target;\n }\n invalidate();\n },\n fitContent() {\n const count = n();\n if (!count) return;\n instance.setVisibleRange({\n from: -0.5,\n to: count - 1 + (options.rightOffset ?? 8),\n });\n },\n getVisibleRange: () => visibleRange(),\n setVisibleRange({ from, to }) {\n if (!(to > from)) return;\n kinetic = null;\n scrollAnim = null;\n pendingRange = { from, to };\n applyRange(pendingRange);\n invalidate();\n },\n setScaleMode(mode) {\n options = { ...options, scaleMode: mode };\n const price = scales.get(PRICE);\n if (price) price.auto = true;\n invalidate();\n },\n resetPriceScales() {\n for (const scale of scales.values()) scale.auto = true;\n invalidate();\n },\n setDrawingTool: (next) => setTool(next, true),\n getDrawingTool: () => tool,\n getDrawings: () => drawings,\n setDrawings(next) {\n drawings = next;\n if (selected && !drawings.some((d) => d.id === selected)) select(null);\n invalidate();\n },\n removeDrawing(id) {\n if (!drawings.some((d) => d.id === id)) return;\n if (selected === id) select(null);\n commitDrawings(drawings.filter((d) => d.id !== id));\n },\n selectDrawing: (id) => select(id),\n setIndicatorVisible(id, visible) {\n visibility.set(id, visible);\n invalidate();\n },\n getRenderer: () => renderer?.kind ?? null,\n ready,\n refreshTheme,\n resize: () => invalidate(),\n on(type, listener) {\n let set = listeners.get(type);\n if (!set) listeners.set(type, (set = new Set()));\n set.add(listener as (event: never) => void);\n return () => set.delete(listener as (event: never) => void);\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n if (frameId) {\n if (win?.cancelAnimationFrame) win.cancelAnimationFrame(frameId);\n else clearTimeout(frameId);\n }\n if (countdownTimer) clearInterval(countdownTimer);\n resizeObserver?.disconnect();\n unwatchTheme();\n langObserver?.disconnect();\n root.removeEventListener(\"wheel\", onWheel);\n renderer?.destroy();\n renderer = null;\n resolveReady(null);\n listeners.clear();\n root.remove();\n },\n };\n return instance;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=[0,.236,.382,.5,.618,.786,1],t=[`#787b86`,`#f23645`,`#ff9800`,`#4caf50`,`#089981`,`#2962ff`,`#787b86`],n=e=>e===`horizontalLine`||e===`verticalLine`?1:2,r=(e,t)=>e.points.map(e=>({x:t.x(t.index(e.time)),y:t.y(e.price)})),i=(e,t,n,r,i)=>{let a=n.x-t.x,o=n.y-t.y,s=a*a+o*o;if(s===0)return Math.hypot(e.x-t.x,e.y-t.y);let c=((e.x-t.x)*a+(e.y-t.y)*o)/s;return r||(c=Math.max(0,c)),i||(c=Math.min(1,c)),Math.hypot(e.x-(t.x+c*a),e.y-(t.y+c*o))},a=(t,n,a,o=6)=>{let s=r(t,n);for(let e=0;e<s.length;e++){let t=s[e];if(Math.hypot(t.x-a.x,t.y-a.y)<=o+2)return{part:`handle`,index:e}}let[c,l]=s;if(!c)return null;let u=e=>e<=o?{part:`body`}:null;switch(t.type){case`horizontalLine`:return u(Math.abs(a.y-c.y));case`verticalLine`:return u(Math.abs(a.x-c.x));case`trendLine`:return l?u(i(a,c,l,!1,!1)):null;case`ray`:return l?u(i(a,c,l,!1,!0)):null;case`extendedLine`:return l?u(i(a,c,l,!0,!0)):null;case`fibRetracement`:{if(!l)return null;let t=Math.min(c.x,l.x),n=Math.max(c.x,l.x);if(a.x<t-o||a.x>n+o)return null;for(let t of e){let e=l.y+(c.y-l.y)*t;if(Math.abs(a.y-e)<=o)return{part:`body`}}return null}default:{if(!l)return null;let e=Math.min(c.x,l.x)-o,t=Math.max(c.x,l.x)+o,n=Math.min(c.y,l.y)-o,r=Math.max(c.y,l.y)+o;return a.x>=e&&a.x<=t&&a.y>=n&&a.y<=r?{part:`body`}:null}}},o=(e,t,n)=>{t===`dashed`?e.setLineDash([6,4]):t===`dotted`?e.setLineDash([Math.max(1,n),3]):e.setLineDash([])},s=(e,t,n)=>{let r=t.x-e.x,i=t.y-e.y,a=Math.hypot(r,i);if(!a)return t;let o=(Math.abs(n.right-n.left)+Math.abs(n.bottom-n.top))*4;return{x:e.x+r/a*o,y:e.y+i/a*o}},c=(e,t,n,r,i,a)=>{e.beginPath(),typeof e.roundRect==`function`?e.roundRect(t,n,r,i,a):e.rect(t,n,r,i)},l=(e,t,n,i,a)=>{let c=r(t,n),[l,f]=c;if(!l)return;let p=(t.lineWidth??1.5)+(a.hovered?.5:0);e.save(),e.lineWidth=p,e.strokeStyle=i.color,e.fillStyle=i.color,e.font=i.font,o(e,t.lineStyle,p);let m=(t,n)=>{e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(n.x,n.y),e.stroke()};switch(t.type){case`horizontalLine`:m({x:n.left,y:l.y},{x:n.right,y:l.y});break;case`verticalLine`:m({x:l.x,y:n.top},{x:l.x,y:n.bottom});break;case`trendLine`:f&&m(l,f);break;case`ray`:f&&m(l,s(l,f,n));break;case`extendedLine`:f&&m(s(f,l,n),s(l,f,n));break;case`rectangle`:if(f){let t=Math.min(l.x,f.x),n=Math.min(l.y,f.y),r=Math.abs(f.x-l.x),i=Math.abs(f.y-l.y);e.globalAlpha=.12,e.fillRect(t,n,r,i),e.globalAlpha=1,e.strokeRect(t,n,r,i)}break;case`fibRetracement`:f&&u(e,t,l,f,i);break;case`measure`:f&&d(e,t,l,f,n,i)}if(a.selected||a.hovered){e.setLineDash([]),e.lineWidth=1.5;for(let t of c)e.beginPath(),e.arc(t.x,t.y,a.selected?4.5:3.5,0,Math.PI*2),e.fillStyle=i.background,e.fill(),e.strokeStyle=i.color,e.stroke()}e.restore()},u=(n,r,i,a,o)=>{let s=Math.min(i.x,a.x),c=Math.max(i.x,a.x),l=r.points[0]?.price??0,u=r.points[1]?.price??0,d=e.map(e=>a.y+(i.y-a.y)*e);for(let i=0;i+1<e.length;i++)n.globalAlpha=.08,n.fillStyle=r.color?o.color:t[i+1],n.fillRect(s,Math.min(d[i],d[i+1]),c-s,Math.abs(d[i+1]-d[i]));n.globalAlpha=1,n.textBaseline=`bottom`,n.textAlign=`left`,e.forEach((e,i)=>{let a=Math.round(d[i])+.5,f=r.color?o.color:t[i];n.strokeStyle=f,n.fillStyle=f,n.beginPath(),n.moveTo(s,a),n.lineTo(c,a),n.stroke();let p=u+(l-u)*e;n.fillText(`${e} (${o.formatPrice(p)})`,s+4,a-2)}),n.setLineDash([4,4]),n.strokeStyle=o.color,n.globalAlpha=.6,n.beginPath(),n.moveTo(i.x,i.y),n.lineTo(a.x,a.y),n.stroke(),n.globalAlpha=1},d=(e,t,n,r,i,a)=>{let[o,s]=t.points,l=s.price>=o.price,u=t.color?a.color:l?a.up:a.down,d=Math.min(n.x,r.x),f=Math.max(n.x,r.x),p=Math.min(n.y,r.y),m=Math.max(n.y,r.y);e.setLineDash([]),e.fillStyle=u,e.globalAlpha=.14,e.fillRect(d,p,f-d,m-p),e.globalAlpha=1,e.strokeStyle=u,e.lineWidth=1;let h=Math.round((d+f)/2)+.5,g=Math.round((p+m)/2)+.5,_=(t,n)=>{e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(n.x,n.y),e.stroke();let r=Math.atan2(n.y-t.y,n.x-t.x);e.beginPath(),e.moveTo(n.x,n.y),e.lineTo(n.x-6*Math.cos(r-.5),n.y-6*Math.sin(r-.5)),e.lineTo(n.x-6*Math.cos(r+.5),n.y-6*Math.sin(r+.5)),e.closePath(),e.fill()};m-p>10&&_({x:h,y:l?m:p},{x:h,y:l?p:m}),f-d>10&&_({x:n.x<r.x?d:f,y:g},{x:n.x<r.x?f:d,y:g});let v=s.price-o.price,y=o.price?v/o.price*100:NaN,b=Math.round(i.index(s.time)-i.index(o.time)),x=[`${v>=0?`+`:`−`}${a.formatPrice(Math.abs(v))} (${a.formatPercent(y)})`,a.formatSpan(b,s.time-o.time)],S=x.map(t=>e.measureText(t).width),C=Math.max(...S)+16,w=(d+f)/2-C/2,T=l?p-38-6:m+6;c(e,w,T,C,38,4),e.fillStyle=u,e.fill(),e.fillStyle=a.textOn(u),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(x[0],w+C/2,T+11),e.fillText(x[1],w+C/2,T+27)};exports.FIB_LEVELS=e,exports.anchorCount=n,exports.hitDrawing=a,exports.paintDrawing=l,exports.screenPoints=r,exports.setDash=o;
|
|
2
|
+
//# sourceMappingURL=drawings.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawings.cjs","names":["FIB_LEVELS","FIB_COLORS","anchorCount","tool","screenPoints","drawing","m","p","distanceToSegment","dx","b","a","dy","len2","t","extendStart","extendEnd","hitDrawing","pts","i","q","tolerance","near","d","x0","x1","level","y","y0","y1","setDash","style","ctx","width","extend","len","k","roundRect","x","w","h","r","paintDrawing","state","c","line","paintFib","paintMeasure","p1","p2","ys","color","price","rising","midX","midY","arrow","from","to","angle","change","percent","bars","lines","widths","lx","ly"],"sources":["../../../../../charts/src/engine/trading/drawings.ts"],"sourcesContent":["// Drawings of the price pane: geometry in CSS pixels, hit tests and\n// Canvas2D painting. Anchors are stored as (time, price) so drawings stay\n// on their bars when the chart scrolls, zooms or receives new bars.\n\nimport type {\n TradingDrawing,\n TradingDrawingPoint,\n TradingDrawingTool,\n TradingLineStyle,\n} from \"./types\";\n\n/** Converts between anchors and the pixels of the price pane */\nexport interface DrawingMapper {\n /** x (CSS px) of a logical bar index */\n x(index: number): number;\n /** y (CSS px) of a price */\n y(price: number): number;\n /** Logical index of a time (extrapolated outside the bars) */\n index(time: number): number;\n /** Plot rectangle of the price pane */\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** Fibonacci retracement levels */\nexport const FIB_LEVELS = [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1];\nconst FIB_COLORS = [\n \"#787b86\",\n \"#f23645\",\n \"#ff9800\",\n \"#4caf50\",\n \"#089981\",\n \"#2962ff\",\n \"#787b86\",\n];\n\n/** Number of anchors of a tool */\nexport const anchorCount = (tool: Exclude<TradingDrawingTool, \"cursor\">) =>\n tool === \"horizontalLine\" || tool === \"verticalLine\" ? 1 : 2;\n\nexport const screenPoints = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n): Point[] =>\n drawing.points.map((p) => ({ x: m.x(m.index(p.time)), y: m.y(p.price) }));\n\nconst distanceToSegment = (\n p: Point,\n a: Point,\n b: Point,\n extendStart: boolean,\n extendEnd: boolean,\n) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len2 = dx * dx + dy * dy;\n if (len2 === 0) return Math.hypot(p.x - a.x, p.y - a.y);\n let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;\n if (!extendStart) t = Math.max(0, t);\n if (!extendEnd) t = Math.min(1, t);\n return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));\n};\n\n/** Part of a drawing under the pointer */\nexport type DrawingHit = { part: \"handle\"; index: number } | { part: \"body\" };\n\nexport const hitDrawing = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n p: Point,\n tolerance = 6,\n): DrawingHit | null => {\n const pts = screenPoints(drawing, m);\n for (let i = 0; i < pts.length; i++) {\n const q = pts[i];\n if (Math.hypot(q.x - p.x, q.y - p.y) <= tolerance + 2)\n return { part: \"handle\", index: i };\n }\n const [a, b] = pts;\n if (!a) return null;\n const near = (d: number) =>\n d <= tolerance ? { part: \"body\" as const } : null;\n switch (drawing.type) {\n case \"horizontalLine\":\n return near(Math.abs(p.y - a.y));\n case \"verticalLine\":\n return near(Math.abs(p.x - a.x));\n case \"trendLine\":\n return b ? near(distanceToSegment(p, a, b, false, false)) : null;\n case \"ray\":\n return b ? near(distanceToSegment(p, a, b, false, true)) : null;\n case \"extendedLine\":\n return b ? near(distanceToSegment(p, a, b, true, true)) : null;\n case \"fibRetracement\": {\n if (!b) return null;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n if (p.x < x0 - tolerance || p.x > x1 + tolerance) return null;\n for (const level of FIB_LEVELS) {\n const y = b.y + (a.y - b.y) * level;\n if (Math.abs(p.y - y) <= tolerance) return { part: \"body\" };\n }\n return null;\n }\n default: {\n // rectangle, measure: inside or on the outline\n if (!b) return null;\n const x0 = Math.min(a.x, b.x) - tolerance;\n const x1 = Math.max(a.x, b.x) + tolerance;\n const y0 = Math.min(a.y, b.y) - tolerance;\n const y1 = Math.max(a.y, b.y) + tolerance;\n return p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1\n ? { part: \"body\" }\n : null;\n }\n }\n};\n\nexport const setDash = (\n ctx: CanvasRenderingContext2D,\n style: TradingLineStyle | undefined,\n width: number,\n) => {\n if (style === \"dashed\") ctx.setLineDash([6, 4]);\n else if (style === \"dotted\") ctx.setLineDash([Math.max(1, width), 3]);\n else ctx.setLineDash([]);\n};\n\n/** Values and helpers the painter needs from the chart */\nexport interface DrawingPaintContext {\n /** Resolved CSS color of a drawing */\n color: string;\n /** Text color on the plot */\n text: string;\n /** Background of the plot (handles) */\n background: string;\n /** Up / down colors (measure) */\n up: string;\n down: string;\n font: string;\n formatPrice(price: number): string;\n formatPercent(value: number): string;\n /** `\"24 bars, 2d 4h\"` */\n formatSpan(bars: number, ms: number): string;\n /** Readable text color on a fill */\n textOn(fill: string): string;\n}\n\n/** Point at the end of a line through `a` and `b`, far past the plot */\nconst extend = (a: Point, b: Point, m: DrawingMapper): Point => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n if (!len) return b;\n const k = (Math.abs(m.right - m.left) + Math.abs(m.bottom - m.top)) * 4;\n return { x: a.x + (dx / len) * k, y: a.y + (dy / len) * k };\n};\n\nconst roundRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n) => {\n ctx.beginPath();\n if (typeof ctx.roundRect === \"function\") ctx.roundRect(x, y, w, h, r);\n else ctx.rect(x, y, w, h);\n};\n\n/** Paints a drawing (the context is clipped to the price pane) */\nexport const paintDrawing = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n m: DrawingMapper,\n c: DrawingPaintContext,\n state: { selected: boolean; hovered: boolean },\n): void => {\n const pts = screenPoints(drawing, m);\n const [a, b] = pts;\n if (!a) return;\n const width = (drawing.lineWidth ?? 1.5) + (state.hovered ? 0.5 : 0);\n ctx.save();\n ctx.lineWidth = width;\n ctx.strokeStyle = c.color;\n ctx.fillStyle = c.color;\n ctx.font = c.font;\n setDash(ctx, drawing.lineStyle, width);\n const line = (p: Point, q: Point) => {\n ctx.beginPath();\n ctx.moveTo(p.x, p.y);\n ctx.lineTo(q.x, q.y);\n ctx.stroke();\n };\n switch (drawing.type) {\n case \"horizontalLine\":\n line({ x: m.left, y: a.y }, { x: m.right, y: a.y });\n break;\n case \"verticalLine\":\n line({ x: a.x, y: m.top }, { x: a.x, y: m.bottom });\n break;\n case \"trendLine\":\n if (b) line(a, b);\n break;\n case \"ray\":\n if (b) line(a, extend(a, b, m));\n break;\n case \"extendedLine\":\n if (b) line(extend(b, a, m), extend(a, b, m));\n break;\n case \"rectangle\":\n if (b) {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n const w = Math.abs(b.x - a.x);\n const h = Math.abs(b.y - a.y);\n ctx.globalAlpha = 0.12;\n ctx.fillRect(x, y, w, h);\n ctx.globalAlpha = 1;\n ctx.strokeRect(x, y, w, h);\n }\n break;\n case \"fibRetracement\":\n if (b) paintFib(ctx, drawing, a, b, c);\n break;\n case \"measure\":\n if (b) paintMeasure(ctx, drawing, a, b, m, c);\n break;\n }\n if (state.selected || state.hovered) {\n ctx.setLineDash([]);\n ctx.lineWidth = 1.5;\n for (const p of pts) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, state.selected ? 4.5 : 3.5, 0, Math.PI * 2);\n ctx.fillStyle = c.background;\n ctx.fill();\n ctx.strokeStyle = c.color;\n ctx.stroke();\n }\n }\n ctx.restore();\n};\n\nconst paintFib = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n c: DrawingPaintContext,\n) => {\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const p1 = drawing.points[0]?.price ?? 0;\n const p2 = drawing.points[1]?.price ?? 0;\n const ys = FIB_LEVELS.map((level) => b.y + (a.y - b.y) * level);\n // bands between levels\n for (let i = 0; i + 1 < FIB_LEVELS.length; i++) {\n ctx.globalAlpha = 0.08;\n ctx.fillStyle = drawing.color ? c.color : FIB_COLORS[i + 1];\n ctx.fillRect(\n x0,\n Math.min(ys[i], ys[i + 1]),\n x1 - x0,\n Math.abs(ys[i + 1] - ys[i]),\n );\n }\n ctx.globalAlpha = 1;\n ctx.textBaseline = \"bottom\";\n ctx.textAlign = \"left\";\n FIB_LEVELS.forEach((level, i) => {\n const y = Math.round(ys[i]) + 0.5;\n const color = drawing.color ? c.color : FIB_COLORS[i];\n ctx.strokeStyle = color;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x0, y);\n ctx.lineTo(x1, y);\n ctx.stroke();\n const price = p2 + (p1 - p2) * level;\n ctx.fillText(`${level} (${c.formatPrice(price)})`, x0 + 4, y - 2);\n });\n // the trend line between the anchors\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = c.color;\n ctx.globalAlpha = 0.6;\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n};\n\nconst paintMeasure = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n m: DrawingMapper,\n c: DrawingPaintContext,\n) => {\n const [p1, p2] = drawing.points as [TradingDrawingPoint, TradingDrawingPoint];\n const rising = p2.price >= p1.price;\n const color = drawing.color ? c.color : rising ? c.up : c.down;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const y0 = Math.min(a.y, b.y);\n const y1 = Math.max(a.y, b.y);\n ctx.setLineDash([]);\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.14;\n ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n ctx.globalAlpha = 1;\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n // arrows across the box\n const midX = Math.round((x0 + x1) / 2) + 0.5;\n const midY = Math.round((y0 + y1) / 2) + 0.5;\n const arrow = (from: Point, to: Point) => {\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n const angle = Math.atan2(to.y - from.y, to.x - from.x);\n ctx.beginPath();\n ctx.moveTo(to.x, to.y);\n ctx.lineTo(\n to.x - 6 * Math.cos(angle - 0.5),\n to.y - 6 * Math.sin(angle - 0.5),\n );\n ctx.lineTo(\n to.x - 6 * Math.cos(angle + 0.5),\n to.y - 6 * Math.sin(angle + 0.5),\n );\n ctx.closePath();\n ctx.fill();\n };\n if (y1 - y0 > 10)\n arrow({ x: midX, y: rising ? y1 : y0 }, { x: midX, y: rising ? y0 : y1 });\n if (x1 - x0 > 10)\n arrow(\n { x: a.x < b.x ? x0 : x1, y: midY },\n { x: a.x < b.x ? x1 : x0, y: midY },\n );\n // label\n const change = p2.price - p1.price;\n const percent = p1.price ? (change / p1.price) * 100 : NaN;\n const bars = Math.round(m.index(p2.time) - m.index(p1.time));\n const lines = [\n `${change >= 0 ? \"+\" : \"−\"}${c.formatPrice(Math.abs(change))} (${c.formatPercent(percent)})`,\n c.formatSpan(bars, p2.time - p1.time),\n ];\n const widths = lines.map((t) => ctx.measureText(t).width);\n const w = Math.max(...widths) + 16;\n const h = 38;\n const lx = (x0 + x1) / 2 - w / 2;\n const below = !rising;\n const ly = below ? y1 + 6 : y0 - h - 6;\n roundRect(ctx, lx, ly, w, h, 4);\n ctx.fillStyle = color;\n ctx.fill();\n ctx.fillStyle = c.textOn(color);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(lines[0], lx + w / 2, ly + 11);\n ctx.fillText(lines[1], lx + w / 2, ly + 27);\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { TradingDrawing, TradingDrawingTool, TradingLineStyle } from './types.cjs';
|
|
2
|
+
/** Converts between anchors and the pixels of the price pane */
|
|
3
|
+
export interface DrawingMapper {
|
|
4
|
+
/** x (CSS px) of a logical bar index */
|
|
5
|
+
x(index: number): number;
|
|
6
|
+
/** y (CSS px) of a price */
|
|
7
|
+
y(price: number): number;
|
|
8
|
+
/** Logical index of a time (extrapolated outside the bars) */
|
|
9
|
+
index(time: number): number;
|
|
10
|
+
/** Plot rectangle of the price pane */
|
|
11
|
+
left: number;
|
|
12
|
+
right: number;
|
|
13
|
+
top: number;
|
|
14
|
+
bottom: number;
|
|
15
|
+
}
|
|
16
|
+
export interface Point {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
}
|
|
20
|
+
/** Fibonacci retracement levels */
|
|
21
|
+
export declare const FIB_LEVELS: number[];
|
|
22
|
+
/** Number of anchors of a tool */
|
|
23
|
+
export declare const anchorCount: (tool: Exclude<TradingDrawingTool, "cursor">) => 2 | 1;
|
|
24
|
+
export declare const screenPoints: (drawing: TradingDrawing, m: DrawingMapper) => Point[];
|
|
25
|
+
/** Part of a drawing under the pointer */
|
|
26
|
+
export type DrawingHit = {
|
|
27
|
+
part: "handle";
|
|
28
|
+
index: number;
|
|
29
|
+
} | {
|
|
30
|
+
part: "body";
|
|
31
|
+
};
|
|
32
|
+
export declare const hitDrawing: (drawing: TradingDrawing, m: DrawingMapper, p: Point, tolerance?: number) => DrawingHit | null;
|
|
33
|
+
export declare const setDash: (ctx: CanvasRenderingContext2D, style: TradingLineStyle | undefined, width: number) => void;
|
|
34
|
+
/** Values and helpers the painter needs from the chart */
|
|
35
|
+
export interface DrawingPaintContext {
|
|
36
|
+
/** Resolved CSS color of a drawing */
|
|
37
|
+
color: string;
|
|
38
|
+
/** Text color on the plot */
|
|
39
|
+
text: string;
|
|
40
|
+
/** Background of the plot (handles) */
|
|
41
|
+
background: string;
|
|
42
|
+
/** Up / down colors (measure) */
|
|
43
|
+
up: string;
|
|
44
|
+
down: string;
|
|
45
|
+
font: string;
|
|
46
|
+
formatPrice(price: number): string;
|
|
47
|
+
formatPercent(value: number): string;
|
|
48
|
+
/** `"24 bars, 2d 4h"` */
|
|
49
|
+
formatSpan(bars: number, ms: number): string;
|
|
50
|
+
/** Readable text color on a fill */
|
|
51
|
+
textOn(fill: string): string;
|
|
52
|
+
}
|
|
53
|
+
/** Paints a drawing (the context is clipped to the price pane) */
|
|
54
|
+
export declare const paintDrawing: (ctx: CanvasRenderingContext2D, drawing: TradingDrawing, m: DrawingMapper, c: DrawingPaintContext, state: {
|
|
55
|
+
selected: boolean;
|
|
56
|
+
hovered: boolean;
|
|
57
|
+
}) => void;
|