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.cjs","names":["parseColor","luminance","styleElement","createStore","createPyramid","DAY","readTheme","resolveLocale","localeLabels","TRADING_LABELS","toCss","priceFormatter","parseTimeframe","indexOfTime","lowerBoundTime","detectPrecision","inferTimeframe","buildStudies","LINE_COLORS","inputLength","barAt","storeUpdate","createScale","pyramidLevel","toScaled","shiftTime","boundaryWeight","pickTicks","tickText","formatPercent","stepDecimals","fromScaled","formatVolume","formatFixed","packColor","candleMetrics","yOf","LineBuffer","BarBuffer","pixelRange","yOfScaled","AreaBuffer","clampRange","mix","valueAt","HOUR","MINUTE","fill","formatCountdown","scaledAt","formatCrosshairTime","scaleTicks","readBar","hitDrawing","anchorCount","themeColorsChanged","watchTheme","createRenderer","createDataCanvas","storeAppend","storePrepend","require_dom","require_color","require_locale","require_scale","require_detect","require_theme","require_drawings","require_format","require_geometry","require_indicators","require_labels","require_scale$1","require_store","require_studies","TIME_AXIS","MIN_AXIS","MAX_SPACING","MIN_PANE","PRICE","UP","DOWN","WARNING","PRIMARY","PRICE_LINE_TITLES","clamp","v","lo","hi","textOn","color","fill","finite","createTradingChart","doc","container","win","options","initial","destroyed","make","tag","style","root","layer","background","foreground","legends","jump","live","store","pyramid","ha","haValid","haPyramid","studies","studyValid","visibility","compares","dataVersion","tailVersion","detectedPrecision","inferredTimeframe","spacing","right","plotW","plotH","axisW","width","height","panes","scales","paneHeights","vis","volumeOverlayMax","theme","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","texts","resolveTexts","labels","n","redUp","upCss","downCss","css","fallback","value","alpha","precision","priceFormat","priceFormatKey","formatPrice","key","timeframe","tfMs","font","weight","size","isVisible","study","xOf","index","indexAt","x","timeAt","count","i","indexOfTimeExt","last","time","display","markDirty","from","c","level","l","p","syncDerived","valid","next","j","afterDataChange","invalidate","rebuildStudies","reused","id","s","rebuildCompares","data","series","a","b","d","followsRealtime","replaceBars","bars","scale","applyBarsOption","length","first","follow","before","at","added","layoutPanes","paneStudies","available","wanted","total","max","k","heights","h","priceHeight","scaleOf","mode","price","top","paneAt","y","clampView","minSpacing","computeVisible","left","src","cols","i0","i1","r0","r1","groupCenter","g","groupValue","values","groupBars","firstVisibleIndex","compareBase","compareScaled","base","baselinePrice","autoscale","pane","closeOnly","vol","out","timeTicks","tf","intraday","offset","gEnd","groupTime","candidates","prev","sample","gap","ctx","t","paneTickText","scaled","studyValueText","createLayers","result","up","down","upP","downP","bg","metrics","dpr","X","histogramHalf","volumeColors","bottom","Y","lineLayer","buffer","isLive","ga","gb","toY","lineWidth","st","lineColor","area","yb","upArea","downArea","upLine","downLine","px","py","point","hollow","ohlc","wick","body","wicks","bodies","caps","ticks","tick","o","cx","wt","wb","range","side","bt","bb","segments","edges","box","items","y0","strong","faded","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","best","yy","drawingMapper","formatSpan","abs","ms","parts","days","hours","minutes","paintForeground","muted","bgCss","upC","downC","hiG","loG","below","leftSide","label","stack","many","marker","sell","anchor","dir","tip","mapper","context","drawing","lastClose","lineStyle","titleKey","title","pnl","pnlFill","widths","part","grip","lastLine","lastColor","covered","start","end","date","cross","labelBg","textValue","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","bands","updateJump","emitView","show","visibleRange","local","rect","zoomAt","factor","anchorAt","setTool","notify","select","commitDrawings","finishDraft","done","hitLine","hitDrawingAt","hit","separatorAt","updateCursor","cursor","nextHover","onPointerDown","sep","above","onPointerMove","distance","mid","dx","lastIndex","dy","nextBelow","step","di","ds","points","onPointerUp","onPointerLeave","onWheel","unit","modifier","onDoubleClick","instance","announce","page","move","current","target","keyboard","resizeObserver","refreshTheme","unwatchTheme","langObserver","applyStatic","initRenderer","token","exclude","symbol","wantTimer","applyOptions","previous","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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"}
|